001: package org.enhydra.jawe;
002:
003: import java.util.Arrays;
004: import java.util.Iterator;
005: import java.util.List;
006:
007: import org.enhydra.shark.xpdl.XMLComplexElement;
008: import org.enhydra.shark.xpdl.XMLElement;
009: import org.enhydra.shark.xpdl.elements.ExtendedAttribute;
010: import org.enhydra.shark.xpdl.elements.ExtendedAttributes;
011: import org.enhydra.shark.xpdl.elements.ExternalPackage;
012: import org.enhydra.shark.xpdl.elements.Package;
013:
014: /**
015: * Various utilities for handling extended attributes for old and new version of JaWE.
016: *
017: * @author Sasa Bojanic
018: */
019: public class JaWEEAHandler {
020:
021: // --------------------------
022: // Extended attributes
023: public static final String EA_EDITING_TOOL = "EDITING_TOOL";
024:
025: public static final String EA_EDITING_TOOL_VERSION = "EDITING_TOOL_VERSION";
026:
027: public static final String EA_JAWE_CONFIGURATION = "JaWE_CONFIGURATION";
028:
029: public static final String EA_JAWE_TYPE = "JaWE_TYPE";
030:
031: private static final String[] STANDARD_TYPES_ARRAY = new String[] {
032: JaWEConstants.ACTIVITY_SET_TYPE_DEFAULT,
033: JaWEConstants.ACTIVITY_TYPE_BLOCK,
034: JaWEConstants.ACTIVITY_TYPE_NO,
035: JaWEConstants.ACTIVITY_TYPE_ROUTE,
036: JaWEConstants.ACTIVITY_TYPE_SUBFLOW,
037: JaWEConstants.ACTIVITY_TYPE_TOOL,
038: JaWEConstants.APPLICATION_TYPE_DEFAULT,
039: JaWEConstants.DATA_FIELD_DEFAULT,
040: JaWEConstants.DEADLINE_DEFAULT,
041: JaWEConstants.ENUMERATION_VALUE_DEFAULT,
042: JaWEConstants.EXTENDED_ATTRIBUTE_DEFAULT,
043: JaWEConstants.EXTERNAL_PACKAGE_DEFAULT,
044: JaWEConstants.FORMAL_PARAMETER_DEFAULT,
045: JaWEConstants.MEMBER_DEFAULT,
046: JaWEConstants.NAMESPACE_DEFAULT,
047: JaWEConstants.PACKAGE_DEFAULT,
048: JaWEConstants.PACKAGE_EXTERNAL,
049: JaWEConstants.PACKAGE_TRANSIENT,
050: JaWEConstants.PARTICIPANT_TYPE_HUMAN,
051: JaWEConstants.PARTICIPANT_TYPE_ORGANIZATIONAL_UNIT,
052: JaWEConstants.PARTICIPANT_TYPE_RESOURCE,
053: JaWEConstants.PARTICIPANT_TYPE_RESOURCE_SET,
054: JaWEConstants.PARTICIPANT_TYPE_ROLE,
055: JaWEConstants.PARTICIPANT_TYPE_SYSTEM,
056: JaWEConstants.RESPONSIBLE_DEFAULT,
057: JaWEConstants.TOOL_DEFAULT,
058: JaWEConstants.TRANSITION_TYPE_CONDITIONAL,
059: JaWEConstants.TRANSITION_TYPE_DEFAULTEXCEPTION,
060: JaWEConstants.TRANSITION_TYPE_EXCEPTION,
061: JaWEConstants.TRANSITION_TYPE_OTHERWISE,
062: JaWEConstants.TRANSITION_TYPE_UNCONDITIONAL,
063: JaWEConstants.TYPE_DECLARATION_DEFAULT,
064: JaWEConstants.WORKFLOW_PROCESS_TYPE_DEFAULT };
065:
066: private static final List STANDARD_TYPES_LIST = Arrays
067: .asList(STANDARD_TYPES_ARRAY);
068:
069: // ****** EXTERNAL PACKAGE
070: public static final String EA_JAWE_EXTERNAL_PACKAGE_ID = "EXTERNAL_PACKAGE_ID";
071:
072: public static String getEditingTool(Package pkg) {
073: String editingTool = "";
074: ExtendedAttribute ea = JaWEEAHandler.getEditingToolEA(pkg);
075: if (ea != null) {
076: editingTool = ea.getVValue();
077: }
078: return editingTool;
079: }
080:
081: public static void setEditingTool(Package pkg, String tool) {
082: ExtendedAttribute ea = JaWEEAHandler.getEditingToolEA(pkg);
083: if (ea == null) {
084: ExtendedAttributes eas = pkg.getExtendedAttributes();
085: ea = (ExtendedAttribute) eas.generateNewElement();
086: ea.setName(JaWEEAHandler.EA_EDITING_TOOL);
087: ea.setVValue(tool);
088: eas.add(0, ea);
089: } else {
090: ea.setVValue(tool);
091: }
092: }
093:
094: protected static ExtendedAttribute getEditingToolEA(Package pkg) {
095: return pkg.getExtendedAttributes()
096: .getFirstExtendedAttributeForName(
097: JaWEEAHandler.EA_EDITING_TOOL);
098: }
099:
100: public static String getEditingToolVersion(Package pkg) {
101: String editingTool = "";
102: ExtendedAttribute ea = JaWEEAHandler
103: .getEditingToolVersionEA(pkg);
104: if (ea != null) {
105: editingTool = ea.getVValue();
106: }
107: return editingTool;
108: }
109:
110: public static void setEditingToolVersion(Package pkg,
111: String toolVersion) {
112: ExtendedAttribute ea = JaWEEAHandler
113: .getEditingToolVersionEA(pkg);
114: if (ea == null) {
115: ExtendedAttributes eas = pkg.getExtendedAttributes();
116: ea = (ExtendedAttribute) eas.generateNewElement();
117: ea.setName(JaWEEAHandler.EA_EDITING_TOOL_VERSION);
118: ea.setVValue(toolVersion);
119: eas.add(0, ea);
120: } else {
121: ea.setVValue(toolVersion);
122: }
123: }
124:
125: protected static ExtendedAttribute getEditingToolVersionEA(
126: Package pkg) {
127: return pkg.getExtendedAttributes()
128: .getFirstExtendedAttributeForName(
129: JaWEEAHandler.EA_EDITING_TOOL_VERSION);
130: }
131:
132: public static String getJaWEConfig(Package pkg) {
133: String jaweConfig = "";
134: ExtendedAttribute ea = JaWEEAHandler.getJaWEConfigEA(pkg);
135: if (ea != null) {
136: jaweConfig = ea.getVValue();
137: }
138: return jaweConfig;
139: }
140:
141: public static void setJaWEConfig(Package pkg, String config) {
142: ExtendedAttribute ea = JaWEEAHandler.getJaWEConfigEA(pkg);
143: if (ea == null) {
144: ExtendedAttributes eas = pkg.getExtendedAttributes();
145: ea = (ExtendedAttribute) eas.generateNewElement();
146: ea.setName(JaWEEAHandler.EA_JAWE_CONFIGURATION);
147: ea.setVValue(config);
148: eas.add(0, ea);
149: } else {
150: ea.setVValue(config);
151: }
152: }
153:
154: protected static ExtendedAttribute getJaWEConfigEA(Package pkg) {
155: return pkg.getExtendedAttributes()
156: .getFirstExtendedAttributeForName(
157: JaWEEAHandler.EA_JAWE_CONFIGURATION);
158: }
159:
160: public static boolean removeOldPackageEAs(Package pkg) {
161: boolean removed = false;
162: ExtendedAttributes eas = pkg.getExtendedAttributes();
163: ExtendedAttribute ea = eas
164: .getFirstExtendedAttributeForName("MadeBy");
165: if (ea != null) {
166: eas.remove(ea);
167: removed = true;
168: }
169: ea = eas.getFirstExtendedAttributeForName("Version");
170: if (ea != null) {
171: eas.remove(ea);
172: removed = true;
173: }
174: return removed;
175: }
176:
177: // ----------------------------------------------------------------------------------------------
178:
179: public static boolean adjustExternalPackageEAs(Package pkg) {
180: boolean changed = false;
181:
182: Iterator it = pkg.getExternalPackages().toElements().iterator();
183: while (it.hasNext()) {
184: ExternalPackage ep = (ExternalPackage) it.next();
185: ExtendedAttribute ea = ep.getExtendedAttributes()
186: .getFirstExtendedAttributeForName(
187: JaWEEAHandler.EA_JAWE_EXTERNAL_PACKAGE_ID);
188: String extPkgId = pkg.getExternalPackageId(ep.getHref());
189: if (extPkgId != null) {
190: if (ea == null) {
191: JaWEEAHandler.setExternalPackageEA(ep, extPkgId);
192: changed = true;
193: } else {
194: String eav = ea.getVValue();
195: if (!eav.equals(extPkgId)) {
196: ea.setVValue(extPkgId);
197: changed = true;
198: }
199: }
200: }
201: }
202:
203: return changed;
204: }
205:
206: public static void setExternalPackageEA(ExternalPackage ep,
207: String extPkgId) {
208: ExtendedAttributes eas = ep.getExtendedAttributes();
209: ExtendedAttribute ea = (ExtendedAttribute) eas
210: .generateNewElement();
211: ea.setName(JaWEEAHandler.EA_JAWE_EXTERNAL_PACKAGE_ID);
212: ea.setVValue(extPkgId);
213: eas.add(0, ea);
214: }
215:
216: public static void setJaWEType(XMLElement el, String type) {
217: if (el instanceof XMLComplexElement) {
218: if (STANDARD_TYPES_LIST.contains(type))
219: return;
220:
221: XMLComplexElement cel = (XMLComplexElement) el;
222: ExtendedAttributes eas = (ExtendedAttributes) cel
223: .get("ExtendedAttributes");
224: if (eas != null) {
225: ExtendedAttribute ea = eas
226: .getFirstExtendedAttributeForName(JaWEEAHandler.EA_JAWE_TYPE);
227: if (ea == null) {
228: ea = (ExtendedAttribute) eas.generateNewElement();
229: }
230: ea.setName(JaWEEAHandler.EA_JAWE_TYPE);
231: ea.setVValue(type);
232: eas.add(0, ea);
233: }
234: }
235: }
236:
237: public static String getJaWEType(XMLElement el) {
238: String type = null;
239: if (el instanceof XMLComplexElement) {
240: XMLComplexElement cel = (XMLComplexElement) el;
241: ExtendedAttributes eas = (ExtendedAttributes) cel
242: .get("ExtendedAttributes");
243: if (eas != null) {
244: ExtendedAttribute ea = eas
245: .getFirstExtendedAttributeForName(JaWEEAHandler.EA_JAWE_TYPE);
246: if (ea != null) {
247: type = ea.getVValue();
248: }
249: }
250: }
251: return type;
252: }
253:
254: }
|