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

📄 test.java.old

📁 UML设计测试工具
💻 OLD
字号:
/* * 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.graph.layout;import org.tzi.use.graph.*;import java.util.*;import javax.swing.*;import java.awt.*;/** * @version 	$ProjectVersion: 2-3-0-release.1 $ * @author 	Mark Richters */public class Test {    public Object[] sort(DirectedGraph g) {	BitSet visited = new BitSet(g.size());	Iterator nodes = g.iterator();	int n = 0;	while ( nodes.hasNext() ) {	    Object node = nodes.next();	    visited.set(n);	    	}	return null;    }    public static DirectedGraph condense(DirectedGraph g1, Object[] orderedNodes) {	// copy graph while absorbing 1-1 nodes with outgoing edge to	// 1-2 or 1-3 node	DirectedGraph g2 = new DirectedGraphBase();	g2.add(orderedNodes[0]);	for (int i = 1; i < orderedNodes.length - 1; i++) {	    boolean absorb = false;	    Object n1 = orderedNodes[i];	    // check for 1-1 node	    if ( g1.numIncomingEdges(n1) == 1 && g1.numOutgoingEdges(n1) == 1 ) {		// get target node at outgoing edge		Object n2 = g1.targetNodeSet(n1).iterator().next();		int n2OutDegree = g1.numOutgoingEdges(n2);		// check for 1-2 or 1-3 node		if ( g1.numIncomingEdges(n2) == 1 		     && (n2OutDegree == 2 || n2OutDegree == 3) ) {		    absorb = true;		}	    }	    if ( ! absorb ) 		g2.add(n1);	}	return g2;    }    public static List formPairs(DirectedGraph g, Object[] orderedNodes) {	ArrayList pairs = new ArrayList();	int i = orderedNodes.length - 2;	while ( i > 1 ) {	    Object n = orderedNodes[i];	    int ind = g.numIncomingEdges(n);	    int outd = g.numOutgoingEdges(n);	    System.out.println("node: " + n + " " + ind + "-" + outd);	    if ( outd == 1 && (ind == 1 || ind == 2 || ind == 3) ) {		i--;	    } else if ( ind == 1 && (outd == 2 || outd == 3) ) {		pairs.add(new Object[] { orderedNodes[i-1], n});		i -= 2;	    } else if ( ind == 2 && outd == 2 ) {		Set predecessors = g.sourceNodeSet(n);		int j = 1; 		while ( j <= i ) {		    Object n2 = orderedNodes[i - j];		    if ( predecessors.contains(n2) ) {			pairs.add(new Object[] { n2, n});			break;		    } else			j++;		}		i = i - j - 1;	    }	    	}	return pairs;    }    public static Object[] removeCycles(final DirectedGraph g) {	LinkedList sl = new LinkedList();	LinkedList sr = new LinkedList();	ArrayList rest = new ArrayList();		Iterator nodes = g.iterator();	while ( nodes.hasNext() ) {	    Object node = nodes.next();	    int ind = g.numIncomingEdges(node);	    int outd = g.numOutgoingEdges(node);	    if ( outd == 0 ) {		// prepend sinks to sr		sr.addFirst(node);	    } else if ( ind == 0 ) {		// append source to sl		sl.addLast(node);	    } else {		rest.add(node);	    }	}	System.out.println("sl = " + sl);	System.out.println("sr = " + sr);		System.out.println("rest before sort = " + rest);	Collections.sort(rest, new Comparator() {		public int compare(Object node1, Object node2) {		    int d1 = g.numOutgoingEdges(node1) - g.numIncomingEdges(node1);		    int d2 = g.numOutgoingEdges(node2) - g.numIncomingEdges(node2);		    return d2 - d1;		}	    });	System.out.println("rest after sort = " + rest);	nodes = rest.iterator();	while ( nodes.hasNext() ) {	    Object node = nodes.next();	    sl.addLast(node);	}	System.out.println("sl = " + sl);	System.out.println("sr = " + sr);	sl.addAll(sr);	return sl.toArray();    }    private static void nextLayer(DirectedGraph g, List layers, Set layer) {	System.out.println("layer = " + layer);	Set aboveLayer = null;	Iterator nodeIter = layer.iterator();	while ( nodeIter.hasNext() ) {	    Object node = nodeIter.next();	    // consider immediate predecessors of node for next layer	    Set predecessors = g.sourceNodeSet(node);	    System.out.println("node = " + node + ", predecessors = " + predecessors);	    Iterator predIter = predecessors.iterator();	    while ( predIter.hasNext() ) {		Object predNode = predIter.next();		Set targets = g.targetNodeSet(predNode);		System.out.println("node = " + predNode + ", targets = " + targets);		if ( layer.containsAll(targets) ) {		    if ( aboveLayer == null ) {			aboveLayer = new HashSet();			layers.add(aboveLayer);		    }		    aboveLayer.add(predNode);		}	    }	}	if ( aboveLayer != null )	    nextLayer(g, layers, aboveLayer);    }//      public static void layer2(DirectedGraph g) {//  	int[] nodeLayer = new int[g.size()];//  	Iterator nodeIter = g.iterator();//  	while ( nodeIter.hasNext() ) {//  	    Object node = nodeIter.next();//  	    nodeLayer[node.num()] int outd = g.numOutgoingEdges(node);//      }    // p. 248    public static DirectedGraph graph1() {	final int N = 13;	int[][] edges = { 	    {1,2}, {1,4}, {1,5}, 	    {2,3}, {2,4}, {2,12}, 	    {3,4}, {3,9}, {3,11},	    {4,8},	    {5,6}, {5,7}, {5,9},	    {6,7}, {6,10}, {6,13},	    {7,8}, {7,9},	    {8,11}, {8,12},	    {9,12},	    {10,11}, {10,13},	    {11,13},	    {12,13},	};	return newGraph(N, edges);    }    // p. 295    public static DirectedGraph graph2() {	final int N = 9;	int[][] edges = { 	    {1,2}, {2,3}, {2,5}, {3,6}, {4,1}, {4,5}, {5,8},	    {6,5}, {6,9}, {7,4}, {8,7}, {9,8}	};	return newGraph(N, edges);    }    public static DirectedGraph graph3() {	final int N = 5;	int[][] edges = { 	    {1,2}, {1,3}, {1,4}, {1,5}, {2,3}, {2,4}, {3,4}	};	return newGraph(N, edges);    }    public static DirectedGraph newGraph(int N, int[][] edges) {	DirectedGraph g = new DirectedGraphBase(N);	Object[] nodes = new Object[N];	for (int i = 0; i < N; i++) {	    nodes[i] = new Integer(i + 1);	    g.add(nodes[i]);	}	    	for (int i = 0; i < edges.length; i++) {	    // System.out.println(edges[i].length);	    g.addEdge(new DirectedEdgeBase(nodes[edges[i][0] - 1], 					   nodes[edges[i][1] - 1]));	}	return g;    }    public static void main(String[] args) {  	DirectedGraph g;//  	System.out.println(g);//  	System.out.println();//  	removeCycles(g);//  	System.out.println();	g = graph3();	System.out.println(g);	System.out.println();	LayeredLayout l = new LayeredLayout(g);	Layout layout = l.layout();	//Object[] orderedNodes = removeCycles(g);	//layer(g, orderedNodes);	GraphPanel gp = new GraphPanel(layout);	JFrame f = new JFrame("GraphPanel");	// Layout the content pane        JPanel contentPane = new JPanel();        contentPane.setLayout(new BorderLayout());        contentPane.add(new JScrollPane(gp), BorderLayout.CENTER);        f.setContentPane(contentPane);	f.pack();	f.setVisible(true);    }}

⌨️ 快捷键说明

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