Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
...
This article demonstrate the implementation of the web socket support plugin. The plugin is available as a form elementplugin.
Note |
---|
Drag "Web Socket" form element into the form and tick on the "Enable Websocket" in the configuration. Feel free to make any changes to other properties.
Pay attention to the
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;
}
}
} |
Figure 1:
At Runtime, enter a message as seen in figure 2 then send it afterwards.
Figure 2:
Figure 3:
...
Figure 4:
Figure 5: