Package org.jboss.bpm.console.client.model

Source Code of org.jboss.bpm.console.client.model.DTOParser

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

Related Classes of org.jboss.bpm.console.client.model.DTOParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.