diff --git a/modeling/AVATAR/CoffeeMachine_Avatar.xml b/modeling/AVATAR/CoffeeMachine_Avatar.xml index 3c19bef425c6e66d5454f74b993fdeb08434d55a..de2eed98f907b95a0cc6a758640a2dafdf0c76f6 100644 --- a/modeling/AVATAR/CoffeeMachine_Avatar.xml +++ b/modeling/AVATAR/CoffeeMachine_Avatar.xml @@ -4,8 +4,40 @@ <Modeling type="Avatar Requirement" nameTab="AVATAR Requirements" > <AvatarRDPanel name="AVATAR RD" minX="10" maxX="1900" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5208" id="1725" > +<cdparam x="749" y="267" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<satisfy>>" /> +<TGConnectingPoint num="0" id="1726" /> +<P1 x="749" y="267" id="1711" /> +<P2 x="504" y="199" id="213" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5207" id="1709" > +<cdparam x="749" y="252" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="107" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarElementReference" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="1710" /> +<TGConnectingPoint num="1" id="1711" /> +<TGConnectingPoint num="2" id="1712" /> +<TGConnectingPoint num="3" id="1713" /> +<TGConnectingPoint num="4" id="1714" /> +<TGConnectingPoint num="5" id="1715" /> +<TGConnectingPoint num="6" id="1716" /> +<TGConnectingPoint num="7" id="1717" /> +<TGConnectingPoint num="8" id="1718" /> +<TGConnectingPoint num="9" id="1719" /> +<TGConnectingPoint num="10" id="1720" /> +<TGConnectingPoint num="11" id="1721" /> +<TGConnectingPoint num="12" id="1722" /> +<TGConnectingPoint num="13" id="1723" /> +<TGConnectingPoint num="14" id="1724" /> +</COMPONENT> + <COMPONENT type="5207" id="16" > -<cdparam x="627" y="206" /> +<cdparam x="741" y="201" /> <sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="57" minDesiredHeight="0" /> <hidden value="false" /> <cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> @@ -147,8 +179,8 @@ <criticality data="Low" /> <reqType data="Requirement" /> <id data="0.4" /> -<satisfied data="false" /> -<verified data="false" /> +<satisfied data="true" /> +<verified data="true" /> <attackTreeNode data="" /> <violatedAction data="" /> <referenceElements data="" /> @@ -219,7 +251,7 @@ </COMPONENT> <COMPONENT type="5201" id="164" > -<cdparam x="705" y="405" /> +<cdparam x="678" y="396" /> <sizeparam width="171" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="158" minDesiredHeight="0" /> <hidden value="false" /> <cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> @@ -242,7 +274,7 @@ </COMPONENT> <COMPONENT type="5201" id="180" > -<cdparam x="599" y="264" /> +<cdparam x="628" y="308" /> <sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="128" minDesiredHeight="0" /> <hidden value="false" /> <cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> @@ -318,7 +350,7 @@ <textline data="negative number of coins" /> <kind data="Functional" /> <criticality data="Low" /> -<reqType data="Requirement" /> +<reqType data="SafetyRequirement" /> <id data="0.2" /> <satisfied data="true" /> <verified data="true" /> @@ -408,7 +440,7 @@ <reqType data="AMSRequirement" /> <id data="0.1" /> <satisfied data="false" /> -<verified data="false" /> +<verified data="true" /> <attackTreeNode data="" /> <violatedAction data="" /> <referenceElements data="" /> @@ -416,8 +448,8 @@ </COMPONENT> <COMPONENT type="5200" id="328" > -<cdparam x="206" y="295" /> -<sizeparam width="357" height="157" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<cdparam x="208" y="294" /> +<sizeparam width="357" height="174" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> <hidden value="false" /> <cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> <infoparam name="Requirement" value="req2" /> @@ -472,13 +504,13 @@ <textline data="machine." /> <kind data="Functional" /> <criticality data="Low" /> -<reqType data="Requirement" /> +<reqType data="SecurityRequirement" /> <id data="0.3" /> -<satisfied data="false" /> -<verified data="false" /> +<satisfied data="true" /> +<verified data="true" /> <attackTreeNode data="" /> <violatedAction data="" /> -<referenceElements data="" /> +<referenceElements data="RefAttack" /> <extraAttribute id="Hypothèse" value="le système ..." /> </extraparam> </COMPONENT> @@ -488,7 +520,7 @@ <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector" value="<<satisfy>>" /> <TGConnectingPoint num="0" id="329" /> -<P1 x="627" y="228" id="3" /> +<P1 x="741" y="223" id="3" /> <P2 x="504" y="173" id="212" /> <AutomaticDrawing data="true" /> </CONNECTOR> @@ -515,7 +547,7 @@ <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> <TGConnectingPoint num="0" id="335" /> -<P1 x="206" y="334" id="285" /> +<P1 x="208" y="337" id="285" /> <P2 x="160" y="272" id="110" /> <AutomaticDrawing data="true" /> </CONNECTOR> @@ -542,8 +574,8 @@ <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> <TGConnectingPoint num="0" id="341" /> -<P1 x="705" y="420" id="150" /> -<P2 x="563" y="373" id="301" /> +<P1 x="678" y="411" id="150" /> +<P2 x="565" y="381" id="301" /> <AutomaticDrawing data="true" /> </CONNECTOR> <CONNECTOR type="5203" id="344" > @@ -551,7 +583,7 @@ <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> <TGConnectingPoint num="0" id="343" /> -<P1 x="599" y="279" id="166" /> +<P1 x="628" y="323" id="166" /> <P2 x="504" y="199" id="197" /> <AutomaticDrawing data="true" /> </CONNECTOR> diff --git a/src/main/java/ui/avatarrd/AvatarRDPanel.java b/src/main/java/ui/avatarrd/AvatarRDPanel.java index 24d08812b13d0e62f9df59f7f854e8d8bfd2f12c..fd07b5164750ee9e83635e87fa925eaa7a4184f0 100755 --- a/src/main/java/ui/avatarrd/AvatarRDPanel.java +++ b/src/main/java/ui/avatarrd/AvatarRDPanel.java @@ -1,26 +1,26 @@ /* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille - * + * * ludovic.apvrille AT enst.fr - * + * * This software is a computer program whose purpose is to allow the * edition of TURTLE analysis, design and deployment diagrams, to * allow the generation of RT-LOTOS or Java code from this diagram, * and at last to allow the analysis of formal validation traces * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP * from INRIA Rhone-Alpes. - * + * * This software is governed by the CeCILL license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/ or redistribute the software under the terms of the CeCILL * license as circulated by CEA, CNRS and INRIA at the following URL * "http://www.cecill.info". - * + * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided only * with a limited warranty and the software's author, the holder of the * economic rights, and the successive licensors have only limited * liability. - * + * * In this respect, the user's attention is drawn to the risks associated * with loading, using, modifying and/or developing or reproducing the * software by the user in light of its specific status of free software, @@ -31,20 +31,21 @@ * requirements in conditions enabling the security of their systems and/or * data to be ensured and, more generally, to use and operate it in the * same conditions as regards security. - * + * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL license and that you accept its terms. */ - - package ui.avatarrd; //import java.awt.*; +import myutil.TraceManager; import ui.*; +import ui.req.TGConnectorVerify; +import java.util.ArrayList; import java.util.LinkedList; import java.util.ListIterator; import java.util.Vector; @@ -52,24 +53,25 @@ import java.util.Vector; /** * Class AvatarRDPanel * Panel for drawing Avatar requirement diagrams -* Creation: 20/04/2010 -* @version 1.0 20/04/2010 + * Creation: 20/04/2010 + * * @author Ludovic APVRILLE + * @version 1.0 20/04/2010 */ public class AvatarRDPanel extends TDiagramPanel implements TDPWithAttributes { public Vector validated, ignored; - - public AvatarRDPanel(MainGUI mgui, TToolBar _ttb) { + + public AvatarRDPanel(MainGUI mgui, TToolBar _ttb) { super(mgui, _ttb); /*TDiagramMouseManager tdmm = new TDiagramMouseManager(this); addMouseListener(tdmm); addMouseMotionListener(tdmm);*/ } - + public boolean actionOnDoubleClick(TGComponent tgc) { return true; } - + public boolean actionOnAdd(TGComponent tgc) { /*if (tgc instanceof TCDTClass) { TCDTClass tgcc = (TCDTClass)(tgc); @@ -78,7 +80,7 @@ public class AvatarRDPanel extends TDiagramPanel implements TDPWithAttributes { }*/ return false; } - + public boolean actionOnRemove(TGComponent tgc) { /*if (tgc instanceof TCDTClass) { TCDTClass tgcc = (TCDTClass)(tgc); @@ -88,41 +90,41 @@ public class AvatarRDPanel extends TDiagramPanel implements TDPWithAttributes { }*/ return false; } - + public boolean actionOnValueChanged(TGComponent tgc) { /*if (tgc instanceof TCDTClass) { return actionOnDoubleClick(tgc); }*/ return false; } - + public String getXMLHead() { return "<AvatarRDPanel name=\"" + name + "\"" + sizeParam() + zoomParam() + " >"; } - + public String getXMLTail() { return "</AvatarRDPanel>"; } - + public String getXMLSelectedHead() { return "<AvatarRDPanelCopy name=\"" + name + "\" xSel=\"" + xSel + "\" ySel=\"" + ySel + "\" widthSel=\"" + widthSel + "\" heightSel=\"" + heightSel + "\" >"; } - + public String getXMLSelectedTail() { return "</AvatarRDPanelCopy>"; } - + public String getXMLCloneHead() { return "<AvatarRDPanelCopy name=\"" + name + "\" xSel=\"" + 0 + "\" ySel=\"" + 0 + "\" widthSel=\"" + 0 + "\" heightSel=\"" + 0 + "\" >"; } - + public String getXMLCloneTail() { return "</AvatarRDPanelCopy>"; } - - + + public void makePostLoadingProcessing() throws MalformedModelingException { - + } /*public int nbOfVerifyStartingAt(TGComponent tgc) { @@ -144,23 +146,23 @@ public class AvatarRDPanel extends TDiagramPanel implements TDPWithAttributes { return cpt; }*/ - - public LinkedList<TGComponent> getAllRequirements() { - LinkedList<TGComponent> list = new LinkedList<TGComponent>(); - TGComponent tgc; - - ListIterator iterator = getComponentList().listIterator(); - - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); + + public LinkedList<TGComponent> getAllRequirements() { + LinkedList<TGComponent> list = new LinkedList<TGComponent>(); + TGComponent tgc; + + ListIterator iterator = getComponentList().listIterator(); + + while (iterator.hasNext()) { + tgc = (TGComponent) (iterator.next()); if (tgc instanceof AvatarRDRequirement) { - list.add(tgc); - } - } - - return list; - - } + list.add(tgc); + } + } + + return list; + + } /*public boolean isLinkedByVerifyTo(TGComponent tgc1, TGComponent tgc2) { ListIterator iterator = getComponentList().listIterator(); @@ -180,11 +182,96 @@ public class AvatarRDPanel extends TDiagramPanel implements TDPWithAttributes { return false; }*/ - - public void enhance() { - autoAdjust(); + + public void enhance() { + autoAdjust(); + } + + public ArrayList<AvatarRDProperty> getAllPropertiesVerify(AvatarRDRequirement req) { + ArrayList<AvatarRDProperty> listOfProps = new ArrayList<>(); + + // We parse all AvatarRDVerifyConnector + ListIterator iterator = getComponentList().listIterator(); + TGComponent tgc; + TGConnectingPoint p1, p2, pother; + + while (iterator.hasNext()) { + tgc = (TGComponent) (iterator.next()); + //TraceManager.addDev("Considering component=" + tgc); + if (tgc instanceof AvatarRDVerifyConnector) { + //TraceManager.addDev("Connector verify"); + p1 = ((AvatarRDVerifyConnector) (tgc)).getTGConnectingPointP1(); + p2 = ((AvatarRDVerifyConnector) (tgc)).getTGConnectingPointP2(); + pother = null; + if (req.belongsToMe(p1)) { + pother = p2; + //TraceManager.addDev("pother = p2"); + } + if (req.belongsToMe(p2)) { + pother = p1; + //TraceManager.addDev("pother = p1"); + } + //TraceManager.addDev("pother computed"); + + //TraceManager.addDev("pother=" + pother); + + if (pother != null) { + TGComponent foundC = getComponentToWhichBelongs(pother); + //TraceManager.addDev("FoundC=" + foundC); + if (foundC instanceof AvatarRDProperty) { + //TraceManager.addDev("Adding foundC"); + listOfProps.add((AvatarRDProperty)foundC); + } + } + } + } + + return listOfProps; + + } + + public ArrayList<AvatarRDElementReference> getAllElementsSatified(AvatarRDRequirement req) { + ArrayList<AvatarRDElementReference> listOfProps = new ArrayList<>(); + + // We parse all AvatarRDVerifyConnector + ListIterator iterator = getComponentList().listIterator(); + TGComponent tgc; + TGConnectingPoint p1, p2, pother; + + while (iterator.hasNext()) { + tgc = (TGComponent) (iterator.next()); + //TraceManager.addDev("Considering component=" + tgc); + if (tgc instanceof AvatarRDSatisfyConnector) { + //TraceManager.addDev("Connector verify"); + p1 = ((AvatarRDSatisfyConnector) (tgc)).getTGConnectingPointP1(); + p2 = ((AvatarRDSatisfyConnector) (tgc)).getTGConnectingPointP2(); + pother = null; + if (req.belongsToMe(p1)) { + pother = p2; + //TraceManager.addDev("pother = p2"); + } + if (req.belongsToMe(p2)) { + pother = p1; + //TraceManager.addDev("pother = p1"); + } + //TraceManager.addDev("pother computed"); + + //TraceManager.addDev("pother=" + pother); + + if (pother != null) { + TGComponent foundC = getComponentToWhichBelongs(pother); + //TraceManager.addDev("FoundC=" + foundC); + if (foundC instanceof AvatarRDElementReference) { + //TraceManager.addDev("Adding foundC"); + listOfProps.add((AvatarRDElementReference)foundC); + } + } + } + } + + return listOfProps; + } - } diff --git a/src/main/java/ui/avatarrd/AvatarRDRequirement.java b/src/main/java/ui/avatarrd/AvatarRDRequirement.java index 3f50369a8c02ea9d78f99042fae6e5d558602499..ff22a0f15a0b973528f8886ecbeb6ef5bf6058a4 100755 --- a/src/main/java/ui/avatarrd/AvatarRDRequirement.java +++ b/src/main/java/ui/avatarrd/AvatarRDRequirement.java @@ -116,9 +116,9 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem protected boolean satisfied = false; protected boolean verified = false; - private JMenuItem isRegular = null; + /*private JMenuItem isRegular = null; private JMenuItem isSafety = null; - private JMenuItem isSecurity = null; + private JMenuItem isSecurity = null;*/ private JMenuItem menuNonSatisfied = null; private JMenuItem menuSatisfied = null; private JMenuItem menuNonVerified = null; @@ -342,16 +342,18 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem if (size < (height - 2)) { drawLimitedString(g, "Reference elements=\"" + referenceElements + "\"", x + textX, y + size, width, 0); - size += currentFontSize; + if (size < (height - 2)) { if (reqType == SECURITY_REQ) { drawLimitedString(g, "Targeted attacks=\"" + attackTreeNode + "\"", x + textX, y + size, width, 0); + size += currentFontSize; } if (reqType == SAFETY_REQ) { - drawLimitedString(g, "Violated action=\"" + violatedAction + "\"", x + textX, y + size, width, 0); + drawLimitedString(g, "State violating req.=\"" + violatedAction + "\"", x + textX, y + size, width, 0); + size += currentFontSize; } } } @@ -591,18 +593,12 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem componentMenu.addSeparator(); - isRegular = new JMenuItem("Set as regular requirement"); - isSafety = new JMenuItem("Set as safety requirement"); - isSecurity = new JMenuItem("Set as security requirement"); menuNonSatisfied = new JMenuItem("Set as non satisfied"); menuSatisfied = new JMenuItem("Set as satisfied"); menuNonVerified = new JMenuItem("Set as non verified"); menuVerified = new JMenuItem("Set as verified"); - isRegular.addActionListener(menuAL); - isSafety.addActionListener(menuAL); - isSecurity.addActionListener(menuAL); menuNonSatisfied.addActionListener(menuAL); menuSatisfied.addActionListener(menuAL); menuNonVerified.addActionListener(menuAL); @@ -611,9 +607,6 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem editAttributes = new JMenuItem("Edit attributes"); editAttributes.addActionListener(menuAL); - isRegular.setEnabled(reqType != REGULAR_REQ); - isSafety.setEnabled(reqType != SAFETY_REQ); - isSecurity.setEnabled(reqType != SECURITY_REQ); menuNonSatisfied.setEnabled(satisfied); menuSatisfied.setEnabled(!satisfied); @@ -621,9 +614,7 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem menuNonVerified.setEnabled(verified); menuVerified.setEnabled(!verified); - componentMenu.add(isRegular); - componentMenu.add(isSafety); - componentMenu.add(isSecurity); + componentMenu.addSeparator(); componentMenu.add(menuNonSatisfied); componentMenu.add(menuSatisfied); @@ -643,12 +634,6 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem verified = false; } else if (e.getSource() == menuVerified) { verified = true; - } else if (e.getSource() == isRegular) { - reqType = REGULAR_REQ; - } else if (e.getSource() == isSafety) { - reqType = SAFETY_REQ; - } else if (e.getSource() == isSecurity) { - reqType = SECURITY_REQ; } else { return editAttributes(); } @@ -981,4 +966,34 @@ public class AvatarRDRequirement extends TGCScalableWithInternalComponent implem } + public ArrayList<AvatarRDProperty> getAllPropertiesVerified() { + AvatarRDPanel myPanel = (AvatarRDPanel)(getTDiagramPanel()); + return myPanel.getAllPropertiesVerify(this); + } + + public String getStringOfAllPropertiesVerified() { + ArrayList<AvatarRDProperty> list = getAllPropertiesVerified(); + String s = ""; + for(int i=0; i<list.size(); i++) { + if (i>0) s+= " / "; + s += list.get(i).getValue(); + } + return s; + } + + public ArrayList<AvatarRDElementReference> getAllElementsSatisfied() { + AvatarRDPanel myPanel = (AvatarRDPanel)(getTDiagramPanel()); + return myPanel.getAllElementsSatified(this); + } + + public String getStringOfAllElementsSatisfied() { + ArrayList<AvatarRDElementReference> list = getAllElementsSatisfied(); + String s = ""; + for(int i=0; i<list.size(); i++) { + if (i>0) s+= " / "; + s += list.get(i).getValue(); + } + return s; + } + } diff --git a/src/main/java/ui/window/JDialogRequirementTable.java b/src/main/java/ui/window/JDialogRequirementTable.java index 50a603dc82444315a31fa4366d92a2da28aa578e..8f5b194b0cb9af97ecee8d43c3ecae025097c8c7 100644 --- a/src/main/java/ui/window/JDialogRequirementTable.java +++ b/src/main/java/ui/window/JDialogRequirementTable.java @@ -59,14 +59,19 @@ import java.util.ArrayList; */ public class JDialogRequirementTable extends JDialogBase implements ActionListener { + // Direct sons / fathers + // All sons / fathers + // Property verifiying the req + // Elements satisfying the req. + static String[] items = {"none", "ID", "Stereotype", "Name", "Description", "Kind", "Criticality", "Violated action", "Targeted " + - "attacks", "Satisfied", "Reference elements", "Custom attributes"}; + "attacks", "Satisfied", "Reference elements", "Custom attributes", "Verification Properties", "Satisfied by"}; private static String[] sizes = {"0", "50", "100", "150", "200", "250", "300", "350", "400", "450", "500"}; - private int nbColumn = 11; - private static int[] selectedItems = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; - private static int[] selectedSizes = {1, 3, 2, 6, 2, 2, 2, 2, 1, 6, 6}; + private int nbColumn = 13; + private static int[] selectedItems = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; + private static int[] selectedSizes = {1, 3, 2, 6, 2, 2, 2, 2, 1, 5, 5, 5, 5}; // Panel1 private ArrayList<JComboBox<String>> itemBoxes, sizeBoxes; diff --git a/src/main/java/ui/window/RequirementsTableModel.java b/src/main/java/ui/window/RequirementsTableModel.java index 2cefde41a870eff11ef77a5390eab5898094f476..293a5939719f84335ea77341f57d917748fd0408 100644 --- a/src/main/java/ui/window/RequirementsTableModel.java +++ b/src/main/java/ui/window/RequirementsTableModel.java @@ -39,6 +39,7 @@ package ui.window; +import myutil.TraceManager; import ui.TGComponent; import ui.avatarrd.AvatarRDRequirement; import ui.req.Requirement; @@ -128,9 +129,13 @@ public class RequirementsTableModel extends AbstractTableModel { return "-"; } case 9: - return "None"; + return "-"; case 10: - return "None"; + return "-"; + case 11: + return "-"; + case 12: + return "-"; } } @@ -177,6 +182,12 @@ public class RequirementsTableModel extends AbstractTableModel { return rd.getReferenceElements(); case 10: return rd.getExtraAttributes(); + case 11: + //TraceManager.addDev("Getting Info on properties in rd=" + rd); + return rd.getStringOfAllPropertiesVerified(); + case 12: + //TraceManager.addDev("Getting Info on properties in rd=" + rd); + return rd.getStringOfAllElementsSatisfied(); } }