Example usage for javax.swing JTextArea setText

List of usage examples for javax.swing JTextArea setText

Introduction

In this page you can find the example usage for javax.swing JTextArea setText.

Prototype

@BeanProperty(bound = false, description = "the text of this component")
public void setText(String t) 

Source Link

Document

Sets the text of this TextComponent to the specified text.

Usage

From source file:org.metawidget.integrationtest.swing.allwidgets.SwingAllWidgetsTest.java

protected void runTest(AdvancedWidgetProcessor<JComponent, SwingMetawidget> processor) throws Exception {

    // Model/*from  w ww .j a  va 2 s  .c om*/

    AllWidgets allWidgets = new AllWidgets$$EnhancerByCGLIB$$1234();

    // App

    SwingMetawidget metawidget = new SwingMetawidget();
    metawidget.setConfig("org/metawidget/integrationtest/swing/allwidgets/metawidget.xml");
    metawidget.addWidgetProcessor(processor);
    metawidget.addWidgetProcessor(new ReflectionBindingProcessor());
    metawidget.setMetawidgetLayout(new SeparatorLayoutDecorator(new SeparatorLayoutDecoratorConfig().setLayout(
            new org.metawidget.swing.layout.GridBagLayout(new GridBagLayoutConfig().setNumberOfColumns(2)))));

    metawidget.setToInspect(allWidgets);

    metawidget.add(new Stub("mystery"));

    // Test missing components

    try {
        metawidget.getValue("no-such-component");
        fail();
    } catch (MetawidgetException e1) {
        assertEquals("No component named 'no-such-component'", e1.getMessage());

        try {
            metawidget.getValue("textbox", "no-such-component");
            fail();
        } catch (MetawidgetException e2) {
            assertEquals("No component named 'textbox', 'no-such-component'", e2.getMessage());

            try {
                metawidget.getValue("textbox", "no-such-component1", "no-such-component2");
                fail();
            } catch (MetawidgetException e3) {
                assertEquals(
                        "No such component 'no-such-component1' of 'textbox', 'no-such-component1', 'no-such-component2'",
                        e3.getMessage());
            }
        }
    }

    try {
        metawidget.setValue(null, "no-such-component");
        fail();
    } catch (MetawidgetException e1) {
        assertEquals("No component named 'no-such-component'", e1.getMessage());

        try {
            metawidget.setValue(null, "textbox", "no-such-component");
            fail();
        } catch (MetawidgetException e2) {
            assertEquals("No component named 'textbox', 'no-such-component'", e2.getMessage());

            try {
                metawidget.setValue(null, "textbox", "no-such-component1", "no-such-component2");
                fail();
            } catch (MetawidgetException e3) {
                assertEquals(
                        "No such component 'no-such-component1' of 'textbox', 'no-such-component1', 'no-such-component2'",
                        e3.getMessage());
            }
        }
    }

    // Check what created, and edit it

    assertEquals("Textbox*:", ((JLabel) metawidget.getComponent(0)).getText());
    assertTrue(metawidget.getComponent(1) instanceof JTextField);
    assertEquals("Textbox", metawidget.getValue("textbox"));
    ((JTextField) metawidget.getComponent(1)).setText("Textbox1");

    assertEquals("Limited Textbox:", ((JLabel) metawidget.getComponent(2)).getText());
    assertTrue(metawidget.getComponent(3) instanceof JTextField);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(3)).gridx);
    assertEquals("Limited Textbox", metawidget.getValue("limitedTextbox"));
    ((JTextField) metawidget.getComponent(3)).setText("Limited Textbox1");

    assertEquals("Textarea:", ((JLabel) metawidget.getComponent(4)).getText());
    assertTrue(metawidget.getComponent(5) instanceof JScrollPane);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(5)).gridx);
    assertEquals("Textarea", metawidget.getValue("textarea"));

    JTextArea textarea = (JTextArea) ((JScrollPane) metawidget.getComponent(5)).getViewport().getView();
    assertEquals(2, textarea.getRows());
    assertEquals(true, textarea.getLineWrap());
    assertEquals(true, textarea.getWrapStyleWord());
    textarea.setText("Textarea1");

    assertEquals("Password:", ((JLabel) metawidget.getComponent(6)).getText());
    assertTrue(metawidget.getComponent(7) instanceof JPasswordField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(7)).gridx);
    assertEquals("Password", metawidget.getValue("password"));
    ((JPasswordField) metawidget.getComponent(7)).setText("Password1");

    // Primitives

    assertEquals("Byte Primitive:", ((JLabel) metawidget.getComponent(8)).getText());
    assertTrue(metawidget.getComponent(9) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(9)).gridx);
    assertTrue(Byte.MAX_VALUE == (Byte) metawidget.getValue("bytePrimitive"));
    assertTrue(-5 == (Byte) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(9)).getModel())
            .getMinimum());
    assertTrue(
            Byte.MAX_VALUE == (Byte) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(9)).getModel())
                    .getMaximum());
    assertEquals(0, ((JSpinner.DefaultEditor) ((JSpinner) metawidget.getComponent(9)).getEditor())
            .getTextField().getColumns());
    JSpinner spinner = (JSpinner) metawidget.getComponent(9);
    spinner.setValue(spinner.getModel().getPreviousValue());

    assertEquals("Byte Object:", ((JLabel) metawidget.getComponent(10)).getText());
    assertTrue(metawidget.getComponent(11) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(11)).gridx);
    assertEquals(String.valueOf(Byte.MIN_VALUE), metawidget.getValue("byteObject"));
    ((JTextField) metawidget.getComponent(11)).setText(String.valueOf(Byte.MIN_VALUE + 1));

    assertEquals("Short Primitive:", ((JLabel) metawidget.getComponent(12)).getText());
    assertTrue(metawidget.getComponent(13) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(13)).gridx);
    assertTrue(Short.MAX_VALUE == (Short) metawidget.getValue("shortPrimitive"));
    assertTrue(-6 == (Short) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(13)).getModel())
            .getMinimum());
    assertTrue(Short.MAX_VALUE == (Short) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(13))
            .getModel()).getMaximum());
    spinner = (JSpinner) metawidget.getComponent(13);
    assertEquals(0, ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getColumns());
    spinner.setValue(spinner.getModel().getPreviousValue());

    assertEquals("Short Object:", ((JLabel) metawidget.getComponent(14)).getText());
    assertTrue(metawidget.getComponent(15) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(15)).gridx);
    assertEquals(String.valueOf(Short.MIN_VALUE), metawidget.getValue("shortObject"));
    ((JTextField) metawidget.getComponent(15)).setText(String.valueOf(Short.MIN_VALUE + 1));

    assertEquals("Int Primitive:", ((JLabel) metawidget.getComponent(16)).getText());
    assertTrue(metawidget.getComponent(17) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(17)).gridx);
    assertTrue(Integer.MAX_VALUE == (Integer) metawidget.getValue("intPrimitive"));
    assertTrue(Integer.MIN_VALUE == (Integer) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(17))
            .getModel()).getMinimum());
    assertTrue(Integer.MAX_VALUE == (Integer) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(17))
            .getModel()).getMaximum());
    spinner = (JSpinner) metawidget.getComponent(17);
    assertEquals(0, ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getColumns());
    spinner.setValue(spinner.getModel().getPreviousValue());

    assertEquals("Integer Object:", ((JLabel) metawidget.getComponent(18)).getText());
    assertTrue(metawidget.getComponent(19) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(19)).gridx);
    assertEquals(String.valueOf(Integer.MIN_VALUE), metawidget.getValue("integerObject"));
    ((JTextField) metawidget.getComponent(19)).setText(String.valueOf(Integer.MIN_VALUE + 1));

    assertEquals("Ranged Int:", ((JLabel) metawidget.getComponent(20)).getText());
    assertTrue(metawidget.getComponent(21) instanceof JSlider);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(21)).gridx);
    assertEquals(1, ((JSlider) metawidget.getComponent(21)).getMinimum());
    assertEquals(100, ((JSlider) metawidget.getComponent(21)).getMaximum());
    assertTrue(32 == (Integer) metawidget.getValue("rangedInt"));
    ((JSlider) metawidget.getComponent(21)).setValue(33);

    assertEquals("Ranged Integer:", ((JLabel) metawidget.getComponent(22)).getText());
    assertTrue(metawidget.getComponent(23) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(23)).gridx);
    assertEquals("33", metawidget.getValue("rangedInteger"));
    ((JTextField) metawidget.getComponent(23)).setText(String.valueOf(34));

    assertEquals("Long Primitive:", ((JLabel) metawidget.getComponent(24)).getText());
    assertTrue(metawidget.getComponent(25) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(25)).gridx);
    assertTrue(42 == (Long) metawidget.getValue("longPrimitive"));
    assertTrue(-7 == (Long) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(25)).getModel())
            .getMinimum());
    assertTrue(
            Long.MAX_VALUE == (Long) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(25)).getModel())
                    .getMaximum());
    spinner = (JSpinner) metawidget.getComponent(25);
    assertEquals(0, ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getColumns());
    spinner.setValue(spinner.getModel().getNextValue());

    assertTrue(metawidget.getComponent(26) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(26)).gridx);
    assertEquals("43", metawidget.getValue("longObject"));
    ((JTextField) metawidget.getComponent(26)).setText("44");

    assertEquals("Float Primitive:", ((JLabel) metawidget.getComponent(27)).getText());
    assertTrue(metawidget.getComponent(28) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(28)).gridx);
    assertEquals(4.2f, metawidget.getValue("floatPrimitive"));
    assertEquals(-Float.MAX_VALUE,
            ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(28)).getModel()).getMinimum());
    assertTrue(2048 == (Float) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(28)).getModel())
            .getMaximum());
    spinner = (JSpinner) metawidget.getComponent(28);
    assertEquals(0, ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getColumns());
    spinner.setValue(spinner.getModel().getNextValue());

    assertEquals("nullInBundle:", ((JLabel) metawidget.getComponent(29)).getText());
    assertTrue(metawidget.getComponent(30) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(30)).gridx);
    assertEquals("4.3", metawidget.getValue("floatObject"));
    ((JTextField) metawidget.getComponent(30)).setText("5.4");

    assertEquals("Double Primitive:", ((JLabel) metawidget.getComponent(31)).getText());
    assertTrue(metawidget.getComponent(32) instanceof JSpinner);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(32)).gridx);
    assertEquals(42.2d, metawidget.getValue("doublePrimitive"));
    assertTrue(-8 == (Double) ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(32)).getModel())
            .getMinimum());
    assertEquals(Double.MAX_VALUE,
            ((SpinnerNumberModel) ((JSpinner) metawidget.getComponent(32)).getModel()).getMaximum());
    spinner = (JSpinner) metawidget.getComponent(32);
    assertEquals(0, ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getColumns());
    spinner.setValue(spinner.getModel().getNextValue());

    assertTrue(metawidget.getComponent(33) instanceof JTextField);
    assertEquals(0, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(33)).gridx);
    assertEquals(2,
            ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(33)).gridwidth);
    assertEquals("43.3", metawidget.getValue("doubleObject"));
    ((JTextField) metawidget.getComponent(33)).setText("54.4");

    assertEquals("Char Primitive:", ((JLabel) metawidget.getComponent(34)).getText());
    assertTrue(metawidget.getComponent(35) instanceof JTextField);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(35)).gridx);
    assertEquals("A", metawidget.getValue("charPrimitive"));
    ((JTextField) metawidget.getComponent(35)).setText("Z");

    assertEquals("Character Object:", ((JLabel) metawidget.getComponent(36)).getText());
    assertTrue(metawidget.getComponent(37) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(37)).gridx);
    assertEquals("Z", metawidget.getValue("characterObject"));
    ((JTextField) metawidget.getComponent(37)).setText("A");

    assertEquals("Boolean Primitive:", ((JLabel) metawidget.getComponent(38)).getText());
    assertTrue(metawidget.getComponent(39) instanceof JCheckBox);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(39)).gridx);
    assertTrue(false == (Boolean) metawidget.getValue("booleanPrimitive"));
    ((JCheckBox) metawidget.getComponent(39)).setSelected(true);

    assertEquals("Boolean Object:", ((JLabel) metawidget.getComponent(40)).getText());
    assertTrue(metawidget.getComponent(41) instanceof JComboBox);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(37)).gridx);
    assertEquals(3, ((JComboBox) metawidget.getComponent(41)).getItemCount());
    assertEquals(Boolean.TRUE, metawidget.getValue("booleanObject"));
    ((JComboBox) metawidget.getComponent(41)).setSelectedItem(Boolean.FALSE);

    assertEquals("Dropdown:", ((JLabel) metawidget.getComponent(42)).getText());
    assertTrue(metawidget.getComponent(43) instanceof JComboBox);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(43)).gridx);
    assertEquals(4, ((JComboBox) metawidget.getComponent(43)).getItemCount());
    assertEquals("dropdown1", metawidget.getValue("dropdown"));
    ((JComboBox) metawidget.getComponent(43)).setSelectedItem("foo1");

    assertEquals("Dropdown With Labels:", ((JLabel) metawidget.getComponent(44)).getText());
    assertTrue(metawidget.getComponent(45) instanceof JComboBox);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(45)).gridx);

    JComboBox combo = (JComboBox) metawidget.getComponent(45);
    assertEquals(5, combo.getItemCount());
    assertEquals("Foo #2",
            ((JLabel) combo.getRenderer().getListCellRendererComponent(new JList(), "foo2", 1, false, false))
                    .getText());
    assertEquals("Dropdown #2", ((JLabel) combo.getRenderer().getListCellRendererComponent(new JList(),
            "dropdown2", 1, false, false)).getText());
    assertEquals("Bar #2",
            ((JLabel) combo.getRenderer().getListCellRendererComponent(new JList(), "bar2", 1, false, false))
                    .getText());
    assertEquals("Baz #2",
            ((JLabel) combo.getRenderer().getListCellRendererComponent(new JList(), "baz2", 1, false, false))
                    .getText());
    assertEquals("dropdown2", metawidget.getValue("dropdownWithLabels"));
    ((JComboBox) metawidget.getComponent(45)).setSelectedItem("bar2");

    assertEquals("Not Null Dropdown:", ((JLabel) metawidget.getComponent(46)).getText());
    assertTrue(metawidget.getComponent(47) instanceof JComboBox);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(47)).gridx);
    assertEquals(3, ((JComboBox) metawidget.getComponent(47)).getItemCount());
    assertTrue(0 == (Byte) metawidget.getValue("notNullDropdown"));
    ((JComboBox) metawidget.getComponent(47)).setSelectedItem((byte) 1);

    assertEquals("Not Null Object Dropdown*:", ((JLabel) metawidget.getComponent(48)).getText());
    assertTrue(metawidget.getComponent(49) instanceof JComboBox);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(49)).gridx);
    assertEquals(6, ((JComboBox) metawidget.getComponent(49)).getItemCount());
    assertEquals("dropdown3", metawidget.getValue("notNullObjectDropdown"));
    ((JComboBox) metawidget.getComponent(49)).setSelectedIndex(0);

    assertEquals("Nested Widgets:", ((JLabel) metawidget.getComponent(50)).getText());
    assertTrue(metawidget.getComponent(51) instanceof SwingMetawidget);

    SwingMetawidget metawidgetNested = (SwingMetawidget) metawidget.getComponent(51);

    assertEquals("Further Nested Widgets:", ((JLabel) metawidgetNested.getComponent(0)).getText());
    assertEquals(1, ((GridBagLayout) metawidgetNested.getLayout())
            .getConstraints(metawidgetNested.getComponent(1)).gridx);

    SwingMetawidget metawidgetFurtherNested = (SwingMetawidget) metawidgetNested.getComponent(1);
    assertEquals("Further Nested Widgets:", ((JLabel) metawidgetFurtherNested.getComponent(0)).getText());
    assertTrue(metawidgetFurtherNested.getComponent(1) instanceof SwingMetawidget);
    assertEquals(((SwingMetawidget) metawidgetFurtherNested.getComponent(1)).getComponentCount(), 0);

    assertEquals("Nested Textbox 1:", ((JLabel) metawidgetFurtherNested.getComponent(2)).getText());
    assertTrue(metawidgetFurtherNested.getComponent(3) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidgetFurtherNested.getLayout())
            .getConstraints(metawidgetFurtherNested.getComponent(3)).gridx);
    assertEquals("Nested Textbox 1",
            metawidget.getValue("nestedWidgets", "furtherNestedWidgets", "nestedTextbox1"));
    ((JTextField) metawidgetFurtherNested.getComponent(3)).setText("Nested Textbox 1.1 (further)");

    assertEquals("Nested Textbox 2:", ((JLabel) metawidgetFurtherNested.getComponent(4)).getText());
    assertTrue(metawidgetFurtherNested.getComponent(5) instanceof JTextField);

    // (should be 1, as in next row, if getEffectiveNumberOfColumns is working)

    assertEquals(1, ((GridBagLayout) metawidgetFurtherNested.getLayout())
            .getConstraints(metawidgetFurtherNested.getComponent(5)).gridx);
    assertEquals("Nested Textbox 2",
            metawidget.getValue("nestedWidgets", "furtherNestedWidgets", "nestedTextbox2"));
    ((JTextField) metawidgetFurtherNested.getComponent(5)).setText("Nested Textbox 2.2 (further)");

    assertEquals("Nested Textbox 1:", ((JLabel) metawidgetNested.getComponent(2)).getText());
    assertTrue(metawidgetNested.getComponent(3) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidgetNested.getLayout())
            .getConstraints(metawidgetNested.getComponent(3)).gridx);
    assertEquals("Nested Textbox 1", metawidget.getValue("nestedWidgets", "nestedTextbox1"));
    ((JTextField) metawidgetNested.getComponent(3)).setText("Nested Textbox 1.1");

    assertEquals("Nested Textbox 2:", ((JLabel) metawidgetNested.getComponent(4)).getText());
    assertTrue(metawidgetNested.getComponent(5) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidgetNested.getLayout())
            .getConstraints(metawidgetNested.getComponent(5)).gridx);
    assertEquals("Nested Textbox 2", metawidget.getValue("nestedWidgets", "nestedTextbox2"));
    ((JTextField) metawidgetNested.getComponent(5)).setText("Nested Textbox 2.2");

    assertEquals("Read Only Nested Widgets:", ((JLabel) metawidget.getComponent(52)).getText());
    assertTrue(metawidget.getComponent(53) instanceof SwingMetawidget);

    metawidgetNested = (SwingMetawidget) metawidget.getComponent(53);
    assertEquals("Nested Textbox 1:", ((JLabel) metawidgetNested.getComponent(2)).getText());
    assertTrue(metawidgetNested.getComponent(3) instanceof JLabel);
    assertEquals(1, ((GridBagLayout) metawidgetNested.getLayout())
            .getConstraints(metawidgetNested.getComponent(3)).gridx);
    assertEquals("Nested Textbox 1", metawidget.getValue("readOnlyNestedWidgets", "nestedTextbox1"));

    assertEquals("Nested Textbox 2:", ((JLabel) metawidgetNested.getComponent(4)).getText());
    assertTrue(metawidgetNested.getComponent(5) instanceof JLabel);
    assertEquals(1, ((GridBagLayout) metawidgetNested.getLayout())
            .getConstraints(metawidgetNested.getComponent(5)).gridx);
    assertEquals("Nested Textbox 2", metawidget.getValue("readOnlyNestedWidgets", "nestedTextbox2"));

    assertEquals("Nested Widgets Dont Expand:", ((JLabel) metawidget.getComponent(54)).getText());
    assertEquals("Nested Textbox 1, Nested Textbox 2", ((JTextField) metawidget.getComponent(55)).getText());
    ((JTextField) metawidget.getComponent(55)).setText("Nested Textbox 1.01, Nested Textbox 2.02");

    assertEquals("Read Only Nested Widgets Dont Expand:", ((JLabel) metawidget.getComponent(56)).getText());
    assertEquals("Nested Textbox 1, Nested Textbox 2", ((JLabel) metawidget.getComponent(57)).getText());

    assertEquals("Date:", ((JLabel) metawidget.getComponent(58)).getText());
    assertTrue(metawidget.getComponent(59) instanceof JTextField);
    assertEquals(1, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(59)).gridx);

    DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
    assertEquals(dateFormat.format(allWidgets.getDate()), metawidget.getValue("date"));
    ((JTextField) metawidget.getComponent(59)).setText("bad date");

    JPanel separatorPanel = (JPanel) metawidget.getComponent(60);
    assertEquals("Section Break", ((JLabel) separatorPanel.getComponent(0)).getText());
    assertEquals(GridBagConstraints.REMAINDER,
            ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(60)).gridwidth);
    assertTrue(separatorPanel.getComponent(1) instanceof JSeparator);

    assertEquals("Read Only:", ((JLabel) metawidget.getComponent(61)).getText());
    assertTrue(metawidget.getComponent(62) instanceof JLabel);
    assertEquals("Read Only", metawidget.getValue("readOnly"));

    assertTrue(metawidget.getComponent(63) instanceof JButton);
    assertEquals(3, ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(63)).gridx);
    assertEquals(GridBagConstraints.NONE,
            ((GridBagLayout) metawidget.getLayout()).getConstraints(metawidget.getComponent(63)).fill);
    JButton button = ((JButton) metawidget.getComponent(63));
    assertEquals("Do Action", button.getText());
    assertTrue(button.isEnabled());
    try {
        button.doClick();
        fail();
    } catch (Exception e) {
        assertEquals("doAction called", e.getCause().getCause().getMessage());
    }

    assertEquals(64, metawidget.getComponentCount());

    // Check painting

    JFrame frame = new JFrame();
    metawidget.paint(frame.getGraphics());

    // Check MetawidgetException

    try {
        processor.getClass().getMethod("save", SwingMetawidget.class).invoke(processor, metawidget);
        fail();
    } catch (Exception e) {
        assertEquals("Could not parse 'bad date'", e.getCause().getCause().getMessage());
    }

    // Check saving

    String now = dateFormat.format(new GregorianCalendar().getTime());
    ((JTextField) metawidget.getComponent(59)).setText(now);
    processor.getClass().getMethod("save", SwingMetawidget.class).invoke(processor, metawidget);

    // Check read-only

    metawidget.setReadOnly(true);

    assertEquals("Textbox:", ((JLabel) metawidget.getComponent(0)).getText());
    assertEquals("Textbox1", ((JLabel) metawidget.getComponent(1)).getText());
    assertEquals("Limited Textbox:", ((JLabel) metawidget.getComponent(2)).getText());
    assertEquals("Limited Textbox1", ((JLabel) metawidget.getComponent(3)).getText());
    assertEquals("Textarea:", ((JLabel) metawidget.getComponent(4)).getText());
    assertEquals("Textarea1",
            ((JTextArea) ((JScrollPane) metawidget.getComponent(5)).getViewport().getView()).getText());
    assertEquals("Password:", ((JLabel) metawidget.getComponent(6)).getText());
    assertTrue(metawidget.getComponent(7) instanceof JPanel);
    assertEquals("Byte Primitive:", ((JLabel) metawidget.getComponent(8)).getText());
    assertEquals("126", ((JLabel) metawidget.getComponent(9)).getText());
    assertEquals("Byte Object:", ((JLabel) metawidget.getComponent(10)).getText());
    assertEquals("-127", ((JLabel) metawidget.getComponent(11)).getText());
    assertEquals("Short Primitive:", ((JLabel) metawidget.getComponent(12)).getText());
    assertEquals("32766", ((JLabel) metawidget.getComponent(13)).getText());
    assertEquals("Short Object:", ((JLabel) metawidget.getComponent(14)).getText());
    assertEquals("-32767", ((JLabel) metawidget.getComponent(15)).getText());
    assertEquals("Int Primitive:", ((JLabel) metawidget.getComponent(16)).getText());
    assertEquals("2147483646", ((JLabel) metawidget.getComponent(17)).getText());
    assertEquals("Integer Object:", ((JLabel) metawidget.getComponent(18)).getText());
    assertEquals("-2147483647", ((JLabel) metawidget.getComponent(19)).getText());
    assertEquals("Ranged Int:", ((JLabel) metawidget.getComponent(20)).getText());
    assertEquals("33", ((JLabel) metawidget.getComponent(21)).getText());
    assertEquals("Ranged Integer:", ((JLabel) metawidget.getComponent(22)).getText());
    assertEquals("34", ((JLabel) metawidget.getComponent(23)).getText());
    assertEquals("Long Primitive:", ((JLabel) metawidget.getComponent(24)).getText());
    assertEquals("43", ((JLabel) metawidget.getComponent(25)).getText());
    assertEquals("44", ((JLabel) metawidget.getComponent(26)).getText());
    assertEquals("Float Primitive:", ((JLabel) metawidget.getComponent(27)).getText());
    assertTrue(((JLabel) metawidget.getComponent(28)).getText().startsWith("4.3")
            || ((JLabel) metawidget.getComponent(28)).getText().startsWith("4.299"));
    assertEquals("nullInBundle:", ((JLabel) metawidget.getComponent(29)).getText());
    assertEquals("5.4", ((JLabel) metawidget.getComponent(30)).getText());
    assertEquals("Double Primitive:", ((JLabel) metawidget.getComponent(31)).getText());
    assertTrue(((JLabel) metawidget.getComponent(32)).getText().startsWith("42.3")
            || ((JLabel) metawidget.getComponent(32)).getText().startsWith("42.299"));
    assertEquals("54.4", ((JLabel) metawidget.getComponent(33)).getText());
    assertEquals("Char Primitive:", ((JLabel) metawidget.getComponent(34)).getText());
    assertEquals("Z", ((JLabel) metawidget.getComponent(35)).getText());
    assertEquals("Character Object:", ((JLabel) metawidget.getComponent(36)).getText());
    assertEquals("A", ((JLabel) metawidget.getComponent(37)).getText());
    assertEquals("Boolean Primitive:", ((JLabel) metawidget.getComponent(38)).getText());
    assertEquals("true", ((JLabel) metawidget.getComponent(39)).getText());
    assertEquals("Boolean Object:", ((JLabel) metawidget.getComponent(40)).getText());
    assertEquals("No", ((JLabel) metawidget.getComponent(41)).getText());
    assertEquals("Dropdown:", ((JLabel) metawidget.getComponent(42)).getText());
    assertEquals("foo1", ((JLabel) metawidget.getComponent(43)).getText());
    assertEquals("Dropdown With Labels:", ((JLabel) metawidget.getComponent(44)).getText());
    assertEquals("Bar #2", ((JLabel) metawidget.getComponent(45)).getText());
    assertEquals("Not Null Dropdown:", ((JLabel) metawidget.getComponent(46)).getText());
    assertEquals("1", ((JLabel) metawidget.getComponent(47)).getText());
    assertEquals("Not Null Object Dropdown:", ((JLabel) metawidget.getComponent(48)).getText());
    assertEquals("foo3", ((JLabel) metawidget.getComponent(49)).getText());
    assertEquals("Nested Widgets:", ((JLabel) metawidget.getComponent(50)).getText());
    assertEquals("Further Nested Widgets:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(0)).getText());
    assertEquals("Further Nested Widgets:",
            ((JLabel) ((SwingMetawidget) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(1))
                    .getComponent(0)).getText());
    assertEquals("Nested Textbox 1:",
            ((JLabel) ((SwingMetawidget) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(1))
                    .getComponent(2)).getText());
    assertEquals("Nested Textbox 1.1 (further)",
            ((JLabel) ((SwingMetawidget) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(1))
                    .getComponent(3)).getText());
    assertEquals("Nested Textbox 2:",
            ((JLabel) ((SwingMetawidget) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(1))
                    .getComponent(4)).getText());
    assertEquals("Nested Textbox 2.2 (further)",
            ((JLabel) ((SwingMetawidget) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(1))
                    .getComponent(5)).getText());
    assertEquals("Nested Textbox 1:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(2)).getText());
    assertEquals("Nested Textbox 1.1",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(3)).getText());
    assertEquals("Nested Textbox 2:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(4)).getText());
    assertEquals("Nested Textbox 2.2",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(51)).getComponent(5)).getText());
    assertEquals("Read Only Nested Widgets:", ((JLabel) metawidget.getComponent(52)).getText());
    assertEquals("Further Nested Widgets:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(53)).getComponent(0)).getText());
    assertEquals("Nested Textbox 1:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(53)).getComponent(2)).getText());
    assertEquals("Nested Textbox 1",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(53)).getComponent(3)).getText());
    assertEquals("Nested Textbox 2:",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(53)).getComponent(4)).getText());
    assertEquals("Nested Textbox 2",
            ((JLabel) ((SwingMetawidget) metawidget.getComponent(53)).getComponent(5)).getText());
    assertEquals("Nested Widgets Dont Expand:", ((JLabel) metawidget.getComponent(54)).getText());
    assertEquals("Nested Textbox 1.01, Nested Textbox 2.02", ((JLabel) metawidget.getComponent(55)).getText());
    assertEquals("Read Only Nested Widgets Dont Expand:", ((JLabel) metawidget.getComponent(56)).getText());
    assertEquals("Nested Textbox 1, Nested Textbox 2", ((JLabel) metawidget.getComponent(57)).getText());
    assertEquals("Date:", ((JLabel) metawidget.getComponent(58)).getText());
    assertEquals(now, ((JLabel) metawidget.getComponent(59)).getText());
    assertEquals("Section Break", ((JLabel) ((JPanel) metawidget.getComponent(60)).getComponent(0)).getText());
    assertEquals("Read Only:", ((JLabel) metawidget.getComponent(61)).getText());
    assertEquals("Read Only", ((JLabel) metawidget.getComponent(62)).getText());
    assertEquals("Do Action", ((JButton) metawidget.getComponent(63)).getText());
    assertTrue(!((JButton) metawidget.getComponent(63)).isEnabled());

    assertEquals(metawidget.getComponentCount(), 64);

    // Test Binding.onStartBuild clears the state

    assertTrue(null != metawidget.getClientProperty(processor.getClass()));
    processor.onStartBuild(metawidget);
    assertEquals(null, metawidget.getClientProperty(processor.getClass()));
}

