/** * Add a classier to the current diagram. * * @param classifier The new class or interface to add to the editor. * @param minimise minimise the class fig by hiding compartments (of attributes and operations) */ private void addClassifier(Object classifier, boolean minimise) { String name = Model.getFacade().getName(classifier); // if the classifier is not in the current diagram, add it: if (currentGM.canAddNode(classifier)) { FigClassifierBox newFig; if (Model.getFacade().isAClass(classifier)) { newFig = new FigClass(currentGM, classifier); } else if (Model.getFacade().isAInterface(classifier)) { newFig = new FigInterface(currentGM, classifier); } else { return; } /* * The following calls are ORDER DEPENDENT. Not sure why, but the * layer add must come before the model add or we'll end up with * duplicate figures in the diagram. - tfm */ currentLayer.add(newFig); currentGM.addNode(classifier); currentLayer.putInPosition(newFig); newFig.setOperationsVisible(!minimise); if (Model.getFacade().isAClass(classifier)) { ((FigClass) newFig).setAttributesVisible(!minimise); } newFig.setSize(newFig.getMinimumSize()); } else { // the class is in the diagram // so we are on a second pass, // find the fig for this class can update its visible state. FigClassifierBox existingFig = null; List figs = currentLayer.getContentsNoEdges(); for (int i = 0; i < figs.size(); i++) { Fig fig = (Fig) figs.get(i); if (classifier == fig.getOwner()) { existingFig = (FigClassifierBox) fig; } } existingFig.renderingChanged(); } // add edges // for a 2-pass r.e. process we might have already added the // class but not its edges currentGM.addNodeRelatedEdges(classifier); }