0

I have two questions: 1) I have developed a network retrieving data from MySQL database. I was trying LayoutChooser using combo box. But while running the program, I got the following output. Edges are getting multiplied. I have enclosed my coding. So where should I modify? enter image description here.

2) I need to add one more combo box. I have to retrieve lists of items from the MySQL database and display in the combo box. According to that value, the graph should be changed. Can you please help me with this.

package snp1;

import java.applet.Applet;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.GridLayout;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;

import org.apache.commons.collections15.Transformer;
import org.apache.commons.collections15.functors.ConstantTransformer;

import snp1.VertexCollapseDemoWithLayouts.LayoutChooser;

import com.jshapes.g2d.shapes.basic.Plaque;
import com.jshapes.g2d.shapes.basic.Triangle;
import com.jshapes.g2d.shapes.stars.Star;

import edu.uci.ics.jung.algorithms.cluster.WeakComponentClusterer;
import edu.uci.ics.jung.algorithms.layout.AggregateLayout;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.algorithms.layout.ISOMLayout;
import edu.uci.ics.jung.algorithms.layout.KKLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.algorithms.layout.SpringLayout;
import edu.uci.ics.jung.algorithms.layout.SpringLayout2;
import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.util.Pair;
import edu.uci.ics.jung.graph.util.TestGraphs;
import edu.uci.ics.jung.visualization.DefaultVisualizationModel;
import edu.uci.ics.jung.visualization.RenderContext;
import edu.uci.ics.jung.visualization.VisualizationModel;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.annotations.AnnotatingGraphMousePlugin;
import edu.uci.ics.jung.visualization.annotations.AnnotatingModalGraphMouse;
import edu.uci.ics.jung.visualization.control.AbstractModalGraphMouse;
import edu.uci.ics.jung.visualization.control.AbstractPopupGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.CrossoverScalingControl;
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
import edu.uci.ics.jung.visualization.control.GraphMousePlugin;
import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
import edu.uci.ics.jung.visualization.control.PickingGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.PluggableGraphMouse;
import edu.uci.ics.jung.visualization.control.ScalingControl;
import edu.uci.ics.jung.visualization.control.ScalingGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.TranslatingGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.ViewScalingControl;
import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.layout.LayoutTransition;
import edu.uci.ics.jung.visualization.picking.PickedState;
import edu.uci.ics.jung.visualization.subLayout.GraphCollapser;
import edu.uci.ics.jung.visualization.util.Animator;

class Edge {
    private final String name;

    Edge(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

public class snp_interaction extends Applet {
    static Connection connection = null;

    Graph g;
    Class[] layoutClasses = new Class[] { CircleLayout.class,
            SpringLayout.class, FRLayout.class, KKLayout.class };
    static Graph collapsedGraph;
    VisualizationViewer vv;    
    static Layout layout;
    static String name1[] = new String[1000];
    static String name2[] = new String[1000];
    static String name3[] = new String[1000];
    static String name4[] = new String[1000];
    static String name5[] = new String[1000];
    static String PMID[] = new String[1000];
    static String na[] = new String[1000];
    static String species[] = new String[1000];
    static int f = 0;
    static int i = 0;
    static int j = 0;
    static int k = 0;
    static int l = 0;
    static int z = 0;

    public snp_interaction() {

        connection = SNP_Conn.getConnection();
         g =TestGraphs.getOneComponentGraph();


        // collapsedGraph = g;
        // collapser = new GraphCollapser(g);

        layout = new FRLayout(g);

        Dimension preferredSize = new Dimension(400, 400);
        final VisualizationModel visualizationModel = new DefaultVisualizationModel(
                layout, preferredSize);
        vv = new VisualizationViewer(visualizationModel, preferredSize);

        try {

            String query = "SELECT * FROM interr";
            Statement pest = connection.createStatement();
            ResultSet rs = pest.executeQuery(query);
            while (rs.next()) {

                name1[i] = rs.getString("Mole1");
                g.addVertex(name1[i]);
                System.out.println(name1[i]);
                // name2[j] = rs.getString("");
                // System.out.println(name2[j]);
                // name5[z] = rs.getString("MoleculeType");
                // System.out.println(name5[z]);
                name3[k] = rs.getString("Mole2");
                // System.out.println(name3[k]);
                name4[l] = rs.getString("Intercation_Type");


                if (name3[k] != null) {
                g.addVertex(name3[k]);
                    }
                i++;
                j++;
                k++;
                l++;
            }
            for (k = 0; k < 1000; k++) {
                l = k;
                i = k;
                g.addEdge(new Edge(name4[l]), name1[i], name3[k]);

            }

            rs.close();
            pest.close();

        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1);

        }
        PickedState<String> picked_state = vv.getPickedVertexState();

        RenderContext<String, Edge> rc = vv.getRenderContext();

        AnnotatingGraphMousePlugin<String, Edge> annotatingPlugin = new AnnotatingGraphMousePlugin<String, Edge>(
                rc);

        final AnnotatingModalGraphMouse<String, Edge> graphMouse = new AnnotatingModalGraphMouse<String, Edge>(
                rc, annotatingPlugin);

        vv.setGraphMouse(graphMouse);

        vv.addKeyListener(graphMouse.getModeKeyListener());
        DefaultModalGraphMouse<?, ?> gm = new DefaultModalGraphMouse<Object, Object>();
        gm.setMode(ModalGraphMouse.Mode.EDITING);
        gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
        vv.setGraphMouse(gm);


        vv.getRenderContext().setVertexFillPaintTransformer(
                new PickableVertexPaintTransformer<String>(vv
                        .getPickedVertexState(), Color.red, Color.yellow));
        vv.setVertexToolTipTransformer(new ToStringLabeller<String>());


        vv.setVertexToolTipTransformer(new Transformer<String, String>() {
            public String transform(String v) {


                try {

                    String bb = "SELECT * FROM interr";
                    Statement pest = connection.createStatement();
                    ResultSet v1 = pest.executeQuery(bb);
                    while (v1.next())
                        if (v.toString().equals(v1.getString("Mole1")))
                            na[i] = v1.getString("Pubchem_ID");
                    System.out.println(na[i]);
                    v = na[i].toString();
                    return "PUBMED:" + v.toString();

                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, e1);
                }
                return null;
            }
        });

        vv.setVertexToolTipTransformer(new Transformer<String, String>() {
            public String transform(String v) {

                try {

                    String bb = "SELECT * FROM interr";
                    Statement pest = connection.createStatement();
                    ResultSet v1 = pest.executeQuery(bb);
                    while (v1.next())
                        if (v.toString().equals(v1.getString("Mole2")))
                            na[i] = v1.getString("Pubchem_ID");
                    System.out.println(na[i]);
                    v = na[i].toString();
                    return "PUBMED:" + v.toString();

                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, e1);

                }
                return null;

            }
        });

