List of usage examples for org.apache.commons.collections15 Transformer Transformer
Transformer
From source file:com.google.code.facebook.graph.sna.applet.FacebookGraphApplet.java
/** * create an instance of a simple graph with controls to * demo the zoom features./*from www .j a va2 s .c o m*/ * */ @Override public void init() { super.init(); // create a simple graph for the demo fetchUserGraph(); final Collection<? extends Entity<FieldEnum, ConnectionEnum>> vertices = graph.getVertices(); // a Map for the labels Map<Entity<FieldEnum, ConnectionEnum>, String> map = new HashMap<Entity<FieldEnum, ConnectionEnum>, String>(); Iterator<? extends Entity<FieldEnum, ConnectionEnum>> iterator = vertices.iterator(); while (iterator.hasNext()) { Entity<FieldEnum, ConnectionEnum> entity = iterator.next(); map.put(entity, entity.getLabel()); } FRLayout<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>> layout = new FRLayout<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>>( (Graph<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>>) graph); layout.setMaxIterations(100); vv = new VisualizationViewer<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>>(layout, new Dimension(2000, 2000)); Transformer<Entity<FieldEnum, ConnectionEnum>, Paint> vpf = new PickableVertexPaintTransformer<Entity<FieldEnum, ConnectionEnum>>( vv.getPickedVertexState(), Color.white, Color.yellow); vv.getRenderContext().setVertexFillPaintTransformer(vpf); vv.getRenderContext().setEdgeDrawPaintTransformer( new PickableEdgePaintTransformer<EdgeAdapter<ConnectionEnum>>(vv.getPickedEdgeState(), Color.black, Color.cyan)); vv.setBackground(Color.white); // a Map for the Icons final Map<Entity<FieldEnum, ConnectionEnum>, Icon> iconMap = new HashMap<Entity<FieldEnum, ConnectionEnum>, Icon>(); new Thread(new Runnable() { public void run() { Iterator<? extends Entity<FieldEnum, ConnectionEnum>> iterator = vertices.iterator(); while (iterator.hasNext()) { try { Entity<FieldEnum, ConnectionEnum> entity = iterator.next(); // Icon icon = // new LayeredIcon(new ImageIcon("http://facebookgraph.appspot.com/proxy?url=" + entity.getPicture(PictureType.SQUARE), "Profile Picture").getImage()); // iconMap.put(entity, icon); Image image = getImageFromEntity(entity); if (image != null && image.getWidth(null) > 0 && image.getHeight(null) > 0) { Icon icon = new LayeredIcon(image); iconMap.put(entity, icon); if ((iconMap.size() % 5) == 0) { vv.repaint(); } } } catch (Exception ex) { ex.printStackTrace(); } } vv.repaint(); } }).start(); final Transformer<Entity<FieldEnum, ConnectionEnum>, String> vertexStringerImpl = new VertexStringerImpl<Entity<FieldEnum, ConnectionEnum>>( map); Transformer<EdgeAdapter<ConnectionEnum>, String> edgeStringerImpl = new Transformer<EdgeAdapter<ConnectionEnum>, String>() { public String transform(EdgeAdapter<ConnectionEnum> edge) { return edge.toString(); } }; vv.getRenderContext().setEdgeLabelTransformer(edgeStringerImpl); vv.getRenderContext().setVertexLabelTransformer(vertexStringerImpl); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.cyan)); vv.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.cyan)); // features on and off. For a real application, use VertexIconAndShapeFunction instead. final VertexIconShapeTransformer<Entity<FieldEnum, ConnectionEnum>> vertexImageShapeFunction = new VertexIconShapeTransformer<Entity<FieldEnum, ConnectionEnum>>( new EllipseVertexShapeTransformer<Entity<FieldEnum, ConnectionEnum>>()); final DefaultVertexIconTransformer<Entity<FieldEnum, ConnectionEnum>> vertexIconFunction = new DefaultVertexIconTransformer<Entity<FieldEnum, ConnectionEnum>>(); vertexImageShapeFunction.setIconMap(iconMap); vertexIconFunction.setIconMap(iconMap); vv.getRenderContext().setVertexShapeTransformer(vertexImageShapeFunction); vv.getRenderContext().setVertexIconTransformer(vertexIconFunction); // Get the pickedState and add a listener that will decorate the // Vertex images with a checkmark icon when they are picked PickedState<Entity<FieldEnum, ConnectionEnum>> ps = vv.getPickedVertexState(); ps.addItemListener(new PickWithIconListener(vertexIconFunction)); // add a listener for ToolTips vv.setVertexToolTipTransformer(new Transformer<Entity<FieldEnum, ConnectionEnum>, String>() { @Override public String transform(Entity<FieldEnum, ConnectionEnum> entity) { return entity.getDescription(); } }); Container content = getContentPane(); final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv); content.add(panel); final DefaultModalGraphMouse graphMouse = new DefaultModalGraphMouse(); vv.setGraphMouse(graphMouse); final ScalingControl scaler = new CrossoverScalingControl(); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1 / 1.1f, vv.getCenter()); } }); JComboBox modeBox = graphMouse.getModeComboBox(); JPanel modePanel = new JPanel(); modePanel.setBorder(BorderFactory.createTitledBorder("Mouse Mode")); modePanel.add(modeBox); JPanel scaleGrid = new JPanel(new GridLayout(1, 0)); scaleGrid.setBorder(BorderFactory.createTitledBorder("Zoom")); JPanel controls = new JPanel(); scaleGrid.add(plus); scaleGrid.add(minus); controls.add(scaleGrid); controls.add(modePanel); content.add(controls, BorderLayout.SOUTH); this.viewSupport = new MagnifyImageLensSupport<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>>( vv); // new ViewLensSupport<Number,Number>(vv, new HyperbolicShapeTransformer(vv, // vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW)), // new ModalLensGraphMouse()); this.modelSupport = new LayoutLensSupport<Entity<FieldEnum, ConnectionEnum>, EdgeAdapter<ConnectionEnum>>( vv); graphMouse.addItemListener(modelSupport.getGraphMouse().getModeListener()); graphMouse.addItemListener(viewSupport.getGraphMouse().getModeListener()); ButtonGroup radio = new ButtonGroup(); JRadioButton none = new JRadioButton("None"); none.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (viewSupport != null) { viewSupport.deactivate(); } if (modelSupport != null) { modelSupport.deactivate(); } } }); none.setSelected(true); JRadioButton hyperView = new JRadioButton("View"); hyperView.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { viewSupport.activate(e.getStateChange() == ItemEvent.SELECTED); } }); JRadioButton hyperModel = new JRadioButton("Layout"); hyperModel.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { modelSupport.activate(e.getStateChange() == ItemEvent.SELECTED); } }); radio.add(none); radio.add(hyperView); radio.add(hyperModel); JMenuBar menubar = new JMenuBar(); JMenu modeMenu = graphMouse.getModeMenu(); menubar.add(modeMenu); JPanel lensPanel = new JPanel(new GridLayout(2, 0)); lensPanel.setBorder(BorderFactory.createTitledBorder("Lens")); lensPanel.add(none); lensPanel.add(hyperView); lensPanel.add(hyperModel); controls.add(lensPanel); }
From source file:br.edu.unifei.mestrado.view.GraphPartitioningVisualization.java
private void createView(final int partitions) { clusterer = new PartitionClusterer(partitions); final Graph<NodeWrapper, EdgeWrapper> graph = getGraph(); // Create a simple layout frame // specify the Fruchterman-Rheingold layout algorithm layout = new AggregateLayout<NodeWrapper, EdgeWrapper>(new FRLayout<NodeWrapper, EdgeWrapper>(graph)); vv = new VisualizationViewer<NodeWrapper, EdgeWrapper>(layout); vv.setBackground(Color.white); if (vertexLabelTransformer == null) { vertexLabelTransformer = new Transformer<NodeWrapper, String>() { @Override//from w ww. j a va 2s .c om public String transform(NodeWrapper v) { // TODO: voltar o D quando necessrio return "V" + v.getId() + ":" + v.getWeight();// + ":" + // v.getD(); } }; } vv.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); // MapTransformer.<NodeWrapper, String> // getInstance(LazyMap.<NodeWrapper, String> decorate( // new HashMap<NodeWrapper, String>(), new // ToStringLabeller<NodeWrapper>()))); vv.getRenderContext().setEdgeLabelTransformer(edgeLabelTransformer); // UTIL: Alguma coisa, talvez o LazyMap no estava repintando a aresta // com o peso alterado // MapTransformer.<EdgeWrapper, String> // getInstance(LazyMap.<EdgeWrapper, String> decorate( // new HashMap<EdgeWrapper, String>(), new // ToStringLabeller<EdgeWrapper>() { // @Override // public String transform(EdgeWrapper v) { // logger.warn("A:" + v.getId() + ":" + v.getWeight()); // return "A:" + v.getId() + ":" + v.getWeight(); // } // }))); // Tell the renderer to use our own customized color rendering vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<NodeWrapper, EdgeWrapper>()); vv.getRenderContext().setVertexShapeTransformer(vertexShapeTransformer); vv.getRenderContext().setVertexFillPaintTransformer(vertexFillPaintTransformer); vv.getRenderContext().setVertexDrawPaintTransformer(vertexDrawPaintTransformer); vv.getRenderContext().setVertexStrokeTransformer(vertexStrokeTransformer); vv.getRenderContext().setEdgeDrawPaintTransformer(new Transformer<EdgeWrapper, Paint>() { // UTIL: Define as cores das arestas @Override public Paint transform(EdgeWrapper linkToProcess) { // if para mostrar arestas com as duas pontas no mesmo vertices if (linkToProcess.getStartNode().getId() == linkToProcess.getEndNode().getId()) { return Color.red; } Set<NodeWrapper> nodes = vv.getPickedVertexState().getPicked(); for (NodeWrapper node : nodes) { for (EdgeWrapper link : node.getEdges()) { if (link.getId() == linkToProcess.getId()) { return Color.orange; } } } if (linkToProcess.isEdgeOnCut()) { return Color.green; } return Color.blue; } }); // MapTransformer.<EdgeWrapper, Paint> getInstance(edgePaints)); vv.getRenderContext().setEdgeStrokeTransformer(new Transformer<EdgeWrapper, Stroke>() { protected final Stroke THIN = new BasicStroke(1); // protected final Stroke THICK = new BasicStroke(2); protected final Stroke STRONG_THICK = new BasicStroke(3); public Stroke transform(EdgeWrapper e) { // if para mostrar arestas com as duas pontas no mesmo vertices if (e.getStartNode().getId() == e.getEndNode().getId()) { return STRONG_THICK; } // Paint c = edgePaints.get(e); // if (c == Color.red) return THIN; // else // return THIN; } }); DefaultModalGraphMouse gm = new DefaultModalGraphMouse(); vv.setGraphMouse(gm); groupVertices = new JToggleButton("Group Clusters"); groupVertices.setSelected(true); groupVertices.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { clusterAndRecolor(layout, e.getStateChange() == ItemEvent.SELECTED, getGroupCircleVertices().isSelected()); vv.repaint(); } }); clusterAndRecolor(layout, groupVertices.isSelected(), getGroupCircleVertices().isSelected()); Container content = getContentPane(); content.add(new GraphZoomScrollPane(vv)); JPanel south = new JPanel(new GridLayout(1, 4)); JPanel grid1 = new JPanel(new GridLayout(2, 1)); grid1.add(groupVertices); grid1.add(getGroupCircleVertices()); south.add(grid1); final ScalingControl scaler = new CrossoverScalingControl(); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1 / 1.1f, vv.getCenter()); } }); JPanel grid2 = new JPanel(new GridLayout(2, 1)); grid2.setBorder(BorderFactory.createTitledBorder("Scale")); south.add(grid2); grid2.add(plus); grid2.add(minus); JPanel grid3 = new JPanel(new GridLayout(1, 2)); south.add(grid3); grid3.add(getIterationLabel()); grid3.add(getCutLabel()); JPanel p = new JPanel(); p.setBorder(BorderFactory.createTitledBorder("Mouse Mode")); p.add(gm.getModeComboBox()); south.add(p); content.add(south, BorderLayout.SOUTH); vv.repaint(); }
From source file:GrafosTroleBus.java
public GrafosTroleBus() { setLayout(new BorderLayout()); //definir puntos de trolebus (latitude y longitude) @autor sa map.put("RECREO", new String[] { "-0.2516682", "-78.521524" }); //Recreo map.put("P14", new String[] { "-0.2445098", "-78.51902" }); //Villaflora map.put("P15", new String[] { "-0.2396436", "-78.51698" }); //Chimbacalle N-S map.put("P16", new String[] { "-0.2378458", "-78.515976" }); //Chimbacalle S-N map.put("P17", new String[] { "-0.2356805", "-78.514816" }); //Colina map.put("P18", new String[] { "-0.234052", "-78.514237" }); //Jefferson Perez map.put("P19", new String[] { "-0.2312856", "-78.513627" }); //Recoleta N-S map.put("P20", new String[] { "-0.2307005", "-78.513051" }); //Recoleta S-N map.put("P21", new String[] { "-0.2263919", "-78.513011" }); //P21 Cumanda N-S map.put("P22", new String[] { "-0.226424", "-78.512803" }); //P22 Cumanda S-N map.put("P23", new String[] { "-0.2234658", "-78.512542" }); //P23 Santo Domingo map.put("P24", new String[] { "-0.2185857", "-78.508601" }); //P24 Plaza del Teatro N-S map.put("P25", new String[] { "-0.219605", "-78.50813" }); //P25 Plaza del Teatro S-N map.put("P26", new String[] { "-0.2177808", "-78.505977" }); //P26 Hermano Miguel map.put("P27", new String[] { "-0.2169088", "-78.50521" }); //P27 Banco Central map.put("P28", new String[] { "-0.214267", "-78.502999" }); //P28 La Alameda S-N map.put("P29", new String[] { "-0.2137705", "-78.50293" }); //P29 La Alameda N-S map.put("P30", new String[] { "-0.2084939", "-78.500255" }); //P30 Ejido N-S map.put("P31", new String[] { "-0.2088076", "-78.500032" }); //P31 Ejido S-N map.put("P32", new String[] { "-0.2047989", "-78.4988" }); //P32 La Mariscal N-S map.put("P33", new String[] { "-0.2041972", "-78.498491" }); //P33 La Mariscal S-N map.put("P34", new String[] { "-0.2009718", "-78.49715" }); //P34 Santa Clara S-N map.put("P35", new String[] { "-0.201056", "-78.496979" }); //P35 Santa Clara N-S map.put("P36", new String[] { "-0.1986325", "-78.496141" }); //P36 La Colon S-N map.put("P37", new String[] { "-0.1978432", "-78.495563" }); //P37 La Colon N-S map.put("P38", new String[] { "-0.1921587", "-78.493445" }); //P38 Cuero y Caicedo S-N map.put("P39", new String[] { "-0.1915098", "-78.493001" }); //P39 Cuero y Caicedo N-S map.put("P40", new String[] { "-0.1889467", "-78.492149" }); //P40 Mariana de Jess S-N map.put("P41", new String[] { "-0.1875567", "-78.491303" }); //P41 Mariana de Jesus N-S map.put("P42", new String[] { "-0.1853693", "-78.490878" }); //P42 El Floron S-N map.put("P43", new String[] { "-0.1846687", "-78.490403" }); //P43 El Floron N-S map.put("P44", new String[] { "-0.1817679", "-78.489808" }); //P44 Carolina S-N map.put("P45", new String[] { "-0.1810849", "-78.489336" }); //P45 Carolina N-S map.put("P46", new String[] { "-0.1787274", "-78.488954" }); //P46 Estadio S-N map.put("P47", new String[] { "-0.1780172", "-78.488621" }); //P47 Estadio N-S map.put("P48", new String[] { "-0.172087", "-78.487589" }); //P48 La Y S-N map.put("P49", new String[] { "-0.1713146", "-78.487277" }); //P49 La Y N-S map.put("LA Y", new String[] { "-0.1635504", "-78.485374" }); //Estacin La Y nodoList = new ArrayList<String>(map.keySet()); // create a simple graph for the demo graph = new DirectedSparseMultigraph<String, Number>(); createVertices();//from www . j av a 2s .com createEdges(); ImageIcon mapIcon = null; String imageLocation = "/mapa_quito.png"; try { mapIcon = new ImageIcon(getClass().getResource(imageLocation)); ImageWidth = mapIcon.getIconWidth(); ImageHeight = mapIcon.getIconHeight(); } catch (Exception ex) { System.err.println("Can't load \"" + imageLocation + "\""); } final ImageIcon icon = mapIcon; Dimension layoutSize = new Dimension(ImageWidth, ImageHeight); Layout<String, Number> layout = new StaticLayout<String, Number>(graph, new ChainedTransformer<String, Point2D>(new Transformer[] { new CityTransformer(map), new LatLonPixelTransformer(new Dimension(ImageWidth, ImageHeight)) })); layout.setSize(layoutSize); vv = new VisualizationViewer<String, Number>(layout, new Dimension(MonitorWidth, MonitorHeight)); if (icon != null) { vv.addPreRenderPaintable(new VisualizationViewer.Paintable() { public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; AffineTransform oldXform = g2d.getTransform(); AffineTransform lat = vv.getRenderContext().getMultiLayerTransformer() .getTransformer(Layer.LAYOUT).getTransform(); AffineTransform vat = vv.getRenderContext().getMultiLayerTransformer() .getTransformer(Layer.VIEW).getTransform(); AffineTransform at = new AffineTransform(); at.concatenate(g2d.getTransform()); at.concatenate(vat); at.concatenate(lat); g2d.setTransform(at); g.drawImage(icon.getImage(), 0, 0, icon.getIconWidth(), icon.getIconHeight(), vv); g2d.setTransform(oldXform); } public boolean useTransform() { return false; } }); } vv.getRenderer().setVertexRenderer(new GradientVertexRenderer<String, Number>(Color.white, Color.red, Color.white, Color.blue, vv.getPickedVertexState(), false)); // add my listeners for ToolTips vv.setVertexToolTipTransformer(new ToStringLabeller<String>()); vv.setEdgeToolTipTransformer(new Transformer<Number, String>() { public String transform(Number edge) { return "E" + graph.getEndpoints(edge).toString(); } }); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<String>()); vv.getRenderer().getVertexLabelRenderer().setPositioner(new InsidePositioner()); vv.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.AUTO); final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv); add(panel); final AbstractModalGraphMouse graphMouse = new DefaultModalGraphMouse<Object, Object>(); vv.setGraphMouse(graphMouse); vv.addKeyListener(graphMouse.getModeKeyListener()); vv.setToolTipText("<html><center>Type 'p' for Pick mode<p>Type 't' for Transform mode"); final ScalingControl scaler = new CrossoverScalingControl(); vv.scaleToLayout(scaler); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1 / 1.1f, vv.getCenter()); } }); JButton reset = new JButton("reset"); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).setToIdentity(); vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).setToIdentity(); } }); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); controls.add(reset); add(controls, BorderLayout.SOUTH); }
From source file:net.sourceforge.metware.binche.graph.ChebiGraph.java
/** * Method to return the color transformer of a node, working on its internal color value. * * @return the transformer/*from w w w .j av a2 s.c o m*/ */ private Transformer<ChebiVertex, Paint> getVertexTransformer() { Transformer<ChebiVertex, Paint> vertexPaint = new Transformer<ChebiVertex, Paint>() { public Paint transform(ChebiVertex vertex) { return vertex.getColor(); } }; return vertexPaint; }
From source file:com.rapidminer.gui.graphs.GraphViewer.java
public GraphViewer(final GraphCreator<V, E> graphCreator) { try {// w w w . j a v a 2 s. c om if (!RapidMiner.getExecutionMode().isHeadless()) { graphMouse = new DefaultModalGraphMouse(1 / 1.1f, 1.1f); } } catch (HeadlessException e) { } this.graphCreator = graphCreator; setLayout(new BorderLayout()); Graph<V, E> graph = graphCreator.createGraph(); this.layoutSelection = new LayoutSelection<>(this, graph); this.layout = new ISOMLayout<>(graph); vv = new VisualizationViewer<V, E>(layout) { private static final long serialVersionUID = 8247229781249216143L; private boolean initialized = false; /** * Necessary in order to re-change layout after first painting (starting position and * size). */ @Override public void paint(Graphics g) { super.paint(g); if (!initialized) { initialized = true; updateLayout(); if (objectViewerSplitPane != null) { objectViewerSplitPane.setDividerLocation(0.9); } } } }; vv.setBorder(BorderFactory.createEmptyBorder()); vv.setBackground(Color.white); // === design === // ## edge layout ## // EDGE SHAPE int edgeShapeType = graphCreator.getEdgeShape(); switch (edgeShapeType) { case GraphCreator.EDGE_SHAPE_LINE: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<V, E>()); break; case GraphCreator.EDGE_SHAPE_QUAD_CURVE: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.QuadCurve<V, E>()); break; case GraphCreator.EDGE_SHAPE_CUBIC_CURVE: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.CubicCurve<V, E>()); break; case GraphCreator.EDGE_SHAPE_BENT_LINE: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.BentLine<V, E>()); break; case GraphCreator.EDGE_SHAPE_WEDGE: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Wedge<V, E>(5)); break; default: vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<V, E>()); break; } // EDGE FONT vv.getRenderContext().setEdgeFontTransformer(new Transformer<E, Font>() { @Override public Font transform(E arg0) { return EDGE_FONT; } }); // EDGE COLORS vv.getRenderContext().setEdgeDrawPaintTransformer(new Transformer<E, Paint>() { @Override public Paint transform(E edge) { double edgeStrength = graphCreator.getEdgeStrength(edge); int value = (int) Math.max(140, Math.min(230, 230 - edgeStrength * 90)); return new Color(value, value, value); } }); vv.getRenderContext().setArrowDrawPaintTransformer(new Transformer<E, Paint>() { @Override public Paint transform(E edge) { double edgeStrength = graphCreator.getEdgeStrength(edge); int value = (int) Math.max(140, Math.min(230, 230 - edgeStrength * 90)); return new Color(value, value, value).darker(); } }); vv.getRenderContext().setArrowFillPaintTransformer(new Transformer<E, Paint>() { @Override public Paint transform(E edge) { double edgeStrength = graphCreator.getEdgeStrength(edge); int value = (int) Math.max(140, Math.min(230, 230 - edgeStrength * 90)); return new Color(value, value, value); } }); // EDGE LABEL POSITION vv.getRenderContext() .setEdgeLabelClosenessTransformer(new ConstantDirectionalEdgeValueTransformer<V, E>(0.5d, 0.5d)); int labelOffset = graphCreator.getLabelOffset(); if (labelOffset >= 0) { vv.getRenderContext().setLabelOffset(labelOffset); } // EDGE LABELS vv.getRenderContext().setEdgeLabelTransformer(new Transformer<E, String>() { @Override public String transform(E object) { return graphCreator.getEdgeName(object); } }); // EDGE LABEL RENDERER Renderer.EdgeLabel<V, E> edgeLabelRenderer = graphCreator.getEdgeLabelRenderer(); if (edgeLabelRenderer != null) { vv.getRenderer().setEdgeLabelRenderer(edgeLabelRenderer); // renderer... } vv.getRenderContext().setEdgeLabelRenderer(new EdgeLabelRenderer() { // ...context! private JLabel renderer = new JLabel(); @Override public <T> Component getEdgeLabelRendererComponent(JComponent parent, Object value, Font font, boolean isSelected, T edge) { this.renderer.setFont(font); if (graphCreator.isEdgeLabelDecorating()) { this.renderer.setOpaque(true); renderer.setBackground(Color.WHITE); // use this for a more fancy look and feel // renderer.setBackground(SwingTools.TRANSPARENT_YELLOW); // this.renderer.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(SwingTools.DARK_BLUE), // BorderFactory.createEmptyBorder(1,1,1,1))); } this.renderer.setText(value.toString()); return this.renderer; } /** Let the graph model decide. */ @Override public boolean isRotateEdgeLabels() { return graphCreator.isRotatingEdgeLabels(); } /** Does nothing. */ @Override public void setRotateEdgeLabels(boolean rotate) { } }); // ## vertex layout ## // VERTEX FONT vv.getRenderContext().setVertexFontTransformer(new Transformer<V, Font>() { @Override public Font transform(V vertex) { if (graphCreator.isBold(vertex)) { return VERTEX_BOLD_FONT; } else { return VERTEX_PLAIN_FONT; } } }); // VERTEX NAME vv.getRenderContext().setVertexLabelTransformer(new Transformer<V, String>() { @Override public String transform(V object) { return graphCreator.getVertexName(object); } }); // VERTEX FILL PAINT Transformer<V, Paint> paintTransformer = graphCreator.getVertexPaintTransformer(vv); if (paintTransformer == null) { paintTransformer = new Transformer<V, Paint>() { @Override public Paint transform(V vertex) { if (vv.getPickedVertexState().isPicked(vertex)) { return SwingTools.LIGHT_YELLOW; } else { return SwingTools.LIGHT_BLUE; } } }; } vv.getRenderContext().setVertexFillPaintTransformer(paintTransformer); // VERTEX DRAW PAINT vv.getRenderContext().setVertexDrawPaintTransformer(new Transformer<V, Paint>() { @Override public Paint transform(V vertex) { if (vv.getPickedVertexState().isPicked(vertex)) { return SwingTools.DARKEST_YELLOW.darker(); } else { return SwingTools.DARKEST_BLUE.darker(); } } }); // VERTEX TOOL TIP this.vv.setVertexToolTipTransformer(new Transformer<V, String>() { @Override public String transform(V vertex) { return graphCreator.getVertexToolTip(vertex); } }); // VERTEX SHAPE vv.getRenderContext().setVertexShapeTransformer(new ExtendedVertexShapeTransformer<>(graphCreator)); // VERTEX RENDERER Renderer.Vertex<V, E> vertexRenderer = graphCreator.getVertexRenderer(); if (vertexRenderer != null) { vv.getRenderer().setVertexRenderer(vertexRenderer); } // VERTEX LABEL RENDERER setDefaultLabelPosition(); // custom renderer? Renderer.VertexLabel<V, E> customVertexLabelRenderer = graphCreator.getVertexLabelRenderer(); if (customVertexLabelRenderer != null) { vv.getRenderer().setVertexLabelRenderer(customVertexLabelRenderer); } // context vv.getRenderContext().setVertexLabelRenderer(new VertexLabelRenderer() { private JLabel label = new JLabel(); @Override public <T> Component getVertexLabelRendererComponent(JComponent parent, Object object, Font font, boolean isSelection, T vertex) { label.setFont(font); if (object != null) { label.setText(object.toString()); } else { label.setText(""); } return label; } }); // === end of design === // === main panel === if (graphCreator.getObjectViewer() == null) { add(vv, BorderLayout.CENTER); } else { JComponent viewer = graphCreator.getObjectViewer().getViewerComponent(); if (viewer != null) { viewer.setBorder(null); objectViewerSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); objectViewerSplitPane.setResizeWeight(1); objectViewerSplitPane.add(vv, 0); objectViewerSplitPane.add(viewer, 1); add(objectViewerSplitPane, BorderLayout.CENTER); } else { add(vv, BorderLayout.CENTER); } } // === control panel === Component controlPanel = createControlPanel(); add(new ExtendedJScrollPane(controlPanel), BorderLayout.WEST); this.showEdgeLabels = !graphCreator.showEdgeLabelsDefault(); togglePaintEdgeLabels(); this.showVertexLabels = !graphCreator.showVertexLabelsDefault(); togglePaintVertexLabels(); this.layoutSelection.setLayout(); }
From source file:com.imag.nespros.gui.plugin.GraphEditor.java
/** * create an instance of a simple graph with popup controls to create a * graph.//from w w w. j a v a2 s .c o m * */ private GraphEditor(Simulation s) { simu = s; try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { Logger.getLogger(GraphEditor.class.getName()).log(Level.SEVERE, null, ex); } // create a simple graph for the demo graph = Topology.getInstance().getGraph(); this.layout = new StaticLayout<Device, ComLink>(graph, new Transformer<Device, Point2D>() { @Override public Point2D transform(Device v) { Point2D p = new Point2D.Double(v.getX(), v.getY()); return p; } }, new Dimension(600, 600)); vv = new VisualizationViewer<Device, ComLink>(layout); vv.setBackground(Color.white); final Transformer<Device, String> vertexLabelTransformer = new Transformer<Device, String>() { @Override public String transform(Device d) { return d.getDeviceName(); } }; //vv.getRenderContext().setVertexLabelTransformer(MapTransformer.<Device, String>getInstance( // LazyMap.<Device, String>decorate(new HashMap<Device, String>(), new ToStringLabeller<Device>()))); vv.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); vv.getRenderContext().setEdgeLabelTransformer(new Transformer<ComLink, String>() { @Override public String transform(ComLink link) { return (link.getID() + ", " + link.getLatency()); } }); //float dash[] = {0.1f}; //final Stroke edgeStroke = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 1.0f); final Stroke edgeStroke = new BasicStroke(3.0f); final Transformer<ComLink, Stroke> edgeStrokeTransformer = new Transformer<ComLink, Stroke>() { @Override public Stroke transform(ComLink l) { return edgeStroke; } }; Transformer<ComLink, Paint> edgePaint = new Transformer<ComLink, Paint>() { public Paint transform(ComLink l) { if (l.isDown()) { return Color.RED; } else { return Color.BLACK; } } }; vv.getRenderContext().setEdgeDrawPaintTransformer(edgePaint); vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer); vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer()); vv.getRenderContext().setVertexIconTransformer(new CustomVertexIconTransformer()); vv.getRenderContext().setVertexShapeTransformer(new CustomVertexShapeTransformer()); vv.addPreRenderPaintable(new VisualizationViewer.Paintable() { @Override public void paint(Graphics grphcs) { for (Device d : Topology.getInstance().getGraph().getVertices()) { int size = d.getOperators().size(); MyLayeredIcon icon = d.getIcon(); //if(icon == null) continue; icon.removeAll(); if (size > 0) { // the vertex icon // Let's create the annotation image to be added to icon.. BufferedImage image = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); g.setColor(Color.ORANGE); g.fillOval(0, 0, 20, 20); g.setColor(Color.BLACK); g.drawString(size + "", 5, 13); g.dispose(); ImageIcon img = new ImageIcon(image); //Dimension id = new Dimension(icon.getIconWidth(), icon.getIconHeight()); //double x = vv.getModel().getGraphLayout().transform(d).getX(); //x -= (icon.getIconWidth() / 2); //double y = vv.getModel().getGraphLayout().transform(d).getY(); //y -= (icon.getIconHeight() / 2); //grphcs.drawImage(image, (int) Math.round(x), (int) Math.round(y), null); icon.add(img); } } } @Override public boolean useTransform() { return false; } }); Container content = getContentPane(); final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv); content.add(panel); Factory<Device> vertexFactory = DeviceFactory.getInstance(); Factory<ComLink> edgeFactory = ComLinkFactory.getInstance(); final EditingModalGraphMouse<Device, ComLink> graphMouse = new EditingModalGraphMouse<>( vv.getRenderContext(), vertexFactory, edgeFactory); // Trying out our new popup menu mouse plugin... PopupVertexEdgeMenuMousePlugin myPlugin = new PopupVertexEdgeMenuMousePlugin(); // Add some popup menus for the edges and vertices to our mouse plugin. JPopupMenu edgeMenu = new MyMouseMenus.EdgeMenu(frame); JPopupMenu vertexMenu = new MyMouseMenus.VertexMenu(frame); myPlugin.setEdgePopup(edgeMenu); myPlugin.setVertexPopup(vertexMenu); graphMouse.remove(graphMouse.getPopupEditingPlugin()); // Removes the existing popup editing plugin graphMouse.add(myPlugin); // Add our new plugin to the mouse // AnnotatingGraphMousePlugin<Device,ComLink> annotatingPlugin = // new AnnotatingGraphMousePlugin<>(vv.getRenderContext()); //graphMouse.add(annotatingPlugin); // the EditingGraphMouse will pass mouse event coordinates to the // vertexLocations function to set the locations of the vertices as // they are created // graphMouse.setVertexLocations(vertexLocations); vv.setGraphMouse(graphMouse); vv.addKeyListener(graphMouse.getModeKeyListener()); graphMouse.setMode(ModalGraphMouse.Mode.PICKING); //final ImageAtEdgePainter<String, String> imageAtEdgePainter = // new ImageAtEdgePainter<String, String>(vv, edge, image); final ScalingControl scaler = new CrossoverScalingControl(); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1 / 1.1f, vv.getCenter()); } }); JButton help = new JButton("Help"); help.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(vv, instructions); } }); JButton deploy = new JButton("Deploy"); deploy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // OPMapping algo here if (simu == null) { return; } GraphUtil<Device, ComLink> util = new GraphUtil<>(); for (EventProducer p : simu.getProducers()) { if (!p.isMapped()) { JOptionPane.showMessageDialog(frame, "Cannot map operators. Please deploy the producer: " + p.getName()); return; } } for (EventConsumer c : simu.getConsumers()) { if (!c.isMapped()) { JOptionPane.showMessageDialog(frame, "Cannot map operators. Please deploy the consumer: " + c.getName()); return; } System.out.println("-- Operator placement algorithm Greedy: " + c.getName() + " --"); Solution init = util.initialMapping(c.getGraph()); System.out.println(c.getGraph() + "\nInitial Mapping: " + init); OperatorMapping mapper = new OperatorMapping(); long T1, T2; System.out.println("--- OpMapping Algo Greedy --- "); T1 = System.currentTimeMillis(); Solution solution = mapper.opMapping(c.getGraph(), Topology.getInstance().getGraph(), init); T2 = System.currentTimeMillis(); System.out.println(solution); System.out.println("Solution founded in: " + (T2 - T1) + " ms"); } // Solution init = util.initialMapping(EPGraph.getInstance().getGraph()); // System.out.println("Initial Mapping: " + init); // OperatorMapping mapper = new OperatorMapping(); // long T1, T2; // System.out.println("--- OpMapping Algo Greedy --- "); // T1 = System.currentTimeMillis(); // Solution solution = mapper.opMapping(EPGraph.getInstance().getGraph(), // Topology.getInstance().getGraph(), init); // T2 = System.currentTimeMillis(); // System.out.println(solution); // System.out.println("Solution founded in: " + (T2 - T1) + " ms"); vv.repaint(); } }); JButton run = new JButton("Run"); run.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // run the simulation here System.out.println("Setting the simulation..."); for (EventConsumer c : simu.getConsumers()) { for (EPUnit op : c.getGraph().getVertices()) { if (op.isMapped()) { op.openIOchannels(); } else { JOptionPane.showMessageDialog(frame, "Cannot run, undeployed operators founded."); return; } } } //ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); System.out.println("Running the simulation..."); //scheduledExecutorService.execute(runner); for (Device device : Topology.getInstance().getGraph().getVertices()) { if (!device.isAlive()) { device.start(); } } for (ComLink link : Topology.getInstance().getGraph().getEdges()) { if (!link.isAlive()) { link.start(); } } for (EventConsumer c : simu.getConsumers()) { for (EPUnit op : c.getGraph().getVertices()) { if (op.isMapped() && op.getDevice() != null && !op.isAlive()) { op.start(); } } } } }); AnnotationControls<Device, ComLink> annotationControls = new AnnotationControls<Device, ComLink>( graphMouse.getAnnotatingPlugin()); JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 0); slider.setMinorTickSpacing(5); slider.setMajorTickSpacing(30); slider.setPaintTicks(true); slider.setPaintLabels(true); slider.setLabelTable(slider.createStandardLabels(15)); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider slider = (JSlider) e.getSource(); if (!slider.getValueIsAdjusting()) { speedSimulation(slider.getValue()); } } }); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); JComboBox modeBox = graphMouse.getModeComboBox(); controls.add(modeBox); controls.add(annotationControls.getAnnotationsToolBar()); controls.add(slider); controls.add(deploy); controls.add(run); controls.add(help); content.add(controls, BorderLayout.SOUTH); /* Custom JPanels can be added here */ // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //final GraphEditor demo = new GraphEditor(); }
From source file:lu.lippmann.cdb.graph.GraphViewImpl.java
/** * {@inheritDoc}/*w w w .j ava 2 s. c o m*/ */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void init() { this.setBackground(new Color(235, 240, 245)); //this.setBackground(Color.WHITE); this.removeAll(); //normal init final CadralShapeRenderer vlasr = new CadralShapeRenderer(null, vv.getRenderContext()); // ----------------------------- // customize the render context // ----------------------------- final Transformer<CNode, String> vertexLabelTransformer = new Transformer<CNode, String>() { @Override public String transform(final CNode node) { final String tagString = (!node.getTags().isEmpty()) ? " [TAGGED!]" : ""; final FontMetrics fm = vv.getFontMetrics(vv.getFont()); final int textWidth = fm.stringWidth(node.getName()); final int tagWidth = fm.stringWidth(tagString); int nodeWidth = (int) ShapeFactory.createShape(node.getShape()).getBounds().getWidth(); final boolean hasTags = !node.getTags().isEmpty(); final int realTextWidth = textWidth + (hasTags ? tagWidth : 0); final String modifiedNodeName = node.getName() + (hasTags ? tagString : ""); if (realTextWidth > nodeWidth - 10) { int maxSubStringIndex = -1; for (int subStringIndex = node.getName().length(); subStringIndex >= 1; subStringIndex--) { String newString = node.getName().substring(0, subStringIndex) + "..." + tagString; if (fm.stringWidth(newString) < nodeWidth - 10) { maxSubStringIndex = subStringIndex; break; } } return node.getName().substring(0, maxSubStringIndex) + "..." + tagString; } else { return modifiedNodeName; } } }; vv.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); vv2.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); final Transformer<CNode, String> vertexTooltipTransformer = new Transformer<CNode, String>() { @Override public String transform(final CNode input) { if (!input.getTags().isEmpty()) { return buildTooltipFromTags(input.getName(), input.getTags()); } else { if (!input.getName().equals(vertexLabelTransformer.transform(input))) { return input.getName(); } else { return null; } } } }; vv.setVertexToolTipTransformer(vertexTooltipTransformer); vv2.setVertexToolTipTransformer(vertexTooltipTransformer); final Transformer<CEdge, String> edgeTooltipTransformer = new Transformer<CEdge, String>() { @Override public String transform(final CEdge input) { if (!input.getTags().isEmpty()) { return buildTooltipFromTags(input.getName(), input.getTags()); } else { return input.getName(); } } }; vv.setEdgeToolTipTransformer(edgeTooltipTransformer); vv2.setEdgeToolTipTransformer(edgeTooltipTransformer); vv.getRenderContext().setVertexFillPaintTransformer(new CadralVertexColorRenderer()); vv2.getRenderContext().setVertexFillPaintTransformer(new CadralVertexColorRenderer()); final CadralFontTransformer cadralFontTransformer = new CadralFontTransformer(); vv.getRenderContext().setVertexFontTransformer(cadralFontTransformer); vv.getRenderContext().setVertexShapeTransformer(vlasr); vv2.getRenderContext().setVertexShapeTransformer(vlasr); //VERTEX LABEL RENDERER vv.getRenderer().setVertexLabelRenderer(vlasr); vv2.getRenderer().setVertexLabelRenderer(vlasr); //FIXME : magic number vv.getRenderContext().setLabelOffset(16); vv2.getRenderContext().setLabelOffset(16); // custom edges final Transformer<CEdge, String> edgeLabelTransformer = new Transformer<CEdge, String>() { @Override public String transform(final CEdge input) { return input.getExpression() + (input.getTags().isEmpty() ? "" : " [TAGGED!]"); } }; vv.getRenderContext().setEdgeLabelTransformer(edgeLabelTransformer); vv2.getRenderContext().setEdgeLabelTransformer(edgeLabelTransformer); final Font myFont = new Font("Helvetica", 0, 12); //FAST EDGE LABEL RENDERER BUT NOT GOOD ENOUGH //sun.font.FontManager.getFont2D(myFont); vv.getRenderContext().setEdgeFontTransformer(cadralFontTransformer); vv2.getRenderContext().setEdgeFontTransformer(new ConstantTransformer(myFont)); vv.getRenderContext().setEdgeLabelClosenessTransformer(new ConstantTransformer(0.5)); vv2.getRenderContext().setEdgeLabelClosenessTransformer(new ConstantTransformer(0.5)); vv.getRenderContext().setEdgeDrawPaintTransformer(getDefaultEdgeDrawPaintTransformer()); vv2.getRenderContext().setEdgeDrawPaintTransformer(getDefaultEdgeDrawPaintTransformer()); vv.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.BLUE, false)); vv2.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.BLUE, false)); vv.getRenderContext().setArrowDrawPaintTransformer( new PickableEdgePaintTransformer<CEdge>(vv.getPickedEdgeState(), Color.BLACK, Color.BLUE)); vv.getRenderContext().setArrowFillPaintTransformer( new PickableEdgePaintTransformer<CEdge>(vv.getPickedEdgeState(), Color.BLACK, Color.BLUE)); vv2.getRenderContext().setArrowDrawPaintTransformer( new PickableEdgePaintTransformer<CEdge>(vv.getPickedEdgeState(), Color.BLACK, Color.BLUE)); vv2.getRenderContext().setArrowFillPaintTransformer( new PickableEdgePaintTransformer<CEdge>(vv.getPickedEdgeState(), Color.BLACK, Color.BLUE)); //Manage Zoom vv.addMouseWheelListener(new MouseWheelListener() { private int zoom = 0; @Override public void mouseWheelMoved(MouseWheelEvent e) { if (e.getWheelRotation() < 0) { zoom++; } else { zoom--; } if (zoom > 0) { if (zoom < 9) { double scale = 1 + zoom / 6.0; CadralShapeRenderer.setScale(scale); cadralFontTransformer.setScale(scale); } } else { CadralShapeRenderer.setScale(1); cadralFontTransformer.setScale(1); } } }); final Container panel = new JPanel(new BorderLayout()); final Container rightPanel = new JPanel(new GridLayout(2, 1)); panel.add(vv); final JPanel top = new JPanel(); final JButton button = new JButton("Rescale"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { rescaleSatelliteView(); } }); top.add(button); rightPanel.add(top); rightPanel.add(vv2); panel.add(rightPanel, BorderLayout.EAST); setLayout(new BorderLayout()); add(metaInfosPanel, BorderLayout.NORTH); if (!USE_EXPERIMENTAL_SATELLITE_VIEW) { add(vv, BorderLayout.EAST); } else { add(panel, BorderLayout.EAST); } add(sharedLabel, BorderLayout.SOUTH); add(aboutPanel, BorderLayout.CENTER); validate(); repaint(); }
From source file:net.itransformers.topologyviewer.gui.MyVisualizationViewer.java
private Transformer<String, String> createEdgeToolTipTransformer() { return new Transformer<String, String>() { private Transformer<String, String> createTransformer() { TooltipType tooltipType = getTooltip(currentFilter, ForType.EDGE); if (tooltipType == null) return null; String transformerClassName = tooltipType.getTransformer(); if (transformerClassName == null) { return new DefaultEdgeTooltipTransformer(tooltipType, edgeMetadatas); } else { try { final Class<?> aClass = Class.forName(transformerClassName, true, this.getClass().getClassLoader()); if (EdgeTooltipTransformerBase.class.isAssignableFrom(aClass)) { Class<EdgeTooltipTransformerBase> transformerBaseClass = (Class<EdgeTooltipTransformerBase>) aClass; Constructor<EdgeTooltipTransformerBase> constr = transformerBaseClass .getConstructor(new Class[] { TooltipType.class, Map.class }); try { EdgeTooltipTransformerBase inst = constr.newInstance(tooltipType, edgeMetadatas); return inst; } catch (IllegalArgumentException iae) { logger.error(constr.toString()); throw iae; }/*from w w w .ja v a 2 s . co m*/ // return inst; } else { throw new RuntimeException("not implemented"); } } catch (Exception e) { throw new RuntimeException(e); } } } public String transform(String s) { final Transformer<String, String> transformer = createTransformer(); if (transformer == null) return ""; return transformer.transform(s); } }; }
From source file:com.diversityarrays.kdxplore.trials.TrialSelectionSearchOptionsPanel.java
private void initialiseLookups(final DALClient client) { lookupsInitialised = InitState.INITIALISING; // Returns the Set of LookupTables which were loaded // (if user cancelled then we don't get them all) // TODO make this fact visible ! BackgroundTask<Set<LookupTable<?>>, Chunk<?>> task = new BackgroundTask<Set<LookupTable<?>>, Chunk<?>>( "Loading Lookups...", false) { @Override/*from ww w . j av a 2s.c o m*/ public boolean onTaskStart() { // Do this otherwise when we twist it open after loading nothing happens! // TODO figure out why and fix it. treeTable.collapseAll(); return true; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Set<LookupTable<?>> generateResult(final Closure<Chunk<?>> publishPartial) throws Exception { Set<LookupTable<?>> processed = new HashSet<LookupTable<?>>(); for (LookupTable lt : lookupTables) { LookupTableNode node = lookupTableRootNodeByTable.get(lt); node.clear(); // This is the callback from getLookupRecords() Transformer<Chunk<?>, Boolean> consumer = new Transformer<Chunk<?>, Boolean>() { @Override public Boolean transform(Chunk<?> chunk) { publishPartial.execute(chunk); return !cancelRequested; } }; if (!lt.getLookupRecords(client, CHUNK_SIZE, consumer)) { break; } processed.add(lt); } lookupsInitialised = InitState.DONE; return processed; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void processPartial(List<Chunk<?>> chunks) { for (Chunk chunk : chunks) { LookupTable<?> lt = chunk.lookupTable; LookupTableNode node = lookupTableRootNodeByTable.get(lt); node.addRecords(chunk.payload); } } @SuppressWarnings("rawtypes") @Override public void onTaskComplete(Set<LookupTable<?>> processed) { for (LookupTable lt : lookupTableRootNodeByTable.keySet()) { LookupTableNode node = lookupTableRootNodeByTable.get(lt); node.establishLoadState(processed.contains(lt)); } // treeTable.repaint(); treeTable.expandAll(); GuiUtil.initialiseTableColumnWidths(treeTable); fireLookupsLoaded(); // TrialSelectionSearchOptionsPanel.this.firePropertyChange(PROP_LOOKUPS_LOADED, false, true); } @Override public void onException(Throwable cause) { cause.printStackTrace(); MsgBox.error(TrialSelectionSearchOptionsPanel.this, cause, "Failed to load Lookup Tables"); } @Override public void onCancel(CancellationException e) { throw new RuntimeException(e); // should never happen } @Override public void onInterrupt(InterruptedException e) { lookupsInitialised = InitState.INCOMPLETE; MsgBox.error(TrialSelectionSearchOptionsPanel.this, "You chose to cancel the load operation", "Lookup Tables may be incomplete"); } }; backgroundRunner.runBackgroundTask(task); }
From source file:fungus.JungVisualizer.java
public JungVisualizer(String name) { this.name = name; showEdges = Configuration.getBoolean(name + "." + PAR_SHOW_EDGES); scaleShapes = Configuration.getBoolean(name + "." + PAR_SCALE_SHAPES); labelNodes = Configuration.getBoolean(name + "." + PAR_LABEL_NODES); imageDir = Configuration.getString(name + "." + PAR_IMAGE_DIR); nameFragment = Configuration.getString(PAR_TESTNAME); if (vt == null) { try {/*from w ww .j a v a 2s .c o m*/ Class vtClass = Configuration.getClass(name + "." + PAR_TRANSFORMERS); if (VisualizerTransformers.class.isAssignableFrom(vtClass)) { vt = (VisualizerTransformers) vtClass.newInstance(); } } catch (Exception e) { throw new RuntimeException(e); } } graph = JungGraphObserver.getGraph(); vt.setGraph(graph); // Have to call this manually! JungGraphObserver.stepBlocked = true; JungGraphObserver.noBlock = false; layout = vt.makeLayout(graph); Dimension preferredSize = new Dimension(660, 660); visualizationModel = new DefaultVisualizationModel<MycoNode, MycoEdge>(layout, preferredSize); relaxer = visualizationModel.getRelaxer(); visualizer = new VisualizationViewer<MycoNode, MycoEdge>(visualizationModel, preferredSize); visualizer.addGraphMouseListener(new InfoFrameVertexListener()); visualizer.setDoubleBuffered(true); // final Color under50VertexColor = Color.BLACK; // final Stroke under50VertexStroke = new BasicStroke(1.0f, // BasicStroke.CAP_BUTT, // BasicStroke.JOIN_MITER); // final Color over50VertexColor = Color.MAGENTA; // final Stroke over50VertexStroke = new BasicStroke(2.0f, // BasicStroke.CAP_BUTT, // BasicStroke.JOIN_MITER); // final Color over80VertexColor = Color.BLUE; // final Stroke over80VertexStroke = new BasicStroke(2.0f, // BasicStroke.CAP_BUTT, // BasicStroke.JOIN_MITER); // final Color over95VertexColor = Color.GREEN; // final Stroke over95VertexStroke = new BasicStroke(2.0f, // BasicStroke.CAP_BUTT, // BasicStroke.JOIN_MITER); // final Color over100VertexColor = Color.RED; // final Stroke over100VertexStroke = new BasicStroke(5.0f, // BasicStroke.CAP_BUTT, // BasicStroke.JOIN_MITER); // Transformer<MycoNode,Stroke> nodeStrokeRenderer = // new Transformer<MycoNode, Stroke>() { // public Stroke transform(MycoNode n){ // int capacity = n.getHyphaData().getMax(); // int attached = n.getHyphaLink().degree(); // double ratio = ((double) attached) / ((double) capacity); // if (ratio > 1.0) { // return over100VertexStroke; // } else if (ratio > 0.95) { // return over95VertexStroke; // } else if (ratio > 0.80) { // return over80VertexStroke; // } else if (ratio > 0.50) { // return over50VertexStroke; // } else { // return under50VertexStroke; // } // } // }; // Transformer<MycoNode,Paint> nodeOutlineRenderer = // new Transformer<MycoNode, Paint>() { // public Paint transform(MycoNode n) { // int capacity = n.getHyphaData().getMax(); // int attached = n.getHyphaLink().degree(); // double ratio = ((double) attached) / ((double) capacity); // if (ratio > 1.0) { // return over100VertexColor; // } else if (ratio > 0.95) { // return over95VertexColor; // } else if (ratio > 0.80) { // return over80VertexColor; // } else if (ratio > 0.50) { // return over50VertexColor; // } else { // return under50VertexColor; // } // } // }; /*Transformer<MycoNode,Paint> nodeFillRenderer = new Transformer<MycoNode,Paint>() { public Paint transform(MycoNode n) { HyphaData data = n.getHyphaData(); if (!n.isUp()) { return Color.BLACK; } if (data.isBiomass()) { return Color.BLUE; } else if (data.isExtending()) { return Color.RED; } else if (data.isBranching()) { return Color.YELLOW; } else { return Color.GREEN; } } };*/ /*Transformer<MycoNode,Paint> nodeFillRenderer = new Transformer<MycoNode,Paint>() { public Paint transform(MycoNode n) { HyphaData data = n.getHyphaData(); if (data.isBiomass()) { return Color.BLUE; } else if (data.isExtending()) { return Color.RED; } else if (data.isBranching()) { return Color.YELLOW; } else { return Color.GREEN; } } };*/ final Color transparent = new Color(0, 0, 0, 0); Transformer<MycoEdge, Paint> transparentEdges = new Transformer<MycoEdge, Paint>() { public Paint transform(MycoEdge e) { return transparent; } }; visualizer.setBackground(Color.WHITE); visualizer.getRenderContext().setVertexFillPaintTransformer(vt.getNodeFillRenderer()); visualizer.getRenderContext().setVertexShapeTransformer(vt.getShapeTransformer(scaleShapes)); if (labelNodes) { visualizer.getRenderContext().setVertexLabelTransformer(vt.getNodeLabeller()); } visualizer.getRenderContext().setVertexStrokeTransformer(vt.getVertexStrokeTransformer()); visualizer.getRenderContext().setVertexDrawPaintTransformer(vt.getVertexDrawPaintTransformer()); //visualizer.setVertexToolTipTransformer(new ToStringLabeller()); if (showEdges) { visualizer.getRenderContext().setEdgeStrokeTransformer(vt.getEdgeStrokeTransformer()); visualizer.getRenderContext().setEdgeDrawPaintTransformer(vt.getEdgeDrawPaintTransformer()); visualizer.getRenderContext().setArrowDrawPaintTransformer(vt.getEdgeDrawPaintTransformer()); visualizer.getRenderContext().setArrowFillPaintTransformer(vt.getEdgeDrawPaintTransformer()); } else { visualizer.getRenderContext().setEdgeDrawPaintTransformer(transparentEdges); visualizer.getRenderContext().setArrowDrawPaintTransformer(transparentEdges); visualizer.getRenderContext().setArrowFillPaintTransformer(transparentEdges); } frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = frame.getContentPane(); c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS)); //JScrollPane scrollPane = new JScrollPane(visualizer); //c.add(scrollPane); c.add(visualizer); JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS)); final JButton captureButton = new JButton("capture"); ActionListener capturer = new ActionListener() { public void actionPerformed(ActionEvent e) { saveAsPNG(); } }; captureButton.addActionListener(capturer); final JButton freezeButton = new JButton("freeze"); ActionListener freezer = new ActionListener() { public void actionPerformed(ActionEvent e) { if (freezeButton.getText().equals("freeze")) { relaxer.pause(); freezeButton.setText("unfreeze"); } else { relaxer.resume(); freezeButton.setText("freeze"); } } }; freezeButton.addActionListener(freezer); JButton pauseButton = new JButton("pause"); ActionListener pauser = new ActionListener() { public void actionPerformed(ActionEvent e) { //e.consume(); JungGraphObserver.pauseAction(); } }; pauseButton.addActionListener(pauser); JButton stepButton = new JButton("step"); ActionListener stepper = new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Clicked!\n"); //e.consume(); JungGraphObserver.stepAction(); } }; stepButton.addActionListener(stepper); JButton walkButton = new JButton("walk"); ActionListener walker = new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Clicked!\n"); //e.consume(); JungGraphObserver.walkAction(); } }; walkButton.addActionListener(walker); JButton runButton = new JButton("run"); ActionListener runner = new ActionListener() { public void actionPerformed(ActionEvent e) { //e.consume(); JungGraphObserver.runAction(); } }; runButton.addActionListener(runner); roundField = new JTextField("0"); buttonPane.add(freezeButton); buttonPane.add(captureButton); buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(pauseButton); buttonPane.add(stepButton); buttonPane.add(walkButton); buttonPane.add(runButton); buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(roundField); c.add(buttonPane); frame.pack(); frame.setVisible(true); JungGraphObserver.setVisualizer(visualizer); }