package org.enhydra.jawe.base.panel; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; import org.enhydra.jawe.JaWE; import org.enhydra.jawe.JaWEManager; import org.enhydra.jawe.Settings; import org.enhydra.jawe.Utils; import org.enhydra.jawe.base.panel.panels.XMLActualParametersPanel; import org.enhydra.jawe.base.panel.panels.XMLBasicListPanel; import org.enhydra.jawe.base.panel.panels.XMLBasicPanel; import org.enhydra.jawe.base.panel.panels.XMLBasicTablePanel; import org.enhydra.jawe.base.panel.panels.XMLComboChoicePanel; import org.enhydra.jawe.base.panel.panels.XMLComboPanel; import org.enhydra.jawe.base.panel.panels.XMLDataTypesPanel; import org.enhydra.jawe.base.panel.panels.XMLGroupPanel; import org.enhydra.jawe.base.panel.panels.XMLLocationPanel; import org.enhydra.jawe.base.panel.panels.XMLMultiLineTextPanel; import org.enhydra.jawe.base.panel.panels.XMLPanel; import org.enhydra.jawe.base.panel.panels.XMLRadioPanel; import org.enhydra.jawe.base.panel.panels.XMLTabbedPanel; import org.enhydra.jawe.base.panel.panels.XMLTextPanel; import org.enhydra.jawe.base.panel.panels.XMLTransitionPanel; import org.enhydra.shark.utilities.SequencedHashMap; import org.enhydra.shark.xpdl.XMLAttribute; import org.enhydra.shark.xpdl.XMLCollection; import org.enhydra.shark.xpdl.XMLCollectionElement; import org.enhydra.shark.xpdl.XMLComplexChoice; import org.enhydra.shark.xpdl.XMLComplexElement; import org.enhydra.shark.xpdl.XMLElement; import org.enhydra.shark.xpdl.XMLEmptyChoiceElement; import org.enhydra.shark.xpdl.XMLSimpleElement; import org.enhydra.shark.xpdl.XMLUtil; import org.enhydra.shark.xpdl.XPDLConstants; import org.enhydra.shark.xpdl.elements.*; import org.enhydra.shark.xpdl.elements.Package; public class StandardPanelGenerator implements PanelGenerator { protected PanelContainer pc; public StandardPanelGenerator() { } public void setPanelContainer(PanelContainer pc) { this.pc = pc; } public PanelContainer getPanelContainer() { return pc; } public XMLPanel getPanel(Activities el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(Activity el) { List panels = new ArrayList(); Set hidden = getHiddenElements("XMLGroupPanel", el); for (int i = 1;; i++) { try { XMLPanel p = getPanel(el, i, hidden); if (p != null) { panels.add(p); } } catch (Exception ex) { break; } } if (panels.size() > 1) { return new XMLTabbedPanel(getPanelContainer(), el, panels, JaWEManager.getInstance().getLabelGenerator().getLabel(el), false); } else if (panels.size() == 1) { return (XMLPanel) panels.get(0); } else { return new XMLBasicPanel(); } } //CUSTOM protected XMLPanel getPanel(Activity el, int no, Set hidden) { XMLPanel p = null; List panelElements = new ArrayList(); switch(no) { case 1: // get workflow variables and formal parameters WorkflowProcess process = (WorkflowProcess) el.getParent().getParent(); Map m = XMLUtil.getPossibleVariables(process); XMLCollectionElement[] fields = (XMLCollectionElement[]) m.values().toArray(new XMLCollectionElement[0]); FormalParameters fps = process.getFormalParameters(); Map fieldMap = new HashMap(); //add workflow variables for (int i = 0; i < fields.length; i++) { fieldMap.put(fields[i].getId(), fields[i]); } // make updateable ExtendedAttributes ea = el.getExtendedAttributes(); for(Iterator it=fieldMap.keySet().iterator(); it.hasNext();) { String id = (String)it.next(); ExtendedAttribute attrib = new ExtendedAttribute(ea); attrib.setName("VariableToProcess_UPDATE"); attrib.setVValue(id); if (!ea.contains(attrib)) { ea.add(attrib); } } // generate activity panel if (!hidden.contains(el.get("Id"))) { panelElements.add(el.get("Id")); } if (!hidden.contains(el.get("Name"))) { panelElements.add(el.get("Name")); } TransitionRestrictions trs = el.getTransitionRestrictions(); if (!hidden.contains(trs) && trs.size() > 0) { TransitionRestriction tr = (TransitionRestriction) trs.get(0); panelElements.add(getPanel(tr)); } if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("GeneralKey"), true, false, true); } break; case 2: if (el.getActivityType() != XPDLConstants.ACTIVITY_TYPE_ROUTE) { if (!hidden.contains(el.get("Limit"))) { panelElements.add(el.get("Limit")); } if (!hidden.contains(el.getDeadlines())) { panelElements.add(this.getPanel(el.getDeadlines())); } if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("DeadlinesKey"), true, false, true); } } break; case 3: if (!(hidden.contains(el.getActivityTypes()))) { int type = el.getActivityType(); if (type == XPDLConstants.ACTIVITY_TYPE_SUBFLOW) { SubFlow sbflw = el.getActivityTypes().getImplementation().getImplementationTypes().getSubFlow(); p = this.getPanel(sbflw); } } break; default: throw new RuntimeException(); } return p; } //END CUSTOM public XMLPanel getPanel(ActivitySet el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(ActivitySets el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(ActivityTypes el) { return generateStandardPanel(el); } public XMLPanel getPanel(ActualParameter el) { SequencedHashMap choices = XMLUtil.getPossibleVariables(XMLUtil.getWorkflowProcess(el)); Object choosen = choices.get(el.toValue()); if (choosen == null) { if (!el.toValue().equals("")) { choosen = el.toValue(); } } SpecialChoiceElement cc = new SpecialChoiceElement(el, "", new ArrayList(choices.values()), choosen, true, "Id", el.toName(), el.isRequired()); cc.setReadOnly(el.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, true, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(ActualParameters el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(Application el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(Applications el) { return generateStandardPanel(el); } public XMLPanel getPanel(ApplicationTypes el) { return generateStandardPanel(el); } public XMLPanel getPanel(ArrayType el) { return generateStandardPanel(el); } public XMLPanel getPanel(Author el) { return generateStandardPanel(el); } public XMLPanel getPanel(Automatic el) { return new XMLBasicPanel(); } public XMLPanel getPanel(BasicType el) { return this.getPanel((XMLAttribute) el.get("Type")); } public XMLPanel getPanel(BlockActivity el) { return generateStandardPanel(el); } public XMLPanel getPanel(Codepage el) { return generateStandardPanel(el); } public XMLPanel getPanel(Condition el) { return generateStandardGroupPanel(el, true, false); } protected XMLPanel getPanel(Condition el, boolean hasTitle) { return generateStandardGroupPanel(el, hasTitle, false); } public XMLPanel getPanel(ConformanceClass el) { return generateStandardPanel(el.getGraphConformanceAttribute()); } public XMLPanel getPanel(Cost el) { return generateStandardPanel(el); } public XMLPanel getPanel(CostUnit el) { return generateStandardPanel(el); } public XMLPanel getPanel(Countrykey el) { return generateStandardPanel(el); } public XMLPanel getPanel(Created el) { return generateStandardPanel(el); } public XMLPanel getPanel(DataField el) { Set hidden = getHiddenElements("XMLGroupPanel", el); List subpanels = new ArrayList(); List groupsToShow = new ArrayList(); if (!hidden.contains(el.get("Id"))) { subpanels.add(generateStandardTextPanel(el.get("Id"), true)); } if (subpanels.size() > 0) { groupsToShow.add(new XMLGroupPanel(getPanelContainer(), el, subpanels, "", true, false, true)); } return new XMLGroupPanel(getPanelContainer(), el, groupsToShow, "", true, false, true); } public XMLPanel getPanel(DataFields el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(DataType el) { return this.getPanel(el.getDataTypes()); } public XMLPanel getPanel(DataTypes el) { return new XMLDataTypesPanel(getPanelContainer(), el, null, JaWEManager.getInstance().getLabelGenerator().getLabel(el), JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Deadline el) { XMLPanel p = null; List panelElements = new ArrayList(); panelElements.add(el.get("Execution").toName()); panelElements.add(el.get("DurationUnit").toName()); panelElements.add(el.get("DeadlineLimit").toName()); panelElements.add(el.get("ExceptionName").toName()); p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("DeadlineKey"), true, false, true); return p; } public XMLPanel getPanel(DeadlineCondition el) { return null; } public XMLPanel getPanel(Deadlines el) { XMLPanel p = null; List columnList = new ArrayList(); Deadline d = (Deadline) el.generateNewElement(); columnList.add(d.get("Execution").toName()); columnList.add(d.get("DurationUnit").toName()); columnList.add(d.get("DeadlineLimit").toName()); columnList.add(d.get("ExceptionName").toName()); p = new XMLBasicTablePanel((InlinePanel) getPanelContainer(), el, columnList, el.toElements(), getPanelContainer().getLanguageDependentString("DeadlinesKey"), true, false, false, false, true, true); return p; } public XMLPanel getPanel(DeclaredType el) { XMLElement tdsel = el; while (!(tdsel instanceof TypeDeclarations)) { tdsel = tdsel.getParent(); if (tdsel == null) { tdsel = XMLUtil.getPackage(el).getTypeDeclarations(); break; } } TypeDeclarations tds = (TypeDeclarations) tdsel; List choices = tds.toElements(); XMLElement choosen = tds.getTypeDeclaration(el.getId()); if (el.getParent().getParent() instanceof TypeDeclaration) { choices.remove(el.getParent().getParent()); } SpecialChoiceElement cc = new SpecialChoiceElement(el, "Id", choices, choosen, false, "Id", "SubType", el.isRequired()); cc.setReadOnly(el.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Description el) { return generateStandardMultiLineTextPanel(el, true, XMLMultiLineTextPanel.SIZE_SMALL, true); } public XMLPanel getPanel(Documentation el) { return new XMLLocationPanel(getPanelContainer(), el, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Duration el) { return generateStandardPanel(el); } public XMLPanel getPanel(EnumerationType el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(EnumerationValue el) { return generateStandardPanel(el); } public XMLPanel getPanel(ExceptionName el) { return generateStandardPanel(el); } public XMLPanel getPanel(ExtendedAttributes el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(ExtendedAttribute el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(ExternalPackage el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(ExternalPackages el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(ExternalReference el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(FinishMode el) { return getPanel(el.getStartFinishModes()); } public XMLPanel getPanel(FormalParameter el) { XMLPanel p = null; List panelElements = new ArrayList(); panelElements.add(el.get("Id")); panelElements.add(el.get("Mode")); if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("FormalParameterKey"), true, false, true); } return p; } public XMLPanel getPanel(FormalParameters el) { return generateStandardPanel(el); } public XMLPanel getPanel(Icon el) { List choices = Utils.getActivityIconNamesList(); String choosen = el.toValue(); if (choices.size() == 0) { return new XMLLocationPanel(getPanelContainer(), el, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } if (!choices.contains(choosen)) { choices.add(choosen); } XMLComboPanel p = new XMLComboPanel(getPanelContainer(), el, JaWEManager.getInstance().getLabelGenerator().getLabel(el), choices, false, true, false, true, JaWEManager.getInstance().getJaWEController().canModifyElement(el), false, false); p.getComboBox().setRenderer(cbr); return p; } public XMLPanel getPanel(Implementation el) { return generateStandardPanel(el); } public XMLPanel getPanel(ImplementationTypes el) { return generateStandardPanel(el); } public XMLPanel getPanel(InitialValue el) { return generateStandardMultiLineTextPanel(el, true, XMLMultiLineTextPanel.SIZE_MEDIUM, false); } public XMLPanel getPanel(Join el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(Length el) { return generateStandardPanel(el); } public XMLPanel getPanel(Limit el) { return generateStandardPanel(el); } public XMLPanel getPanel(ListType el) { return generateStandardPanel(el); } public XMLPanel getPanel(Manual el) { return generateStandardPanel(el); } public XMLPanel getPanel(Member el) { return generateStandardPanel(el); } public XMLPanel getPanel(Namespace el) { return generateStandardPanel(el); } public XMLPanel getPanel(Namespaces el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(No el) { return generateStandardPanel(el); } public XMLPanel getPanel(Package el) { List panels = new ArrayList(); Set hidden = getHiddenElements("XMLGroupPanel", el); for (int i = 1;; i++) { try { XMLPanel p = getPanel(el, i, hidden); if (p != null) { panels.add(p); } } catch (Exception ex) { break; } } if (panels.size() > 1) { return new XMLTabbedPanel(getPanelContainer(), el, panels, JaWEManager.getInstance().getLabelGenerator().getLabel(el), false); } else if (panels.size() == 1) { return (XMLPanel) panels.get(0); } else { return new XMLBasicPanel(); } } public XMLPanel getBasicPanel(Package el) { List panels = new ArrayList(); Set hidden = getHiddenElements("XMLGroupPanel", el); for (int i = 1; i <= 3; i++) { try { XMLPanel p = getPanel(el, i, hidden); if (p != null) { panels.add(p); } } catch (Exception ex) { break; } } if (panels.size() > 1) { return new XMLTabbedPanel(getPanelContainer(), el, panels, JaWEManager.getInstance().getLabelGenerator().getLabel(el), false); } else if (panels.size() == 1) { return (XMLPanel) panels.get(0); } else { return new XMLBasicPanel(); } } //CUSTOM //Validate either is professional mode or basic mode protected XMLPanel getPanel(Package el, int no, Set hidden) { XMLPanel p = null; switch (no) { case 1: List panelElements = new ArrayList(); if (!hidden.contains(el.get("Id"))) { panelElements.add(el.get("Id")); } if (!hidden.contains(el.get("Name"))) { panelElements.add(el.get("Name")); } if (!(hidden.contains(el.getExtendedAttributes()) || JaWE.BASIC_MODE)) { panelElements.add(el.getExtendedAttributes()); } if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("GeneralKey"), true, false, true); } break; case 2: p = null; break; case 3: p = null; break; case 4: p = null; break; case 5: p = null; break; case 6: p = null; break; case 7: p = null; break; case 8: p = null; break; case 9: p = null; break; case 10: p = null; break; default: throw new RuntimeException(); } return p; } //END CUSTOM public XMLPanel getPanel(PackageHeader el) { return generateStandardPanel(el); } public XMLPanel getPanel(Participant el) { XMLPanel p = null; List panelElements = new ArrayList(); panelElements.add(el.get("Id")); panelElements.add(el.get("Name")); panelElements.add(el.get("ParticipantType")); if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("ParticipantKey"), true, false, true); } return p; } public XMLPanel getPanel(Participants el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(ParticipantType el) { return new XMLRadioPanel(getPanelContainer(), el.getTypeAttribute(), getPanelContainer().getLanguageDependentString(el.getTypeAttribute().toName() + "Key"), true, true, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Performer el) { Activity act = XMLUtil.getActivity(el); int type = act.getActivityType(); if (type == XPDLConstants.ACTIVITY_TYPE_NO || type == XPDLConstants.ACTIVITY_TYPE_TOOL) { SequencedHashMap choices = XMLUtil.getPossibleParticipants(XMLUtil.getWorkflowProcess(el), JaWEManager.getInstance().getXPDLHandler()); Object choosen = choices.get(el.toValue()); if (choosen == null) { if (!el.toValue().equals("")) { choosen = el.toValue(); } } SpecialChoiceElement cc = new SpecialChoiceElement(el, "", new ArrayList(choices.values()), choosen, true, "Id", el.toName(), el.isRequired()); cc.setReadOnly(el.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, true, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } return new XMLTextPanel(getPanelContainer(), el, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Priority el) { return generateStandardPanel(el); } public XMLPanel getPanel(PriorityUnit el) { return generateStandardPanel(el); } public XMLPanel getPanel(ProcessHeader el) { return generateStandardPanel(el); } public XMLPanel getPanel(RecordType el) { return generateStandardListPanel(el, true, false); /* * XMLListPanel controlledPanel=new XMLListPanel(el,"",false,true,false) { public * boolean checkRequired () { if (el.isReadOnly() || (el.size()>0)) { return true; } * else { * XMLPanel.errorMessage(this.getDialog(),JaWEManager.getInstance().getLabelGenerator().getLabel(el),"", * getLanguageDependentString("ErrorTheListMustContainAtLeastOneElement")); * controlPanel.getComponent(1).requestFocus(); return false; } } }; * controlPanel=new XMLListControlPanel(el,"",true,false,true); return new * XMLGroupPanel(el,new XMLPanel[]{ * controlledPanel,controlPanel},JaWEManager.getInstance().getLabelGenerator().getLabel(el),XMLPanel.BOX_LAYOUT, * false,true); */ } public XMLPanel getPanel(RedefinableHeader el) { // TODO return generateStandardPanel(el); } public XMLPanel getPanel(Responsible el) { SequencedHashMap choices = JaWEManager.getInstance().getXPDLUtils().getPossibleResponsibles((Responsibles) el.getParent(), el); Participant choosen = null; String pId = el.toValue(); if (!pId.equals("")) { Iterator it = choices.values().iterator(); while (it.hasNext()) { Participant p = (Participant) it.next(); if (pId.equals(p.getId())) { choosen = p; break; } } } if (choosen != null) { choices.put(choosen.getId(), choosen); } SpecialChoiceElement cc = new SpecialChoiceElement(el, "", new ArrayList(choices.values()), choosen, false, "Id", el.toName(), el.isRequired()); cc.setReadOnly(el.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(Responsibles el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(Route el) { XMLPanel p = null; List panelElements = new ArrayList(); panelElements.add(el.get("Id")); panelElements.add(el.get("Name")); TransitionRestrictions trs = ((Activity) el.getParent()).getTransitionRestrictions(); TransitionRestriction tr = (TransitionRestriction) trs.get(0); panelElements.add(getPanel(tr)); if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("GeneralKey"), true, false, true); } return p; } public XMLPanel getPanel(SchemaType el) { return generateStandardPanel(el); } public XMLPanel getPanel(Script el) { return generateStandardGroupPanel(el, false, false); } protected XMLPanel getPanel(Script el, boolean hasTitle) { return generateStandardGroupPanel(el, hasTitle, false); } public XMLPanel getPanel(SimulationInformation el) { return generateStandardPanel(el); } public XMLPanel getPanel(Split el) { return generateStandardGroupPanel(el, true, false); } public XMLPanel getPanel(StartFinishModes el) { return new XMLComboPanel(getPanelContainer(), el, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } public XMLPanel getPanel(StartMode el) { return getPanel(el.getStartFinishModes()); } public XMLPanel getPanel(SubFlow el) { Set hidden = getHiddenElements("XMLGroupPanel", el); List panelElements = new ArrayList(); SequencedHashMap choices = XMLUtil.getPossibleSubflowProcesses(el, JaWEManager.getInstance().getXPDLHandler()); Object choosen = choices.get(el.getId()); if (choosen == null) { if (!el.getId().equals("")) { choosen = el.getId(); } } SpecialChoiceElement cc = new SpecialChoiceElement(el.get("Id"), "", new ArrayList(choices.values()), choosen, true, "Id", "WorkflowProcess", true); cc.setReadOnly(el.get("Id").isReadOnly()); final XMLComboPanel cp = new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, true, JaWEManager.getInstance().getJaWEController().canModifyElement(el.get("Id"))); if (!hidden.contains(el.get("Id"))) { panelElements.add(cp); } if (!hidden.contains(el.getExecutionAttribute())) { panelElements.add(el.getExecutionAttribute()); } if (!hidden.contains(el.getActualParameters())) { FormalParameters fps = null; if (choosen instanceof WorkflowProcess) { fps = ((WorkflowProcess) choosen).getFormalParameters(); } final XMLActualParametersPanel app = new XMLActualParametersPanel(getPanelContainer(), el.getActualParameters(), fps); panelElements.add(app); cp.getComboBox().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { Object sel = cp.getSelectedItem(); FormalParameters _fps = null; if (sel instanceof WorkflowProcess) { _fps = ((WorkflowProcess) sel).getFormalParameters(); } app.setFormalParameters(_fps); app.validate(); } }); cp.getComboBox().getEditor().getEditorComponent().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { Object sel = cp.getSelectedItem(); FormalParameters _fps = null; if (sel instanceof WorkflowProcess) { _fps = ((WorkflowProcess) sel).getFormalParameters(); } app.setFormalParameters(_fps); app.validate(); } }); cp.getComboBox().addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { Object sel = cp.getSelectedItem(); FormalParameters _fps = null; if (sel instanceof WorkflowProcess) { _fps = ((WorkflowProcess) sel).getFormalParameters(); } app.setFormalParameters(_fps); app.validate(); } }); } if (panelElements.size() > 0) { return new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString(el.toName() + "Key"), true, false, true); } return null; } public XMLPanel getPanel(TimeEstimation el) { return generateStandardGroupPanel(el, false, false); } public XMLPanel getPanel(Tool el) { Set hidden = getHiddenElements("XMLGroupPanel", el); List panelElements = new ArrayList(); SequencedHashMap choices = XMLUtil.getPossibleApplications(XMLUtil.getWorkflowProcess(el), JaWEManager.getInstance().getXPDLHandler()); Object choosen = choices.get(el.getId()); if (choosen == null) { if (!el.getId().equals("")) { choosen = el.getId(); } } SpecialChoiceElement cc = new SpecialChoiceElement(el.get("Id"), "", new ArrayList(choices.values()), choosen, true, "Id", "Application", el.isRequired()); cc.setReadOnly(el.get("Id").isReadOnly()); final XMLComboPanel cp = new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el.get("Id"))); if (!hidden.contains(el.get("Id"))) { panelElements.add(cp); } if (!hidden.contains(el.getTypeAttribute())) { panelElements.add(el.getTypeAttribute()); } if (!hidden.contains(el.getActualParameters())) { FormalParameters fps = null; if (choosen instanceof Application) { fps = ((Application) choosen).getApplicationTypes().getFormalParameters(); } final XMLActualParametersPanel app = new XMLActualParametersPanel(getPanelContainer(), el.getActualParameters(), fps); panelElements.add(app); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ae) { Object sel = cp.getSelectedItem(); FormalParameters _fps = null; if (sel instanceof Application) { _fps = ((Application) sel).getApplicationTypes().getFormalParameters(); } app.setFormalParameters(_fps); } }; cp.getComboBox().addActionListener(al); } if (!hidden.contains(el.get("Description"))) { panelElements.add(el.get("Description")); } if (!hidden.contains(el.getExtendedAttributes())) { panelElements.add(el.getExtendedAttributes()); } if (panelElements.size() > 0) { return new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString(el.toName() + "Key"), true, false, true); } return null; } public XMLPanel getPanel(Tools el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(Transition el) { // CUSTOM: hide unused attributes Set hidden = getHiddenElements("XMLGroupPanel", el); List panelElements = new ArrayList(); if (!hidden.contains(el.get("Name"))) { panelElements.add(el.get("Name")); } if (!hidden.contains(el.getCondition())) { panelElements.add(el.getCondition()); } // END CUSTOM: hide unused attributes if (panelElements.size() > 0) { return new XMLTransitionPanel(getPanelContainer(), el, panelElements, JaWEManager.getInstance().getLabelGenerator().getLabel(el), true, false, true); } return new XMLBasicPanel(); } public XMLPanel getPanel(TransitionRef el) { return generateStandardPanel(el); } public XMLPanel getPanel(TransitionRefs el) { return null; } public XMLPanel getPanel(TransitionRestriction el) { return generateStandardPanel(el); } public XMLPanel getPanel(TransitionRestrictions el) { return generateStandardPanel(el); } public XMLPanel getPanel(Transitions el) { return generateStandardTablePanel(el, true, false); } public XMLPanel getPanel(TypeDeclaration el) { return generateStandardPanel(el); } public XMLPanel getPanel(TypeDeclarations el) { return generateStandardPanel(el); } public XMLPanel getPanel(UnionType el) { return generateStandardListPanel(el, true, false); } public XMLPanel getPanel(ValidFrom el) { return generateStandardPanel(el); } public XMLPanel getPanel(ValidTo el) { return generateStandardPanel(el); } public XMLPanel getPanel(Vendor el) { return generateStandardPanel(el); } public XMLPanel getPanel(Version el) { return generateStandardPanel(el); } public XMLPanel getPanel(WaitingTime el) { return generateStandardPanel(el); } //CUSTOM public XMLPanel getPanel(WorkflowProcess el) { List panels = new ArrayList(); Set hidden = getHiddenElements("XMLGroupPanel", el); for (int i = 1;; i++) { try { XMLPanel p = getPanel(el, i, hidden); if (p != null) { panels.add(p); } } catch (Exception ex) { break; } } if (panels.size() > 1) { return new XMLTabbedPanel(getPanelContainer(), el, panels, JaWEManager.getInstance().getLabelGenerator().getLabel(el), false); } else if (panels.size() == 1) { return (XMLPanel) panels.get(0); } else { return new XMLBasicPanel(); } } //END CUSTOM public XMLPanel getBasicPanel(WorkflowProcess el) { List panels = new ArrayList(); Set hidden = getHiddenElements("XMLGroupPanel", el); for (int i = 1; i <= 3; i++) { try { XMLPanel p = getPanel(el, i, hidden); if (p != null) { panels.add(p); } } catch (Exception ex) { break; } } if (panels.size() > 1) { return new XMLTabbedPanel(getPanelContainer(), el, panels, JaWEManager.getInstance().getLabelGenerator().getLabel(el), false); } else if (panels.size() == 1) { return (XMLPanel) panels.get(0); } else { return new XMLBasicPanel(); } } //CUSTOM public XMLPanel getPanel(WorkflowProcess el, int no, Set hidden) { XMLPanel p = null; switch (no) { case 1: List panelElements = new ArrayList(); if (!hidden.contains(el.get("Id"))) { panelElements.add(el.get("Id")); } if (!hidden.contains(el.get("Name"))) { panelElements.add(el.get("Name")); } panelElements.add(el.getProcessHeader().getDurationUnitAttribute()); panelElements.add(el.getProcessHeader().get("Limit")); if (!hidden.contains(el.getDataFields())) { panelElements.add(this.getPanel(el.getDataFields())); } if (panelElements.size() > 0) { p = new XMLGroupPanel(getPanelContainer(), el, panelElements, getPanelContainer().getLanguageDependentString("GeneralKey"), true, false, true); } break; case 2: break; case 3: if (!(hidden.contains(el.getRedefinableHeader()) || JaWE.BASIC_MODE)) { p = this.getPanel(el.getRedefinableHeader()); } break; case 4: break; case 5: if (!(hidden.contains(el.getApplications()) || JaWE.BASIC_MODE)) { p = this.getPanel(el.getApplications()); } break; case 6: break; case 7: if (!(hidden.contains(el.getFormalParameters()))) { p = this.getPanel(el.getFormalParameters()); } break; case 8: break; case 9: if (!(hidden.contains(el.getTransitions()) || JaWE.BASIC_MODE)) { p = this.getPanel(el.getTransitions()); } break; case 10: if (!(hidden.contains(el.getActivitySets()) || JaWE.BASIC_MODE)) { p = this.getPanel(el.getActivitySets()); } break; default: throw new RuntimeException(); } return p; } //END CUSTOM public XMLPanel getPanel(WorkflowProcesses el) { return generateStandardPanel(el); } public XMLPanel getPanel(WorkingTime el) { return generateStandardPanel(el); } public XMLPanel getPanel(XPDLVersion el) { return generateStandardPanel(el); } public XMLPanel getPanel(XMLAttribute el) { if (el.getParent() instanceof ExternalPackage && el.toName().equals("href")) { return new XMLLocationPanel(getPanelContainer(), el, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } if (el.getParent() instanceof ExtendedAttribute) { if (el.toName().equals("Name")) { Set choices = JaWEManager.getInstance().getXPDLUtils().getAllExtendedAttributeNames((XMLComplexElement) el.getParent().getParent().getParent(), JaWEManager.getInstance().getXPDLHandler()); String choosen = el.toValue(); choices.add(choosen); return new XMLComboPanel(getPanelContainer(), el, new ArrayList(choices), false, true, false, true, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } XMLElement holder = el.getParent().getParent().getParent(); if (XMLUtil.getWorkflowProcess(holder) != null && (holder instanceof Activity || holder instanceof Transition || holder instanceof Tool || holder instanceof WorkflowProcess)) { return generateMultiLineTextPanel(el, "Value", false, true, XMLMultiLineTextPanel.SIZE_LARGE, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } else if (holder instanceof Application && ((Application) holder).getApplicationTypes().getChoosen() instanceof FormalParameters) { return generateMultiLineTextPanel(el, "Value", false, true, XMLMultiLineTextPanel.SIZE_LARGE, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } else { return generateMultiLineTextPanel(el, "Value", false, true, XMLMultiLineTextPanel.SIZE_LARGE, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } } if (el.getParent() instanceof BlockActivity) { WorkflowProcess wp = XMLUtil.getWorkflowProcess(el); List choices = wp.getActivitySets().toElements(); XMLElement choosen = wp.getActivitySet(el.toValue()); SpecialChoiceElement cc = new SpecialChoiceElement(el, "", choices, choosen, true, "Id", "ActivitySet", el.isRequired()); cc.setReadOnly(el.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } if (el.toName().equalsIgnoreCase("From")) { return getPanelForFROMAttribute((Transition) el.getParent()); } if (el.toName().equalsIgnoreCase("To")) { return getPanelForTOAttribute((Transition) el.getParent()); } if (el.toName().equalsIgnoreCase("ObjectClassFilter")) { return new XMLComboPanel(getPanelContainer(), el, null, true, true, false, true, true); } if (el.toName().equalsIgnoreCase("Password")) { return new XMLTextPanel(getPanelContainer(), el, false, true, true); } return generateStandardPanel(el); } public XMLPanel getPanel(XMLEmptyChoiceElement el) { return new XMLBasicPanel(); } public XMLPanel getPanel(XMLComplexChoice el) { return generateStandardPanel(el); } public XMLPanel getPanel(XMLCollection el) { return generateStandardPanel(el); } public XMLPanel getPanel(XMLComplexElement el) { return generateStandardPanel(el); } public XMLPanel getPanel(XMLSimpleElement el) { return generateStandardPanel(el); } public XMLPanel getPanel(XMLElement el) { try { Class cl = el.getClass(); Method m = null; try { m = this.getClass().getMethod("getPanel", new Class[]{ cl }); } catch (Exception ex) { if (!(cl == XMLSimpleElement.class || cl == XMLAttribute.class || cl == XMLComplexChoice.class || cl == XMLComplexElement.class || cl == XMLCollectionElement.class || cl == XMLCollection.class)) { if (XMLComplexChoice.class.isAssignableFrom(cl)) { cl = XMLComplexChoice.class; } else if (XMLAttribute.class.isAssignableFrom(cl)) { cl = XMLAttribute.class; } else if (XMLSimpleElement.class.isAssignableFrom(cl)) { cl = XMLSimpleElement.class; } else if (XMLComplexElement.class.isAssignableFrom(cl)) { cl = XMLComplexElement.class; } else if (XMLCollection.class.isAssignableFrom(cl)) { cl = XMLCollection.class; } } } m = this.getClass().getMethod("getPanel", new Class[]{ cl }); return (XMLPanel) m.invoke(this, new Object[]{ el }); } catch (Throwable e) { e.printStackTrace(); } return generateStandardPanel(el); } protected XMLPanel getPanelForFROMAttribute(Transition transition) { SequencedHashMap choices = JaWEManager.getInstance().getTransitionHandler().getPossibleSourceActivities(transition); String tFrom = transition.getFrom(); Activity current = ((Activities) ((XMLCollectionElement) transition.getParent().getParent()).get("Activities")).getActivity(tFrom); if (current != null) { choices.put(current.getId(), current); } Activity choosen = null; if (!tFrom.equals("")) { choosen = (Activity) choices.get(tFrom); } XMLAttribute from = (XMLAttribute) transition.get("From"); SpecialChoiceElement cc = new SpecialChoiceElement(from, "", new ArrayList(choices.values()), choosen, true, "Id", "From", from.isRequired()); cc.setReadOnly(from.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(from)); } protected XMLPanel getPanelForTOAttribute(Transition transition) { SequencedHashMap choices = JaWEManager.getInstance().getTransitionHandler().getPossibleTargetActivities(transition); String tTo = transition.getTo(); Activity current = ((Activities) ((XMLCollectionElement) transition.getParent().getParent()).get("Activities")).getActivity(tTo); if (current != null) { choices.put(current.getId(), current); } Activity choosen = null; if (!tTo.equals("")) { choosen = (Activity) choices.get(tTo); } XMLAttribute to = (XMLAttribute) transition.get("To"); SpecialChoiceElement cc = new SpecialChoiceElement(to, "", new ArrayList(choices.values()), choosen, true, "Id", "To", to.isRequired()); cc.setReadOnly(to.isReadOnly()); return new XMLComboPanel(getPanelContainer(), cc, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(to)); } public XMLPanel generateStandardPanel(XMLElement el) { XMLPanel panel = null; if (el instanceof XMLSimpleElement) { panel = generateStandardTextPanel(el, false); } else if (el instanceof XMLAttribute) { List choices = ((XMLAttribute) el).getChoices(); if (choices == null) { panel = generateStandardTextPanel(el, false); } else { panel = new XMLComboPanel(getPanelContainer(), el, null, false, true, false, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } } else if (el instanceof XMLComplexChoice) { panel = new XMLComboChoicePanel(getPanelContainer(), el, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } else if (el instanceof XMLComplexElement) { panel = generateStandardGroupPanel((XMLComplexElement) el, false, true); } else if (el instanceof XMLCollection) { // CUSTOM: show standard list instead of table panel = generateStandardListPanel((XMLCollection) el, true, false); // END CUSTOM } else { panel = new XMLBasicPanel(); } return panel; } protected XMLMultiLineTextPanel generateStandardMultiLineTextPanel( XMLElement el, boolean isVertical, int size, boolean wrapLines) { return new XMLMultiLineTextPanel(getPanelContainer(), el, isVertical, size, wrapLines, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } protected XMLPanel generateMultiLineTextPanel( XMLElement el, String labelKey, boolean isFalseRequired, boolean isVertical, int type, boolean wrapLines, boolean isEnabled) { return new XMLMultiLineTextPanel(getPanelContainer(), el, labelKey, isFalseRequired, isVertical, type, wrapLines, isEnabled); } protected XMLTextPanel generateStandardTextPanel(XMLElement el, boolean isVertical) { return new XMLTextPanel(getPanelContainer(), el, isVertical, false, JaWEManager.getInstance().getJaWEController().canModifyElement(el)); } protected XMLBasicTablePanel generateStandardTablePanel(XMLCollection cl, boolean hasTitle, boolean hasEmptyBorder) { List elementsToShow = cl.toElements(); Set hidden = getHiddenElements("XMLTablePanel", cl); elementsToShow.removeAll(hidden); List columnsToShow = getColumnsToShow("XMLTablePanel", cl); boolean miniDim = false; if (cl instanceof ExtendedAttributes) { miniDim = true; } return new XMLBasicTablePanel((InlinePanel) getPanelContainer(), cl, columnsToShow, elementsToShow, JaWEManager.getInstance().getLabelGenerator().getLabel(cl) + ", " + (cl.size() - hidden.size()) + " " + getPanelContainer().getLanguageDependentString("ElementsKey"), true, false, false, miniDim, true, true); } protected XMLBasicListPanel generateStandardListPanel(XMLCollection cl, boolean hasTitle, boolean hasEmptyBorder) { List elementsToShow = cl.toElements(); Set hidden = getHiddenElements("XMLListPanel", cl); elementsToShow.removeAll(hidden); return new XMLBasicListPanel( (InlinePanel) getPanelContainer(), cl, elementsToShow, JaWEManager.getInstance().getLabelGenerator().getLabel(cl) + ", " + (cl.size() - hidden.size()) + " " + getPanelContainer().getLanguageDependentString("ElementsKey"), true, false, true, false); } protected XMLGroupPanel generateStandardGroupPanel(XMLComplexElement cel, boolean hasTitle, boolean hasEmptyBorder) { Set hidden = getHiddenElements("XMLGroupPanel", cel); List toShow = new ArrayList(cel.toElements()); toShow.removeAll(hidden); if (cel instanceof Condition) { toShow.add(generateMultiLineTextPanel(cel, "Xpression", false, true, XMLMultiLineTextPanel.SIZE_MEDIUM, false, JaWEManager.getInstance().getJaWEController().canModifyElement(cel))); } else if (cel instanceof Script && JaWE.BASIC_MODE) { Script script = (Script) cel; script.setType(Script.DEFAULT_TYPE); cel = (XMLComplexElement) script; } else if (cel instanceof SchemaType) { toShow.add(generateMultiLineTextPanel(cel, "ComplexContent", false, true, XMLMultiLineTextPanel.SIZE_LARGE, false, JaWEManager.getInstance().getJaWEController().canModifyElement(cel))); } return new XMLGroupPanel(getPanelContainer(), cel, toShow, JaWEManager.getInstance().getLabelGenerator().getLabel(cel), true, hasTitle, hasEmptyBorder); } protected Set getHiddenElements(String panelName, XMLComplexElement cel) { Set hidden = new HashSet(); String hstr = getPanelContainer().getSettings().getSettingString("HideSubElements." + panelName + "." + cel.toName()); String[] hstra = Utils.tokenize(hstr, " "); if (hstra != null) { for (int i = 0; i < hstra.length; i++) { XMLElement el = cel.get(hstra[i]); if (el != null) { hidden.add(el); } else if (cel instanceof Package) { Package pkg = (Package) cel; if (hstra[i].equals(pkg.getNamespaces().toName())) { hidden.add(pkg.getNamespaces()); } } } } return hidden; } protected Set getHiddenElements(String panelName, XMLCollection col) { Set hidden = new HashSet(); String elAttr = getPanelContainer().getSettings().getSettingString( "HideElements." + panelName + "." + col.toName()); String[] els = Utils.tokenize(elAttr, " "); for (int k = 0; k < els.length; k++) { String key = els[k]; String hstr = getPanelContainer().getSettings().getSettingString( "HideElements." + panelName + "." + col.toName() + "." + key); String[] hstra = Utils.tokenize(hstr, " "); if (hstra != null) { for (int i = 0; i < hstra.length; i++) { if (hstra[i].equals("*")) { hidden.addAll(col.toElements()); return hidden; } Iterator ci = col.toElements().iterator(); while (ci.hasNext()) { XMLElement el = (XMLElement) ci.next(); if (key.equals("")) { if (el.toValue().equals(hstra[i])) { hidden.add(el); } } else { if (el instanceof XMLComplexElement) { XMLElement sel = ((XMLComplexElement) el).get(key); if (sel != null) { if (sel.toValue().equals(hstra[i])) { hidden.add(el); } } } } } } } } return hidden; } protected List getColumnsToShow(String panelName, XMLCollection col) { XMLElement el = col.generateNewElement(); List toShow = new ArrayList(); if (el instanceof XMLComplexElement) { String hstr = getPanelContainer().getSettings().getSettingString("ShowColumns." + panelName + "." + col.toName()); String[] hstra = Utils.tokenize(hstr, " "); if (hstra.length > 0) { toShow.addAll(Arrays.asList(hstra)); } else { toShow.addAll(((XMLComplexElement) el).toElementMap().keySet()); } } return toShow; } public Settings getSettings() { return getPanelContainer().getSettings(); } protected IconCBoxRenderer cbr = new IconCBoxRenderer(); class IconCBoxRenderer extends JLabel implements ListCellRenderer { public IconCBoxRenderer() { setOpaque(true); } /* * This method finds the image and text corresponding to the selected value and * returns the label, set up to display the text and image. */ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // Get the selected index. (The index param isn't // always valid, so just use the value.) String iconLoc = value.toString(); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } // Set the icon and text. If icon was null, say so. ImageIcon icon = (ImageIcon) Utils.getOriginalActivityIconsMap().get(iconLoc); setIcon(icon); setText(iconLoc); return this; } } }