From source file:org.ngrinder.recorder.ui.AboutDialog.java

private Component getLicenseTextArea() {
    JTextArea licenseTextArea = new JTextArea();
    JScrollPane scrollPane = new JScrollPane(licenseTextArea);
    InputStream resourceAsStream = AboutDialog.class.getResourceAsStream("/license.txt");
    String licenseMessage;/*  w ww. jav a2  s . c om*/
    try {
        licenseMessage = IOUtils.toString(resourceAsStream);
        IOUtils.closeQuietly(resourceAsStream);
        licenseTextArea.setText(licenseMessage);
    } catch (IOException e) {
        noOp();
    }
    return scrollPane;
}

From source file:org.olivier.ihm.FramePUMLCleanerControler.java

/**
 * Filtre le fichier PUML stock dans le textArea  partir du filtre contenu
 * dans le JTree//from  w  w  w.  j a  v  a 2s.c  o  m
 *
 * @param jTextAreaFichier
 * @param jTreeFiltre
 */
private void filtrerFichier(JTextArea jTextAreaFichier, JTree jTreeFiltre) {
    jTextAreaFichier.setText("");
    // Liste des noeuds  supprimer
    final DefaultMutableTreeNode nodeToDelete = getNodeToDelete(
            (DefaultMutableTreeNode) jTreeFiltre.getModel().getRoot(),
            checkTreeManager.getSelectionModel().getSelectionPaths());

    // traitement des lignes
    for (String line : lines) {
        if (isLinePrintable(line, nodeToDelete)) {
            jTextAreaFichier.append(line + "\n");
        }
    }
    jTextAreaFichier.requestFocus();
}

From source file:org.opencms.applet.upload.FileUploadApplet.java

/** 
 * Displays the dialog that shows the list of files that will be overwritten on the server.
 * <p>//w w  w  .j  av  a2 s.com
 * The user may uncheck the checkboxes in front of the relative paths to avoid overwriting. 
 * <p>
 * 
 * @param duplications 
 *      a list of Strings that are relative paths to the files that will be overwritten on the server
 *      
 * @return one of 
 */
private int showDuplicationsDialog(List duplications) {

    int rtv = ModalDialog.ERROR_OPTION;
    try {

        JTextArea dialogIntroPanel = new JTextArea();
        dialogIntroPanel.setLineWrap(true);
        dialogIntroPanel.setWrapStyleWord(true);
        dialogIntroPanel.setText(m_overwriteDialogIntro);
        dialogIntroPanel.setEditable(false);
        dialogIntroPanel.setBackground(m_fileSelector.getBackground());
        dialogIntroPanel.setFont(m_font);

        FileSelectionPanel selectionPanel = new FileSelectionPanel(duplications,
                m_fileSelector.getCurrentDirectory().getAbsolutePath());

        JPanel stacker = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.NORTHWEST;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.weightx = 1f;
        gbc.weighty = 0f;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(2, 2, 2, 2);

        stacker.add(dialogIntroPanel, gbc);

        gbc.weighty = 1f;
        gbc.gridy = 1;
        gbc.insets = new Insets(0, 2, 0, 2);
        stacker.add(selectionPanel, gbc);

        m_overwriteDialog = new ModalDialog(m_fileSelector, m_overwriteDialogTitle, m_overwriteDialogOk,
                m_overwriteDialogCancel, stacker);
        m_overwriteDialog.setSize(new Dimension(560, 280));

        //dialog.setResizable(false);
        m_overwriteDialog.showDialog();
        rtv = m_overwriteDialog.getReturnValue();

    } catch (Throwable f) {
        f.printStackTrace(System.err);
    }
    return rtv;
}

From source file:org.optaconf.benchmark.examples.common.swingui.SolverAndPersistenceFrame.java