        vv.setEdgeToolTipTransformer(new Transformer<Edge, String>() {
            public String transform(Edge e) {

                return "Interaction:" + e.toString();
            }
        });

        vv.addKeyListener(gm.getModeKeyListener());

        vv.setGraphMouse(gm);

        float dash[] = { 10.0f };

        Transformer<Edge, Paint> edgePaint = new Transformer<Edge, Paint>() {
            public Paint transform(Edge s) {
                Color customColor = new Color(10, 10, 255);

                if (s.toString().equals("Bind"))
                    return Color.BLACK;
                if (s.toString().equals("association"))
                    return Color.green;
                if (s.toString().equals("physical association"))
                    return Color.blue;
                if (s.toString().equals("acetylation reaction"))
                    return Color.darkGray;
                if (s.toString().equals("cleavage reaction"))
                    return Color.magenta;
                if (s.toString().equals("colocalization"))
                    return Color.pink;
                if (s.toString().equals("direct interaction"))
                    return Color.ORANGE;
                else

                    return null;

            }
        };

        Transformer<String, Paint> vertexPaint = new Transformer<String, Paint>() {
            public Paint transform(String i) {

                try {

                    String bb = "SELECT * FROM interr";
                    Statement pest = connection.createStatement();
                    ResultSet rs = pest.executeQuery(bb);
                    while (rs.next())

                        if (i.toString().equals(rs.getString("Mole1")))
                            return Color.red;
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, e1);

                }

                return Color.green;
            }
        };

        Transformer<String, Shape> shape = new Transformer<String, Shape>() {
            public Shape transform(String i) {
                Rectangle bounds1 = new Rectangle(-15, -15, 20, 20);
                Triangle shape1 = new Triangle(bounds1, Triangle.UP);
                Ellipse2D circle1 = new Ellipse2D.Double(-15, -15, 10, 10);
                Rectangle2D rect = new Rectangle2D.Double(-15, -15, 20, 20);
                Rectangle bounds = new Rectangle(-15, -15, 20, 20);
                double tipSize = 25;
                String style = Star.STAR_8_POINTS;
                Star star = new Star(bounds, tipSize, style);
                RoundRectangle2D round = new RoundRectangle2D.Double(-15, -15,
                        30, 30, 30, 20);
                Rectangle bound = new Rectangle(-15, -15, 20, 20);
                double cornerSize = 30;
                Plaque shape = new Plaque(bound, cornerSize);
                FontMetrics fm = vv.getFontMetrics(vv.getFont());
                int width = fm.stringWidth(i);

                return circle1;
            }
        };

        vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
        // vv1.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
        vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer);

        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
            JLabel lblGeneName = new JLabel("Disease Name");
final ScalingControl scaler = new ViewScalingControl();
        JButton plus = new JButton("+");
        plus.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                scaler.scale(vv, 1.1f, vv.getCenter());
            }
        });
        final ScalingControl scaler1 = new ViewScalingControl();
        JButton minus = new JButton("-");
        minus.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                scaler1.scale(vv, 1 / 1.1f, vv.getCenter());
            }
        });

        JButton button = new JButton("Show network");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                vv.show();
            }
        });
        Class[] combos = getCombos();
        final JComboBox jcb = new JComboBox(combos);
        JComboBox pathway = new JComboBox();
        // pathway.setSelectedItem("Choose the pathway");
        // use a renderer to shorten the layout name presentation
        jcb.setRenderer(new DefaultListCellRenderer() {
            public Component getListCellRendererComponent(JList list,
                    Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {
                String valueString = value.toString();
                valueString = valueString.substring(valueString
                        .lastIndexOf('.') + 1);
                return super.getListCellRendererComponent(list, valueString,
                        index, isSelected, cellHasFocus);
            }
        });
        jcb.addActionListener(new LayoutChooser(jcb, vv));
        jcb.setSelectedItem(FRLayout.class);

        JLabel label1 = new JLabel("Select");
        JFrame frame = new JFrame(" Breast Neoplasms");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv);
        frame.pack();
        frame.setVisible(true);
        Container content = frame.getContentPane();
        JPanel panel = new JPanel(new BorderLayout());
        // panel.add(vv);
        content.add(panel);
        JMenuBar menuBar = new JMenuBar();
        JMenu modeMenu = gm.getModeMenu();
        modeMenu.setText("Options");
        modeMenu.setIcon(null);
        modeMenu.setPreferredSize(new Dimension(60, 20));
        JPanel p = new JPanel();
        p.add(label1);
        p.add(button);
        p.add(plus);
        p.add(minus);
        // p.add(compressEdges);
        p.add(jcb);
        // p.add(pathway);
        frame.getContentPane().add(p, BorderLayout.SOUTH);
        frame.setSize(600, 600);
        frame.show();
        menuBar.add(modeMenu);
        frame.setJMenuBar(menuBar);
    }

    public static class LayoutChooser implements ActionListener {
        private final JComboBox jcb;
        private final VisualizationViewer vv;

        private LayoutChooser(JComboBox jcb, VisualizationViewer vv) {
            super();
            this.jcb = jcb;
            this.vv = vv;
        }

        Class[] layoutClasses = new Class[] { CircleLayout.class,
                SpringLayout.class, FRLayout.class, KKLayout.class };

        public void actionPerformed(ActionEvent arg0) {
            Object[] constructorArgs = { collapsedGraph };

            Class<? extends Layout> layoutC = (Class<? extends Layout>) jcb
                    .getSelectedItem();
            Class lay = layoutC;
            try {
                Constructor<? extends Layout> constructor = layoutC
                        .getConstructor(new Class[] { Graph.class });
                Object o = constructor.newInstance(constructorArgs);
                Layout l = (Layout) o;
                l.setInitializer(vv.getGraphLayout());
                l.setSize(vv.getSize());
                layout = l;
                LayoutTransition lt = new LayoutTransition(vv,
                        vv.getGraphLayout(), l);
                Animator animator = new Animator(lt);
                animator.start();
                vv.getRenderContext().getMultiLayerTransformer()
                        .setToIdentity();
                vv.repaint();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @SuppressWarnings("unchecked")
    private Class<? extends Layout>[] getCombos() {
        List<Class<? extends Layout>> layouts = new ArrayList<Class<? extends Layout>>();
        layouts.add(KKLayout.class);
        layouts.add(FRLayout.class);
        layouts.add(CircleLayout.class);
        layouts.add(SpringLayout.class);
        layouts.add(SpringLayout2.class);
        layouts.add(ISOMLayout.class);
        return layouts.toArray(new Class[0]);
    }

    public static void main(String[] args) throws IOException {

        JFrame frame = new JFrame(" Breast Neoplasms");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new snp_interaction());
        frame.pack();
        frame.setVisible(true);

    }
}
TylerH
  • 20,799
  • 66
  • 75
  • 101
Steffi Matchado
  • 134
  • 2
  • 10
  • The answer to question (1) is probably that you're loading in the data multiple times and adding in edges each time, rather than just loading it once and then trying to render it. Question (2) is basically of the form "can you tell me how to write the code that I want?" which is not likely to get an answer. You need to show that you understand at least part of what you want and explain what specific help you need. – Joshua O'Madadhain Dec 11 '15 at 02:13
  • @JoshuaO'Madadhain I've tried with the code. But still i am not able to get the output. Please check the http://stackoverflow.com/q/34194900/4960098 – Steffi Matchado Dec 11 '15 at 04:58

0 Answers0