/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.bpm.console.client.model;
import com.google.gwt.core.client.JsArray;
import org.jboss.bpm.report.model.ReportParameter;
import org.jboss.bpm.report.model.ReportReference;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author Heiko.Braun <heiko.braun@jboss.com>
*/
public class JSOParser
{
public static List<ProcessDefinitionRef> parseProcessDefinitions(String json)
{
List<ProcessDefinitionRef> results = new ArrayList<ProcessDefinitionRef>();
JSOModel rootModel = JSOModel.fromJson(json);
JsArray<JSOModel> definitions = rootModel.getArray("definitions");
for(int i=0; i<definitions.length(); i++)
{
JSOModel def = definitions.get(i);
results.add(parseProcessDefinition(def));
}
return results;
}
public static ProcessDefinitionRef parseProcessDefinition(JSOModel rootModel)
{
ProcessDefinitionRef def = new ProcessDefinitionRef();
def.setId(rootModel.get("id"));
def.setName(rootModel.get("name"));
def.setVersion(rootModel.getLong("version"));
def.setKey(rootModel.get("key"));
def.setDeploymentId(rootModel.get("deploymentId"));
def.setSuspended(rootModel.getBoolean("suspended"));
def.setPackageName(rootModel.get("packageName", ""));
def.setFormUrl(rootModel.get("formUrl", null));
def.setDiagramUrl(rootModel.get("diagramUrl", null));
return def;
}
public static List<ProcessInstanceRef> parseProcessInstances(String json)
{
System.out.println(json);
List<ProcessInstanceRef> results = new ArrayList<ProcessInstanceRef>();
JSOModel rootModel = JSOModel.fromJson(json);
JsArray<JSOModel> instances = rootModel.getArray("instances");
for(int i=0; i<instances.length(); i++)
{
results.add(parseProcessInstance(instances.get(i)));
}
return results;
}
public static ProcessInstanceRef parseProcessInstance(JSOModel root)
{
String id = root.get("id");
String definitionId = root.get("definitionId");
Date start = root.getDate("startDate");
Date end = root.getDate("endDate", null);
boolean suspended = root.getBoolean("suspended");
ProcessInstanceRef processInstance = new ProcessInstanceRef(
id, definitionId,
start, end,
suspended
);
JSOModel rootTokenJson = root.getObject("rootToken");
if (rootTokenJson != null) {
TokenReference rootToken = parseTokenReference(rootTokenJson);
processInstance.setRootToken(rootToken);
}
// tokens
/*JSONWalk.JSONWrapper rootTokenJSON = JSONWalk.on(root).next("rootToken");
if (rootTokenJSON != null) {
JSONObject tokJso = rootTokenJSON.asObject();
TokenReference rootToken = parseTokenReference(tokJso);
processInstance.setRootToken(rootToken);
} */
return processInstance;
}
private static TokenReference parseTokenReference(JSOModel rootToken) {
TokenReference tokenReference = new TokenReference();
tokenReference.setId(rootToken.get("id"));
tokenReference.setCurrentNodeName(rootToken.get("currentNodeName"));
tokenReference.setCanBeSignaled(rootToken.getBoolean("canBeSignaled"));
if (rootToken.hasKey("name")) {
tokenReference.setName(rootToken.get("name"));
}
JsArray<JSOModel> tokenChildrenJson = rootToken.getArray("children");
// parse children elements
if (tokenChildrenJson != null) {
List<TokenReference> children = new ArrayList<TokenReference>();
for (int i = 0; i < tokenChildrenJson.length(); i++) {
children.add(parseTokenReference(tokenChildrenJson.get(i)));
}
tokenReference.setChildren(children);
}
JsArray<JSOModel> tokenSignalsJson = rootToken.getArray("availableSignals");
// parse availableSignals elements
if (tokenSignalsJson != null) {
// this will be probably always an empty array - as described in ModelAdaptor in adoptExecution method
List<String> availableSignals = new ArrayList<String>();
for (int i = 0; i < tokenSignalsJson.length(); i++) {
availableSignals.add(tokenSignalsJson.get(i).toString());
}
tokenReference.setAvailableSignals(availableSignals);
}
return tokenReference;
}
public static List<ReportReference> parseReportConfig(String json)
{
List<ReportReference> results = new ArrayList<ReportReference>();
JsArray<JSOModel> rootModel = JSOModel.arrayFromJson(json);
for(int i=0; i<rootModel.length(); i++)
{
JSOModel reportCfg = rootModel.get(i);
String title = reportCfg.get("title");
String description = reportCfg.get("description", "");
String reportFile = reportCfg.get("reportFileName");
ReportReference reportRef = new ReportReference(reportFile);
reportRef.setTitle(title);
reportRef.setDescription(description);
// parameter
JsArray<JSOModel> params = reportCfg.getArray("parameterMetaData");
for (int x=0; x < params.length(); x++)
{
JSOModel p = params.get(x);
String name = p.get("name");
String type = p.get("type");
String dataType = p.get("dataType");
ReportParameter pmd = new ReportParameter(name, ReportParameter.Type.valueOf(type));
pmd.setDataType(ReportParameter.DataType.valueOf(dataType));
// optional values
pmd.setHelptext(p.get("helptext", ""));
pmd.setPromptText(p.get("promptText", ""));
reportRef.getParameterMetaData().add(pmd);
}
results.add(reportRef);
}
return results;
}
public static ServerStatus parseStatus(String json)
{
ServerStatus status = new ServerStatus();
JSOModel rootModel = JSOModel.fromJson(json);
JsArray<JSOModel> plugins = rootModel.getArray("plugins");
for(int i=0; i<plugins.length(); i++)
{
JSOModel item = plugins.get(i);
String type = item.get("type");
boolean avail = item.getBoolean("available");
status.getPlugins().add( new PluginInfo(type, avail) );
}
return status;
}
public static List<HistoryActivityInstanceRef> parseProcessInstanceHistory(String json)
{
List<HistoryActivityInstanceRef> results = new ArrayList<HistoryActivityInstanceRef>();
JSOModel rootModel = JSOModel.fromJson(json);
JsArray<JSOModel> historyEntires = rootModel.getArray("historyEntires");
for(int i=0; i<historyEntires.length(); i++)
{
JSOModel entry = historyEntires.get(i);
results.add(parseProcessInstanceHistory(entry));
}
return results;
}
public static HistoryActivityInstanceRef parseProcessInstanceHistory(JSOModel rootModel)
{
HistoryActivityInstanceRef def = new HistoryActivityInstanceRef();
def.setActivityName(rootModel.get("activityName"));
def.setStartTime(rootModel.getDate("startTime"));
def.setEndTime(rootModel.getDate("endTime"));
def.setExecutionId(rootModel.get("executionId"));
def.setDuration(rootModel.getLong("duration"));
return def;
}
public static List<HistoryProcessInstanceRef> parseProcessDefinitionHistory(String json)
{
List<HistoryProcessInstanceRef> results = new ArrayList<HistoryProcessInstanceRef>();
JSOModel rootModel = JSOModel.fromJson(json);
JsArray<JSOModel> historyEntires = rootModel.getArray("historyEntires");
for(int i=0; i<historyEntires.length(); i++)
{
JSOModel entry = historyEntires.get(i);
results.add(parseProcessDefinitionHistory(entry));
}
return results;
}
public static HistoryProcessInstanceRef parseProcessDefinitionHistory(JSOModel rootModel)
{
HistoryProcessInstanceRef def = new HistoryProcessInstanceRef();
def.setProcessDefinitionId(rootModel.get("processDefinitionId"));
def.setProcessInstanceId(rootModel.get("processInstanceId"));
def.setStartTime(rootModel.getDate("startTime"));
def.setEndTime(rootModel.getDate("endTime"));
def.setEndActivityName(rootModel.get("endActivityName"));
def.setState(rootModel.get("state"));
def.setKey(rootModel.get("key"));
def.setDuration(rootModel.getLong("duration"));
return def;
}
}