private JPanel createMiddlePanel() {
    middlePanel = new JPanel(new CardLayout());
    JPanel usageExplanationPanel = new JPanel(new BorderLayout(5, 5));
    ImageIcon usageExplanationIcon = new ImageIcon(
            getClass().getResource(solutionPanel.getUsageExplanationPath()));
    JLabel usageExplanationLabel = new JLabel(usageExplanationIcon);
    // Allow splitPane divider to be moved to the right
    usageExplanationLabel.setMinimumSize(new Dimension(100, 100));
    usageExplanationPanel.add(usageExplanationLabel, BorderLayout.CENTER);
    JPanel descriptionPanel = new JPanel(new BorderLayout(2, 2));
    descriptionPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    descriptionPanel.add(new JLabel("Example description"), BorderLayout.NORTH);
    JTextArea descriptionTextArea = new JTextArea(8, 70);
    descriptionTextArea.setEditable(false);
    descriptionTextArea.setText(solutionBusiness.getAppDescription());
    descriptionPanel.add(new JScrollPane(descriptionTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
    usageExplanationPanel.add(descriptionPanel, BorderLayout.SOUTH);
    middlePanel.add(usageExplanationPanel, "usageExplanationPanel");
    JComponent wrappedSolutionPanel;
    if (solutionPanel.isWrapInScrollPane()) {
        wrappedSolutionPanel = new JScrollPane(solutionPanel);
    } else {/*w  w w . jav  a  2s .  c  om*/
        wrappedSolutionPanel = solutionPanel;
    }
    middlePanel.add(wrappedSolutionPanel, "solutionPanel");
    return middlePanel;
}

From source file:org.pmedv.blackboard.commands.CreatePartListCommand.java

@Override
public void execute(ActionEvent e) {
    ApplicationContext ctx = AppContext.getContext();
    final ApplicationWindow win = ctx.getBean(ApplicationWindow.class);
    final BoardEditor editor = EditorUtils.getCurrentActiveEditor();
    StringBuffer partList = new StringBuffer();
    partList.append("Name,Value,Package\n");
    for (Layer layer : editor.getModel().getLayers()) {
        for (Item i : layer.getItems()) {
            if (i instanceof Part && !(i instanceof TextPart)) {
                Part p = (Part) i;//from w w  w .j  av a  2 s .  c o m
                partList.append(p.getName() + "," + p.getValue() + "," + p.getPackageType() + "\n");
            }
            if (i instanceof Resistor) {
                Resistor r = (Resistor) i;
                partList.append(r.getName() + "," + r.getValue() + " Ohm,RESISTOR\n");
            }
        }
    }
    final JFileChooser fc = new JFileChooser(".");
    fc.setFileFilter(new CSVFilter());
    fc.setDialogTitle(resources.getResourceByKey("CreatePartListCommand.dialog.subtitle"));
    fc.setApproveButtonText(resources.getResourceByKey("msg.save"));
    int result = fc.showOpenDialog(win);
    if (result == JFileChooser.APPROVE_OPTION) {
        if (fc.getSelectedFile() == null)
            return;
        File selectedFile = fc.getSelectedFile();
        if (selectedFile != null) {
            // if csv extension is missing...
            if (!selectedFile.getName().endsWith(".csv")) {
                selectedFile = new File(selectedFile.getAbsolutePath() + ".csv");
            }
            try {
                FileUtils.writeStringToFile(selectedFile, partList.toString(), "UTF-8");
                int res = JOptionPane.showConfirmDialog(win, resources.getResourceByKey("msg.viewpartlist"),
                        resources.getResourceByKey("msg.question"), JOptionPane.YES_NO_OPTION);
                if (res == JOptionPane.YES_OPTION) {
                    JTextArea textPane = new JTextArea();
                    textPane.setText(partList.toString());
                    JScrollPane s = new JScrollPane(textPane);
                    s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
                    s.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                    View v = new View("Partlist for " + editor.getCurrentFile().getName(), null, s);
                    editor.setView(v);
                    final ImageIcon icon = resources.getIcon("icon.document.html");
                    v.getViewProperties().setIcon(icon);
                    v.getViewProperties().setTitle("Partlist for " + editor.getCurrentFile().getName());
                    openEditor(v, editor.getCurrentFile().hashCode());
                    v.undock(new Point(20, 10));
                }
            } catch (IOException e1) {
                ErrorUtils.showErrorDialog(e1);
            }
        }
    }
}

From source file:org.p_vcd.ui.LicenseDialog.java

public LicenseDialog(String libName, String libHomepage, String licenseName, String licenseFilename) {
    setSize(680, 480);//w ww .  j  ava2  s  .co m
    setTitle(libName);
    getContentPane().setLayout(new BorderLayout());
    {
        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.NORTH);
        panel.setLayout(new MigLayout("", "[grow,trailing][grow]", "[20px][][]"));
        {
            JLabel lblSoft = new JLabel(libName);
            lblSoft.setFont(new Font("Tahoma", Font.BOLD, 16));
            panel.add(lblSoft, "center,cell 0 0 2 1");
        }
        {
            JLabel lblHomePage = new JLabel("Home page:");
            lblHomePage.setFont(new Font("Tahoma", Font.BOLD, 14));
            panel.add(lblHomePage, "cell 0 1");
        }
        {
            JLabel lblHome = SwingUtil.createLink(libHomepage, libHomepage);
            lblHome.setFont(new Font("Tahoma", Font.PLAIN, 14));
            panel.add(lblHome, "cell 1 1");
        }
        {
            JLabel lblNewLabel = new JLabel("License:");
            lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));
            panel.add(lblNewLabel, "cell 0 2");
        }
        {
            JLabel lblLicense = new JLabel(licenseName);
            lblLicense.setFont(new Font("Tahoma", Font.PLAIN, 14));
            panel.add(lblLicense, "cell 1 2");
        }
    }
    {
        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(new FlowLayout());
        panel.setBorder(new EmptyBorder(5, 5, 5, 5));
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setPreferredSize(new Dimension(600, 300));
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        panel.add(scrollPane);
        {
            JTextArea txtLicense = new JTextArea();
            txtLicense.setEditable(false);
            txtLicense.setFont(new Font("Monospaced", Font.PLAIN, 11));
            txtLicense.setWrapStyleWord(true);
            txtLicense.setLineWrap(true);
            try {
                InputStream is = Thread.currentThread().getContextClassLoader()
                        .getResourceAsStream("org/p_vcd/licenses/" + licenseFilename);
                String text = IOUtils.toString(is, "UTF-8");
                IOUtils.closeQuietly(is);
                txtLicense.setText(text);
                txtLicense.setCaretPosition(0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            scrollPane.setViewportView(txtLicense);
        }
    }
    {
        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);
        panel.setLayout(new FlowLayout(FlowLayout.CENTER));
        JButton okButton = new JButton("OK");
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                LicenseDialog.this.dispose();
            }
        });
        okButton.setActionCommand("OK");
        panel.add(okButton);
        getRootPane().setDefaultButton(okButton);
    }
}

From source file:org.revager.tools.GUITools.java

/**
 * Creates a new title text area for popup windows.
 * //ww  w .j a  v  a 2  s  .c  o m
 * @param titleText
 *            the title text
 * 
 * @return the newly created text area
 */
public static JTextArea newPopupTitleArea(String titleText) {
    JTextArea textTitle = new JTextArea();
    textTitle.setEditable(false);
    textTitle.setText(titleText);
    textTitle.setBackground(UI.POPUP_BACKGROUND);
    textTitle.setFont(UI.STANDARD_FONT.deriveFont(Font.BOLD));
    textTitle.setLineWrap(true);
    textTitle.setWrapStyleWord(true);
    textTitle.setFocusable(false);
    textTitle.setBorder(new EmptyBorder(5, 5, 5, 5));
    return textTitle;
}

From source file:org.richie.codeGen.ui.GenAndPreviewUI.java

/**
 * ??//from w  w w. ja  v a  2  s  .  c  om
 * 
 * @param fileName
 * @param fileContent
 */
private void addPreviewTablePanel(String fileName, String fileContent) {
    final JScrollPane content = new JScrollPane();
    JTextArea viewTextArea = new JTextArea();
    viewTextArea.setText(fileContent);
    content.setViewportView(viewTextArea);
    JPanel tab = new JPanel();
    tab.setOpaque(false);
    JLabel tabLabel = new JLabel(fileName);
    ImageIcon closeXIcon = new ImageIcon(ClassLoader.getSystemResource("resources/images/close.gif"));
    JButton tabCloseButton = new JButton(closeXIcon);
    tabCloseButton.setToolTipText("close");
    tabCloseButton.setBorder(null);
    tabCloseButton.setContentAreaFilled(false);
    tabCloseButton.setPreferredSize(new Dimension(closeXIcon.getIconWidth(), closeXIcon.getIconHeight()));
    tabCloseButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            int closeTabNumber = mainPanel.indexOfComponent(content);
            mainPanel.removeTabAt(closeTabNumber);
        }
    });

    tab.add(tabLabel, BorderLayout.WEST);
    tab.add(tabCloseButton, BorderLayout.EAST);

    mainPanel.addTab(null, content);
    mainPanel.setTabComponentAt(mainPanel.getTabCount() - 1, tab);
    mainPanel.setSelectedComponent(content);
}

From source file:org.simmi.GeneSetHead.java

License:asdf

