Example usage for javax.swing JTabbedPane JTabbedPane

List of usage examples for javax.swing JTabbedPane JTabbedPane

Introduction

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

Prototype

public JTabbedPane() 

Source Link

Document

Creates an empty TabbedPane with a default tab placement of JTabbedPane.TOP.

Usage

From source file:edu.ku.brc.specify.tasks.subpane.qb.QueryBldrPane.java

/**
 * @param report//www .  j  a  v  a 2  s  .c o m
 * 
 * Loads and runs the query that acts as data source for report. Then runs report.
 */
public static void runReport(final SpReport report, final String title, final RecordSetIFace rs) {
    //XXX This is now also used to run Workbench reports. Really should extract the general stuff out
    //to a higher level...
    boolean isQueryBuilderRep = report.getReportObject() instanceof SpQuery;
    if (isQueryBuilderRep) {
        UsageTracker.incrUsageCount("QB.RunReport." + report.getQuery().getContextName());
    } else {
        UsageTracker.incrUsageCount("WB.RunReport");
    }
    TableTree tblTree = null;
    Hashtable<String, TableTree> ttHash = null;
    QueryParameterPanel qpp = null;
    if (isQueryBuilderRep) {
        UsageTracker.incrUsageCount("QB.RunReport." + report.getQuery().getContextName());
        QueryTask qt = (QueryTask) ContextMgr.getTaskByClass(QueryTask.class);
        if (qt != null) {
            Pair<TableTree, Hashtable<String, TableTree>> trees = qt.getTableTrees();
            tblTree = trees.getFirst();
            ttHash = trees.getSecond();
        } else {
            log.error("Could not find the Query task when running report " + report.getName());
            //blow up
            throw new RuntimeException("Could not find the Query task when running report " + report.getName());
        }
        qpp = new QueryParameterPanel();
        qpp.setQuery(report.getQuery(), tblTree, ttHash);
    }
    boolean go = true;
    try {
        JasperCompilerRunnable jcr = new JasperCompilerRunnable(null, report.getName(), null);
        jcr.findFiles();
        if (jcr.isCompileRequired()) {
            jcr.get();
        }
        //if isCompileRequired() is still true, then an error probably occurred compiling the report.
        JasperReport jr = !jcr.isCompileRequired() ? (JasperReport) JRLoader.loadObject(jcr.getCompiledFile())
                : null;
        ReportParametersPanel rpp = jr != null ? new ReportParametersPanel(jr, true) : null;
        JRDataSource src = null;
        if (rs == null && ((qpp != null && qpp.getHasPrompts()) || (rpp != null && rpp.getParamCount() > 0))) {
            Component pane = null;
            if (qpp != null && qpp.getHasPrompts() && rpp != null && rpp.getParamCount() > 0) {
                pane = new JTabbedPane();
                ((JTabbedPane) pane).addTab(UIRegistry.getResourceString("QB_REP_RUN_CRITERIA_TAB_TITLE"),
                        new JScrollPane(qpp, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));

                ((JTabbedPane) pane).addTab(UIRegistry.getResourceString("QB_REP_RUN_PARAM_TAB_TITLE"),
                        new JScrollPane(rpp, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
            } else if (qpp != null && qpp.getHasPrompts()) {
                pane = new JScrollPane(qpp, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            } else {
                pane = new JScrollPane(rpp, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            }
            CustomDialog cd = new CustomDialog((Frame) UIRegistry.getTopWindow(),
                    UIRegistry.getResourceString("QB_GET_REPORT_CONTENTS_TITLE"), true,
                    CustomDialog.OKCANCELHELP, pane);
            cd.setHelpContext("RepRunSettings");
            cd.createUI();
            Dimension ps = cd.getPreferredSize();
            ps.setSize(ps.getWidth() * 1.3, ps.getHeight());
            cd.setSize(ps);
            UIHelper.centerAndShow(cd);
            go = !cd.isCancelled();
            cd.dispose();
        }
        if (go) {
            if (isQueryBuilderRep) {
                TableQRI rootQRI = null;
                int cId = report.getQuery().getContextTableId();
                for (TableTree tt : ttHash.values()) {
                    if (cId == tt.getTableInfo().getTableId()) {
                        rootQRI = tt.getTableQRI();
                        break;
                    }
                }
                Vector<QueryFieldPanel> qfps = new Vector<QueryFieldPanel>(qpp.getFields());
                for (int f = 0; f < qpp.getFields(); f++) {
                    qfps.add(qpp.getField(f));
                }

                HQLSpecs sql = null;

                // XXX need to allow modification of SelectDistinct(etc) ???
                //boolean includeRecordIds = true;
                boolean includeRecordIds = !report.getQuery().isSelectDistinct();

                try {
                    //XXX Is it safe to assume that query is not an export query? 
                    sql = QueryBldrPane.buildHQL(rootQRI, !includeRecordIds, qfps, tblTree, rs,
                            report.getQuery().getSearchSynonymy() == null ? false
                                    : report.getQuery().getSearchSynonymy(),
                            false, null);
                } catch (Exception ex) {
                    String msg = StringUtils.isBlank(ex.getLocalizedMessage())
                            ? getResourceString("QB_RUN_ERROR")
                            : ex.getLocalizedMessage();
                    UIRegistry.getStatusBar().setErrorMessage(msg, ex);
                    UIRegistry.writeTimedSimpleGlassPaneMsg(msg, Color.RED);
                    return;
                }
                int smushedCol = (report.getQuery().getSmushed() != null && report.getQuery().getSmushed())
                        ? getSmushedCol(qfps) + 1
                        : -1;
                src = new QBDataSource(sql.getHql(), sql.getArgs(), sql.getSortElements(),
                        getColumnInfo(qfps, true, rootQRI.getTableInfo(), false), includeRecordIds,
                        report.getRepeats(), smushedCol, /*getRecordIdCol(qfps)*/0);
                ((QBDataSource) src).startDataAcquisition();
            } else {
                DataProviderSessionIFace session = DataProviderFactory.getInstance().createSession();
                try {
                    boolean loadedWB = false;
                    if (rs != null && rs.getOnlyItem() != null) {
                        Workbench wb = session.get(Workbench.class, rs.getOnlyItem().getRecordId());
                        if (wb != null) {
                            wb.forceLoad();
                            src = new WorkbenchJRDataSource(wb, true, report.getRepeats());
                            loadedWB = true;
                        }
                    }
                    if (!loadedWB) {
                        UIRegistry.displayErrorDlgLocalized("QueryBldrPane.WB_LOAD_ERROR_FOR_REPORT",
                                rs != null ? rs.getName() : "[" + UIRegistry.getResourceString("NONE") + "]");
                        return;
                    }
                } finally {
                    session.close();
                }
            }

            final CommandAction cmd = new CommandAction(ReportsBaseTask.REPORTS, ReportsBaseTask.PRINT_REPORT,
                    src);
            cmd.setProperty("title", title);
            cmd.setProperty("file", report.getName());
            if (rs == null) {
                cmd.setProperty("skip-parameter-prompt", "true");
            }
            //if isCompileRequired is true then an error probably occurred while compiling,
            //and, if so, it will be caught again and reported in the report results pane.
            if (!jcr.isCompileRequired()) {
                cmd.setProperty("compiled-file", jcr.getCompiledFile());
            }
            if (rpp != null && rpp.getParamCount() > 0) {
                StringBuilder params = new StringBuilder();
                for (int p = 0; p < rpp.getParamCount(); p++) {
                    Pair<String, String> param = rpp.getParam(p);
                    if (StringUtils.isNotBlank(param.getSecond())) {
                        params.append(param.getFirst());
                        params.append("=");
                        params.append(param.getSecond());
                        params.append(";");
                    }
                    cmd.setProperty("params", params.toString());
                }
            }
            CommandDispatcher.dispatch(cmd);
        }
    } catch (JRException ex) {
        UsageTracker.incrHandledUsageCount();
        edu.ku.brc.exceptions.ExceptionTracker.getInstance().capture(QueryBldrPane.class, ex);
        log.error(ex);
        ex.printStackTrace();
    }
}

From source file:com.mirth.connect.client.ui.ChannelPanel.java

private void initComponents() {
    splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    splitPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    splitPane.setOneTouchExpandable(true);

    topPanel = new JPanel();

    List<String> columns = new ArrayList<String>();

    for (ChannelColumnPlugin plugin : LoadedExtensions.getInstance().getChannelColumnPlugins().values()) {
        if (plugin.isDisplayFirst()) {
            columns.add(plugin.getColumnHeader());
        }/*  w  w  w.  j a va  2 s. c om*/
    }

    columns.addAll(Arrays.asList(DEFAULT_COLUMNS));

    for (ChannelColumnPlugin plugin : LoadedExtensions.getInstance().getChannelColumnPlugins().values()) {
        if (!plugin.isDisplayFirst()) {
            columns.add(plugin.getColumnHeader());
        }
    }

    channelTable = new MirthTreeTable("channelPanel", new LinkedHashSet<String>(columns));

    channelTable.setColumnFactory(new ChannelTableColumnFactory());

    ChannelTreeTableModel model = new ChannelTreeTableModel();
    model.setColumnIdentifiers(columns);
    model.setNodeFactory(new DefaultChannelTableNodeFactory());
    channelTable.setTreeTableModel(model);

    channelTable.setDoubleBuffered(true);
    channelTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    channelTable.getTreeSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
    channelTable.setHorizontalScrollEnabled(true);
    channelTable.packTable(UIConstants.COL_MARGIN);
    channelTable.setRowHeight(UIConstants.ROW_HEIGHT);
    channelTable.setOpaque(true);
    channelTable.setRowSelectionAllowed(true);
    channelTable.setSortable(true);
    channelTable.putClientProperty("JTree.lineStyle", "Horizontal");
    channelTable.setAutoCreateColumnsFromModel(false);
    channelTable.setShowGrid(true, true);
    channelTable.restoreColumnPreferences();
    channelTable.setMirthColumnControlEnabled(true);

    channelTable.setDragEnabled(true);
    channelTable.setDropMode(DropMode.ON);
    channelTable.setTransferHandler(new ChannelTableTransferHandler() {
        @Override
        public boolean canImport(TransferSupport support) {
            // Don't allow files to be imported when the save task is enabled 
            if (support.isDataFlavorSupported(DataFlavor.javaFileListFlavor) && isSaveEnabled()) {
                return false;
            }
            return super.canImport(support);
        }

        @Override
        public void importFile(final File file, final boolean showAlerts) {
            try {
                SwingUtilities.invokeAndWait(new Runnable() {
                    @Override
                    public void run() {
                        String fileString = StringUtils.trim(parent.readFileToString(file));

                        try {
                            // If the table is in channel view, don't allow groups to be imported
                            ChannelGroup group = ObjectXMLSerializer.getInstance().deserialize(fileString,
                                    ChannelGroup.class);
                            if (group != null && !((ChannelTreeTableModel) channelTable.getTreeTableModel())
                                    .isGroupModeEnabled()) {
                                return;
                            }
                        } catch (Exception e) {
                        }

                        if (showAlerts && !parent.promptObjectMigration(fileString, "channel or group")) {
                            return;
                        }

                        try {
                            importChannel(
                                    ObjectXMLSerializer.getInstance().deserialize(fileString, Channel.class),
                                    showAlerts);
                        } catch (Exception e) {
                            try {
                                importGroup(ObjectXMLSerializer.getInstance().deserialize(fileString,
                                        ChannelGroup.class), showAlerts, !showAlerts);
                            } catch (Exception e2) {
                                if (showAlerts) {
                                    parent.alertThrowable(parent, e,
                                            "Invalid channel or group file:\n" + e.getMessage());
                                }
                            }
                        }
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public boolean canMoveChannels(List<Channel> channels, int row) {
            if (row >= 0) {
                TreePath path = channelTable.getPathForRow(row);
                if (path != null) {
                    AbstractChannelTableNode node = (AbstractChannelTableNode) path.getLastPathComponent();

                    if (node.isGroupNode()) {
                        Set<String> currentChannelIds = new HashSet<String>();
                        for (Enumeration<? extends MutableTreeTableNode> channelNodes = node
                                .children(); channelNodes.hasMoreElements();) {
                            currentChannelIds.add(((AbstractChannelTableNode) channelNodes.nextElement())
                                    .getChannelStatus().getChannel().getId());
                        }

                        for (Iterator<Channel> it = channels.iterator(); it.hasNext();) {
                            if (currentChannelIds.contains(it.next().getId())) {
                                it.remove();
                            }
                        }

                        return !channels.isEmpty();
                    }
                }
            }

            return false;
        }

        @Override
        public boolean moveChannels(List<Channel> channels, int row) {
            if (row >= 0) {
                TreePath path = channelTable.getPathForRow(row);
                if (path != null) {
                    AbstractChannelTableNode node = (AbstractChannelTableNode) path.getLastPathComponent();

                    if (node.isGroupNode()) {
                        Set<String> currentChannelIds = new HashSet<String>();
                        for (Enumeration<? extends MutableTreeTableNode> channelNodes = node
                                .children(); channelNodes.hasMoreElements();) {
                            currentChannelIds.add(((AbstractChannelTableNode) channelNodes.nextElement())
                                    .getChannelStatus().getChannel().getId());
                        }

                        for (Iterator<Channel> it = channels.iterator(); it.hasNext();) {
                            if (currentChannelIds.contains(it.next().getId())) {
                                it.remove();
                            }
                        }

                        if (!channels.isEmpty()) {
                            ListSelectionListener[] listeners = ((DefaultListSelectionModel) channelTable
                                    .getSelectionModel()).getListSelectionListeners();
                            for (ListSelectionListener listener : listeners) {
                                channelTable.getSelectionModel().removeListSelectionListener(listener);
                            }

                            try {
                                ChannelTreeTableModel model = (ChannelTreeTableModel) channelTable
                                        .getTreeTableModel();
                                Set<String> channelIds = new HashSet<String>();
                                for (Channel channel : channels) {
                                    model.addChannelToGroup(node, channel.getId());
                                    channelIds.add(channel.getId());
                                }

                                List<TreePath> selectionPaths = new ArrayList<TreePath>();
                                for (Enumeration<? extends MutableTreeTableNode> channelNodes = node
                                        .children(); channelNodes.hasMoreElements();) {
                                    AbstractChannelTableNode channelNode = (AbstractChannelTableNode) channelNodes
                                            .nextElement();
                                    if (channelIds
                                            .contains(channelNode.getChannelStatus().getChannel().getId())) {
                                        selectionPaths.add(new TreePath(
                                                new Object[] { model.getRoot(), node, channelNode }));
                                    }
                                }

                                parent.setSaveEnabled(true);
                                channelTable.expandPath(new TreePath(
                                        new Object[] { channelTable.getTreeTableModel().getRoot(), node }));
                                channelTable.getTreeSelectionModel().setSelectionPaths(
                                        selectionPaths.toArray(new TreePath[selectionPaths.size()]));
                                return true;
                            } finally {
                                for (ListSelectionListener listener : listeners) {
                                    channelTable.getSelectionModel().addListSelectionListener(listener);
                                }
                            }
                        }
                    }
                }
            }

            return false;
        }
    });

    channelTable.setTreeCellRenderer(new DefaultTreeCellRenderer() {
        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
                boolean leaf, int row, boolean hasFocus) {
            JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row,
                    hasFocus);

            TreePath path = channelTable.getPathForRow(row);
            if (path != null && ((AbstractChannelTableNode) path.getLastPathComponent()).isGroupNode()) {
                setIcon(UIConstants.ICON_GROUP);
            }

            return label;
        }
    });
    channelTable.setLeafIcon(UIConstants.ICON_CHANNEL);
    channelTable.setOpenIcon(UIConstants.ICON_GROUP);
    channelTable.setClosedIcon(UIConstants.ICON_GROUP);

    channelTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent evt) {
            channelListSelected(evt);
        }
    });

    // listen for trigger button and double click to edit channel.
    channelTable.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent evt) {
            checkSelectionAndPopupMenu(evt);
        }

        @Override
        public void mouseReleased(MouseEvent evt) {
            checkSelectionAndPopupMenu(evt);
        }

        @Override
        public void mouseClicked(MouseEvent evt) {
            int row = channelTable.rowAtPoint(new Point(evt.getX(), evt.getY()));
            if (row == -1) {
                return;
            }

            if (evt.getClickCount() >= 2 && channelTable.getSelectedRowCount() == 1
                    && channelTable.getSelectedRow() == row) {
                AbstractChannelTableNode node = (AbstractChannelTableNode) channelTable.getPathForRow(row)
                        .getLastPathComponent();
                if (node.isGroupNode()) {
                    doEditGroupDetails();
                } else {
                    doEditChannel();
                }
            }
        }
    });

    // Key Listener trigger for DEL
    channelTable.addKeyListener(new KeyListener() {
        @Override
        public void keyPressed(KeyEvent evt) {
            if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
                if (channelTable.getSelectedModelRows().length == 0) {
                    return;
                }

                boolean allGroups = true;
                boolean allChannels = true;
                for (int row : channelTable.getSelectedModelRows()) {
                    AbstractChannelTableNode node = (AbstractChannelTableNode) channelTable.getPathForRow(row)
                            .getLastPathComponent();
                    if (node.isGroupNode()) {
                        allChannels = false;
                    } else {
                        allGroups = false;
                    }
                }

                if (allChannels) {
                    doDeleteChannel();
                } else if (allGroups) {
                    doDeleteGroup();
                }
            }
        }

        @Override
        public void keyReleased(KeyEvent evt) {
        }

        @Override
        public void keyTyped(KeyEvent evt) {
        }
    });

    // MIRTH-2301
    // Since we are using addHighlighter here instead of using setHighlighters, we need to remove the old ones first.
    channelTable.setHighlighters();

    // Set highlighter.
    if (Preferences.userNodeForPackage(Mirth.class).getBoolean("highlightRows", true)) {
        Highlighter highlighter = HighlighterFactory.createAlternateStriping(UIConstants.HIGHLIGHTER_COLOR,
                UIConstants.BACKGROUND_COLOR);
        channelTable.addHighlighter(highlighter);
    }

    HighlightPredicate revisionDeltaHighlighterPredicate = new HighlightPredicate() {
        @Override
        public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
            if (adapter.column == channelTable.convertColumnIndexToView(
                    channelTable.getColumnExt(DEPLOYED_REVISION_DELTA_COLUMN_NAME).getModelIndex())) {
                if (channelTable.getValueAt(adapter.row, adapter.column) != null
                        && ((Integer) channelTable.getValueAt(adapter.row, adapter.column)).intValue() > 0) {
                    return true;
                }

                if (channelStatuses != null) {
                    String channelId = (String) channelTable.getModel()
                            .getValueAt(channelTable.convertRowIndexToModel(adapter.row), ID_COLUMN_NUMBER);
                    ChannelStatus status = channelStatuses.get(channelId);
                    if (status != null && status.isCodeTemplatesChanged()) {
                        return true;
                    }
                }
            }
            return false;
        }
    };
    channelTable.addHighlighter(new ColorHighlighter(revisionDeltaHighlighterPredicate, new Color(255, 204, 0),
            Color.BLACK, new Color(255, 204, 0), Color.BLACK));

    HighlightPredicate lastDeployedHighlighterPredicate = new HighlightPredicate() {
        @Override
        public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
            if (adapter.column == channelTable.convertColumnIndexToView(
                    channelTable.getColumnExt(LAST_DEPLOYED_COLUMN_NAME).getModelIndex())) {
                Calendar checkAfter = Calendar.getInstance();
                checkAfter.add(Calendar.MINUTE, -2);

                if (channelTable.getValueAt(adapter.row, adapter.column) != null
                        && ((Calendar) channelTable.getValueAt(adapter.row, adapter.column))
                                .after(checkAfter)) {
                    return true;
                }
            }
            return false;
        }
    };
    channelTable.addHighlighter(new ColorHighlighter(lastDeployedHighlighterPredicate, new Color(240, 230, 140),
            Color.BLACK, new Color(240, 230, 140), Color.BLACK));

    channelScrollPane = new JScrollPane(channelTable);
    channelScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

    filterPanel = new JPanel();
    filterPanel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, new Color(164, 164, 164)));

    tagsFilterButton = new IconButton();
    tagsFilterButton
            .setIcon(new ImageIcon(getClass().getResource("/com/mirth/connect/client/ui/images/wrench.png")));
    tagsFilterButton.setToolTipText("Show Channel Filter");
    tagsFilterButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            tagsFilterButtonActionPerformed();
        }
    });

    tagsLabel = new JLabel();

    ButtonGroup tableModeButtonGroup = new ButtonGroup();

    tableModeGroupsButton = new IconToggleButton(UIConstants.ICON_GROUP);
    tableModeGroupsButton.setToolTipText("Groups");
    tableModeGroupsButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            if (!switchTableMode(true)) {
                tableModeChannelsButton.setSelected(true);
            }
        }
    });
    tableModeButtonGroup.add(tableModeGroupsButton);

    tableModeChannelsButton = new IconToggleButton(UIConstants.ICON_CHANNEL);
    tableModeChannelsButton.setToolTipText("Channels");
    tableModeChannelsButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            if (!switchTableMode(false)) {
                tableModeGroupsButton.setSelected(true);
            }
        }
    });
    tableModeButtonGroup.add(tableModeChannelsButton);

    tabPane = new JTabbedPane();

    splitPane.setTopComponent(topPanel);
    splitPane.setBottomComponent(tabPane);
}

