Frontend UI extensions stuff

Internatinalization

Register new translations from Database query.

INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('extension', 'new_extension.button.add', 'Add', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('extension', 'new_extension.button.add', 'Añadir', 'es-ES');

Use in your code:

GeneralComunicator.i18nExtension("new_extension.button.add");

Also can be used default OpenKM translations:

GeneralComunicator.i18n("button.close");

Sample

Remember any extension internationalized must implements LanguageHandlerExtension. Each time the user interface change language this handler is fired.

package com.openkm.extension.frontend.client;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Image;
import com.openkm.extension.frontend.client.util.OKMExtensionBundleExampleResources;
import com.openkm.frontend.client.bean.GWTDocument;
import com.openkm.frontend.client.bean.GWTMail;
import com.openkm.frontend.client.bean.GWTNode;
import com.openkm.frontend.client.bean.GWTRecord;
import com.openkm.frontend.client.extension.event.HasLanguageEvent;
import com.openkm.frontend.client.extension.event.HasLanguageEvent.LanguageEventConstant;
import com.openkm.frontend.client.extension.event.handler.LanguageHandlerExtension;
import com.openkm.frontend.client.extension.widget.toolbar.ToolBarButtonExtension;

public class ToolBarButtonExample {

    ToolBarButton button;
    String title = "title";
    String lang = "en-GB";

    public ToolBarButtonExample() {
        button = new ToolBarButton(new Image(OKMExtensionBundleExampleResources.INSTANCE.box()), title, new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                Window.alert("make some operation");
            }
        });
    }

    /**
     * ToolBarButtonExtension
     */
    public ToolBarButtonExtension getButton() {
        return button;
    }

    /**
     * ToolBarButton
     *
     * @author jllort
     */
    private class ToolBarButton extends ToolBarButtonExtension implements LanguageHandlerExtension {

        public ToolBarButton(Image image, String title, ClickHandler handler) {
            super(image, title, handler);
        }

        @Override
        public void checkPermissions(GWTNode node, GWTNode nodeParent, int originPanel) {
        }

        @Override
        public void checkPermissions(GWTDocument doc, GWTNode node) {
        }

        @Override
        public void checkPermissions(GWTMail mail, GWTNode node) {
        }

        @Override
        public void checkPermissions(GWTRecord record, GWTNode node) {
        }

        @Override
        public void enable(boolean enable) {
        }

        @Override
        public boolean isEnabled() {
            return false;
        }

        @Override
        public void onChange(LanguageEventConstant event) {
            if (event.equals(HasLanguageEvent.LANGUAGE_CHANGED)) {
                Window.alert("language changed");
            }
        }
    }
}

Registering RPC ( Remote Process Call ) service

Servlets are used to do GWT RPC ( Remote Process Calls ). In order to registering a new Servlet file ( web.xml ) must be modified and OpenKM re-compiled.

Into web.xml ( src/main/webapp/WEB-INF ) must be added the servlet declaration:

<servlet>
    <servlet-name>SomeServletName</servlet-name>
    <servlet-class>SomeJavaClassName</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>SomeServletName</servlet-name>
    <url-pattern>/SomeServletName</url-pattern>
</servlet-mapping>

RPCService class defines all RPC constants service that can be used from GWT:

ServiceDefTarget endPoint = (ServiceDefTarget) messageService;
endPoint.setServiceEntryPoint(RPCService.MessageService);
messageService.deleteSent(1, new AsyncCallback<Object>() {
        @Override
	public void onSuccess(Object result) {
	}
 
	@Override
	public void onFailure(Throwable caught) {
	}
});