package jdepend.client.report.way.mapui; import java.util.Collection; import java.util.Map; import jdepend.model.Element; import jdepend.model.Relation; import jdepend.client.report.util.IntensitySizeCalculator; import jdepend.client.report.way.mapui.model.MapData; import prefuse.data.Graph; import prefuse.data.Table; public class CovertorUtil { static Graph getGraph(MapData mapData) { int NNODES = mapData.getElements().size(); int NNODECOLS = 10; int NEDGES = mapData.getRelations().size(); int NEDGECOLS = 8; Map<Relation, Integer> relationSizes = IntensitySizeCalculator.calRelationSize(mapData.getRelations()); Map<Element, Integer> elementSizes = IntensitySizeCalculator.calElementSize(mapData.getElements()); Class[] NTYPES = { int.class, String.class, double.class, boolean.class, String.class, boolean.class, boolean.class, boolean.class, double.class, double.class }; String[] NHEADERS = { "id", "label", "size", "isInner", "info", "CaColor", "CeColor", "mutualColor", "xField", "yField" }; // id Integer[] NCOLUMN1 = new Integer[NNODES]; int i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN1[i] = new Integer(i + 1); } // 显示名称 String[] NCOLUMN2 = new String[NNODES]; i = 0; for (Element element : mapData.getElements()) { NCOLUMN2[i++] = element.getName(); } // 内聚值 Float[] NCOLUMN3 = new Float[NNODES]; i = 0; for (Element element : mapData.getElements()) { NCOLUMN3[i++] = new Float(elementSizes.get(element)); } // 是否内部类 Boolean[] NCOLUMN4 = new Boolean[NNODES]; i = 0; for (Element element : mapData.getElements()) { NCOLUMN4[i++] = element.getComponent().isInner(); } // 摘要信息 String[] NCOLUMN5 = new String[NNODES]; i = 0; for (Element element : mapData.getElements()) { NCOLUMN5[i++] = element.toString(); } // 关联Node颜色 Boolean[] NCOLUMN6 = new Boolean[NNODES]; i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN6[i] = false; } Boolean[] NCOLUMN7 = new Boolean[NNODES]; i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN7[i] = false; } Boolean[] NCOLUMN8 = new Boolean[NNODES]; i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN8[i] = false; } // 设置上次人工移动的位置 Double[] NCOLUMN9 = new Double[NNODES]; Double[] NCOLUMN10 = new Double[NNODES]; if (mapData.isHaveSpecifiedPosition()) { i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN9[i] = mapData.getX(NCOLUMN2[i]); } i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN10[i] = mapData.getY(NCOLUMN2[i]); } } else { i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN9[i] = 0D; } i = 0; for (i = 0; i < NNODES; i++) { NCOLUMN10[i] = 0D; } } Object[][] NODES = { NCOLUMN1, NCOLUMN2, NCOLUMN3, NCOLUMN4, NCOLUMN5, NCOLUMN6, NCOLUMN7, NCOLUMN8, NCOLUMN9, NCOLUMN10 }; Class[] ETYPES = { int.class, int.class, double.class, String.class, String.class, boolean.class, boolean.class, boolean.class }; String[] EHEADERS = { "id1", "id2", "weight", "info", "attentionType", "CaColor", "CeColor", "mutualColor" }; // 起始点编号 Integer[] ECOLUMN1 = new Integer[NEDGES]; i = 0; for (Relation relation : mapData.getRelations()) { ECOLUMN1[i++] = CovertorUtil.getPosition(mapData.getElements(), relation.getCurrent()); } // 终止点编号 Integer[] ECOLUMN2 = new Integer[NEDGES]; i = 0; for (Relation relation : mapData.getRelations()) { ECOLUMN2[i++] = CovertorUtil.getPosition(mapData.getElements(), relation.getDepend()); } // 耦合值 Float[] ECOLUMN3 = new Float[NEDGES]; i = 0; for (Relation relation : mapData.getRelations()) { ECOLUMN3[i++] = new Float(relationSizes.get(relation)); } // 摘要信息 String[] ECOLUMN4 = new String[NEDGES]; i = 0; for (Relation relation : mapData.getRelations()) { ECOLUMN4[i++] = relation.toString(); } // 关注程度 String[] ECOLUMN5 = new String[NEDGES]; i = 0; for (Relation relation : mapData.getRelations()) { ECOLUMN5[i++] = relation.getAttentionType(); } // 关联线颜色 Boolean[] ECOLUMN6 = new Boolean[NEDGES]; i = 0; for (i = 0; i < NEDGES; i++) { ECOLUMN6[i] = false; } Boolean[] ECOLUMN7 = new Boolean[NEDGES]; i = 0; for (i = 0; i < NEDGES; i++) { ECOLUMN7[i] = false; } Boolean[] ECOLUMN8 = new Boolean[NEDGES]; i = 0; for (i = 0; i < NEDGES; i++) { ECOLUMN8[i] = false; } Object[][] EDGES = { ECOLUMN1, ECOLUMN2, ECOLUMN3, ECOLUMN4, ECOLUMN5, ECOLUMN6, ECOLUMN7, ECOLUMN8 }; Table nodes = new Table(NNODES, NNODECOLS); for (int c = 0; c < NNODECOLS; ++c) { nodes.addColumn(NHEADERS[c], NTYPES[c]); for (int r = 0; r < NNODES; ++r) { nodes.set(r, NHEADERS[c], NODES[c][r]); } } Table edges = new Table(NEDGES, NEDGECOLS); for (int c = 0; c < NEDGECOLS; ++c) { edges.addColumn(EHEADERS[c], ETYPES[c]); for (int r = 0; r < NEDGES; ++r) { edges.set(r, EHEADERS[c], EDGES[c][r]); } } return new Graph(nodes, edges, true, NHEADERS[0], EHEADERS[0], EHEADERS[1]); } private static int getPosition(Collection<Element> elements, Element obj) { int i = 0; for (Element element : elements) { if (obj.equals(element)) { return i + 1; } i++; } throw new RuntimeException("数据错误!"); } }