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

📄 actionhideobjectdiagram.java

📁 UML设计测试工具
💻 JAVA
字号:
/*
 * USE - UML based specification environment
 * Copyright (C) 1999-2004 Mark Richters, University of Bremen
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

/* $ProjectHeader: use 2-3-0-release.1 Mon, 12 Sep 2005 20:18:33 +0200 green $ */

package org.tzi.use.gui.views.diagrams.event;

import java.awt.event.ActionEvent;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.tzi.use.graph.DirectedGraph;
import org.tzi.use.gui.util.Selection;
import org.tzi.use.gui.views.diagrams.EdgeBase;
import org.tzi.use.gui.views.diagrams.LayoutInfos;
import org.tzi.use.gui.views.diagrams.NodeBase;
import org.tzi.use.gui.views.diagrams.NodeEdge;
import org.tzi.use.gui.views.diagrams.objectdiagram.NewObjectDiagram;
import org.tzi.use.parser.xml.XMLParserAccess;
import org.tzi.use.parser.xml.XMLParserAccessImpl;
import org.tzi.use.uml.sys.MLink;
import org.tzi.use.uml.sys.MLinkObject;
import org.tzi.use.uml.sys.MObject;

/**
 * Hides the selected objects.
 *
 * @version $ProjectVersion: 2-3-0-release.1 $
 * @author Fabian Gutsche
  */
public final class ActionHideObjectDiagram extends ActionHide {
 
    /**
     * The diagram the graph, nodes and edges belong to.
     */
    private NewObjectDiagram fDiagram;

    public ActionHideObjectDiagram( String text, Set nodesToHide,
                                    Selection nodeSelection,
                                    DirectedGraph graph, LayoutInfos layoutInfos ) {
        super(text);
        setNodes( nodesToHide );
        
        fLayoutInfos = layoutInfos;
        fHiddenNodes = layoutInfos.getHiddenNodes();
        fHiddenEdges = layoutInfos.getHiddenEdges();
        fEdgeToBinaryEdgeMap = layoutInfos.getBinaryEdgeToEdgeMap();
        fNodeToNodeBaseMap = layoutInfos.getNodeToNodeMap();
        fNaryEdgeToDiamondNodeMap = layoutInfos.getNaryEdgeToDiamondNodeMap();
        fEdgeToHalfEdgeMap = layoutInfos.getNaryEdgeToHalfEdgeMap();
        fEdgeToNodeEdgeMap = layoutInfos.getEdgeNodeToEdgeMap();
        fDiagram = (NewObjectDiagram) layoutInfos.getDiagram();
        
        fNodeSelection = nodeSelection;
        fGraph = graph;
    }

    /**
     * Displays all hidden objects again. The objects have to be added
     * again, because they were deleted from the view before.
     */
    public void showAllHiddenElements() {
        // add all hidden objects
        Iterator it = fHiddenNodes.iterator();
        MObject obj = null;
        while (it.hasNext()) {
            obj = (MObject) it.next();
            fDiagram.addObject(obj);
        }
        fHiddenNodes.clear();

        // add all hidden links
        it = fHiddenEdges.iterator();
        while (it.hasNext()) {
            MLink link = (MLink) it.next();
            fDiagram.addLink(link);
        }
        fHiddenEdges.clear();
        
        XMLParserAccess xmlParser = new XMLParserAccessImpl( fLayoutInfos );
        xmlParser.loadXMLString( fLayoutInfos.getHiddenElementsXML(), false );
        fLayoutInfos.setHiddenElementsXML( "" );
        fLayoutXMLForHiddenElements = "";
    }    
    
