Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
...
This article is for people who wants to implement web socket support function into their Joget application.
...
The following is the code for the plugin.
Info |
---|
There are 4 key methods that you are required to pay attention to: public void onOpen(Session session) public void onMessage(String message, Session session) public void onClose(Session session) |
Code Block | ||
---|---|---|
| ||
package org.joget; import java.io.IOException; import java.util.Map; import javax.websocket.Session; import org.joget.apps.app.service.AppPluginUtil; import org.joget.apps.app.service.AppUtil; import org.joget.apps.form.lib.Radio; import org.joget.apps.form.model.FormBuilderPalette; import org.joget.apps.form.model.FormData; import org.joget.apps.form.model.FormRow; import org.joget.apps.form.model.FormRowSet; import org.joget.apps.form.service.FormUtil; import org.joget.commons.util.LogUtil; import org.joget.plugin.base.PluginWebSocket; import org.joget.workflow.model.service.WorkflowUserManager; public class WebSocketPlugin extends Radio implements PluginWebSocket { private final static String MESSAGE_PATH = "message/form/WebSocketPlugin"; @Override public String getName() { return "WebSocketPlugin"; } @Override public String getVersion() { return "5.0.0"; } @Override public String getClassName() { return getClass().getName(); } @Override public String getLabel() { //support i18n return AppPluginUtil.getMessage("org.joget.WebSocketPlugin.pluginLabel", getClassName(), MESSAGE_PATH); } @Override public String getDescription() { //support i18n return AppPluginUtil.getMessage("org.joget.WebSocketPlugin.pluginDesc", getClassName(), MESSAGE_PATH); } @Override public String getPropertyOptions() { return AppUtil.readPluginResource(getClass().getName(), "/properties/form/" + getName() + ".json", null, true, MESSAGE_PATH); } @Override public FormRowSet formatData(FormData formData) { FormRowSet rowSet = null; // get value String id = getPropertyString(FormUtil.PROPERTY_ID); if (id != null) { String value = FormUtil.getElementPropertyValue(this, formData); if (value != null) { // set value into Properties and FormRowSet object FormRow result = new FormRow(); result.setProperty(id, value); rowSet = new FormRowSet(); rowSet.add(result); } } return rowSet; } @Override public String renderTemplate(FormData formData, Map dataModel) { String template = "webSocketPlugin.ftl"; WorkflowUserManager wum = (WorkflowUserManager) AppUtil.getApplicationContext().getBean("workflowUserManager"); String username = wum.getCurrentUsername(); dataModel.put("username", username); String html = FormUtil.generateElementHtml(this, formData, template, dataModel); return html; } @Override public String getFormBuilderTemplate() { return "<label class='label'>" + getLabel() + "</label>"; } @Override public String getFormBuilderCategory() { return FormBuilderPalette.CATEGORY_CUSTOM; } @Override public void onOpen(Session session) { try { session.getBasicRemote().sendText("Connection established"); } catch (IOException e) { e.printStackTrace(); } } @Override public void onMessage(String message, Session session) { try { session.getBasicRemote().sendText("Server received: " + message); } catch (IOException e) { e.printStackTrace(); } } @Override public void onClose(Session session) { LogUtil.info(getClassName(), "Webscoket connection closed"); } @Override public void onError(Session session, Throwable throwable) { LogUtil.error(getClassName(), throwable, ""); } public boolean isEnabled() { if ("true".equalsIgnoreCase(getPropertyString("enableWebsocket"))) { return true; } else { return false; } } } |
...