⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newobjectdiagram.java

📁 UML设计测试工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                      linkEnd.associationEnd().multiplicity().toString(),                                      this, link.association() );                    fGraph.addEdge(e);                    halfEdges.add( e );                }                if ( fLinkObjectToNodeEdge.get( link ) != null ) {                    halfEdges.add( fLinkObjectToNodeEdge.get( link ) );                }                node.setHalfEdges( halfEdges );                fHalfLinkToEdgeMap.put( link, halfEdges );                fLayouter = null;            }    }    /**     * Removes a link from the diagram.     */    public void deleteLink(MLink link) {        if (link.linkEnds().size() == 2) {            EdgeBase e = null;            if (link instanceof MObject) { // MLinkObject ???                e = (NodeEdge) fLinkObjectToNodeEdge.get(link);                // TODO: this is just a tempory solution                if (e == null) {                    return;                }            } else {                e = (BinaryEdge) fBinaryLinkToEdgeMap.get(link);            }            if ( e != null && !(link instanceof MLinkObject )                 && fHiddenEdges.contains(link) ) {                fHiddenEdges.remove(link);                fLog.println("Deleted link `" + link + "' from hidden links.");            }            if (e == null) {                throw new RuntimeException( "no edge for link `" + link                                            + "' in current state." );            }            synchronized (fLock) {                fGraph.removeEdge(e);                if (link instanceof MObject) {                    fLinkObjectToNodeEdge.remove(link);                } else {                    fBinaryLinkToEdgeMap.remove(link);                }                fLayouter = null;            }        } else {            DiamondNode n = (DiamondNode) fNaryLinkToDiamondNodeMap.get( link );            //NodeEdge ne = (NodeEdge) fLinkToAssociationClass.get( (MLinkObject) link );            if ( n == null ) {//&& ne == null ) {                if ( fHiddenEdges.contains(link) ) {                    fHiddenEdges.remove(link);                    fLog.println("Deleted link `" + link                                 + "' from hidden links.");                } else {                    throw new RuntimeException(                            "no diamond node for n-ary link `" + link                            + "' in current state.");                }            }            synchronized (fLock) {                // all dangling HalfLinkEdges are removed by the graph                fGraph.remove(n);                fNaryLinkToDiamondNodeMap.remove(link);                fHalfLinkToEdgeMap.remove( link );                fLayouter = null;            }            synchronized (fLock) {                if (link instanceof MObject) {                    NodeEdge edge =                         (NodeEdge) fLinkObjectToNodeEdge.get( link );                    if (edge != null) {                        fGraph.removeEdge( edge );                        fLinkObjectToNodeEdge.remove( link );                    }                }            }        }    }    /**     * Adds a new Link to the objectdiagram.     */    class ActionInsertLink extends AbstractAction {        private Set fObjects;        private String fAssocName;        ActionInsertLink(String text, Set objects, String assocName) {            super(text);            fObjects = objects;            fAssocName = assocName;        }        public void actionPerformed(ActionEvent e) {            fParent.insertLink(fAssocName, fObjects);        }    }    /**     * Deletes a Link from the objectdiagram.     */    class ActionDeleteLink extends AbstractAction {        private Set fObjects;        private String fAssocName;        ActionDeleteLink(String text, Set objects, String assocName) {            super(text);            fObjects = objects;            fAssocName = assocName;        }        public void actionPerformed(ActionEvent e) {            fParent.deleteLink( fAssocName, fObjects );            fEdgeSelection.clear();        }    }        /**     * Deletes the selected objects.     */    class ActionDelete extends AbstractAction {        private Set fObjects;        ActionDelete(String text, Set objects) {            super(text);            fObjects = objects;        }        public void actionPerformed(ActionEvent e) {            fParent.deleteObjects(fObjects);            fNodeSelection.clear();        }    }    /**     * Deletes all hidden elements form this diagram.     */    public void deleteHiddenElementsFromDiagram( Set objectsToHide,                                                  Set linksToHide ) {        Iterator it = objectsToHide.iterator();        while ( it.hasNext() ) {            MObject obj = (MObject) it.next();            deleteObject( obj );        }                it = linksToHide.iterator();        while ( it.hasNext() ) {            MLink link = (MLink) it.next();            deleteLink( link );        }                fHiddenNodes.addAll( objectsToHide );        fHiddenEdges.addAll( linksToHide );    }            /**     * Creates and shows popup menu if mouse event is the trigger for popups.     */    public boolean maybeShowPopup(MouseEvent e) {        boolean separatorNeeded = false;        if (!e.isPopupTrigger())            return false;        // create the popup menu        JPopupMenu popupMenu = unionOfPopUpMenu();        // position for the popupMenu items         int pos = 0;                // get all associations that exist between the classes of the        // selected objects        if (!fNodeSelection.isEmpty()) {            HashSet selectedObjects = new HashSet();            Set classesOfSelectedObjects = new HashSet();            Iterator nodeIterator = fNodeSelection.iterator();            while (nodeIterator.hasNext()) {                PlaceableNode node = (PlaceableNode) nodeIterator.next();                if (node instanceof ObjectNode && node.isDeletable()) {                    selectedObjects.add(((ObjectNode) node).object());                    classesOfSelectedObjects.add(((ObjectNode) node).object()                            .cls());                }            }            Set associations = fParent                    .getAllAssociationsBetweenClasses(classesOfSelectedObjects);            Log.trace(this, "associations = " + associations);            // for each association, check if there already exists a            // link between the objects. Add "Delete link" menu item            // in this case, otherwise add an "Insert link" item.            Iterator assocIterator = associations.iterator();            boolean addedInsertLinkAction = false;            while (assocIterator.hasNext()) {                MAssociation assoc = (MAssociation) assocIterator.next();                if (!fParent.hasLinkBetweenObjects(assoc, selectedObjects)) {                    popupMenu.insert(new ActionInsertLink("Insert " + assoc.name()                                                       + " link", selectedObjects,                                                        assoc.name()),                                      pos++ );                    addedInsertLinkAction = true;                }                 if ( fParent.hasLinkBetweenObjects(assoc, selectedObjects) ) {                    popupMenu.insert(new ActionDeleteLink("Delete " + assoc.name()                                                       + " link",                                                        selectedObjects,                                                        assoc.name()),                                      pos++);                    addedInsertLinkAction = true;                }                           }            if ( addedInsertLinkAction )                popupMenu.insert( new JSeparator(), pos++ );            String txt = null;            if (selectedObjects.size() == 1) {                txt = "'"+((MObject) selectedObjects.iterator().next()).name()+"'";            } else if (selectedObjects.size() > 1) {                txt = selectedObjects.size() + " objects";            }            if (txt != null && txt.length() > 0) {                popupMenu.insert( new ActionDelete("Delete " + txt,                                                    selectedObjects),                                                   pos++ );                popupMenu.insert( fHideAdmin.setValues("Hide " + txt,                                                       selectedObjects),                                                       pos++ );                popupMenu.insert( fHideAdmin.setValues("Crop " + txt,                                                       getNoneSelectedNodes( selectedObjects )),                                                       pos++ );                separatorNeeded = true;            }        }        if (!fHiddenNodes.isEmpty()) {            final JMenuItem showAllObjects = new JMenuItem("Show hidden objects");            showAllObjects.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent ev) {                    fHideAdmin.showAllHiddenElements();                    repaint();                }            });            popupMenu.insert( showAllObjects, pos++ );            separatorNeeded = true;        }        if (separatorNeeded) {            popupMenu.insert( new JSeparator(), pos++ );            separatorNeeded = false;        }        popupMenu.show(e.getComponent(), e.getX(), e.getY());        return true;    }        /**     * Finds all nodes which are not selected.     * @param selectedNodes Nodes which are selected at this point in the diagram.     * @return A HashSet of the none selected objects in the diagram.     */    private Set getNoneSelectedNodes( Set selectedNodes ) {        Set noneSelectedNodes = new HashSet();                Iterator it = fGraph.iterator();        while ( it.hasNext() ) {            Object o = it.next();            if ( o instanceof ObjectNode ) {                MObject obj = ((ObjectNode) o).object();                if ( !selectedNodes.contains( obj ) ) {                    noneSelectedNodes.add( obj );                }                }        }        return noneSelectedNodes;    }        private JWindow fObjectInfoWin = null;    private void displayObjectInfo(MObject obj, MouseEvent e) {        if (fObjectInfoWin != null) {            fObjectInfoWin.setVisible(false);            fObjectInfoWin.dispose();        }        Box attrBox = Box.createVerticalBox();        Box valueBox = Box.createVerticalBox();        MObjectState objState = obj.state(fParent.system().state());        Map attributeValueMap = objState.attributeValueMap();        Iterator it = attributeValueMap.entrySet().iterator();        while (it.hasNext()) {            Map.Entry entry = (Map.Entry) it.next();            MAttribute attr = (MAttribute) entry.getKey();            Value v = (Value) entry.getValue();            attrBox.add(new JLabel(attr.name() + " = "));            valueBox.add(new JLabel(v.toString()));        }        fObjectInfoWin = new JWindow();        JPanel contentPane = new JPanel();        Border border = BorderFactory.createCompoundBorder(BorderFactory                .createRaisedBevelBorder(), BorderFactory                .createLoweredBevelBorder());        contentPane.setBorder(border);        Box b = Box.createHorizontalBox();        b.add(attrBox);        b.add(valueBox);        contentPane.add(b);        fObjectInfoWin.setContentPane(contentPane);        Point p = e.getPoint();        SwingUtilities.convertPointToScreen(p, (JComponent) e.getSource());        fObjectInfoWin.setLocation(p);//e.getPoint());        fObjectInfoWin.pack();        fObjectInfoWin.setVisible(true);    }            /**     *      * Accepts a drag of a class from the ModelBrowser. A new object of this     * class will be created.     * @param dtde     */    public void dropObjectFromModelBrowser( DropTargetDropEvent dtde ) {        //Log.trace(this, "dtde = " + dtde);        try {            dtde.acceptDrop(DnDConstants.ACTION_MOVE);            Transferable transferable = dtde.getTransferable();            // we accept only Strings            if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {                String s = (String) transferable                        .getTransferData(DataFlavor.stringFlavor);                //Log.trace(this, "transfer = " + s);                if (s.startsWith("CLASS-")) {                    Point p = dtde.getLocation();                    if ( isDoAutoLayout() ) {                        fNextNodeX = Math.random() * Math.max(100, getWidth());                        fNextNodeY = Math.random() * Math.max(100, getHeight());                    } else {                                            fNextNodeX = p.getX();                        fNextNodeY = p.getY();                    }                    String clsName = s.substring(6);                    fParent.createObject(clsName);                }            }            dtde.dropComplete(true);        } catch (IOException exception) {            exception.printStackTrace();            System.err.println("Exception" + exception.getMessage());            dtde.dropComplete(false);        } catch (UnsupportedFlavorException ufException) {            ufException.printStackTrace();            System.err.println("Exception" + ufException.getMessage());            dtde.dropComplete(false);        }    }            /**     * Checks if the object info window should be displayed.     * @param e MouseEvent     */    public void mayBeShowObjectInfo( MouseEvent e ) {        if (fNodeSelection.size() == 1) {            PlaceableNode node = (PlaceableNode) fNodeSelection.iterator().next();            if (node instanceof ObjectNode) {                displayObjectInfo(((ObjectNode) node).object(), e);            }        }    }        /**     * Checks if the object info window should be disposed.     */    public void mayBeDisposeObjectInfo() {        if (fObjectInfoWin != null) {            fObjectInfoWin.setVisible(false);            fObjectInfoWin.dispose();            fObjectInfoWin = null;        }    }        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -