Пример #1
0
  private JMenu createGraphMenu() {
    JMenu graph = new JMenu("Graph");

    graph.add(new GraphPropertiesAction(getWorkbench()));
    graph.add(new PathsAction(getWorkbench()));
    //        graph.add(new DirectedPathsAction(getWorkbench()));
    //        graph.add(new TreksAction(getWorkbench()));
    //        graph.add(new AllPathsAction(getWorkbench()));
    //        graph.add(new NeighborhoodsAction(getWorkbench()));
    graph.addSeparator();

    JMenuItem correlateExogenous = new JMenuItem("Correlate Exogenous Variables");
    JMenuItem uncorrelateExogenous = new JMenuItem("Uncorrelate Exogenous Variables");
    graph.add(correlateExogenous);
    graph.add(uncorrelateExogenous);
    graph.addSeparator();

    correlateExogenous.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            correlateExogenousVariables();
            getWorkbench().invalidate();
            getWorkbench().repaint();
          }
        });

    uncorrelateExogenous.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            uncorrelationExogenousVariables();
            getWorkbench().invalidate();
            getWorkbench().repaint();
          }
        });

    JMenuItem randomGraph = new JMenuItem("Random Graph");
    graph.add(randomGraph);

    randomGraph.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            RandomGraphEditor editor = new RandomGraphEditor(workbench.getGraph(), true);

            int ret =
                JOptionPane.showConfirmDialog(
                    TimeLagGraphEditor.this,
                    editor,
                    "Edit Random DAG Parameters",
                    JOptionPane.PLAIN_MESSAGE);

            if (ret == JOptionPane.OK_OPTION) {
              Graph graph = null;
              Graph dag = new Dag();
              int numTrials = 0;

              while (graph == null && ++numTrials < 100) {

                if (editor.isRandomForward()) {
                  dag =
                      GraphUtils.randomGraphRandomForwardEdges(
                          getGraph().getNodes(), editor.getNumLatents(), editor.getMaxEdges());
                  GraphUtils.arrangeBySourceGraph(dag, getWorkbench().getGraph());
                  HashMap<String, PointXy> layout =
                      GraphUtils.grabLayout(workbench.getGraph().getNodes());
                  GraphUtils.arrangeByLayout(dag, layout);
                } else if (editor.isUniformlySelected()) {
                  if (getGraph().getNumNodes() == editor.getNumNodes()) {
                    HashMap<String, PointXy> layout =
                        GraphUtils.grabLayout(workbench.getGraph().getNodes());

                    dag =
                        GraphUtils.randomGraph(
                            getGraph().getNodes(),
                            editor.getNumLatents(),
                            editor.getMaxEdges(),
                            editor.getMaxDegree(),
                            editor.getMaxIndegree(),
                            editor.getMaxOutdegree(),
                            editor.isConnected());
                    GraphUtils.arrangeBySourceGraph(dag, getWorkbench().getGraph());

                    GraphUtils.arrangeByLayout(dag, layout);
                  } else {
                    dag =
                        GraphUtils.randomGraph(
                            editor.getNumNodes(),
                            editor.getNumLatents(),
                            editor.getMaxEdges(),
                            editor.getMaxDegree(),
                            editor.getMaxIndegree(),
                            editor.getMaxOutdegree(),
                            editor.isConnected());
                  }
                } else {
                  do {
                    if (getGraph().getNumNodes() == editor.getNumNodes()) {
                      HashMap<String, PointXy> layout =
                          GraphUtils.grabLayout(workbench.getGraph().getNodes());

                      dag =
                          GraphUtils.randomDag(
                              getGraph().getNodes(),
                              editor.getNumLatents(),
                              editor.getMaxEdges(),
                              30,
                              15,
                              15,
                              editor.isConnected());

                      GraphUtils.arrangeByLayout(dag, layout);
                    } else {
                      dag =
                          GraphUtils.randomGraph(
                              editor.getNumNodes(),
                              editor.getNumLatents(),
                              editor.getMaxEdges(),
                              30,
                              15,
                              15,
                              editor.isConnected());
                    }
                  } while (dag.getNumEdges() < editor.getMaxEdges());
                }

                boolean addCycles = editor.isAddCycles();

                if (addCycles) {
                  int minNumCycles = editor.getMinNumCycles();
                  int minCycleLength = editor.getMinCycleLength();

                  //                            graph = DataGraphUtils.addCycles2(dag, minNumCycles,
                  // minCycleLength);

                  graph = GraphUtils.cyclicGraph4(editor.getNumNodes(), editor.getMaxEdges());
                  GraphUtils.addTwoCycles(graph, editor.getMinNumCycles());
                } else {
                  graph = new EdgeListGraph(dag);
                }
              }

              if (graph == null) {
                JOptionPane.showMessageDialog(
                    TimeLagGraphEditor.this, "Could not find a graph that fits those constrains.");
                getWorkbench().setGraph(new EdgeListGraph(dag));
              } else {
                getWorkbench().setGraph(graph);
              }

              //                    getWorkbench().setGraph(new EdgeListGraph(dag));
              //                    getWorkbench().setGraph(graph);
            }
          }
        });

    JMenuItem randomIndicatorModel = new JMenuItem("Random Multiple Indicator Model");
    graph.add(randomIndicatorModel);

    randomIndicatorModel.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            RandomMimParamsEditor editor = new RandomMimParamsEditor();

            int ret =
                JOptionPane.showConfirmDialog(
                    JOptionUtils.centeringComp(),
                    editor,
                    "Edit Random MIM Parameters",
                    JOptionPane.OK_CANCEL_OPTION,
                    JOptionPane.PLAIN_MESSAGE);

            if (ret == JOptionPane.OK_OPTION) {
              int numStructuralNodes = Preferences.userRoot().getInt("numStructuralNodes", 3);
              int maxStructuralEdges = Preferences.userRoot().getInt("numStructuralEdges", 3);
              int measurementModelDegree =
                  Preferences.userRoot().getInt("measurementModelDegree", 3);
              int numLatentMeasuredImpureParents =
                  Preferences.userRoot().getInt("latentMeasuredImpureParents", 0);
              int numMeasuredMeasuredImpureParents =
                  Preferences.userRoot().getInt("measuredMeasuredImpureParents", 0);
              int numMeasuredMeasuredImpureAssociations =
                  Preferences.userRoot().getInt("measuredMeasuredImpureAssociations", 0);

              Graph graph =
                  DataGraphUtils.randomSingleFactorModel(
                      numStructuralNodes,
                      maxStructuralEdges,
                      measurementModelDegree,
                      numLatentMeasuredImpureParents,
                      numMeasuredMeasuredImpureParents,
                      numMeasuredMeasuredImpureAssociations);

              getWorkbench().setGraph(graph);
            }
          }
        });

    graph.addSeparator();
    graph.add(new JMenuItem(new SelectBidirectedAction(getWorkbench())));
    graph.add(new JMenuItem(new SelectUndirectedAction(getWorkbench())));

    //        graph.addSeparator();
    //        IndependenceFactsAction action = new IndependenceFactsAction(
    //                JOptionUtils.centeringComp(), this, "D Separation Facts...");
    //        graph.add(action);

    return graph;
  }
Пример #2
0
  /**
   * Creates the "file" menu, which allows the user to load, save, and post workbench models.
   *
   * @return this menu.
   */
  private JMenu createEditMenu() {
    JMenu edit = new JMenu("Edit");

    //        JMenuItem copy = new JMenuItem(new CopySubgraphAction(this));
    //        JMenuItem paste = new JMenuItem(new PasteSubgraphAction(this));
    //
    //        copy.setAccelerator(
    //                KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
    //        paste.setAccelerator(
    //                KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
    //
    //        edit.add(copy);
    //        edit.add(paste);

    edit.addSeparator();

    JMenuItem configuration = new JMenuItem("Configuration...");
    edit.add(configuration);

    configuration.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            final TimeLagGraph graph = (TimeLagGraph) getLayoutEditable().getGraph();

            class ConfigurationEditor extends JPanel {
              private int maxLag;
              private int numInitialLags;

              public ConfigurationEditor(final TimeLagGraph graph) {
                maxLag = graph.getMaxLag();
                numInitialLags = graph.getNumInitialLags();

                final SpinnerModel maxLagSpinnerModel =
                    new SpinnerNumberModel(graph.getMaxLag(), 0, 300, 1);
                JSpinner maxLagSpinner = new JSpinner(maxLagSpinnerModel);

                maxLagSpinner.addChangeListener(
                    new ChangeListener() {
                      public void stateChanged(ChangeEvent e) {
                        JSpinner spinner = (JSpinner) e.getSource();
                        SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel();
                        int value = (Integer) model.getValue();
                        setMaxLag(value);
                      }
                    });

                final SpinnerModel initialLagsSpinnerModel =
                    new SpinnerNumberModel(graph.getNumInitialLags(), 1, 300, 1);
                JSpinner initialLagsSpinner = new JSpinner(initialLagsSpinnerModel);

                initialLagsSpinner.addChangeListener(
                    new ChangeListener() {
                      public void stateChanged(ChangeEvent e) {
                        JSpinner spinner = (JSpinner) e.getSource();
                        SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel();
                        int value = (Integer) model.getValue();
                        setNumInitialLags(value);
                      }
                    });

                setLayout(new BorderLayout());

                Box box = Box.createVerticalBox();

                Box b1 = Box.createHorizontalBox();
                b1.add(new JLabel("Time lag graph configuration:"));
                b1.add(Box.createHorizontalGlue());
                box.add(b1);

                Box b2 = Box.createHorizontalBox();
                b2.add(new JLabel("Maximum Lag = "));
                b2.add(Box.createHorizontalGlue());
                b2.add(maxLagSpinner);
                box.add(b2);

                Box b3 = Box.createHorizontalBox();
                b3.add(new JLabel("# Initial Lags = "));
                b3.add(Box.createHorizontalGlue());
                b3.add(initialLagsSpinner);
                box.add(b3);

                box.setBorder(new EmptyBorder(10, 10, 10, 10));

                add(box, BorderLayout.CENTER);
              }

              public int getMaxLag() {
                return maxLag;
              }

              public void setMaxLag(int maxLag) {
                this.maxLag = maxLag;
              }

              public int getNumInitialLags() {
                return numInitialLags;
              }

              public void setNumInitialLags(int numInitialLags) {
                this.numInitialLags = numInitialLags;
              }
            }

            final ConfigurationEditor editor = new ConfigurationEditor((TimeLagGraph) getGraph());

            EditorWindow editorWindow =
                new EditorWindow(editor, "Configuration...", "Save", true, TimeLagGraphEditor.this);

            DesktopController.getInstance()
                .addEditorWindow(editorWindow, JLayeredPane.PALETTE_LAYER);
            editorWindow.pack();
            editorWindow.setVisible(true);

            editorWindow.addInternalFrameListener(
                new InternalFrameAdapter() {
                  public void internalFrameClosed(InternalFrameEvent e) {
                    EditorWindow window = (EditorWindow) e.getSource();

                    if (window.isCanceled()) {
                      return;
                    }

                    graph.setMaxLag(editor.getMaxLag());
                    graph.setNumInitialLags(editor.getNumInitialLags());

                    LayoutUtils.lastLayout(getLayoutEditable());
                  }
                });
          }
        });

    return edit;
  }