From source file:MiGA.StatsSelection.java

public StatsSelection(final String[] organisms, final boolean flag) {

    setTitle("MiGA");
    setSize(800, 600);/*from w  ww. j  a va2  s  .  c o  m*/
    setLocationRelativeTo(null);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Image im = Toolkit.getDefaultToolkit().getImage("ssr.png");
    this.setIconImage(im);

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    }

    countmono = new ArrayList<Integer>();
    countdi = new ArrayList<Integer>();
    counttri = new ArrayList<Integer>();
    counttetra = new ArrayList<Integer>();
    countpenta = new ArrayList<Integer>();
    counthexa = new ArrayList<Integer>();
    countmonore = new ArrayList<Integer>();
    countdire = new ArrayList<Integer>();
    counttrire = new ArrayList<Integer>();
    counttetrare = new ArrayList<Integer>();
    countpentare = new ArrayList<Integer>();
    counthexare = new ArrayList<Integer>();
    Amono = new ArrayList<Integer>();
    Tmono = new ArrayList<Integer>();
    Gmono = new ArrayList<Integer>();
    Cmono = new ArrayList<Integer>();
    Adi = new ArrayList<Integer>();
    Tdi = new ArrayList<Integer>();
    Gdi = new ArrayList<Integer>();
    Cdi = new ArrayList<Integer>();
    Atri = new ArrayList<Integer>();
    Ttri = new ArrayList<Integer>();
    Gtri = new ArrayList<Integer>();
    Ctri = new ArrayList<Integer>();
    Atetra = new ArrayList<Integer>();
    Ttetra = new ArrayList<Integer>();
    Gtetra = new ArrayList<Integer>();
    Ctetra = new ArrayList<Integer>();
    Apenta = new ArrayList<Integer>();
    Tpenta = new ArrayList<Integer>();
    Gpenta = new ArrayList<Integer>();
    Cpenta = new ArrayList<Integer>();
    Ahexa = new ArrayList<Integer>();
    Thexa = new ArrayList<Integer>();
    Ghexa = new ArrayList<Integer>();
    Chexa = new ArrayList<Integer>();

    for (int i = 0; i < organisms.length; i++) {
        countmono.add(0);
        countdi.add(0);
        counttri.add(0);
        counttetra.add(0);
        countpenta.add(0);
        counthexa.add(0);
        countmonore.add(0);
        countdire.add(0);
        counttrire.add(0);
        counttetrare.add(0);
        countpentare.add(0);
        counthexare.add(0);
        Amono.add(0);
        Tmono.add(0);
        Gmono.add(0);
        Cmono.add(0);
        Adi.add(0);
        Tdi.add(0);
        Gdi.add(0);
        Cdi.add(0);
        Atri.add(0);
        Ttri.add(0);
        Gtri.add(0);
        Ctri.add(0);
        Atetra.add(0);
        Ttetra.add(0);
        Gtetra.add(0);
        Ctetra.add(0);
        Apenta.add(0);
        Tpenta.add(0);
        Gpenta.add(0);
        Cpenta.add(0);
        Ahexa.add(0);
        Thexa.add(0);
        Ghexa.add(0);
        Chexa.add(0);
    }

    lab = new JLabel(
            "<html><b><p>To retrieve the sequence you want</p><p>simply copy and paste in the fields below</p><p>the data you were given in your result's file</p></b></html>");

    startlab = new JLabel("Start:");
    endlab = new JLabel("End:");
    titlelab = new JLabel("Chromosome or field:");

    startnum = new JTextField();
    startnum.setColumns(5);
    endnum = new JTextField();
    endnum.setColumns(5);
    titlef = new JTextField();
    titlef.setColumns(30);

    flankst = new JLabel("Flanking region before: ");
    flankst.setEnabled(false);
    flankst.setVisible(false);
    flankend = new JLabel("Flanking region after: ");
    flankend.setEnabled(false);
    flankend.setVisible(false);

    flankstn = new JTextField();
    flankstn.setColumns(5);
    flankstn.setEnabled(false);
    flankstn.setVisible(false);

    flankendn = new JTextField();
    flankendn.setColumns(5);
    flankendn.setEnabled(false);
    flankendn.setVisible(false);

    result = new JTextArea("", 6, 90);
    result.setText(" ");
    result.setEditable(false);
    result.setLineWrap(true);
    result.setAutoscrolls(true);
    sbrText = new JScrollPane(result);
    sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    flk = new JCheckBox("Flanking Regions");
    flk.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            if (flk.isSelected()) {
                flankst.setEnabled(true);
                flankst.setVisible(true);
                flankend.setEnabled(true);
                flankend.setVisible(true);
                flankstn.setEnabled(true);
                flankstn.setVisible(true);
                flankendn.setEnabled(true);
                flankendn.setVisible(true);

            }
            if (!flk.isSelected()) {
                flankst.setEnabled(false);
                flankst.setVisible(false);
                flankend.setEnabled(false);
                flankend.setVisible(false);
                flankstn.setEnabled(false);
                flankstn.setVisible(false);
                flankendn.setEnabled(false);
                flankendn.setVisible(false);

            }
        }
    });

    retrieve = new JButton("Retrieve");
    retrieve.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            int start = 0;
            int end = 0;

            BufferedReader in = null;
            String location = "";
            String newlocation = "";
            String bufferpre = "";
            String bufferpost = "";
            String pre = "";
            String post = "";
            String mid = "";
            try {
                String[] locationarray = titlef.getText().split("data/");
                location = locationarray[0] + locationarray[1];
                newlocation = "";
                if (location.contains("local")) {
                    in = new BufferedReader(new FileReader(location + ".txt"));
                } else if (location.contains("organisms")) {
                    String[] loc = location.split("/");
                    try {
                        if (CheckForKaryotype(loc[1])) {
                            newlocation = loc[0] + "/" + loc[1] + "/chrom-" + loc[2] + "-slices.txt";
                        } else {
                            newlocation = loc[0] + "/" + loc[1] + "/slice-" + loc[2] + ".txt";
                        }
                    } catch (SQLException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    in = new BufferedReader(new FileReader(newlocation));
                }
            } catch (FileNotFoundException ex) {
                msg.showMessageDialog(paneldown, "Wrong field", "Error", JOptionPane.ERROR_MESSAGE);
            }
            int rest = Integer.parseInt(startnum.getText()) % 20000;
            int lines = Integer.parseInt(startnum.getText()) / 20000;
            lines++;
            String buffer1 = "";

            for (int c = 0; c < lines; c++) {
                try {
                    buffer1 = in.readLine();
                } catch (IOException ex) {
                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            try {
                in.close();
            } catch (IOException ex) {
                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (flk.isSelected()) {
                boolean tfs = false, tfe = false;
                int fs = 0, fe = 0;
                try {
                    fs = Integer.parseInt(flankstn.getText());
                    tfs = true;
                } catch (NumberFormatException ex) {
                    tfs = false;
                }

                try {
                    fe = Integer.parseInt(flankendn.getText());
                    tfe = true;
                } catch (NumberFormatException ex) {
                    tfe = false;
                }
                if (tfs && tfe) {

                    start = rest - Integer.parseInt(flankstn.getText());
                    end = rest + Integer.parseInt(endnum.getText()) - Integer.parseInt(startnum.getText())
                            + Integer.parseInt(flankendn.getText());
                    try {
                        in = new BufferedReader(new FileReader(newlocation));
                    } catch (FileNotFoundException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    if (start < 0 && lines == 1) {
                        start = 0;
                    } else if (start < 0 && lines > 1) {
                        for (int j = 0; j < lines - 1; j++) {
                            try {
                                bufferpre = in.readLine();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        pre = bufferpre.substring(20000 + start);
                        mid = buffer1.substring(0, end);
                        try {
                            in.close();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    int cl = 0;
                    try {
                        cl = countlines(newlocation);
                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    try {
                        in = new BufferedReader(new FileReader(newlocation));
                    } catch (FileNotFoundException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    if (end > 20000 && lines == cl - 1) {
                        if (end - 20000 >= rest) {
                            end = rest;
                            mid = buffer1.substring(start);
                            post = bufferpost;
                        } else {
                            for (int j = 0; j < lines - 1; j++) {
                                try {
                                    bufferpost = in.readLine();
                                } catch (IOException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                            }
                            mid = buffer1.substring(start);
                            post = bufferpre.substring(0, end - 20000);
                            try {
                                in.close();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }

                    } else if (end > 20000 && lines < cl - 1) {
                        for (int j = 0; j < lines + 1; j++) {
                            try {
                                bufferpost = in.readLine();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        mid = buffer1.substring(start);
                        post = bufferpost.substring(0, end - 20000);
                        try {
                            in.close();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }

                    if (start >= 0 && (end <= 20000 || end <= rest)) {
                        mid = buffer1.substring(start, end);
                    }

                } else {
                    if (!tfs) {
                        msg.showMessageDialog(paneldown,
                                "Flanking region start is empty.\nFill in the gap or uncheck the\nflanking regions checkbox",
                                "Error", JOptionPane.ERROR_MESSAGE);
                    }
                    if (!tfe) {
                        msg.showMessageDialog(paneldown,
                                "Flanking region end is empty.\nFill in the gap or uncheck the\nflanking regions checkbox",
                                "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                //
            }
            if (!flk.isSelected()) {
                start = rest;
                end = rest + Integer.parseInt(endnum.getText()) - Integer.parseInt(startnum.getText());
                try {
                    in = new BufferedReader(new FileReader(newlocation));
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (start < 0 && lines == 1) {
                    start = 0;
                } else if (start < 0 && lines > 1) {
                    for (int j = 0; j < lines - 1; j++) {
                        try {
                            bufferpre = in.readLine();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    pre = bufferpre.substring(start);
                    mid = buffer1.substring(0, end);
                    try {
                        in.close();
                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                int cl = 0;
                try {
                    cl = countlines(newlocation);
                } catch (IOException ex) {
                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                }
                try {
                    in = new BufferedReader(new FileReader(newlocation));
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (end > 20000 && lines == cl - 1) {
                    if (end - 20000 >= rest) {
                        end = rest;
                        mid = buffer1.substring(start);
                        post = bufferpost;
                    } else {
                        for (int j = 0; j < lines - 1; j++) {
                            try {
                                bufferpost = in.readLine();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        mid = buffer1.substring(start);
                        post = bufferpre.substring(0, end - 20000);
                        try {
                            in.close();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }

                } else if (end > 20000 && lines < cl - 1) {
                    for (int j = 0; j < lines + 1; j++) {
                        try {
                            bufferpost = in.readLine();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    mid = buffer1.substring(start);
                    post = bufferpost.substring(0, end - 20000);
                    try {
                        in.close();
                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

                if (start >= 0 && (end <= 20000 || end <= rest)) {
                    mid = buffer1.substring(start, end);
                }
            }

            result.setText(pre + mid + post);
        }
    });

    mono = new JCheckBox("Mononucleotide");
    di = new JCheckBox("Dinucleotide");
    tri = new JCheckBox("Trinucleotide");
    tetra = new JCheckBox("Tetranucleotide");
    penta = new JCheckBox("Pentanucleotide");
    hexa = new JCheckBox("Hexanucleotide");

    SSR = new ArrayList<String>();
    repeats = new ArrayList<Integer>();
    EndOfSsr = new ArrayList<Integer>();
    start = new ArrayList<Integer>();

    select = new JLabel("Select type: ");

    minimumssrlen = new JLabel("Minimum SSR length(bp)");
    minimumssrlen.setVisible(false);
    score = new JTextField();
    score.setColumns(5);
    score.setVisible(false);

    msg = new JOptionPane();

    gapmax = new JLabel("Maximum Mismatch length for Imperfect SSRs(bp)");
    gapmax.setVisible(false);
    max = new JTextField();
    max.setColumns(5);
    max.setVisible(false);

    minlenpregap = new JLabel("Minimum SSR length before given Mismatch length(bp)");
    minlenpregap.setVisible(false);
    minpregap = new JTextField();
    minpregap.setColumns(5);
    minpregap.setVisible(false);

    gapcomp = new JLabel("Maximum Inter-repeat R for Compound SSRs(bp)");
    gapcomp.setVisible(false);
    maxgapcomp = new JTextField();
    maxgapcomp.setColumns(5);
    maxgapcomp.setVisible(false);

    box1 = new JCheckBox("Perfect");
    box2 = new JCheckBox("Imperfect");
    box3 = new JCheckBox("Compound");
    com = new JCheckBox("Perfect Compound");
    incom = new JCheckBox("Imperfect Compound");

    box1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            if (box2.isSelected() || box3.isSelected()) {
                if (box1.isSelected()) {
                    std.setEnabled(true);
                    no_st.setEnabled(true);
                    part_st.setEnabled(true);
                    full_st.setEnabled(true);

                    if (!box3.isSelected()) {
                        minimumssrlen.setVisible(true);
                        score.setVisible(true);
                    }
                }
                if (!box1.isSelected()) {
                    std.setEnabled(false);
                    no_st.setEnabled(false);
                    part_st.setEnabled(false);
                    full_st.setEnabled(false);
                    if (!box3.isSelected()) {
                        minimumssrlen.setVisible(false);
                        score.setVisible(false);
                    }
                }
            } else {
                if (box1.isSelected()) {
                    std.setEnabled(true);
                    no_st.setEnabled(true);
                    part_st.setEnabled(true);
                    full_st.setEnabled(true);
                    panel2.setVisible(true);
                    minimumssrlen.setVisible(true);
                    score.setVisible(true);
                }
                if (!box1.isSelected()) {
                    std.setEnabled(false);
                    no_st.setEnabled(false);
                    part_st.setEnabled(false);
                    full_st.setEnabled(false);
                    panel2.setVisible(false);
                    minimumssrlen.setVisible(false);
                    score.setVisible(false);
                }

            }
        }
    });

    box2.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            if (box1.isSelected() || box3.isSelected()) {
                if (box2.isSelected()) {
                    gapmax.setVisible(true);
                    max.setVisible(true);

                    minlenpregap.setVisible(true);
                    minpregap.setVisible(true);
                }
                if (!box2.isSelected()) {

                    gapmax.setVisible(false);
                    max.setVisible(false);

                    minlenpregap.setVisible(false);
                    minpregap.setVisible(false);

                }
            } else {
                if (box2.isSelected()) {
                    panel2.setVisible(true);
                    gapmax.setVisible(true);
                    max.setVisible(true);

                    minlenpregap.setVisible(true);
                    minpregap.setVisible(true);
                }
                if (!box2.isSelected()) {
                    panel2.setVisible(false);
                    gapmax.setVisible(false);
                    max.setVisible(false);

                    minlenpregap.setVisible(false);
                    minpregap.setVisible(false);
                }
            }
        }
    });

    box3.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            if (box1.isSelected() || box2.isSelected()) {
                if (box3.isSelected()) {
                    paneldownleft.setVisible(true);
                    if (!box1.isSelected()) {
                        minimumssrlen.setVisible(true);
                        score.setVisible(true);
                    }
                    gapcomp.setVisible(true);
                    maxgapcomp.setVisible(true);
                    com.setVisible(true);
                    incom.setVisible(true);

                }
                if (!box3.isSelected()) {
                    paneldownleft.setVisible(false);
                    gapcomp.setVisible(false);
                    maxgapcomp.setVisible(false);
                    if (!box1.isSelected()) {
                        minimumssrlen.setVisible(false);
                        score.setVisible(false);
                        com.setVisible(false);
                        incom.setVisible(false);
                    }
                }
            } else {
                if (box3.isSelected()) {
                    paneldownleft.setVisible(true);
                    panel2.setVisible(true);
                    minimumssrlen.setVisible(true);
                    score.setVisible(true);

                    gapcomp.setVisible(true);
                    maxgapcomp.setVisible(true);
                    com.setVisible(true);
                    incom.setVisible(true);
                }
                if (!box3.isSelected()) {
                    paneldownleft.setVisible(false);
                    panel2.setVisible(false);
                    minimumssrlen.setVisible(false);
                    score.setVisible(false);
                    gapcomp.setVisible(false);
                    maxgapcomp.setVisible(false);
                    com.setVisible(false);
                    incom.setVisible(false);
                }
            }
        }
    });
    /*
    incom.addActionListener(new ActionListener() {
            
    public void actionPerformed(ActionEvent e) {
    if (incom.isSelected()) {
    if (!box2.isSelected()) {
    gapmax.setVisible(true);
    max.setVisible(true);
            
    minlenpregap.setVisible(true);
    minpregap.setVisible(true);
    }
    }
    if (!incom.isSelected()) {
    if (!box2.isSelected()) {
    gapmax.setVisible(false);
    max.setVisible(false);
            
    minlenpregap.setVisible(false);
    minpregap.setVisible(false);
    }
    }
    }
    });*/

    std = new JPanel();
    no_st = new JRadioButton("Not Standardized");
    part_st = new JRadioButton("Partial Standardized");
    full_st = new JRadioButton("Full Standardized");
    no_st.setSelected(true);
    no_st.setEnabled(false);
    part_st.setEnabled(false);
    full_st.setEnabled(false);

    standard = new ButtonGroup();
    standard.add(no_st);
    standard.add(part_st);
    standard.add(full_st);

    show = new JButton("Run");
    show.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            if (!box1.isSelected() && !box2.isSelected() && !box3.isSelected()) {
                msg.showMessageDialog(paneldown, "Please select a type", "Error", JOptionPane.ERROR_MESSAGE);
            }
            for (int i = 0; i < organisms.length; i++) {
                File f = new File("organisms/" + organisms[i] + "/stats/");
                if (f.exists()) {
                    f.delete();
                }
            }

            calendar = Calendar.getInstance();
            now = calendar.getTime();
            if (box1.isSelected()) {
                if (!score.getText().isEmpty()) {
                    boolean isnumber = false;
                    int minlen = 0;
                    try {
                        minlen = Integer.parseInt(score.getText());
                        isnumber = true;
                    } catch (NumberFormatException ex) {
                        isnumber = false;
                    }
                    if (isnumber) {
                        try {
                            getPerfectSSRs(organisms, minlen, flag);

                            for (int i = 0; i < organisms.length; i++) {

                                map = new HashMap<String, motifStats>();

                                String location = "";
                                String location2 = "";
                                PrintWriter out = null;

                                // 18/11/2013 added starting here
                                String filetype = "";
                                String filepro = "";

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                //List<String> files = getFiles(organisms[i], minlen, flag);

                                // 18/11/2013 added ending here
                                PrintWriter stats = null;
                                PrintWriter html = null;
                                PrintWriter motifstats = null;
                                PrintWriter motifhtml = null;
                                DataOutputStream lt = null;
                                if (filetype.contains("organisms")) {

                                    File f = new File("organisms/" + organisms[i] + "/stats/");
                                    if (!f.exists()) {
                                        f.mkdir();
                                    }

                                    stats = new PrintWriter(new FileWriter("organisms/" + organisms[i]
                                            + "/stats/" + "summary_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                            true));
                                    motifstats = new PrintWriter(new FileWriter("organisms/" + organisms[i]
                                            + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                            true));
                                    motifhtml = new PrintWriter(new FileWriter("organisms/" + organisms[i]
                                            + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                            true));

                                    html = new PrintWriter(new FileWriter("organisms/" + organisms[i]
                                            + "/stats/" + "summary_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                            true));

                                    lt = new DataOutputStream(new BufferedOutputStream(
                                            new FileOutputStream("organisms/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".perf")));

                                    File fi = new File("organisms/" + organisms[i] + "/results/");
                                    if (!fi.exists()) {
                                        fi.mkdir();
                                    }
                                    String toopen = "organisms/" + organisms[i] + "/results/allPerfect_"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                    location = toopen;
                                    location2 = "organisms/" + organisms[i] + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                    out = new PrintWriter(toopen);

                                    out.println("Results for organism: " + organisms[i]
                                            + "\t Search Parameters --> Minimum SSR Length (bp): " + minlen);
                                    out.println(
                                            "   SSR      repeats             start-end  length  Path(../organism/data/chromosome)");

                                } else if (filetype.contains("local")) {
                                    File f = new File("local/" + organisms[i] + "/stats/");
                                    if (!f.exists()) {
                                        f.mkdir();
                                    }

                                    stats = new PrintWriter(new FileWriter("local/" + organisms[i] + "/stats/"
                                            + "summary_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                            true));
                                    motifstats = new PrintWriter(new FileWriter("local/" + organisms[i]
                                            + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                            true));
                                    motifhtml = new PrintWriter(new FileWriter("local/" + organisms[i]
                                            + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                            true));
                                    lt = new DataOutputStream(new BufferedOutputStream(
                                            new FileOutputStream("local/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".perf")));
                                    html = new PrintWriter(new FileWriter("local/" + organisms[i] + "/stats/"
                                            + "summary_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                            true));

                                    File fi = new File("local/" + organisms[i] + "/results/");
                                    if (!fi.exists()) {
                                        fi.mkdir();
                                    }
                                    String toopen = "local/" + organisms[i] + "/results/allPerfect_"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                    location = toopen;
                                    location2 = "local/" + organisms[i] + "/stats/" + "motif_statistics"
                                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                    out = new PrintWriter(toopen);

                                    out.println("Results for project: " + organisms[i]
                                            + "\t Search Parameters --> Minimum SSR Length (bp): " + minlen);
                                    out.println(
                                            "   SSR      repeats             start-end  length  Path(../organism/data/chromosome)");
                                    out.println();
                                }

                                if (mono.isSelected()) {

                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    //List<String> files = getFiles(organisms[i], minlen, flag);
                                    //for (int j = 0; j < files.size(); j++) {
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(
                                                new BufferedInputStream(new FileInputStream(
                                                        files + "_" + minlen + "_monoPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {

                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                // map for motifstats 
                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }
                                if (di.isSelected()) {
                                    //for (int j = 0; j < files.size(); j++) {

                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    //List<String> files = getFiles(organisms[i], minlen, flag);
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(new BufferedInputStream(
                                                new FileInputStream(files + "_" + minlen + "_diPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {
                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                //out.println("SSR: " + ssr + " repeats: " + repeats + " start-end " + (end - repeats * ssr.length()) + "-" + end + " Path(../data/chromosome): " + files.substring(0, files.lastIndexOf('.')));
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }
                                if (tri.isSelected()) {
                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    //for (int j = 0; j < files.size(); j++) {
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(
                                                new BufferedInputStream(new FileInputStream(
                                                        files + "_" + minlen + "_triPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {
                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                //out.println("SSR: " + ssr + " repeats: " + repeats + " start-end " + (end - repeats * ssr.length()) + "-" + end + " Path(../data/chromosome): " + files.substring(0, files.lastIndexOf('.')));
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }
                                if (tetra.isSelected()) {
                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(
                                                new BufferedInputStream(new FileInputStream(
                                                        files + "_" + minlen + "_tetraPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {
                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                // out.println("SSR: " + ssr + " repeats: " + repeats + " start-end " + (end - repeats * ssr.length()) + "-" + end + " Path(../data/chromosome): " + files.substring(0, files.lastIndexOf('.')));
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }
                                if (penta.isSelected()) {
                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(
                                                new BufferedInputStream(new FileInputStream(
                                                        files + "_" + minlen + "_pentaPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {
                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                //  out.println("SSR: " + ssr + " repeats: " + repeats + " start-end " + (end - repeats * ssr.length()) + "-" + end + " Path(../data/chromosome): " + files.substring(0, files.lastIndexOf('.')));
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }
                                if (hexa.isSelected()) {
                                    // 18/11/2013 added starting here

                                    if (flag) {
                                        filetype = "organisms";
                                        filepro = "organisms/" + organisms[i] + "/data/";
                                        int ret = getOrganismStatus(organisms[i]);
                                        if (ret == -1)
                                            indexer = new Indexer(chromosomelist);
                                        else
                                            indexer = new Indexer(ret);

                                    } else {
                                        filetype = "local";
                                        filepro = "local/" + organisms[i] + "/data/";
                                        String indexfile = "local/" + organisms[i] + "/index.txt";
                                        indexer = new Indexer(indexfile);
                                    }
                                    while (indexer.hasNext()) {
                                        String files = filepro + indexer.getNextFileName();

                                        DataInputStream in = new DataInputStream(
                                                new BufferedInputStream(new FileInputStream(
                                                        files + "_" + minlen + "_hexaPerfect.temp")));
                                        boolean eof = false;
                                        while (!eof) {
                                            try {
                                                String ssr = in.readUTF();
                                                int repeats = in.readInt();
                                                int end = in.readInt();
                                                // out.println("SSR: " + ssr + " repeats: " + repeats + " start-end " + (end - repeats * ssr.length()) + "-" + end + " Path(../data/chromosome): " + files.substring(0, files.lastIndexOf('.')));
                                                out.println(cell(ssr, 6) + "  " + cell(repeats, 11) + "  "
                                                        + cell(Integer
                                                                .toString(end - repeats * ssr.length() + 1)
                                                                + "-" + Integer.toString(end + 1), 20)
                                                        + "  " + cell(repeats * ssr.length(), 6) + "  "
                                                        + files.substring(0, files.lastIndexOf('.')));

                                                if (!map.containsKey(ssr)) {
                                                    motifStats m = new motifStats(ssr, repeats);
                                                    map.put(ssr, m);
                                                } else {
                                                    map.get(ssr).update(repeats);
                                                }

                                            } catch (EOFException exc) {
                                                eof = true;
                                            }
                                        }
                                        in.close();
                                    }
                                }

                                out.close();
                                Runtime.getRuntime().exec("notepad " + location);

                                DecimalFormat round = new DecimalFormat("#.###");

                                html.println("<html><h1>******* Perfect SSRs *******</h1>");
                                html.println("<h4>Results for project: " + organisms[i]
                                        + "</h4><h4>Search Parameters --> Minimum SSR Length (bp): " + minlen
                                        + "</h4>");
                                html.println(
                                        "<table border=\"1\"><tr><td><b>motif</b></td><td><b>count</b></td><td><b>bp</b></td><td><b>A%</b></td><td><b>T%</b></td><td><b>C%</b></td><td><b>G%</b></td><td><b>Relative Frequency</b></td><td><b>Abundance</b></td><td><b>Relative Abundance</b></td></tr>");
                                stats.println("******* Perfect SSRs *******");
                                stats.println("Results for project: " + organisms[i]
                                        + "\n Search Parameters --> Minimum SSR Length (bp): " + minlen);

                                stats.println(
                                        " ____________________________________________________________________________________________________________ ");
                                stats.println(
                                        "|       |       |            |       |       |       |       |   Relative    |               |   Relative    |");
                                stats.println(
                                        "| motif | count |     bp     |   A%  |   T%  |   C%  |   G%  |   Frequency   |   Abundance   |   Abundance   |");
                                stats.println(
                                        "|=======|=======|============|=======|=======|=======|=======|===============|===============|===============|");
                                int totalcount = 0;
                                long bpcount = 0;
                                int Aperc = 0;
                                int Tperc = 0;
                                int Gperc = 0;
                                int Cperc = 0;
                                float relfreq = 0;
                                float abfreq = 0;
                                long seqcount = 0;
                                if (mono.isSelected()) {
                                    totalcount += countmono.get(i);
                                    bpcount += countmonore.get(i);
                                }
                                if (di.isSelected()) {
                                    totalcount += countdi.get(i);
                                    bpcount += countdire.get(i) * 2;
                                }
                                if (tri.isSelected()) {
                                    totalcount += counttri.get(i);
                                    bpcount += counttrire.get(i) * 3;
                                }
                                if (tetra.isSelected()) {
                                    totalcount += counttetra.get(i);
                                    bpcount += counttetrare.get(i) * 4;
                                }
                                if (penta.isSelected()) {
                                    totalcount += countpenta.get(i);
                                    bpcount += countpentare.get(i) * 5;
                                }
                                if (hexa.isSelected()) {
                                    totalcount += counthexa.get(i);
                                    bpcount += counthexare.get(i) * 6;
                                }
                                try {
                                    Class.forName("com.mysql.jdbc.Driver");
                                } catch (ClassNotFoundException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                                Connection con = null;
                                try {
                                    con = DriverManager.getConnection("jdbc:mysql://localhost:3306", "biouser",
                                            "thesis2012");
                                } catch (SQLException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                                Statement st = null;
                                try {
                                    st = con.createStatement();
                                } catch (SQLException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                                st.executeUpdate("use lobid");

                                seqcount = 0;

                                if (filetype.contains("organisms")) {
                                    ResultSet rs = st.executeQuery(
                                            "SELECT end FROM slices INNER JOIN organism WHERE slices.org_id=organism.org_id AND organism.name='"
                                                    + organisms[i] + "'");
                                    while (rs.next()) {
                                        seqcount += Long.parseLong(rs.getString(1));
                                    }
                                } else if (filetype.contains("local")) {
                                    BufferedReader in = new BufferedReader(
                                            new FileReader("local/" + organisms[i] + "/index.txt"));
                                    int count = countlines("local/" + organisms[i] + "/index.txt");
                                    for (int c = 0; c < count; c++) {
                                        String temp = in.readLine();
                                        BufferedReader tmp = new BufferedReader(
                                                new FileReader("local/" + organisms[i] + "/" + temp + ".txt"));

                                        boolean eof = false;
                                        while (!eof) {
                                            String s = tmp.readLine();
                                            if (s != null) {
                                                seqcount += s.length();
                                            } else {
                                                eof = true;
                                            }
                                        }
                                        tmp.close();
                                    }
                                }

                                if (mono.isSelected()) {
                                    Aperc += Amono.get(i);
                                    Tperc += Tmono.get(i);
                                    Gperc += Gmono.get(i);
                                    Cperc += Cmono.get(i);
                                    //lt.writeInt(countmono);lt.writeInt(countmonore);lt.writeFloat((float)Amono*100/countmonore);lt.writeFloat((float)Tmono*100/countmonore);lt.writeFloat((float)Gmono*100/countmonore);lt.writeFloat((float)Cmono*100/countmonore);lt.writeFloat((float) countmono / totalcount);lt.writeFloat((float) countmonore / seqcount);lt.writeFloat((float) countmonore / bpcount);
                                    stats.printf("|mono   |" + cell(Integer.toString(countmono.get(i)), 7) + "|"
                                            + cell(Integer.toString(1 * countmonore.get(i)), 12)
                                            + "|%s|%s|%s|%s|" + cell((float) countmono.get(i) / totalcount, 15)
                                            + "|" + cell((float) countmonore.get(i) / seqcount, 15) + "|"
                                            + cell((float) countmonore.get(i) / bpcount, 15) + "|\n",
                                            cell((float) (Amono.get(i) * 100) / (countmonore.get(i)), 7),
                                            cell((float) (Tmono.get(i) * 100) / (countmonore.get(i)), 7),
                                            cell((float) (Cmono.get(i) * 100) / (countmonore.get(i)), 7),
                                            cell((float) (Gmono.get(i) * 100) / (countmonore.get(i)), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>mono</b></td><td>" + countmono.get(i) + "</td><td>"
                                            + (1 * countmonore.get(i)) + "</td><td>"
                                            + round.format((float) (Amono.get(i) * 100) / (countmonore.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Tmono.get(i) * 100) / (countmonore.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Cmono.get(i) * 100) / (countmonore.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Gmono.get(i) * 100) / (countmonore.get(i)))
                                            + "</td><td>" + round.format((float) countmono.get(i) / totalcount)
                                            + "</td><td>" + round.format((float) countmonore.get(i) / seqcount)
                                            + "</td><td>" + round.format((float) countmonore.get(i) / bpcount)
                                            + "</td></tr>");
                                }
                                if (di.isSelected()) {
                                    Aperc += Adi.get(i);
                                    Tperc += Tdi.get(i);
                                    Gperc += Gdi.get(i);
                                    Cperc += Cdi.get(i);

                                    //lt.writeInt(countdi);lt.writeInt(countdire*2);lt.writeFloat((float)Adi*100/countdire*2);lt.writeFloat((float)Tdi*100/countdire*2);lt.writeFloat((float)Gdi*100/countdire*2);lt.writeFloat((float)Cdi*100/countdire*2);lt.writeFloat((float) countdi / totalcount);lt.writeFloat((float) countdire*2 / seqcount);lt.writeFloat((float) countdire*2 / bpcount);
                                    stats.printf("|di     |" + cell(Integer.toString(countdi.get(i)), 7) + "|"
                                            + cell(Integer.toString(countdire.get(i) * 2), 12) + "|%s|%s|%s|%s|"
                                            + cell((float) countdi.get(i) / totalcount, 15) + "|"
                                            + cell((float) countdire.get(i) * 2 / seqcount, 15) + "|"
                                            + cell((float) countdire.get(i) * 2 / bpcount, 15) + "|\n",
                                            cell((float) (Adi.get(i) * 100) / (countdire.get(i) * 2), 7),
                                            cell((float) (Tdi.get(i) * 100) / (countdire.get(i) * 2), 7),
                                            cell((float) (Cdi.get(i) * 100) / (countdire.get(i) * 2), 7),
                                            cell((float) (Gdi.get(i) * 100) / (countdire.get(i) * 2), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>di</b></td><td>" + countdi.get(i) + "</td><td>"
                                            + (2 * countdire.get(i)) + "</td><td>"
                                            + round.format((float) (Adi.get(i) * 100) / (2 * countdire.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Tdi.get(i) * 100) / (2 * countdire.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Cdi.get(i) * 100) / (2 * countdire.get(i)))
                                            + "</td><td>"
                                            + round.format((float) (Gdi.get(i) * 100) / (2 * countdire.get(i)))
                                            + "</td><td>" + round.format((float) countdi.get(i) / totalcount)
                                            + "</td><td>"
                                            + round.format((float) 2 * countdire.get(i) / seqcount)
                                            + "</td><td>" + round.format((float) 2 * countdire.get(i) / bpcount)
                                            + "</td></tr>");
                                }
                                if (tri.isSelected()) {
                                    Aperc += Atri.get(i);
                                    Tperc += Ttri.get(i);
                                    Gperc += Gtri.get(i);
                                    Cperc += Ctri.get(i);
                                    //lt.writeInt(counttri);lt.writeInt(counttrire*3);lt.writeFloat((float)Atri*100/counttrire*3);lt.writeFloat((float)Ttri*100/counttrire*3);lt.writeFloat((float)Gtri*100/counttrire*3);lt.writeFloat((float)Ctri*100/counttrire*3);lt.writeFloat((float) counttri / totalcount);lt.writeFloat((float) counttrire*3 / seqcount);lt.writeFloat((float) counttrire*3 / bpcount);
                                    stats.printf("|tri    |" + cell(Integer.toString(counttri.get(i)), 7) + "|"
                                            + cell(Integer.toString(counttrire.get(i) * 3), 12)
                                            + "|%s|%s|%s|%s|" + cell((float) counttri.get(i) / totalcount, 15)
                                            + "|" + cell((float) counttrire.get(i) * 3 / seqcount, 15) + "|"
                                            + cell((float) counttrire.get(i) * 3 / bpcount, 15) + "|\n",
                                            cell((float) (Atri.get(i) * 100) / (counttrire.get(i) * 3), 7),
                                            cell((float) (Ttri.get(i) * 100) / (counttrire.get(i) * 3), 7),
                                            cell((float) (Ctri.get(i) * 100) / (counttrire.get(i) * 3), 7),
                                            cell((float) (Gtri.get(i) * 100) / (counttrire.get(i) * 3), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>tri</b></td><td>" + counttri.get(i) + "</td><td>"
                                            + (3 * counttrire.get(i)) + "</td><td>"
                                            + round.format(
                                                    (float) (Atri.get(i) * 100) / (3 * counttrire.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Ttri.get(i) * 100) / (3 * counttrire.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Ctri.get(i) * 100) / (3 * counttrire.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Gtri.get(i) * 100) / (3 * counttrire.get(i)))
                                            + "</td><td>" + round.format((float) counttri.get(i) / totalcount)
                                            + "</td><td>"
                                            + round.format((float) 3 * counttrire.get(i) / seqcount)
                                            + "</td><td>"
                                            + round.format((float) 3 * counttrire.get(i) / bpcount)
                                            + "</td></tr>");
                                }
                                if (tetra.isSelected()) {
                                    Aperc += Atetra.get(i);
                                    Tperc += Ttetra.get(i);
                                    Gperc += Gtetra.get(i);
                                    Cperc += Ctetra.get(i);
                                    //lt.writeInt(counttetra);lt.writeInt(counttetrare*4);lt.writeFloat((float)Atetra*100/counttetrare*4);lt.writeFloat((float)Ttetra*100/counttetrare*4);lt.writeFloat((float)Gtetra*100/counttetrare*4);lt.writeFloat((float)Ctetra*100/counttetrare*4);lt.writeFloat((float) counttetra / totalcount);lt.writeFloat((float) counttetrare*4 / seqcount);lt.writeFloat((float) counttetrare*4 / bpcount);
                                    stats.printf("|tetra  |" + cell(Integer.toString(counttetra.get(i)), 7)
                                            + "|" + cell(Integer.toString(counttetrare.get(i) * 4), 12)
                                            + "|%s|%s|%s|%s|" + cell((float) counttetra.get(i) / totalcount, 15)
                                            + "|" + cell((float) counttetrare.get(i) * 4 / seqcount, 15) + "|"
                                            + cell((float) counttetrare.get(i) * 4 / bpcount, 15) + "|\n",
                                            cell((float) (Atetra.get(i) * 100) / (counttetrare.get(i) * 4), 7),
                                            cell((float) (Ttetra.get(i) * 100) / (counttetrare.get(i) * 4), 7),
                                            cell((float) (Ctetra.get(i) * 100) / (counttetrare.get(i) * 4), 7),
                                            cell((float) (Gtetra.get(i) * 100) / (counttetrare.get(i) * 4), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>tetra</b></td><td>" + counttetra.get(i)
                                            + "</td><td>" + (4 * counttetrare.get(i)) + "</td><td>"
                                            + round.format(
                                                    (float) (Atetra.get(i) * 100) / (4 * counttetrare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Ttetra.get(i) * 100) / (4 * counttetrare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Ctetra.get(i) * 100) / (4 * counttetrare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Gtetra.get(i) * 100) / (4 * counttetrare.get(i)))
                                            + "</td><td>" + round.format((float) counttetra.get(i) / totalcount)
                                            + "</td><td>"
                                            + round.format((float) 4 * counttetrare.get(i) / seqcount)
                                            + "</td><td>"
                                            + round.format((float) 4 * counttetrare.get(i) / bpcount)
                                            + "</td></tr>");
                                }
                                if (penta.isSelected()) {
                                    Aperc += Apenta.get(i);
                                    Tperc += Tpenta.get(i);
                                    Gperc += Gpenta.get(i);
                                    Cperc += Cpenta.get(i);
                                    //lt.writeInt(countpenta);lt.writeInt(countpentare*5);lt.writeFloat((float)Apenta*100/countpentare*5);lt.writeFloat((float)Tpenta*100/countpentare*5);lt.writeFloat((float)Gpenta*100/countpentare*5);lt.writeFloat((float)Cpenta*100/countpentare*5);lt.writeFloat((float) countpenta / totalcount);lt.writeFloat((float) countpentare*5 / seqcount);lt.writeFloat((float) countpentare*5 / bpcount);
                                    stats.printf("|penta  |" + cell(Integer.toString(countpenta.get(i)), 7)
                                            + "|" + cell(Integer.toString(countpentare.get(i) * 5), 12)
                                            + "|%s|%s|%s|%s|" + cell((float) countpenta.get(i) / totalcount, 15)
                                            + "|" + cell((float) countpentare.get(i) * 5 / seqcount, 15) + "|"
                                            + cell((float) countpentare.get(i) * 5 / bpcount, 15) + "|\n",
                                            cell((float) (Apenta.get(i) * 100) / (countpentare.get(i) * 5), 7),
                                            cell((float) (Tpenta.get(i) * 100) / (countpentare.get(i) * 5), 7),
                                            cell((float) (Cpenta.get(i) * 100) / (countpentare.get(i) * 5), 7),
                                            cell((float) (Gpenta.get(i) * 100) / (countpentare.get(i) * 5), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>penta</b></td><td>" + countpenta.get(i)
                                            + "</td><td>" + (5 * countpentare.get(i)) + "</td><td>"
                                            + round.format(
                                                    (float) (Apenta.get(i) * 100) / (5 * countpentare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Tpenta.get(i) * 100) / (5 * countpentare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Cpenta.get(i) * 100) / (5 * countpentare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Gpenta.get(i) * 100) / (5 * countpentare.get(i)))
                                            + "</td><td>" + round.format((float) countpenta.get(i) / totalcount)
                                            + "</td><td>"
                                            + round.format((float) 5 * countpentare.get(i) / seqcount)
                                            + "</td><td>"
                                            + round.format((float) 5 * countpentare.get(i) / bpcount)
                                            + "</td></tr>");
                                }
                                if (hexa.isSelected()) {
                                    Aperc += Ahexa.get(i);
                                    Tperc += Thexa.get(i);
                                    Gperc += Ghexa.get(i);
                                    Cperc += Chexa.get(i);
                                    //lt.writeInt(counthexa);lt.writeInt(counthexare*6);lt.writeFloat((float)Ahexa*100/counthexare*6);lt.writeFloat((float)Thexa*100/counthexare*6);lt.writeFloat((float)Ghexa*100/counthexare*6);lt.writeFloat((float)Chexa*100/counthexare*6);lt.writeFloat((float) counthexa / totalcount);lt.writeFloat((float) counthexare*6 / seqcount);lt.writeFloat((float) counthexare*6 / bpcount);
                                    stats.printf("|hexa   |" + cell(Integer.toString(counthexa.get(i)), 7) + "|"
                                            + cell(Integer.toString(counthexare.get(i) * 6), 12)
                                            + "|%s|%s|%s|%s|" + cell((float) counthexa.get(i) / totalcount, 15)
                                            + "|" + cell((float) counthexare.get(i) * 6 / seqcount, 15) + "|"
                                            + cell((float) counthexare.get(i) * 6 / bpcount, 15) + "|\n",
                                            cell((float) (Ahexa.get(i) * 100) / (counthexare.get(i) * 6), 7),
                                            cell((float) (Thexa.get(i) * 100) / (counthexare.get(i) * 6), 7),
                                            cell((float) (Chexa.get(i) * 100) / (counthexare.get(i) * 6), 7),
                                            cell((float) (Ghexa.get(i) * 100) / (counthexare.get(i) * 6), 7));
                                    stats.println(
                                            "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                    html.println("<tr><td><b>hexa</b></td><td>" + counthexa.get(i) + "</td><td>"
                                            + (6 * counthexare.get(i)) + "</td><td>"
                                            + round.format(
                                                    (float) (Ahexa.get(i) * 100) / (6 * counthexare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Thexa.get(i) * 100) / (6 * counthexare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Chexa.get(i) * 100) / (6 * counthexare.get(i)))
                                            + "</td><td>"
                                            + round.format(
                                                    (float) (Ghexa.get(i) * 100) / (6 * counthexare.get(i)))
                                            + "</td><td>" + round.format((float) counthexa.get(i) / totalcount)
                                            + "</td><td>"
                                            + round.format((float) 6 * counthexare.get(i) / seqcount)
                                            + "</td><td>"
                                            + round.format((float) 6 * counthexare.get(i) / bpcount)
                                            + "</td></tr>");
                                }

                                if (mono.isSelected()) {
                                    relfreq += (float) countmono.get(i) / totalcount;
                                    abfreq += (float) countmonore.get(i) / bpcount;
                                }
                                if (di.isSelected()) {
                                    relfreq += (float) countdi.get(i) / totalcount;
                                    abfreq += (float) countdire.get(i) * 2 / bpcount;
                                }
                                if (tri.isSelected()) {
                                    relfreq += (float) counttri.get(i) / totalcount;
                                    abfreq += (float) counttrire.get(i) * 3 / bpcount;
                                }
                                if (tetra.isSelected()) {
                                    relfreq += (float) counttetra.get(i) / totalcount;
                                    abfreq += (float) counttetrare.get(i) * 4 / bpcount;
                                }
                                if (penta.isSelected()) {
                                    relfreq += (float) countpenta.get(i) / totalcount;
                                    abfreq += (float) countpentare.get(i) * 5 / bpcount;
                                }
                                if (hexa.isSelected()) {
                                    relfreq += (float) counthexa.get(i) / totalcount;
                                    abfreq += (float) counthexare.get(i) * 6 / bpcount;
                                }

                                Globals.A = Aperc;
                                Globals.T = Tperc;
                                Globals.G = Gperc;
                                Globals.C = Cperc;

                                lt.writeLong(seqcount);
                                lt.writeInt(totalcount);
                                lt.writeLong(bpcount);
                                lt.writeInt(Aperc);
                                lt.writeInt(Tperc);
                                lt.writeInt(Gperc);
                                lt.writeInt(Cperc);
                                stats.println("|TOTAL  |" + cell(Integer.toString(totalcount), 7) + "|"
                                        + cell(Long.toString(bpcount), 12) + "|"
                                        + cell((float) Aperc * 100 / bpcount, 7) + "|"
                                        + cell((float) Tperc * 100 / bpcount, 7) + "|"
                                        + cell((float) Cperc * 100 / bpcount, 7) + "|"
                                        + cell((float) Gperc * 100 / bpcount, 7) + "|" + cell(relfreq, 15) + "|"
                                        + cell((float) bpcount / seqcount, 15) + "|" + cell((float) abfreq, 15)
                                        + "|");
                                stats.println(
                                        "|_______|_______|____________|_______|_______|_______|_______|_______________|_______________|_______________|");
                                stats.println("Genome length (bp): " + seqcount);
                                stats.println("Relative Frequency: Count of each motif type / total SSR count");
                                stats.println("Abundance: bp of each motif type / total sequence bp");
                                stats.println(
                                        "Relative Abundance: bp of each motif type / total microsatellites bp");
                                stats.println();
                                stats.println();
                                stats.close();
                                lt.close();

                                html.println("<tr><td><b>TOTAL</b></td><td>" + totalcount + "</td><td>"
                                        + bpcount + "</td><td>" + round.format((float) Aperc * 100 / bpcount)
                                        + "</td><td>" + round.format((float) Tperc * 100 / bpcount)
                                        + "</td><td>" + round.format((float) Cperc * 100 / bpcount)
                                        + "</td><td>" + round.format((float) Gperc * 100 / bpcount)
                                        + "</td><td>" + round.format((float) relfreq) + "</td><td>"
                                        + round.format((float) bpcount / seqcount) + "</td><td>"
                                        + round.format((float) abfreq) + "</td></tr></table></html>");
                                html.close();

                                // it = map.keySet().iterator();

                                for (String key : map.keySet()) {
                                    map.get(key).refresh();
                                }

                                List<String> n1 = new ArrayList<String>();
                                List<String> n2 = new ArrayList<String>();
                                List<String> n3 = new ArrayList<String>();
                                List<String> n4 = new ArrayList<String>();
                                List<String> n5 = new ArrayList<String>();
                                List<String> n6 = new ArrayList<String>();

                                Iterator<String> it = map.keySet().iterator();

                                while (it.hasNext()) {
                                    String next = it.next();
                                    int len = next.length();
                                    if (len == 1)
                                        n1.add(next);
                                    else if (len == 2)
                                        n2.add(next);
                                    else if (len == 3)
                                        n3.add(next);
                                    else if (len == 4)
                                        n4.add(next);
                                    else if (len == 5)
                                        n5.add(next);
                                    else if (len == 6)
                                        n6.add(next);

                                }

                                Collections.sort(n1);
                                Collections.sort(n2);
                                Collections.sort(n3);
                                Collections.sort(n4);
                                Collections.sort(n5);
                                Collections.sort(n6);

                                boolean[] id1 = new boolean[n1.size()];
                                boolean[] id2 = new boolean[n2.size()];
                                boolean[] id3 = new boolean[n3.size()];
                                boolean[] id4 = new boolean[n4.size()];
                                boolean[] id5 = new boolean[n5.size()];
                                boolean[] id6 = new boolean[n6.size()];

                                motifhtml.println("<html><head><title>Motif Statistics</title></head><body>");
                                int stand = checkStandardize();
                                // stand=2; debug
                                if (stand == 0) {
                                    motifstats.println("**** Not Standardized ****");
                                    motifhtml.println("<h1>**** Not Standardized ****</h1>");
                                    Arrays.fill(id1, true);
                                    Arrays.fill(id2, true);
                                    Arrays.fill(id3, true);
                                    Arrays.fill(id4, true);
                                    Arrays.fill(id5, true);
                                    Arrays.fill(id6, true);
                                } else {
                                    if (stand == 1) {
                                        motifstats.println("**** Partially Standardized ****");
                                        motifhtml.println("<h1>**** Partially Standardized ****</h1>");
                                        matrix = new parser(1);
                                    }
                                    if (stand == 2) {
                                        motifstats.println("**** Fully Standardized ****");
                                        motifhtml.println("<h1>**** Fully Standardized ****</h1>");
                                        matrix = new parser(2);
                                    }

                                    Arrays.fill(id1, true);
                                    Arrays.fill(id2, true);
                                    Arrays.fill(id3, true);
                                    Arrays.fill(id4, true);
                                    Arrays.fill(id5, true);
                                    Arrays.fill(id6, true);

                                    for (int n = 0; n < n1.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(1, n1.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(1, id);
                                            if (found >= 0) {
                                                map.get(n1.get(found)).merge(map.get(n1.get(n)));
                                                id1[n] = false; // gia clean twn listwn apo merged TODO *
                                            }
                                            if (found == -4) {
                                                matrix.makeFound(1, id, n);
                                            }
                                        }
                                    }

                                    for (int n = 0; n < n2.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(2, n2.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(2, id);
                                            if (found >= 0) {
                                                map.get(n2.get(found)).merge(map.get(n2.get(n)));
                                                id2[n] = false; // gia clean twn listwn apo merged TODO *
                                            } else {
                                                matrix.makeFound(2, id, n);
                                                id2[n] = true;
                                            }
                                        }
                                    }

                                    for (int n = 0; n < n3.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(3, n3.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(3, id);
                                            if (found >= 0) {
                                                map.get(n3.get(found)).merge(map.get(n3.get(n)));
                                                id3[n] = false; // gia clean twn listwn apo merged TODO *
                                            } else {
                                                matrix.makeFound(3, id, n);
                                                id3[n] = true;
                                            }
                                        }
                                    }

                                    for (int n = 0; n < n4.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(4, n4.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(4, id);
                                            if (found >= 0) {
                                                map.get(n4.get(found)).merge(map.get(n4.get(n)));
                                                id4[n] = false; // gia clean twn listwn apo merged TODO *
                                            } else {
                                                matrix.makeFound(4, id, n);
                                                id4[n] = true;
                                            }
                                        }
                                    }

                                    for (int n = 0; n < n5.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(5, n5.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(5, id);
                                            if (found >= 0) {
                                                map.get(n5.get(found)).merge(map.get(n5.get(n)));
                                                id5[n] = false; // gia clean twn listwn apo merged TODO *
                                            } else {
                                                matrix.makeFound(5, id, n);
                                                id5[n] = true;
                                            }
                                        }
                                    }

                                    for (int n = 0; n < n6.size(); n++) {
                                        int id = -2;
                                        id = matrix.SearchMap(6, n6.get(n));
                                        if (id >= 0) {
                                            int found = matrix.checkFound(6, id);
                                            if (found >= 0) {
                                                map.get(n6.get(found)).merge(map.get(n6.get(n)));
                                                id6[n] = false; // gia clean twn listwn apo merged TODO *
                                            } else {
                                                matrix.makeFound(6, id, n);
                                                id6[n] = true;
                                            }
                                        }
                                    }
                                }

                                for (String key : map.keySet()) {
                                    map.get(key).refresh();
                                }
                                motifstats.println(
                                        " Motif   Count  Repeats          bp  Avg_Length  SD_Length  Max_Length  Avg_Repeats    A%      T%      C%      G%    ");
                                motifhtml.println(
                                        "<table border=\"1\"><tr><td><b>Motif</b></td><td><b>Count</b></td><td><b>Repeats</b></td><td><b>bp</b></td><td><b>Avg_Length</b></td><td><b>SD_Length</b></td><td><b>Max_Length</b></td><td><b>Avg_Repeats</b></td><td><b>A%</b></td><td><b>T%</b></td><td><b>C%</b></td><td><b>G%</b></td></tr>");
                                if (mono.isSelected()) {
                                    for (int z = 0; z < n1.size(); z++) {
                                        if (id1[z] && !map.get(n1.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n1.get(z)).toString());
                                            motifhtml.println(map.get(n1.get(z)).toHTML());
                                        }

                                    }
                                }
                                if (di.isSelected()) {
                                    for (int z = 0; z < n2.size(); z++) {
                                        if (id2[z] && !map.get(n2.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n2.get(z)).toString());
                                            motifhtml.println(map.get(n2.get(z)).toHTML());
                                        }
                                    }
                                }
                                if (tri.isSelected()) {
                                    for (int z = 0; z < n3.size(); z++) {
                                        if (id3[z] && !map.get(n3.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n3.get(z)).toString());
                                            motifhtml.println(map.get(n3.get(z)).toHTML());
                                        }
                                    }
                                }
                                if (tetra.isSelected()) {
                                    for (int z = 0; z < n4.size(); z++) {
                                        if (id4[z] && !map.get(n4.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n4.get(z)).toString());
                                            motifhtml.println(map.get(n4.get(z)).toHTML());
                                        }
                                    }
                                }
                                if (penta.isSelected()) {
                                    for (int z = 0; z < n5.size(); z++) {
                                        if (id5[z] && !map.get(n5.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n5.get(z)).toString());
                                            motifhtml.println(map.get(n5.get(z)).toHTML());
                                        }
                                    }
                                }
                                if (hexa.isSelected()) {
                                    for (int z = 0; z < n6.size(); z++) {
                                        if (id6[z] && !map.get(n6.get(z)).getMotif().contains("N")) {
                                            motifstats.println(map.get(n6.get(z)).toString());
                                            motifhtml.println(map.get(n6.get(z)).toHTML());
                                        }
                                    }
                                }
                                motifstats.close();
                                motifhtml.println("</table></body></html>");
                                motifhtml.close();

                                Runtime.getRuntime().exec("notepad " + location2);

                            }

                        } catch (FileNotFoundException ex) {
                            //msg.showMessageDialog(paneldown, "Update your selected species", "Error", JOptionPane.ERROR_MESSAGE);
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (SQLException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } else {
                        msg.showMessageDialog(paneldown, "Minimum length requires an Integer", "Error",
                                JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    msg.showMessageDialog(paneldown, "Please fill in the minimum length (Integers only)",
                            "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
            if (box2.isSelected()) {
                boolean gapisnumber = false;
                boolean minisnumber = false;
                int gap = 0;
                int min = 0;
                try {
                    gap = Integer.parseInt(max.getText());
                    gapisnumber = true;
                } catch (NumberFormatException ex) {
                    gapisnumber = false;
                }

                try {
                    min = Integer.parseInt(minpregap.getText());
                    minisnumber = true;
                } catch (NumberFormatException ex) {
                    minisnumber = false;
                }
                if (gapisnumber && minisnumber) {
                    try {
                        getImPerfectSSRs(organisms, min, flag, gap);

                        for (int i = 0; i < organisms.length; i++) {

                            PrintWriter stats = null;
                            PrintWriter html = null;

                            String location = ""; // 18/11/2013 added starting here
                            String filetype = "";
                            String filepro = "";

                            if (flag) {
                                filetype = "organisms";
                                filepro = "organisms/" + organisms[i] + "/data/";
                                int ret = getOrganismStatus(organisms[i]);
                                if (ret == -1)
                                    indexer = new Indexer(chromosomelist);
                                else
                                    indexer = new Indexer(ret);

                            } else {
                                filetype = "local";
                                filepro = "local/" + organisms[i] + "/data/";
                                String indexfile = "local/" + organisms[i] + "/index.txt";
                                indexer = new Indexer(indexfile);
                            }
                            //List<String> files = getFiles(organisms[i], minlen, flag);

                            // 18/11/2013 added ending here
                            PrintWriter out = null;
                            DataOutputStream lt = null;
                            if (filetype.contains("organisms")) {
                                File f = new File("organisms/" + organisms[i] + "/stats/");
                                if (!f.exists()) {
                                    f.mkdir();
                                }

                                stats = new PrintWriter(new FileWriter(
                                        "organisms/" + organisms[i] + "/stats/" + "summary_statistics"
                                                + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                        true));
                                lt = new DataOutputStream(new BufferedOutputStream(
                                        new FileOutputStream("organisms/" + organisms[i] + "/data/"
                                                + now.toString().replace(':', '_').replace(' ', '_')
                                                + ".imperf")));
                                html = new PrintWriter(new FileWriter(
                                        "organisms/" + organisms[i] + "/stats/" + "summary_statistics"
                                                + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                        true));

                                File fi = new File("organisms/" + organisms[i] + "/results/");
                                if (!fi.exists()) {
                                    fi.mkdir();
                                }
                                String toopen = "organisms/" + organisms[i] + "/results/allImPerfect_"
                                        + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                location = toopen;
                                out = new PrintWriter(toopen);

                                out.println("Results for organism: " + organisms[i]
                                        + "\t Search Parameters --> Maximum Mismatch length for ImPerfect SSRs : "
                                        + gap + " minimum SSR length before given gap: " + min);
                            } else if (filetype.contains("local")) {

                                File f = new File("local/" + organisms[i] + "/stats/");
                                if (!f.exists()) {
                                    f.mkdir();
                                }

                                stats = new PrintWriter(new FileWriter(
                                        "local/" + organisms[i] + "/stats/" + "summary_statistics"
                                                + now.toString().replace(':', '_').replace(' ', '_') + ".txt",
                                        true));
                                lt = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("local/"
                                        + organisms[i] + "/data/"
                                        + now.toString().replace(':', '_').replace(' ', '_') + ".imperf")));
                                html = new PrintWriter(new FileWriter(
                                        "local/" + organisms[i] + "/stats/" + "summary_statistics"
                                                + now.toString().replace(':', '_').replace(' ', '_') + ".html",
                                        true));

                                File fi = new File("local/" + organisms[i] + "/results/");
                                if (!fi.exists()) {
                                    fi.mkdir();
                                }
                                String toopen = "local/" + organisms[i] + "/results/allImPerfect_"
                                        + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                                location = toopen;
                                out = new PrintWriter(toopen);
                                out.println("Results for project: " + organisms[i]
                                        + "\t Search Parameters --> Maximum Mismatch length for ImPerfect SSRs : "
                                        + gap + " minimum SSR length before given gap: " + min);
                            }

                            if (mono.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }

                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_monoImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + " start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }
                            if (di.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_diImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + " start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }
                            if (tri.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_triImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + " start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }
                            if (tetra.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_tetraImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + " start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }
                            if (penta.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_pentaImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + " start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }
                            if (hexa.isSelected()) {
                                // 18/11/2013 added starting here

                                if (flag) {
                                    filetype = "organisms";
                                    filepro = "organisms/" + organisms[i] + "/data/";
                                    int ret = getOrganismStatus(organisms[i]);
                                    if (ret == -1)
                                        indexer = new Indexer(chromosomelist);
                                    else
                                        indexer = new Indexer(ret);

                                } else {
                                    filetype = "local";
                                    filepro = "local/" + organisms[i] + "/data/";
                                    String indexfile = "local/" + organisms[i] + "/index.txt";
                                    indexer = new Indexer(indexfile);
                                }
                                while (indexer.hasNext()) {
                                    String files = filepro + indexer.getNextFileName();
                                    DataInputStream in = new DataInputStream(
                                            new BufferedInputStream(new FileInputStream(
                                                    files + "_" + min + "_" + gap + "_hexaImPerfect.temp")));
                                    boolean eof = false;
                                    while (!eof) {
                                        try {
                                            String ssr = in.readUTF();
                                            int start = in.readInt();
                                            int end = in.readInt();
                                            if (!ssr.contains("N"))
                                                out.println("SSR: " + ssr + "  start-end " + start + "-" + end
                                                        + " Path(../data/chromosome): "
                                                        + files.substring(0, files.lastIndexOf('.')));
                                        } catch (EOFException exc) {
                                            eof = true;
                                        }
                                    }
                                    in.close();
                                }
                            }

                            out.close();

                            Runtime.getRuntime().exec("notepad " + location);

                            DecimalFormat round = new DecimalFormat("#.###");

                            html.println("<html><h1>******* ImPerfect SSRs *******</h1>");
                            html.println("<h4>Results for project: " + organisms[i]
                                    + "</h4><h4>Search Parameters --> Maximum Mismatch length for ImPerfect SSRs (bp): "
                                    + gap + "</h4><h4>minimum SSR length before given Mismatch length (bp): "
                                    + min + "</h4>");
                            html.println(
                                    "<table border=\"1\"><tr><td><b>motif</b></td><td><b>count</b></td><td><b>bp</b></td><td><b>A%</b></td><td><b>T%</b></td><td><b>C%</b></td><td><b>G%</b></td><td><b>Relative Frequency</b></td><td><b>Abundance</b></td><td><b>Relative Abundance</b></td></tr>");

                            stats.println("******* ImPerfect SSRs *******");
                            stats.println("Results for project: " + organisms[i]
                                    + "\n Search Parameters --> Maximum Mismatch length for ImPerfect SSRs (bp): "
                                    + gap + " \nminimum SSR length before given Mismatch length (bp): " + min);

                            stats.println(
                                    " ____________________________________________________________________________________________________________ ");
                            stats.println(
                                    "|       |       |            |       |       |       |       |   Relative    |               |   Relative    |");
                            stats.println(
                                    "| motif | count |     bp     |   A%  |   T%  |   C%  |   G%  |   Frequency   |   Abundance   |   Abundance   |");
                            stats.println(
                                    "|=======|=======|============|=======|=======|=======|=======|===============|===============|===============|");
                            int totalcount = 0;
                            long bpcount = 0;
                            int Aperc = 0;
                            int Tperc = 0;
                            int Gperc = 0;
                            int Cperc = 0;
                            float relfreq = 0;
                            float abfreq = 0;
                            long seqcount = 0;

                            if (mono.isSelected()) {
                                totalcount += countmono.get(i);
                                bpcount += countmonore.get(i);
                            }
                            if (di.isSelected()) {
                                totalcount += countdi.get(i);
                                bpcount += countdire.get(i);
                            }
                            if (tri.isSelected()) {
                                totalcount += counttri.get(i);
                                bpcount += counttrire.get(i);
                            }
                            if (tetra.isSelected()) {
                                totalcount += counttetra.get(i);
                                bpcount += counttetrare.get(i);
                            }
                            if (penta.isSelected()) {
                                totalcount += countpenta.get(i);
                                bpcount += countpentare.get(i);
                            }
                            if (hexa.isSelected()) {
                                totalcount += counthexa.get(i);
                                bpcount += counthexare.get(i);
                            }
                            try {
                                Class.forName("com.mysql.jdbc.Driver");
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            Connection con = null;
                            try {
                                con = DriverManager.getConnection("jdbc:mysql://localhost:3306", "biouser",
                                        "thesis2012");
                            } catch (SQLException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            Statement st = null;
                            try {
                                st = con.createStatement();
                            } catch (SQLException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            st.executeUpdate("use lobid");
                            seqcount = 0;

                            if (filetype.contains("organisms")) {
                                ResultSet rs = st.executeQuery(
                                        "SELECT end FROM slices INNER JOIN organism WHERE slices.org_id=organism.org_id AND organism.name='"
                                                + organisms[i] + "'");
                                while (rs.next()) {
                                    seqcount += Long.parseLong(rs.getString(1));
                                }
                            } else if (filetype.contains("local")) {
                                BufferedReader in = new BufferedReader(
                                        new FileReader("local/" + organisms[i] + "/index.txt"));
                                int count = countlines("local/" + organisms[i] + "/index.txt");
                                for (int c = 0; c < count; c++) {
                                    String temp = in.readLine();
                                    BufferedReader tmp = new BufferedReader(
                                            new FileReader("local/" + organisms[i] + "/" + temp + ".txt"));

                                    boolean eof = false;
                                    while (!eof) {

                                        String s = tmp.readLine();
                                        if (s != null) {
                                            seqcount += s.length();
                                        } else {
                                            eof = true;
                                        }
                                    }
                                    tmp.close();
                                }
                            }
                            int tempmono = countmonore.get(i);
                            int tempdi = countdire.get(i);
                            int temptri = counttrire.get(i);
                            int temptetra = counttetrare.get(i);
                            int temppenta = countpentare.get(i);
                            int temphexa = counthexare.get(i);
                            if (tempmono == 0)
                                tempmono = 1;
                            if (tempdi == 0)
                                tempdi = 1;
                            if (temptri == 0)
                                temptri = 1;
                            if (temptetra == 0)
                                temptetra = 1;
                            if (temppenta == 0)
                                temppenta = 1;
                            if (temphexa == 0)
                                temphexa = 1;

                            if (mono.isSelected()) {
                                Aperc += Amono.get(i);
                                Tperc += Tmono.get(i);
                                Gperc += Gmono.get(i);
                                Cperc += Cmono.get(i);

                                //lt.writeInt(countmono.get(i));lt.writeInt(countmonore.get(i));lt.writeFloat((float)Amono.get(i)*100/tempmono);lt.writeFloat((float)Tmono.get(i)*100/tempmono);lt.writeFloat((float)Gmono.get(i)*100/tempmono);lt.writeFloat((float)Cmono.get(i)*100/tempmono);lt.writeFloat((float) countmono.get(i) / totalcount);lt.writeFloat((float) countmonore.get(i) / seqcount);lt.writeFloat((float) countmonore.get(i) / bpcount);
                                stats.printf("|mono   |" + cell(Integer.toString(countmono.get(i)), 7) + "|"
                                        + cell(Integer.toString(countmonore.get(i)), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) countmono.get(i) / totalcount, 15) + "|"
                                        + cell((float) countmonore.get(i) / seqcount, 15) + "|"
                                        + cell((float) countmonore.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Amono.get(i) * 100) / (tempmono), 7),
                                        cell((float) (Tmono.get(i) * 100) / (tempmono), 7),
                                        cell((float) (Cmono.get(i) * 100) / (tempmono), 7),
                                        cell((float) (Gmono.get(i) * 100) / (tempmono), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>mono</b></td><td>" + countmono.get(i) + "</td><td>"
                                        + (countmonore.get(i)) + "</td><td>"
                                        + round.format((float) (Amono.get(i) * 100) / (tempmono)) + "</td><td>"
                                        + round.format((float) (Tmono.get(i) * 100) / (tempmono)) + "</td><td>"
                                        + round.format((float) (Cmono.get(i) * 100) / (tempmono)) + "</td><td>"
                                        + round.format((float) (Gmono.get(i) * 100) / (tempmono)) + "</td><td>"
                                        + round.format((float) countmono.get(i) / totalcount) + "</td><td>"
                                        + round.format((float) countmonore.get(i) / seqcount) + "</td><td>"
                                        + round.format((float) countmonore.get(i) / bpcount) + "</td></tr>");
                            }
                            if (di.isSelected()) {
                                Aperc += Adi.get(i);
                                Tperc += Tdi.get(i);
                                Gperc += Gdi.get(i);
                                Cperc += Cdi.get(i);

                                //lt.writeInt(countdi.get(i));lt.writeInt(countdi.get(i)re.get(i));lt.writeFloat((float)Adi.get(i)*100/tempdi);lt.writeFloat((float)Tdi.get(i)*100/tempdi);lt.writeFloat((float)Gdi.get(i)*100/tempdi);lt.writeFloat((float)Cdi.get(i)*100/tempdi);lt.writeFloat((float) countdi.get(i) / totalcount);lt.writeFloat((float) countdi.get(i)re.get(i) / seqcount);lt.writeFloat((float) countdi.get(i)re.get(i) / bpcount);
                                stats.printf(
                                        "|di     |" + cell(Integer.toString(countdi.get(i)), 7) + "|"
                                                + cell(Integer.toString(countdire.get(i)), 12) + "|%s|%s|%s|%s|"
                                                + cell((float) countdi.get(i) / totalcount, 15) + "|"
                                                + cell((float) countdi.get(i) / seqcount, 15) + "|"
                                                + cell((float) countdi.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Adi.get(i) * 100) / (tempdi), 7),
                                        cell((float) (Tdi.get(i) * 100) / (tempdi), 7),
                                        cell((float) (Cdi.get(i) * 100) / (tempdi), 7),
                                        cell((float) (Gdi.get(i) * 100) / (tempdi), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>di</b></td><td>" + countdi.get(i) + "</td><td>"
                                        + (countdire.get(i)) + "</td><td>"
                                        + round.format((float) (Adi.get(i) * 100) / (tempdi)) + "</td><td>"
                                        + round.format((float) (Tdi.get(i) * 100) / (tempdi)) + "</td><td>"
                                        + round.format((float) (Cdi.get(i) * 100) / (tempdi)) + "</td><td>"
                                        + round.format((float) (Gdi.get(i) * 100) / (tempdi)) + "</td><td>"
                                        + round.format((float) countdi.get(i) / totalcount) + "</td><td>"
                                        + round.format((float) countdire.get(i) / seqcount) + "</td><td>"
                                        + round.format((float) countdire.get(i) / bpcount) + "</td></tr>");
                            }
                            if (tri.isSelected()) {
                                Aperc += Atri.get(i);
                                Tperc += Ttri.get(i);
                                Gperc += Gtri.get(i);
                                Cperc += Ctri.get(i);
                                //lt.writeInt(counttri.get(i));lt.writeInt(counttrire.get(i).get(i));lt.writeFloat((float)Atri.get(i)*100/temptri);lt.writeFloat((float)Ttri.get(i)*100/temptri);lt.writeFloat((float)Gtri.get(i)*100/temptri);lt.writeFloat((float)Ctri.get(i)*100/temptri);lt.writeFloat((float) counttri.get(i) / totalcount);lt.writeFloat((float) counttrire.get(i).get(i) / seqcount);lt.writeFloat((float) counttrire.get(i).get(i) / bpcount);
                                stats.printf("|tri    |" + cell(Integer.toString(counttri.get(i)), 7) + "|"
                                        + cell(Integer.toString(counttrire.get(i)), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) counttri.get(i) / totalcount, 15) + "|"
                                        + cell((float) counttrire.get(i) / seqcount, 15) + "|"
                                        + cell((float) counttrire.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Atri.get(i) * 100) / (temptri), 7),
                                        cell((float) (Ttri.get(i) * 100) / (temptri), 7),
                                        cell((float) (Ctri.get(i) * 100) / (temptri), 7),
                                        cell((float) (Gtri.get(i) * 100) / (temptri), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>tri</b></td><td>" + counttri.get(i) + "</td><td>"
                                        + (counttrire.get(i)) + "</td><td>"
                                        + round.format((float) (Atri.get(i) * 100) / (temptri)) + "</td><td>"
                                        + round.format((float) (Ttri.get(i) * 100) / (temptri)) + "</td><td>"
                                        + round.format((float) (Ctri.get(i) * 100) / (temptri)) + "</td><td>"
                                        + round.format((float) (Gtri.get(i) * 100) / (temptri)) + "</td><td>"
                                        + round.format((float) counttri.get(i) / totalcount) + "</td><td>"
                                        + round.format((float) counttrire.get(i) / seqcount) + "</td><td>"
                                        + round.format((float) counttrire.get(i) / bpcount) + "</td></tr>");
                            }
                            if (tetra.isSelected()) {
                                Aperc += Atetra.get(i);
                                Tperc += Ttetra.get(i);
                                Gperc += Gtetra.get(i);
                                Cperc += Ctetra.get(i);
                                //lt.writeInt(counttetra.get(i));lt.writeInt(counttetrare.get(i));lt.writeFloat((float)Atetra.get(i)*100/temptetra);lt.writeFloat((float)Ttetra.get(i)*100/temptetra);lt.writeFloat((float)Gtetra.get(i)*100/temptetra);lt.writeFloat((float)Ctetra.get(i)*100/temptetra);lt.writeFloat((float) counttetra.get(i) / totalcount);lt.writeFloat((float) counttetrare.get(i) / seqcount);lt.writeFloat((float) counttetrare.get(i) / bpcount);
                                stats.printf("|tetra  |" + cell(Integer.toString(counttetra.get(i)), 7) + "|"
                                        + cell(Integer.toString(counttetrare.get(i)), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) counttetra.get(i) / totalcount, 15) + "|"
                                        + cell((float) counttetrare.get(i) / seqcount, 15) + "|"
                                        + cell((float) counttetrare.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Atetra.get(i) * 100) / (temptetra), 7),
                                        cell((float) (Ttetra.get(i) * 100) / (temptetra), 7),
                                        cell((float) (Ctetra.get(i) * 100) / (temptetra), 7),
                                        cell((float) (Gtetra.get(i) * 100) / (temptetra), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>tetra</b></td><td>" + counttetra.get(i) + "</td><td>"
                                        + (counttetrare.get(i)) + "</td><td>"
                                        + round.format((float) (Atetra.get(i) * 100) / (temptetra))
                                        + "</td><td>"
                                        + round.format((float) (Ttetra.get(i) * 100) / (temptetra))
                                        + "</td><td>"
                                        + round.format((float) (Ctetra.get(i) * 100) / (temptetra))
                                        + "</td><td>"
                                        + round.format((float) (Gtetra.get(i) * 100) / (temptetra))
                                        + "</td><td>" + round.format((float) counttetra.get(i) / totalcount)
                                        + "</td><td>" + round.format((float) counttetrare.get(i) / seqcount)
                                        + "</td><td>" + round.format((float) counttetrare.get(i) / bpcount)
                                        + "</td></tr>");
                            }
                            if (penta.isSelected()) {
                                Aperc += Apenta.get(i);
                                Tperc += Tpenta.get(i);
                                Gperc += Gpenta.get(i);
                                Cperc += Cpenta.get(i);
                                //lt.writeInt(countpenta.get(i));lt.writeInt(countpentare.get(i));lt.writeFloat((float)Apenta.get(i)*100/temppenta);lt.writeFloat((float)Tpenta.get(i)*100/temppenta);lt.writeFloat((float)Gpenta.get(i)*100/temppenta);lt.writeFloat((float)Cpenta.get(i)*100/temppenta);lt.writeFloat((float) countpenta.get(i) / totalcount);lt.writeFloat((float) countpentare.get(i) / seqcount);lt.writeFloat((float) countpentare.get(i) / bpcount);
                                stats.printf("|penta  |" + cell(Integer.toString(countpenta.get(i)), 7) + "|"
                                        + cell(Integer.toString(countpentare.get(i)), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) countpenta.get(i) / totalcount, 15) + "|"
                                        + cell((float) countpentare.get(i) / seqcount, 15) + "|"
                                        + cell((float) countpentare.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Apenta.get(i) * 100) / (temppenta), 7),
                                        cell((float) (Tpenta.get(i) * 100) / (temppenta), 7),
                                        cell((float) (Cpenta.get(i) * 100) / (temppenta), 7),
                                        cell((float) (Gpenta.get(i) * 100) / (temppenta), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>penta</b></td><td>" + countpenta.get(i) + "</td><td>"
                                        + (countpentare.get(i)) + "</td><td>"
                                        + round.format((float) (Apenta.get(i) * 100) / (temppenta))
                                        + "</td><td>"
                                        + round.format((float) (Tpenta.get(i) * 100) / (temppenta))
                                        + "</td><td>"
                                        + round.format((float) (Cpenta.get(i) * 100) / (temppenta))
                                        + "</td><td>"
                                        + round.format((float) (Gpenta.get(i) * 100) / (temppenta))
                                        + "</td><td>" + round.format((float) countpenta.get(i) / totalcount)
                                        + "</td><td>" + round.format((float) countpentare.get(i) / seqcount)
                                        + "</td><td>" + round.format((float) countpentare.get(i) / bpcount)
                                        + "</td></tr>");
                            }
                            if (hexa.isSelected()) {
                                Aperc += Ahexa.get(i);
                                Tperc += Thexa.get(i);
                                Gperc += Ghexa.get(i);
                                Cperc += Chexa.get(i);
                                //lt.writeInt(counthexa.get(i));lt.writeInt(counthexare.get(i));lt.writeFloat((float)Ahexa.get(i)*100/temphexa);lt.writeFloat((float)Thexa.get(i)*100/temphexa);lt.writeFloat((float)Ghexa.get(i)*100/temphexa);lt.writeFloat((float)Chexa.get(i)*100/temphexa);lt.writeFloat((float) counthexa.get(i) / totalcount);lt.writeFloat((float) counthexare.get(i) / seqcount);lt.writeFloat((float) counthexare.get(i) / bpcount);
                                stats.printf("|hexa   |" + cell(Integer.toString(counthexa.get(i)), 7) + "|"
                                        + cell(Integer.toString(counthexare.get(i)), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) counthexa.get(i) / totalcount, 15) + "|"
                                        + cell((float) counthexare.get(i) / seqcount, 15) + "|"
                                        + cell((float) counthexare.get(i) / bpcount, 15) + "|\n",
                                        cell((float) (Ahexa.get(i) * 100) / (temphexa), 7),
                                        cell((float) (Thexa.get(i) * 100) / (temphexa), 7),
                                        cell((float) (Chexa.get(i) * 100) / (temphexa), 7),
                                        cell((float) (Ghexa.get(i) * 100) / (temphexa), 7));
                                stats.println(
                                        "|-------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                                html.println("<tr><td><b>hexa</b></td><td>" + counthexa.get(i) + "</td><td>"
                                        + (counthexare.get(i)) + "</td><td>"
                                        + round.format((float) (Ahexa.get(i) * 100) / (temphexa)) + "</td><td>"
                                        + round.format((float) (Thexa.get(i) * 100) / (temphexa)) + "</td><td>"
                                        + round.format((float) (Chexa.get(i) * 100) / (temphexa)) + "</td><td>"
                                        + round.format((float) (Ghexa.get(i) * 100) / (temphexa)) + "</td><td>"
                                        + round.format((float) counthexa.get(i) / totalcount) + "</td><td>"
                                        + round.format((float) counthexare.get(i) / seqcount) + "</td><td>"
                                        + round.format((float) counthexare.get(i) / bpcount) + "</td></tr>");
                            }

                            if (mono.isSelected()) {
                                relfreq += (float) countmono.get(i) / totalcount;
                                abfreq += (float) countmonore.get(i) / bpcount;
                            }
                            if (di.isSelected()) {
                                relfreq += (float) countdi.get(i) / totalcount;
                                abfreq += (float) countdire.get(i) / bpcount;
                            }
                            if (tri.isSelected()) {
                                relfreq += (float) counttri.get(i) / totalcount;
                                abfreq += (float) counttrire.get(i) / bpcount;
                            }
                            if (tetra.isSelected()) {
                                relfreq += (float) counttetra.get(i) / totalcount;
                                abfreq += (float) counttetrare.get(i) / bpcount;
                            }
                            if (penta.isSelected()) {
                                relfreq += (float) countpenta.get(i) / totalcount;
                                abfreq += (float) countpentare.get(i) / bpcount;
                            }
                            if (hexa.isSelected()) {
                                relfreq += (float) counthexa.get(i) / totalcount;
                                abfreq += (float) counthexare.get(i) / bpcount;
                            }

                            lt.writeLong(seqcount);
                            lt.writeInt(totalcount);
                            lt.writeLong(bpcount);
                            lt.writeInt(Aperc);
                            lt.writeInt(Tperc);
                            lt.writeInt(Gperc);
                            lt.writeInt(Cperc);
                            stats.println("|TOTAL  |" + cell(Integer.toString(totalcount), 7) + "|"
                                    + cell(Long.toString(bpcount), 12) + "|"
                                    + cell((float) Aperc * 100 / bpcount, 7) + "|"
                                    + cell((float) Tperc * 100 / bpcount, 7) + "|"
                                    + cell((float) Cperc * 100 / bpcount, 7) + "|"
                                    + cell((float) Gperc * 100 / bpcount, 7) + "|" + cell(relfreq, 15) + "|"
                                    + cell((float) bpcount / seqcount, 15) + "|" + cell((float) abfreq, 15)
                                    + "|");
                            stats.println(
                                    "|_______|_______|____________|_______|_______|_______|_______|_______________|_______________|_______________|");
                            stats.println("Genome length (bp): " + seqcount);
                            stats.println("Relative Frequency: Count of each motif type / total SSR count");
                            stats.println("Abundance: bp of each motif type / total sequence bp");
                            stats.println(
                                    "Relative Abundance: bp of each motif type / total microsatellites bp");
                            stats.println();
                            stats.println();
                            stats.close();
                            lt.close();
                            html.println("<tr><td><b>TOTAL</b></td><td>" + totalcount + "</td><td>" + bpcount
                                    + "</td><td>" + round.format((float) Aperc * 100 / bpcount) + "</td><td>"
                                    + round.format((float) Tperc * 100 / bpcount) + "</td><td>"
                                    + round.format((float) Cperc * 100 / bpcount) + "</td><td>"
                                    + round.format((float) Gperc * 100 / bpcount) + "</td><td>"
                                    + round.format((float) relfreq) + "</td><td>"
                                    + round.format((float) bpcount / seqcount) + "</td><td>"
                                    + round.format((float) abfreq) + "</td></tr></table></html>");
                            html.close();

                        }

                    } catch (SQLException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (FileNotFoundException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        //msg.showMessageDialog(paneldown, "Update your selected species", "Error", JOptionPane.ERROR_MESSAGE);
                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    if (!gapisnumber && !minisnumber) {
                        msg.showMessageDialog(paneldown,
                                "Fill in Mismatch length for Imperfect SSRs \n and the minimum sequence length before the Mismatch length\n (Integers only)",
                                "Error", JOptionPane.ERROR_MESSAGE);
                    } else {
                        if (!gapisnumber) {
                            msg.showMessageDialog(paneldown,
                                    "Fill in Mismatch length for Imperfect SSRs (Integer only)", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (!minisnumber) {
                            msg.showMessageDialog(paneldown,
                                    "Fill in the minimum sequence length before the Mismatch length (Integer only)",
                                    "Error", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }

            }

            if (box3.isSelected()) {
                boolean lenisnumber;
                boolean gapisnumber;
                int minlen = 0;
                int gap = 0;
                if (!com.isSelected() && !incom.isSelected()) {
                    msg.showMessageDialog(paneldown, "Select a Compound SSR Option", "Error",
                            JOptionPane.ERROR_MESSAGE);
                } else {

                    try {
                        minlen = Integer.parseInt(score.getText());
                        lenisnumber = true;
                    } catch (NumberFormatException ex) {
                        lenisnumber = false;
                    }

                    try {
                        gap = Integer.parseInt(maxgapcomp.getText());
                        gapisnumber = true;
                    } catch (NumberFormatException ex) {
                        gapisnumber = false;
                    }

                    if (lenisnumber && gapisnumber) {

                        if (com.isSelected()) {
                            try {
                                getCompoundPerfectSSRs(organisms, minlen, flag, gap);
                            } catch (SQLException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                                //msg.showMessageDialog(paneldown, "Update your selected species", "Error", JOptionPane.ERROR_MESSAGE);
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        if (incom.isSelected()) {
                            try {
                                getImPerfectCompoundSSRs(organisms, minlen, flag, gap);
                            } catch (SQLException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                                //msg.showMessageDialog(paneldown, "Update your selected species", "Error", JOptionPane.ERROR_MESSAGE);
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    } else {
                        if (!lenisnumber) {
                            msg.showMessageDialog(paneldown, "Minimum length requires an Integer", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (!gapisnumber) {
                            msg.showMessageDialog(paneldown,
                                    "Inter-repeat Region between compound SSRs requires an Integer", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }
            }
            if (box1.isSelected() || box2.isSelected() || box3.isSelected() || com.isSelected()
                    || incom.isSelected()) {
                PrintWriter out = null;
                PrintWriter html = null;
                boolean orgs = true;
                DecimalFormat round = new DecimalFormat("#.###");
                //String file="";
                for (int i = 0; i < organisms.length; i++) {

                    String file = "organisms/" + organisms[i] + "/stats/" + "summary_statistics"
                            + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                    File stats = new File(file);
                    if (!stats.exists()) {
                        orgs = false;

                        file = "local/" + organisms[i] + "/stats/" + "summary_statistics"
                                + now.toString().replace(':', '_').replace(' ', '_') + ".txt";
                    }
                    try {

                        html = new PrintWriter(
                                new FileWriter(file.substring(0, file.indexOf(".")) + ".html", true));
                        html.println("<html><h1>******* SUMMARY TABLE *******</h1>");
                        html.println(
                                "<table border=\"1\"><tr><td>type</td><td><b>count</b></td><td><b>bp</b></td><td><b>A%</b></td><td><b>T%</b></td><td><b>C%</b></td><td><b>G%</b></td><td><b>Relative Frequency</b></td><td><b>Abundance</b></td><td><b>Relative Abundance</b></td></tr>");

                        out = new PrintWriter(new FileWriter(file, true));
                        out.println("******* SUMMARY TABLE *******");

                        out.println(
                                " _________________________________________________________________________________________________________________ ");
                        out.println(
                                "|            |       |            |       |       |       |       |   Relative    |               |   Relative    |");
                        out.println(
                                "|    type    | count |     bp     |   A%  |   T%  |   C%  |   G%  |   Frequency   |   Abundance   |   Abundance   |");
                        out.println(
                                "|============|=======|============|=======|=======|=======|=======|===============|===============|===============|");

                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    //TOTAL
                    long seqcount = 0;
                    int SSRcount = 0;
                    int SSRbpcount = 0;
                    int A = 0, T = 0, G = 0, C = 0;
                    float relfreq = 0;
                    float abfreq = 0;

                    //perfect
                    int pcount = 0;
                    long pbpcount = 0;
                    int Ap = 0, Tp = 0, Gp = 0, Cp = 0;
                    //imperfect
                    int imcount = 0;
                    long imbpcount = 0;
                    int Aim = 0, Tim = 0, Gim = 0, Cim = 0;

                    //compound perfect
                    int ccount = 0;
                    long cbpcount = 0;
                    int Ac = 0, Tc = 0, Gc = 0, Cc = 0;
                    //compound imperfect
                    int cicount = 0;
                    long cibpcount = 0;
                    int Aci = 0, Tci = 0, Gci = 0, Cci = 0;

                    if (box1.isSelected()) {
                        DataInputStream in = null;
                        if (orgs) {
                            try {
                                in = new DataInputStream(
                                        new BufferedInputStream(new FileInputStream("organisms/" + organisms[i]
                                                + "/data/" + now.toString().replace(':', '_').replace(' ', '_')
                                                + ".perf")));
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        } else {
                            try {
                                in = new DataInputStream(new BufferedInputStream(new FileInputStream("local/"
                                        + organisms[i] + "/data/"
                                        + now.toString().replace(':', '_').replace(' ', '_') + ".perf")));
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        try {
                            seqcount = in.readLong();
                            pcount = in.readInt();
                            pbpcount = in.readLong();
                            Ap = in.readInt();
                            Tp = in.readInt();
                            Gp = in.readInt();
                            Cp = in.readInt();
                            A += Ap;
                            T += Tp;
                            G += Gp;
                            C += Cp;

                            SSRcount += pcount;
                            SSRbpcount += pbpcount;
                            in.close();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    if (box2.isSelected()) {
                        DataInputStream in = null;
                        if (orgs) {
                            try {
                                in = new DataInputStream(
                                        new BufferedInputStream(new FileInputStream("organisms/" + organisms[i]
                                                + "/data/" + now.toString().replace(':', '_').replace(' ', '_')
                                                + ".imperf")));
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        } else {
                            try {
                                in = new DataInputStream(new BufferedInputStream(new FileInputStream("local/"
                                        + organisms[i] + "/data/"
                                        + now.toString().replace(':', '_').replace(' ', '_') + ".imperf")));
                            } catch (FileNotFoundException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        try {
                            seqcount = in.readLong();
                            imcount = in.readInt();
                            imbpcount = in.readLong();
                            Aim = in.readInt();
                            Tim = in.readInt();
                            Gim = in.readInt();
                            Cim = in.readInt();
                            A += Aim;
                            T += Tim;
                            G += Gim;
                            C += Cim;

                            SSRcount += imcount;
                            SSRbpcount += imbpcount;
                            in.close();
                        } catch (IOException ex) {
                            Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    if (box3.isSelected()) {
                        if (com.isSelected()) {
                            DataInputStream in = null;
                            if (orgs) {
                                try {
                                    in = new DataInputStream(new BufferedInputStream(
                                            new FileInputStream("organisms/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".compp")));
                                } catch (FileNotFoundException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                            } else {
                                try {
                                    in = new DataInputStream(new BufferedInputStream(
                                            new FileInputStream("local/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".compp")));
                                } catch (FileNotFoundException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                            }
                            try {
                                seqcount = in.readLong();
                                ccount = in.readInt();
                                cbpcount = in.readInt();
                                Ac = in.readInt();
                                Tc = in.readInt();
                                Gc = in.readInt();
                                Cc = in.readInt();
                                A += Ac;
                                T += Tc;
                                G += Gc;
                                C += Cc;

                                SSRcount += ccount;
                                SSRbpcount += cbpcount;
                                in.close();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        if (incom.isSelected()) {
                            DataInputStream in = null;
                            if (orgs) {
                                try {
                                    in = new DataInputStream(new BufferedInputStream(
                                            new FileInputStream("organisms/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".compim")));
                                } catch (FileNotFoundException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                            } else {
                                try {
                                    in = new DataInputStream(new BufferedInputStream(
                                            new FileInputStream("local/" + organisms[i] + "/data/"
                                                    + now.toString().replace(':', '_').replace(' ', '_')
                                                    + ".compim")));
                                } catch (FileNotFoundException ex) {
                                    Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null,
                                            ex);
                                }
                            }
                            try {
                                seqcount = in.readLong();
                                cicount = in.readInt();
                                cibpcount = in.readInt();
                                Aci = in.readInt();
                                Tci = in.readInt();
                                Gci = in.readInt();
                                Cci = in.readInt();
                                A += Aci;
                                T += Tci;
                                G += Gci;
                                C += Cci;

                                SSRcount += cicount;
                                SSRbpcount += cibpcount;
                                in.close();
                            } catch (IOException ex) {
                                Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }

                    if (box1.isSelected()) {
                        relfreq += (float) pcount / SSRcount;
                        abfreq += (float) pbpcount / SSRbpcount;
                        out.printf(
                                "|Perfect     |" + cell(Integer.toString(pcount), 7) + "|"
                                        + cell(Long.toString(pbpcount), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) pcount / SSRcount, 15) + "|"
                                        + cell((float) pbpcount / seqcount, 15) + "|"
                                        + cell((float) pbpcount / SSRbpcount, 15) + "|\n",
                                cell((float) (Ap * 100) / (SSRbpcount), 7),
                                cell((float) (Tp * 100) / (SSRbpcount), 7),
                                cell((float) (Cp * 100) / (SSRbpcount), 7),
                                cell((float) (Gp * 100) / (SSRbpcount), 7));
                        out.println(
                                "|------------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                        html.println("<tr><td><b>Perfect</b></td><td>" + pcount + "</td><td>" + pbpcount
                                + "</td><td>" + round.format((float) Ap * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Tp * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Cp * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Gp * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) pcount / SSRcount) + "</td><td>"
                                + round.format((float) pbpcount / seqcount) + "</td><td>"
                                + round.format((float) pbpcount / SSRbpcount) + "</td></tr>");
                    }
                    if (box2.isSelected()) {
                        relfreq += (float) imcount / SSRcount;
                        abfreq += (float) imbpcount / SSRbpcount;
                        out.printf(
                                "|Imperfect   |" + cell(Integer.toString(imcount), 7) + "|"
                                        + cell(Long.toString(imbpcount), 12) + "|%s|%s|%s|%s|"
                                        + cell((float) imcount / SSRcount, 15) + "|"
                                        + cell((float) imbpcount / seqcount, 15) + "|"
                                        + cell((float) imbpcount / SSRbpcount, 15) + "|\n",
                                cell((float) (Aim * 100) / (SSRbpcount), 7),
                                cell((float) (Tim * 100) / (SSRbpcount), 7),
                                cell((float) (Cim * 100) / (SSRbpcount), 7),
                                cell((float) (Gim * 100) / (SSRbpcount), 7));
                        out.println(
                                "|------------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                        html.println("<tr><td><b>Imperfect</b></td><td>" + imcount + "</td><td>" + imbpcount
                                + "</td><td>" + round.format((float) Aim * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Tim * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Cim * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) Gim * 100 / SSRbpcount) + "</td><td>"
                                + round.format((float) imcount / SSRcount) + "</td><td>"
                                + round.format((float) imbpcount / seqcount) + "</td><td>"
                                + round.format((float) imbpcount / SSRbpcount) + "</td></tr>");
                    }
                    if (box3.isSelected()) {
                        if (com.isSelected()) {
                            abfreq += (float) cbpcount / SSRbpcount;
                            relfreq += (float) ccount / SSRcount;
                            out.printf(
                                    "|Compound Per|" + cell(Integer.toString(ccount), 7) + "|"
                                            + cell(Long.toString(cbpcount), 12) + "|%s|%s|%s|%s|"
                                            + cell((float) ccount / SSRcount, 15) + "|"
                                            + cell((float) cbpcount / seqcount, 15) + "|"
                                            + cell((float) cbpcount / SSRbpcount, 15) + "|\n",
                                    cell((float) (Ac * 100) / (SSRbpcount), 7),
                                    cell((float) (Tc * 100) / (SSRbpcount), 7),
                                    cell((float) (Cc * 100) / (SSRbpcount), 7),
                                    cell((float) (Gc * 100) / (SSRbpcount), 7));
                            out.println(
                                    "|------------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                            html.println("<tr><td><b>Compound Perf.</b></td><td>" + ccount + "</td><td>"
                                    + cbpcount + "</td><td>" + round.format((float) Ac * 100 / SSRbpcount)
                                    + "</td><td>" + round.format((float) Tc * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) Cc * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) Gc * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) ccount / SSRcount) + "</td><td>"
                                    + round.format((float) cbpcount / seqcount) + "</td><td>"
                                    + round.format((float) cbpcount / SSRbpcount) + "</td></tr>");
                        }
                        if (incom.isSelected()) {
                            abfreq += (float) cibpcount / SSRbpcount;
                            relfreq += (float) cicount / SSRcount;
                            out.printf(
                                    "|Compound Imp|" + cell(Integer.toString(cicount), 7) + "|"
                                            + cell(Long.toString(cibpcount), 12) + "|%s|%s|%s|%s|"
                                            + cell((float) cicount / SSRcount, 15) + "|"
                                            + cell((float) cibpcount / seqcount, 15) + "|"
                                            + cell((float) cibpcount / SSRbpcount, 15) + "|\n",
                                    cell((float) (Aci * 100) / (SSRbpcount), 7),
                                    cell((float) (Tci * 100) / (SSRbpcount), 7),
                                    cell((float) (Cci * 100) / (SSRbpcount), 7),
                                    cell((float) (Gci * 100) / (SSRbpcount), 7));
                            out.println(
                                    "|------------|-------|------------|-------|-------|-------|-------|---------------|---------------|---------------|");
                            html.println("<tr><td><b>Compound Imperf.</b></td><td>" + cicount + "</td><td>"
                                    + cibpcount + "</td><td>" + round.format((float) Aci * 100 / SSRbpcount)
                                    + "</td><td>" + round.format((float) Tci * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) Cci * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) Gci * 100 / SSRbpcount) + "</td><td>"
                                    + round.format((float) cicount / SSRcount) + "</td><td>"
                                    + round.format((float) cibpcount / seqcount) + "</td><td>"
                                    + round.format((float) cibpcount / SSRbpcount) + "</td></tr>");
                        }
                    }

                    out.println("|TOTAL       |" + cell(Integer.toString(SSRcount), 7) + "|"
                            + cell(Long.toString(SSRbpcount), 12) + "|" + cell((float) A * 100 / SSRbpcount, 7)
                            + "|" + cell((float) T * 100 / SSRbpcount, 7) + "|"
                            + cell((float) C * 100 / SSRbpcount, 7) + "|"
                            + cell((float) G * 100 / SSRbpcount, 7) + "|" + cell(relfreq, 15) + "|"
                            + cell((float) SSRbpcount / seqcount, 15) + "|" + cell((float) abfreq, 15) + "|");
                    out.println(
                            "|____________|_______|____________|_______|_______|_______|_______|_______________|_______________|_______________|");
                    out.println("Genome length (bp): " + seqcount);
                    out.println("Relative Frequency: Count of each motif type / total SSR count");
                    out.println("Abundance: bp of each motif type / total sequence bp");
                    out.println("Relative Abundance: bp of each motif type / total microsatellites bp");
                    out.println();
                    out.println();
                    out.close();
                    html.println("<tr><td><b>TOTAL</b></td><td>" + SSRcount + "</td><td>" + SSRbpcount
                            + "</td><td>" + round.format((float) A * 100 / SSRbpcount) + "</td><td>"
                            + round.format((float) T * 100 / SSRbpcount) + "</td><td>"
                            + round.format((float) C * 100 / SSRbpcount) + "</td><td>"
                            + round.format((float) G * 100 / SSRbpcount) + "</td><td>"
                            + round.format((float) relfreq) + "</td><td>"
                            + round.format((float) SSRbpcount / seqcount) + "</td><td>"
                            + round.format((float) abfreq) + "</td></tr></table></html>");
                    html.close();

                    try {
                        Runtime.getRuntime().exec("notepad " + file);
                    } catch (IOException ex) {
                        Logger.getLogger(StatsSelection.class.getName()).log(Level.SEVERE, null, ex);
                    }

                }

            }

            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

        }
    });

    selectsp = new JButton("Select new Species");
    selectsp.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            try {
                input_frame frame = new input_frame();
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(updateframe.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(updateframe.class.getName()).log(Level.SEVERE, null, ex);
            }
            dispose();
        }
    });

    quit = new JButton("Quit");
    quit.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    tab = new JTabbedPane();
    tab.setSize(790, 590);

    // about us panel
    ImageIcon image = new ImageIcon("miga.png");
    JLabel label = new JLabel("", image, JLabel.CENTER);
    contact = new JLabel(
            "<html><b><p>Machine Learning and Knowledge Discovery Group</p><p>Computer Science Department</p><p>Aristotle University of Thessaloniki</p><p> </p><p>In collaboration with the laboratory of</p><p> </p><p>Population Genetics of Animal Organisms</p><p>Department of Genetics, Development and Molecular Biology</p><p>School of Biology</p><p>Aristotle University of Thessaloniki</p><p> </p><p> </p><p>For any comments or information please contact with:</p><p><a href=\"mailto:ikavak@csd.auth.gr\">ikavak@csd.auth.gr</a></p></b></html>");
    about = new JPanel();
    about.setLayout(new GridBagLayout());
    GridBagConstraints ab = new GridBagConstraints();

    ab.fill = GridBagConstraints.WEST;
    ab.weightx = 0.5;
    ab.weighty = 0.5;
    ab.gridx = 0;
    ab.gridy = 0;
    about.add(label, ab);

    ab.fill = GridBagConstraints.WEST;
    ab.weightx = 0.5;
    ab.weighty = 0.5;
    ab.gridx = 0;
    ab.gridy = 1;
    about.add(contact, ab);

    //end of about us 

    //below are the rest of th panels

    paneltop = new JPanel();
    TitledBorder t = BorderFactory.createTitledBorder("Select Period");
    paneltop.setBorder(t);

    paneltop.setLayout(new GridBagLayout());
    GridBagConstraints pt = new GridBagConstraints();

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = 0;
    paneltop.add(mono, pt);

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = -1;
    paneltop.add(di, pt);

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = -2;
    paneltop.add(tri, pt);

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = -3;
    paneltop.add(tetra, pt);

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = -4;
    paneltop.add(penta, pt);

    pt.fill = GridBagConstraints.HORIZONTAL;
    pt.weightx = 0.5;
    pt.weighty = 0.5;
    pt.gridx = 0;
    pt.gridy = -5;
    paneltop.add(hexa, pt);

    panel1 = new JPanel();
    TitledBorder title = BorderFactory.createTitledBorder("Type");
    panel1.setBorder(title);

    panel1.setLayout(new GridBagLayout());
    GridBagConstraints a = new GridBagConstraints();

    a.fill = GridBagConstraints.HORIZONTAL;
    a.weightx = 0.5;
    a.weighty = 0.5;
    a.gridx = 0;
    a.gridy = 0;
    panel1.add(select, a);

    a.fill = GridBagConstraints.HORIZONTAL;
    a.weightx = 0.5;
    a.weighty = 0.5;
    a.gridx = 0;
    a.gridy = -1;
    panel1.add(box1, a);

    a.fill = GridBagConstraints.HORIZONTAL;
    a.weightx = 0.5;
    a.weighty = 0.5;
    a.gridx = 0;
    a.gridy = -2;
    panel1.add(box2, a);

    a.fill = GridBagConstraints.HORIZONTAL;
    a.weightx = 0.5;
    a.weighty = 0.5;
    a.gridx = 0;
    a.gridy = -3;
    panel1.add(box3, a);

    panel2 = new JPanel();
    panel2.setVisible(false);
    TitledBorder title2 = BorderFactory.createTitledBorder("More Options");
    panel2.setBorder(title2);

    panel2.setLayout(new GridBagLayout());
    GridBagConstraints b = new GridBagConstraints();

    b.fill = GridBagConstraints.HORIZONTAL;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 0;
    b.gridy = 0;
    panel2.add(minimumssrlen, b);

    b.fill = GridBagConstraints.CENTER;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 1;
    b.gridy = 0;
    panel2.add(score, b);

    b.fill = GridBagConstraints.HORIZONTAL;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 0;
    b.gridy = -1;
    panel2.add(gapmax, b);

    b.fill = GridBagConstraints.CENTER;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 1;
    b.gridy = -1;
    panel2.add(max, b);

    b.fill = GridBagConstraints.HORIZONTAL;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 0;
    b.gridy = -2;
    panel2.add(minlenpregap, b);

    b.fill = GridBagConstraints.CENTER;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 1;
    b.gridy = -2;
    panel2.add(minpregap, b);

    b.fill = GridBagConstraints.HORIZONTAL;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 0;
    b.gridy = -3;
    panel2.add(gapcomp, b);

    b.fill = GridBagConstraints.CENTER;
    b.weightx = 0.5;
    b.weighty = 0.5;
    b.gridx = 1;
    b.gridy = -3;
    panel2.add(maxgapcomp, b);

    paneldownleft = new JPanel();
    paneldownleft.setVisible(false);
    TitledBorder titledl = BorderFactory.createTitledBorder("Compound SSR options");
    paneldownleft.setBorder(titledl);
    paneldownleft.setLayout(new GridBagLayout());

    GridBagConstraints dl = new GridBagConstraints();

    dl.fill = GridBagConstraints.CENTER;
    dl.weightx = 0.5;
    dl.weighty = 0.5;
    dl.gridx = 0;
    dl.gridy = 0;
    paneldownleft.add(com, dl);

    dl.fill = GridBagConstraints.CENTER;
    dl.weightx = 0.5;
    dl.weighty = 0.5;
    dl.gridx = 0;
    dl.gridy = -1;
    paneldownleft.add(incom, dl);

    paneldownright = new JPanel();
    paneldownright.setLayout(new GridBagLayout());
    GridBagConstraints dr = new GridBagConstraints();

    dr.fill = GridBagConstraints.CENTER;
    dr.weightx = 0.5;
    dr.weighty = 0.5;
    dr.gridx = 0;
    dr.gridy = 0;
    paneldownright.add(show, dr);

    dr.fill = GridBagConstraints.CENTER;
    dr.weightx = 0.5;
    dr.weighty = 0.5;
    dr.gridx = 0;
    dr.gridy = -1;
    paneldownright.add(selectsp, dr);

    dr.fill = GridBagConstraints.CENTER;
    dr.weightx = 0.5;
    dr.weighty = 0.5;
    dr.gridx = 0;
    dr.gridy = -2;
    paneldownright.add(quit, dr);

    panelup = new JPanel();
    TitledBorder titleup = BorderFactory.createTitledBorder("Statistics");
    panelup.setBorder(titleup);

    panelup.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 0;
    c.gridy = 0;
    panelup.add(paneltop, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 1;
    c.gridy = 0;
    panelup.add(panel1, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 0;
    c.gridy = -1;
    panelup.add(paneldownleft, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 1;
    c.gridy = -1;
    panelup.add(panel2, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 0;
    c.gridy = -2;
    panelup.add(paneldownright, c);

    TitledBorder s = BorderFactory.createTitledBorder("Standardization");
    std.setBorder(s);
    std.add(no_st);
    std.add(part_st);
    std.add(full_st);
    std.setEnabled(false);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.weighty = 0.5;
    c.gridx = 0;
    c.gridy = -3;
    panelup.add(std, c);

    tab.add(panelup, "Statistics");

    panelshow = new JPanel();
    TitledBorder ps = BorderFactory.createTitledBorder("Sequence Retrieval");
    panelshow.setBorder(ps);

    panelshow.setLayout(new GridBagLayout());
    GridBagConstraints psg = new GridBagConstraints();

    panelshowup = new JPanel();

    panelshowup.setLayout(new GridBagLayout());
    GridBagConstraints p = new GridBagConstraints();

    p.fill = GridBagConstraints.WEST;
    p.weightx = 0.5;
    p.weighty = 0.5;
    p.gridx = 0;
    p.gridy = 0;
    panelshowup.add(lab, p);

    panelshowd = new JPanel();

    panelshowd.setLayout(new GridBagLayout());
    GridBagConstraints pd = new GridBagConstraints();

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -1;
    panelshowd.add(startlab, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -1;
    panelshowd.add(startnum, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -2;
    panelshowd.add(endlab, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -2;
    panelshowd.add(endnum, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -3;
    panelshowd.add(titlelab, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -3;
    panelshowd.add(titlef, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -4;
    panelshowd.add(flk, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -4;
    panelshowd.add(new JLabel(" "), pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -5;
    panelshowd.add(flankst, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -5;
    panelshowd.add(flankstn, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 0;
    pd.gridy = -6;
    panelshowd.add(flankend, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -6;
    panelshowd.add(flankendn, pd);

    pd.fill = GridBagConstraints.CENTER;
    pd.weightx = 0.5;
    pd.weighty = 0.5;
    pd.gridx = 1;
    pd.gridy = -7;
    panelshowd.add(retrieve, pd);

    psg.fill = GridBagConstraints.CENTER;
    psg.weightx = 0.5;
    psg.weighty = 0.5;
    psg.gridx = 0;
    psg.gridy = 0;
    panelshow.add(panelshowup, psg);

    psg.fill = GridBagConstraints.CENTER;
    psg.weightx = 0.5;
    psg.weighty = 0.5;
    psg.gridx = 0;
    psg.gridy = -1;
    panelshow.add(panelshowd, psg);

    psg.fill = GridBagConstraints.CENTER;
    psg.weightx = 0.5;
    psg.weighty = 0.5;
    psg.gridx = 0;
    psg.gridy = -2;
    panelshow.add(sbrText, psg);

    tab.add(panelshow, "Sequence Retrieval");
    tab.add(about, "About us");
    add(tab);
    setVisible(true);

}

From source file:src.gui.ItSIMPLE.java

/**
 * This method creates the panel for all analysis functionalities
 * @return //from  w w w  . j  a v  a  2 s .  co  m
 */
private JPanel getAnalysisPane() {

    if (analysisPane == null) {
        analysisPane = new JPanel(new BorderLayout());

        //tabbed panel for distinct analysis context
        //TODO: in the future this is going to be just one panel.
        // a tabbed panel won't be necessary any more
        JTabbedPane analysisTabbedPane = new JTabbedPane();
        analysisTabbedPane.setTabPlacement(JTabbedPane.TOP);
        analysisTabbedPane.addTab("General", getAnalysisSplitPane());
        analysisTabbedPane.addTab("Petri Net", getPetriSplitPane());

        //status bar for the analysis processes
        analysisStatusBar = new JLabel("Status:");
        analysisStatusBar.setHorizontalAlignment(SwingConstants.RIGHT);
        JPanel bottomPlanSimPane = new JPanel(new BorderLayout());
        bottomPlanSimPane.add(analysisStatusBar, BorderLayout.CENTER);

        //analysisPane.add(getAnalysisSplitPane(), BorderLayout.CENTER);
        analysisPane.add(analysisTabbedPane, BorderLayout.CENTER);
        analysisPane.add(bottomPlanSimPane, BorderLayout.SOUTH);

    }

    return analysisPane;
}

From source file:com.peterbochs.PeterBochsDebugger.java

private JTabbedPane getJTabbedPane5() {
    if (jTabbedPane5 == null) {
        jTabbedPane5 = new JTabbedPane();
    }
    return jTabbedPane5;
}

From source file:src.gui.ItSIMPLE.java

/**
 * @return Returns the planAnalysisFramePanel.
 *//*from w  ww.j  a  v a2 s  .  com*/
private ItFramePanel getPlanAnalysisFramePanel() {
    if (planAnalysisFramePanel == null) {
        planAnalysisFramePanel = new ItFramePanel(":: Plan Analysis", ItFramePanel.NO_MINIMIZE_MAXIMIZE);

        // tool bar
        JToolBar chartsToolBar = new JToolBar();
        chartsToolBar.add(new JButton(drawChartAction));

        // charts panel
        chartsPanel = new JPanel();
        chartsPanel.setLayout(new BoxLayout(chartsPanel, BoxLayout.Y_AXIS));

        ItFramePanel variableSelectionPanel = new ItFramePanel(".: Select variables to be tracked",
                ItFramePanel.NO_MINIMIZE_MAXIMIZE);
        //variableSelectionPanel.setBackground(new Color(151,151,157));

        JSplitPane split = new JSplitPane();
        split.setContinuousLayout(true);
        split.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
        split.setDividerLocation(2 * screenSize.height / 3);

        split.setDividerSize(8);
        //split.setPreferredSize(new Dimension(screenSize.width/4-20, screenSize.height/2 - 50));
        //split.setPreferredSize(new Dimension(screenSize.width/4-20, 120));
        split.setLeftComponent(new JScrollPane(variablesPlanTree));
        split.setRightComponent(new JScrollPane(selectedVariablesPlanTree));

        variableSelectionPanel.setContent(split, false);
        //variableSelectionPanel.setParentSplitPane()

        //JPanel variableSelectionPanel  = new JPanel(new BorderLayout());
        //variableSelectionPanel.add(new JScrollPane(variablesPlanTree), BorderLayout.CENTER);
        //variableSelectionPanel.add(new JScrollPane(selectedVariablesPlanTree), BorderLayout.EAST);

        ItFramePanel variableGraphPanel = new ItFramePanel(".: Chart", ItFramePanel.NO_MINIMIZE_MAXIMIZE);
        variableGraphPanel.setContent(chartsPanel, true);

        JSplitPane mainvariablesplit = new JSplitPane();
        mainvariablesplit.setContinuousLayout(true);
        mainvariablesplit.setOrientation(JSplitPane.VERTICAL_SPLIT);
        mainvariablesplit.setDividerLocation(150);
        mainvariablesplit.setDividerSize(8);
        //mainvariablesplit.setPreferredSize(new Dimension(screenSize.width/4-20, screenSize.height/2 - 50));
        mainvariablesplit.setTopComponent(variableSelectionPanel);
        mainvariablesplit.setBottomComponent(variableGraphPanel);

        // main charts panel - used to locate the tool bar above the charts panel
        JPanel mainChartsPanel = new JPanel(new BorderLayout());
        mainChartsPanel.add(chartsToolBar, BorderLayout.NORTH);
        //mainChartsPanel.add(new JScrollPane(chartsPanel), BorderLayout.CENTER);
        mainChartsPanel.add(mainvariablesplit, BorderLayout.CENTER);

        //Results
        planInfoEditorPane = new JEditorPane();
        planInfoEditorPane.setContentType("text/html");
        planInfoEditorPane.setEditable(false);
        planInfoEditorPane.setCursor(new Cursor(Cursor.TEXT_CURSOR));
        planInfoEditorPane.setBackground(Color.WHITE);

        JPanel resultsPanel = new JPanel(new BorderLayout());

        JToolBar resultsToolBar = new JToolBar();
        resultsToolBar.setRollover(true);

        JButton planReportButton = new JButton("View Full Report",
                new ImageIcon("resources/images/viewreport.png"));
        planReportButton.setToolTipText("<html>View full plan report.<br> For multiple plans you will need "
                + "access to the Internet.<br> The components used in the report require such access (no data is "
                + "sent through the Internet).</html>");
        planReportButton.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Opens html with defaut browser
                String path = "resources/report/Report.html";
                File report = new File(path);
                path = report.getAbsolutePath();
                try {
                    BrowserLauncher launcher = new BrowserLauncher();
                    launcher.openURLinBrowser("file://" + path);
                } catch (BrowserLaunchingInitializingException ex) {
                    Logger.getLogger(ItSIMPLE.class.getName()).log(Level.SEVERE, null, ex);
                    appendOutputPanelText("ERROR. Problem while trying to open the default browser. \n");
                } catch (UnsupportedOperatingSystemException ex) {
                    Logger.getLogger(ItSIMPLE.class.getName()).log(Level.SEVERE, null, ex);
                    appendOutputPanelText("ERROR. Problem while trying to open the default browser. \n");
                }
            }
        });
        resultsToolBar.add(planReportButton);

        resultsToolBar.addSeparator();
        JButton planReportDataButton = new JButton("Save Report Data",
                new ImageIcon("resources/images/savePDDL.png"));
        planReportDataButton.setToolTipText("<html>Save report data to file</html>");
        planReportDataButton.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Save report data
                if (solveResult != null) {
                    Element lastOpenFolderElement = itSettings.getChild("generalSettings")
                            .getChild("lastOpenFolder");
                    JFileChooser fc = new JFileChooser(lastOpenFolderElement.getText());
                    fc.setDialogTitle("Save Report Data");
                    fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
                    fc.setFileFilter(new XMLFileFilter());

                    int returnVal = fc.showSaveDialog(ItSIMPLE.this);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        File selectedFile = fc.getSelectedFile();
                        String path = selectedFile.getPath();

                        if (!path.toLowerCase().endsWith(".xml")) {
                            path += ".xml";
                        }
                        //save file (xml)
                        try {
                            FileWriter file = new FileWriter(path);
                            file.write(XMLUtilities.toString(solveResult));
                            file.close();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }

                        //Save as a last open folder
                        String folder = selectedFile.getParent();
                        //Element lastOpenFolderElement = itSettings.getChild("generalSettings").getChild("lastOpenFolder");
                        lastOpenFolderElement.setText(folder);
                        XMLUtilities.writeToFile("resources/settings/itSettings.xml", itSettings.getDocument());

                        //Ask if the user wants to save plans individually too.
                        boolean needToSavePlans = false;
                        int option = JOptionPane.showOptionDialog(instance,
                                "<html><center>Do you also want to save the plans"
                                        + "<br>in individual files?</center></html>",
                                "Save plans", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                                null, null);
                        switch (option) {
                        case JOptionPane.YES_OPTION: {
                            needToSavePlans = true;
                        }
                            break;
                        case JOptionPane.NO_OPTION: {
                            needToSavePlans = false;
                        }
                            break;
                        }

                        if (needToSavePlans) {
                            //Close Open tabs
                            List<?> problems = null;
                            try {
                                XPath ppath = new JDOMXPath("project/domains/domain/problems/problem");
                                problems = ppath.selectNodes(solveResult);
                            } catch (JaxenException e2) {
                                e2.printStackTrace();
                            }

                            for (int i = 0; i < problems.size(); i++) {
                                Element problem = (Element) problems.get(i);
                                //create a folder for each problem and put all plans inside as xml files
                                String folderName = problem.getChildText("name");
                                String folderPath = selectedFile.getAbsolutePath()
                                        .replace(selectedFile.getName(), folderName);
                                //System.out.println(folderPath);
                                File planfolder = new File(folderPath);
                                boolean canSavePlan = false;
                                try {
                                    if (planfolder.mkdir()) {
                                        System.out.println("Directory '" + folderPath + "' created.");
                                        canSavePlan = true;
                                    } else {
                                        System.out.println("Directory '" + folderPath + "' was not created.");
                                    }

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

                                if (canSavePlan) {
                                    Element plans = problem.getChild("plans");
                                    for (Iterator<Element> it = plans.getChildren("xmlPlan").iterator(); it
                                            .hasNext();) {
                                        Element eaplan = it.next();
                                        Element theplanner = eaplan.getChild("planner");
                                        //save file (xml)
                                        String planFileName = "solution" + theplanner.getChildText("name") + "-"
                                                + theplanner.getChildText("version") + "-"
                                                + Integer.toString(plans.getChildren().indexOf(eaplan))
                                                + ".xml";
                                        String planPath = folderPath + File.separator + planFileName;
                                        /*
                                        try {
                                            FileWriter planfile = new FileWriter(planPath);
                                            planfile.write(XMLUtilities.toString(eaplan));
                                            planfile.close();
                                            System.out.println("File '" + planPath + "' created.");
                                        } catch (IOException e1) {
                                            e1.printStackTrace();
                                        }
                                        *
                                        */
                                        if (eaplan.getChild("plan").getChildren().size() > 0) {

                                            //TODO: save the plan in PDDL too. It should be done through the XPDDL/PDDL classes
                                            String pddlplan = ToXPDDL.XMLtoXPDDLPlan(eaplan);
                                            String planFileNamePDDL = "solution"
                                                    + theplanner.getChildText("name") + "-"
                                                    + theplanner.getChildText("version") + "-"
                                                    + Integer.toString(plans.getChildren().indexOf(eaplan))
                                                    + ".pddl";
                                            String planPathPDDL = folderPath + File.separator
                                                    + planFileNamePDDL;

                                            //String cfolderPath = selectedFile.getAbsolutePath().replace(selectedFile.getName(), "");
                                            //String planFileNamePDDL = theplanner.getChildText("name")+"-"+theplanner.getChildText("version") + "-" + folderName+"-solution.pddl";
                                            //String planPathPDDL = cfolderPath + File.separator + planFileNamePDDL;
                                            //if (!theplanner.getChildText("name").contains("MIPS")){
                                            try {
                                                FileWriter planfile = new FileWriter(planPathPDDL);
                                                planfile.write(pddlplan);
                                                planfile.close();
                                                System.out.println("File '" + planPathPDDL + "' created.");
                                            } catch (IOException e1) {
                                                e1.printStackTrace();
                                            }
                                        } //}

                                    }

                                }

                            }
                        }

                    }
                } else {
                    appendOutputPanelText(">> No report data available to save! \n");
                }

            }
        });
        resultsToolBar.add(planReportDataButton);

        JButton openPlanReportDataButton = new JButton("Open Report Data",
                new ImageIcon("resources/images/openreport.png"));
        openPlanReportDataButton.setToolTipText("<html>Open report data to file</html>");
        openPlanReportDataButton.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                planSimStatusBar.setText("Status: Opening File...");
                appendOutputPanelText(">> Opening File... \n");
                //Open report data
                Element lastOpenFolderElement = itSettings.getChild("generalSettings")
                        .getChild("lastOpenFolder");
                JFileChooser fc = new JFileChooser(lastOpenFolderElement.getText());
                fc.setDialogTitle("Open Report Data");
                fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
                fc.setFileFilter(new XMLFileFilter());

                int returnVal = fc.showOpenDialog(ItSIMPLE.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {

                    File file = fc.getSelectedFile();
                    // Get itSIMPLE itSettings from itSettings.xml
                    org.jdom.Document resultsDoc = null;
                    try {
                        resultsDoc = XMLUtilities.readFromFile(file.getPath());
                        solveResult = resultsDoc.getRootElement();
                        //XMLUtilities.printXML(solveResult);
                        if (solveResult.getName().equals("projects")) {

                            String report = PlanAnalyzer.generatePlannersComparisonReport(solveResult);
                            String comparisonReport = PlanAnalyzer
                                    .generateFullPlannersComparisonReport(solveResult);
                            //Save Comparison Report file
                            saveFile("resources/report/Report.html", comparisonReport);
                            setPlanInfoPanelText(report);
                            setPlanEvaluationInfoPanelText("");
                            appendOutputPanelText(">> Report data read! \n");

                            //My experiments
                            PlanAnalyzer.myAnalysis(itPlanners.getChild("planners"), solveResult);
                        }
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }

                    //Save as a last open folder
                    String folder = fc.getSelectedFile().getParent();
                    lastOpenFolderElement.setText(folder);
                    XMLUtilities.writeToFile("resources/settings/itSettings.xml", itSettings.getDocument());

                } else {
                    planSimStatusBar.setText("Status:");
                    appendOutputPanelText(">> Canceled \n");
                }

            }
        });
        resultsToolBar.add(openPlanReportDataButton);

        JButton compareProjectReportDataButton = new JButton("Compare Project Data",
                new ImageIcon("resources/images/compare.png"));
        compareProjectReportDataButton.setToolTipText(
                "<html>Compare different project report data <br> This is commonly use to compare diferent domain models with different adjustments.<br>"
                        + "One project data must be chosen as a reference; others will be compared to this referencial one.</html>");
        compareProjectReportDataButton.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                final ProjectComparisonDialog dialog = new ProjectComparisonDialog();
                dialog.setVisible(true);

                final List<String> files = dialog.getFiles();

                if (files.size() > 1) {

                    new Thread() {
                        public void run() {
                            appendOutputPanelText(">> Project comparison report requested. Processing... \n");

                            planSimStatusBar.setText("Status: Reading files ...");
                            appendOutputPanelText(">> Reading files ... \n");

                            //base project file
                            String baseFileName = files.get(0);
                            appendOutputPanelText(">> Reading file '" + baseFileName + "' \n");
                            org.jdom.Document baseProjectDoc = null;
                            try {
                                baseProjectDoc = XMLUtilities.readFromFile(baseFileName);
                            } catch (Exception ec) {
                                ec.printStackTrace();
                            }
                            Element baseProject = null;
                            if (baseProjectDoc != null) {
                                baseProject = baseProjectDoc.getRootElement().getChild("project");
                            }

                            //The comparible projects
                            List<Element> comparableProjects = new ArrayList<Element>();

                            for (int i = 1; i < files.size(); i++) {
                                String eafile = files.get(i);
                                appendOutputPanelText(">> Reading file '" + eafile + "' \n");
                                org.jdom.Document eaProjectDoc = null;
                                try {
                                    eaProjectDoc = XMLUtilities.readFromFile(eafile);
                                } catch (Exception ec) {
                                    ec.printStackTrace();
                                }
                                if (eaProjectDoc != null) {
                                    comparableProjects.add(eaProjectDoc.getRootElement().getChild("project"));
                                }

                            }
                            appendOutputPanelText(">> Files read. Building report... \n");

                            String comparisonReport = PlanAnalyzer.generateProjectComparisonReport(baseProject,
                                    comparableProjects);
                            saveFile("resources/report/Report.html", comparisonReport);
                            appendOutputPanelText(
                                    ">> Project comparison report generated. Press 'View Full Report'\n");
                            appendOutputPanelText(" \n");

                        }
                    }.start();

                }

            }
        });
        resultsToolBar.add(compareProjectReportDataButton);

        resultsPanel.add(resultsToolBar, BorderLayout.NORTH);
        resultsPanel.add(new JScrollPane(planInfoEditorPane), BorderLayout.CENTER);

        JTabbedPane planAnalysisTabbedPane = new JTabbedPane();
        planAnalysisTabbedPane.addTab("Results", resultsPanel);
        planAnalysisTabbedPane.addTab("Variable Tracking", mainChartsPanel);
        planAnalysisTabbedPane.addTab("Movie Maker", getMovieMakerPanel());
        planAnalysisTabbedPane.addTab("Plan Evaluation", getPlanEvaluationPanel());
        planAnalysisTabbedPane.addTab("Plan Database", getPlanDatabasePanel());
        planAnalysisTabbedPane.addTab("Rationale Database", getRationaleDatabasePanel());

        JPanel planAnalysisPanel = new JPanel(new BorderLayout());
        //planAnalysisPanel.add(chartsToolBar, BorderLayout.NORTH);
        planAnalysisPanel.add(planAnalysisTabbedPane, BorderLayout.CENTER);
        planAnalysisFramePanel.setContent(planAnalysisPanel, false);

    }

    return planAnalysisFramePanel;
}

From source file:src.gui.ItSIMPLE.java

/**
 * This method initializes planInfoFramePanel
 *
 * @return javax.swing.JPanel//from   ww w  .ja  v  a 2  s  . com
 */
private ItFramePanel getPlanInfoFramePanel() {
    if (planInfoFramePanel == null) {
        JPanel planInfoPanel = new JPanel(new BorderLayout());
        planInfoPanel.setMinimumSize(new Dimension(100, 40));
        planInfoFramePanel = new ItFramePanel(":: Console", ItFramePanel.MINIMIZE_MAXIMIZE);
        //informationPanel.setMinimumSize(new Dimension(100,25));

        //planInfoEditorPane = new JEditorPane();
        //planInfoEditorPane.setContentType("text/html");
        //planInfoEditorPane.setEditable(false);
        //planInfoEditorPane.setCursor(new Cursor(Cursor.TEXT_CURSOR));
        //planInfoEditorPane.setBackground(Color.WHITE);

        outputEditorPane = new JTextArea();
        //outputEditorPane.setContentType("text/html");
        outputEditorPane.setEditable(false);
        outputEditorPane.setLineWrap(true);
        outputEditorPane.setWrapStyleWord(true);
        outputEditorPane.setCursor(new Cursor(Cursor.TEXT_CURSOR));

        // tabbed panes with jtrees
        JTabbedPane outputPane = new JTabbedPane();
        outputPane.addTab("Output", new JScrollPane(outputEditorPane));
        //outputPane.addTab("Results", new JScrollPane(planInfoEditorPane));

        //planInfoFramePanel.setContent(planInfoEditorPane, true);
        planInfoFramePanel.setContent(outputPane, false);
        planInfoFramePanel.setParentSplitPane(planInfoSplitPane);

        planInfoPanel.add(planInfoFramePanel, BorderLayout.CENTER);
    }
    return planInfoFramePanel;
}

From source file:net.sourceforge.pmd.util.designer.Designer.java

public Designer(String[] args) {
    if (args.length > 0) {
        exitOnClose = !args[0].equals("-noexitonclose");
    }//w ww  .j  a  va2s .com

    Initializer.initialize();

    xpathQueryArea.setFont(new Font("Verdana", Font.PLAIN, 16));
    JSplitPane controlSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, createCodeEditorPanel(),
            createXPathQueryPanel());

    JSplitPane astAndSymbolTablePane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, createASTPanel(),
            createSymbolTableResultPanel());

    JSplitPane resultsSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, astAndSymbolTablePane,
            createXPathResultPanel());

    JTabbedPane tabbed = new JTabbedPane();
    tabbed.addTab("Abstract Syntax Tree / XPath / Symbol Table", resultsSplitPane);
    tabbed.addTab("Data Flow Analysis", dfaPanel);
    tabbed.setMnemonicAt(0, KeyEvent.VK_A);
    tabbed.setMnemonicAt(1, KeyEvent.VK_D);

    JSplitPane containerSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, controlSplitPane, tabbed);
    containerSplitPane.setContinuousLayout(true);

    JMenuBar menuBar = createMenuBar();
    frame.setJMenuBar(menuBar);
    frame.getContentPane().add(containerSplitPane);
    frame.setDefaultCloseOperation(exitOnClose ? JFrame.EXIT_ON_CLOSE : WindowConstants.DISPOSE_ON_CLOSE);

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    frame.pack();
    frame.setSize(screenWidth * 3 / 4, screenHeight * 3 / 4);
    frame.setLocation((screenWidth - frame.getWidth()) / 2, (screenHeight - frame.getHeight()) / 2);
    frame.setVisible(true);
    int horozontalMiddleLocation = controlSplitPane.getMaximumDividerLocation() * 3 / 5;
    controlSplitPane.setDividerLocation(horozontalMiddleLocation);
    containerSplitPane.setDividerLocation(containerSplitPane.getMaximumDividerLocation() / 2);
    astAndSymbolTablePane.setDividerLocation(astAndSymbolTablePane.getMaximumDividerLocation() / 3);
    resultsSplitPane.setDividerLocation(horozontalMiddleLocation);

    loadSettings();
}

From source file:nz.ac.massey.cs.gql4jung.browser.ResultBrowser.java

private void init() {
    this.setTitle("Architectural smells explorer");

    mainPanel = new JPanel(new BorderLayout(5, 5));
    this.tabbedPane = new JTabbedPane();
    mainPanel.add(tabbedPane, BorderLayout.CENTER);
    // panel for graph
    graphPane = new JPanel(new GridLayout(1, 1));
    this.tabbedPane.add("result as graph", graphPane);
    // panel for table
    this.table = new JTable();
    JScrollPane sTable = new JScrollPane(table);
    addBorder(sTable);/*from  w w  w . j a va  2 s  .c  o  m*/
    this.tabbedPane.add("result as table", sTable);

    this.setContentPane(mainPanel);

    // start listening to events
    QueryResults.QueryResultListener listener = new QueryResults.QueryResultListener() {
        @Override
        public void resultsChanged(QueryResults source) {
            if (results.getCursor().major == -1 && results.hasResults()) {
                actNextMajorInstance();
            }
            updateStatus();
            updateComputationTime();
        }

        @Override
        public void progressMade(int progress, int total) {
            statusField.setMaximum(total);
            statusField.setValue(progress);
            updateComputationTime();
        }
    };
    this.results.addListener(listener);

    // graph
    initActions();
    initPopupMenu();
    initToolbar();
    initMenubar();
    initStatusBar();

    // load sample data
    // TODO remove
    this.loadData(new File("exampledata/ant.jar.graphml"));
    this.loadQuery(new File("queries/awd.xml"));

    updateActions();
    updateStatus();
}

From source file:nz.ac.waikato.cms.supernova.gui.Supernova.java

/**
 * Initializes the widgets.//from  ww w. j  ava  2s .  c om
 */
@Override
protected void initGUI() {
    super.initGUI();

    setLayout(new BorderLayout());

    m_ParamLabels.clear();
    m_PanelSingle = createSinglePanel();

    m_ParamLabels.clear();
    m_PanelBatch = createBatchPanel();

    m_TabbedPane = new JTabbedPane();
    m_TabbedPane.addTab("Graph", m_PanelSingle);
    m_TabbedPane.addTab("Batch", m_PanelBatch);
    add(m_TabbedPane);
}