org.jboss.bpm.console.client.model.DTOParser.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.bpm.console.client.model.DTOParser.java

Source

/*
 * 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.json.client.*;

import org.jboss.bpm.console.client.util.ConsoleLog;
import org.jboss.bpm.console.client.util.JSONWalk;
import org.jboss.bpm.console.client.util.JSONWalk.JSONWrapper;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author Heiko.Braun <heiko.braun@jboss.com>
 */
public class DTOParser {
    public static List<TaskRef> parseTaskReferenceList(String json) {
        ConsoleLog.debug("parse " + json);

        List<TaskRef> results = new ArrayList<TaskRef>();

        JSONValue root = JSONParser.parse(json);
        JSONArray array = JSONWalk.on(root).next("tasks").asArray();

        for (int i = 0; i < array.size(); ++i) {
            JSONObject item = array.get(i).isObject();
            TaskRef ref = parseTaskReference(item);
            results.add(ref);
        }

        return results;
    }

    public static TaskRef parseTaskReference(JSONObject item) {
        ConsoleLog.debug("parse " + item);

        long id = JSONWalk.on(item).next("id").asLong();

        // optional instanceId
        JSONWalk.JSONWrapper instanceIdWrapper = JSONWalk.on(item).next("processInstanceId");
        String executionId = instanceIdWrapper != null ? instanceIdWrapper.asString() : "n/a";

        // optional processId
        JSONWalk.JSONWrapper processIdWrapper = JSONWalk.on(item).next("processId");
        String processId = processIdWrapper != null ? processIdWrapper.asString() : "n/a";

        String name = JSONWalk.on(item).next("name").asString();
        String assignee = JSONWalk.on(item).next("assignee").asString();
        boolean isBlocking = JSONWalk.on(item).next("isBlocking").asBool();
        boolean isSignalling = JSONWalk.on(item).next("isSignalling").asBool();

        TaskRef ref = new TaskRef(id, executionId, processId, name, assignee, isSignalling, isBlocking);

        // task url reference maybe null
        JSONWalk.JSONWrapper jsonWrapper = JSONWalk.on(item).next("url");
        if (jsonWrapper != null) {
            String url = jsonWrapper.asString();
            ref.setUrl(url);
        } else {
            ref.setUrl("");
        }

        // participant users
        JSONArray arrUsers = JSONWalk.on(item).next("participantUsers").asArray();
        for (int k = 0; k < arrUsers.size(); ++k) {
            JSONValue jsonValue = arrUsers.get(k);
            ParticipantRef p = parseParticipant(jsonValue, k);
            ref.getParticipantUsers().add(p);
        }

        JSONArray arrGroups = JSONWalk.on(item).next("participantGroups").asArray();
        for (int k = 0; k < arrGroups.size(); ++k) {
            JSONValue jsonValue = arrGroups.get(k);
            ParticipantRef p = parseParticipant(jsonValue, k);
            ref.getParticipantGroups().add(p);
        }

        if (isSignalling) {
            JSONArray arr = JSONWalk.on(item).next("outcomes").asArray();
            for (int k = 0; k < arr.size(); ++k) {
                JSONValue jsonValue = arr.get(k);
                if (jsonValue.toString().equals("null")) {
                    ConsoleLog.warn("FIXME JBPM-1828: Null value on outcomes:" + arr.toString());
                    continue; // TODO: JBPM-1828
                }
                JSONString t = jsonValue.isString();
                ref.getOutcomes().add(t.stringValue());
            }

        }

        int prio = JSONWalk.on(item).next("priority").asInt();
        ref.setPriority(prio);

        JSONWalk.JSONWrapper dueDate = JSONWalk.on(item).next("dueDate");
        if (dueDate != null) // optional
        {
            Date due = dueDate.asDate();
            ref.setDueDate(due);
        }

        JSONWalk.JSONWrapper createDate = JSONWalk.on(item).next("createDate");
        if (createDate != null) // optional
        {
            Date due = createDate.asDate();
            ref.setDueDate(due);
        }

        return ref;
    }

    private static ParticipantRef parseParticipant(JSONValue jsonValue, int k) {
        String type = JSONWalk.on(jsonValue).next("type").asString();
        String idRef = JSONWalk.on(jsonValue).next("idRef").asString();
        ParticipantRef p = new ParticipantRef(type, idRef);

        boolean isGroup = JSONWalk.on(jsonValue).next("isGroup").asBool();
        p.setGroup(isGroup);

        return p;
    }

    public static List<ProcessInstanceRef> parseProcessInstances(JSONValue jso) {
        List<ProcessInstanceRef> results = new ArrayList<ProcessInstanceRef>();

        JSONArray arr = JSONWalk.on(jso).next("instances").asArray();
        for (int i = 0; i < arr.size(); i++) {
            results.add(parseProcessInstance(arr.get(i)));
        }
        return results;
    }

    public static ProcessInstanceRef parseProcessInstance(JSONValue root) {
        ConsoleLog.debug("parse " + root);

        String id = JSONWalk.on(root).next("id").asString();
        String definitionId = JSONWalk.on(root).next("definitionId").asString();
        Date start = JSONWalk.on(root).next("startDate").asDate();

        JSONWalk.JSONWrapper endDateJSON = JSONWalk.on(root).next("endDate");
        Date end = null;
        if (endDateJSON != null)
            end = endDateJSON.asDate();

        boolean suspended = JSONWalk.on(root).next("suspended").asBool();

        ProcessInstanceRef processInstance = new ProcessInstanceRef(id, definitionId, start, end, suspended);

        // 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;
    }

