001 /* 002 * JBoss, Home of Professional Open Source. 003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors 004 * as indicated by the @author tags. See the copyright.txt file in the 005 * distribution for a full listing of individual contributors. 006 * 007 * This is free software; you can redistribute it and/or modify it 008 * under the terms of the GNU Lesser General Public License as 009 * published by the Free Software Foundation; either version 2.1 of 010 * the License, or (at your option) any later version. 011 * 012 * This software is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this software; if not, write to the Free 019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 021 */ 022 package org.jboss.dna.sequencer.jpdl3; 023 024 import java.io.InputStream; 025 import java.util.ArrayList; 026 import java.util.List; 027 import org.jbpm.graph.def.Node; 028 import org.jbpm.graph.def.ProcessDefinition; 029 import org.jbpm.graph.def.Transition; 030 import org.jbpm.graph.node.EndState; 031 import org.jbpm.graph.node.StartState; 032 033 /** 034 * The jBPM Process definition language meta data. 035 * 036 * @author Serge Pagop 037 */ 038 public class JPDL3Metadata { 039 private String pdName; 040 private JPDL3StartStateMetadata jPDL3StartStateMetadata; 041 private JPDL3EndStateMetadata jPDL3EndStateMetadata; 042 043 044 private JPDL3Metadata() { 045 // prevent construction 046 } 047 048 /** 049 * Create an instance of {@link JPDL3Metadata} with all data of a specific jpdl xml document. 050 * 051 * @param stream - the {@link InputStream}, that represents a stream of jpdl. 052 * @return a object of {@link JPDL3Metadata}. 053 */ 054 @SuppressWarnings( {"unchecked", "cast"} ) 055 public static JPDL3Metadata instance( InputStream stream ) { 056 ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(stream); 057 if (processDefinition != null) { 058 JPDL3Metadata jplMetadata = new JPDL3Metadata(); 059 if (processDefinition.getName() != null) { 060 jplMetadata.setPdName(processDefinition.getName()); 061 } 062 List<Node> nodes = (List<Node>)processDefinition.getNodes(); 063 for (Node node : nodes) { 064 if (node instanceof StartState) { 065 StartState startState = (StartState)node; 066 JPDL3StartStateMetadata jPDL3StartStateMetadata = new JPDL3StartStateMetadata(); 067 if (startState.getName() != null) { 068 jPDL3StartStateMetadata.setName(startState.getName()); 069 } 070 List<JPDL3TransitionMetadata> transitions = new ArrayList<JPDL3TransitionMetadata>(); 071 for (Transition transition : (List<Transition>)startState.getLeavingTransitions()) { 072 JPDL3TransitionMetadata jPDL3TransitionMetadata = new JPDL3TransitionMetadata(); 073 if (transition.getName() != null) { 074 jPDL3TransitionMetadata.setName(transition.getName()); 075 } 076 Node toNode = transition.getTo(); 077 if (toNode != null) { 078 jPDL3TransitionMetadata.setTo(toNode.getName()); 079 } 080 transitions.add(jPDL3TransitionMetadata); 081 } 082 jPDL3StartStateMetadata.setTransitions(transitions); 083 jplMetadata.setStartStateMetadata(jPDL3StartStateMetadata); 084 } 085 086 if (node instanceof EndState) { 087 EndState endState = (EndState)node; 088 JPDL3EndStateMetadata jPDL3EndStateMetadata = new JPDL3EndStateMetadata(); 089 if (endState.getName() != null) { 090 jPDL3EndStateMetadata.setName(endState.getName()); 091 } 092 jplMetadata.setEndStateMetadata(jPDL3EndStateMetadata); 093 } 094 } 095 return jplMetadata; 096 } 097 return null; 098 } 099 100 /** 101 * Get the name of process definition. 102 * 103 * @return the name of the process definition. 104 */ 105 public String getPdName() { 106 return pdName; 107 } 108 109 /** 110 * Set the name of process definition. 111 * 112 * @param pdName - the name of process definition. 113 */ 114 public void setPdName( String pdName ) { 115 this.pdName = pdName; 116 } 117 118 /** 119 * @return the jPDL3StartStateMetadata. 120 */ 121 public JPDL3StartStateMetadata getStartStateMetadata() { 122 return jPDL3StartStateMetadata; 123 } 124 125 /** 126 * 127 * @return the jPDL3EndStateMetadata. 128 */ 129 public JPDL3EndStateMetadata getEndStateMetadata() { 130 return jPDL3EndStateMetadata; 131 } 132 133 134 /** 135 * @param jPDL3StartStateMetadata the jPDL3StartStateMetadata to set 136 */ 137 public void setStartStateMetadata( JPDL3StartStateMetadata jPDL3StartStateMetadata ) { 138 this.jPDL3StartStateMetadata = jPDL3StartStateMetadata; 139 } 140 141 /** 142 * @param jPDL3EndStateMetadata the jPDL3EndStateMetadata to set 143 */ 144 public void setEndStateMetadata( JPDL3EndStateMetadata jPDL3EndStateMetadata ) { 145 this.jPDL3EndStateMetadata = jPDL3EndStateMetadata; 146 } 147 }