    /**
     * Saves links which are connected to the hidden objects.
     */
    public Set saveEdges( Set objectsToHide ) {
        Set linksToHide = new HashSet();
        Set additionalObjToHide = new HashSet();
        
        Iterator it = objectsToHide.iterator();
        while ( it.hasNext() ) {
            MObject obj = (MObject) it.next();
            if ( obj instanceof MLinkObject ) {
                linksToHide.add( obj );
                additionalObjToHide.add( obj );
                NodeEdge ne = 
                    (NodeEdge) fEdgeToNodeEdgeMap.get( (MLinkObject) obj );
                NodeBase n = 
                    (NodeBase) fNodeToNodeBaseMap.get( (MObject) obj );
                fLayoutXMLForHiddenElements += ne.storePlacementInfo( true );
                fLayoutXMLForHiddenElements += n.storePlacementInfo( true );
                
                // link object is participating in an nary link than save 
                // location of diamond as well.
                Set naryLinkSet = ((MLink) obj).linkEnds();
                if ( naryLinkSet.size() > 2 ) {
                    NodeBase dn = 
                        (NodeBase) fNaryEdgeToDiamondNodeMap.get( (MLink) obj );
                    fLayoutXMLForHiddenElements += dn.storePlacementInfo( true );
                    
//                    // save HalfEdges
//                    Iterator naryLinkEndIt = naryLinkSet.iterator();
//                    while ( naryLinkEndIt.hasNext() ) {
//                        MLinkEnd naryLinkEnd = (MLinkEnd) naryLinkEndIt.next();
//                        HalfEdge he = (HalfEdge) fEdgeToHalfEdgeMap.get( naryLinkEnd );
//                        fLayoutXMLForHiddenElements += he.storePlacementInfo( true );
//                    }
                }
            } else {
                // check if object is in one of the binary links
                Iterator linkIt = fEdgeToBinaryEdgeMap.keySet().iterator();
                while ( linkIt.hasNext() ) {
                    MLink link = (MLink) linkIt.next();
                    if ( link.linkedObjects().contains( obj ) ) {
                        linksToHide.add( link );
                        // save layout information
                        if ( link instanceof MLinkObject ) {
                            NodeEdge ne = 
                                (NodeEdge) fEdgeToNodeEdgeMap.get( (MLinkObject) link );
                            fLayoutXMLForHiddenElements += ne.storePlacementInfo( true );
                        } else {
                            EdgeBase e = 
                                (EdgeBase) fEdgeToBinaryEdgeMap.get( link );
                            fLayoutXMLForHiddenElements += e.storePlacementInfo( true );
                        }
                    }
                }
                
                // check if object is in one of the nary links
                Iterator naryLinkIt = fNaryEdgeToDiamondNodeMap.keySet().iterator();
                while ( naryLinkIt.hasNext() ) {
                    MLink naryLink = (MLink) naryLinkIt.next();
                    
                    if ( naryLink.linkedObjects().contains( obj ) ) {
                        linksToHide.add( naryLink );
                        
                        // save layout information
                        if ( naryLink instanceof MLinkObject ) {
                            NodeEdge ne = 
                                (NodeEdge) fEdgeToNodeEdgeMap.get( (MLinkObject) naryLink );
                            fLayoutXMLForHiddenElements += ne.storePlacementInfo( true );
                        } 
                        
                        // save diamond node
                        NodeBase n = 
                            (NodeBase) fNaryEdgeToDiamondNodeMap.get( naryLink );
                        fLayoutXMLForHiddenElements += n.storePlacementInfo( true );
                        
//                        // save HalfEdges
//                        List halfEdges = (ArrayList) fEdgeToHalfEdgeMap.get( naryLink );
//                        Iterator naryHalfEdgeIt = halfEdges.iterator();
//                        while ( naryHalfEdgeIt.hasNext() ) {
//                            HalfEdge he = (HalfEdge) naryHalfEdgeIt.next();
//                            fLayoutXMLForHiddenElements += he.storePlacementInfo( true );
//                        }

                    }
                }
                
                // check if object is participating in an link object
                Iterator linkObjIt = fEdgeToNodeEdgeMap.keySet().iterator();
                while ( linkObjIt.hasNext() ) {
                    MLink linkObj = (MLink) linkObjIt.next();
                    if ( linkObj.linkedObjects().contains( obj ) ) {
                        linksToHide.add( linkObj );
                        additionalObjToHide.add( linkObj );
                        
                        // save layout information
                        if ( linkObj instanceof MLinkObject ) {
                            NodeEdge ne = 
                                (NodeEdge) fEdgeToNodeEdgeMap.get( (MLinkObject) linkObj );
                            NodeBase n = (NodeBase) fNodeToNodeBaseMap.get( (MObject) linkObj );
                            fLayoutXMLForHiddenElements += ne.storePlacementInfo( true );
                            fLayoutXMLForHiddenElements += n.storePlacementInfo( true );
                        }
                    }
                }
            }
        }
        
        objectsToHide.addAll( additionalObjToHide );
        return linksToHide;
    }
    

    /**
     * Hides all objects with there connecting links.
     */
    public void hideNodesAndEdges() {
        Set objectsToHide = new HashSet();
        
        // hide objects
        Iterator it = fNodesToHide.iterator();
        while (it.hasNext()) {
            MObject obj = (MObject) it.next();
            NodeBase objToHideNode = (NodeBase) fNodeToNodeBaseMap.get(obj);
            
            // save position information about object
            Iterator nodeIt = fGraph.iterator();
            while (nodeIt.hasNext()) {
                NodeBase node = (NodeBase) nodeIt.next();
                if (node.equals(objToHideNode)) {
                    fLayoutXMLForHiddenElements += objToHideNode.storePlacementInfo( true );
                }
            }
            
            objectsToHide.add( obj );
        }
        
        // save links which are connected to the objects
        Set linksToHide = saveEdges( objectsToHide );
        
        fDiagram.deleteHiddenElementsFromDiagram( objectsToHide, linksToHide );
        
        fNodeSelection.clear();
        fDiagram.repaint();
    }
    
    public void actionPerformed(ActionEvent e) {
        hideNodesAndEdges();
        String xml = fLayoutInfos.getHiddenElementsXML()
                     + fLayoutXMLForHiddenElements;
        fLayoutInfos.setHiddenElementsXML( xml );
    }


}

⌨️ 快捷键说明

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