private void showGeneTable(
        /*final Map<String, Gene> genemap, final List<Gene> genelist, 
        final List<Function> funclist, final List<Set<String>> iclusterlist, final List<Set<String>> uclusterlist,
        final Map<Set<String>, ShareNum> specset,*/ final Map<Set<String>, ClusterInfo> clustInfoMap,
        final Button jb, final TableView<Gene> genetable, final TableView<Function> upper,
        final TableView<GeneGroup> lower, final ToolBar toolbar, final ToolBar btoolbar, final Container comp,
        final JApplet applet, final ComboBox<String> selcomblocal) throws IOException {
    //JSplitPane splitpane = new JSplitPane();
    //splitpane.setOrientation(JSplitPane.VERTICAL_SPLIT);
    //splitpane.setDividerLocation(400);
    //JScrollPane scrollpane = new JScrollPane();

    /*table = new JTable() {
       public String getToolTipText(MouseEvent me) {
    Point p = me.getPoint();//from  ww  w.j  a v a 2s.  c om
    int r = rowAtPoint(p);
    int c = columnAtPoint(p);
    if (r >= 0 && r < super.getRowCount()) {
       Object ret = super.getValueAt(r, c);
       if (ret != null) {
          return ret.toString(); // super.getToolTipText( me );
       }
    }
    return "";
       }
    };*/

    //table.setDragEnabled(true);
    try {
        final DataFlavor df = new DataFlavor("text/plain;charset=utf-8");
        // System.err.println( df.getHumanPresentableName() + " " +
        // df.getPrimaryType() + " " + df.getSubType() + " " +
        // df.getMimeType() );
        // DataFlavor df1 = DataFlavor.getTextPlainUnicodeFlavor();
        // System.err.println( df.getHumanPresentableName() + " " +
        // df.getPrimaryType() + " " + df.getSubType() + " " +
        // df.getMimeType() );
        TransferHandler th = new TransferHandler() {
            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            public int getSourceActions(JComponent c) {
                return TransferHandler.COPY_OR_MOVE;
            }

            public boolean canImport(TransferHandler.TransferSupport support) {
                return true;
            }

            protected Transferable createTransferable(JComponent c) {
                return new Transferable() {
                    @Override
                    public Object getTransferData(DataFlavor arg0)
                            throws UnsupportedFlavorException, IOException {
                        Map<String, List<Tegeval>> contigs = new HashMap<>();
                        StringBuilder ret = new StringBuilder();
                        for (Gene gg : gtable.getSelectionModel().getSelectedItems()) {
                            Tegeval tv = gg.tegeval;
                            if (!contigs.containsKey(tv.getContshort())) {
                                List<Tegeval> ltv = new ArrayList<>();
                                ltv.add(tv);
                                contigs.put(tv.getContshort().getName(), ltv);
                            } else {
                                List<Tegeval> ltv = contigs.get(tv.getContshort());
                                ltv.add(tv);
                            }
                            /*
                             * ret.append( ">" + tv.cont + " " +
                             * tv.teg + " " + tv.eval + "\n" );
                             * if( tv.dna != null ) { for( int i
                             * = 0; i < tv.dna.length(); i+=70 )
                             * { ret.append(tv.dna.substring( i,
                             * Math.min(i+70,tv.dna.length())
                             * )+"\n"); } }
                             */
                        }
                        for (String cont : contigs.keySet()) {
                            List<Tegeval> tv = contigs.get(cont);
                            String dna = tv.get(0).getSequence();
                            ret.append(">" + cont + "\n"); // + " " + tv.teg
                            // + " " +
                            // tv.eval +
                            // "\n" );
                            if (dna != null) {
                                for (int i = 0; i < dna.length(); i += 70) {
                                    ret.append(dna.substring(i, Math.min(i + 70, dna.length())) + "\n");
                                }
                            }
                        }
                        for (String cont : contigs.keySet()) {
                            List<Tegeval> ltv = contigs.get(cont);
                            ret.append(">" + cont + "\n"); // + " " + tv.teg
                            // + " " +
                            // tv.eval +
                            // "\n" );
                            for (Tegeval tv : ltv) {
                                ret.append("erm\t#0000ff\t" + tv.start + "\t" + tv.stop + "\n");
                            }
                        }

                        return new ByteArrayInputStream(ret.toString().getBytes());
                    }

                    @Override
                    public DataFlavor[] getTransferDataFlavors() {
                        return new DataFlavor[] { df };
                    }

                    @Override
                    public boolean isDataFlavorSupported(DataFlavor arg0) {
                        if (arg0.equals(df)) {
                            return true;
                        }
                        return false;
                    }
                };
            }

            public boolean importData(TransferHandler.TransferSupport support) {
                Object obj = null;

                System.err.println(support.getDataFlavors().length);
                int b = Arrays.binarySearch(support.getDataFlavors(), DataFlavor.javaFileListFlavor,
                        (o1, o2) -> o1 == o2 ? 1 : 0);

                try {
                    obj = support.getTransferable().getTransferData(DataFlavor.imageFlavor);
                } catch (UnsupportedFlavorException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    if (obj != null && obj instanceof File[]) {
                        // File[] ff = (File[])obj;
                        // wbStuff( ff[0].getCanonicalPath() );
                    } else if (obj instanceof Image) {

                    } else {
                        obj = support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                        System.err.println(obj);
                        URL url = null;
                        try {
                            url = new URL((String) obj);
                            Image image = ImageIO.read(url);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                } catch (UnsupportedFlavorException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return true;
            }
        };
        //table.setTransferHandler(th);
    } catch (ClassNotFoundException e2) {
        e2.printStackTrace();
    }

    final Color darkgreen = new Color(0, 128, 0);
    final Color darkred = new Color(128, 0, 0);
    final Color darkblue = new Color(0, 0, 128);
    final Color darkmag = new Color(128, 0, 128);
    /*table.setDefaultRenderer(Teg.class, new DefaultTableCellRenderer() {
       @Override
       public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component label = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    if( value == null ) {
       label.setBackground(Color.white);
    } else {
       cellRender();
    }
    return label;
       }
    });*/

    //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    //table.setAutoCreateRowSorter(true);
    //scrollpane.setViewportView(table);

    Set<String> current = null;
    Set<String> currentko = null;
    InputStream is = GeneSet.class.getResourceAsStream("/kegg_pathways");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = br.readLine();
    while (line != null) {
        if (line.startsWith(">")) {
            current = new HashSet<>();
            currentko = new HashSet<>();
            geneset.pathwaymap.put(line.substring(1), current);
            geneset.pathwaykomap.put(line.substring(1), currentko);
        } else if (!line.startsWith("K")) {
            if (current != null) {
                String str = line.split("[\t ]+")[0];
                current.add(str);
            }
        } else {
            if (currentko != null) {
                String str = line.split("[\t ]+")[0];
                currentko.add(str);
            }
        }
        line = br.readLine();
    }
    br.close();

    //FileReader fr = new FileReader("/vg454flx/ko2go.txt");
    /*is = GeneSet.class.getResourceAsStream("/ko2go.txt");
    InputStreamReader isr = new InputStreamReader( is );
    br = new BufferedReader( isr );
    line = br.readLine();
    while (line != null) {
       String[] split = line.split(" = ");
       String[] subsplit = split[1].split(" ");
       Set<String> gos = new HashSet<String>();
       for( String go : subsplit ) {
    gos.add( go );
       }
       ko2go.put( split[0], gos );
       line = br.readLine();
    }
    br.close();*/

    final TextField textfield = new TextField();
    //JComponent topcomp = new JComponent() {};
    //topcomp.setLayout(new BorderLayout());
    //topcomp.add(scrollpane);

    textfield.setPrefSize(350, 25);

    final RadioButton search = new RadioButton("Search");
    final RadioButton filter = new RadioButton("Filter");

    ToggleGroup bgsf = new ToggleGroup();
    search.setToggleGroup(bgsf);
    filter.setToggleGroup(bgsf);
    //ButtonGroup bgsf = new ButtonGroup();
    //bgsf.add( search );
    //bgsf.add( filter );

    filter.setSelected(true);

    //ToolBar topcombo = new ToolBar();
    // topcombo.
    // topcombo.setLayout( new FlowLayout() );

    specombo = new ComboBox<>();
    combo = new ComboBox<>();

    specombo.getItems().add("Select blast species");
    combo.getItems().add("Select pathway");
    btoolbar.getItems().add(combo);
    btoolbar.getItems().add(specombo);
    //topcomp.add(topcombo, BorderLayout.SOUTH);

    //JComponent ttopcom = new JComponent() {};
    //ttopcom.setLayout(new FlowLayout());

    /*            frame.setVisible( true );
             }
          };
          AbstractAction   sharenumaction = new AbstractAction("Update share numbers") {
             @Override
             public void actionPerformed(ActionEvent e) {
    Set<String> specs = getSelspec(GeneSetHead.this, specList, null);
    updateShareNum(specs);
             }
          };
          AbstractAction   importgenesymbolaction = new AbstractAction("Import gene symbols") {
             @Override
             public void actionPerformed(ActionEvent e) {
    JFileChooser fc = new JFileChooser();
    if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) {
       try {
          Map<String,String> env = new HashMap<String,String>();
          env.put("create", "true");
          Path path = zipfile.toPath();
          String uristr = "jar:" + path.toUri();
          geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")* );
          geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env );
                  
          Path nf = geneset.zipfilesystem.getPath("/smap_short.txt");
          BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE);
                  
          InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) );
          uni2symbol(new InputStreamReader(is), bw, unimap);
                  
          bw.close();
          //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING );
          geneset.zipfilesystem.close();
       } catch (IOException e1) {
          e1.printStackTrace();
       }
    }
             }
          };
                  
          AbstractAction   importidmappingaction = new AbstractAction("Id mapping") {
             @Override
             public void actionPerformed(ActionEvent e) {
    JFileChooser fc = new JFileChooser();
    if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) {
       try {
          Map<String,String> env = new HashMap<String,String>();
          env.put("create", "true");
          Path path = zipfile.toPath();
          String uristr = "jar:" + path.toUri();
          geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")/ );
          geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env );
                  
          Path nf = geneset.zipfilesystem.getPath("/idmapping_short.dat");
          BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE);
                  
          InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) );
          if( unimap != null ) unimap.clear();
          unimap = idMapping(new InputStreamReader(is), bw, 2, 0, refmap, genmap, gimap);
                  
          bw.close();
          //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING );
          geneset.zipfilesystem.close();
       } catch (IOException e1) {
          e1.printStackTrace();
       }
    }
             }
          };
                  
          final JCheckBoxMenuItem checkbox = new JCheckBoxMenuItem();
          checkbox.setAction(new AbstractAction("Sort by location") {
             @Override
             public void actionPerformed(ActionEvent e) {
    Tegeval.locsort = checkbox.isSelected();
             }
          });
          AbstractAction saveselAction = new AbstractAction("Save selection") {
             @Override
             public void actionPerformed(ActionEvent e) {
    int[] rr = table.getSelectedRows();
    if( rr.length > 0 ) {
       String val = Integer.toString( table.convertRowIndexToModel(rr[0]) );
       for( int i = 1; i < rr.length; i++ ) {
          val += ","+table.convertRowIndexToModel(rr[i]);
       }
       String selname = JOptionPane.showInputDialog("Selection name");
       if( comp instanceof Applet ) {
          try {
             ((GeneSet)comp).saveSel( selname, val);
          } catch (Exception e1) {
             e1.printStackTrace();
          }
       }
    }
             }
          };
                  
          JMenuBar   menubar = new JMenuBar();
          JMenu      menu = new JMenu("Functions");
          menu.add( importidmappingaction );
          menu.add( functionmappingaction );
          menu.add( importgenesymbolaction );
          menu.add( fetchaction );
          menu.add( blast2action );
          menu.add( sharenumaction );
          menu.addSeparator();
          menu.add( checkbox );
          menu.add( saveselAction );
          menu.addSeparator();
          menu.add( genomestataction );
          menu.add( selectsharingaction );
          menu.add( shuffletreeaction );
          menu.add( presabsaction );
          menu.add( freqdistaction );
          menu.add( gcpaction );
          menu.add( matrixaction );
          menu.add( pancoreaction );
          menu.add( blastaction );
          menu.add( koexportaction );
          menu.add( genomesizeaction );
          menu.add( gcaction );
          menu.add( gcskewaction );
          menu.add( mltreemapaction );
          menu.add( sevenaction );
          menu.add( cogaction );
          menu.add( genexyplotaction );
          menu.add( compareplotaction );
          menu.add( syntenygradientaction );
          menu.add( codregaction );
          menu.add( fetchcoreaction );
          menu.add( loadcontiggraphaction );
          menu.add( selectflankingaction );
          menu.add( showflankingaction );
          menu.add( showcontigsaction );
          menu.add( showunresolved );
          menu.add( genephyl );
                  
          menubar.add( menu );
          ttopcom.add( menubar );
                  
          JMenu      view = new JMenu("View");
          menubar.add( view );
                  
          gb = new JRadioButtonMenuItem( new AbstractAction("Genes") {
             @Override
             public void actionPerformed(ActionEvent e) {
    table.setModel( defaultModel );
             }
          });
          view.add( gb );
          ggb = new JRadioButtonMenuItem( new AbstractAction("Gene groups") {
             @Override
             public void actionPerformed(ActionEvent e) {
    table.setModel( groupModel );
             }
                     
          });
          ButtonGroup   bg = new ButtonGroup();
          bg.add( gb );
          bg.add( ggb );
                  
          ggb.setSelected( true );
                  
          view.add( ggb );*/

    //ttopcom.add( shuffletreebutton );
    //ttopcom.add( presabsbutton );
    //ttopcom.add(freqdistbutton);
    //ttopcom.add(matrixbutton);

    toolbar.getItems().add(textfield);
    toolbar.getItems().add(search);
    toolbar.getItems().add(filter);
    toolbar.getItems().add(label);

    selcomblocal.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
        String key = newValue;
        if (((GeneSetHead) comp).selectionMap.containsKey(key)) {
            Set<Integer> val = ((GeneSetHead) comp).selectionMap.get(key);
            if (val != null) {
                table.getSelectionModel().clearSelection();
                for (int i : val) {
                    //int r = table.convertRowIndexToView(i);
                    table.getSelectionModel().select(i);
                }
            } else {
                System.err.println("null " + key);
            }
        } else {
            System.err.println("no " + key);
        }
    });
    toolbar.getItems().add(selcomblocal);

    /*syncolorcomb.addItemListener( new ItemListener() {
       @Override
       public void itemStateChanged(ItemEvent e) {
    String spec = (String)syncolorcomb.getSelectedItem();
    //if( spec.length() > 0 )
       }
    });*/
    toolbar.getItems().add(searchcolcomb);
    toolbar.getItems().add(syncolorcomb);
    //topcomp.add(ttopcom, BorderLayout.NORTH);

    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    table.getSelectionModel().selectedItemProperty().addListener(e -> {
        label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size());
    });

    gtable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    gtable.getSelectionModel().selectedItemProperty().addListener(e -> {
        label.setText(gtable.getItems().size() + "/" + gtable.getSelectionModel().getSelectedItems().size());
    });

    /*JButton but = new JButton(new AbstractAction("Gene sorter") {
       @Override
       public void actionPerformed(ActionEvent e) {
    try {
       GeneSorter.mynd(genelist, table, "t.scotoductusSA01", contigs);
    } catch (IOException e1) {
       e1.printStackTrace();
    }
       }
    });*/

    final TextField ftextfield = new TextField();
    btoolbar.getItems().add(ftextfield);

    ComboBox<String> scombo = new ComboBox();
    scombo.getItems().add("5S/8S");
    scombo.getItems().add("16S/18S");
    scombo.getItems().add("23S/28S");
    scombo.getSelectionModel().selectedItemProperty().addListener(e -> {
        String name = e.toString().split("/")[0];
        InputStream iss = GeneSet.class.getResourceAsStream("/all" + name + ".fsa");
        InputStreamReader isr = new InputStreamReader(iss);
        BufferedReader brr = new BufferedReader(isr);

        JTextArea textarea = new JTextArea();
        JScrollPane scrollpane = new JScrollPane(textarea);

        try {
            String ln = brr.readLine();
            while (ln != null) {
                textarea.append(ln + "\n");

                ln = brr.readLine();
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(scrollpane);
        frame.setSize(400, 300);
        frame.setVisible(true);
    });
    btoolbar.getItems().add(scombo);

    Button swsearch = new Button("SW Search");
    swsearch.setOnAction(e -> {
        JComponent c = new JComponent() {
        };
        final JProgressBar pb = new JProgressBar();
        final JTextArea textarea = new JTextArea();
        JButton searchbut = new JButton(new AbstractAction("Blast") {
            @Override
            public void actionPerformed(ActionEvent e) {
                final String fasta = textarea.getText();
                final SmithWater sw = new SmithWater();
                final InputStream is = GeneSet.class.getResourceAsStream("/allthermus.aa");
                new Thread() {
                    public void run() {
                        try {
                            sw.fasta_align(new StringReader(fasta), new InputStreamReader(is), pb);
                            List<SmithWater.ALN> alns = sw.getAlignments();
                            SmithWater.ALN first = null;
                            int count = 0;
                            String result = "";
                            Set<String> regnames = new HashSet<String>();
                            for (SmithWater.ALN aln : alns) {
                                if (first == null) {
                                    first = aln;
                                } else if (aln.getScore() < 3.0f * (first.getScore() / 4.0f))
                                    break;
                                result += aln.toString();
                                regnames.add(aln.getShortDestName());

                                if (++count == 10)
                                    break;
                            }
                            textarea.setText(result);

                            for (Gene g : geneset.genelist) {
                                boolean found = false;
                                Tegeval tv = g.tegeval;
                                if (regnames.contains(tv.name)) {
                                    found = true;
                                    break;
                                }
                                if (found) {
                                    gtable.getSelectionModel().select(g);
                                    break;
                                }
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        });
        c.setLayout(new BorderLayout());
        JScrollPane scrollpane = new JScrollPane(textarea);
        c.add(scrollpane);
        c.add(pb, BorderLayout.NORTH);
        c.add(searchbut, BorderLayout.SOUTH);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(c);
        frame.setSize(400, 300);
        frame.setVisible(true);
    });
    btoolbar.getItems().add(swsearch);
    btoolbar.getItems().add(jb);

    TableColumn<GeneGroup, String> namedesccol = new TableColumn("Desc");
    namedesccol.setCellValueFactory(new PropertyValueFactory<>("name"));
    table.getColumns().add(namedesccol);
    TableColumn<GeneGroup, String> origincol = new TableColumn("Origin");
    origincol.setCellValueFactory(new PropertyValueFactory<>("origin"));
    table.getColumns().add(origincol);
    TableColumn<GeneGroup, String> geneidcol = new TableColumn("Genid");
    geneidcol.setCellValueFactory(new PropertyValueFactory<>("genid"));
    table.getColumns().add(geneidcol);
    TableColumn<GeneGroup, String> refidcol = new TableColumn("Refid");
    refidcol.setCellValueFactory(new PropertyValueFactory<>("refid"));
    table.getColumns().add(refidcol);
    TableColumn<GeneGroup, String> unidcol = new TableColumn("Unid");
    unidcol.setCellValueFactory(new PropertyValueFactory<>("unid"));
    table.getColumns().add(unidcol);
    TableColumn<GeneGroup, String> keggidcol = new TableColumn("Keggid");
    keggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid"));
    table.getColumns().add(keggidcol);
    TableColumn<GeneGroup, String> keggpathcol = new TableColumn("Kegg pathway");
    keggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway"));
    table.getColumns().add(keggpathcol);
    TableColumn<GeneGroup, String> kocol = new TableColumn("KO");
    kocol.setCellValueFactory(new PropertyValueFactory<>("ko"));
    table.getColumns().add(kocol);
    TableColumn<GeneGroup, String> ksymbcol = new TableColumn("Ksymbol");
    ksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol"));
    table.getColumns().add(ksymbcol);
    TableColumn<GeneGroup, String> symbcol = new TableColumn("Symbol");
    symbcol.setCellValueFactory(new PropertyValueFactory<>("symbol"));
    table.getColumns().add(symbcol);
    TableColumn<GeneGroup, String> konamecol = new TableColumn("KO name");
    konamecol.setCellValueFactory(new PropertyValueFactory<>("koname"));
    table.getColumns().add(konamecol);
    TableColumn<GeneGroup, String> pbidcol = new TableColumn("Pbid");
    pbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid"));
    table.getColumns().add(pbidcol);
    TableColumn<GeneGroup, String> eccol = new TableColumn("Ec");
    eccol.setCellValueFactory(new PropertyValueFactory<>("ec"));
    table.getColumns().add(eccol);
    TableColumn<GeneGroup, String> cognamecol = new TableColumn("Cog name");
    cognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname"));
    table.getColumns().add(cognamecol);
    TableColumn<GeneGroup, String> cogcol = new TableColumn("Cog");
    cogcol.setCellValueFactory(new PropertyValueFactory<>("cog"));
    table.getColumns().add(cogcol);
    TableColumn<GeneGroup, String> cogannocol = new TableColumn("Cog annotation");
    cogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno"));
    table.getColumns().add(cogannocol);
    TableColumn<GeneGroup, String> cogsymbcol = new TableColumn("Cog symbol");
    cogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol"));
    table.getColumns().add(cogsymbcol);
    TableColumn<GeneGroup, String> cazycol = new TableColumn("Cazy");
    cazycol.setCellValueFactory(new PropertyValueFactory<>("cazy"));
    table.getColumns().add(cazycol);
    TableColumn<GeneGroup, String> prescol = new TableColumn("Present in");
    prescol.setCellValueFactory(new PropertyValueFactory<>("presentin"));
    table.getColumns().add(prescol);

    TableColumn<GeneGroup, Integer> groupindcol = new TableColumn("Group index");
    groupindcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupIndex"));
    table.getColumns().add(groupindcol);
    TableColumn<GeneGroup, Integer> groupcovcol = new TableColumn("Group coverage");
    groupcovcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupCoverage"));
    table.getColumns().add(groupcovcol);
    TableColumn<GeneGroup, Integer> groupsizecol = new TableColumn("Group size");
    groupsizecol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupGeneCount"));
    table.getColumns().add(groupsizecol);

    TableColumn<GeneGroup, String> locprefcol = new TableColumn("Loc pref");
    locprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref"));
    table.getColumns().add(locprefcol);
    TableColumn<GeneGroup, String> avgcpcol = new TableColumn("Avg GC%");
    avgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp"));
    table.getColumns().add(avgcpcol);
    TableColumn<GeneGroup, String> numloccol = new TableColumn("#Loc");
    numloccol.setCellValueFactory(new PropertyValueFactory<>("numloc"));
    table.getColumns().add(numloccol);
    TableColumn<GeneGroup, String> numlocgroupcol = new TableColumn("#Loc group");
    numlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup"));
    table.getColumns().add(numlocgroupcol);

    TableColumn<GeneGroup, ShareNum> sharenumcol = new TableColumn("Sharing number");
    sharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber"));
    table.getColumns().add(sharenumcol);
    TableColumn<GeneGroup, String> maxcyccol = new TableColumn("Max cyc");
    maxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc"));
    table.getColumns().add(maxcyccol);

    TableColumn<Gene, String> gnamedesccol = new TableColumn("Desc");
    gnamedesccol.setCellValueFactory(new PropertyValueFactory<>("name"));
    gtable.getColumns().add(gnamedesccol);
    TableColumn<Gene, String> gorigincol = new TableColumn("Origin");
    gorigincol.setCellValueFactory(new PropertyValueFactory<>("origin"));
    gtable.getColumns().add(gorigincol);
    TableColumn<Gene, String> ggeneidcol = new TableColumn("Genid");
    ggeneidcol.setCellValueFactory(new PropertyValueFactory<>("genid"));
    gtable.getColumns().add(ggeneidcol);
    TableColumn<Gene, String> grefidcol = new TableColumn("Refid");
    grefidcol.setCellValueFactory(new PropertyValueFactory<>("refid"));
    gtable.getColumns().add(grefidcol);
    TableColumn<Gene, String> gunidcol = new TableColumn("Unid");
    gunidcol.setCellValueFactory(new PropertyValueFactory<>("unid"));
    gtable.getColumns().add(gunidcol);
    TableColumn<Gene, String> gkeggidcol = new TableColumn("Keggid");
    gkeggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid"));
    gtable.getColumns().add(gkeggidcol);
    TableColumn<Gene, String> gkeggpathcol = new TableColumn("Kegg pathway");
    gkeggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway"));
    gtable.getColumns().add(gkeggpathcol);
    TableColumn<Gene, String> gkocol = new TableColumn("KO");
    gkocol.setCellValueFactory(new PropertyValueFactory<>("ko"));
    gtable.getColumns().add(gkocol);
    TableColumn<Gene, String> gksymbcol = new TableColumn("Ksymbol");
    gksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol"));
    gtable.getColumns().add(gksymbcol);
    TableColumn<Gene, String> gsymbcol = new TableColumn("Symbol");
    gsymbcol.setCellValueFactory(new PropertyValueFactory<>("symbol"));
    gtable.getColumns().add(gsymbcol);
    TableColumn<Gene, String> gkonamecol = new TableColumn("KO name");
    gkonamecol.setCellValueFactory(new PropertyValueFactory<>("koname"));
    gtable.getColumns().add(gkonamecol);
    TableColumn<Gene, String> gpbidcol = new TableColumn("Pbid");
    gpbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid"));
    gtable.getColumns().add(gpbidcol);
    TableColumn<Gene, String> geccol = new TableColumn("Ec");
    geccol.setCellValueFactory(new PropertyValueFactory<>("ec"));
    gtable.getColumns().add(geccol);
    TableColumn<Gene, String> gcognamecol = new TableColumn("Cog name");
    gcognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname"));
    gtable.getColumns().add(gcognamecol);
    TableColumn<Gene, String> gcogcol = new TableColumn("Cog");
    gcogcol.setCellValueFactory(new PropertyValueFactory<>("cog"));
    gtable.getColumns().add(gcogcol);
    TableColumn<Gene, String> gcogannocol = new TableColumn("Cog annotation");
    gcogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno"));
    gtable.getColumns().add(gcogannocol);
    TableColumn<Gene, String> gcogsymbcol = new TableColumn("Cog symbol");
    gcogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol"));
    gtable.getColumns().add(gcogsymbcol);
    TableColumn<Gene, String> gcazycol = new TableColumn("Cazy");
    gcazycol.setCellValueFactory(new PropertyValueFactory<>("cazy"));
    gtable.getColumns().add(gcazycol);
    TableColumn<Gene, String> gprescol = new TableColumn("Present in");
    gprescol.setCellValueFactory(new PropertyValueFactory<>("presentin"));
    gtable.getColumns().add(gprescol);

    TableColumn<Gene, Integer> ggroupindcol = new TableColumn("Group index");
    ggroupindcol.setCellValueFactory(new PropertyValueFactory<>("groupIndex"));
    gtable.getColumns().add(ggroupindcol);
    TableColumn<Gene, Integer> ggroupcovcol = new TableColumn("Group coverage");
    ggroupcovcol.setCellValueFactory(new PropertyValueFactory<>("groupCoverage"));
    gtable.getColumns().add(ggroupcovcol);
    TableColumn<Gene, Integer> ggroupsizecol = new TableColumn("Group size");
    ggroupsizecol.setCellValueFactory(new PropertyValueFactory<>("groupGeneCount"));
    gtable.getColumns().add(ggroupsizecol);

    TableColumn<Gene, String> glocprefcol = new TableColumn("Loc pref");
    glocprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref"));
    gtable.getColumns().add(glocprefcol);
    TableColumn<Gene, String> gavgcpcol = new TableColumn("Avg GC%");
    gavgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp"));
    gtable.getColumns().add(gavgcpcol);
    TableColumn<Gene, String> gnumloccol = new TableColumn("#Loc");
    gnumloccol.setCellValueFactory(new PropertyValueFactory<>("numloc"));
    gtable.getColumns().add(gnumloccol);
    TableColumn<Gene, String> gnumlocgroupcol = new TableColumn("#Loc group");
    gnumlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup"));
    gtable.getColumns().add(gnumlocgroupcol);

    TableColumn<Gene, ShareNum> gsharenumcol = new TableColumn("Sharing number");
    gsharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber"));
    gtable.getColumns().add(gsharenumcol);
    TableColumn<Gene, String> gmaxcyccol = new TableColumn("Max cyc");
    gmaxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc"));
    gtable.getColumns().add(gmaxcyccol);

    /*if( upper != null ) {
       SwingUtilities.invokeLater( new Runnable() {
    public void run() {
       //upper.setContent( botcomp );
       lower.setContent( topcomp );
    }
       });
    } else {
       splitpane.setBottomComponent(botcomp);
       splitpane.setTopComponent(topcomp);
    }
            
    groupModel = new TableModel() {
       @Override
       public int getRowCount() {
    return geneset.allgenegroups == null ? 0 : geneset.allgenegroups.size();
       }
            
       @Override
       public int getColumnCount() {
    return 32+geneset.specList.size();
       }
            
       @Override
       public String getColumnName(int columnIndex) {
    if (columnIndex == 0) {
       return "Desc";
    } else if (columnIndex == 1) {
       return "Origin";
    } else if (columnIndex == 2) {
       return "Genid";
    } else if (columnIndex == 3) {
       return "Refid";
    } else if (columnIndex == 4) {
       return "Unid";
    } else if (columnIndex == 5) {
       return "Keggid";
    } else if (columnIndex == 6) {
       return "Kegg pathway";
    } else if (columnIndex == 7) {
       return "KO";
    } else if (columnIndex == 8) {
       return "KSymbol";
    } else if (columnIndex == 9) {
       return "Symbol";
    } else if (columnIndex == 10) {
       return "KO name";
    } else if (columnIndex == 11) {
       return "Pdbid";
    } else if (columnIndex == 12) {
       return "EC";
    } else if (columnIndex == 13) {
       return "Cog name";
    } else if (columnIndex == 14) {
       return "Cog";
    } else if (columnIndex == 15) {
       return "Cog annotation";
    } else if (columnIndex == 16) {
       return "Cog symbol";
    } else if (columnIndex == 17) {
       return "Cazy";
    } else if (columnIndex == 18) {
       return "Present in";
    } else if (columnIndex == 19) {
       return "Group index";
    } else if (columnIndex == 20) {
       return "Group coverage";
    } else if (columnIndex == 21) {
       return "Group size";
    } else if (columnIndex == 22) {
       return "Locprev";
    } else if (columnIndex == 23) {
       return "Avg GC%";
    } else if (columnIndex == 24) {
       return "# of locus";
    } else if (columnIndex == 25) {
       return "# of loc in group";
    } else if (columnIndex == 26) {
       return "max length";
    } else if (columnIndex == 27) {
       return "sharing number";
    } else if (columnIndex == 28) {
       return "# Cyc";
    } else if (columnIndex == 29) {
       return "16S Corr";
    } else if (columnIndex == 30) {
       return "SingalP";
    } else if (columnIndex == 31) {
       return "TransM";
    } else {
       String spec = geneset.specList.get( columnIndex - 32 );
       if( spec != null ) {
          if( spec.toLowerCase().contains("thermus") ) {
             int i = spec.indexOf('_');
             return spec.substring(i+1, spec.length());
          } else return spec;
       }
       return "";
    }
    /* else if (columnIndex == 19) {
       return "T.tSG0";
    } else if (columnIndex == 20) {
       return "T.tJL18";
    } else if (columnIndex == 21) {
       return "T.tHB8";
    } else if (columnIndex == 22) {
       return "T.tHB27";
    } else if (columnIndex == 23) {
       return "T.scotoSA01";
    } else if (columnIndex == 24) {
       return "T.aqua";
    } else if (columnIndex == 25) {
       return "T.eggert";
    } else if (columnIndex == 26) {
       return "T.island";
    } else if (columnIndex == 27) {
       return "T.antan";
    } else if (columnIndex == 28) {
       return "T.scoto346";
    } else if (columnIndex == 29) {
       return "T.scoto1572";
    } else if (columnIndex == 30) {
       return "T.scoto252";
    } else if (columnIndex == 31) {
       return "T.scoto2101";
    } else if (columnIndex == 32) {
       return "T.scoto2127";
    } else if (columnIndex == 33) {
       return "T.scoto4063";
    } else if (columnIndex == 34) {
       return "T.oshimai";
    } else if (columnIndex == 35) {
       return "T.brockianus";
    } else if (columnIndex == 36) {
       return "T.filiformis";
    } else if (columnIndex == 37) {
       return "T.igniterrae";
    } else if (columnIndex == 38) {
       return "T.kawarayensis";
    } else if (columnIndex == 39) {
       return "T.arciformis";
    } else if (columnIndex == 40) {
       return "T.spCCB";
    } else if (columnIndex == 41) {
       return "T.spRLM";
    } else if (columnIndex == 42) {
       return "T.oshimaiJL2";
    } else if (columnIndex == 43) {
       return "MT.silvianus";
    } else if (columnIndex == 44) {
       return "MT.ruber";
    } else if (columnIndex == 45) {
       return "M.hydro";
    } else if (columnIndex == 46) {
       return "O.profu";
    }*
            
    //return "";
       }
            
       @Override
       public Class<?> getColumnClass(int columnIndex) {
    if( columnIndex == 19 || columnIndex == 20 || columnIndex == 28 )
       return Double.class;
    else if(columnIndex == 10 || (columnIndex >= 17 && columnIndex <= 28) )
       return Integer.class;
    else if (columnIndex >= 32)
       return Teg.class;
    return String.class;
       }
            
       @Override
       public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
       }
            
       @Override
       public Object getValueAt(int rowIndex, int columnIndex) {
    GeneGroup gg = geneset.allgenegroups.get(rowIndex);
    if (columnIndex == 0) {
       return gg.getCommonName();
    } else if (columnIndex == 1) {
       return gg.getCommonOrigin();
    } else if (columnIndex == 2) {
       return null;//gene.genid;
    } else if (columnIndex == 3) {
       return gg.getCommonRefId();
    } else if (columnIndex == 4) {
       return gg.getCommonUnId();
    } else if (columnIndex == 5) {
       return gg.getKeggid();
    } else if (columnIndex == 6) {
       return gg.getKeggPathway();
    } else if (columnIndex == 7) {
       return gg.getCommonKO();
    } else if (columnIndex == 8) {
       return gg.getCommonKSymbol();
    } else if (columnIndex == 9) {
       return gg.getCommonSymbol(); //ko2name != null ? ko2name.get( gg.getCommonKO() ) : null;
    } else if (columnIndex == 10) {
       String ret = geneset.ko2name != null ? geneset.ko2name.get( gg.getCommonKO() ) : null;
       if( ret == null ) {
          String symbol = gg.getCommonSymbol();
          if( symbol != null ) {
             if( symbol.length() <= 5 ) ret = symbol;
          }
       }
       return ret;
    } else if (columnIndex == 11) {
       return null;//gene.pdbid;
    } else if (columnIndex == 12) {
       return gg.getCommonEc();
    } else if (columnIndex == 13) {
       Cog cog = gg.getCommonCog( geneset.cogmap );
       if( cog != null ) {
          if( cog.name == null ) cog.name = geneset.cogidmap.get( cog.id );
          return cog.name;
       }
       return null;
    } else if (columnIndex == 14) {
       Cog cog = gg.getCommonCog( geneset.cogmap );
       return cog != null ? cog.id : null;
    } else if (columnIndex == 15) {
       Cog cog = gg.getCommonCog( geneset.cogmap );
       return cog != null ? cog.annotation : null;
    } else if (columnIndex == 16) {
       Cog cog = gg.getCommonCog( geneset.cogmap );
       return cog != null ? cog.genesymbol : null;
    } else if (columnIndex == 17) {
       return gg.getCommonCazy( geneset.cazymap );
    } else if (columnIndex == 18) {
       return gg.getSpecies().size();
    } else if (columnIndex == 19) {
       return gg.groupIndex;
    } else if (columnIndex == 20) {
       return gg.getGroupCoverage();
    } else if (columnIndex == 21) {
       return gg.getGroupGeneCount();
    } else if (columnIndex == 22) {
       return null;//gene.proximityGroupPreservation;
    } else if (columnIndex == 23) {
       return gg.getAvgGCPerc();
    } else if (columnIndex == 24) {
       return gg.genes.size();
    } else if (columnIndex == 25) {
       return gg.getGroupCount();
    } else if (columnIndex == 26) {
       return gg.getMaxLength();
    } else if (columnIndex == 27) {
       return geneset.specset.get( gg.getSpecies() );
    } else if (columnIndex == 28) {
       return gg.getMaxCyc();
    } else if (columnIndex == 29) {
       return gg.getGroupCoverage() == 39 && gg.getGroupCount() == 39 ? 0 : -1;
    } else if (columnIndex == 30) {
       return gg.getCommonSignalP();
    } else if (columnIndex == 31) {
       return gg.getCommonTransM();
    } else {
       String spec = geneset.specList.get( columnIndex - 32 );
       Teginfo ret = geneset.getGroupTes( gg, spec );
       return ret;
       //return null;
    }
    //return columnIndex >= 11 ? null : "";
       }
            
       @Override
       public void setValueAt(Object aValue, int rowIndex, int columnIndex) {}
            
       @Override
       public void addTableModelListener(TableModelListener l) {}
            
       @Override
       public void removeTableModelListener(TableModelListener l) {}
    };
    defaultModel = new TableModel() {
       @Override
       public int getRowCount() {
    int gs = geneset.genelist.size();
    return gs;
       }
            
       @Override
       public int getColumnCount() {
    return 26+geneset.specList.size();
       }
            
       @Override
       public String getColumnName(int columnIndex) {
    if (columnIndex == 0) {
       return "Desc";
    } else if (columnIndex == 1) {
       return "Origin";
    } else if (columnIndex == 2) {
       return "Genid";
    } else if (columnIndex == 3) {
       return "Refid";
    } else if (columnIndex == 4) {
       return "Unid";
    } else if (columnIndex == 5) {
       return "Keggid";
    } else if (columnIndex == 6) {
       return "KOid";
    } else if (columnIndex == 7) {
       return "KSymbol";
    } else if (columnIndex == 8) {
       return "Symbol";
    } else if (columnIndex == 9) {
       return "KOname";
    } else if (columnIndex == 10) {
       return "Pdbid";
    } else if (columnIndex == 11) {
       return "ecid";
    } else if (columnIndex == 12) {
       return "COG";
    } else if (columnIndex == 13) {
       return "COG name";
    } else if (columnIndex == 14) {
       return "Present in";
    } else if (columnIndex == 15) {
       return "Group index";
    } else if (columnIndex == 16) {
       return "Group coverage";
    } else if (columnIndex == 17) {
       return "Group size";
    } else if (columnIndex == 18) {
       return "Locprev";
    } else if (columnIndex == 19) {
       return "Avg GC%";
    } else if (columnIndex == 20) {
       return "# of locus";
    } else if (columnIndex == 21) {
       return "# of loc in group";
    } else if (columnIndex == 22) {
       return "max length";
    } else if (columnIndex == 23) {
       return "sharing number";
    } else if (columnIndex == 24) {
       return "# Cyc";
    } else if (columnIndex == 25) {
       return "16S Corr";
    } else {
       return geneset.specList.get( columnIndex - 26 );
    } /*else if (columnIndex == 19) {
       return "T.tSG0";
    } else if (columnIndex == 20) {
       return "T.tJL18";
    } else if (columnIndex == 21) {
       return "T.tHB8";
    } else if (columnIndex == 22) {
       return "T.tHB27";
    } else if (columnIndex == 23) {
       return "T.scotoSA01";
    } else if (columnIndex == 24) {
       return "T.aqua";
    } else if (columnIndex == 25) {
       return "T.eggert";
    } else if (columnIndex == 26) {
       return "T.island";
    } else if (columnIndex == 27) {
       return "T.antan";
    } else if (columnIndex == 28) {
       return "T.scoto346";
    } else if (columnIndex == 29) {
       return "T.scoto1572";
    } else if (columnIndex == 30) {
       return "T.scoto252";
    } else if (columnIndex == 31) {
       return "T.scoto2101";
    } else if (columnIndex == 32) {
       return "T.scoto2127";
    } else if (columnIndex == 33) {
       return "T.scoto4063";
    } else if (columnIndex == 34) {
       return "T.oshimai";
    } else if (columnIndex == 35) {
       return "T.brockianus";
    } else if (columnIndex == 36) {
       return "T.filiformis";
    } else if (columnIndex == 37) {
       return "T.igniterrae";
    } else if (columnIndex == 38) {
       return "T.kawarayensis";
    } else if (columnIndex == 39) {
       return "T.arciformis";
    } else if (columnIndex == 40) {
       return "T.spCCB";
    } else if (columnIndex == 41) {
       return "T.spRLM";
    } else if (columnIndex == 42) {
       return "T.oshimaiJL2";
    } else if (columnIndex == 43) {
       return "MT.silvianus";
    } else if (columnIndex == 44) {
       return "MT.ruber";
    } else if (columnIndex == 45) {
       return "M.hydro";
    } else if (columnIndex == 46) {
       return "O.profu";
    }*
       }
            
       @Override
       public Class<?> getColumnClass(int columnIndex) {
    if( columnIndex == 16 || columnIndex == 19 || columnIndex == 25 )
       return Double.class;
    else if(columnIndex >= 13 && columnIndex <= 24)
       return Integer.class;
    else if (columnIndex >= 26)
       return Teg.class;
    return String.class;
       }
            
       @Override
       public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
       }
            
       @Override
       public Object getValueAt(int rowIndex, int columnIndex) {
    Gene gene = geneset.genelist.get(rowIndex);
    if (columnIndex == 0) {
       GeneGroup gg = gene.getGeneGroup();
       return gg != null ? gene.getGeneGroup().getCommonName() : null;
    } else if (columnIndex == 1) {
       return gene.getSpecies();
    } else if (columnIndex == 2) {
       return gene.genid;
    } else if (columnIndex == 3) {
       return gene.refid;
    } else if (columnIndex == 4) {
       return gene.uniid;
    } else if (columnIndex == 5) {
       return gene.keggid;
    } else if (columnIndex == 6) {
       GeneGroup gg = gene.getGeneGroup();
       return gg != null ? gg.getCommonKO() : null;
    } else if (columnIndex == 7) {
       GeneGroup gg = gene.getGeneGroup();
       return gg != null ? gg.getCommonKSymbol() : null;
    } else if (columnIndex == 8) {
       GeneGroup gg = gene.getGeneGroup();
       return gg != null ? gg.getCommonSymbol() : null; //gene.symbol
    } else if (columnIndex == 9) {
       GeneGroup gg = gene.getGeneGroup();
       return gg != null ? gg.getCommonKOName( geneset.ko2name ) : null;
    } else if (columnIndex == 10) {
       return gene.pdbid;
    } else if (columnIndex == 11) {
       return gene.ecid;
    } else if (columnIndex == 12) {
       Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null;
       if( cog != null ) return cog.id;
       return null;
    } else if (columnIndex == 13) {
       Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null;
       if( cog != null ) return cog.name;
       return null;
    } else if (columnIndex == 14) {
       return gene.getGeneGroup().getSpecies().size();
    } else if (columnIndex == 15) {
       return gene.getGroupIndex();
    } else if (columnIndex == 16) {
       return gene.getGroupCoverage();
    } else if (columnIndex == 17) {
       return gene.getGroupGenCount();
    } else if (columnIndex == 18) {
       return gene.proximityGroupPreservation;
    } else if (columnIndex == 19) {
       return gene.getGCPerc();
    } else if (columnIndex == 20) {
       /*int val = 0;
       for (String str : gene.species.keySet()) {
          val += gene.species.get(str).tset.size();
       }*
       return 1;
    } else if (columnIndex == 21) {
       return gene.getGroupCount();
    } else if (columnIndex == 22) {
       return gene.getMaxLength();
    } else if (columnIndex == 23) {
       GeneGroup gg = gene.getGeneGroup();
       if( gg != null && gg.getSpecies() != null ) {
          return geneset.specset.get( gg.getSpecies() );
       }
       return null;
    } else if (columnIndex == 24) {
       gene.getMaxCyc();
    } else if (columnIndex == 25) {
       return gene.getGroupCoverage() == 35 && gene.getGroupCount() == 35 ? gene.corr16s : -1;
    } else {
       /*String spec = specList.get( columnIndex-26 );
       /*if( spec.contains("timidus") ) {
          System.err.println();
       }*
       //Teginfo set = gene.species.equals(spec) ? gene.teginfo : null;
       if( gene.getSpecies().equals( spec ) ) {
          return gene.tegeval;
       } else {
          return gene.getGeneGroup().species.get( spec );
       }*
               
       return null;
    }
    return columnIndex >= 17 ? null : "";
       }
            
       @Override
       public void setValueAt(Object aValue, int rowIndex, int columnIndex) {}
            
       @Override
       public void addTableModelListener(TableModelListener l) {}
            
       @Override
       public void removeTableModelListener(TableModelListener l) {}
    };
    table.setModel( groupModel );*/
    //table.setModel( defaultModel );

    /*
     * Comparator<Tegeval> wrapMe = new Comparator<Tegeval>() { public int
     * compare(Tegeval o1, Tegeval o2) { return o1.compareTo(o2); } };
     * DefaultRowSorter<TableModel, Integer> rowsorter =
     * (DefaultRowSorter<TableModel,Integer>)table.getRowSorter(); for( int
     * i = 10; i < 23; i++ ) { rowsorter.setComparator(i,
     * NullComparators.atEnd(wrapMe)); }
     */

    /*table.getRowSorter().addRowSorterListener( new RowSorterListener() {
       @Override
       public void sorterChanged(RowSorterEvent e) {
    for (String cstr : geneset.contigmap.keySet()) {
       Sequence c = geneset.contigmap.get(cstr);
       //c.count = 0;
       c.loc = 0.0;
    }
            
    if( table.getModel() == defaultModel ) {
       for (Gene g : geneset.genelist) {
          Tegeval tv = g.tegeval;
             // int first = tv.cont.indexOf('_');
             // int sec = tv.cont.indexOf('_',first+1);
          Sequence cont = tv.getContshort(); // tv.cont.substring(0,sec);
          if( cont != null && geneset.contigmap.containsKey(cont.getName()) ) {
             Sequence c = geneset.contigmap.get(cont.getName());
             //c.count++;
             int val = table.convertRowIndexToView(g.index);
             c.loc += (double) val;
          }
       }
    }
    for( JSplitPane gsplitpane : splitpaneList ) {
       gsplitpane.repaint();
    }
       }
    });*/

    ftable = upper;
    ftable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    /*ftable = new JTable() {
       public String getToolTipText(MouseEvent me) {
    Point p = me.getPoint();
    int r = rowAtPoint(p);
    int c = columnAtPoint(p);
    if (r >= 0 && r < super.getRowCount()) {
       Object ret = super.getValueAt(r, c);
       if (ret != null) {
          return ret.toString(); // super.getToolTipText( me );
       }
    }
    return "";
       }
    };*/

    ContextMenu fpopup = new ContextMenu();
    MenuItem amigo = new MenuItem("Amigo lookup");
    amigo.setOnAction(e -> {
        String go = ftable.getSelectionModel().getSelectedItem().getGo();
        try {
            // GeneSetHead.this.getAppletContext().
            Desktop.getDesktop()
                    .browse(new URI("http://amigo.geneontology.org/cgi-bin/amigo/term_details?term=" + go));
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
    });
    fpopup.getItems().add(amigo);
    MenuItem keggl = new MenuItem("KEGG lookup");
    keggl.setOnAction(e -> {
        String kegg = ftable.getSelectionModel().getSelectedItem().getKegg();
        try {
            Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?rn:" + kegg));
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
    });
    fpopup.getItems().add(keggl);
    MenuItem ecl = new MenuItem("EC lookup");
    ecl.setOnAction(e -> {
        String ec = ftable.getSelectionModel().getSelectedItem().getEc();
        try {
            Desktop.getDesktop().browse(new URI("http://enzyme.expasy.org/EC/" + ec));
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
    });
    fpopup.getItems().add(ecl);
    fpopup.getItems().add(new SeparatorMenuItem());

    MenuItem excelreport = new MenuItem("Excel report");
    excelreport.setOnAction(e -> {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("enzyme");
        int k = 0;
        for (Function f : ftable.getSelectionModel().getSelectedItems()) {
            //String ec = (String)ftable.getValueAt(r, 1);
            //String go = (String)ftable.getValueAt(r, 0);

            //int i = ftable.getSelectionModel().convertRowIndexToModel(r);
            //Function f = geneset.funclist.get(i);
            for (GeneGroup gg : f.getGeneGroups()) {
                for (String spec : gg.getSpecies()) {
                    Teginfo ti = gg.getGenes(spec);

                    Row row = sheet.createRow(k++);
                    Cell ecell = row.createCell(0);
                    ecell.setCellValue("EC:" + f.getEc());
                    Cell ncell = row.createCell(1);
                    ncell.setCellValue(f.getName());
                    Cell spell = row.createCell(2);
                    spell.setCellValue(spec);
                    Cell seqcell = row.createCell(3);
                    seqcell.setCellValue(ti.tset.size());
                }
                /*for( Gene g :gg.genes ) {
                   Row    row = sheet.createRow(k++);
                   Cell    ecell = row.createCell(0);
                   ecell.setCellValue( "EC:"+f.ec );
                   Cell    ncell = row.createCell(1);
                   ncell.setCellValue( f.name );
                   Cell    spell = row.createCell(2);
                   spell.setCellValue( g.getSpecies() );
                   Cell    seqcell = row.createCell(3);
                   seqcell.setCellValue( g.tegeval.getAlignedSequence().toString() );
                }*/
            }
            sheet.createRow(k++);
        }

        try {
            Path tempfile = Files.createTempFile("enzyme", ".xlsx");
            OutputStream os = Files.newOutputStream(tempfile);
            workbook.write(os);
            os.close();

            Desktop.getDesktop().open(tempfile.toFile());
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    });
    fpopup.getItems().add(excelreport);
    ftable.setContextMenu(fpopup);

    ContextMenu popup = new ContextMenu();
    MenuItem splitaction = new MenuItem("Split");
    splitaction.setOnAction(e -> {
        Dialog<Set<GeneGroup>> dialog = new Dialog<>();
        dialog.setResizable(true);

        GridPane grid = new GridPane();
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(20, 20, 10, 10));

        TextField len = new TextField();
        len.setPromptText("0.5");
        TextField id = new TextField();
        id.setPromptText("0.5");

        grid.add(new Label("%Length:"), 0, 0);
        grid.add(len, 1, 0);
        grid.add(new Label("%Identity:"), 0, 1);
        grid.add(id, 1, 1);

        final ListView<GeneGroup> list = new ListView<>();
        list.setPrefWidth(400);
        grid.add(list, 0, 2, 2, 1);

        final GeneGroup gg = table.getSelectionModel().getSelectedItem();
        list.setItems(FXCollections.singletonObservableList(gg));

        Label groupsize = new Label("" + gg.genes.size());
        grid.add(groupsize, 0, 3, 2, 1);

        len.textProperty().addListener((observable, oldValue, newValue) -> {
            if (!newValue.equals(oldValue)) {
                double d = 0;
                try {
                    d = Double.parseDouble(newValue);
                } catch (Exception ex) {
                }

                if (d > 0) {
                    Set<GeneGroup> ggmap = new HashSet<>();
                    Map<String, Integer> blosumMap = JavaFasta.getBlosumMap(false);
                    for (Gene gene : gg.genes) {
                        if (ggmap.stream().flatMap(f -> f.genes.stream()).noneMatch(p -> gene == p)) {
                            Set<Gene> ggset = new HashSet<>();
                            Sequence seq1 = gene.tegeval.getAlignedSequence();
                            for (Gene cgene : gg.genes) {
                                Sequence seq2 = cgene.tegeval.getAlignedSequence();
                                int[] tscore = GeneCompare.blosumValue(seq1, seq1, seq2, blosumMap);
                                int sscore = GeneCompare.blosumValue(seq1, seq2, blosumMap);

                                double dval = (double) (sscore - tscore[1]) / (double) (tscore[0] - tscore[1]);
                                if (dval > d) {
                                    ggset.add(cgene);
                                }
                            }
                            System.err.println(ggset.size());

                            Set<GeneGroup> osubgg = ggmap.stream().filter(f -> {
                                Set<Gene> gs = new HashSet<>(ggset);
                                gs.retainAll(f.genes);
                                return gs.size() > 0;
                            }).collect(Collectors.toSet());
                            GeneGroup subgg;
                            if (osubgg.size() > 0) {
                                Iterator<GeneGroup> git = osubgg.iterator();
                                subgg = git.next();
                                while (git.hasNext()) {
                                    GeneGroup remgg = git.next();
                                    subgg.addGenes(remgg.genes);
                                    ggmap.remove(remgg);
                                }
                            } else {
                                subgg = new GeneGroup();
                                subgg.setCogMap(gg.getCogMap());
                                subgg.setKonameMap(gg.getKonameMap());
                                subgg.setSpecSet(gg.getSpecSet());
                                ggmap.add(subgg);
                            }
                            subgg.addGenes(ggset);
                        }
                    }
                    Set<GeneGroup> sgg = ggmap.stream().collect(Collectors.toSet());

                    List<GeneGroup> lgg = new ArrayList(sgg);
                    list.setItems(FXCollections.observableList(lgg));
                    dialog.setResultConverter(param -> sgg);
                }
            }
        });

        dialog.getDialogPane().setContent(grid);
        dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
        dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
        Optional<Set<GeneGroup>> ogg = dialog.showAndWait();

        ogg.ifPresent(c -> {
            geneset.allgenegroups.remove(gg);
            geneset.allgenegroups.addAll(c);

            Map<String, String> env = new HashMap<>();
            env.put("create", "true");
            try {
                geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env);
                for (Path root : geneset.zipfilesystem.getRootDirectories()) {
                    Files.walk(root).filter(f -> f.toString().startsWith("/aligned"))
                            .filter(f -> f.toString().endsWith(".aa")).filter(f -> {
                                String filename = f.getFileName().toString();
                                return gg.genes.stream().anyMatch(g -> {
                                    String fnid = filename.substring(0, filename.length() - 3);
                                    return g.name.equals(fnid);
                                });
                            }).forEach(p -> {
                                try {
                                    Files.deleteIfExists(p);
                                } catch (IOException e1) {
                                    e1.printStackTrace();
                                }
                            });
                    /*for( Gene g : gg.genes ) {
                       if( g.keggpathway != null ) {
                          String sub = g.keggpathway.substring(0,3);
                          Path subf = root.resolve(sub);
                          if( Files.exists(subf) ) {
                             String[] split = g.keggpathway.split(" ");
                             for( String s : split ) {
                      Path pimg = subf.resolve(s+".png");
                      if( Files.exists(pimg) ) {
                         showKeggPathway( sub, pimg );
                      }
                             }
                          }
                       }
                    }*/
                    final Path p = root.resolve("/aligned");
                    c.stream().forEach(fgg -> {
                        Path np = p.resolve(fgg.genes.iterator().next().getName());
                        try {
                            Writer w = Files.newBufferedWriter(np);
                            fgg.getFasta(w, false);
                            w.close();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    });
                    break;
                }
                geneset.zipfilesystem.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        });
    });
    popup.getItems().add(splitaction);
    MenuItem joinaction = new MenuItem("Join");

    popup.getItems().add(joinaction);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem showkegg = new MenuItem("Show KEGG pathway");
    showkegg.setOnAction(e -> {
        GeneGroup gg = table.getSelectionModel().getSelectedItem();

        Map<String, String> env = new HashMap<>();
        env.put("create", "true");

        /*String uristr = "jar:" + geneset.zippath.toUri();
        URI zipuri = URI.create( uristr /*.replace("file://", "file:")* );
        final List<Path>   lbi = new ArrayList<>();*/
        boolean shown = false;
        try {
            geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env);
            for (Path root : geneset.zipfilesystem.getRootDirectories()) {
                for (Gene g : gg.genes) {
                    if (g.keggpathway != null) {
                        String sub = g.keggpathway.substring(0, 3);
                        Path subf = root.resolve(sub);
                        if (Files.exists(subf)) {
                            String[] split = g.keggpathway.split(" ");
                            for (String s : split) {
                                Path pimg = subf.resolve(s + ".png");
                                if (Files.exists(pimg)) {
                                    showKeggPathway(sub, pimg);
                                    shown = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                break;
            }
            geneset.zipfilesystem.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        if (!shown) {
            for (Gene g : gg.genes) {
                if (g.keggpathway != null) {
                    String[] keggsplit = g.keggpathway.split(";");
                    Arrays.stream(keggsplit).map(s -> s.split(":")[0]).findFirst().ifPresent(c -> {
                        try {
                            Desktop.getDesktop().browse(
                                    URI.create("http://www.genome.jp/dbget-bin/www_bget?map" + c.substring(2)));
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    });
                }
            }
        }
    });
    popup.getItems().add(showkegg);
    MenuItem plasmid = new MenuItem("Plasmid");
    plasmid.setOnAction(e -> {
        Gene g = gtable.getSelectionModel().getSelectedItem();
        Sequence contig = g.tegeval.getContshort();
        String contigstr = contig.toString();
        contig.plasmid = !geneset.plasmids.contains(contigstr);
        if (contig.plasmid)
            geneset.plasmids.add(contigstr);
        else
            geneset.plasmids.remove(contigstr);

        try {
            Map<String, String> env = new HashMap<>();
            env.put("create", "true");
            //Path path = zipfile.toPath();
            String uristr = "jar:" + geneset.zippath.toUri();
            geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ );
            geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env);

            //fs = FileSystems.newFileSystem( uri, env );
            //FileSystem fs = FileSystems.newFileSystem(uri, env);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            for (String contigname : geneset.plasmids) {
                baos.write((contigname + "\n").getBytes());
            }

            Path nf = geneset.zipfilesystem.getPath("/plasmids.txt");
            long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf,
                    StandardCopyOption.REPLACE_EXISTING);
            //System.err.println( "eeerm " + bl );
            geneset.zipfilesystem.close();

            /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE);
            for( String phage : phageset ) {
               writer.write( phage + "\n" );
            }
            writer.close();*/

            //writer.write("hello");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    });
    popup.getItems().add(plasmid);
    MenuItem designate = new MenuItem("Designate");
    designate.setOnAction(e -> {
        SwingUtilities.invokeLater(() -> {
            JComboBox<String> descombo = new JComboBox<>(
                    geneset.deset.toArray(new String[geneset.deset.size()]));
            descombo.setEditable(true);
            JOptionPane.showMessageDialog(GeneSetHead.this, descombo);
            String val = descombo.getSelectedItem().toString();
            geneset.deset.add(val);
            for (Gene g : gtable.getSelectionModel().getSelectedItems()) {
                g.tegeval.designation = val;
                if (g.id != null) {
                    geneset.designations.put(g.id, val);
                } else {
                    System.err.println(g.refid);
                }
                //ta.append( g.tegeval.id + "\n" );
            }

            try {
                Map<String, String> env = new HashMap<String, String>();
                env.put("create", "true");
                //Path path = zipfile.toPath();
                String uristr = "jar:" + geneset.zippath.toUri();
                geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ );
                geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env);

                //fs = FileSystems.newFileSystem( uri, env );
                //FileSystem fs = FileSystems.newFileSystem(uri, env);

                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                for (String geneid : geneset.designations.keySet()) {
                    String design = geneset.designations.get(geneid);
                    baos.write((geneid + "\t" + design + "\n").getBytes());
                }

                Path nf = geneset.zipfilesystem.getPath("/designations.txt");
                long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf,
                        StandardCopyOption.REPLACE_EXISTING);
                //System.err.println( "eeerm " + bl );
                geneset.zipfilesystem.close();

                /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE);
                for( String phage : phageset ) {
                    writer.write( phage + "\n" );
                }
                writer.close();*/

                //writer.write("hello");
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            /*JFrame frame = new JFrame("Ids");
            frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
            frame.setSize(800, 600);
            JTextArea   ta = new JTextArea();
            JScrollPane sp = new JScrollPane( ta );
            frame.add( sp );
                    
            frame.setVisible( true );*/
        });
    });
    popup.getItems().add(designate);
    MenuItem koname = new MenuItem("KO to name");
    koname.setOnAction(e -> {
        Set<String> koids = new HashSet<>();
        for (Gene g : geneset.genelist) {
            if (g.koid != null && g.koid.length() > 0
                    && !(geneset.ko2name != null && geneset.ko2name.containsKey(g.koid)))
                koids.add(g.koid);
        }

        try {
            Map<String, String> ko2name = new HashMap<>();
            int cnt = 0;
            for (String koid : koids) {
                URL url = new URL("http://www.kegg.jp/dbget-bin/www_bget?ko:" + koid);
                InputStream is0 = url.openStream();
                StringBuilder sb = new StringBuilder();
                BufferedReader br0 = new BufferedReader(new InputStreamReader(is0));
                String line0 = br0.readLine();
                while (line0 != null) {
                    sb.append(line0);
                    line0 = br0.readLine();
                }
                br0.close();

                int i = sb.indexOf("<nobr>Name</nobr>");
                if (i != -1) {
                    int k = sb.indexOf(":hidden\">");
                    if (k != -1) {
                        k = sb.indexOf(":hidden\">", k + 9);
                        if (k != -1) {
                            String koname0 = sb.substring(k + 9, sb.indexOf("<br>", k));
                            ko2name.put(koid, koname0);

                            System.err.println(koid + "\t" + koname0);
                        }
                    }
                }

                System.err.println(ko2name.size() + " " + koids.size());
                //if( cnt++ > 20 ) break;
            }

            FileWriter fw = new FileWriter("~ko2name.txt");
            for (String koid : ko2name.keySet()) {
                fw.write(koid + "\t" + ko2name.get(koid) + "\n");
            }
            fw.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    });
    popup.getItems().add(koname);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem genegainloss = new MenuItem("Gene gain/loss");
    genegainloss.setOnAction(e -> {
        Map<Node, List<GeneGroup>> nodeGainMap = new HashMap<>();
        Map<Node, List<GeneGroup>> nodeLossMap = new HashMap<>();

        /*String treestr = "";
        JFileChooser fc = new JFileChooser();
        if( fc.showOpenDialog( applet ) == JFileChooser.APPROVE_OPTION ) {
           File file = fc.getSelectedFile();
           try {
              byte[] bb = Files.readAllBytes( Paths.get(file.toURI()) );
              treestr = new String( bb );
           } catch (IOException e1) {
              e1.printStackTrace();
           }
        }*/

        Serifier serifier = getConcatenatedSequences(false, true);
        String tree = serifier.getFastTree(serifier.lseq, geneset.user, false);

        TreeUtil tu = new TreeUtil();
        Node n = tu.parseTreeRecursive(tree, false);

        TableModel model = new TableModel() {
            @Override
            public int getRowCount() {
                return geneset.getSpecies().size();
            }

            @Override
            public int getColumnCount() {
                return 1;
            }

            @Override
            public String getColumnName(int columnIndex) {
                return null;
            }

            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return String.class;
            }

            @Override
            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return false;
            }

            @Override
            public Object getValueAt(int rowIndex, int columnIndex) {
                return geneset.getSpecies().get(rowIndex);
            }

            @Override
            public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            }

            @Override
            public void addTableModelListener(TableModelListener l) {
            }

            @Override
            public void removeTableModelListener(TableModelListener l) {
            }
        };
        JTable table = new JTable(model);
        table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        JScrollPane scroll = new JScrollPane(table);
        FlowLayout flowlayout = new FlowLayout();
        JComponent c = new JComponent() {
        };
        c.setLayout(flowlayout);
        c.add(scroll);
        JOptionPane.showMessageDialog(comp, c);

        List<String> rootgroup = new ArrayList<>();
        int[] rr = table.getSelectedRows();
        for (int r : rr) {
            rootgroup.add((String) table.getValueAt(r, 0));
        }

        //String[] sobj = {"mt.ruber", "mt.silvanus", "o.profundus", "m.hydrothermalis"};
        Node newnode = tu.getParent(n, new HashSet<>(rootgroup));
        tu.rerootRecur(n, newnode);

        File f = new File("/home/sigmar/gain_list.txt");
        try {
            PrintStream ps = new PrintStream(f);
            geneset.assignGain(newnode, nodeGainMap, ps);
            ps.close();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }

        f = new File("/home/sigmar/loss_list.txt");
        try {
            PrintStream ps = new PrintStream(f);
            geneset.assignLoss(newnode, nodeLossMap, ps);
            ps.close();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
    });
    popup.getItems().add(genegainloss);
    MenuItem concattree = new MenuItem("Concatenate tree");
    concattree.setOnAction(e -> {
        Serifier serifier = getConcatenatedSequences(false, true);

        boolean succ = true;
        if (comp instanceof Applet) {
            try {
                JSObject win = JSObject.getWindow((Applet) comp);
                StringWriter sw = new StringWriter();
                serifier.writeFasta(serifier.lseq, sw, null);
                sw.close();
                win.call("fasttree", new Object[] { sw.toString() });
            } catch (NoSuchMethodError | Exception e1) {
                e1.printStackTrace();
                succ = false;
            }
        }

        /*if( !succ ) {
           String             tree = serifier.getFastTree();
           if( cs.connections().size() > 0 ) {
        cs.sendToAll( tree );
            } else if( Desktop.isDesktopSupported() ) {
        cs.message = tree;
        //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" );
        String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887";
              try {
          Desktop.getDesktop().browse( new URI(uristr) );
              } catch (IOException | URISyntaxException e1) {
          e1.printStackTrace();
              }
            }
           System.err.println( tree );
        }*/
        showAlignedSequences(comp, serifier);
    });
    popup.getItems().add(concattree);
    MenuItem majocons = new MenuItem("Majority rule consensus");
    majocons.setOnAction(e -> {
        Serifier serifier = new Serifier();

        Set<GeneGroup> genegroups = new HashSet<GeneGroup>();
        if (!isGeneview()) {
            genegroups.addAll(table.getSelectionModel().getSelectedItems());
        } else {
            for (Gene gg : gtable.getSelectionModel().getSelectedItems()) {
                genegroups.add(gg.getGeneGroup());
            }
        }

        TreeUtil treeutil = new TreeUtil();
        Map<Set<String>, NodeSet> nmap = new HashMap<Set<String>, NodeSet>();
        for (GeneGroup ggroup : genegroups) {
            //List<Sequence>   seqlist = new ArrayList<Sequence>();

            for (Tegeval tv : ggroup.getTegevals()) {
                String spec = tv.getContshort().getSpec();
                Sequence seq = tv.getAlignedSequence();

                //Sequence seq = new Sequence( spec, null );
                //if( seqstr != null && seqstr.length() > 0 ) seq.append( seqstr );
                serifier.addSequence(seq);
            }

            String tree = serifier.getFastTree(serifier.lseq, geneset.user, false);
            Node n = treeutil.parseTreeRecursive(tree, false);
            treeutil.setLoc(0);
            n.nodeCalcMap(nmap);
        }

        Node guidetree = null;

        /*********************************** Serifier serifier = getConcatenatedSequences();
        String tree = serifier.getFastTree();
        guidetree = treeutil.parseTreeRecursive( tree, false );*/

        Node root = DataTable.majoRuleConsensus(treeutil, nmap, guidetree, false);
        String tree = root.toString();

        if (geneset.cs.connections().size() > 0) {
            geneset.cs.sendToAll(tree);
        } else if (Desktop.isDesktopSupported()) {
            geneset.cs.message = tree;
            //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" );
            String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887";
            try {
                Desktop.getDesktop().browse(new URI(uristr));
            } catch (IOException | URISyntaxException e1) {
                e1.printStackTrace();
            }
        }
    });
    popup.getItems().add(majocons);
    MenuItem addsim = new MenuItem("Add similar");
    addsim.setOnAction(e -> {
        /*int r = table.getSelectedRow();
        int c = table.getSelectedColumn();
                
        Object o = table.getValueAt(r, c);
                
        if (c >= 18) {
           for (int i = 0; i < table.getRowCount(); i++) {
              Object no = table.getValueAt(i, c);
              if (no != null && !table.isRowSelected(i))
          table.addRowSelectionInterval(i, i);
           }
        } else {
           for (int i = 0; i < table.getRowCount(); i++) {
              Object no = table.getValueAt(i, c);
              if (o.equals(no) && !table.isRowSelected(i))
          table.addRowSelectionInterval(i, i);
           }
        }*/
    });
    popup.getItems().add(addsim);
    MenuItem selsim = new MenuItem("Select similar");
    selsim.setOnAction(e -> {
        /*int r = table.getSelectedRow();
        int c = table.getSelectedColumn();
                
        Object o = table.getValueAt(r, c);
                
        table.removeRowSelectionInterval(0, table.getRowCount() - 1);
        if (c >= 18) {
           for (int i = 0; i < table.getRowCount(); i++) {
              Object no = table.getValueAt(i, c);
              if (no != null)
          table.addRowSelectionInterval(i, i);
           }
        } else {
           for (int i = 0; i < table.getRowCount(); i++) {
              Object no = table.getValueAt(i, c);
              if (o.equals(no))
          table.addRowSelectionInterval(i, i);
           }
        }*/
    });
    popup.getItems().add(selsim);
    MenuItem tabtxt = new MenuItem("Table text");
    tabtxt.setOnAction(e -> {
        /*JTextArea ta = new JTextArea();
        ta.setDragEnabled(true);
        JScrollPane scrollpane = new JScrollPane(ta);
                
        StringBuilder sb = new StringBuilder();
        int[] rr = table.getSelectedRows();
        for (int r : rr) {
           for (int c = 0; c < table.getColumnCount() - 1; c++) {
              Object o = table.getValueAt(r, c);
              if (c > 18) {
          if (o != null) {
             String val = o.toString();
             int k = val.indexOf(' ');
             sb.append(val.substring(0, k));
             sb.append("\t" + val.substring(k + 1));
          } else
             sb.append("\t");
              } else {
          if (o != null) {
             sb.append(o.toString());
          }
              }
              sb.append("\t");
           }
           Object o = table.getValueAt(r, table.getColumnCount() - 1);
           if (o != null) {
              String val = o.toString();
              int k = val.indexOf(' ');
              sb.append(val.substring(0, k));
              sb.append("\t" + val.substring(k + 1));
           } else
              sb.append("\t");
           sb.append("\n");
        }
                
        ta.setText(sb.toString());
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(scrollpane);
        frame.setSize(400, 300);
        frame.setVisible(true);*/
    });
    popup.getItems().add(tabtxt);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem ncbil = new MenuItem("NCBI lookup");
    ncbil.setOnAction(e -> {
        /*int r = table.getSelectedRow();
        if (r >= 0) {
           String ref = (String) table.getValueAt(r, 2);
           try {
              Desktop.getDesktop().browse(new URI("http://www.ncbi.nlm.nih.gov/gene?term=" + ref));
           } catch (IOException e1) {
              e1.printStackTrace();
           } catch (URISyntaxException e1) {
              e1.printStackTrace();
           }
        }*/
    });
    popup.getItems().add(ncbil);
    table.setContextMenu(popup);
    gtable.setContextMenu(popup);

    TableColumn<Function, String> gocol = new TableColumn("GO");
    gocol.setCellValueFactory(new PropertyValueFactory<>("go"));
    ftable.getColumns().add(gocol);
    TableColumn<Function, String> ecfcol = new TableColumn("EC");
    ecfcol.setCellValueFactory(new PropertyValueFactory<>("ec"));
    ftable.getColumns().add(ecfcol);
    TableColumn<Function, String> metacyccol = new TableColumn("MetaCyc");
    metacyccol.setCellValueFactory(new PropertyValueFactory<>("metacyc"));
    ftable.getColumns().add(metacyccol);
    TableColumn<Function, String> keggcol = new TableColumn("KEGG");
    keggcol.setCellValueFactory(new PropertyValueFactory<>("kegg"));
    ftable.getColumns().add(keggcol);
    TableColumn<Function, String> funcovcol = new TableColumn("Funciton coverage");
    funcovcol.setCellValueFactory(new PropertyValueFactory<>("speciesCount"));
    ftable.getColumns().add(funcovcol);
    TableColumn<Function, String> numprotcol = new TableColumn("Number of proteins");
    numprotcol.setCellValueFactory(new PropertyValueFactory<>("groupCount"));
    ftable.getColumns().add(numprotcol);

    TableColumn<Function, String> namecol = new TableColumn("Name");
    namecol.setCellValueFactory(new PropertyValueFactory<>("name"));
    ftable.getColumns().add(namecol);
    TableColumn<Function, String> namespacecol = new TableColumn("Namespace");
    namespacecol.setCellValueFactory(new PropertyValueFactory<>("namespace"));
    ftable.getColumns().add(namespacecol);
    TableColumn<Function, String> desccol = new TableColumn("Desc");
    desccol.setCellValueFactory(new PropertyValueFactory<>("desc"));
    ftable.getColumns().add(desccol);

    ftable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

    //ftable.setAutoCreateRowSorter(true);
    /*ftablemodel = new TableModel() {
       @Override
       public int getRowCount() {
    return geneset.funclist.size();
       }
            
       @Override
       public int getColumnCount() {
    return 9;
       }
            
       @Override
       public String getColumnName(int columnIndex) {
    if (columnIndex == 0)
       return "GO";
    else if (columnIndex == 1)
       return "EC";
    else if (columnIndex == 2)
       return "MetaCyc";
    else if (columnIndex == 3)
       return "KEGG";
    else if (columnIndex == 4)
       return "Function coverage";
    else if (columnIndex == 5)
       return "Number of proteins";
    else if (columnIndex == 6)
       return "Name";
    else if (columnIndex == 7)
       return "Namespace";
    else if (columnIndex == 8)
       return "Def";
    return "";
       }
            
       @Override
       public Class<?> getColumnClass(int columnIndex) {
    if( columnIndex == 4 || columnIndex == 5 )
       return Integer.class;
    return String.class;
       }
            
       @Override
       public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
       }
            
       @Override
       public Object getValueAt(int rowIndex, int columnIndex) {
    Function func = geneset.funclist.get(rowIndex);
    if( columnIndex == 0 )
       return func.go;
    else if( columnIndex == 1 )
       return func.ec;
    else if( columnIndex == 2 )
       return func.metacyc;
    else if( columnIndex == 3 )
       return func.kegg;
    else if( columnIndex == 4 )
       return func.getSpeciesCount();
    else if( columnIndex == 5 )
       return table.getModel() == groupModel ? func.getGroupSize() : func.getGeneCount();
    else if( columnIndex == 6 )
       return func.name;
    else if( columnIndex == 7 )
       return func.namespace;
    else if( columnIndex == 8 )
       return func.desc;
    return null;
       }
            
       @Override
       public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
       }
            
       @Override
       public void addTableModelListener(TableModelListener l) {
       }
            
       @Override
       public void removeTableModelListener(TableModelListener l) {
       }
    };
    ftable.setModel( ftablemodel );
    fscrollpane.setViewportView(ftable);*/

    updateFilter(ftable, null);
    updateFilter(table, label);

    combo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
        String sel = newValue;
        filterset.clear();
        if (geneset.pathwaymap.containsKey(sel)) {
            Set<String> enz = geneset.pathwaymap.get(sel);
            for (Function f : geneset.funclist) {
                if (f.getEc() != null && enz.contains(f.getEc())) {
                    filterset.add(f.index);
                }
            }
        }
        updateFilter(ftable, null);
    });

    specombo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
        String sel = newValue;
        genefilterset.clear();
        for (Gene g : geneset.genelist) {
            Tegeval tv = g.tegeval;
            if (sel.equals(tv.teg)) {
                //System.out.println(g.name + " " + sp + " " + sel + "  " + tv.eval);
                genefilterset.add(g.index);
            }
        }
        updateFilter(table, label);
    });

    MenuItem findcon = new MenuItem("Find conserved terms");
    findcon.setOnAction(e -> {
        Set<Integer> res = new HashSet<>();
        for (Function f : geneset.funclist) {
            if (f.getGeneGroups() != null) {
                Set<String> check = new HashSet<>();
                for (GeneGroup g : f.getGeneGroups()) {
                    //Gene g = genemap.get(str);
                    if (g.species != null) {
                        if (check.isEmpty())
                            check.addAll(g.species.keySet());
                        else if (!(check.size() == g.species.size() && check.containsAll(g.species.keySet()))) {
                            check.clear();
                            break;
                        }
                    }
                }
                if (!check.isEmpty())
                    res.add(f.index);
            }
        }
        filterset.clear();
        for (int i : res) {
            filterset.add(i);
        }
        updateFilter(ftable, null);
    });
    fpopup.getItems().add(findcon);
    fpopup.getItems().add(new SeparatorMenuItem());

    MenuItem showgen = new MenuItem("Show genes");
    showgen.setOnAction(e -> {
        genefilterset.clear();
        Set<GeneGroup> sset = new HashSet<>();
        for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) {
            if (!isGeneview()) {
                sset.addAll(f.getGeneGroups());
                /*if( sset != null ) for (GeneGroup gg : sset) {
                   //Gene g = genemap.get(s);
                   genefilterset.add(gg.index);
                }*/
            } else {
                /*Set<Gene> sset = f.getGeneentries();
                for (Gene g : sset) {
                   //Gene g = genemap.get(s);
                   genefilterset.add(g.index);
                }*/
            }
        }

        //int[] rows = sset.stream().mapToInt( gg -> sortedData.indexOf(gg) ).toArray();
        //table.getSelectionModel().selectIndices(rows[0], rows);

        filteredData.setPredicate(genegroup -> {
            return sset.contains(genegroup);
        });
        if (label != null)
            label.setText(
                    table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size());
    });
    fpopup.getItems().add(showgen);

    table.getSelectionModel().selectedItemProperty().addListener(e -> {
        // table.clearSelection();
        tableisselecting = true;
        if (!ftableisselecting && filterset.isEmpty()) {
            //ftable.removeRowSelectionInterval(0, ftable.getRowCount() - 1);
            if (!isGeneview()) {
                for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) {
                    for (Function f : gg.getFunctions()) {
                        try {
                            ftable.getSelectionModel().select(f);
                            //int rf = ftable.convertRowIndexToView(f.index);
                            //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf);
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            } else {
                for (Gene g : gtable.getSelectionModel().getSelectedItems()) {
                    if (g.funcentries != null) {
                        for (Function f : g.funcentries) {
                            //Function f = funcmap.get(go);
                            try {
                                ftable.getSelectionModel().select(f);
                                //int rf = ftable.convertRowIndexToView(f.index);
                                //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf);
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
        tableisselecting = false;
    });

    ftable.setOnKeyPressed(ke -> {
        if (ke.getCode() == KeyCode.ESCAPE) {
            ffilteredData.setPredicate(null);
        }
    });

    table.setOnKeyPressed(ke -> {
        if (ke.getCode() == KeyCode.ESCAPE) {
            GeneGroup selgg = table.getSelectionModel().getSelectedItem();

            List<GeneGroup> sel = new ArrayList<>(filteredData);
            filteredData.setPredicate(null);
            int[] rows = sel.stream().mapToInt(gg -> sortedData.indexOf(gg)).toArray();
            if (rows.length > 0)
                table.getSelectionModel().selectIndices(rows[0], rows);
            if (label != null)
                label.setText(
                        table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size());

            table.scrollTo(selgg);
            //genefilterset.clear();
            //updateFilter(table, genefilter, label);
            //geneset.scrollToSelection( table );
        }
    });

    table.setOnMousePressed(e -> {
        tableisselecting = true;
        if (!ftableisselecting && e.getClickCount() == 2) {
            /*
             * int[] rr = ftable.getSelectedRows(); int minr =
             * ftable.getRowCount(); int maxr = 0; for( int r : rr ) {
             * if( r < minr ) minr = r; if( r > maxr ) maxr = r; }
             * ftable.removeRowSelectionInterval(minr, maxr);
             */
            // ftable.removeRowSelectionInterval(0, filterset.isEmpty()
            // ? ftable.getRowCount()-1 : filterset.size()-1 );

            Set<Function> fset = new HashSet<>();
            filterset.clear();
            if (!isGeneview()) {
                for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) {
                    fset.addAll(gg.getFunctions());
                }
            } else {
                for (Gene g : gtable.getSelectionModel().getSelectedItems()) {
                    if (g.funcentries != null) {
                        for (Function f : g.funcentries) {
                            //Function f = funcmap.get(go);
                            // ftable.getRowSorter().convertRowIndexToView(index)
                            // int rf = ftable.convertRowIndexToView(
                            // f.index );
                            filterset.add(f.index);
                            // ftable.addRowSelectionInterval(rf, rf);
                        }
                    }
                }
            }
            ffilteredData.setPredicate(p -> fset.contains(p));
        }
        tableisselecting = false;
    });

    ftable.setOnMousePressed(e -> {
        ftableisselecting = true;
        Set<GeneGroup> ggset = new HashSet<>();
        if (!tableisselecting && e.getClickCount() == 2) {
            genefilterset.clear();
            for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) {
                if (f.getGeneentries() != null) {
                    if (!isGeneview()) {
                        ggset.addAll(f.getGeneGroups());
                    } else {
                        for (Gene g : f.getGeneentries()) {
                            //Gene g = genemap.get(ref);
                            // int rf = table.convertRowIndexToView( g.index
                            // );
                            // table.addRowSelectionInterval(rf, rf);
                            genefilterset.add(g.index);
                        }
                    }
                }
            }
            filteredData.setPredicate(p -> ggset.contains(p));
        }
        ftableisselecting = false;
    });

    ftable.getSelectionModel().selectedItemProperty().addListener(e -> {
        ftableisselecting = true;
        if (!tableisselecting && genefilterset.isEmpty()) {
            table.getSelectionModel().clearSelection();
            //table.removeRowSelectionInterval(0, table.getRowCount() - 1);
            for (Function f : ftable.getSelectionModel().getSelectedItems()) {
                if (f.getGeneentries() != null) {
                    for (Gene g : f.getGeneentries()) {
                        table.getSelectionModel().select(g.getGeneGroup());

                        //Gene g = genemap.get(ref);
                        /*int i = g.getGroupIndex();
                        if( i >= 0 && i <= table.getItems().size() ) {
                           int rf = table.convertRowIndexToView(i);
                           table.addRowSelectionInterval(rf, rf);
                        }*/
                    }
                }
            }
        }
        ftableisselecting = false;
    });

    textfield.setOnKeyPressed(e -> {
        String text = textfield.getText().toLowerCase();
        if (e.getCode() == KeyCode.ENTER) {
            searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol")
                    ? searchTable(table, text, searchi, e.isAltDown(), 8, 9, 10, 16)
                    : searchTable(table, text, searchi, e.isAltDown(), 0);
        }
    });

    textfield.textProperty().addListener((observable, oldValue, newValue) -> {
        //String text = textfield.getText().toLowerCase();
        String lowerCaseFilter = newValue.toLowerCase();
        Predicate<GeneGroup> p = genegroup -> {
            if (newValue == null || newValue.isEmpty()) {
                return true;
            }

            if (searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol")) {
                if ((genegroup.getCogsymbol() != null
                        && genegroup.getCogsymbol().toLowerCase().contains(lowerCaseFilter))
                        || (genegroup.getSymbol() != null
                                && genegroup.getSymbol().toLowerCase().contains(lowerCaseFilter))
                        || (genegroup.getKoname() != null
                                && genegroup.getKoname().toLowerCase().contains(lowerCaseFilter))) {
                    return true; // Filter matches first name.
                }
            } else {
                if (genegroup.getName().toLowerCase().contains(lowerCaseFilter) || genegroup.genes.stream()
                        .anyMatch(gg -> gg.getName().toLowerCase().contains(lowerCaseFilter))) {
                    return true; // Filter matches first name.
                } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) {
                    return true; // Filter matches last name.
                  }*/
            }
            return false; // Does not match.
        };
        if (filter.isSelected()) {
            filteredData.setPredicate(p);
            if (label != null)
                label.setText(
                        table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size());
            //if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 );
            //else updateFilter(0, text, table, genefilter, genefilterset, label, 0 );
        } else {
            Optional<GeneGroup> ogg = filteredData.stream().filter(p).findFirst();
            if (ogg.isPresent()) {
                GeneGroup gg = ogg.get();
                table.getSelectionModel().select(gg);
                table.scrollTo(gg);
            }
            //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 );
        }
    });
    /*textfield.getDocument().addDocumentListener(new DocumentListener() {
       public void changedUpdate(DocumentEvent e) {
    String text = textfield.getText().toLowerCase();
    if( filter.isSelected() ) {
       if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 );
       else updateFilter(0, text, table, genefilter, genefilterset, label, 0 );
    } else {
       searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 );
    }
       }
            
       public void insertUpdate(DocumentEvent e) {
    String text = textfield.getText().toLowerCase();
    if( filter.isSelected() ) {
       if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(1, text, table, genefilter, genefilterset, label, 8, 9, 10, 16);
       else updateFilter(1, text, table, genefilter, genefilterset, label, 0);
    } else {
       searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 );
    }
       }
            
       public void removeUpdate(DocumentEvent e) {
    String text = textfield.getText().toLowerCase();
    if( filter.isSelected() ) {
       if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(2, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 );
       else updateFilter(2, text, table, genefilter, genefilterset, label, 0);
    } else {
       searchi = searchTable( table, text, 0, false, searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? 7 : 0 );
    }
       }
    });*/

    ftextfield.textProperty().addListener(new javafx.beans.value.ChangeListener<String>() {
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            //String text = textfield.getText().toLowerCase();
            if (filter.isSelected()) {
                ffilteredData.setPredicate(function -> {
                    // If filter text is empty, display all persons.
                    if (newValue == null || newValue.isEmpty()) {
                        return true;
                    }

                    // Compare first name and last name of every person with filter text.
                    String lowerCaseFilter = newValue.toLowerCase();

                    boolean desc = function.getDesc() != null
                            && function.getDesc().toLowerCase().contains(lowerCaseFilter);
                    boolean name = function.getName() != null
                            && function.getName().toLowerCase().contains(lowerCaseFilter);
                    boolean go = function.getGo() != null
                            && function.getGo().toLowerCase().contains(lowerCaseFilter);
                    boolean ec = function.getEc() != null
                            && function.getEc().toLowerCase().contains(lowerCaseFilter);

                    if (desc || name || go || ec) {
                        return true; // Filter matches first name.
                    } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) {
                         return true; // Filter matches last name.
                      }*/
                    return false; // Does not match.
                });
            } else {
                //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 );
            }
        }
    });
    /*ftextfield.getDocument().addDocumentListener(new DocumentListener() {
       public void changedUpdate(DocumentEvent e) {
    updateFilter(0, ftextfield.getText(), ftable, rowfilter, filterset, null, 6);
       }
            
       public void insertUpdate(DocumentEvent e) {
    updateFilter(1, ftextfield.getText(), ftable, rowfilter, filterset, null, 6);
       }
            
       public void removeUpdate(DocumentEvent e) {
    updateFilter(2, ftextfield.getText(), ftable, rowfilter, filterset, null, 6);
       }
    });*/
    MenuItem kegggl = new MenuItem("KEGG gene lookup");
    kegggl.setOnAction(e -> {
        Gene g = gtable.getSelectionModel().getSelectedItem();
        try {
            Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?" + g.keggid));
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
    });
    popup.getItems().add(kegggl);
    MenuItem showgenes = new MenuItem("Show genes with same sharing");
    showgenes.setOnAction(e -> {
        genefilterset.clear();
        GeneGroup gg = table.getSelectionModel().getSelectedItem();
        for (GeneGroup g : geneset.allgenegroups) {
            if (gg.species != null && g.species != null) {
                Set<String> ggset = gg.species.keySet();
                Set<String> gset = g.species.keySet();

                if (gset.size() == ggset.size() && gset.containsAll(ggset)) {
                    genefilterset.add(g.index);
                }
            }
        }
        updateFilter(table, label);
    });
    popup.getItems().add(showgenes);
    MenuItem showshared = new MenuItem("Show shared function");
    showshared.setOnAction(e -> {
        filterset.clear();
        Set<Function> startfunc = new HashSet<Function>();
        if (isGeneview()) {
            for (Gene gg : gtable.getSelectionModel().getSelectedItems()) {
                if (gg.funcentries != null) {
                    if (startfunc.isEmpty()) {
                        startfunc.addAll(gg.funcentries);
                    } else {
                        startfunc.retainAll(gg.funcentries);
                    }
                }
                /*if (startfunc == null)
                startfunc = new HashSet<Function>(gg.funcentries);
                else {
                startfunc.retainAll(gg.funcentries);
                }*/
            }
        } else {
            for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) {
                Set<Function> fset = gg.getFunctions();
                if (startfunc.isEmpty()) {
                    startfunc.addAll(fset);
                } else {
                    startfunc.retainAll(fset);
                }
            }
        }
        for (Function f : geneset.funclist) {
            filterset.add(f.index);
        }
        updateFilter(ftable, null);
    });
    popup.getItems().add(showshared);
    MenuItem showall = new MenuItem("Show all functions");
    showall.setOnAction(e -> {
        filterset.clear();
        Set<Function> startfunc = null;
        if (isGeneview()) {
            for (Gene gg : gtable.getSelectionModel().getSelectedItems()) {
                if (gg.funcentries != null) {
                    for (Function f : gg.funcentries) {
                        filterset.add(f.index);
                    }
                }
            }
        } else {
            for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) {
                Set<Function> fset = gg.getFunctions();
                for (Function f : fset) {
                    filterset.add(f.index);
                }
            }
        }
        updateFilter(ftable, null);
    });
    popup.getItems().add(showall);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem showgenegroups = new MenuItem("Show gene groups in proximity");
    showgenegroups.setOnAction(e -> {
        proxi(filteredData, false);
        updateFilter(table, label);
    });
    popup.getItems().add(showgenegroups);
    MenuItem selgenegroups = new MenuItem("Select gene groups in proximity");
    selgenegroups.setOnAction(e -> {
        genefilterset.clear();
        proxi(filteredData, false);
        for (int i : genefilterset) {
            table.getSelectionModel().select(i);
        }
        //table.tableChanged( new TableModelEvent( table.getModel() ) );
        if (label != null)
            label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size());
        //updateFilter(table, genefilter, label);
    });
    popup.getItems().add(selgenegroups);
    MenuItem selgenes = new MenuItem("Select genes in proximity");
    selgenes.setOnAction(e -> {
        genefilterset.clear();
        proxi(filteredData, true);
        for (int i : genefilterset) {
            table.getSelectionModel().select(i);
        }
        //table.tableChanged( new TableModelEvent( table.getModel() ) );
        if (label != null)
            label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size());
        //updateFilter(table, genefilter, label);
    });
    popup.getItems().add(selgenes);
    MenuItem addgene = new MenuItem("Add gene groups in proximity");
    addgene.setOnAction(e -> {
        proxi(filteredData, false);
        updateFilter(table, label);
    });
    popup.getItems().add(addgene);
    MenuItem remgene = new MenuItem("Remove gene groups in proximity");
    remgene.setOnAction(e -> {
        ObservableList<Integer> rr = table.getSelectionModel().getSelectedIndices();
        if (genefilterset.isEmpty()) {
            Set<Integer> ii = new HashSet<>();
            for (int r : rr)
                ii.add(r);
            for (int i = 0; i < geneset.genelist.size(); i++) {
                if (!ii.contains(i))
                    genefilterset.add(i);
            }
        }
        proxi(filteredData, false);
        updateFilter(table, label);
    });
    popup.getItems().add(remgene);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem showrel = new MenuItem("Show related genes");
    showrel.setOnAction(e -> {
        genefilterset.clear();
        relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false);
        updateFilter(gtable, label);
    });
    popup.getItems().add(showrel);
    MenuItem addrel = new MenuItem("Add related genes");
    addrel.setOnAction(e -> {
        relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false);
        updateFilter(gtable, label);
    });
    popup.getItems().add(addrel);
    MenuItem remrel = new MenuItem("Remove related genes");
    remrel.setOnAction(e -> {
        ObservableList<Integer> rr = gtable.getSelectionModel().getSelectedIndices();
        if (genefilterset.isEmpty()) {
            Set<Integer> ii = new HashSet<>();
            for (int r : rr)
                ii.add(r);
            for (int i = 0; i < geneset.genelist.size(); i++) {
                if (!ii.contains(i))
                    genefilterset.add(i);
            }
        }
        relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, true);
        updateFilter(table, label);
    });
    popup.getItems().add(remrel);
    popup.getItems().add(new SeparatorMenuItem());
    MenuItem showcloserel = new MenuItem("Show closely related genes");
    showcloserel.setOnAction(e -> {
        genefilterset.clear();
        Set<String> ct = new HashSet<>();
        for (Gene gg : gtable.getSelectionModel().getSelectedItems()) {
            // genefilterset.add( gg.index );
            Tegeval tv = gg.tegeval;
            for (Set<String> uset : geneset.iclusterlist) {
                if (uset.contains(tv.name)) {
                    ct.addAll(uset);
                    break;
                }
            }
        }

        for (Gene g : geneset.genelist) {
            Tegeval tv = g.tegeval;
            if (ct.contains(tv.name)) {
                genefilterset.add(g.index);
                break;
            }
        }

        updateFilter(table, label);
    });
    popup.getItems().add(showcloserel);
    MenuItem showdist = new MenuItem("Show distance matrix");
    showdist.setOnAction(e -> {
        JTextArea textarea = new JTextArea();

        try {
            if (clipboardService == null)
                clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService");
            Action action = new CopyAction("Copy", null, "Copy data",
                    new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C));
            textarea.getActionMap().put("copy", action);
            grabFocus = true;
        } catch (Exception ee) {
            ee.printStackTrace();
            System.err.println("Copy services not available.  Copy using 'Ctrl-c'.");
        }
        textarea.setDragEnabled(true);

        JScrollPane scrollpane = new JScrollPane(textarea);
        Gene gg = gtable.getSelectionModel().getSelectedItem();
        if (gg.getSpecies() != null) {
            for (String s : geneset.corrInd) {
                if (s.equals(geneset.corrInd.get(0)))
                    textarea.append(s);
                else
                    textarea.append("\t" + s);
            }

            int i = 0;
            int j = 0;

            int len = 16;
            double[] min = new double[len];
            double[] max = new double[len];

            for (i = 0; i < len; i++) {
                min[i] = Double.MAX_VALUE;
                max[i] = 0.0;
            }

            double[] corrarr = gg.corrarr;
            boolean symmetrize = true;
            if (symmetrize) {
                for (i = 0; i < len; i++) {
                    for (int k = i + 1; k < len; k++) {
                        corrarr[i * len + k] = (corrarr[k * len + i] + corrarr[i * len + k]) / 2.0;
                        corrarr[k * len + i] = corrarr[i * len + k];
                    }
                }
            }

            for (i = 0; i < len; i++) {
                for (int k = 0; k < len; k++) {
                    if (corrarr[i * len + k] < min[i])
                        min[i] = corrarr[i * len + k];
                    if (corrarr[i * len + k] > max[i])
                        max[i] = corrarr[i * len + k];
                }

                /*for (int k = 0; k < len; k++) {
                   corrarr[i * 16 + k] = corrarr[i * 16 + k] - min;
                }*/
            }

            i = 0;
            for (double d : corrarr) {
                double dval = d;
                if (i % len == 0)
                    textarea.append("\n" + dval);
                else
                    textarea.append("\t" + dval);

                i++;
            }
            textarea.append("\n");

            i = 0;
            for (double d : corrarr) {
                double dval = Math.exp((d - min[i / len]) / 20.0 + 1.0) / 100.0; // 0.0 ?
                // 0.0 :
                // 100.0/d;
                if (i % len == 0)
                    textarea.append("\n" + dval);
                else
                    textarea.append("\t" + dval);

                i++;
            }
            double[] newcorr = Arrays.copyOf(corrarr, corrarr.length);
            textarea.append("\nD matrix\n");
            i = 0;
            for (double d : corrarr) {
                double dval = max[i / len] - d;
                newcorr[i] = dval;
                if (i % len == 0)
                    textarea.append("\n" + dval);
                else
                    textarea.append("\t" + dval);

                i++;
            }

            TreeUtil treeutil = new TreeUtil();
            treeutil.neighborJoin(newcorr, geneset.corrInd, null, true, true);
        }

        /*
         * int[] rr = table.getSelectedRows(); for( int r : rr ) { int
         * cr = table.convertRowIndexToModel(r); Gene gg =
         * genelist.get(cr); if( gg.species != null ) { textarea.append(
         * gg.name + ":\n" ); for( String sp : gg.species.keySet() ) {
         * Teginfo stv = gg.species.get( sp ); for( Tegeval tv :
         * stv.tset ) { textarea.append( ">" + tv.cont + " " + tv.teg +
         * " " + tv.eval + "\n" ); for( int i = 0; i < tv.seq.length();
         * i+=70 ) { int end = Math.min(i+70,tv.seq.length());
         * textarea.append( tv.seq.substring(i, end)+"\n" ); //new
         * String( tv.seq, i, Math.min(i+70,tv.seq.length()) )+"\n"); }
         * //textarea.append( ">" + tv.cont + " " + tv.teg + " " +
         * tv.eval + "\n" + tv.seq + "\n" ); } } } }
         */
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(scrollpane);
        frame.setSize(400, 300);
        frame.setVisible(true);
    });

    /*
     * final List<String> reglist = new ArrayList<String>(); final
     * Map<String,Gene> regidx = new TreeMap<String,Gene>();
     * 
     * for( Gene g : geneset.genelist ) { if( g.species != null ) { for( String key
     * : g.species.keySet() ) { Set<Tegeval> stv = g.species.get(key); for(
     * Tegeval tv : stv ) { regidx.put(tv.cont, g); } } } }
     * 
     * for( String key : regidx.keySet() ) { reglist.add(key); }
     * 
     * final JTable contigtable = new JTable();
     * contigtable.setAutoCreateRowSorter( true ); contigtable.setModel( new
     * TableModel() {
     * 
     * @Override public int getRowCount() { return reglist.size(); }
     * 
     * @Override public int getColumnCount() { return 1; }
     * 
     * @Override public String getColumnName(int columnIndex) { return
     * "Region"; }
     * 
     * @Override public Class<?> getColumnClass(int columnIndex) { return
     * String.class; }
     * 
     * @Override public boolean isCellEditable(int rowIndex, int
     * columnIndex) { return false; }
     * 
     * @Override public Object getValueAt(int rowIndex, int columnIndex) {
     * return reglist.get(rowIndex); }
     * 
     * @Override public void setValueAt(Object aValue, int rowIndex, int
     * columnIndex) { // TODO Auto-generated method stub
     * 
     * }
     * 
     * @Override public void addTableModelListener(TableModelListener l) {
     * // TODO Auto-generated method stub
     * 
     * }
     * 
     * @Override public void removeTableModelListener(TableModelListener l)
     * { // TODO Auto-generated method stub
     * 
     * } });
     * 
     * contigtable.getSelectionModel().addListSelectionListener( new
     * ListSelectionListener() {
     * 
     * @Override public void valueChanged(ListSelectionEvent e) {
     * genefilterset.clear(); int[] rr = contigtable.getSelectedRows(); for(
     * int r : rr ) { String s = (String)contigtable.getValueAt(r, 0); Gene
     * g = regidx.get( s );
     * 
     * genefilterset.add( g.index ); updateFilter(table, genefilter, label);
     * //int k = table.convertRowIndexToView(g.index); //if( k != -1
     * )table.addRowSelectionInterval(k, k); } } }); JScrollPane
     * contigscroll = new JScrollPane( contigtable );
     * 
     * JSplitPane mainsplit = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT );
     * mainsplit.setLeftComponent( contigscroll );
     * mainsplit.setRightComponent( splitpane );
     */
}