    public static TokenReference parseTokenReference(JSONObject jso) {
        ConsoleLog.debug("parse " + jso);

        String rootTokenId = JSONWalk.on(jso).next("id").asString();
        //String name = JSONWalk.on(jso).next("name").asString();
        JSONWalk.JSONWrapper nodeNameWrapper = JSONWalk.on(jso).next("currentNodeName");
        String nodeName = nodeNameWrapper != null ? nodeNameWrapper.asString() : "";

        // TDOD: Fix token name
        TokenReference rt = new TokenReference(rootTokenId, "", nodeName);

        boolean canBeSignaled = JSONWalk.on(jso).next("canBeSignaled").asBool();
        rt.setCanBeSignaled(canBeSignaled);

        JSONArray signals = JSONWalk.on(jso).next("availableSignals").asArray();
        for (int i = 0; i < signals.size(); i++) {
            JSONValue jsonValue = signals.get(i);
            if (jsonValue.toString().equals("null")) {
                ConsoleLog.warn("FIXME JBPM-1828: Null value on availableSignals:" + signals.toString());
                continue; // TODO: JBPM-1828
            }
            JSONString item = jsonValue.isString();
            rt.getAvailableSignals().add(item.stringValue());
        }

        JSONArray childArr = JSONWalk.on(jso).next("children").asArray();
        for (int i = 0; i < childArr.size(); i++) {
            JSONObject item = childArr.get(i).isObject();
            rt.getChildren().add(parseTokenReference(item));
        }

        return rt;
    }

    public static List<String> parseStringArray(JSONValue jso) {
        List<String> result = new ArrayList<String>();

        JSONArray jsonArray = jso.isArray();

        if (null == jsonArray)
            throw new IllegalArgumentException("Not an array: " + jso);

        for (int i = 0; i < jsonArray.size(); i++) {
            JSONValue jsonValue = jsonArray.get(i);
            if (jsonValue.toString().equals("null")) {
                ConsoleLog.warn("FIXME JBPM-1828: Null value on string array:" + jsonArray.toString());
                continue; // TODO: JBPM-1828
            }
            JSONString item = jsonValue.isString();
            result.add(item.stringValue());
        }

        return result;
    }

    public static List<DeploymentRef> parseDeploymentRefList(JSONValue json) {
        ConsoleLog.debug("parse " + json);

        List<DeploymentRef> result = new ArrayList<DeploymentRef>();

        JSONArray jsonArray = JSONWalk.on(json).next("deployments").asArray();
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONValue item = jsonArray.get(i);
            String id = JSONWalk.on(item).next("id").asString();
            boolean suspended = JSONWalk.on(item).next("suspended").asBool();

            String name = JSONWalk.on(item).next("name").asString();
            JSONWalk.JSONWrapper tsWrapper = JSONWalk.on(item).next("timestamp");
            long ts = tsWrapper != null ? tsWrapper.asLong() : -1;

            DeploymentRef ref = new DeploymentRef(id, suspended);
            ref.setName(name);
            ref.setTimestamp(ts);

            // definitions
            JSONArray defArr = JSONWalk.on(item).next("definitions").asArray();
            for (int c = 0; c < defArr.size(); c++) {
                String defId = defArr.get(c).isString().stringValue();
                ref.getDefinitions().add(defId);
            }

            // resource names
            JSONArray resArr = JSONWalk.on(item).next("resourceNames").asArray();
            for (int c = 0; c < resArr.size(); c++) {
                String resourceName = resArr.get(c).isString().stringValue();
                ref.getResourceNames().add(resourceName);
            }

            result.add(ref);
        }

        return result;
    }

    public static List<JobRef> parseJobRefList(JSONValue json) {
        ConsoleLog.debug("parse " + json);

        List<JobRef> result = new ArrayList<JobRef>();

        JSONArray jsonArray = JSONWalk.on(json).next("jobs").asArray();
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONValue item = jsonArray.get(i);
            String id = JSONWalk.on(item).next("id").asString();
            String type = JSONWalk.on(item).next("type").asString();

            JobRef ref = new JobRef();
            ref.setId(id);
            ref.setType(type);

            JSONWalk.JSONWrapper tsEl = JSONWalk.on(item).next("timestamp");
            if (tsEl != null)
                ref.setTimestamp(tsEl.asLong());

            JSONWalk.JSONWrapper err = JSONWalk.on(item).next("errMsg");
            if (err != null) // optional
                ref.setErrMsg(err.asString());

            result.add(ref);
        }

        return result;
    }

    public static List<ActiveNodeInfo> parseActiveNodeInfo(String json) {
        ConsoleLog.debug("Parse: " + json);

        List<ActiveNodeInfo> activeNodeInfos = new ArrayList<ActiveNodeInfo>();
        JSONValue root = JSONParser.parse(json);
        //int diagramWidth = JSONWalk.on(root).next("diagramWidth").asInt();
        //int diagramHeight = JSONWalk.on(root).next("diagramHeight").asInt();

        if (root instanceof JSONArray) {
            JSONArray array = (JSONArray) root;

            for (int i = 0; i < array.size(); i++) {
                JSONWalk walk = JSONWalk.on(array.get(i));
                JSONWrapper wrapper = walk.next("activeNode");
                JSONObject activeNode = wrapper.asObject();

                int x = JSONWalk.on(activeNode).next("x").asInt();
                int y = JSONWalk.on(activeNode).next("y").asInt();

                int width = JSONWalk.on(activeNode).next("width").asInt();
                int height = JSONWalk.on(activeNode).next("height").asInt();
                String name = JSONWalk.on(activeNode).next("name").asString();

                activeNodeInfos.add(new ActiveNodeInfo(-1, -1, new DiagramNodeInfo(name, x, y, width, height)));
                wrapper = walk.next("activeNode");
            }
        }
        return activeNodeInfos;
    }
}