/** * Test deleting an operation that contains a statechart diagram. The diagram should be deleted, * too. */ public void testDeleteOperationWithStateDiagram() { Project p = ProjectManager.getManager().getCurrentProject(); assertEquals(2, p.getDiagrams().size()); int sizeMembers = p.getMembers().size(); int sizeDiagrams = p.getDiagrams().size(); // test with a class and class diagram Object package1 = Model.getModelManagementFactory().buildPackage("test1", null); Object aClass = Model.getCoreFactory().buildClass(package1); Collection propertyChangeListeners = p.findFigsForMember(aClass); Object model = p.getModel(); Object voidType = p.findType("void"); Object oper = Model.getCoreFactory().buildOperation(aClass, model, voidType, propertyChangeListeners); // try with Statediagram Object machine = Model.getStateMachinesFactory().buildStateMachine(oper); UMLStateDiagram d = new UMLStateDiagram(Model.getFacade().getNamespace(machine), machine); p.addMember(d); assertEquals(sizeDiagrams + 1, p.getDiagrams().size()); assertEquals(sizeMembers + 1, p.getMembers().size()); p.moveToTrash(oper); assertTrue("Operation not in trash", p.isInTrash(oper)); assertTrue("Statemachine not in trash", Model.getUmlFactory().isRemoved(machine)); assertEquals(sizeDiagrams, p.getDiagrams().size()); assertEquals(sizeMembers, p.getMembers().size()); }
/** * Test deleting an operation that contains a statechart diagram. The diagram should be deleted, * too. */ public void testDeleteOperationWithStateDiagram() { Project p = ProjectManager.getManager().getOpenProjects().get(0); assertEquals(2, p.getDiagramList().size()); int sizeMembers = p.getMembers().size(); int sizeDiagrams = p.getDiagramList().size(); // test with a class and class diagram Object package1 = Model.getModelManagementFactory().buildPackage("test1"); Object aClass = Model.getCoreFactory().buildClass(package1); Object voidType = p.getDefaultReturnType(); Object oper = Model.getCoreFactory().buildOperation(aClass, voidType); // try with Statediagram Object machine = Model.getStateMachinesFactory().buildStateMachine(oper); UMLStateDiagram d = new UMLStateDiagram(Model.getFacade().getNamespace(machine), machine); p.addMember(d); assertEquals(sizeDiagrams + 1, p.getDiagramList().size()); assertEquals(sizeMembers + 1, p.getMembers().size()); p.moveToTrash(oper); Model.getPump().flushModelEvents(); assertTrue("Operation not in trash", p.isInTrash(oper)); /* Changed by issue 4281: */ assertTrue("Statemachine in trash", !Model.getUmlFactory().isRemoved(machine)); assertEquals(sizeDiagrams + 1, p.getDiagramList().size()); assertEquals(sizeMembers + 1, p.getMembers().size()); /* After issue 4284 will be solved, we * may even delete the class, and the diagram * should still exist. */ }
/** * Test deleting a package that contains a Class with Statechart diagram. The diagram should be * deleted, too. */ public void testDeletePackageWithStateDiagram() { Project p = ProjectManager.getManager().getOpenProjects().get(0); assertEquals(2, p.getDiagramList().size()); int sizeMembers = p.getMembers().size(); int sizeDiagrams = p.getDiagramList().size(); // test with a class and class diagram Object package1 = Model.getModelManagementFactory().buildPackage("test1"); Object aClass = Model.getCoreFactory().buildClass(package1); // try with Statediagram Object machine = Model.getStateMachinesFactory().buildStateMachine(aClass); UMLStateDiagram d = new UMLStateDiagram(Model.getFacade().getNamespace(machine), machine); p.addMember(d); assertEquals(sizeDiagrams + 1, p.getDiagramList().size()); assertEquals(sizeMembers + 1, p.getMembers().size()); p.moveToTrash(package1); Model.getPump().flushModelEvents(); assertTrue("Class not in trash", Model.getUmlFactory().isRemoved(aClass)); assertTrue("Statemachine not in trash", Model.getUmlFactory().isRemoved(machine)); assertEquals(sizeDiagrams, p.getDiagramList().size()); assertEquals(sizeMembers, p.getMembers().size()); }
/** @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { super.actionPerformed(e); // #if defined(STATEDIAGRAM) or defined(ACTIVITYDIAGRAM) // @#$LPS-STATEDIAGRAM:GranularityType:Statement // @#$LPS-ACTIVITYDIAGRAM:GranularityType:Statement // @#$LPS-STATEDIAGRAM:Localization:EndMethod // @#$LPS-ACTIVITYDIAGRAM:Localization:EndMethod Model.getStateMachinesFactory().buildSubmachineState(getTarget()); // #endif }
/** Test deleting a statechart diagram directly. */ public void testDeleteStateDiagram() { Project p = ProjectManager.getManager().getCurrentProject(); assertEquals(2, p.getDiagrams().size()); int sizeMembers = p.getMembers().size(); int sizeDiagrams = p.getDiagrams().size(); // test with a class and class diagram Object package1 = Model.getModelManagementFactory().buildPackage("test1", null); Object aClass = Model.getCoreFactory().buildClass(package1); // try with Statediagram Object machine = Model.getStateMachinesFactory().buildStateMachine(aClass); UMLStateDiagram d = new UMLStateDiagram(Model.getFacade().getNamespace(machine), machine); p.addMember(d); assertEquals(sizeDiagrams + 1, p.getDiagrams().size()); assertEquals(sizeMembers + 1, p.getMembers().size()); p.moveToTrash(d); assertTrue("Statediagram not in trash", p.isInTrash(d)); assertEquals(sizeDiagrams, p.getDiagrams().size()); assertEquals(sizeMembers, p.getMembers().size()); }
/* * @see org.argouml.uml.ui.behavior.state_machines.ActionNewEvent#createEvent( * java.lang.Object) */ protected Object createEvent(Object ns) { return Model.getStateMachinesFactory().buildChangeEvent(ns); }
/** * Parse user input for state bodies and assign the individual lines to according actions or * transitions. The user input consists of multiple lines like: * * <pre> * action-label / action-expression * </pre> * * or the format of a regular transition - see parseTransition(). * * <p>"action-label" stands for one of "entry", "do" and "exit". The words "entry", "do" and * "exit" are case-independent. * * @param st The State object. * @param s The string to parse. * @throws ParseException when there is a syntax problem, e.g. non-matching brackets () or [] */ protected void parseStateBody(Object st, String s) throws ParseException { boolean foundEntry = false; boolean foundExit = false; boolean foundDo = false; /* Generate all the existing internal transitions, * so that we can compare them as text with the newly entered ones. */ ModelElementInfoList internalsInfo = new ModelElementInfoList(Model.getFacade().getInternalTransitions(st)); StringTokenizer lines = new StringTokenizer(s, "\n\r"); while (lines.hasMoreTokens()) { String line = lines.nextToken().trim(); /* Now let's check if the new line is already present in * the old list of internal transitions; if it is, then * mark the old one to be retained (i.e. do not create a new one), * if it isn't, continue with parsing: */ if (!internalsInfo.checkRetain(line)) { if (line.toLowerCase().startsWith("entry") && line.substring(5).trim().startsWith("/")) { parseStateEntryAction(st, line); foundEntry = true; } else if (line.toLowerCase().startsWith("exit") && line.substring(4).trim().startsWith("/")) { parseStateExitAction(st, line); foundExit = true; } else if (line.toLowerCase().startsWith("do") && line.substring(2).trim().startsWith("/")) { parseStateDoAction(st, line); foundDo = true; } else { Object t = Model.getStateMachinesFactory().buildInternalTransition(st); if (t == null) { continue; } /* TODO: If the next line trows an exception, then what * do we do with the remainder of the * parsed/to be parsed lines? */ /* TODO: Is this a good way of handling nested notation? * The following fails the tests: * new TransitionNotationUml(t).parse(line); */ new TransitionNotationUml(t).parseTransition(t, line); /* Add this new one, and mark it to be retained: */ internalsInfo.add(t, true); } } } if (!foundEntry) { delete(Model.getFacade().getEntry(st)); } if (!foundExit) { delete(Model.getFacade().getExit(st)); } if (!foundDo) { delete(Model.getFacade().getDoActivity(st)); } /* Process the final list of internal transitions, * and hook it to the state: */ Model.getStateMachinesHelper().setInternalTransitions(st, internalsInfo.finalisedList()); }