List of usage examples for javax.swing JSpinner JSpinner
public JSpinner()
Integer SpinnerNumberModel
with initial value 0 and no minimum or maximum limits. From source file:org.jcurl.demo.tactics.TacticsApp.java
public TacticsApp() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { TacticsApp.this.cmdExit(); }/* w w w.ja va 2 s . c o m*/ }); master = new RockEditDisplay(); master.setPos(mod_locations); master.setSpeed(mod_speeds); final PositionDisplay pnl2 = new PositionDisplay(); pnl2.setPos(mod_locations); pnl2.setZoom(Zoomer.HOG2HACK); final Container con = getContentPane(); { final JPanel p = new JPanel(new BorderLayout()); p.add(new SumWaitDisplay(mod_locations), "West"); p.add(master, "Center"); p.add(new SumShotDisplay(mod_locations), "East"); con.add(p, "Center"); } // con.add(new SumWaitDisplay(mod_locations), "West"); con.add(new SumOutDisplay(mod_locations), "West"); { final Box b1 = Box.createHorizontalBox(); b1.add(Box.createRigidArea(new Dimension(0, 75))); b1.add(pnl2); con.add(b1, "South"); } final JTabbedPane t = new JTabbedPane(); con.add(t, "East"); { final Box b0 = Box.createHorizontalBox(); t.add("Rock", b0); { final JPanel b1 = new JPanel(new BorderLayout()); final Box b2 = Box.createVerticalBox(); b2.add(new JComboBox(new String[] { "Dark", "Light" })); b2.add(new JLabel("Broom", SwingConstants.LEFT)); b1.add(b2, "North"); JSlider s = new JSlider(-2000, 2000, 0); s.setOrientation(SwingConstants.VERTICAL); s.setMajorTickSpacing(1000); s.setMinorTickSpacing(100); s.setPaintLabels(true); s.setPaintTicks(true); b1.add(s, "Center"); final Box b3 = Box.createHorizontalBox(); b3.add(new JFormattedTextField()); b3.add(new JLabel("mm", SwingConstants.LEFT)); b1.add(b3, "South"); b0.add(b1); } { final JPanel b1 = new JPanel(new BorderLayout()); final Box b2 = Box.createVerticalBox(); b2.add(new JComboBox(new String[] { "1", "2", "3", "4", "5", "6", "7", "8" })); b2.add(new JLabel("Splittime", SwingConstants.LEFT)); b1.add(b2, "North"); JSlider s = new JSlider(500, 2500, 1500); s.setOrientation(SwingConstants.VERTICAL); s.setMajorTickSpacing(1000); s.setMinorTickSpacing(100); s.setPaintLabels(true); s.setPaintTicks(true); b1.add(s, "Center"); final Box b3 = Box.createHorizontalBox(); b3.add(new JSpinner()); b3.add(new JLabel("ms", SwingConstants.LEFT)); b1.add(b3, "South"); b0.add(b1); } } { final Box b0 = Box.createHorizontalBox(); t.add("Ice", b0); { final JPanel b1 = new JPanel(new BorderLayout()); b1.add(new JLabel("Curl"), "North"); JSlider s = new JSlider(0, 5000, 0); s.setOrientation(SwingConstants.VERTICAL); s.setMajorTickSpacing(1000); s.setMinorTickSpacing(100); s.setPaintLabels(true); s.setPaintTicks(true); b1.add(s, "Center"); final JSpinner s1 = new JSpinner(); b1.add(s1, "South"); b0.add(b1); } { final JPanel b1 = new JPanel(new BorderLayout()); b1.add(new JLabel("DrawToTee"), "North"); JSlider s = new JSlider(15000, 30000, 25000); s.setOrientation(SwingConstants.VERTICAL); s.setMajorTickSpacing(5000); s.setMinorTickSpacing(1000); s.setPaintLabels(true); s.setPaintTicks(true); b1.add(s, "Center"); final JSpinner s1 = new JSpinner(); b1.add(s1, "South"); b0.add(b1); } } setJMenuBar(createMenu()); refreshTitle(); this.setSize(900, 400); new SpeedController(mod_locations, mod_speeds, master); new LocationController(mod_locations, pnl2); lastSaved = mod_locations.getLastChanged(); }
From source file:org.ohdsi.whiteRabbit.WhiteRabbitMain.java
private JPanel createScanPanel() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); JPanel tablePanel = new JPanel(); tablePanel.setLayout(new BorderLayout()); tablePanel.setBorder(new TitledBorder("Tables to scan")); tableList = new JList<String>(); tableList.setToolTipText("Specify the tables (or CSV files) to be scanned here"); tablePanel.add(new JScrollPane(tableList), BorderLayout.CENTER); JPanel tableButtonPanel = new JPanel(); tableButtonPanel.setLayout(new GridLayout(3, 1)); addAllButton = new JButton("Add all in DB"); addAllButton.setToolTipText("Add all tables in the database"); addAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addAllTables();// w w w . ja va 2 s . c o m } }); addAllButton.setEnabled(false); tableButtonPanel.add(addAllButton); JButton addButton = new JButton("Add"); addButton.setToolTipText("Add tables to list"); addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pickTables(); } }); tableButtonPanel.add(addButton); JButton removeButton = new JButton("Remove"); removeButton.setToolTipText("Remove tables from list"); removeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeTables(); } }); tableButtonPanel.add(removeButton); tablePanel.add(tableButtonPanel, BorderLayout.EAST); panel.add(tablePanel, BorderLayout.CENTER); JPanel southPanel = new JPanel(); southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.Y_AXIS)); JPanel scanOptionsPanel = new JPanel(); scanOptionsPanel.setLayout(new BoxLayout(scanOptionsPanel, BoxLayout.X_AXIS)); scanValueScan = new JCheckBox("Scan field values", true); scanValueScan.setToolTipText("Include a frequency count of field values in the scan report"); scanValueScan.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent arg0) { scanMinCellCount.setEnabled(((JCheckBox) arg0.getSource()).isSelected()); scanRowCount.setEnabled(((JCheckBox) arg0.getSource()).isSelected()); scanValuesCount.setEnabled(((JCheckBox) arg0.getSource()).isSelected()); } }); scanOptionsPanel.add(scanValueScan); scanOptionsPanel.add(Box.createHorizontalGlue()); scanOptionsPanel.add(new JLabel("Min cell count ")); scanMinCellCount = new JSpinner(); scanMinCellCount.setValue(5); scanMinCellCount.setToolTipText("Minimum frequency for a field value to be included in the report"); scanOptionsPanel.add(scanMinCellCount); scanOptionsPanel.add(Box.createHorizontalGlue()); scanOptionsPanel.add(new JLabel("Max distinct values ")); scanValuesCount = new JComboBox<String>(new String[] { "100", "1,000", "10,000" }); scanValuesCount.setSelectedIndex(1); scanValuesCount.setToolTipText("Maximum number of distinct values per field to be reported"); scanOptionsPanel.add(scanValuesCount); scanOptionsPanel.add(Box.createHorizontalGlue()); scanOptionsPanel.add(new JLabel("Rows per table ")); scanRowCount = new JComboBox<String>(new String[] { "100,000", "500,000", "1 million", "all" }); scanRowCount.setSelectedIndex(0); scanRowCount.setToolTipText("Maximum number of rows per table to be scanned for field values"); scanOptionsPanel.add(scanRowCount); southPanel.add(scanOptionsPanel); southPanel.add(Box.createVerticalStrut(3)); JPanel scanButtonPanel = new JPanel(); scanButtonPanel.setLayout(new BoxLayout(scanButtonPanel, BoxLayout.X_AXIS)); scanButtonPanel.add(Box.createHorizontalGlue()); JButton scanButton = new JButton("Scan tables"); scanButton.setBackground(new Color(151, 220, 141)); scanButton.setToolTipText("Scan the selected tables"); scanButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scanRun(); } }); componentsToDisableWhenRunning.add(scanButton); scanButtonPanel.add(scanButton); southPanel.add(scanButtonPanel); panel.add(southPanel, BorderLayout.SOUTH); return panel; }
From source file:org.ohdsi.whiteRabbit.WhiteRabbitMain.java
private JPanel createFakeDataPanel() { JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 0.5;/*ww w .j a v a 2s . c o m*/ JPanel folderPanel = new JPanel(); folderPanel.setLayout(new BoxLayout(folderPanel, BoxLayout.X_AXIS)); folderPanel.setBorder(BorderFactory.createTitledBorder("Scan report file")); scanReportFileField = new JTextField(); scanReportFileField.setText((new File("ScanReport.xlsx").getAbsolutePath())); scanReportFileField.setToolTipText( "The path to the scan report that will be used as a template to generate the fake data"); folderPanel.add(scanReportFileField); JButton pickButton = new JButton("Pick file"); pickButton.setToolTipText("Pick a scan report file"); folderPanel.add(pickButton); pickButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pickScanReportFile(); } }); componentsToDisableWhenRunning.add(pickButton); c.gridx = 0; c.gridy = 0; c.gridwidth = 1; panel.add(folderPanel, c); JPanel targetPanel = new JPanel(); targetPanel.setLayout(new GridLayout(0, 2)); targetPanel.setBorder(BorderFactory.createTitledBorder("Target data location")); targetPanel.add(new JLabel("Data type")); targetType = new JComboBox<String>( new String[] { "Delimited text files", "MySQL", "Oracle", "SQL Server", "PostgreSQL" }); // targetType = new JComboBox(new String[] { "Delimited text files", "MySQL" }); targetType.setToolTipText("Select the type of source data available"); targetType.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { targetIsFiles = arg0.getItem().toString().equals("Delimited text files"); targetServerField.setEnabled(!targetIsFiles); targetUserField.setEnabled(!targetIsFiles); targetPasswordField.setEnabled(!targetIsFiles); targetDatabaseField.setEnabled(!targetIsFiles); targetCSVFormat.setEnabled(targetIsFiles); if (!targetIsFiles && arg0.getItem().toString().equals("Oracle")) { targetServerField.setToolTipText( "For Oracle servers this field contains the SID, servicename, and optionally the port: '<host>/<sid>', '<host>:<port>/<sid>', '<host>/<service name>', or '<host>:<port>/<service name>'"); targetUserField.setToolTipText( "For Oracle servers this field contains the name of the user used to log in"); targetPasswordField.setToolTipText( "For Oracle servers this field contains the password corresponding to the user"); targetDatabaseField.setToolTipText( "For Oracle servers this field contains the schema (i.e. 'user' in Oracle terms) containing the source tables"); } else if (!targetIsFiles && arg0.getItem().toString().equals("PostgreSQL")) { targetServerField.setToolTipText( "For PostgreSQL servers this field contains the host name and database name (<host>/<database>)"); targetUserField.setToolTipText("The user used to log in to the server"); targetPasswordField.setToolTipText("The password used to log in to the server"); targetDatabaseField.setToolTipText( "For PostgreSQL servers this field contains the schema containing the source tables"); } else if (!targetIsFiles) { targetServerField .setToolTipText("This field contains the name or IP address of the database server"); if (arg0.getItem().toString().equals("SQL Server")) targetUserField.setToolTipText( "The user used to log in to the server. Optionally, the domain can be specified as <domain>/<user> (e.g. 'MyDomain/Joe')"); else targetUserField.setToolTipText("The user used to log in to the server"); targetPasswordField.setToolTipText("The password used to log in to the server"); targetDatabaseField.setToolTipText("The name of the database containing the source tables"); } } }); targetPanel.add(targetType); targetPanel.add(new JLabel("Server location")); targetServerField = new JTextField("127.0.0.1"); targetServerField.setEnabled(false); targetPanel.add(targetServerField); targetPanel.add(new JLabel("User name")); targetUserField = new JTextField(""); targetUserField.setEnabled(false); targetPanel.add(targetUserField); targetPanel.add(new JLabel("Password")); targetPasswordField = new JPasswordField(""); targetPasswordField.setEnabled(false); targetPanel.add(targetPasswordField); targetPanel.add(new JLabel("Database name")); targetDatabaseField = new JTextField(""); targetDatabaseField.setEnabled(false); targetPanel.add(targetDatabaseField); targetPanel.add(new JLabel("CSV Format")); targetCSVFormat = new JComboBox<>(new String[] { "Default (comma, CRLF)", "TDF (tab, CRLF)", "MySQL (tab, LF)", "RFC4180", "Excel CSV" }); targetCSVFormat.setToolTipText("The format of the output"); targetCSVFormat.setEnabled(true); targetPanel.add(targetCSVFormat); c.gridx = 0; c.gridy = 1; c.gridwidth = 1; panel.add(targetPanel, c); JPanel fakeDataButtonPanel = new JPanel(); fakeDataButtonPanel.setLayout(new BoxLayout(fakeDataButtonPanel, BoxLayout.X_AXIS)); fakeDataButtonPanel.add(new JLabel("Max rows per table")); generateRowCount = new JSpinner(); generateRowCount.setValue(10000); fakeDataButtonPanel.add(generateRowCount); fakeDataButtonPanel.add(Box.createHorizontalGlue()); JButton testConnectionButton = new JButton("Test connection"); testConnectionButton.setBackground(new Color(151, 220, 141)); testConnectionButton.setToolTipText("Test the connection"); testConnectionButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { testConnection(getTargetDbSettings()); } }); componentsToDisableWhenRunning.add(testConnectionButton); fakeDataButtonPanel.add(testConnectionButton); JButton fakeDataButton = new JButton("Generate fake data"); fakeDataButton.setBackground(new Color(151, 220, 141)); fakeDataButton.setToolTipText("Generate fake data based on the scan report"); fakeDataButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fakeDataRun(); } }); componentsToDisableWhenRunning.add(fakeDataButton); fakeDataButtonPanel.add(fakeDataButton); c.gridx = 0; c.gridy = 2; c.gridwidth = 1; panel.add(fakeDataButtonPanel, c); return panel; }
From source file:org.simmi.GeneSetHead.java
License:asdf
public void init(final Stage primaryStage, final Container comp, final SplitPane splitpane, final TableView<Gene> genetable, final TableView<Function> upper, final TableView<GeneGroup> lower, final MenuBar menubar, final ToolBar toolbar, final ToolBar btoolbar) { geneset.user = System.getProperty("user.name"); JavaFasta.user = geneset.user;//from w ww .ja v a 2 s .c o m this.splitpane = splitpane; this.primaryStage = primaryStage; table = lower; gtable = genetable; //SerifyApplet.user = user; /*try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); }*/ String userhome = System.getProperty("user.home"); boolean windows = false; try { InputStream isk = GeneSet.class.getClassLoader().getResourceAsStream("org/simmi/genesetkey"); //Path gkey = Paths.get( url.toURI() ); InputStream iskp = GeneSet.class.getClassLoader().getResourceAsStream("org/simmi/genesetkey.pub"); //Path gkeypub = Paths.get( url.toURI() ); Path gkeyssh = Paths.get(userhome); //Path gkeyssh = userpath.resolve(".ssh"); if (!Files.exists(gkeyssh)) Files.createDirectory(gkeyssh); Path gkeylocal = gkeyssh.resolve("org/simmi/genesetkey"); Path gkeylocalpub = gkeyssh.resolve("org/simmi/genesetkey.pub"); if (!Files.exists(gkeylocal) && isk != null) { Files.copy(isk, gkeylocal, StandardCopyOption.REPLACE_EXISTING); } if (!Files.exists(gkeylocalpub) && iskp != null) { Files.copy(iskp, gkeylocalpub); } Set<PosixFilePermission> poset = new HashSet<PosixFilePermission>(); poset.add(PosixFilePermission.OWNER_READ); poset.add(PosixFilePermission.OWNER_WRITE); if (Files.exists(gkeylocal)) Files.setPosixFilePermissions(gkeylocal, poset); if (Files.exists(gkeylocalpub)) Files.setPosixFilePermissions(gkeylocalpub, poset); } catch (IOException e1) { e1.printStackTrace(); } catch (UnsupportedOperationException e2) { windows = true; e2.printStackTrace(); } if (windows) { File f = new File(userhome + "\\genesetkey"); f.setExecutable(false, false); f.setWritable(false, false); f.setReadable(false, false); f.setWritable(true, true); f.setReadable(true, true); } this.comp = comp; selcomb = new ComboBox<>(); searchcolcomb = new ComboBox<>(); syncolorcomb = new ComboBox<>(); searchcolcomb.getItems().add("Name"); searchcolcomb.getItems().add("Symbol"); searchcolcomb.getSelectionModel().select(0); setColors(); JMenuBar jmenubar = new JMenuBar(); Menu file = new Menu("File"); MenuItem newitem = new MenuItem("New"); newitem.setOnAction(actionEvent -> newFile()); file.getItems().add(newitem); MenuItem openitem = new MenuItem("Open"); openitem.setOnAction(actionEvent -> { try { importStuff(); } catch (IOException e3) { e3.printStackTrace(); } catch (UnavailableServiceException e3) { e3.printStackTrace(); } }); file.getItems().add(openitem); file.getItems().add(new SeparatorMenuItem()); MenuItem importitem = new MenuItem("Import genomes"); importitem.setOnAction(actionEvent -> fetchGenomes()); file.getItems().add(importitem); MenuItem exportitem = new MenuItem("Export genomes"); exportitem.setOnAction(actionEvent -> exportGenomes(geneset.speccontigMap)); file.getItems().add(exportitem); file.getItems().add(new SeparatorMenuItem()); MenuItem exportproteinitem = new MenuItem("Export protein sequences"); exportproteinitem.setOnAction(actionEvent -> exportProteinSequences(geneset.genelist)); file.getItems().add(exportproteinitem); MenuItem exportgeneitem = new MenuItem("Export gene clusters"); exportgeneitem.setOnAction(actionEvent -> exportGeneClusters(geneset.allgenegroups)); file.getItems().add(exportgeneitem); file.getItems().add(new SeparatorMenuItem()); MenuItem quititem = new MenuItem("Quit"); quititem.setOnAction(actionEvent -> System.exit(0)); file.getItems().add(quititem); Menu edit = new Menu("Edit"); MenuItem clustergenes = new MenuItem("Cluster genes"); clustergenes.setOnAction(actionEvent -> { //fxpanel.setScene( null ); /*Platform.runLater(new Runnable() { @Override public void run() { Label label1 = new Label("Id:"); tb1 = new TextField("0.5"); Label label2 = new Label("Len:"); tb2 = new TextField("0.5"); VBox vbox = new VBox(); HBox hbox1 = new HBox(); hbox1.getChildren().addAll( label1, tb1 ); HBox hbox2 = new HBox(); hbox2.getChildren().addAll( label2, tb2 ); epar = new TextField(); vbox.getChildren().add( epar ); vbox.getChildren().addAll( hbox1, hbox2 ); if( fxs == null ) fxs = new Scene( vbox ); fxs.setRoot( vbox ); fxpanel.setScene( fxs ); } });*/ JPanel panel = new JPanel(); GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); panel.setLayout(grid); /*JLabel label1 = new JLabel("Id:"); JTextField tb1 = new JTextField("0.5"); JLabel label2 = new JLabel("Len:"); JTextField tb2 = new JTextField("0.5"); Dimension d = new Dimension( 300, 30 ); JTextField epar = new JTextField(); epar.setSize( d ); epar.setPreferredSize( d ); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 1; c.gridheight = 1; c.gridx = 0; c.gridy = 0; panel.add( label1, c ); c.gridx = 1; c.gridy = 0; panel.add( tb1, c ); c.gridx = 0; c.gridy = 1; panel.add( label2, c ); c.gridx = 1; c.gridy = 1; panel.add( tb2, c ); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; panel.add( epar, c ); JOptionPane.showMessageDialog(comp, new Object[] {panel}, "Clustering parameters", JOptionPane.PLAIN_MESSAGE );*/ /*if( tb1 != null ) { float id = Float.parseFloat( tb1.getText() ); float len = Float.parseFloat( tb2.getText() ); String expar = epar.getText(); tb1 = null; tb2 = null; epar = null;*/ Set<String> species = getSelspec(null, geneset.getSpecies(), null); geneset.clusterGenes(species, false); //} }); MenuItem alignclusters = new MenuItem("Align clusters"); alignclusters.setOnAction(actionEvent -> { try { String OS = System.getProperty("os.name").toLowerCase(); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //s.makeBlastCluster(zipfilesystem.getPath("/"), p, 1); Path aldir = geneset.zipfilesystem.getPath("aligned"); final Path aligneddir = Files.exists(aldir) ? aldir : Files.createDirectory(aldir); Runnable run = new Runnable() { @Override public void run() { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } }; NativeRun nrun = new NativeRun(run); //ExecutorService es = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors() ); Object[] cont = new Object[3]; Collection<GeneGroup> ggset; ObservableList<GeneGroup> ogg = table.getSelectionModel().getSelectedItems(); ggset = new HashSet<GeneGroup>(); if (ogg.size() == 0) { for (GeneGroup gg : geneset.allgenegroups) { //GeneGroup gg = allgenegroups.get(table.convertRowIndexToModel(r)); //gg.getCommonTag() if (gg != null && gg.getCommonTag() == null && gg.size() > 1) ggset.add(gg); } } else { for (GeneGroup gg : ogg) { //GeneGroup gg = geneset.allgenegroups.get(table.convertRowIndexToModel(r)); //gg.getCommonTag() if (gg != null && gg.getCommonTag() == null && gg.size() > 1) ggset.add(gg); } } //int i = 0; List commandsList = new ArrayList(); for (GeneGroup gg : ggset) { String fasta = gg.getFasta(true); String[] cmds = new String[] { OS.indexOf("mac") >= 0 ? "/usr/local/bin/mafft" : "/usr/bin/mafft", "-" }; Object[] paths = new Object[] { fasta.getBytes(), aligneddir.resolve(gg.getCommonId() + ".aa"), null }; commandsList.add(paths); commandsList.add(Arrays.asList(cmds)); //if( i++ > 5000 ) break; } nrun.runProcessBuilder("Running mafft", commandsList, cont, true, run, false); } catch (IOException e1) { if (geneset.zipfilesystem != null) { try { geneset.zipfilesystem.close(); } catch (IOException e2) { e2.printStackTrace(); } } e1.printStackTrace(); } }); MenuItem sharenumaction = new MenuItem("Update share numbers"); sharenumaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { Set<String> specs = getSelspec(GeneSetHead.this, geneset.specList, null); geneset.updateShareNum(specs); })); MenuItem importgeneclusteringaction = new MenuItem("Import gene clustering"); importgeneclusteringaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JPanel panel = new JPanel(); GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); panel.setLayout(grid); JLabel label1 = new JLabel("Id:"); JTextField tb11 = new JTextField("0.5"); JLabel label2 = new JLabel("Len:"); JTextField tb21 = new JTextField("0.5"); Dimension d = new Dimension(300, 30); JTextField epar1 = new JTextField(); epar1.setSize(d); epar1.setPreferredSize(d); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 1; c.gridheight = 1; c.gridx = 0; c.gridy = 0; panel.add(label1, c); c.gridx = 1; c.gridy = 0; panel.add(tb11, c); c.gridx = 0; c.gridy = 1; panel.add(label2, c); c.gridx = 1; c.gridy = 1; panel.add(tb21, c); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; panel.add(epar1, c); JOptionPane.showMessageDialog(comp, new Object[] { panel }, "Clustering parameters", JOptionPane.PLAIN_MESSAGE); float id = Float.parseFloat(tb11.getText()); float len = Float.parseFloat(tb21.getText()); //JFileChooser fc = new JFileChooser(); //if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { Serifier s = new Serifier(); //s.mseq = aas; for (String gk : geneset.refmap.keySet()) { Gene g = geneset.refmap.get(gk); if (g.tegeval.getAlignedSequence() != null) System.err.println(g.tegeval.getAlignedSequence().getName()); s.mseq.put(gk, g.tegeval.getAlignedSequence()); } Map<String, String> idspec = new HashMap<String, String>(); for (String idstr : geneset.refmap.keySet()) { if (idstr.contains(" ")) { System.err.println("coooonnnnnni " + idstr); } Gene gene = geneset.refmap.get(idstr); idspec.put(idstr, gene.getSpecies()); } //Sequences seqs = new Sequences(user, name, type, path, nseq) try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path root = geneset.zipfilesystem.getPath("/"); Path p = geneset.zipfilesystem.getPath("cluster.blastout"); //root.resolve("culster.blastout"); List<Set<String>> cluster = geneset.uclusterlist == null ? new ArrayList<>() : new ArrayList<>(geneset.uclusterlist); s.makeBlastCluster(root, p, 1, id, len, idspec, cluster, geneset.refmap); System.err.println(cluster.get(0)); if (geneset.uclusterlist != null) System.err.println(geneset.uclusterlist.get(0)); geneset.zipfilesystem.close(); } catch (IOException e1) { if (geneset.zipfilesystem != null) { try { geneset.zipfilesystem.close(); } catch (IOException e2) { e2.printStackTrace(); } } e1.printStackTrace(); } })); MenuItem importgenesymbolaction = new MenuItem("Import gene symbols"); importgenesymbolaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/smap_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); File f = fc.getSelectedFile(); InputStream is = new FileInputStream(f); if (f.getName().endsWith(".gz")) is = new GZIPInputStream(is); geneset.uni2symbol(new InputStreamReader(is), bw, geneset.unimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } })); MenuItem importcazyaction = new MenuItem("Import Cazy"); importcazyaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { try { BufferedReader rd = Files.newBufferedReader(fc.getSelectedFile().toPath()); geneset.loadcazymap(geneset.cazymap, rd); } catch (IOException e1) { e1.printStackTrace(); } } })); MenuItem gene2refseqaction = new MenuItem("Gene 2 refseq"); gene2refseqaction.setOnAction(actionEvent -> { try { TextField tf = new TextField(); tf.setText("ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene2refseq.gz"); Dialog<Path> dialog = new Dialog(); dialog.getDialogPane().setContent(tf); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); dialog.setResultConverter(param -> param.getButtonData().isCancelButton() ? null : Paths.get(URI.create(tf.getText()))); Optional<Path> opath = dialog.showAndWait(); if (opath.isPresent()) { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path path = opath.get(); InputStream is = path.toUri().toURL().openStream(); if (path.getFileName().toString().endsWith(".gz")) { is = new GZIPInputStream(is); } Path nf = geneset.zipfilesystem.getPath("/org/simmi/gene2refseq_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); geneset.idMapping(new InputStreamReader(is), bw, 5, 1, geneset.refmap, null, geneset.gimap); bw.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } }); MenuItem functionmappingaction = new MenuItem("Function mapping"); functionmappingaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { final JTextField tf = new JTextField(); JButton btn = new JButton("File"); JComponent comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); comp2.add(tf); comp2.add(btn, BorderLayout.EAST); tf.setText("http://130.208.252.239/data/sp2go.txt.gz"); final File[] file2 = new File[1]; btn.addActionListener(e -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { file2[0] = fc.getSelectedFile(); try { tf.setText(fc.getSelectedFile().toURI().toURL().toString()); } catch (MalformedURLException e1) { e1.printStackTrace(); } } }); try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/org/simmi/sp2go_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); JOptionPane.showMessageDialog(GeneSetHead.this, comp2); final JDialog dialog = new JDialog(); dialog.setTitle("Function mapping"); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setSize(400, 300); comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); final JTextArea ta = new JTextArea(); /*final InputStream fis; if( file[0] != null ) fis = new FileInputStream( file[0] ); else { JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); List<String> commandsList = Arrays.asList( new String[] {"ssh",username+"@"+hostname,"cat",tf.getText()} ); ProcessBuilder pb = new ProcessBuilder( commandsList ); Process p = pb.start(); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object cmd : (List)commands ) { ta.append(cmd+" "); } ta.append("\n"); } else { ta.append(commands+" "); } } ta.append("\n"); fis = p.getInputStream(); }*/ final JProgressBar pbar = new JProgressBar(); final Thread t = new Thread() { public void run() { try { URL url = new URL(tf.getText()); InputStream fis = url.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(fis))); //if( unimap != null ) unimap.clear(); //unimap = idMapping(new InputStreamReader(is), bw, 2, 0, refmap, genmap, gimap); geneset.funcMappingUni(br, geneset.unimap, bw); fis.close(); bw.close(); try { geneset.zipfilesystem.close(); } catch (Exception e2) { e2.printStackTrace(); } ; pbar.setIndeterminate(false); pbar.setEnabled(false); } catch (IOException e) { e.printStackTrace(); } } }; ta.setEditable(false); final JScrollPane sp = new JScrollPane(ta); dialog.add(comp2); comp2.add(pbar, BorderLayout.NORTH); comp2.add(sp, BorderLayout.CENTER); pbar.setIndeterminate(true); t.start(); /*okokdialog.addWindowListener( new WindowListener() { @Override public void windowOpened(WindowEvent e) {} @Override public void windowIconified(WindowEvent e) {} @Override public void windowDeiconified(WindowEvent e) {} @Override public void windowDeactivated(WindowEvent e) {} @Override public void windowClosing(WindowEvent e) {} @Override public void windowClosed(WindowEvent e) { if( pbar.isEnabled() ) { pbar.setIndeterminate( false ); pbar.setEnabled( false ); } } @Override public void windowActivated(WindowEvent e) {} });*/ dialog.setVisible(true); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); } catch (IOException e1) { e1.printStackTrace(); } })); MenuItem importidmappingaction = new MenuItem("Import idmapping"); importidmappingaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { final JTextField tf = new JTextField(); JButton btn = new JButton("File"); JComponent comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); comp2.add(tf); comp2.add(btn, BorderLayout.EAST); tf.setText( "ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/idmapping/idmapping.dat.gz"); final File[] file2 = new File[1]; btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { file2[0] = fc.getSelectedFile(); try { tf.setText(fc.getSelectedFile().toURI().toURL().toString()); } catch (MalformedURLException e1) { e1.printStackTrace(); } } } }); JOptionPane.showMessageDialog(GeneSetHead.this, comp2); //Thread t = new Thread() { // public void run() { try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/org/simmi/idmapping_short.dat"); final BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); final JDialog dialog = new JDialog(); dialog.setTitle("Id mapping"); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setSize(400, 300); comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); final JTextArea ta = new JTextArea(); /*final InputStream fis; if( file[0] != null ) fis = new FileInputStream( file[0] ); else { /*Object[] cont = new Object[3]; Runnable run = new Runnable() { public void run() { try { bw.close(); geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } };* JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); List<String> commandsList = Arrays.asList( new String[] {"ssh",username+"@"+hostname,"cat",tf.getText()} ); ProcessBuilder pb = new ProcessBuilder( commandsList ); Process p = pb.start(); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object cmd : (List)commands ) { ta.append(cmd+" "); } ta.append("\n"); } else { ta.append(commands+" "); } } ta.append("\n"); fis = p.getInputStream(); }*/ final JProgressBar pbar = new JProgressBar(); final Thread t = new Thread() { public void run() { try { URL url = new URL(tf.getText()); InputStream fis = url.openStream(); InputStream is = new GZIPInputStream(fis); if (geneset.unimap != null) geneset.unimap.clear(); geneset.unimap = geneset.idMapping(new InputStreamReader(is), bw, 2, 0, geneset.refmap, geneset.genmap, geneset.gimap); is.close(); fis.close(); bw.close(); try { geneset.zipfilesystem.close(); } catch (Exception ep) { ep.printStackTrace(); } ; pbar.setIndeterminate(false); pbar.setEnabled(false); } catch (IOException e) { e.printStackTrace(); } } }; ta.setEditable(false); final JScrollPane sp = new JScrollPane(ta); dialog.add(comp2); comp2.add(pbar, BorderLayout.NORTH); comp2.add(sp, BorderLayout.CENTER); pbar.setIndeterminate(true); t.start(); /*System.err.println( "about to run" ); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object c : (List)commands ) { System.err.print( c+" " ); } System.err.println(); } else { System.err.print( commands+" " ); } } System.err.println();*/ /*okokdialog.addWindowListener( new WindowListener() { @Override public void windowOpened(WindowEvent e) {} @Override public void windowIconified(WindowEvent e) {} @Override public void windowDeiconified(WindowEvent e) {} @Override public void windowDeactivated(WindowEvent e) {} @Override public void windowClosing(WindowEvent e) {} @Override public void windowClosed(WindowEvent e) { if( pbar.isEnabled() ) { /*String result = ta.getText().trim(); if( run != null ) { cont[0] = null; cont[1] = result; cont[2] = new Date( System.currentTimeMillis() ).toString(); run.run(); }* pbar.setIndeterminate( false ); pbar.setEnabled( false ); } } @Override public void windowActivated(WindowEvent e) {} });*/ dialog.setVisible(true); /*NativeRun nrun = new NativeRun(); nrun.runProcessBuilder("Idmapping", Arrays.asList( tf.getText().split(" ") ), run, cont, false); ProcessBuilder pb = new ProcessBuilder( tf.getText().split(" ") ); Process p = pb.start(); fis = p.getInputStream(); }*/ //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); } catch (IOException e1) { e1.printStackTrace(); try { geneset.zipfilesystem.close(); } catch (Exception e2) { e2.printStackTrace(); } ; } // } //}; //t.start(); //} })); MenuItem cogblastaction = new MenuItem("Cog blast"); cogblastaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { Set<String> species = getSelspec(null, geneset.getSpecies(), null); if (species != null && species.size() > 0) Platform.runLater(() -> cogBlastDlg(species)); })); MenuItem unresolvedblastaction = new MenuItem("Unresolved blast"); unresolvedblastaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { try { Set<String> species = getSelspec(null, geneset.getSpecies(), null); StringWriter sb = new StringWriter(); Path dbPath = Paths.get("/data/nr"); ObservableList<Gene> genes = gtable.getSelectionModel().getSelectedItems(); if (genes.size() > 0) { if (isGeneview()) { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { //int i = table.convertRowIndexToModel(r); //Gene g = geneset.genelist.get(i); Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int i = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(i); Gene g = null; for (Gene gene : gg.genes) { g = gene; break; } Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); } } } else { for (Gene g : geneset.genelist) { if (g.getTag() == null || g.getTag().equalsIgnoreCase("gene")) { if (species.contains(g.getSpecies())) { Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); /*sb.append(">" + g.id + "\n"); for (int i = 0; i < gs.length(); i += 70) { sb.append( gs.substring(i, Math.min( i + 70, gs.length() )) + "\n"); }*/ } } } } Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path resPath = geneset.zipfilesystem.getPath("/unresolved.blastout"); NativeRun nrun = new NativeRun(); SerifyApplet.blastpRun(nrun, sb.getBuffer(), dbPath, resPath, "-evalue 0.00001", null, true, geneset.zipfilesystem, geneset.user, primaryStage); } catch (IOException e1) { e1.printStackTrace(); } })); MenuItem importbiosystemsaction = new MenuItem("Import biosystems"); importbiosystemsaction.setOnAction(actionEvent -> { Dialog<Map<String, Set<String>>> dialog = new Dialog(); TextField gene = new TextField(); TextField biosys = new TextField(); gene.setText("ftp://ftp.ncbi.nlm.nih.gov/pub/biosystems/biosystems.20160519/biosystems_gene_all.gz"); biosys.setText("ftp://ftp.ncbi.nlm.nih.gov/pub/biosystems/biosystems.20160519/bsid2info.gz"); VBox duo = new VBox(); duo.getChildren().add(gene); duo.getChildren().add(biosys); dialog.getDialogPane().setContent(duo); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); dialog.setResultConverter(param -> { if (!param.getButtonData().isCancelButton()) { Map<String, Set<String>> result = null; Set<String> geneidset = geneset.genelist.stream().map(g -> g.genid).collect(Collectors.toSet()); try { InputStream p = new URI(gene.getText()).toURL().openStream(); InputStream b = new URI(biosys.getText()).toURL().openStream(); if (gene.getText().endsWith(".gz")) p = new GZIPInputStream(p); if (biosys.getText().endsWith(".gz")) b = new GZIPInputStream(b); Map<String, List<String[]>> group = new BufferedReader(new InputStreamReader(p)).lines() .map(l -> l.split("\t")).filter(s -> geneidset.contains(s[1])) .collect(Collectors.groupingBy(s -> s[1])); Set<String> bsids = group.entrySet().stream().flatMap(e -> e.getValue().stream()) .map(s -> s[0]).collect(Collectors.toSet()); Map<String, String> bsid2name = new BufferedReader(new InputStreamReader(b)).lines() .map(s -> s.split("\t")).filter(s -> bsids.contains(s[0])) .collect(Collectors.toMap(s -> s[0], s -> s[2] + ":" + s[3])); result = group.entrySet().stream() .collect(Collectors.toMap(s -> s.getKey(), s -> s.getValue().stream() .map(sub -> bsid2name.get(sub[0])).collect(Collectors.toSet()))); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } //Path p = Paths.get(gene.getText()); //Path b = Paths.get(biosys.getText()); return result; } return null; }); Optional<Map<String, Set<String>>> od = dialog.showAndWait(); if (od.isPresent()) { geneset.biosystemsmap = od.get(); Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path resPath = geneset.zipfilesystem.getPath("/biosystems.txt"); BufferedWriter bw = Files.newBufferedWriter(resPath, StandardOpenOption.TRUNCATE_EXISTING); geneset.biosystemsmap.entrySet().stream().forEach(e -> { try { bw.write(e.getKey() + "\t" + e.getValue().stream().collect(Collectors.joining(";")) + "\n"); } catch (IOException e1) { e1.printStackTrace(); } }); bw.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } } }); MenuItem importkeggpathwayaction = new MenuItem("Import kegg pathways"); importkeggpathwayaction.setOnAction(actionEvent -> { Set<String> keggids = new HashSet<>(); for (Gene g : geneset.genelist) { if (g.keggid != null) { int i = g.keggid.indexOf(':'); if (i > 0) { keggids.add(g.keggid.substring(0, i)); } } } System.err.println(keggids); JTextField tf = new JTextField("http://130.208.252.239/organisms/"); JOptionPane.showMessageDialog(null, tf); Map<String, String> env = new HashMap<>(); env.put("create", "true"); Path rootp = null; try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); } catch (Exception ee) { ee.printStackTrace(); } for (Path root : geneset.zipfilesystem.getRootDirectories()) { rootp = root; break; } for (String kegg : keggids) { try { URL url = new URL(tf.getText() + kegg + ".tar.gz"); InputStream is = url.openStream(); GZIPInputStream gz = new GZIPInputStream(is); TarArchiveInputStream tar = new TarArchiveInputStream(gz); TarArchiveEntry tae = (TarArchiveEntry) tar.getNextEntry(); while (tae != null) { geneset.traverseTar(tar, tae, rootp); tae = (TarArchiveEntry) tar.getNextEntry(); } is.close(); } catch (IOException e1) { e1.printStackTrace(); } } try { geneset.zipfilesystem.close(); } catch (Exception ee) { ee.printStackTrace(); } ; }); edit.getItems().add(clustergenes); edit.getItems().add(alignclusters); edit.getItems().add(new SeparatorMenuItem()); edit.getItems().add(sharenumaction); edit.getItems().add(importgeneclusteringaction); edit.getItems().add(importgenesymbolaction); edit.getItems().add(importcazyaction); edit.getItems().add(functionmappingaction); edit.getItems().add(importidmappingaction); edit.getItems().add(gene2refseqaction); edit.getItems().add(importbiosystemsaction); edit.getItems().add(importkeggpathwayaction); edit.getItems().add(new SeparatorMenuItem()); edit.getItems().add(cogblastaction); edit.getItems().add(unresolvedblastaction); Menu view = new Menu("View"); gb = new RadioMenuItem("Genes"); gb.setOnAction(actionEvent -> { splitpane.getItems().remove(table); splitpane.getItems().add(0, gtable); //table.setModel( defaultModel ); }); view.getItems().add(gb); ggb = new RadioMenuItem("Gene groups"); ggb.setOnAction(actionEvent -> { splitpane.getItems().remove(gtable); splitpane.getItems().add(0, table); //table.setModel( groupModel ); }); ToggleGroup bg = new ToggleGroup(); gb.setToggleGroup(bg); ggb.setToggleGroup(bg); //ButtonGroup bg = new ButtonGroup(); //bg.add( gb ); //bg.add( ggb ); ggb.setSelected(true); view.getItems().add(ggb); ActionCollection.addAll(view, geneset.clusterMap, GeneSetHead.this, geneset.speccontigMap, table, comp, geneset.cs); Menu help = new Menu("Help"); MenuItem about = new MenuItem("About"); about.setOnAction(actionEvent -> SwingUtilities .invokeLater(() -> JOptionPane.showMessageDialog(comp, "CompGen 1.0"))); help.getItems().add(about); MenuItem test = new MenuItem("Test"); test.setOnAction(actionEvent -> { /*for( Gene g : geneset.genelist ) { Sequence seq = g.tegeval.getContig(); if( seq == null ) { System.err.println(); } }*/ for (String spec : geneset.speccontigMap.keySet()) { if (spec.contains("RAST")) { List<Sequence> lseq = geneset.speccontigMap.get(spec); for (Sequence seq : lseq) { for (Annotation a : seq.getAnnotations()) { System.err.println(a.getGene().getGeneGroup().species); /*Sequence tseq = a.getContig(); if( tseq == null ) { System.err.println(); }*/ } } } } /*for( GeneGroup gg : allgenegroups ) { if( gg.species.size() > 1 ) { System.err.println( gg.species ); } }*/ }); help.getItems().add(test); help.getItems().add(new SeparatorMenuItem()); MenuItem runserver = new MenuItem("Run server"); runserver.setOnAction(actionEvent -> { SwingUtilities.invokeLater(new Runnable() { public void run() { JSpinner spin = new JSpinner(); JOptionPane.showMessageDialog(GeneSetHead.this, spin, "Port", JOptionPane.QUESTION_MESSAGE); try { geneset.cs = WSServer.startServer(GeneSetHead.this, (Integer) spin.getValue()); } catch (UnknownHostException e1) { e1.printStackTrace(); } } }); }); help.getItems().add(runserver); help.getItems().add(new SeparatorMenuItem()); CheckMenuItem cbmi = new CheckMenuItem("Use geneset user"); help.getItems().add(cbmi); cbmi.setOnAction(actionEvent -> { if (cbmi.isSelected()) { geneset.user = "geneset"; } else geneset.user = System.getProperty("user.name"); JavaFasta.user = geneset.user; if (geneset.currentSerify != null) geneset.currentSerify.user = geneset.user; }); help.getItems().add(new SeparatorMenuItem()); MenuItem helptut = new MenuItem("Help & Tutorial"); helptut.setOnAction(actionEvent -> { try { Desktop.getDesktop().browse(new URI("http://thermusgenes.appspot.com/pancore.html")); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } }); help.getItems().add(helptut); Menu sequencemenu = new Menu("Sequence"); MenuItem showgroupseq = new MenuItem("Show group sequences"); showgroupseq.setOnAction(actionEvent -> { //JTextArea textarea = new JTextArea(); //JScrollPane scrollpane = new JScrollPane(textarea); /*try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true);*/ JFrame frame = null; if (geneset.currentSerify == null) { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setSize(400, 300); Map<String, String> env = new HashMap<String, String>(); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); } catch (IOException e1) { e1.printStackTrace(); } SerifyApplet sa = new SerifyApplet(geneset.zipfilesystem); sa.init(frame, null, geneset.user); //frame.add( ) geneset.currentSerify = sa; } /* else frame = (JFrame)currentSerify.cnt;*/ String[] farr = new String[] { "o.profundus", "mt.silvanus", "mt.ruber", "m.hydrothermalis", "t.thermophilus_SG0_5JP17_16", "t.thermophilusJL18", "t.thermophilusHB8", "t.thermophilusHB27", "t.scotoductusSA01", "t.scotoductus4063", "t.scotoductus1572", "t.scotoductus2101", "t.scotoductus2127", "t.scotoductus346", "t.scotoductus252", "t.antranikiani", "t.kawarayensis", "t.brockianus", "t.igniterrae", "t.eggertsoni", "t.RLM", "t.oshimai_JL2", "t.oshimai", "t.filiformis", "t.arciformis", "t.islandicus", "t.aquaticus", "t.spCCB" }; Map<Integer, String> ups = new HashMap<Integer, String>(); Set<Integer> stuck = new HashSet<Integer>(); Map<Integer, List<Tegeval>> ups2 = new HashMap<Integer, List<Tegeval>>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); if (gg.getSpecies() != null) { if (gg.genid != null && gg.genid.length() > 0) { ups.put(gg.getGroupIndex(), gg.name); stuck.add(gg.getGroupIndex()); } if (!stuck.contains(gg.getGroupIndex())) { if (!ups.containsKey(gg.getGroupIndex()) || !(gg.name.contains("unnamed") || gg.name.contains("hypot"))) ups.put(gg.getGroupIndex(), gg.name); } List<Tegeval> tlist; if (ups2.containsKey(gg.getGroupIndex())) tlist = ups2.get(gg.getGroupIndex()); else { tlist = new ArrayList<Tegeval>(); ups2.put(gg.getGroupIndex(), tlist); } //Set<String> specs = new HashSet<String>(); //textarea.append(gg.name + ":\n"); //for (String sp : gg.species.keySet()) { int count = 0; for (String sp : farr) { //Teginfo stv = gg.species.equals(sp) ? gg.teginfo : null; if (gg.getSpecies().equals(sp)) tlist.add(gg.tegeval); /*for( String key : gg.species.keySet() ) { if( key.contains("JL2") ) { System.err.println( " erm " + key ); } }*/ /*if( stv == null && gg.species.size() == 28 ) { System.err.println( gg.species ); System.err.println( sp ); }*/ //System.err.println( gg.species.keySet() ); /*if( stv == null ) { //System.err.println( sp ); } else { count++; //specs.add( sp ); for (Tegeval tv : stv.tset) { tlist.add( tv ); /*textarea.append(">" + tv.cont + " " + tv.teg + " " + tv.eval + "\n"); if (tv.dna != null) { for (int i = 0; i < tv.dna.length(); i += 70) { textarea.append(tv.dna.gg.speciessubstring(i, Math.min(i + 70, tv.dna.length())) + "\n"); } }* } }*/ } //if( count < gg.species.size() ) { // System.err.println( gg.species ); // System.err.println(); //} //if( specs.size() < 28 ) System.err.println("mu " + specs); } } try { StringWriter sb = new StringWriter(); for (int gi : ups.keySet()) { String name = ups.get(gi); List<Tegeval> tlist = ups2.get(gi); sb.append(name.replace('/', '-') + ":\n"); if (tlist.size() < 28) { for (Tegeval tv : tlist) { System.err.println(tv.name); } System.err.println(); } for (Tegeval tv : tlist) { Sequence ps = tv.getProteinSequence(); ps.setName(tv.name.substring(0, tv.name.indexOf('_'))); ps.writeSequence(sb); /*sb.append(">" + tv.name.substring(0, tv.name.indexOf('_')) + "\n"); for (int i = 0; i < ps.length(); i += 70) { sb.append( ps.substring(i, Math.min(i + 70, tv.getProteinLength() )) + "\n"); }*/ } } geneset.currentSerify.addSequences("uh", new StringReader(sb.toString()), Paths.get("/"), null); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } frame.setVisible(true); }); sequencemenu.getItems().add(showgroupseq); MenuItem showgroupdnaseq = new MenuItem("Show group DNA sequences"); showgroupdnaseq.setOnAction(actionEvent -> { final JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); TransferHandler th = new TransferHandler() { /** * */ private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferHandler.TransferSupport support) { return false; } protected Transferable createTransferable(JComponent c) { return new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { if (arg0.equals(df)) { return new ByteArrayInputStream(textarea.getText().getBytes()); } else { return textarea.getText(); } } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df, DataFlavor.stringFlavor }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df) || arg0.equals(DataFlavor.stringFlavor)) { return true; } return false; } }; } public boolean importData(TransferHandler.TransferSupport support) { return false; } }; textarea.setTransferHandler(th); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } Map<Integer, String> ups = new HashMap<Integer, String>(); Set<Integer> stuck = new HashSet<Integer>(); Map<Integer, List<Tegeval>> ups2 = new HashMap<Integer, List<Tegeval>>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); if (gg.getSpecies() != null) { if (gg.genid != null && gg.genid.length() > 0) { ups.put(gg.getGroupIndex(), gg.name); stuck.add(gg.getGroupIndex()); } if (!stuck.contains(gg.getGroupIndex())) { if (!ups.containsKey(gg.getGroupIndex()) || !(gg.name.contains("unnamed") || gg.name.contains("hypot"))) ups.put(gg.getGroupIndex(), gg.name); } List<Tegeval> tlist; if (ups2.containsKey(gg.getGroupIndex())) tlist = ups2.get(gg.getGroupIndex()); else { tlist = new ArrayList<Tegeval>(); ups2.put(gg.getGroupIndex(), tlist); } //textarea.append(gg.name + ":\n"); tlist.add(gg.tegeval); /*textarea.append(">" + tv.cont + " " + tv.teg + " " + tv.eval + "\n"); if (tv.dna != null) { for (int i = 0; i < tv.dna.length(); i += 70) { textarea.append(tv.dna.substring(i, Math.min(i + 70, tv.dna.length())) + "\n"); } }*/ } } for (int gi : ups.keySet()) { String name = ups.get(gi); List<Tegeval> tlist = ups2.get(gi); textarea.append(name.replace('/', '-') + ":\n"); for (Tegeval tv : tlist) { textarea.append(">" + tv.name.substring(0, tv.name.indexOf('_')) + "\n"); for (int i = 0; i < tv.getLength(); i += 70) { textarea.append(tv.getSubstring(i, Math.min(i + 70, tv.getLength())) + "\n"); } } } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); sequencemenu.getItems().add(showgroupdnaseq); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem showallseq = new MenuItem("Show all sequences"); showallseq.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); Map<String, Sequence> contset = new HashMap<String, Sequence>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); Tegeval tv = gg.tegeval; String contig = tv.getContshort().getName(); Sequence seq = tv.getProteinSequence(); seq.setName(contig); serifier.mseq.put(seq.getName(), seq); //Sequence seq = new Sequence( contig, aa, serifier.mseq ); serifier.addSequence(seq); } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(showallseq); MenuItem showseq = new MenuItem("Show sequences"); showseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(cr); genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); genegroups.add(gg.getGeneGroup()); } } Platform.runLater(() -> { Set<String> specs = null; if (table.getItems().size() > 1) specs = getSelspec(comp, geneset.specList, null); showSequences(comp, genegroups, false, specs); }); }); sequencemenu.getItems().add(showseq); MenuItem showseqwgenenames = new MenuItem("Show sequences w/genenames"); showseqwgenenames.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(cr); genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); genegroups.add(gg.getGeneGroup()); } } //Set<String> specs = null; //if( rr.length > 1 ) specs = getSelspec(comp, specList, null); showSequences(comp, genegroups, false, null, true); }); sequencemenu.getItems().add(showseqwgenenames); MenuItem showalignseq = new MenuItem("Show aligned sequences"); showalignseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); } } Serifier serifier = new Serifier(); for (GeneGroup ggroup : genegroups) { for (Tegeval tv : ggroup.getTegevals()) { String selspec = tv.getContshort().getSpec();//tv.getContig(); String spec = geneset.nameFix(selspec); /*if( selspec.contains("hermus") ) spec = selspec; else { Matcher m = Pattern.compile("\\d").matcher(selspec); int firstDigitLocation = m.find() ? m.start() : 0; if( firstDigitLocation == 0 ) spec = "Thermus_" + selspec; else spec = "Thermus_" + selspec.substring(0,firstDigitLocation) + "_" + selspec.substring(firstDigitLocation); }*/ Sequence seq = tv.getAlignedSequence(); //System.err.println( "seqlen " + seq.length() ); if (seq != null) { seq.setName(spec); //Sequence seq = new Sequence( contig, seqstr, null ); serifier.addSequence(seq); } else { Sequence sb = tv.getProteinSequence(); sb.setName(spec); //Sequence sseq = new Sequence( spec, sb, serifier.mseq ); serifier.addSequence(sb); } } } showAlignedSequences(comp, serifier); }); sequencemenu.getItems().add(showalignseq); MenuItem splitseq = new MenuItem("Split/Show sequences"); splitseq.setOnAction(actionEvent -> { try { StringBuffer sb = getSelectedASeqs(table, geneset.genelist, GeneSetHead.this, geneset.specList); if (geneset.currentSerify == null) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setSize(800, 600); SerifyApplet sa = new SerifyApplet(geneset.zipfilesystem); sa.init(frame, null, geneset.user); geneset.currentSerify = sa; frame.setVisible(true); } geneset.currentSerify.addSequences("uh", new StringReader(sb.toString()), Paths.get("/"), null); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } //JTextArea textarea = new JTextArea(); //textarea.append( sb.toString() ); /*try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } * * final DataFlavor df = * DataFlavor.getTextPlainUnicodeFlavor();//new * DataFlavor("text/plain;charset=utf-8"); final String charset * = df.getParameter("charset"); final Transferable transferable * = new Transferable() { * * @Override public Object getTransferData(DataFlavor arg0) * throws UnsupportedFlavorException, IOException { String ret = * makeCopyString( detailTable ); return new * ByteArrayInputStream( ret.getBytes( charset ) ); } * * @Override public DataFlavor[] getTransferDataFlavors() { * return new DataFlavor[] { df }; } * * @Override public boolean isDataFlavorSupported(DataFlavor * arg0) { if( arg0.equals(df) ) { return true; } return false; * } }; * * TransferHandler th = new TransferHandler() { private static * final long serialVersionUID = 1L; * * public int getSourceActions(JComponent c) { return * TransferHandler.COPY_OR_MOVE; } * * public boolean canImport(TransferHandler.TransferSupport * support) { return false; } * * protected Transferable createTransferable(JComponent c) { * return transferable; } * * public boolean importData(TransferHandler.TransferSupport * support) { /*try { Object obj = * support.getTransferable().getTransferData( df ); InputStream * is = (InputStream)obj; * * byte[] bb = new byte[2048]; int r = is.read(bb); * * //importFromText( new String(bb,0,r) ); } catch * (UnsupportedFlavorException e) { e.printStackTrace(); } catch * (IOException e) { e.printStackTrace(); }* return false; } }; * textarea.setTransferHandler( th ); * textarea.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(textarea); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); sequencemenu.getItems().add(splitseq); MenuItem showdnaseq = new MenuItem("Show DNA sequences"); showdnaseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); int rr = 0; if (!isGeneview()) { ObservableList<GeneGroup> lgg = table.getSelectionModel().getSelectedItems(); genegroups.addAll(lgg); rr = lgg.size(); } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); rr++; } } Set<String> specs = null; if (rr > 1) specs = getSelspec(comp, geneset.specList, null); showSequences(comp, genegroups, true, specs); /*StringBuilder sb = getSelectedSeqs( table, genelist ); if( currentSerify == null ) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ); frame.setSize(800, 600); SerifyApplet sa = new SerifyApplet(); sa.init( frame ); try { sa.addSequences("uh", new StringReader( sb.toString() ), "/"); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } frame.setVisible( true ); } JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); textarea.append( sb.toString() ); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); sequencemenu.getItems().add(showdnaseq); MenuItem expalldna = new MenuItem("Export all DNA sequences"); expalldna.setOnAction(actionEvent -> { JFileChooser jfc = new JFileChooser(); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); try { Map<Integer, FileWriter> lfw = new HashMap<Integer, FileWriter>(); if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { FileWriter fw = null; if (lfw.containsKey(gg.getGroupIndex())) { fw = lfw.get(gg.getGroupIndex()); } else { fw = new FileWriter(new File(f, "group_" + gg.getGroupIndex() + ".fasta")); lfw.put(gg.getGroupIndex(), fw); } Tegeval tv = gg.tegeval; fw.append(">" + tv.name + " " + tv.teg + " " + tv.eval + "\n"); for (int i = 0; i < tv.getLength(); i += 70) { fw.append(tv.getSubstring(i, Math.min(i + 70, tv.getLength())) + "\n"); } } } for (int gi : lfw.keySet()) { lfw.get(gi).close(); } } catch (IOException e1) { e1.printStackTrace(); } }); sequencemenu.getItems().add(expalldna); MenuItem exprelcont = new MenuItem("Export relevant contigs"); exprelcont.setOnAction(actionEvent -> { JFileChooser jfc = new JFileChooser(); try { Map<Integer, FileWriter> lfw = new HashMap<Integer, FileWriter>(); if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); Set<Sequence> contset = new HashSet<Sequence>(); for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; contset.add(tv.getContshort()); } FileWriter fw = new FileWriter(f); for (Sequence contig : contset) { fw.append(">" + contig + "\n"); if (geneset.contigmap.containsKey(contig)) { StringBuilder dna = geneset.contigmap.get(contig).getStringBuilder(); for (int i = 0; i < dna.length(); i += 70) { fw.append(dna.substring(i, Math.min(i + 70, dna.length())) + "\n"); } } } fw.close(); } for (int gi : lfw.keySet()) { lfw.get(gi).close(); } } catch (IOException e1) { e1.printStackTrace(); } }); sequencemenu.getItems().add(exprelcont); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem viewselrange = new MenuItem("View selected range"); viewselrange.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); Set<Sequence> contset = new HashSet<Sequence>(); Set<Tegeval> tvset = new HashSet<>(); if (isGeneview()) { for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; tvset.add(tv); //serifier.addAnnotation( tv ); contset.add(tv.getContshort()); } } else { for (GeneGroup gg : getGeneGroupTable().getSelectionModel().getSelectedItems()) { for (Tegeval tv : gg.getTegevals()) { tv.color = Color.red; tvset.add(tv); Sequence contig = tv.getContshort(); contset.add(contig); //serifier.addAnnotation( tv ); } } } /*Sequence seq; Sequence contig = tv.getContshort(); /*if (contset.containsKey(contig)) { seq = contset.get(contig); } else { if( contigmap.containsKey(contig) ) { StringBuilder dna = contigmap.get(contig).getStringBuilder(); seq = new Sequence(contig.getName(), dna, serifier.mseq); } else seq = new Sequence(contig.getName(), serifier.mseq); contset.put(contig, seq); } Annotation a = new Annotation(contig, contig.getName(), Color.green, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(gg.name); a.setType("gene");*/ // seq.addAnnotation( new Annotation( seq, ) ); for (Sequence contig : contset) { int start = Integer.MAX_VALUE; int stop = Integer.MIN_VALUE; for (Tegeval tv : tvset) { if (contig == tv.seq) { start = Math.min(start, tv.start); stop = Math.max(stop, tv.stop); } } int rstart = 0; int rstop = contig.length(); if (contig.annset != null) for (Annotation tv : contig.annset) { if (contig == tv.seq) { if (tv.stop < start && tv.stop > rstart) { rstart = tv.stop; } if (tv.start > stop && tv.start < rstop) { rstop = tv.start; } } } start = rstart; stop = rstop; Sequence newseq = new Sequence(contig.getName(), new StringBuilder(contig.getSubstring(start, stop, 1)), serifier.mseq); /*if( contig.isReverse() ) { newseq.reverse(); newseq.complement(); }*/ serifier.addSequence(newseq); for (Tegeval tv : tvset) { Annotation newann = new Annotation(newseq, tv.start - start, tv.stop - start, tv.ori, tv.name); if (contig == tv.seq) { newseq.addAnnotation(newann); } serifier.addAnnotation(newann); } /*for( Annotation ann : contig.getAnnotations() ) { serifier.addAnnotation( ann ); }*/ /*if (seq.getAnnotations() != null) Collections.sort(seq.getAnnotations());*/ } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewselrange); MenuItem viewwhole = new MenuItem("View whole contigs for selection"); viewwhole.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); //Map<Sequence, Sequence> contset = new HashMap<Sequence, Sequence>(); /*int[] rr = table.getSelectedRows(); for (int r : rr) { int cr = table.convertRowIndexToModel(r); Gene gg = geneset.genelist.get(cr); if (gg.species != null) { for (String sp : gg.species.keySet()) { Teginfo stv = gg.species.get(sp); for (Tegeval tv : stv.tset) { Sequence seq; Sequence contig = tv.getContshort(); if (contset.containsKey(contig)) { seq = contset.get(contig); } else { if( GeneSet.contigmap.containsKey(contig) ) { //StringBuilder dna = GeneSet.contigmap.get(contig).seq; StringBuilder dna = contig.getSequence().getStringBuilder(); seq = new Sequence(contig.getName(), dna, serifier.mseq); } else { seq = new Sequence(contig.getName(), serifier.mseq); } contset.put(contig, seq); } /* * Annotation a = jf.new Annotation( seq, * contig, Color.red ); a.setStart( tv.start ); * a.setStop( tv.stop ); a.setOri( tv.ori ); * a.setGroup( gg.name ); a.setType( "gene" ); * jf.addAnnotation( a ); * // seq.addAnnotation( new Annotation( seq, ) ); } } } }*/ Set<Sequence> contigs = new HashSet<Sequence>(); if (isGeneview()) { for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; tv.color = Color.red; Sequence contig = tv.getContshort(); //contig.offset = -tv.start; contigs.add(contig); } /*Annotation a = new Annotation(contig, contig.getName(), Color.red, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(g.name); a.setType("gene");*/ //serifier.addAnnotation( tv ); } else { for (GeneGroup gg : getGeneGroupTable().getSelectionModel().getSelectedItems()) { for (Tegeval tv : gg.getTegevals()) { tv.color = Color.red; Sequence contig = tv.getContshort(); //contig.offset = -tv.start; contigs.add(contig); /*Annotation a = new Annotation(contig, contig.getName(), Color.red, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(gg.getCommonName()); a.setType("gene");*/ //serifier.addAnnotation( tv ); } } } //Gene gg = geneset.genelist.get(cr); //for (Gene g : geneset.genelist) { //if (g.species != null) { //for (String sp : g.species.keySet()) { for (Sequence contig : contigs) { for (Annotation ann : contig.getAnnotations()) { serifier.addAnnotation(ann); } serifier.addSequence(contig); serifier.mseq.put(contig.getName(), contig); //if(contig.getAnnotations() != null) // Collections.sort(contig.getAnnotations()); } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewwhole); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem viewspecseq = new MenuItem("View species sequence"); viewspecseq.setOnAction(actionEvent -> { Set<String> selspec = getSelspec(GeneSetHead.this, geneset.specList); JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); for (String spec : selspec) { List<Sequence> contigs = geneset.speccontigMap.get(spec); for (Sequence contig : contigs) { List<Annotation> lann = contig.getAnnotations(); if (lann != null) for (Annotation ann : lann) { serifier.addAnnotation(ann); } serifier.addSequence(contig); serifier.mseq.put(contig.getName(), contig); } } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewspecseq); Menu windowmenu = new Menu("Tools"); MenuItem seqviewer = new MenuItem("Sequence viewer"); seqviewer.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); jf.updateView(); frame.setVisible(true); }); windowmenu.getItems().add(seqviewer); windowmenu.getItems().add(new SeparatorMenuItem()); MenuItem genesorter = new MenuItem("Gene sorter"); genesorter.setOnAction(actionEvent -> { try { //if( gb.isSelected() ) new GeneSorter().mynd( GeneSetHead.this, genelist, table, null, contigmap ); //else new GeneSorter().groupMynd(GeneSetHead.this, geneset.allgenegroups, geneset.specList, geneset.genelist, table, geneset.contigmap, geneset.specset); } catch (IOException e1) { e1.printStackTrace(); } }); windowmenu.getItems().add(genesorter); MenuItem specorderaction = new MenuItem("Order species list"); specorderaction.setOnAction(actionEvent -> { TreeUtil tu = new TreeUtil(); /*corrInd.clear(); for( String spec : specList ) { corrInd.add( nameFix( spec ) ); }*/ Serifier serifier = getConcatenatedSequences(false, false); Map<String, Integer> blosumap = JavaFasta.getBlosumMap(); double[] dmat = new double[serifier.lseq.size() * serifier.lseq.size()]; Sequence.distanceMatrixNumeric(serifier.lseq, dmat, null, false, false, null, blosumap); List<String> ret = new ArrayList<String>(); for (Sequence seqname : serifier.lseq) { ret.add(seqname.getName()); //.replace(' ', '_') ); } //List<String> corrInd = currentjavafasta.getNames(); //Sequence.distanceMatrixNumeric(serifier.lseq, dmat, idxs, bootstrap, cantor, ent, blosum); Node n = tu.neighborJoin(dmat, ret, null, false, false); Comparator<Node> comp2 = (o1, o2) -> { int c1 = o1.countLeaves(); int c2 = o2.countLeaves(); if (c1 > c2) return 1; else if (c1 == c2) return 0; return -1; }; tu.arrange(n, comp2); //corrInd.clear(); List<String> ordInd = n.traverse(); for (String spec : ordInd) { System.err.println(spec); } for (String oldspec : geneset.specList) { if (!ordInd.contains(oldspec)) { ordInd.add(oldspec); } } geneset.specList = ordInd; //TableModel model = table.getModel(); //table.setModel( nullmodel ); //table.setModel( model ); //table.tableChanged( new TableModelEvent( table.getModel() ) ); //table.getColumnModel(). System.err.println(geneset.specList.size()); }); MenuItem matrixaction = new MenuItem("Relation matrix"); matrixaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { JComboBox<String> descombo = new JComboBox<String>( geneset.deset.toArray(new String[geneset.deset.size()])); JCheckBox anicheck = new JCheckBox("ANImatrix"); JCheckBox plasmidcheck = new JCheckBox("Skip plasmids"); descombo.insertItemAt("", 0); descombo.setSelectedIndex(0); JOptionPane.showMessageDialog(GeneSetHead.this, new Object[] { descombo, anicheck, plasmidcheck }); String val = descombo.getSelectedItem().toString(); Collection<GeneGroup> ss = new HashSet<>(); /*int[] rr = table.getSelectedRows(); for( int r : rr ) { ss.add( geneset.allgenegroups.get( table.convertRowIndexToModel(r) ) ); }*/ ss.addAll(table.getSelectionModel().getSelectedItems()); if (ss.isEmpty()) ss = geneset.allgenegroups; Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); bimg = anicheck.isSelected() ? geneset.animatrix(species, geneset.clusterMap, val, ss, plasmidcheck.isSelected()) : geneset.bmatrix(species, geneset.clusterMap, val); JFrame f = new JFrame("Relation matrix"); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setSize(500, 500); /* * { public void paintComponent( Graphics g ) { * super.paintComponent(g); g.drawImage(bimg, 0, 0, this); } }; */ try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); final Transferable transferable = new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { StringBuilder ret = new StringBuilder(); int i = 0; for (String spc : geneset.specList) { if (++i == geneset.specList.size()) ret.append(spc + "\n"); else ret.append(spc + "\t"); } int where = 0; for (String spc1 : geneset.specList) { int wherex = 0; for (String spc2 : geneset.specList) { int spc1tot = 0; int spc2tot = 0; int totot = 0; int spc1totwocore = 0; int spc2totwocore = 0; int tototwocore = 0; for (Set<String> set : geneset.clusterMap.keySet()) { Set<Map<String, Set<String>>> erm = geneset.clusterMap.get(set); if (set.contains(spc1)) { if (set.size() < geneset.specList.size()) { spc1totwocore += erm.size(); for (Map<String, Set<String>> sm : erm) { Set<String> hset = sm.get(spc1); tototwocore += hset.size(); } if (set.contains(spc2)) { spc2totwocore += erm.size(); } if (spc2totwocore > spc1totwocore) System.err.println( "okoko " + spc1totwocore + " " + spc2totwocore); } spc1tot += erm.size(); for (Map<String, Set<String>> sm : erm) { Set<String> hset = sm.get(spc1); totot += hset.size(); } if (set.contains(spc2)) { spc2tot += erm.size(); } } } if (where == wherex) { if (where == geneset.specList.size() - 1) ret.append(0 + "\n"); else ret.append(0 + "\t"); } else { double hlut = (double) spc2totwocore / (double) spc1totwocore; double sval = hlut; // 1.0/( 1.1-hlut ); double val = Math.pow(50.0, sval - 0.3) - 1.0; double dval = Math.round(100.0 * (val)) / 100.0; if (wherex == geneset.specList.size() - 1) ret.append(dval + "\n"); else ret.append(dval + "\t"); } wherex++; } where++; } return new ByteArrayInputStream(ret.toString().getBytes()); } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df)) { return true; } return false; } }; final TransferComponent comp2 = new TransferComponent(bimg, transferable); TransferHandler th = new TransferHandler() { private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferSupport support) { return false; } protected Transferable createTransferable(JComponent c) { return transferable; } public boolean importData(TransferSupport support) { return true; } }; comp2.setTransferHandler(th); comp2.setEnabled(true); JScrollPane fsc = new JScrollPane(comp2); comp2.setPreferredSize(new Dimension(bimg.getWidth(), bimg.getHeight())); JPopupMenu popup = new JPopupMenu(); popup.add(new AbstractAction("Save image") { @Override public void actionPerformed(ActionEvent e) { FileSaveService fss = null; FileContents fileContents = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(baos); ImageIO.write(bimg, "png", baos); baos.close(); try { fss = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService"); } catch (UnavailableServiceException e1) { fss = null; } if (fss != null) { ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); fileContents = fss.saveFileDialog(null, null, bais, "export.png"); bais.close(); OutputStream os = fileContents.getOutputStream(true); os.write(baos.toByteArray()); os.close(); } else { JFileChooser jfc = new JFileChooser(); if (jfc.showSaveDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); FileOutputStream fos = new FileOutputStream(f); fos.write(baos.toByteArray()); fos.close(); Desktop.getDesktop().browse(f.toURI()); } } } catch (IOException e2) { e2.printStackTrace(); } } }); comp2.setComponentPopupMenu(popup); f.add(fsc); f.setVisible(true); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } }); }); MenuItem tniaction = new MenuItem("TNI/ANI"); tniaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); String makeblastdb = "makeblastdb"; String OS = System.getProperty("os.name").toLowerCase(); if (OS.indexOf("mac") != -1) makeblastdb = "/usr/local/bin/makeblastdb"; for (String spec : species) { List<Sequence> lseq = geneset.speccontigMap.get(spec); ProcessBuilder pb = new ProcessBuilder(makeblastdb, "-dbtype", "nucl", "-title", spec, "-out", spec); File dir = new File(System.getProperty("user.home")); /*try { FileWriter w = new FileWriter( new File(dir, spec+".fna") ); for( Sequence seq : lseq ) { seq.writeSequence(w); } w.close(); } catch (IOException e2) { e2.printStackTrace(); }*/ pb.directory(dir); try { Process p = pb.start(); Writer fw = new OutputStreamWriter(p.getOutputStream()); for (Sequence seq : lseq) { seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } } int y = 0; double[] matrix = new double[species.size() * species.size()]; for (String dbspec : species) { int x = 0; for (String spec : species) { //if( !spec.equals(dbspec) ) { final List<Sequence> lseq = geneset.speccontigMap.get(spec); String blastn = "blastn"; if (OS.indexOf("mac") != -1) blastn = "/usr/local/bin/blastn"; ProcessBuilder pb = new ProcessBuilder(blastn, "-db", dbspec, "-num_threads", Integer.toString(Runtime.getRuntime().availableProcessors()), "-num_alignments", "1", "-num_descriptions", "1"); //,"-max_hsps","1"); File dir = new File(System.getProperty("user.home")); pb.directory(dir); try { Process p = pb.start(); final BufferedWriter fw = new BufferedWriter( new OutputStreamWriter(p.getOutputStream())); Thread t = new Thread() { public void run() { try { for (Sequence seq : lseq) { seq.writeSplitSequence(fw); //seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } } }; t.start(); //Path path = Paths.get("/Users/sigmar/"+spec+"_"+dbspec+".blastout"); //Files.copy(p.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING); int tnum = 0; int tdenum = 0; double avg = 0.0; int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = br.readLine(); while (line != null) { if (line.startsWith(" Identities")) { int i = line.indexOf('('); String sub = line.substring(14, i - 1); String[] split = sub.split("/"); int num = Integer.parseInt(split[0]); int denum = Integer.parseInt(split[1]); avg += (double) num / (double) denum; tnum += num; tdenum += denum; count++; } line = br.readLine(); } br.close(); if (count > 0) avg /= count; double val = (double) tnum / (double) tdenum; matrix[y * species.size() + x] = avg;//val; System.err.println(spec + " on " + dbspec + " " + val); } catch (IOException e1) { e1.printStackTrace(); } //} x++; } y++; } geneset.corrInd.clear(); for (String spec : species) { geneset.corrInd.add(geneset.nameFix(spec)); } final BufferedImage bi = geneset.showRelation(geneset.corrInd, matrix, false); JFrame f = new JFrame("TNI matrix"); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setSize(500, 500); JComponent comp2 = new JComponent() { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bi, 0, 0, bi.getWidth(), bi.getHeight(), 0, 0, bi.getWidth(), bi.getHeight(), this); } }; Dimension dim = new Dimension(bi.getWidth(), bi.getHeight()); comp2.setPreferredSize(dim); comp2.setSize(dim); JScrollPane scroll = new JScrollPane(comp2); f.add(scroll); f.setVisible(true); }); }); MenuItem anitreeaction = new MenuItem("ANI tree"); anitreeaction.setOnAction(actionEvent -> { Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); List<String> speclist = new ArrayList<String>(species); Collection<GeneGroup> allgg = new HashSet<GeneGroup>(); allgg.addAll(table.getSelectionModel().getSelectedItems()); if (allgg.isEmpty()) allgg = geneset.allgenegroups; Map<String, Integer> blosumap = JavaFasta.getBlosumMap(); double[] corrarr = new double[speclist.size() * speclist.size()]; int where = 0; for (String spec1 : speclist) { int wherex = 0; String spc1 = geneset.nameFix(spec1); //String spc1 = nameFix( spec1 ); for (String spec2 : speclist) { if (where != wherex) { int totalscore = 0; int totaltscore = 1; for (GeneGroup gg : allgg) { if ( /*gg.getSpecies().size() > 40 &&*/ gg.getSpecies().contains(spec1) && gg.getSpecies().contains(spec2)) { Teginfo ti1 = gg.species.get(spec1); Teginfo ti2 = gg.species.get(spec2); //if( ti1.tset.size() == 1 && ti2.tset.size() == 1 ) { //double bval = 0.0; int score = 0; int tscore = 1; for (Tegeval tv1 : ti1.tset) { for (Tegeval tv2 : ti2.tset) { Sequence seq1 = tv1.getAlignedSequence(); Sequence seq2 = tv2.getAlignedSequence(); if (seq1 != null && seq2 != null) { int mest = 0; int tmest = 0; int startcheck = 0; int start = -1; int stopcheck = 0; int stop = -1; for (int i = 0; i < seq1.length(); i++) { if (seq1.getCharAt(i) != '-') { startcheck |= 1; } if (seq2.getCharAt(i) != '-') { startcheck |= 2; } if (start == -1 && startcheck == 3) { start = i; break; } } for (int i = seq1.length() - 1; i >= 0; i--) { if (seq1.getCharAt(i) != '-') { stopcheck |= 1; } if (seq2.getCharAt(i) != '-') { stopcheck |= 2; } if (stop == -1 && stopcheck == 3) { stop = i + 1; break; } } //count += stop-start; for (int i = start; i < stop; i++) { char lc = seq1.getCharAt(i); char c = Character.toUpperCase(lc); //if( ) String comb = c + "" + c; if (blosumap.containsKey(comb)) tmest += blosumap.get(comb); } for (int i = start; i < stop; i++) { char lc = seq1.getCharAt(i); char c = Character.toUpperCase(lc); char lc2 = seq2.getCharAt(i); char c2 = Character.toUpperCase(lc2); String comb = c + "" + c2; if (blosumap.containsKey(comb)) mest += blosumap.get(comb); } double tani = (double) mest / (double) tmest; if (tani > (double) score / (double) tscore) { score = mest; tscore = tmest; } //ret = (double)score/(double)tscore; //int cval = tscore == 0 ? 0 : Math.min( 192, 512-score*512/tscore ); //return ret; } //if( where == 0 ) d1.add( gg.getCommonName() ); //else d2.add( gg.getCommonName() ); } } totalscore += score; totaltscore += tscore; /*if( bval > 0 ) { ani += bval; count++; }*/ //} } } double ani = (double) (totaltscore - totalscore) / (double) totaltscore; corrarr[where * speclist.size() + wherex] = ani; } wherex++; } where++; } TreeUtil tu = new TreeUtil(); geneset.corrInd.clear(); for (String spec : speclist) { geneset.corrInd.add(geneset.nameFix(spec)); } Node n = tu.neighborJoin(corrarr, geneset.corrInd, null, false, false); System.err.println(n); }); windowmenu.getItems().add(specorderaction); windowmenu.getItems().add(matrixaction); windowmenu.getItems().add(tniaction); windowmenu.getItems().add(anitreeaction); MenuItem neighbourhood = new MenuItem("Neighbourhood"); neighbourhood.setOnAction(actionEvent -> { try { Set<GeneGroup> genset = new HashSet<>(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { genset.add(gg); } } else { for (Gene gene : gtable.getSelectionModel().getSelectedItems()) { genset.add(gene.getGeneGroup()); } } new Neighbour(genset).neighbourMynd(GeneSetHead.this, comp, geneset.genelist, geneset.contigmap); } catch (IOException e1) { e1.printStackTrace(); } }); windowmenu.getItems().add(neighbourhood); MenuItem synteny = new MenuItem("Synteny"); synteny.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { //Set<String> species = speciesFromCluster( clusterMap ); new Synteni().syntenyMynd(GeneSetHead.this, comp, geneset.genelist); }); }); windowmenu.getItems().add(synteny); MenuItem compareplotaction = new MenuItem("Gene atlas"); compareplotaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { try { new GeneCompare().comparePlot(GeneSetHead.this, comp, geneset.genelist, geneset.clusterMap, 8192, 8192); } catch (IOException e1) { e1.printStackTrace(); } }); /*gatest("MAT4726"); final JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); frame.setSize(800, 600); final JComponent c = new JComponent() { public void paintComponent( Graphics g ) { g.drawImage(bimg, 0, 0, frame); } }; c.setPreferredSize( new Dimension(bimg.getWidth(), bimg.getHeight()) ); JScrollPane scrollpane = new JScrollPane( c ); frame.add( scrollpane ); frame.setVisible( true );*/ }); windowmenu.getItems().add(compareplotaction); MenuItem syntenygradientaction = new MenuItem("Synteny gradient"); syntenygradientaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { Set<String> presel = new HashSet<>(); if (isGeneview()) { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { presel.addAll(g.getGeneGroup().getSpecies()); } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { presel.addAll(gg.getSpecies()); } } new SyntGrad().syntGrad(GeneSetHead.this, 4096, 4096, presel); }); }); windowmenu.getItems().add(syntenygradientaction); MenuItem genexyplotaction = new MenuItem("Gene XY plot"); genexyplotaction.setOnAction(actionEvent -> SwingUtilities.invokeLater( () -> new XYPlot().xyPlot(GeneSetHead.this, comp, geneset.genelist, geneset.clusterMap))); windowmenu.getItems().add(genexyplotaction); MenuItem refalignaction = new MenuItem("Reference align"); refalignaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { final TableView<Gene> table12 = getGeneTable(); final Collection<String> specset = geneset.getSpecies(); //speciesFromCluster( clusterMap ); final List<String> species = new ArrayList<>(specset); TableModel model = new TableModel() { @Override public int getRowCount() { return species.size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return geneset.nameFix(species.get(rowIndex)); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table1 = new JTable(model); JTable table2 = new JTable(model); table1.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table2.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll1 = new JScrollPane(table1); JScrollPane scroll2 = new JScrollPane(table2); FlowLayout flowlayout = new FlowLayout(); JComponent c = new JComponent() { }; c.setLayout(flowlayout); c.add(scroll1); c.add(scroll2); JOptionPane.showMessageDialog(comp, c); int r = table1.getSelectedRow(); int i = table1.convertRowIndexToModel(r); String spec = i == -1 ? null : species.get(i); List<Sequence> lcont = geneset.speccontigMap.get(spec); r = table2.getSelectedRow(); i = table2.convertRowIndexToModel(r); String refspec = i == -1 ? null : species.get(i); List<Sequence> lrefcont = geneset.speccontigMap.get(spec); /*ByteArrayOutputStream baos = new ByteArrayOutputStream(); Writer fw = new OutputStreamWriter( baos ); try { List<Sequence> lcont = geneset.speccontigMap.get(spec); for( Sequence seq : lcont ) { seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } String comp = spec; byte[] bb = baos.toByteArray();*/ FlxReader flx = new FlxReader(); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //String uristr = "jar:" + geneset.zippath.toUri(); //URI geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Path subf = root.resolve(spec + ".grp"); if (Files.exists(subf)) { BufferedReader br = Files.newBufferedReader(subf); Map<String, Map<String, String>> mm = flx.loadContigGraph(br); br.close(); String home = System.getProperty("user.home") + "/"; StringBuilder sb = comp != null ? flx.referenceAssembly(home, spec, refspec, lrefcont, lcont) : null; Sequence cseq = new Sequence(spec + "_chromosome", null); if (sb != null && sb.length() > 0) { br = new BufferedReader(new StringReader(sb.toString())); } else { Path sca = root.resolve(spec + ".csc"); if (!Files.exists(sca)) { sca = root.resolve(spec + ".sca"); } br = Files.newBufferedReader(sca); } //br = new BufferedReader( fr ); flx.connectContigs(br, cseq, false, new FileWriter(home + spec + "_new.fna"), spec); br.close(); } break; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException ie) { ie.printStackTrace(); } ; } }); //flx.start( f.getParentFile().getAbsolutePath()+"/", f.getName(), false, fw, comp, bb); }); windowmenu.getItems().add(refalignaction); windowmenu.getItems().add(new SeparatorMenuItem()); MenuItem runantismash = new MenuItem("Run antismash"); runantismash.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<Object>(); //commands.add(genexyplotaction) for (String spec : selspec) { Path pp = Paths.get(userhome); Path p = pp.resolve(spec + ".gbk"); //BufferedWriter fw = Files.newBufferedWriter( p ); List<Sequence> clist = geneset.speccontigMap.get(spec); Map<String, List<Annotation>> mapan = new HashMap<String, List<Annotation>>(); Serifier serifier = new Serifier(); for (Sequence c : clist) { serifier.addSequence(c); serifier.mseq.put(c.getName(), c); List<Annotation> lann = new ArrayList<Annotation>(); if (c.getAnnotations() != null) for (Annotation ann : c.getAnnotations()) { Tegeval tv = (Tegeval) ann; Gene g = tv.getGene(); GeneGroup gg = g.getGeneGroup(); String name = g.getName(); if (gg != null && name.contains(spec)) { name = gg.getName(); } Annotation anno = new Annotation(c, tv.start, tv.stop, tv.ori, name); anno.id = tv.getGene().getId(); anno.type = "CDS"; String cazy = gg != null ? gg.getCommonCazy(geneset.cazymap) : null; if (cazy != null) anno.addDbRef("CAZY:" + cazy); lann.add(anno); } mapan.put(c.getName(), lann); } Sequences s = new Sequences(null, spec, "nucl", null, clist.size()); //serifier.addSequences(seqs); serifier.writeGenebank(p, false, true, s, mapan); //fw.close(); String apath = p.toAbsolutePath().toString(); if (hostname.equals("localhost")) { String[] cmds = { "run_antismash", apath }; //commands.add( pt ); commands.add(Arrays.asList(cmds)); } else { String aname = p.getFileName().toString(); String adir = aname.substring(0, aname.length() - 4); String cyghome = NativeRun.cygPath(userhome); String[] cmds = { "scp", apath, hostname + ":~", ";", "ssh", hostname, "run_antismash", aname, ";", "scp", "-r", hostname + ":~/" + adir, cyghome };//userhome+"~"}; //commands.add( pt ); commands.add(Arrays.asList(cmds)); } } Runnable run = new Runnable() { @Override public void run() { for (String spec : selspec) { Path p = Paths.get(userhome, spec); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); final List<Path> lbi = new ArrayList<Path>(); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Path specdir = root; Files.walkFileTree(p, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { final Path destFile = Paths.get(specdir.toString(), file.toString()); //System.out.printf("Extracting file %s to %s\n", file, destFile); Files.copy(file, destFile, StandardCopyOption.REPLACE_EXISTING); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { String specdirstr = specdir.toString(); String dirstr = dir.toString(); final Path dirToCreate = specdir .resolve(dirstr.substring(userhome.length() + 1)); if (Files.notExists(dirToCreate)) { System.out.printf("Creating directory %s\n", dirToCreate); Files.createDirectory(dirToCreate); } return FileVisitResult.CONTINUE; } }); break; } URI uri = new URI("file://" + userhome + "/" + spec + "/index.html"); Desktop.getDesktop().browse(uri); } catch (Exception ex) { ex.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; } } } }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("antismash", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runantismash); MenuItem runsignalp = new MenuItem("Run signalP"); runsignalp.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<Object>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { /*Path specdir = root.resolve(spec+".prodigal.fsa"); if( !Files.exists(specdir) ) { if( spec.startsWith("MAT") ) { specdir = root.resolve(spec+".gbk.aa"); } else specdir = root.resolve("fn_"+spec+"_scaffolds.prodigal.fsa"); }*/ Stream<Gene> genestream = geneset.genelist.stream() .filter(gene -> spec.equals(gene.getSpecies()) && (gene.tegeval.type == null || gene.tegeval.type.length() == 0)); Path sigout = root.resolve(spec + ".signalp"); Path[] pt = new Path[] { null, sigout, null }; if (hostname.equals("localhost")) { String[] cmds = { "signalp", "-t", "gram-", "-" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { Path p = Paths.get(spec + ".signalp"); BufferedWriter bw = Files.newBufferedWriter(p, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); genestream.forEachOrdered(gene -> { try { gene.writeGeneIdFasta(bw); } catch (Exception e1) { e1.printStackTrace(); } }); bw.close(); //Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); String[] cmds = { "scp", spec + ".signalp", hostname + ":~", ";", "ssh", hostname, "signalp", "-t", "gram-", spec + ".signalp" }; //String[] cmds = {"ssh",hostname,"signalp","-t","gram-","-"}; commands.add(pt); commands.add(Arrays.asList(cmds)); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = new Runnable() { @Override public void run() { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; } }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("signalp", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runsignalp); MenuItem runtransm = new MenuItem("Run TransM"); runtransm.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { /*Path specdir = root.resolve(spec+".prodigal.fsa"); if( !Files.exists(specdir) ) { if( spec.startsWith("MAT") ) { specdir = root.resolve(spec+".gbk.aa"); } else specdir = root.resolve("fn_"+spec+"_scaffolds.prodigal.fsa"); }*/ Stream<Gene> genestream = geneset.genelist.stream() .filter(gene -> spec.equals(gene.getSpecies()) && (gene.tegeval.type == null || gene.tegeval.type.length() == 0)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos)); genestream.forEach(gene -> { try { gene.writeGeneIdFasta(bw); } catch (Exception e1) { e1.printStackTrace(); } }); bw.close(); baos.close(); String seqs = baos.toString(); seqs = seqs.replace('*', 'X'); byte[] bb = seqs.getBytes(); Path sigout = root.resolve(spec + ".tm"); Object[] pt = new Object[] { bb, sigout, null }; if (hostname.equals("localhost")) { String[] cmds = { "decodeanhmm", "-f", "/opt/tmhmm-2.0c/lib/TMHMM2.0.options", "-modelfile", "/opt/tmhmm-2.0c/lib/TMHMM2.0.model" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { //Path p = Paths.get(spec+".tm"); //Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); String[] cmds = { "ssh", hostname, "decodeanhmm", "-f", "/opt/tmhmm-2.0c/lib/TMHMM2.0.options", "-modelfile", "/opt/tmhmm-2.0c/lib/TMHMM2.0.model" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = () -> { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("transm", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runtransm); MenuItem runtrnascan = new MenuItem("tRNAscan"); runtrnascan.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { Path specdir = root.resolve(spec + ".fna"); if (!Files.exists(specdir)) { if (spec.startsWith("MAT")) { specdir = root.resolve(spec + ".gbk.fna"); } else specdir = root.resolve("fn_" + spec + "_scaffolds.fastg"); } System.err.println(Files.exists(specdir)); Path sigout = root.resolve("trnas.txt"); if (hostname.equals("localhost1")) { Path[] pt = new Path[] { specdir, sigout, null }; String[] cmds = { "/usr/local/bin/tRNAscan-SE", "-B", "-" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { Path[] pt = new Path[] { null, sigout, null }; Path p = Paths.get(spec + ".trnascan"); Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); List<String> lcmd; if (hostname.equals("localhost")) { //String[] cmds = {"/usr/local/bin/trnascan-1.4", spec + ".trnascan"}; String[] cmds = { "/usr/local/bin/tRNAscan-SE", "-B", spec + ".trnascan" }; lcmd = Arrays.asList(cmds); } else { String[] cmds = { "scp", spec + ".trnascan", hostname + ":~", ";", "ssh", hostname, "trnascan-1.4", spec + ".trnascan" }; lcmd = Arrays.asList(cmds); //String[] cmds = {"ssh",hostname,"tRNAscan-SE","-B","-"}; } commands.add(pt); commands.add(lcmd); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = () -> { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("tRNAscan", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } })); windowmenu.getItems().add(runtrnascan); Menu select = new Menu("Select"); MenuItem breakpointselAction = new MenuItem("Select breakpoints"); breakpointselAction.setOnAction(actionEvent -> { String spec = syncolorcomb.getSelectionModel().getSelectedItem(); int rr = 0; for (Gene g : geneset.genelist) { if (!spec.equals(g.getSpecies()) && g.getSpecies().contains("eggert")) { Tegeval tv2 = g.tegeval; Annotation n2 = tv2.getNext(); Annotation p2 = tv2.getPrevious(); GeneGroup gg = g.getGeneGroup(); if (gg.getName().contains("rhodane")) { System.err.println(); } Teginfo ti = gg.getGenes(spec); int msimcount = 0; if (ti != null) { for (Tegeval tv1 : ti.tset) { int simcount = 0; Annotation n = tv1.getNext(); Annotation p = tv1.getPrevious(); GeneGroup ggg = tv1.getGene().getGeneGroup(); if (n2 != null) { if (ggg == n2.getGene().getGeneGroup()) { simcount++; } Annotation nn2 = n2.getNext(); if (nn2 != null) { if (ggg == nn2.getGene().getGeneGroup()) { simcount++; } } } if (p2 != null) { if (ggg == p2.getGene().getGeneGroup()) { simcount++; } Annotation pp2 = p2.getPrevious(); if (pp2 != null) { if (ggg == pp2.getGene().getGeneGroup()) { simcount++; } } } if (n != null) { GeneGroup ngg = n.getGene().getGeneGroup(); if (ngg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (ngg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (ngg == p2.getGene().getGeneGroup()) { simcount++; } } Annotation nn = n.getNext(); if (nn != null) { ngg = nn.getGene().getGeneGroup(); if (ngg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (ngg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (ngg == p2.getGene().getGeneGroup()) { simcount++; } } } } if (p != null) { GeneGroup pgg = p.getGene().getGeneGroup(); if (pgg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (pgg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (pgg == p2.getGene().getGeneGroup()) { simcount++; } } Annotation pp = p.getPrevious(); if (pp != null) { pgg = pp.getGene().getGeneGroup(); if (pgg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (pgg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (pgg == p2.getGene().getGeneGroup()) { simcount++; } } } } //double rat = GeneCompare.invertedGradientRatio(spec, contigs, -1.0, gg, tv); if (simcount >= msimcount) { //tv = tv1; msimcount = simcount; } //double ratio = GeneCompare.invertedGradientRatio(spec, contigs, -1.0, gg, tv); //GeneCompare.gradientColor(); } if (msimcount < 2) { gtable.getSelectionModel().select(g); } } } rr++; } /*List<Sequence> contigs = geneset.speccontigMap.get( spec ); for( Sequence c : contigs ) { for( Annotation ann : c.annset ) { Tegeval tv = (Tegeval)ann; } }*/ }); MenuItem saveselAction = new MenuItem("Save selection"); saveselAction.setOnAction(actionEvent -> { /*int[] rr = table.getSelectedRows(); if( rr.length > 0 ) { String val = Integer.toString( table.convertRowIndexToModel(rr[0]) ); for( int i = 1; i < rr.length; i++ ) { val += ","+table.convertRowIndexToModel(rr[i]); } String selname = JOptionPane.showInputDialog("Selection name"); if( comp instanceof Applet ) { try { ((GeneSetHead)comp).saveSel( selname, val); } catch (Exception e1) { e1.printStackTrace(); } } }*/ }); select.getItems().add(breakpointselAction); select.getItems().add(saveselAction); select.getItems().add(new SeparatorMenuItem()); MenuItem showall = new MenuItem("Show all"); showall.setOnAction(actionEvent -> { genefilterset.clear(); updateFilter(table, label); }); select.getItems().add(showall); MenuItem croptosel = new MenuItem("Crop to selection"); croptosel.setOnAction(actionEvent -> { Set<GeneGroup> selitems = new HashSet<>(table.getSelectionModel().getSelectedItems()); filteredData.setPredicate(p -> selitems.contains(p)); }); select.getItems().add(croptosel); MenuItem croptoinvsel = new MenuItem("Crop to inverted selection"); croptoinvsel.setOnAction(actionEvent -> { genefilterset.clear(); for (int i = 0; i < table.getItems().size(); i++) { if (!table.getSelectionModel().isSelected(i)) { genefilterset.add(i); } } updateFilter(table, label); }); select.getItems().add(croptoinvsel); MenuItem removesel = new MenuItem("Remove selection"); removesel.setOnAction(actionEvent -> { // genefilterset.clear(); //int[] rr = table.getSelectedRows(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<Integer>(); for (int r : table.getSelectionModel().getSelectedIndices()) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } else { for (int r : table.getSelectionModel().getSelectedIndices()) { //int mr = table.convertRowIndexToModel(r); genefilterset.remove(r); } } updateFilter(table, label); }); select.getItems().add(removesel); MenuItem invsel = new MenuItem("Invert selection"); invsel.setOnAction(actionEvent -> { ObservableList<GeneGroup> selitems = table.getSelectionModel().getSelectedItems(); List<GeneGroup> newsel = new ArrayList<>(filteredData); newsel.removeAll(selitems); table.getSelectionModel().clearSelection(); newsel.stream().forEach(gg -> table.getSelectionModel().select(gg)); // genefilterset.clear(); //int[] rr = table.getSelectedRows(); /*Set<Integer> iset = new HashSet<>(); for( int r : table.getSelectionModel().getSelectedIndices() ) { iset.add( r ); } table.getSelectionModel().clearSelection(); for (int r = 0; r < table.getItems().size(); r++) { if( !iset.contains(r) ) table.getSelectionModel().select(r); /*if (table.isRowSelected(r)) table.removeRowSelectionInterval(r, r); else table.addRowSelectionInterval(r, r); }*/ }); select.getItems().add(invsel); //select.addSeparator(); select.getItems().add(new SeparatorMenuItem()); MenuItem selsinglemult = new MenuItem("Select single copy genes found in multiple strains"); selsinglemult.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { Set<String> checkspec = new HashSet<String>(gg.species.keySet()); checkspec.retainAll(specset); if (gg.getCommonTag() == null && checkspec.size() > 1 && gg.getTegevals().size() == gg.species.size()) {//gg.getTegevals(checkspec).size() == checkspec.size() ) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglemult); MenuItem selsinglemultstrain = new MenuItem( "Select single copy genes in accessory genome of multiple strains"); selsinglemultstrain.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { Set<String> checkspec = new HashSet<String>(gg.species.keySet()); checkspec.retainAll(specset); if (gg.getCommonTag() == null && checkspec.size() > 1 && checkspec.size() < specset.size() && gg.getTegevals().size() == gg.species.size()) {//gg.getTegevals(checkspec).size() == checkspec.size() ) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglemultstrain); MenuItem selsinglecopygenes = new MenuItem("Select single copy genes"); selsinglecopygenes.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { if (gg.getTegevals().size() == gg.species.size()) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglecopygenes); MenuItem selduplgenes = new MenuItem("Select duplicated genes"); selduplgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { int cnt = 0; for (String spec : gg.species.keySet()) { Teginfo ti = gg.species.get(spec); if (ti.tset.size() == 2) { List<Tegeval> ta = new ArrayList<Tegeval>(ti.tset); if (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) cnt++; } } if ((float) cnt / (float) gg.species.size() > 0.7) { table.getSelectionModel().select(gg); } } }); select.getItems().add(selduplgenes); MenuItem seltriplgenes = new MenuItem("Select triplicated genes"); seltriplgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { int cnt = 0; for (String spec : gg.species.keySet()) { Teginfo ti = gg.species.get(spec); if (ti.tset.size() == 3) { List<Tegeval> ta = new ArrayList<Tegeval>(ti.tset); if ((ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if ((float) cnt / (float) gg.species.size() > 0.7) { table.getSelectionModel().select(gg); } } }); select.getItems().add(seltriplgenes); MenuItem selplasmidgenes = new MenuItem("Select plasmid genes"); selplasmidgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { if (gg.isOnAnyPlasmid()) { table.getSelectionModel().select(gg); } /*int cnt = 0; for( String spec : gg.species.keySet() ) { Teginfo ti = gg.species.get( spec ); if( ti.tset.size() == 3 ) { List<Tegeval> ta = new ArrayList<Tegeval>( ti.tset ); if( (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if( (float)cnt / (float)gg.species.size() > 0.7 ) { int r = table.convertRowIndexToView(gg.index); table.addRowSelectionInterval(r, r); }*/ } }); select.getItems().add(selplasmidgenes); MenuItem selectphagegenes = new MenuItem("Select phage genes"); selectphagegenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { if (gg.isInAnyPhage()) { table.getSelectionModel().select(gg); } /*int cnt = 0; for( String spec : gg.species.keySet() ) { Teginfo ti = gg.species.get( spec ); if( ti.tset.size() == 3 ) { List<Tegeval> ta = new ArrayList<Tegeval>( ti.tset ); if( (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if( (float)cnt / (float)gg.species.size() > 0.7 ) { int r = table.convertRowIndexToView(gg.index); table.addRowSelectionInterval(r, r); }*/ } }); select.getItems().add(selectphagegenes); select.getItems().add(new SeparatorMenuItem()); MenuItem selectsharingaction = new MenuItem("Select sharing"); selectsharingaction.setOnAction(actionEvent -> { RadioButton panbtn = new RadioButton("Pan"); RadioButton corebtn = new RadioButton("Core"); RadioButton blehbtn = new RadioButton("Only in"); ToggleGroup tg = new ToggleGroup(); panbtn.setToggleGroup(tg); corebtn.setToggleGroup(tg); blehbtn.setToggleGroup(tg); HBox sp = new HBox(); sp.getChildren().add(panbtn); sp.getChildren().add(corebtn); sp.getChildren().add(blehbtn); Scene scene = new Scene(sp); //FlowLayout flowlayout = new FlowLayout(); final JFXPanel c = new JFXPanel(); c.setScene(scene); /*Group root = new Group(); Scene scene = new Scene(root, javafx.scene.paint.Color.ALICEBLUE); root.getChildren().add(panbtn); root.getChildren().add(corebtn); root.getChildren().add(blehbtn); JFXPanel fxpanel = new JFXPanel(); fxpanel.setScene( scene );*/ //bg.add( panbtn ); //bg.add( corebtn ); //bg.add( blehbtn ); corebtn.setSelected(true); //Object[] objs = new Object[] { panbtn, corebtn }; //JOptionPane.showMessageDialog( geneset, objs, "Select id types", JOptionPane.PLAIN_MESSAGE ); SwingUtilities.invokeLater(new Runnable() { public void run() { final List<String> species = geneset.getSpecies(); TableModel model = new TableModel() { @Override public int getRowCount() { return species.size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return species.get(rowIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table = new JTable(model); table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll = new JScrollPane(table); Object[] objs = new Object[] { scroll, c }; JOptionPane.showMessageDialog(comp, objs); final Set<String> specs = new HashSet<String>(); int[] rr = table.getSelectedRows(); for (int r : rr) { String spec = (String) table.getValueAt(r, 0); specs.add(spec); } Platform.runLater(new Runnable() { public void run() { for (GeneGroup gg : geneset.allgenegroups) { if (blehbtn.isSelected()) { Set<String> ss = new HashSet<String>(gg.species.keySet()); ss.removeAll(specs); if (ss.size() == 0) { GeneSetHead.this.table.getSelectionModel().select(gg); } } else if (gg.species.keySet().containsAll(specs) && (panbtn.isSelected() || specs.size() == gg.species.size())) { GeneSetHead.this.table.getSelectionModel().select(gg); } } } }); } }); }); select.getItems().add(selectsharingaction); MenuItem selectdirtyaction = new MenuItem("Select dirty"); selectdirtyaction.setOnAction(actionEvent -> { if (!isGeneview()) { int i = 0; for (GeneGroup gg : geneset.allgenegroups) { if (gg.containsDirty()) { table.getSelectionModel().select(gg); } i++; } } }); select.getItems().add(selectdirtyaction); MenuItem selectdesignationaction = new MenuItem("Select designation"); selectdesignationaction.setOnAction(actionEvent -> { JComboBox<String> descombo = new JComboBox<String>( geneset.deset.toArray(new String[geneset.deset.size()])); descombo.insertItemAt("", 0); descombo.setSelectedIndex(0); JOptionPane.showMessageDialog(GeneSetHead.this, descombo); String seldes = (String) descombo.getSelectedItem(); if (!isGeneview()) { int i = 0; for (GeneGroup gg : geneset.allgenegroups) { if (gg.genes != null) for (Gene g : gg.genes) { if (seldes.equals(g.tegeval.designation)) { table.getSelectionModel().select(gg); } } i++; } } }); select.getItems().add(selectdesignationaction); MenuItem blastselect = new MenuItem("Blast select"); blastselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blast(false))); select.getItems().add(blastselect); MenuItem blastxselect = new MenuItem("Blastx select"); blastxselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blast(true))); select.getItems().add(blastxselect); MenuItem blastnselect = new MenuItem("Blastn select"); blastnselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blastn(true))); select.getItems().add(blastnselect); MenuItem blastsearch = new MenuItem("Blastn search"); blastsearch.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blastn(false))); select.getItems().add(blastsearch); menubar.getMenus().add(file); menubar.getMenus().add(edit); menubar.getMenus().add(view); menubar.getMenus().add(sequencemenu); menubar.getMenus().add(windowmenu); menubar.getMenus().add(select); menubar.getMenus().add(help); if (comp != null) { final Window window = SwingUtilities.windowForComponent(comp); initFSKeyListener(window); if (comp instanceof JFrame || window instanceof JFrame) { JFrame frame = (JFrame) (window == null ? comp : window); if (!frame.isResizable()) frame.setResizable(true); frame.addKeyListener(keylistener); frame.setJMenuBar(jmenubar); } } final Button jb = new Button("Atlas"); jb.setOnAction(event -> { try { URL url = new URL("file:///home/sigmar/workspace/distann/bin/circle.html"); GeneSetHead.this.getAppletContext().showDocument(url, "_blank"); } catch (MalformedURLException e1) { e1.printStackTrace(); } }); try { newSoft(jb, comp, genetable, upper, lower, toolbar, btoolbar, GeneSetHead.this, selcomb); } catch (IOException e) { e.printStackTrace(); } if (comp != null) { if (comp instanceof Applet) try { ((GeneSetHead) comp).saveSel(null, null); } catch (NoSuchMethodError | Exception e1) { e1.printStackTrace(); } //comp.add( cc ); } }
From source file:org.thelq.stackexchange.dbimport.gui.GUI.java
public GUI(Controller passedController) { //Initialize logger logAppender = new GUILogAppender(this); //Set our Look&Feel try {//from w w w . java 2 s . c o m if (SystemUtils.IS_OS_WINDOWS) UIManager.setLookAndFeel(new WindowsLookAndFeel()); else UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { log.warn("Defaulting to Swing L&F due to exception", e); } this.controller = passedController; frame = new JFrame(); frame.setTitle("Unified StackExchange Data Dump Importer v" + Controller.VERSION); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Setup menu JMenuBar menuBar = new JMenuBar(); menuAdd = new JMenuItem("Add Folders/Archives"); menuAdd.setMnemonic(KeyEvent.VK_F); menuBar.add(menuAdd); frame.setJMenuBar(menuBar); //Primary panel FormLayout primaryLayout = new FormLayout("5dlu, pref:grow, 5dlu, 5dlu, pref", "pref, top:pref, pref, fill:140dlu:grow, pref, fill:80dlu"); PanelBuilder primaryBuilder = new PanelBuilder(primaryLayout) .border(BorderFactory.createEmptyBorder(5, 5, 5, 5)); //DB Config panel primaryBuilder.addSeparator("Database Configuration", CC.xyw(1, 1, 2)); FormLayout configLayout = new FormLayout("pref, 3dlu, pref:grow, 6dlu, pref", "pref, pref:grow, 3dlu, pref:grow, 3dlu, pref:grow, 3dlu, pref:grow, 3dlu, pref:grow, 3dlu, pref:grow"); configLayout.setHonorsVisibility(true); final PanelBuilder configBuilder = new PanelBuilder(configLayout); configBuilder.addLabel("Server", CC.xy(1, 2), dbType = new JComboBox<DatabaseOption>(), CC.xy(3, 2)); configBuilder.add(dbAdvanced = new JCheckBox("Show advanced options"), CC.xy(5, 2)); configBuilder.addLabel("JDBC Connection", CC.xy(1, 4), jdbcString = new JTextField(15), CC.xyw(3, 4, 3)); configBuilder.addLabel("Username", CC.xy(1, 6), username = new JTextField(10), CC.xy(3, 6)); configBuilder.addLabel("Password", CC.xy(1, 8), password = new JPasswordField(10), CC.xy(3, 8)); configBuilder.add(importButton = new JButton("Import"), CC.xywh(5, 6, 1, 3)); //Add hidden JLabel dialectLabel = new JLabel("Dialect"); dialectLabel.setVisible(false); configBuilder.add(dialectLabel, CC.xy(1, 10), dialect = new JTextField(10), CC.xyw(3, 10, 3)); dialect.setVisible(false); JLabel driverLabel = new JLabel("Driver"); driverLabel.setVisible(false); configBuilder.add(driverLabel, CC.xy(1, 12), driver = new JTextField(10) { @Override public void setText(String text) { if (StringUtils.isBlank(text)) log.debug("Text is blank", new RuntimeException("Text " + text + " is blank")); super.setText(text); } }, CC.xyw(3, 12, 3)); driver.setVisible(false); primaryBuilder.add(configBuilder.getPanel(), CC.xy(2, 2)); //Options primaryBuilder.addSeparator("Options", CC.xyw(4, 1, 2)); FormLayout optionsLayout = new FormLayout("pref, 3dlu, pref:grow", ""); DefaultFormBuilder optionsBuilder = new DefaultFormBuilder(optionsLayout); optionsBuilder.append(disableCreateTables = new JCheckBox("Disable Creating Tables"), 3); optionsBuilder.append("Global Table Prefix", globalTablePrefix = new JTextField(7)); optionsBuilder.append("Threads", threads = new JSpinner()); //Save a core for the database int numThreads = Runtime.getRuntime().availableProcessors(); numThreads = (numThreads != 1) ? numThreads - 1 : numThreads; threads.setModel(new SpinnerNumberModel(numThreads, 1, 100, 1)); optionsBuilder.append("Batch Size", batchSize = new JSpinner()); batchSize.setModel(new SpinnerNumberModel(500, 1, 500000, 1)); primaryBuilder.add(optionsBuilder.getPanel(), CC.xy(5, 2)); //Locations primaryBuilder.addSeparator("Dump Locations", CC.xyw(1, 3, 5)); FormLayout locationsLayout = new FormLayout("pref, 15dlu, pref, 5dlu, pref, 5dlu, pref:grow, 2dlu, pref", ""); locationsBuilder = new DefaultFormBuilder(locationsLayout, new ScrollablePanel()).background(Color.WHITE) .lineGapSize(Sizes.ZERO); locationsPane = new JScrollPane(locationsBuilder.getPanel()); locationsPane.getViewport().setBackground(Color.white); locationsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); locationsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); primaryBuilder.add(locationsPane, CC.xyw(2, 4, 4)); //Logger primaryBuilder.addSeparator("Log", CC.xyw(1, 5, 5)); loggerText = new JTextPane(); loggerText.setEditable(false); JPanel loggerTextPanel = new JPanel(new BorderLayout()); loggerTextPanel.add(loggerText); JScrollPane loggerPane = new JScrollPane(loggerTextPanel); loggerPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); loggerPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); JPanel loggerPanePanel = new JPanel(new BorderLayout()); loggerPanePanel.add(loggerPane); primaryBuilder.add(loggerPanePanel, CC.xyw(2, 6, 4)); menuAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //TODO: Allow 7z files but handle corner cases final JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); fc.setMultiSelectionEnabled(true); fc.setDialogTitle("Select Folders/Archives"); fc.addChoosableFileFilter(new FileNameExtensionFilter("Archives", "7z", "zip")); fc.addChoosableFileFilter(new FileFilter() { @Getter protected String description = "Folders"; @Override public boolean accept(File file) { return file.isDirectory(); } }); if (fc.showOpenDialog(frame) != JFileChooser.APPROVE_OPTION) return; //Add files and folders in a seperate thread while updating gui in EDT importButton.setEnabled(false); for (File curFile : fc.getSelectedFiles()) { DumpContainer dumpContainer = null; try { if (curFile.isDirectory()) dumpContainer = new FolderDumpContainer(curFile); else dumpContainer = new ArchiveDumpContainer(controller, curFile); controller.addDumpContainer(dumpContainer); } catch (Exception ex) { String type = (dumpContainer != null) ? dumpContainer.getType() : ""; LoggerFactory.getLogger(getClass()).error("Cannot open " + type, ex); String location = (dumpContainer != null) ? Utils.getLongLocation(dumpContainer) : ""; showErrorDialog(ex, "Cannot open " + location, curFile.getAbsolutePath()); continue; } } updateLocations(); importButton.setEnabled(true); } }); //Add options (Could be in a map, but this is cleaner) dbType.addItem(new DatabaseOption().name("MySQL 5.5.3+") .jdbcString("jdbc:mysql://127.0.0.1:3306/stackexchange?rewriteBatchedStatements=true") .dialect("org.hibernate.dialect.MySQL5Dialect").driver("com.mysql.jdbc.Driver")); dbType.addItem(new DatabaseOption().name("PostgreSQL 8.1") .jdbcString("jdbc:postgresql://127.0.0.1:5432/stackexchange") .dialect("org.hibernate.dialect.PostgreSQL81Dialect").driver("org.postgresql.Driver")); dbType.addItem(new DatabaseOption().name("PostgreSQL 8.2+") .jdbcString("jdbc:postgresql://127.0.0.1:5432/stackexchange") .dialect("org.hibernate.dialect.PostgreSQL82Dialect").driver("org.postgresql.Driver")); dbType.addItem(new DatabaseOption().name("SQL Server") .jdbcString("jbdc:jtds:mssql://127.0.0.1:1433/stackexchange") .dialect("org.hibernate.dialect.SQLServerDialect").driver("net.sourceforge.jtds.jdbc.Driver")); dbType.addItem(new DatabaseOption().name("SQL Server 2005+") .jdbcString("jbdc:jtds:mssql://127.0.0.1:1433/stackexchange") .dialect("org.hibernate.dialect.SQLServer2005Dialect").driver("net.sourceforge.jtds.jdbc.Driver")); dbType.addItem(new DatabaseOption().name("SQL Server 2008+") .jdbcString("jbdc:jtds:mssql://127.0.0.1:1433/stackexchange") .dialect("org.hibernate.dialect.SQLServer2008Dialect").driver("net.sourceforge.jtds.jdbc.Driver")); dbType.addItem(new DatabaseOption().name("H2").jdbcString("jdbc:h2:stackexchange") .dialect("org.hibernate.dialect.H2Dialect").driver("org.h2.Driver")); dbType.setSelectedItem(null); dbType.addItemListener(new ItemListener() { boolean shownMysqlWarning = false; public void itemStateChanged(ItemEvent e) { //Don't run this twice for a single select if (e.getStateChange() == ItemEvent.DESELECTED) return; DatabaseOption selectedOption = (DatabaseOption) dbType.getSelectedItem(); if (selectedOption.name().startsWith("MySQL") && !shownMysqlWarning) { //Hide popup so you don't have to click twice on the dialog dbType.setPopupVisible(false); JOptionPane.showMessageDialog(frame, "Warning: Your server must be configured with character_set_server=utf8mb4" + "\nOtherwise, data dumps that contain 4 byte UTF-8 characters will fail", "MySQL Warning", JOptionPane.WARNING_MESSAGE); shownMysqlWarning = true; } setDbOption(selectedOption); } }); //Show and hide advanced options with checkbox dbAdvanced.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { boolean selected = ((JCheckBox) e.getSource()).isSelected(); driver.setVisible(selected); ((JLabel) driver.getClientProperty("labeledBy")).setVisible(selected); dialect.setVisible(selected); ((JLabel) dialect.getClientProperty("labeledBy")).setVisible(selected); } }); importButton.addActionListener(new ActionListener() { protected void showImportError(String error) { JOptionPane.showMessageDialog(frame, error, "Configuration Error", JOptionPane.ERROR_MESSAGE); } protected void showInputErrorDatabase(String error) { if (dbType.getSelectedItem() == null) showImportError("No dbType specified, " + StringUtils.uncapitalize(error)); else showImportError(error); } public void actionPerformed(ActionEvent e) { boolean validationPassed = false; if (controller.getDumpContainers().isEmpty()) showImportError("Please add dump folders/archives"); else if (StringUtils.isBlank(jdbcString.getText())) showInputErrorDatabase("Must specify JDBC String"); else if (StringUtils.isBlank(driver.getText())) showInputErrorDatabase("Must specify driver"); else if (StringUtils.isBlank(dialect.getText())) showInputErrorDatabase("Must specify hibernate dialect"); else validationPassed = true; if (!validationPassed) return; //Disable all GUI components so they can't change anything during processing setGuiEnabled(false); //Run in new thread controller.getGeneralThreadPool().execute(new Runnable() { public void run() { try { start(); } catch (final Exception e) { //Show an error message box SwingUtilities.invokeLater(new Runnable() { public void run() { LoggerFactory.getLogger(getClass()).error("Cannot import", e); showErrorDialog(e, "Cannot import", null); } }); } //Renable GUI SwingUtilities.invokeLater(new Runnable() { public void run() { setGuiEnabled(true); } }); } }); } }); //Done, init logger logAppender.init(); log.info("Finished creating GUI"); //Display frame.setContentPane(primaryBuilder.getPanel()); frame.pack(); frame.setMinimumSize(frame.getSize()); frame.setVisible(true); }
From source file:org.tinymediamanager.ui.movies.dialogs.MovieEditorDialog.java
/** * Create the dialog.//from w ww . j av a 2 s .c om * * @param movie * the movie * @param inQueue * the in queue */ public MovieEditorDialog(Movie movie, boolean inQueue) { super(BUNDLE.getString("movie.edit"), "movieEditor"); //$NON-NLS-1$ setBounds(5, 5, 950, 650); movieToEdit = movie; ids = MediaIdTable.convertIdMapToEventList(movieToEdit.getIds()); for (MediaFile mf : movie.getMediaFiles()) { mediaFiles.add(new MediaFile(mf)); } getContentPane().setLayout(new BorderLayout()); { JPanel panelPath = new JPanel(); getContentPane().add(panelPath, BorderLayout.NORTH); panelPath.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, RowSpec.decode("15px"), FormFactory.RELATED_GAP_ROWSPEC, })); JLabel lblMoviePathT = new JLabel(BUNDLE.getString("metatag.path")); //$NON-NLS-1$ panelPath.add(lblMoviePathT, "2, 2, left, top"); lblMoviePath = new JLabel(""); TmmFontHelper.changeFont(lblMoviePath, 1.166, Font.BOLD); panelPath.add(lblMoviePath, "5, 2, left, top"); } JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.NORTH); getContentPane().add(tabbedPane, BorderLayout.CENTER); /** * DetailsPanel 1 */ { details1Panel.setBorder(new EmptyBorder(5, 5, 5, 5)); details1Panel.setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(40dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("7dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("25dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("24dlu"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("7dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.UNRELATED_GAP_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("100dlu:grow(2)"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, RowSpec.decode("50px:grow"), FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("15dlu"), FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, RowSpec.decode("fill:50dlu:grow"), FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, RowSpec.decode("50px"), FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, RowSpec.decode("fill:default:grow"), })); { JLabel lblTitle = new JLabel(BUNDLE.getString("metatag.title")); //$NON-NLS-1$ details1Panel.add(lblTitle, "2, 4, right, default"); } { tfTitle = new JTextField(); details1Panel.add(tfTitle, "4, 4, 15, 1, fill, default"); tfTitle.setColumns(10); } { // JLabel lblPoster = new JLabel(""); lblPoster = new ImageLabel(); lblPoster.setAlternativeText(BUNDLE.getString("image.notfound.poster")); //$NON-NLS-1$ lblPoster.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.POSTER, movieList.getDefaultArtworkScrapers(), lblPoster, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblPoster.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); details1Panel.add(lblPoster, "22, 4, 3, 23, fill, fill"); } { JLabel lblOriginalTitle = new JLabel(BUNDLE.getString("metatag.originaltitle")); //$NON-NLS-1$ details1Panel.add(lblOriginalTitle, "2, 6, right, default"); } { tfOriginalTitle = new JTextField(); details1Panel.add(tfOriginalTitle, "4, 6, 15, 1, fill, top"); tfOriginalTitle.setColumns(10); } { JLabel lblSorttitle = new JLabel(BUNDLE.getString("metatag.sorttitle")); //$NON-NLS-1$ details1Panel.add(lblSorttitle, "2, 8, right, default"); } { tfSorttitle = new JTextField(); details1Panel.add(tfSorttitle, "4, 8, 15, 1, fill, default"); tfSorttitle.setColumns(10); } { JLabel lblTagline = new JLabel(BUNDLE.getString("metatag.tagline")); //$NON-NLS-1$ details1Panel.add(lblTagline, "2, 10, right, top"); } { JScrollPane scrollPaneTagline = new JScrollPane(); tpTagline = new JTextPane(); scrollPaneTagline.setViewportView(tpTagline); details1Panel.add(scrollPaneTagline, "4, 10, 15, 1, fill, fill"); } { JLabel lblYear = new JLabel(BUNDLE.getString("metatag.year")); //$NON-NLS-1$ details1Panel.add(lblYear, "2, 12, right, default"); } { spYear = new YearSpinner(); details1Panel.add(spYear, "4, 12, fill, top"); } { JLabel lblRuntime = new JLabel(BUNDLE.getString("metatag.runtime")); //$NON-NLS-1$ details1Panel.add(lblRuntime, "8, 12, right, default"); } { spRuntime = new JSpinner(); details1Panel.add(spRuntime, "10, 12, fill, default"); } { JLabel lblMin = new JLabel(BUNDLE.getString("metatag.minutes")); //$NON-NLS-1$ details1Panel.add(lblMin, "12, 12"); } { JLabel lblRating = new JLabel(BUNDLE.getString("metatag.rating")); //$NON-NLS-1$ details1Panel.add(lblRating, "16, 12, right, default"); } { spRating = new JSpinner(); details1Panel.add(spRating, "18, 12"); } spRating.setModel(new SpinnerNumberModel(movie.getRating(), 0.0, 10.0, 0.1)); { JLabel lblReleaseDate = new JLabel(BUNDLE.getString("metatag.releasedate")); //$NON-NLS-1$ details1Panel.add(lblReleaseDate, "2, 14, right, default"); } { dpReleaseDate = new DatePicker(movie.getReleaseDate()); details1Panel.add(dpReleaseDate, "4, 14"); } { JLabel lblCertification = new JLabel(BUNDLE.getString("metatag.certification")); //$NON-NLS-1$ details1Panel.add(lblCertification, "8, 14, right, default"); } cbCertification = new JComboBox(); details1Panel.add(cbCertification, "10, 14, 3, 1, fill, default"); { JLabel lblTop = new JLabel(BUNDLE.getString("metatag.top250")); //$NON-NLS-1$ details1Panel.add(lblTop, "16, 14, right, default"); } { spTop250 = new JSpinner(); details1Panel.add(spTop250, "18, 14"); } spTop250.setValue(movie.getTop250()); { JLabel lblIds = new JLabel("Ids"); details1Panel.add(lblIds, "2, 16, right, bottom"); } { JScrollPane scrollPaneIds = new JScrollPane(); details1Panel.add(scrollPaneIds, "4, 16, 9, 5, fill, fill"); { tableIds = new MediaIdTable(ids, ScraperType.MOVIE); scrollPaneIds.setViewportView(tableIds); } } { JButton btnAddId = new JButton(""); btnAddId.setAction(new AddIdAction()); btnAddId.setIcon(IconManager.LIST_ADD); btnAddId.setMargin(new Insets(2, 2, 2, 2)); details1Panel.add(btnAddId, "2, 18, right, top"); } { JButton btnRemoveId = new JButton(""); btnRemoveId.setAction(new RemoveIdAction()); btnRemoveId.setIcon(IconManager.LIST_REMOVE); btnRemoveId.setMargin(new Insets(2, 2, 2, 2)); details1Panel.add(btnRemoveId, "2, 20, right, top"); } { JLabel lblSpokenLanguages = new JLabel(BUNDLE.getString("metatag.spokenlanguages")); //$NON-NLS-1$ details1Panel.add(lblSpokenLanguages, "2, 22, right, default"); } { tfSpokenLanguages = new JTextField(); details1Panel.add(tfSpokenLanguages, "4, 22, fill, default"); tfSpokenLanguages.setColumns(10); } { JLabel lblCountry = new JLabel(BUNDLE.getString("metatag.country")); //$NON-NLS-1$ details1Panel.add(lblCountry, "8, 22, right, default"); } { tfCountry = new JTextField(); details1Panel.add(tfCountry, "10, 22, 3, 1, fill, default"); tfCountry.setColumns(10); } { JLabel lblMovieSet = new JLabel(BUNDLE.getString("metatag.movieset")); //$NON-NLS-1$ details1Panel.add(lblMovieSet, "2, 24, right, default"); } { cbMovieSet = new JComboBox(); cbMovieSet.addItem(""); details1Panel.add(cbMovieSet, "4, 24, 9, 1, fill, default"); } { JLabel lblDateAdded = new JLabel(BUNDLE.getString("metatag.dateadded")); //$NON-NLS-1$ details1Panel.add(lblDateAdded, "2, 26, right, default"); } { spDateAdded = new JSpinner(new SpinnerDateModel()); // JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(spDateAdded, // "dd.MM.yyyy HH:mm:ss"); // spDateAdded.setEditor(timeEditor); details1Panel.add(spDateAdded, "4, 26"); } spDateAdded.setValue(movie.getDateAdded()); JLabel lblWatched = new JLabel(BUNDLE.getString("metatag.watched")); //$NON-NLS-1$ details1Panel.add(lblWatched, "8, 26, right, default"); { cbWatched = new JCheckBox(""); details1Panel.add(cbWatched, "10, 26"); } cbWatched.setSelected(movie.isWatched()); lblWatched.setLabelFor(cbWatched); { JLabel lblSourceT = new JLabel(BUNDLE.getString("metatag.source")); //$NON-NLS-1$ details1Panel.add(lblSourceT, "2, 28, right, default"); } { cbSource = new JComboBox(MediaSource.values()); details1Panel.add(cbSource, "4, 28, fill, default"); } cbSource.setSelectedItem(movie.getMediaSource()); { final JLabel lblEditionT = new JLabel(BUNDLE.getString("metatag.edition")); //$NON-NLS-1$ details1Panel.add(lblEditionT, "8, 28, right, default"); } { cbEdition = new JComboBox(MovieEdition.values()); details1Panel.add(cbEdition, "10, 28, 3, 1, fill, default"); } { JLabel lblVideod = new JLabel(BUNDLE.getString("metatag.3d")); //$NON-NLS-1$ details1Panel.add(lblVideod, "16, 28, right, default"); } { chckbxVideo3D = new JCheckBox(""); details1Panel.add(chckbxVideo3D, "18, 28"); } chckbxVideo3D.setSelected(movie.isVideoIn3D()); { JLabel lblPlot = new JLabel(BUNDLE.getString("metatag.plot")); //$NON-NLS-1$ details1Panel.add(lblPlot, "2, 30, right, top"); } { JScrollPane scrollPanePlot = new JScrollPane(); details1Panel.add(scrollPanePlot, "4, 30, 15, 1, fill, fill"); { tpPlot = new JTextPane(); scrollPanePlot.setViewportView(tpPlot); } } { lblFanart = new ImageLabel(); lblFanart.setAlternativeText(BUNDLE.getString("image.notfound.fanart")); //$NON-NLS-1$ lblFanart.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); lblFanart.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.FANART, movieList.getDefaultArtworkScrapers(), lblFanart, extrathumbs, extrafanarts, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); details1Panel.add(lblFanart, "22, 30, 3, 5, fill, fill"); } lblFanart.setImagePath(movie.getArtworkFilename(MediaFileType.FANART)); { JLabel lblDirector = new JLabel(BUNDLE.getString("metatag.director")); //$NON-NLS-1$ details1Panel.add(lblDirector, "2, 32, right, default"); } { tfDirector = new JTextField(); details1Panel.add(tfDirector, "4, 32, 15, 1, fill, top"); tfDirector.setColumns(10); } { JLabel lblWriter = new JLabel(BUNDLE.getString("metatag.writer")); //$NON-NLS-1$ details1Panel.add(lblWriter, "2, 34, right, default"); } { tfWriter = new JTextField(); details1Panel.add(tfWriter, "4, 34, 15, 1, fill, top"); tfWriter.setColumns(10); } { JLabel lblCompany = new JLabel(BUNDLE.getString("metatag.production")); //$NON-NLS-1$ details1Panel.add(lblCompany, "2, 36, right, top"); } { JScrollPane scrollPaneProduction = new JScrollPane(); details1Panel.add(scrollPaneProduction, "4, 36, 15, 1, fill, fill"); tfProductionCompanies = new JTextPane(); scrollPaneProduction.setViewportView(tfProductionCompanies); } tabbedPane.addTab(BUNDLE.getString("metatag.details"), details1Panel); //$NON-NLS-1$ } /** * DetailsPanel 2 */ { tabbedPane.addTab(BUNDLE.getString("metatag.details2"), details2Panel); //$NON-NLS-1$ details2Panel.setBorder(new EmptyBorder(5, 5, 5, 5)); details2Panel.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(40dlu;default)"), FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("50px:grow"), FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("100px:grow"), FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("fill:default"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow(2)"), })); { JLabel lblActors = new JLabel(BUNDLE.getString("metatag.actors")); //$NON-NLS-1$ details2Panel.add(lblActors, "2, 2, right, default"); } { JScrollPane scrollPane = new JScrollPane(); details2Panel.add(scrollPane, "4, 2, 1, 11"); tableActors = new JTable(); tableActors.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); scrollPane.setViewportView(tableActors); } { JLabel lblProducers = new JLabel(BUNDLE.getString("metatag.producers")); //$NON-NLS-1$ details2Panel.add(lblProducers, "6, 2, right, default"); } { JScrollPane scrollPane = new JScrollPane(); details2Panel.add(scrollPane, "8, 2, 1, 11"); tableProducers = new JTable(); tableProducers.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); scrollPane.setViewportView(tableProducers); } { JButton btnAddActor = new JButton(BUNDLE.getString("cast.actor.add")); //$NON-NLS-1$ btnAddActor.setMargin(new Insets(2, 2, 2, 2)); btnAddActor.setAction(new AddActorAction()); btnAddActor.setIcon(IconManager.LIST_ADD); details2Panel.add(btnAddActor, "2, 4, right, top"); } { JButton btnAddProducer = new JButton((String) null); btnAddProducer.setMargin(new Insets(2, 2, 2, 2)); btnAddProducer.setAction(new AddProducerAction()); btnAddProducer.setIcon(IconManager.LIST_ADD); details2Panel.add(btnAddProducer, "6, 4, right, top"); } { JButton btnRemoveActor = new JButton(BUNDLE.getString("cast.actor.remove")); //$NON-NLS-1$ btnRemoveActor.setMargin(new Insets(2, 2, 2, 2)); btnRemoveActor.setAction(new RemoveActorAction()); btnRemoveActor.setIcon(IconManager.LIST_REMOVE); details2Panel.add(btnRemoveActor, "2,6, right, top"); } { JButton btnRemoveProducer = new JButton((String) null); btnRemoveProducer.setMargin(new Insets(2, 2, 2, 2)); btnRemoveProducer.setAction(new RemoveProducerAction()); btnRemoveProducer.setIcon(IconManager.LIST_REMOVE); details2Panel.add(btnRemoveProducer, "6, 6, right, top"); } { JButton btnMoveActorUp = new JButton((String) null); btnMoveActorUp.setMargin(new Insets(2, 2, 2, 2)); btnMoveActorUp.setAction(new MoveActorUpAction()); btnMoveActorUp.setIcon(IconManager.ARROW_UP); details2Panel.add(btnMoveActorUp, "2, 8, right, top"); } { JButton btnMoveProducerUp = new JButton((String) null); btnMoveProducerUp.setMargin(new Insets(2, 2, 2, 2)); btnMoveProducerUp.setAction(new MoveProducerUpAction()); btnMoveProducerUp.setIcon(IconManager.ARROW_UP); details2Panel.add(btnMoveProducerUp, "6, 8, right, top"); } { JButton btnMoveActorDown = new JButton((String) null); btnMoveActorDown.setMargin(new Insets(2, 2, 2, 2)); btnMoveActorDown.setAction(new MoveActorDownAction()); btnMoveActorDown.setIcon(IconManager.ARROW_DOWN); details2Panel.add(btnMoveActorDown, "2, 10, right, top"); } { JButton btnMoveProducerDown = new JButton((String) null); btnMoveProducerDown.setMargin(new Insets(2, 2, 2, 2)); btnMoveProducerDown.setAction(new MoveProducerDownAction()); btnMoveProducerDown.setIcon(IconManager.ARROW_DOWN); details2Panel.add(btnMoveProducerDown, "6, 10, right, top"); } { JLabel lblGenres = new JLabel(BUNDLE.getString("metatag.genre")); //$NON-NLS-1$ details2Panel.add(lblGenres, "2, 14, right, default"); } { JScrollPane scrollPaneGenres = new JScrollPane(); details2Panel.add(scrollPaneGenres, "4, 14, 1, 5"); { listGenres = new JList(); scrollPaneGenres.setViewportView(listGenres); } } { JLabel lblTags = new JLabel(BUNDLE.getString("metatag.tags")); //$NON-NLS-1$ details2Panel.add(lblTags, "6, 14, right, default"); } { JScrollPane scrollPaneTags = new JScrollPane(); details2Panel.add(scrollPaneTags, "8, 14, 1, 5"); listTags = new JList(); scrollPaneTags.setViewportView(listTags); } { JButton btnAddGenre = new JButton(""); btnAddGenre.setAction(new AddGenreAction()); btnAddGenre.setIcon(IconManager.LIST_ADD); btnAddGenre.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnAddGenre, "2, 16, right, top"); } { JButton btnAddTag = new JButton(""); btnAddTag.setAction(new AddTagAction()); btnAddTag.setIcon(IconManager.LIST_ADD); btnAddTag.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnAddTag, "6, 16, right, top"); } { JButton btnRemoveGenre = new JButton(""); btnRemoveGenre.setAction(new RemoveGenreAction()); btnRemoveGenre.setMargin(new Insets(2, 2, 2, 2)); btnRemoveGenre.setIcon(IconManager.LIST_REMOVE); details2Panel.add(btnRemoveGenre, "2, 18, right, top"); } { JButton btnRemoveTag = new JButton(""); btnRemoveTag.setAction(new RemoveTagAction()); btnRemoveTag.setIcon(IconManager.LIST_REMOVE); btnRemoveTag.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnRemoveTag, "6, 18, right, top"); } { cbGenres = new AutocompleteComboBox(MediaGenres.values()); details2Panel.add(cbGenres, "4, 20"); } { cbTags = new AutocompleteComboBox(movieList.getTagsInMovies()); details2Panel.add(cbTags, "8, 20"); } { JLabel lblTrailer = new JLabel(BUNDLE.getString("metatag.trailer")); //$NON-NLS-1$ details2Panel.add(lblTrailer, "2, 22, right, default"); } { JScrollPane scrollPaneTrailer = new JScrollPane(); details2Panel.add(scrollPaneTrailer, "4, 22, 5, 5"); tableTrailer = new JTable(); tableTrailer.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); scrollPaneTrailer.setViewportView(tableTrailer); } { JButton btnAddTrailer = new JButton(""); btnAddTrailer.setAction(new AddTrailerAction()); btnAddTrailer.setIcon(IconManager.LIST_ADD); btnAddTrailer.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnAddTrailer, "2, 24, right, top"); } { JButton btnRemoveTrailer = new JButton(""); btnRemoveTrailer.setAction(new RemoveTrailerAction()); btnRemoveTrailer.setIcon(IconManager.LIST_REMOVE); btnRemoveTrailer.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnRemoveTrailer, "2, 26, right, top"); } } /** * extra artwork pane */ { JPanel artworkPanel = new JPanel(); tabbedPane.addTab(BUNDLE.getString("metatag.extraartwork"), null, artworkPanel, null); //$NON-NLS-1$ artworkPanel.setLayout(new FormLayout( new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("250px:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("250px:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("150px:grow"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("50px:grow(2)"), FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("50px:grow(2)"), FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("200px:grow(2)"), FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), })); { JLabel lblLogoT = new JLabel(BUNDLE.getString("mediafiletype.logo")); //$NON-NLS-1$ artworkPanel.add(lblLogoT, "2, 2"); } { lblLogo = new ImageLabel(); lblLogo.setAlternativeText(BUNDLE.getString("image.notfound.logo")); //$NON-NLS-1$ lblLogo.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.LOGO, movieList.getDefaultArtworkScrapers(), lblLogo, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblLogo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblLogo, "2, 4, fill, fill"); } { final JLabel lblClearlogoT = new JLabel(BUNDLE.getString("mediafiletype.clearlogo")); //$NON-NLS-1$ artworkPanel.add(lblClearlogoT, "4, 2"); } { lblClearlogo = new ImageLabel(); lblClearlogo.setAlternativeText(BUNDLE.getString("image.notfound.clearlogo")); //$NON-NLS-1$ lblClearlogo.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.CLEARLOGO, movieList.getDefaultArtworkScrapers(), lblClearlogo, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblClearlogo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblClearlogo, "4, 4, fill, fill"); } { JLabel lblBannerT = new JLabel(BUNDLE.getString("mediafiletype.banner")); //$NON-NLS-1$ artworkPanel.add(lblBannerT, "2, 6"); } { lblBanner = new ImageLabel(); lblBanner.setAlternativeText(BUNDLE.getString("image.notfound.banner")); //$NON-NLS-1$ lblBanner.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.BANNER, movieList.getDefaultArtworkScrapers(), lblBanner, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblBanner.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblBanner, "2, 8, 3, 1, fill, fill"); } { JLabel lblClearartT = new JLabel("ClearArt"); artworkPanel.add(lblClearartT, "2, 10"); } { lblClearart = new ImageLabel(); lblClearart.setAlternativeText(BUNDLE.getString("image.notfound.clearart")); //$NON-NLS-1$ lblClearart.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.CLEARART, movieList.getDefaultArtworkScrapers(), lblClearart, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblClearart.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblClearart, "2, 12, fill, fill"); } { JLabel lblThumbT = new JLabel("Thumb"); artworkPanel.add(lblThumbT, "4, 10"); } { lblThumb = new ImageLabel(); lblThumb.setAlternativeText(BUNDLE.getString("image.notfound.thumb")); //$NON-NLS-1$ lblThumb.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.THUMB, movieList.getDefaultArtworkScrapers(), lblThumb, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblThumb.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblThumb, "4, 12, fill, fill"); } { JLabel lblDiscT = new JLabel("Disc"); artworkPanel.add(lblDiscT, "6, 10"); } { lblDisc = new ImageLabel(); lblDisc.setAlternativeText(BUNDLE.getString("image.notfound.disc")); //$NON-NLS-1$ lblDisc.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(movieToEdit.getIds(), ImageType.DISC, movieList.getDefaultArtworkScrapers(), lblDisc, null, null, MediaType.MOVIE); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblDisc.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblDisc, "6, 12, fill, fill"); } } /** * Media Files */ { mediaFilesPanel = new MediaFileEditorPanel(mediaFiles); tabbedPane.addTab(BUNDLE.getString("metatag.mediafiles"), null, mediaFilesPanel, null); //$NON-NLS-1$ } /** * Button pane */ { JPanel bottomPane = new JPanel(); getContentPane().add(bottomPane, BorderLayout.SOUTH); bottomPane.setLayout(new FormLayout( new ColumnSpec[] { ColumnSpec.decode("371px:grow"), FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC, })); JPanel buttonPane = new JPanel(); bottomPane.add(buttonPane, "2, 2, left, top"); EqualsLayout layout = new EqualsLayout(5); layout.setMinWidth(100); buttonPane.setLayout(layout); { JButton okButton = new JButton(BUNDLE.getString("Button.ok")); //$NON-NLS-1$ buttonPane.add(okButton, "2, 1, fill, top"); okButton.setAction(new ChangeMovieAction()); okButton.setActionCommand("OK"); getRootPane().setDefaultButton(okButton); } { JButton cancelButton = new JButton(BUNDLE.getString("Button.cancel")); //$NON-NLS-1$ buttonPane.add(cancelButton, "4, 1, fill, top"); cancelButton.setAction(new DiscardAction()); cancelButton.setActionCommand("Cancel"); } if (inQueue) { JButton btnAbort = new JButton(BUNDLE.getString("Button.abortqueue")); //$NON-NLS-1$ btnAbort.setAction(new AbortQueueAction()); buttonPane.add(btnAbort, "6, 1, fill, top"); } } initDataBindings(); { int year = 0; try { year = Integer.parseInt(movieToEdit.getYear()); } catch (Exception ignored) { } SimpleDateFormat dateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM); for (Certification cert : Certification .getCertificationsforCountry(MovieModuleManager.MOVIE_SETTINGS.getCertificationCountry())) { cbCertification.addItem(cert); } tfTitle.setText(movieToEdit.getTitle()); tfOriginalTitle.setText(movieToEdit.getOriginalTitle()); tfSorttitle.setText(movieToEdit.getSortTitle()); tpTagline.setText(movieToEdit.getTagline()); tpPlot.setText(movieToEdit.getPlot()); tpPlot.setCaretPosition(0); tfDirector.setText(movieToEdit.getDirector()); tfWriter.setText(movieToEdit.getWriter()); lblPoster.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.POSTER)); tfProductionCompanies.setText(movieToEdit.getProductionCompany()); spRuntime.setValue(movieToEdit.getRuntime()); cbEdition.setSelectedItem(movieToEdit.getEdition()); tfSpokenLanguages.setText(movieToEdit.getSpokenLanguages()); tfCountry.setText(movieToEdit.getCountry()); spYear.setValue(year); cbCertification.setSelectedItem(movieToEdit.getCertification()); lblMoviePath.setText(movieToEdit.getPath()); lblLogo.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.LOGO)); lblClearlogo.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.CLEARLOGO)); lblClearart.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.CLEARART)); lblThumb.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.THUMB)); lblDisc.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.DISCART)); lblBanner.setImagePath(movieToEdit.getArtworkFilename(MediaFileType.BANNER)); for (MovieActor origCast : movieToEdit.getActors()) { MovieActor actor = new MovieActor(); actor.setName(origCast.getName()); actor.setCharacter(origCast.getCharacter()); actor.setThumbUrl(origCast.getThumbUrl()); cast.add(actor); } for (MovieProducer origProducer : movieToEdit.getProducers()) { MovieProducer producer = new MovieProducer(); producer.setName(origProducer.getName()); producer.setRole(origProducer.getRole()); producer.setThumbUrl(origProducer.getThumbUrl()); producers.add(producer); } for (MediaGenres genre : movieToEdit.getGenres()) { genres.add(genre); } for (MovieTrailer trailer : movieToEdit.getTrailer()) { trailers.add(trailer); } for (String tag : movieToEdit.getTags()) { if (StringUtils.isNotBlank(tag)) { tags.add(tag); } } extrathumbs.addAll(movieToEdit.getExtraThumbs()); extrafanarts.addAll(movieToEdit.getExtraFanarts()); for (MovieSet movieSet : movieList.getSortedMovieSetList()) { cbMovieSet.addItem(movieSet); if (movieToEdit.getMovieSet() == movieSet) { cbMovieSet.setSelectedItem(movieSet); } } } // adjust columnn titles - we have to do it this way - thx to windowbuilder pro tableActors.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.name")); //$NON-NLS-1$ tableActors.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.role")); //$NON-NLS-1$ tableProducers.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.name")); //$NON-NLS-1$ tableProducers.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.role")); //$NON-NLS-1$ tableTrailer.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.nfo")); //$NON-NLS-1$ tableTrailer.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.name")); //$NON-NLS-1$ tableTrailer.getColumnModel().getColumn(2).setHeaderValue(BUNDLE.getString("metatag.source")); //$NON-NLS-1$ tableTrailer.getColumnModel().getColumn(3).setHeaderValue(BUNDLE.getString("metatag.quality")); //$NON-NLS-1$ tableTrailer.getColumnModel().getColumn(4).setHeaderValue(BUNDLE.getString("metatag.url")); //$NON-NLS-1$ // adjust table columns tableTrailer.getColumnModel().getColumn(0).setMaxWidth(55); // implement listener to simulate button group tableTrailer.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent arg0) { // click on the checkbox if (arg0.getColumn() == 0) { int row = arg0.getFirstRow(); MovieTrailer changedTrailer = trailers.get(row); // if flag inNFO was changed, change all other trailers flags if (changedTrailer.getInNfo()) { for (MovieTrailer trailer : trailers) { if (trailer != changedTrailer) { trailer.setInNfo(Boolean.FALSE); } } } } } }); }
From source file:org.tinymediamanager.ui.movies.MovieExtendedSearchPanel.java
/** * Instantiates a new movie extended search * // w w w. j a v a2 s . c om * @param model * the model */ public MovieExtendedSearchPanel(MovieSelectionModel model) { super(); setOpaque(false); shadowAlpha = 100; arcs = new Dimension(10, 10); this.movieSelectionModel = model; Map<MovieSearchOptions, Object> savedSearchOptions = MovieModuleManager.MOVIE_SETTINGS.getUiFilters(); // add a dummy mouse listener to prevent clicking through addMouseListener(new MouseAdapter() { }); listCheckListener = new ListCheckListener() { @Override public void removeCheck(ListEvent event) { actionFilter.actionPerformed(new ActionEvent(event.getSource(), 1, "checked")); } @Override public void addCheck(ListEvent event) { actionFilter.actionPerformed(new ActionEvent(event.getSource(), 1, "checked")); } }; setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.UNRELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.UNRELATED_GAP_ROWSPEC, })); JLabel lblFilterBy = new JLabel(BUNDLE.getString("movieextendedsearch.filterby")); //$NON-NLS-1$ setComponentFont(lblFilterBy); add(lblFilterBy, "2, 2, 3, 1"); cbFilterNewMovies = new JCheckBox(""); cbFilterNewMovies.setUI(CHECKBOX_UI); // $hide$ cbFilterNewMovies.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.NEW_MOVIES)); cbFilterNewMovies.setAction(actionFilter); add(cbFilterNewMovies, "2, 4"); lblNewMovies = new JLabel(BUNDLE.getString("movieextendedsearch.newmovies")); //$NON-NLS-1$ setComponentFont(lblNewMovies); add(lblNewMovies, "4, 4, right, default"); cbFilterDuplicates = new JCheckBox(""); cbFilterDuplicates.setUI(CHECKBOX_UI); // $hide$ cbFilterDuplicates.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.DUPLICATES)); cbFilterDuplicates.setAction(actionFilter); add(cbFilterDuplicates, "2, 5"); JLabel lblShowDuplicates = new JLabel(BUNDLE.getString("movieextendedsearch.duplicates")); //$NON-NLS-1$ setComponentFont(lblShowDuplicates); add(lblShowDuplicates, "4, 5, right, default"); cbFilterWatched = new JCheckBox(""); cbFilterWatched.setUI(CHECKBOX_UI); // $hide$ cbFilterWatched.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.WATCHED)); cbFilterWatched.setAction(actionFilter); add(cbFilterWatched, "2, 6"); JLabel lblWatchedFlag = new JLabel(BUNDLE.getString("movieextendedsearch.watched")); //$NON-NLS-1$ setComponentFont(lblWatchedFlag); add(lblWatchedFlag, "4, 6, right, default"); cbWatched = new SmallComboBox(WatchedFlag.values()); setComponentFont(cbWatched); cbWatched.setAction(actionFilter); add(cbWatched, "6, 6, fill, default"); cbFilterGenre = new JCheckBox(""); cbFilterGenre.setUI(CHECKBOX_UI); // $hide$ cbFilterGenre.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.GENRE)); cbFilterGenre.setAction(actionFilter); add(cbFilterGenre, "2, 7"); JLabel lblGenre = new JLabel(BUNDLE.getString("movieextendedsearch.genre")); //$NON-NLS-1$ setComponentFont(lblGenre); add(lblGenre, "4, 7, right, default"); cbGenre = new SmallComboBox(MediaGenres.values()); setComponentFont(cbGenre); cbGenre.setAction(actionFilter); add(cbGenre, "6, 7, fill, default"); cbFilterCertification = new JCheckBox(""); cbFilterCertification.setUI(CHECKBOX_UI); // $hide$ cbFilterCertification.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.CERTIFICATION)); cbFilterCertification.setAction(actionFilter); add(cbFilterCertification, "2, 8"); lblCertification = new JLabel(BUNDLE.getString("metatag.certification")); //$NON-NLS-1$ setComponentFont(lblCertification); add(lblCertification, "4, 8, right, default"); cbCertification = new SmallComboBox(); setComponentFont(cbCertification); cbCertification.setAction(actionFilter); add(cbCertification, "6, 8, fill, default"); cbFilterYear = new JCheckBox(""); cbFilterYear.setUI(CHECKBOX_UI); // $hide$ cbFilterYear.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.YEAR)); cbFilterYear.setAction(actionFilter); add(cbFilterYear, "2, 9"); lblYear = new JLabel(BUNDLE.getString("metatag.year")); //$NON-NLS-1$ setComponentFont(lblYear); add(lblYear, "4, 9, right, default"); int year = Calendar.getInstance().get(Calendar.YEAR); spYear = new JSpinner(); setComponentFont(spYear); spYear.setUI(new SmallSpinnerUI());// $hide$ spYear.setModel(new SpinnerNumberModel(year, 0, 3000, 1)); spYear.setEditor(new JSpinner.NumberEditor(spYear, "#")); spYear.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { actionFilter.actionPerformed(null); } }); add(spYear, "6, 9"); cbFilterCast = new JCheckBox(""); cbFilterCast.setUI(CHECKBOX_UI); // $hide$ cbFilterCast.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.CAST)); cbFilterCast.setAction(actionFilter); add(cbFilterCast, "2, 10"); JLabel lblCastMember = new JLabel(BUNDLE.getString("movieextendedsearch.cast")); //$NON-NLS-1$ setComponentFont(lblCastMember); add(lblCastMember, "4, 10, right, default"); tfCastMember = new JTextField(); setComponentFont(tfCastMember); tfCastMember.setBorder(new SmallTextFieldBorder()); add(tfCastMember, "6, 10, fill, default"); tfCastMember.setColumns(10); tfCastMember.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { actionFilter.actionPerformed(null); } public void insertUpdate(DocumentEvent e) { actionFilter.actionPerformed(null); } public void removeUpdate(DocumentEvent e) { actionFilter.actionPerformed(null); } }); cbFilterTag = new JCheckBox(""); cbFilterTag.setUI(CHECKBOX_UI); // $hide$ cbFilterTag.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.TAG)); cbFilterTag.setAction(actionFilter); add(cbFilterTag, "2, 11"); JLabel lblTag = new JLabel(BUNDLE.getString("movieextendedsearch.tag")); //$NON-NLS-1$ setComponentFont(lblTag); add(lblTag, "4, 11, right, default"); cbTag = new SmallCheckComboBox(); cbTag.setTextFor(CheckComboBox.NONE, BUNDLE.getString("movieextendedsearch.tags.selected.none")); //$NON-NLS-1$ cbTag.setTextFor(CheckComboBox.MULTIPLE, BUNDLE.getString("movieextendedsearch.tags.selected.multiple")); //$NON-NLS-1$ cbTag.setTextFor(CheckComboBox.ALL, BUNDLE.getString("movieextendedsearch.tags.selected.all")); //$NON-NLS-1$ cbTag.getModel().addListCheckListener(listCheckListener); add(cbTag, "6, 11, fill, default"); cbFilterMovieset = new JCheckBox(""); cbFilterMovieset.setUI(CHECKBOX_UI); // $hide$ cbFilterMovieset.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.MOVIESET)); cbFilterMovieset.setAction(actionFilter); add(cbFilterMovieset, "2, 12"); JLabel lblMoviesInMovieset = new JLabel(BUNDLE.getString("movieextendedsearch.movieset")); //$NON-NLS-1$ setComponentFont(lblMoviesInMovieset); add(lblMoviesInMovieset, "4, 12, right, default"); cbMovieset = new SmallComboBox(MovieInMovieSet.values()); setComponentFont(cbMovieset); cbMovieset.setAction(actionFilter); add(cbMovieset, "6, 12, fill, default"); cbFilterVideoFormat = new JCheckBox(""); cbFilterVideoFormat.setUI(CHECKBOX_UI); // $hide$ cbFilterVideoFormat.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.VIDEO_FORMAT)); cbFilterVideoFormat.setAction(actionFilter); add(cbFilterVideoFormat, "2, 13"); JLabel lblVideoFormat = new JLabel(BUNDLE.getString("metatag.resolution")); //$NON-NLS-1$ setComponentFont(lblVideoFormat); add(lblVideoFormat, "4, 13, right, default"); cbVideoFormat = new SmallComboBox(getVideoFormats()); setComponentFont(cbVideoFormat); cbVideoFormat.setAction(actionFilter); add(cbVideoFormat, "6, 13, fill, default"); cbFilterVideoCodec = new JCheckBox(""); cbFilterVideoCodec.setUI(CHECKBOX_UI); // $hide$ cbFilterVideoCodec.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.VIDEO_CODEC)); cbFilterVideoCodec.setAction(actionFilter); add(cbFilterVideoCodec, "2, 14"); JLabel lblVideoCodec = new JLabel(BUNDLE.getString("metatag.videocodec")); //$NON-NLS-1$ setComponentFont(lblVideoCodec); add(lblVideoCodec, "4, 14, right, default"); cbVideoCodec = new SmallComboBox(); setComponentFont(cbVideoCodec); cbVideoCodec.setAction(actionFilter); add(cbVideoCodec, "6, 14, fill, default"); cbFilterVideo3D = new JCheckBox(""); cbFilterVideo3D.setUI(CHECKBOX_UI); // $hide$ cbFilterVideo3D.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.VIDEO_3D)); cbFilterVideo3D.addActionListener(actionFilter); add(cbFilterVideo3D, "2, 15"); JLabel lblVideo3D = new JLabel(BUNDLE.getString("metatag.3d")); //$NON-NLS-1$ setComponentFont(lblVideo3D); add(lblVideo3D, "4, 15, right, default"); cbFilterAudioCodec = new JCheckBox(""); cbFilterAudioCodec.setUI(CHECKBOX_UI); // $hide$ cbFilterAudioCodec.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.AUDIO_CODEC)); cbFilterAudioCodec.setAction(actionFilter); add(cbFilterAudioCodec, "2, 16"); JLabel lblAudioCodec = new JLabel(BUNDLE.getString("metatag.audiocodec")); //$NON-NLS-1$ setComponentFont(lblAudioCodec); add(lblAudioCodec, "4, 16, right, default"); cbAudioCodec = new SmallComboBox(); setComponentFont(cbAudioCodec); cbAudioCodec.setAction(actionFilter); add(cbAudioCodec, "6, 16, fill, default"); cbFilterDatasource = new JCheckBox(""); cbFilterDatasource.setUI(CHECKBOX_UI); // $hide$ cbFilterDatasource.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.DATASOURCE)); cbFilterDatasource.setAction(actionFilter); add(cbFilterDatasource, "2, 17"); JLabel lblDatasource = new JLabel(BUNDLE.getString("metatag.datasource")); //$NON-NLS-1$ setComponentFont(lblDatasource); add(lblDatasource, "4, 17, right, default"); cbDatasource = new SmallCheckComboBox(); cbDatasource.setTextFor(CheckComboBox.NONE, BUNDLE.getString("checkcombobox.selected.none")); //$NON-NLS-1$ cbDatasource.setTextFor(CheckComboBox.MULTIPLE, BUNDLE.getString("checkcombobox.selected.multiple")); //$NON-NLS-1$ cbDatasource.setTextFor(CheckComboBox.ALL, BUNDLE.getString("checkcombobox.selected.all")); //$NON-NLS-1$ cbDatasource.getModel().addListCheckListener(listCheckListener); add(cbDatasource, "6, 17, fill, default"); cbFilterMediaSource = new JCheckBox(""); cbFilterMediaSource.setUI(CHECKBOX_UI); // $hide$ cbFilterMediaSource.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.MEDIA_SOURCE)); cbFilterMediaSource.addActionListener(actionFilter); add(cbFilterMediaSource, "2, 18"); JLabel lblMediaSource = new JLabel(BUNDLE.getString("metatag.source")); //$NON-NLS-1$ setComponentFont(lblMediaSource); add(lblMediaSource, "4, 18, right, default"); cbMediaSource = new SmallComboBox(MediaSource.values()); setComponentFont(cbMediaSource); cbMediaSource.setAction(actionFilter); add(cbMediaSource, "6, 18, fill, default"); cbFilterMissingMetadata = new JCheckBox(""); cbFilterMissingMetadata.setUI(CHECKBOX_UI); // $hide$ cbFilterMissingMetadata.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.MISSING_METADATA)); cbFilterMissingMetadata.setAction(actionFilter); add(cbFilterMissingMetadata, "2, 19"); JLabel lblMissingMetadata = new JLabel(BUNDLE.getString("movieextendedsearch.missingmetadata")); //$NON-NLS-1$ setComponentFont(lblMissingMetadata); add(lblMissingMetadata, "4, 19, right, default"); cbFilterMissingArtwork = new JCheckBox(""); cbFilterMissingArtwork.setUI(CHECKBOX_UI); // $hide$ cbFilterMissingArtwork.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.MISSING_ARTWORK)); cbFilterMissingArtwork.setAction(actionFilter); add(cbFilterMissingArtwork, "2, 20"); JLabel lblMissingArtwork = new JLabel(BUNDLE.getString("movieextendedsearch.missingartwork")); //$NON-NLS-1$ setComponentFont(lblMissingArtwork); add(lblMissingArtwork, "4, 20, right, default"); cbFilterMissingSubtitles = new JCheckBox(""); cbFilterMissingSubtitles.setUI(CHECKBOX_UI); // $hide$ cbFilterMissingSubtitles.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.MISSING_SUBTITLES)); cbFilterMissingSubtitles.setAction(actionFilter); add(cbFilterMissingSubtitles, "2, 21"); JLabel lblMissingSubtitles = new JLabel(BUNDLE.getString("movieextendedsearch.missingsubtitles")); //$NON-NLS-1$ setComponentFont(lblMissingSubtitles); add(lblMissingSubtitles, "4, 21, right, default"); cbFilterOffline = new JCheckBox(""); cbFilterOffline.setUI(CHECKBOX_UI); // $hide$ cbFilterOffline.setSelected(savedSearchOptions.containsKey(MovieSearchOptions.OFFLINE)); cbFilterOffline.setAction(actionFilter); add(cbFilterOffline, "2, 22"); lblOffline = new JLabel(BUNDLE.getString("movieextendedsearch.offline")); //$NON-NLS-1$ setComponentFont(lblOffline); add(lblOffline, "4, 22, right, default"); cbOffline = new SmallComboBox(OfflineMovie.values()); cbOffline.setAction(actionFilter); add(cbOffline, "6, 22, fill, default"); JSeparator separator = new JSeparator(); add(separator, "2, 24, 5, 1"); JLabel lblSortBy = new JLabel(BUNDLE.getString("movieextendedsearch.sortby")); //$NON-NLS-1$ setComponentFont(lblSortBy); add(lblSortBy, "2, 26, 3, 1"); cbSortColumn = new SmallComboBox(SortColumn.values()); setComponentFont(cbSortColumn); cbSortColumn.setAction(actionSort); add(cbSortColumn, "2, 28, 3, 1, fill, default"); cbSortOrder = new SmallComboBox(SortOrder.values()); setComponentFont(cbSortOrder); cbSortOrder.setAction(actionSort); add(cbSortOrder, "6, 28, fill, default"); PropertyChangeListener propertyChangeListener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getSource() instanceof MovieList && "tag".equals(evt.getPropertyName())) { buildAndInstallTagsArray(); } if (evt.getSource() instanceof MovieList && "videoCodec".equals(evt.getPropertyName())) { buildAndInstallCodecArray(); } if (evt.getSource() instanceof MovieList && "audioCodec".equals(evt.getPropertyName())) { buildAndInstallCodecArray(); } if (evt.getSource() instanceof MovieSettings && "movieDataSource".equals(evt.getPropertyName())) { buildAndInstallDatasourceArray(); } if (evt.getSource() instanceof MovieList && "certification".equals(evt.getPropertyName())) { buildAndInstallCertificationArray(); } } }; movieList.addPropertyChangeListener(propertyChangeListener); MovieModuleManager.MOVIE_SETTINGS.addPropertyChangeListener(propertyChangeListener); buildAndInstallTagsArray(); buildAndInstallCodecArray(); buildAndInstallDatasourceArray(); buildAndInstallCertificationArray(); }
From source file:org.tinymediamanager.ui.movies.settings.MovieImageSettingsPanel.java
/** * Instantiates a new movie image settings panel. *//*from w ww. jav a 2 s . co m*/ public MovieImageSettingsPanel() { // data init List<String> enabledArtworkProviders = settings.getMovieArtworkScrapers(); int selectedIndex = -1; int counter = 0; for (MediaScraper scraper : MovieList.getInstance().getAvailableArtworkScrapers()) { ArtworkScraper artworkScraper = new ArtworkScraper(scraper); if (enabledArtworkProviders.contains(artworkScraper.getScraperId())) { artworkScraper.active = true; if (selectedIndex < 0) { selectedIndex = counter; } } scrapers.add(artworkScraper); counter++; } // init UI setLayout(new FormLayout( new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, })); JPanel panelMovieImages = new JPanel(); panelMovieImages.setBorder(new TitledBorder(null, BUNDLE.getString("Settings.poster"), TitledBorder.LEADING, //$NON-NLS-1$ TitledBorder.TOP, null, null)); add(panelMovieImages, "2, 2, default, fill"); panelMovieImages.setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("200dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("100dlu:grow"), FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, })); scrollPaneScraperDetails = new JScrollPane(); scrollPaneScraperDetails.setBorder(null); scrollPaneScraperDetails.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); panelMovieImages.add(scrollPaneScraperDetails, "6, 1, 1, 7, fill, fill"); panelScraperDetails = new ScrollablePanel(); scrollPaneScraperDetails.setViewportView(panelScraperDetails); panelScraperDetails .setLayout(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("default:grow"), }, new RowSpec[] { FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, })); { // add a CSS rule to force body tags to use the default label font // instead of the value in javax.swing.text.html.default.csss Font font = UIManager.getFont("Label.font"); String bodyRule = "body { font-family: " + font.getFamily() + "; " + "font-size: " + font.getSize() + "pt; }"; tpScraperDescription = new JTextPane(); tpScraperDescription.setOpaque(false); tpScraperDescription.setEditorKit(new HTMLEditorKit()); ((HTMLDocument) tpScraperDescription.getDocument()).getStyleSheet().addRule(bodyRule); panelScraperDetails.add(tpScraperDescription, "1, 1, fill, top"); } panelScraperOptions = new JPanel(); panelScraperOptions.setLayout(new FlowLayout(FlowLayout.LEFT)); panelScraperDetails.add(panelScraperOptions, "1, 3, fill, top"); scrollPaneScraper = new JScrollPane(); panelMovieImages.add(scrollPaneScraper, "2, 2, 3, 1, fill, fill"); tableScraper = new JTable(); tableScraper.setRowHeight(29); scrollPaneScraper.setViewportView(tableScraper); JSeparator separator = new JSeparator(); panelMovieImages.add(separator, "2, 3, 3, 1"); JLabel lblImageTmdbPosterSize = new JLabel(BUNDLE.getString("image.poster.size")); panelMovieImages.add(lblImageTmdbPosterSize, "2, 5"); cbImagePosterSize = new JComboBox(PosterSizes.values()); panelMovieImages.add(cbImagePosterSize, "4, 5"); JLabel lblImageTmdbFanartSize = new JLabel(BUNDLE.getString("image.fanart.size")); panelMovieImages.add(lblImageTmdbFanartSize, "2, 7"); cbImageFanartSize = new JComboBox(FanartSizes.values()); panelMovieImages.add(cbImageFanartSize, "4, 7"); separator = new JSeparator(); panelMovieImages.add(separator, "2, 9, 5, 1"); panelFileNaming = new JPanel(); panelMovieImages.add(panelFileNaming, "2, 11, 5, 1, fill, fill"); panelFileNaming.setLayout(new FormLayout( new ColumnSpec[] { FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), }, new RowSpec[] { FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, })); JLabel lblPosterFilename = new JLabel(BUNDLE.getString("image.poster.naming")); panelFileNaming.add(lblPosterFilename, "1, 1"); cbMoviePosterFilename7 = new JCheckBox("<dynamic>.ext"); panelFileNaming.add(cbMoviePosterFilename7, "3, 1"); cbMoviePosterFilename4 = new JCheckBox("poster.ext"); panelFileNaming.add(cbMoviePosterFilename4, "5, 1"); cbMoviePosterFilename2 = new JCheckBox("movie.ext"); panelFileNaming.add(cbMoviePosterFilename2, "7, 1"); cbMoviePosterFilename8 = new JCheckBox("<dynamic>-poster.ext"); panelFileNaming.add(cbMoviePosterFilename8, "9, 1"); cbMoviePosterFilename6 = new JCheckBox("folder.ext"); panelFileNaming.add(cbMoviePosterFilename6, "11, 1"); JLabel lblFanartFileNaming = new JLabel(BUNDLE.getString("image.fanart.naming")); panelFileNaming.add(lblFanartFileNaming, "1, 3"); cbMovieFanartFilename1 = new JCheckBox("<dynamic>-fanart.ext"); panelFileNaming.add(cbMovieFanartFilename1, "3, 3"); cbMovieFanartFilename3 = new JCheckBox("<dynamic>.fanart.ext"); panelFileNaming.add(cbMovieFanartFilename3, "5, 3"); cbMovieFanartFilename2 = new JCheckBox("fanart.ext"); panelFileNaming.add(cbMovieFanartFilename2, "7, 3"); tpFileNamingHint = new JTextPane(); panelFileNaming.add(tpFileNamingHint, "1, 5, 11, 1, fill, fill"); tpFileNamingHint.setText(BUNDLE.getString("Settings.naming.info")); //$NON-NLS-1$ tpFileNamingHint.setBackground(UIManager.getColor("Panel.background")); TmmFontHelper.changeFont(tpFileNamingHint, 0.833); panelExtraArtwork = new JPanel(); panelExtraArtwork.setBorder(new TitledBorder(null, BUNDLE.getString("Settings.extraartwork"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); add(panelExtraArtwork, "2, 4, default, fill"); panelExtraArtwork.setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, })); chckbxBanner = new JCheckBox(BUNDLE.getString("mediafiletype.banner")); panelExtraArtwork.add(chckbxBanner, "2, 2"); chckbxClearArt = new JCheckBox(BUNDLE.getString("mediafiletype.clearart")); panelExtraArtwork.add(chckbxClearArt, "4, 2"); chckbxThumb = new JCheckBox(BUNDLE.getString("mediafiletype.thumb")); panelExtraArtwork.add(chckbxThumb, "6, 2"); chckbxLogo = new JCheckBox(BUNDLE.getString("mediafiletype.logo")); panelExtraArtwork.add(chckbxLogo, "8, 2"); chckbxDiscArt = new JCheckBox(BUNDLE.getString("mediafiletype.discart")); panelExtraArtwork.add(chckbxDiscArt, "10, 2"); separator = new JSeparator(); panelExtraArtwork.add(separator, "2, 4, 9, 1"); chckbxEnableExtrathumbs = new JCheckBox(BUNDLE.getString("Settings.enable.extrathumbs")); panelExtraArtwork.add(chckbxEnableExtrathumbs, "2, 6, 3, 1"); chckbxResizeExtrathumbsTo = new JCheckBox(BUNDLE.getString("Settings.resize.extrathumbs")); panelExtraArtwork.add(chckbxResizeExtrathumbsTo, "6, 6, 3, 1"); spExtrathumbWidth = new JSpinner(); panelExtraArtwork.add(spExtrathumbWidth, "10, 6"); spExtrathumbWidth.setPreferredSize(new Dimension(49, 20)); lblDownload = new JLabel(BUNDLE.getString("Settings.amount.autodownload")); panelExtraArtwork.add(lblDownload, "2, 8, 7, 1, right, default"); spDownloadCountExtrathumbs = new JSpinner(); panelExtraArtwork.add(spDownloadCountExtrathumbs, "10, 8"); spDownloadCountExtrathumbs.setPreferredSize(new Dimension(49, 20)); chckbxEnableExtrafanart = new JCheckBox(BUNDLE.getString("Settings.enable.extrafanart")); panelExtraArtwork.add(chckbxEnableExtrafanart, "2, 10, 9, 1"); lblDownloadCount = new JLabel(BUNDLE.getString("Settings.amount.autodownload")); panelExtraArtwork.add(lblDownloadCount, "2, 12, 7, 1, right, default"); spDownloadCountExtrafanart = new JSpinner(); panelExtraArtwork.add(spDownloadCountExtrafanart, "10, 12"); spDownloadCountExtrafanart.setPreferredSize(new Dimension(49, 20)); separator = new JSeparator(); panelExtraArtwork.add(separator, "2, 14, 9, 1"); cbActorImages = new JCheckBox(BUNDLE.getString("Settings.actor.download")); panelExtraArtwork.add(cbActorImages, "2, 16, 9, 1"); separator = new JSeparator(); panelExtraArtwork.add(separator, "2, 18, 9, 1"); chckbxMovieSetArtwork = new JCheckBox(BUNDLE.getString("Settings.movieset.store.movie")); //$NON-NLS-1$ panelExtraArtwork.add(chckbxMovieSetArtwork, "2, 20, 9, 1"); chckbxStoreMoviesetArtwork = new JCheckBox(BUNDLE.getString("Settings.movieset.store")); //$NON-NLS-1$ panelExtraArtwork.add(chckbxStoreMoviesetArtwork, "2, 22, 9, 1"); lblFoldername = new JLabel(BUNDLE.getString("Settings.movieset.foldername")); //$NON-NLS-1$ panelExtraArtwork.add(lblFoldername, "2, 24, 3, 1, right, default"); tfMovieSetArtworkFolder = new JTextField(); panelExtraArtwork.add(tfMovieSetArtworkFolder, "6, 24, 3, 1"); tfMovieSetArtworkFolder.setColumns(10); btnSelectFolder = new JButton(BUNDLE.getString("Settings.movieset.buttonselect")); //$NON-NLS-1$ panelExtraArtwork.add(btnSelectFolder, "10, 24"); btnSelectFolder.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Path file = TmmUIHelper.selectDirectory(BUNDLE.getString("Settings.movieset.folderchooser")); //$NON-NLS-1$ if (file != null && Files.isDirectory(file)) { tfMovieSetArtworkFolder.setText(file.toAbsolutePath().toString()); } } }); initDataBindings(); // poster filenames List<MoviePosterNaming> moviePosterFilenames = settings.getMoviePosterFilenames(); if (moviePosterFilenames.contains(MoviePosterNaming.MOVIE_JPG)) { cbMoviePosterFilename2.setSelected(true); } if (moviePosterFilenames.contains(MoviePosterNaming.POSTER_JPG)) { cbMoviePosterFilename4.setSelected(true); } if (moviePosterFilenames.contains(MoviePosterNaming.FOLDER_JPG)) { cbMoviePosterFilename6.setSelected(true); } if (moviePosterFilenames.contains(MoviePosterNaming.FILENAME_JPG)) { cbMoviePosterFilename7.setSelected(true); } if (moviePosterFilenames.contains(MoviePosterNaming.FILENAME_POSTER_JPG)) { cbMoviePosterFilename8.setSelected(true); } // fanart filenames List<MovieFanartNaming> movieFanartFilenames = settings.getMovieFanartFilenames(); if (movieFanartFilenames.contains(MovieFanartNaming.FILENAME_FANART_JPG)) { cbMovieFanartFilename1.setSelected(true); } if (movieFanartFilenames.contains(MovieFanartNaming.FANART_JPG)) { cbMovieFanartFilename2.setSelected(true); } if (movieFanartFilenames.contains(MovieFanartNaming.FILENAME_FANART2_JPG)) { cbMovieFanartFilename3.setSelected(true); } // listen to changes of the checkboxes ItemListener listener = new ItemListener() { public void itemStateChanged(ItemEvent e) { checkChanges(); } }; cbMovieFanartFilename2.addItemListener(listener); cbMovieFanartFilename3.addItemListener(listener); cbMovieFanartFilename1.addItemListener(listener); cbMoviePosterFilename2.addItemListener(listener); cbMoviePosterFilename4.addItemListener(listener); cbMoviePosterFilename7.addItemListener(listener); cbMoviePosterFilename8.addItemListener(listener); cbMoviePosterFilename6.addItemListener(listener); // adjust table columns // Checkbox and Logo shall have minimal width TableColumnResizer.setMaxWidthForColumn(tableScraper, 0, 2); TableColumnResizer.setMaxWidthForColumn(tableScraper, 1, 2); TableColumnResizer.adjustColumnPreferredWidths(tableScraper, 5); tableScraper.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent arg0) { // click on the checkbox if (arg0.getColumn() == 0) { int row = arg0.getFirstRow(); ArtworkScraper changedScraper = scrapers.get(row); if (changedScraper.active) { settings.addMovieArtworkScraper(changedScraper.getScraperId()); } else { settings.removeMovieArtworkScraper(changedScraper.getScraperId()); } } } }); // implement selection listener to load settings tableScraper.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { int index = tableScraper.convertRowIndexToModel(tableScraper.getSelectedRow()); if (index > -1) { panelScraperOptions.removeAll(); if (scrapers.get(index).getMediaProvider().getProviderInfo().getConfig().hasConfig()) { panelScraperOptions .add(new MediaScraperConfigurationPanel(scrapers.get(index).getMediaProvider())); } panelScraperOptions.revalidate(); } } }); // select default artwork scraper if (selectedIndex < 0) { selectedIndex = 0; } if (counter > 0) { tableScraper.getSelectionModel().setSelectionInterval(selectedIndex, selectedIndex); } }
From source file:org.tinymediamanager.ui.tvshows.dialogs.TvShowEditorDialog.java
/** * Instantiates a new tv show editor dialog. * /* w w w . j a v a 2 s. c om*/ * @param tvShow * the tv show * @param inQueue * the in queue */ public TvShowEditorDialog(TvShow tvShow, boolean inQueue) { super(BUNDLE.getString("tvshow.edit"), "tvShowEditor"); //$NON-NLS-1$ setBounds(5, 5, 950, 700); tvShowToEdit = tvShow; ids = MediaIdTable.convertIdMapToEventList(tvShowToEdit.getIds()); getContentPane().setLayout(new BorderLayout()); { JPanel panelPath = new JPanel(); getContentPane().add(panelPath, BorderLayout.NORTH); panelPath.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, RowSpec.decode("15px"), FormFactory.RELATED_GAP_ROWSPEC, })); JLabel lblTvShowPathT = new JLabel(BUNDLE.getString("metatag.path")); //$NON-NLS-1$ panelPath.add(lblTvShowPathT, "2, 2, left, top"); lvlTvShowPath = new JLabel(""); TmmFontHelper.changeFont(lblTvShowPathT, 1.166, Font.BOLD); panelPath.add(lvlTvShowPath, "5, 2, left, top"); } JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.NORTH); tabbedPane.addTab(BUNDLE.getString("metatag.details"), details1Panel); //$NON-NLS-1$ getContentPane().add(tabbedPane, BorderLayout.CENTER); details1Panel.setBorder(new EmptyBorder(5, 5, 5, 5)); details1Panel.setLayout(new FormLayout( new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(40dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("50px:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("50px:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("30dlu"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.UNRELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("250px:grow"), FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("15dlu:grow"), FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("top:max(30dlu;default)"), FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("20dlu:grow"), FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LABEL_COMPONENT_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("fill:30px:grow(2)"), })); { JLabel lblTitle = new JLabel(BUNDLE.getString("metatag.title")); //$NON-NLS-1$ details1Panel.add(lblTitle, "2, 2, right, default"); } { tfTitle = new JTextField(); details1Panel.add(tfTitle, "4, 2, 15, 1, fill, default"); tfTitle.setColumns(10); } { lblPoster = new ImageLabel(); lblPoster.setAlternativeText(BUNDLE.getString("image.notfound.poster")); //$NON-NLS-1$ lblPoster.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.POSTER, tvShowList.getAvailableArtworkScrapers(), lblPoster, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblPoster.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); details1Panel.add(lblPoster, "22, 2, 3, 19, fill, fill"); } { JLabel lblSortTitle = new JLabel(BUNDLE.getString("metatag.sorttitle")); //$NON-NLS-1$ details1Panel.add(lblSortTitle, "2, 4, right, default"); } { tfSorttitle = new JTextField(); details1Panel.add(tfSorttitle, "4, 4, 15, 1, fill, default"); tfSorttitle.setColumns(10); } { JLabel lblYear = new JLabel(BUNDLE.getString("metatag.year")); //$NON-NLS-1$ details1Panel.add(lblYear, "2, 6, right, default"); } { spYear = new YearSpinner(); details1Panel.add(spYear, "4, 6, fill, top"); } { JLabel lblpremiered = new JLabel(BUNDLE.getString("metatag.premiered")); //$NON-NLS-1$ details1Panel.add(lblpremiered, "8, 6, right, default"); } { dpPremiered = new DatePicker(tvShow.getFirstAired()); details1Panel.add(dpPremiered, "10, 6, fill, default"); } { JLabel lblRuntime = new JLabel(BUNDLE.getString("metatag.runtime")); //$NON-NLS-1$ details1Panel.add(lblRuntime, "14, 6, right, default"); } { spRuntime = new JSpinner(); details1Panel.add(spRuntime, "16, 6, fill, default"); } spRuntime.setValue(tvShow.getRuntime()); { JLabel lblMin = new JLabel(BUNDLE.getString("metatag.minutes")); //$NON-NLS-1$ details1Panel.add(lblMin, "18, 6"); } { JLabel lblRating = new JLabel(BUNDLE.getString("metatag.rating")); //$NON-NLS-1$ details1Panel.add(lblRating, "2, 8, right, default"); } { spRating = new JSpinner(); details1Panel.add(spRating, "4, 8"); } spRating.setModel(new SpinnerNumberModel(tvShow.getRating(), 0.0, 10.0, 0.1)); { { JLabel lblCertification = new JLabel(BUNDLE.getString("metatag.certification")); //$NON-NLS-1$ details1Panel.add(lblCertification, "8, 8, right, default"); } } cbCertification = new JComboBox(); for (Certification cert : Certification .getCertificationsforCountry(TvShowModuleManager.SETTINGS.getCertificationCountry())) { cbCertification.addItem(cert); } details1Panel.add(cbCertification, "10, 8, fill, default"); cbCertification.setSelectedItem(tvShow.getCertification()); { JLabel lblStatus = new JLabel(BUNDLE.getString("metatag.status")); //$NON-NLS-1$ details1Panel.add(lblStatus, "14, 8, right, default"); } { cbStatus = new JComboBox(new String[] { "", "Continuing", "Ended" }); details1Panel.add(cbStatus, "16, 8, 3, 1, fill, default"); } cbStatus.setSelectedItem(tvShow.getStatus()); { JLabel lblDateAdded = new JLabel(BUNDLE.getString("metatag.dateadded")); //$NON-NLS-1$ details1Panel.add(lblDateAdded, "2, 10, right, default"); } { spDateAdded = new JSpinner(new SpinnerDateModel()); details1Panel.add(spDateAdded, "4, 10"); } { JLabel lblIds = new JLabel("Ids"); details1Panel.add(lblIds, "2, 12, right, default"); } { JScrollPane scrollPaneIds = new JScrollPane(); details1Panel.add(scrollPaneIds, "4, 12, 9, 5, fill, fill"); { tableIds = new MediaIdTable(ids, ScraperType.TV_SHOW); scrollPaneIds.setViewportView(tableIds); } } { JButton btnAddId = new JButton(""); btnAddId.setAction(new AddIdAction()); btnAddId.setIcon(IconManager.LIST_ADD); btnAddId.setMargin(new Insets(2, 2, 2, 2)); details1Panel.add(btnAddId, "2, 14, right, top"); } { JButton btnRemoveId = new JButton("RemoveId"); btnRemoveId.setAction(new RemoveIdAction()); btnRemoveId.setIcon(IconManager.LIST_REMOVE); btnRemoveId.setMargin(new Insets(2, 2, 2, 2)); details1Panel.add(btnRemoveId, "2, 16, right, top"); } { JLabel lblPlot = new JLabel(BUNDLE.getString("metatag.plot")); //$NON-NLS-1$ details1Panel.add(lblPlot, "2, 18, right, top"); } { JScrollPane scrollPanePlot = new JScrollPane(); details1Panel.add(scrollPanePlot, "4, 18, 15, 3, fill, fill"); { tpPlot = new JTextPane(); scrollPanePlot.setViewportView(tpPlot); } } { JLabel lblStudio = new JLabel(BUNDLE.getString("metatag.studio")); //$NON-NLS-1$ details1Panel.add(lblStudio, "2, 22, right, top"); } { tfStudio = new JTextField(); details1Panel.add(tfStudio, "4, 22, 15, 1"); } /** * DetailsPanel 2 */ tabbedPane.addTab(BUNDLE.getString("metatag.details2"), details2Panel); //$NON-NLS-1$ details2Panel.setBorder(new EmptyBorder(5, 5, 5, 5)); details2Panel.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(40dlu;default)"), FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("100px:grow(2)"), FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("100px:grow"), FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("fill:30px:grow"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow(2)"), })); { JLabel lblActors = new JLabel(BUNDLE.getString("metatag.actors")); //$NON-NLS-1$ details2Panel.add(lblActors, "2, 2, right, default"); } { JScrollPane scrollPane = new JScrollPane(); details2Panel.add(scrollPane, "4, 2, 1, 7"); { tableActors = new JTable(); tableActors.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); scrollPane.setViewportView(tableActors); } } { JLabel lblGenres = new JLabel(BUNDLE.getString("metatag.genre")); //$NON-NLS-1$ details2Panel.add(lblGenres, "6, 2"); } { JButton btnAddActor = new JButton("Add Actor"); btnAddActor.setMargin(new Insets(2, 2, 2, 2)); btnAddActor.setAction(new AddActorAction()); btnAddActor.setIcon(IconManager.LIST_ADD); details2Panel.add(btnAddActor, "2, 4, right, top"); } { JScrollPane scrollPaneGenres = new JScrollPane(); details2Panel.add(scrollPaneGenres, "8, 2, 1, 5"); { listGenres = new JList(); scrollPaneGenres.setViewportView(listGenres); } } { JButton btnAddGenre = new JButton(""); btnAddGenre.setAction(new AddGenreAction()); btnAddGenre.setIcon(IconManager.LIST_ADD); btnAddGenre.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnAddGenre, "6, 4, right, top"); } { JButton btnRemoveActor = new JButton(BUNDLE.getString("cast.actor.remove")); //$NON-NLS-1$ btnRemoveActor.setMargin(new Insets(2, 2, 2, 2)); btnRemoveActor.setAction(new RemoveActorAction()); btnRemoveActor.setIcon(IconManager.LIST_REMOVE); details2Panel.add(btnRemoveActor, "2,6, right, top"); } { JButton btnRemoveGenre = new JButton(""); btnRemoveGenre.setAction(new RemoveGenreAction()); btnRemoveGenre.setMargin(new Insets(2, 2, 2, 2)); btnRemoveGenre.setIcon(IconManager.LIST_REMOVE); details2Panel.add(btnRemoveGenre, "6, 6, right, top"); } { cbGenres = new AutocompleteComboBox(MediaGenres.values()); cbGenres.setEditable(true); details2Panel.add(cbGenres, "8,8"); } { JLabel lblTags = new JLabel(BUNDLE.getString("metatag.tags")); //$NON-NLS-1$ details2Panel.add(lblTags, "2, 10, right, default"); } { JScrollPane scrollPaneTags = new JScrollPane(); details2Panel.add(scrollPaneTags, "4, 10, 1, 5"); listTags = new JList(); scrollPaneTags.setViewportView(listTags); } { JButton btnAddTag = new JButton(""); btnAddTag.setAction(new AddTagAction()); btnAddTag.setIcon(IconManager.LIST_ADD); btnAddTag.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnAddTag, "2, 12, right, top"); } { JButton btnRemoveTag = new JButton(""); btnRemoveTag.setAction(new RemoveTagAction()); btnRemoveTag.setIcon(IconManager.LIST_REMOVE); btnRemoveTag.setMargin(new Insets(2, 2, 2, 2)); details2Panel.add(btnRemoveTag, "2, 14, right, top"); } { cbTags = new AutocompleteComboBox(tvShowList.getTagsInTvShows().toArray()); cbTags.setEditable(true); details2Panel.add(cbTags, "4, 16"); } /** * extra artwork pane */ { JPanel artworkPanel = new JPanel(); tabbedPane.addTab(BUNDLE.getString("metatag.extraartwork"), null, artworkPanel, null); //$NON-NLS-1$ artworkPanel.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("250px:grow"), FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("250px:grow"), FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("50px:grow(2)"), FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("200px:grow(2)"), FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), })); { JLabel lblLogoT = new JLabel(BUNDLE.getString("mediafiletype.logo")); //$NON-NLS-1$ artworkPanel.add(lblLogoT, "2, 2"); } { lblLogo = new ImageLabel(); lblLogo.setAlternativeText(BUNDLE.getString("image.notfound.logo")); //$NON-NLS-1$ lblLogo.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.LOGO, tvShowList.getAvailableArtworkScrapers(), lblLogo, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); { final JLabel lblClearlogoT = new JLabel(BUNDLE.getString("mediafiletype.clearlogo")); //$NON-NLS-1$ artworkPanel.add(lblClearlogoT, "4, 2"); } lblLogo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblLogo, "2, 4, fill, fill"); } { lblClearlogo = new ImageLabel(); lblClearlogo.setAlternativeText(BUNDLE.getString("image.notfound.clearlogo")); //$NON-NLS-1$ lblClearlogo.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.CLEARLOGO, tvShowList.getAvailableArtworkScrapers(), lblClearlogo, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblClearlogo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblClearlogo, "4, 4, fill, fill"); } { JLabel lblClearartT = new JLabel(BUNDLE.getString("mediafiletype.clearart")); //$NON-NLS-1$ artworkPanel.add(lblClearartT, "2, 6"); } { lblClearart = new ImageLabel(); lblClearart.setAlternativeText(BUNDLE.getString("image.notfound.clearart")); //$NON-NLS-1$ lblClearart.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.CLEARART, tvShowList.getAvailableArtworkScrapers(), lblClearart, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblClearart.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblClearart, "2, 8, fill, fill"); } { JLabel lblThumbT = new JLabel(BUNDLE.getString("mediafiletype.thumb")); //$NON-NLS-1$ artworkPanel.add(lblThumbT, "4, 6"); } { lblThumb = new ImageLabel(); lblThumb.setAlternativeText(BUNDLE.getString("image.notfound.thumb")); //$NON-NLS-1$ lblThumb.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.THUMB, tvShowList.getAvailableArtworkScrapers(), lblThumb, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); lblThumb.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); artworkPanel.add(lblThumb, "4, 8, fill, fill"); } } tabbedPane.addTab(BUNDLE.getString("metatag.episodes"), episodesPanel); //$NON-NLS-1$ episodesPanel.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), })); { JButton btnCloneEpisode = new JButton(""); btnCloneEpisode.setAction(new CloneEpisodeAction()); episodesPanel.add(btnCloneEpisode, "2, 2"); } { JScrollPane scrollPaneEpisodes = new JScrollPane(); episodesPanel.add(scrollPaneEpisodes, "4, 2, 1, 3, fill, fill"); { tableEpisodes = new JTable(); scrollPaneEpisodes.setViewportView(tableEpisodes); } } { JButton btnRemoveEpisode = new JButton(""); btnRemoveEpisode.setAction(new RemoveEpisodeAction()); btnRemoveEpisode.setIcon(IconManager.LIST_REMOVE); episodesPanel.add(btnRemoveEpisode, "2, 4, default, top"); } /** * Button pane */ { JPanel bottomPane = new JPanel(); getContentPane().add(bottomPane, BorderLayout.SOUTH); bottomPane.setLayout(new FormLayout( new ColumnSpec[] { ColumnSpec.decode("371px:grow"), FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, RowSpec.decode("25px"), FormFactory.RELATED_GAP_ROWSPEC, })); JPanel buttonPane = new JPanel(); bottomPane.add(buttonPane, "2, 2, left, top"); EqualsLayout layout = new EqualsLayout(5); layout.setMinWidth(100); buttonPane.setLayout(layout); { JButton okButton = new JButton(BUNDLE.getString("Button.ok")); //$NON-NLS-1$ buttonPane.add(okButton); okButton.setAction(new OKAction()); okButton.setActionCommand("OK"); getRootPane().setDefaultButton(okButton); } { JButton cancelButton = new JButton(BUNDLE.getString("Button.cancel")); //$NON-NLS-1$ buttonPane.add(cancelButton); cancelButton.setAction(new CancelAction()); cancelButton.setActionCommand("Cancel"); } if (inQueue) { JButton btnAbort = new JButton(BUNDLE.getString("Button.abortqueue")); //$NON-NLS-1$ btnAbort.setAction(new AbortAction()); buttonPane.add(btnAbort); } } initDataBindings(); { lvlTvShowPath.setText(tvShow.getPath()); tfTitle.setText(tvShow.getTitle()); tfSorttitle.setText(tvShow.getSortTitle()); tpPlot.setText(tvShow.getPlot()); lblPoster.setImagePath(tvShow.getArtworkFilename(MediaFileType.POSTER)); lblThumb.setImagePath(tvShowToEdit.getArtworkFilename(MediaFileType.THUMB)); lblLogo.setImagePath(tvShowToEdit.getArtworkFilename(MediaFileType.LOGO)); lblClearlogo.setImagePath(tvShowToEdit.getArtworkFilename(MediaFileType.CLEARLOGO)); lblClearart.setImagePath(tvShowToEdit.getArtworkFilename(MediaFileType.CLEARART)); tfStudio.setText(tvShow.getProductionCompany()); int year = 0; try { year = Integer.parseInt(tvShow.getYear()); } catch (Exception e) { } spYear.setValue(year); spDateAdded.setValue(tvShow.getDateAdded()); for (TvShowActor origCast : tvShow.getActors()) { TvShowActor actor = new TvShowActor(); actor.setName(origCast.getName()); actor.setCharacter(origCast.getCharacter()); actor.setThumbUrl(origCast.getThumbUrl()); actors.add(actor); } for (MediaGenres genre : tvShow.getGenres()) { genres.add(genre); } // for (MediaTrailer trailer : tvShow.getTrailers()) { // trailers.add(trailer); // } for (String tag : tvShowToEdit.getTags()) { tags.add(tag); } List<TvShowEpisode> epl = new ArrayList<>(tvShowToEdit.getEpisodes()); // custom sort per filename (just this time) // for unknown EPs (-1/-1) this is extremely useful to sort like on filesystem // and for already renamed ones, it makes no difference Collections.sort(epl, new Comparator<TvShowEpisode>() { public int compare(TvShowEpisode s1, TvShowEpisode s2) { return s1.getMediaFiles(MediaFileType.VIDEO).get(0).getFile() .compareTo(s2.getMediaFiles(MediaFileType.VIDEO).get(0).getFile()); } }); for (TvShowEpisode episode : epl) { TvShowEpisodeEditorContainer container = new TvShowEpisodeEditorContainer(); container.tvShowEpisode = episode; container.dvdOrder = episode.isDvdOrder(); container.season = episode.getSeason(); container.episode = episode.getEpisode(); episodes.add(container); } if (((DefaultComboBoxModel) cbCertification.getModel()).getIndexOf(tvShow.getCertification()) == -1) { cbCertification.addItem(tvShow.getCertification()); } } lblBanner = new ImageLabel(); lblBanner.setAlternativeText(BUNDLE.getString("image.notfound.banner")); //$NON-NLS-1$ lblBanner.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); lblBanner.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.BANNER, tvShowList.getAvailableArtworkScrapers(), lblBanner, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); details1Panel.add(lblBanner, "4, 24, 15, 3, fill, fill"); lblBanner.setImagePath(tvShow.getArtworkFilename(MediaFileType.BANNER)); { // JLabel lblFanart = new JLabel(""); lblFanart = new ImageLabel(); lblFanart.setAlternativeText(BUNDLE.getString("image.notfound.fanart")); //$NON-NLS-1$ lblFanart.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); lblFanart.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ImageChooserDialog dialog = new ImageChooserDialog(tvShowToEdit.getIds(), ImageType.FANART, tvShowList.getAvailableArtworkScrapers(), lblFanart, null, null, MediaType.TV_SHOW); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } }); details1Panel.add(lblFanart, "22, 22, 3, 5, fill, fill"); } lblFanart.setImagePath(tvShow.getArtworkFilename(MediaFileType.FANART)); // adjust columnn titles - we have to do it this way - thx to windowbuilder pro tableActors.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.name")); //$NON-NLS-1$ tableActors.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.role")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.title")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.filename")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(2).setHeaderValue(BUNDLE.getString("metatag.season")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(3).setHeaderValue(BUNDLE.getString("metatag.episode")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(4).setHeaderValue(BUNDLE.getString("metatag.dvdorder")); //$NON-NLS-1$ tableEpisodes.getColumnModel().getColumn(2).setMaxWidth(150); tableEpisodes.getColumnModel().getColumn(3).setMaxWidth(150); tableEpisodes.getColumnModel().getColumn(2).setCellEditor(new TableSpinnerEditor()); tableEpisodes.getColumnModel().getColumn(3).setCellEditor(new TableSpinnerEditor()); // adjust table columns TableColumnResizer.adjustColumnPreferredWidths(tableActors, 6); // TableColumnResizer.adjustColumnPreferredWidths(tableTrailer, 6); TableColumnResizer.adjustColumnPreferredWidths(tableEpisodes, 6); }
From source file:org.tinymediamanager.ui.tvshows.dialogs.TvShowEpisodeEditorDialog.java
/** * Instantiates a new tv show episode scrape dialog. * /*from w w w .j a v a 2s .c o m*/ * @param episode * the episode * @param inQueue * the in queue */ public TvShowEpisodeEditorDialog(TvShowEpisode episode, boolean inQueue) { super(BUNDLE.getString("tvshowepisode.scrape"), "tvShowEpisodeScraper"); //$NON-NLS-1$ setBounds(5, 5, 964, 632); for (MediaFile mf : episode.getMediaFiles()) { mediaFiles.add(new MediaFile(mf)); } this.episodeToEdit = episode; getContentPane().setLayout(new BorderLayout()); { JPanel panelFilename = new JPanel(); getContentPane().add(panelFilename, BorderLayout.NORTH); panelFilename.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, RowSpec.decode("15px"), FormFactory.RELATED_GAP_ROWSPEC, })); JLabel lblFilenameT = new JLabel(BUNDLE.getString("metatag.path")); //$NON-NLS-1$ panelFilename.add(lblFilenameT, "2, 2, left, top"); lblFilename = new JLabel(""); TmmFontHelper.changeFont(lblFilename, 1.166, Font.BOLD); panelFilename.add(lblFilename, "5, 2, left, top"); } JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.NORTH); getContentPane().add(tabbedPane, BorderLayout.CENTER); /** * DetailsPanel */ { JPanel detailsPanel = new JPanel(); tabbedPane.addTab(BUNDLE.getString("metatag.details"), detailsPanel); //$NON-NLS-1$ detailsPanel.setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("40dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("7dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("20dlu"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("30dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("7dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("100dlu:grow"), FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.LINE_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("35dlu:grow"), FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"), FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, })); JLabel lblTitle = new JLabel(BUNDLE.getString("metatag.title")); //$NON-NLS-1$ detailsPanel.add(lblTitle, "2, 4, right, default"); tfTitle = new JTextField(); detailsPanel.add(tfTitle, "4, 4, 19, 1"); tfTitle.setColumns(10); JLabel lblSeason = new JLabel(BUNDLE.getString("metatag.season")); //$NON-NLS-1$ detailsPanel.add(lblSeason, "2, 6, right, default"); spSeason = new JSpinner(); detailsPanel.add(spSeason, "4, 6"); JLabel lblEpisode = new JLabel(BUNDLE.getString("metatag.episode")); //$NON-NLS-1$ detailsPanel.add(lblEpisode, "8, 6, right, default"); spEpisode = new JSpinner(); detailsPanel.add(spEpisode, "10, 6"); JLabel lblDvdSeason = new JLabel(BUNDLE.getString("metatag.dvdseason")); //$NON-NLS-1$ detailsPanel.add(lblDvdSeason, "2, 8, right, default"); spDvdSeason = new JSpinner(); detailsPanel.add(spDvdSeason, "4, 8"); JLabel lblDvdEpisode = new JLabel(BUNDLE.getString("metatag.dvdepisode")); //$NON-NLS-1$ detailsPanel.add(lblDvdEpisode, "8, 8, right, default"); spDvdEpisode = new JSpinner(); detailsPanel.add(spDvdEpisode, "10, 8"); JLabel lblDvdOrder = new JLabel(BUNDLE.getString("metatag.dvdorder")); //$NON-NLS-1$ detailsPanel.add(lblDvdOrder, "14, 8, right, default"); cbDvdOrder = new JCheckBox(""); detailsPanel.add(cbDvdOrder, "16, 8"); cbDvdOrder.setSelected(episodeToEdit.isDvdOrder()); JLabel lblDisplaySeason = new JLabel(BUNDLE.getString("metatag.displayseason")); //$NON-NLS-1$ detailsPanel.add(lblDisplaySeason, "2, 10, right, default"); spDisplaySeason = new JSpinner(); detailsPanel.add(spDisplaySeason, "4, 10"); JLabel lblDisplayEpisode = new JLabel(BUNDLE.getString("metatag.displayepisode")); //$NON-NLS-1$ detailsPanel.add(lblDisplayEpisode, "8, 10, right, default"); spDisplayEpisode = new JSpinner(); detailsPanel.add(spDisplayEpisode, "10, 10"); JLabel lblRating = new JLabel(BUNDLE.getString("metatag.rating")); //$NON-NLS-1$ detailsPanel.add(lblRating, "2, 12, right, default"); spRating = new JSpinner(); detailsPanel.add(spRating, "4, 12"); JLabel lblFirstAired = new JLabel(BUNDLE.getString("metatag.aired")); //$NON-NLS-1$ detailsPanel.add(lblFirstAired, "8, 12, right, default"); dpFirstAired = new DatePicker(episode.getFirstAired()); detailsPanel.add(dpFirstAired, "10, 12, 3, 1, fill, default"); JLabel lblWatched = new JLabel(BUNDLE.getString("metatag.watched")); //$NON-NLS-1$ detailsPanel.add(lblWatched, "2, 14, right, default"); chckbxWatched = new JCheckBox(""); detailsPanel.add(chckbxWatched, "4, 14"); JLabel lblDateAdded = new JLabel(BUNDLE.getString("metatag.dateadded")); //$NON-NLS-1$ detailsPanel.add(lblDateAdded, "8, 14, right, default"); spDateAdded = new JSpinner(new SpinnerDateModel()); detailsPanel.add(spDateAdded, "10, 14, 3, 1, fill, default"); JLabel lblMediasource = new JLabel(BUNDLE.getString("metatag.source")); //$NON-NLS-1$ detailsPanel.add(lblMediasource, "2, 16, right, default"); cbMediaSource = new JComboBox(MediaSource.values()); detailsPanel.add(cbMediaSource, "4, 16, 4, 1, fill, default"); JLabel lblPlot = new JLabel(BUNDLE.getString("metatag.plot")); //$NON-NLS-1$ detailsPanel.add(lblPlot, "2, 18, right, top"); JScrollPane scrollPane = new JScrollPane(); detailsPanel.add(scrollPane, "4, 18, 13, 1, fill, fill"); taPlot = new JTextArea(); taPlot.setLineWrap(true); taPlot.setWrapStyleWord(true); scrollPane.setViewportView(taPlot); lblThumb = new ImageLabel(); lblThumb.setAlternativeText(BUNDLE.getString("image.notfound.thumb")); //$NON-NLS-1$ lblThumb.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { Path file = TmmUIHelper.selectFile(BUNDLE.getString("image.choose")); //$NON-NLS-1$ if (file != null && Utils.isRegularFile(file)) { String fileName = file.toAbsolutePath().toString(); lblThumb.setImageUrl("file:/" + fileName); } } }); lblThumb.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); detailsPanel.add(lblThumb, "20, 6, 3, 13"); JLabel lblDirector = new JLabel(BUNDLE.getString("metatag.director")); //$NON-NLS-1$ detailsPanel.add(lblDirector, "2, 20, right, default"); tfDirector = new JTextField(); tfDirector.setText((String) null); tfDirector.setColumns(10); detailsPanel.add(tfDirector, "4, 20, 13, 1, fill, default"); JLabel lblWriter = new JLabel(BUNDLE.getString("metatag.writer")); //$NON-NLS-1$ detailsPanel.add(lblWriter, "2, 22, right, default"); tfWriter = new JTextField(); tfWriter.setText((String) null); tfWriter.setColumns(10); detailsPanel.add(tfWriter, "4, 22, 13, 1, fill, default"); JLabel lblGuests = new JLabel(BUNDLE.getString("metatag.guests")); //$NON-NLS-1$ detailsPanel.add(lblGuests, "2, 24, right, top"); JScrollPane scrollPaneGuests = new JScrollPane(); detailsPanel.add(scrollPaneGuests, "4, 24, 13, 7, fill, fill"); tableGuests = new JTable(); tableGuests.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); scrollPaneGuests.setViewportView(tableGuests); JLabel lblTags = new JLabel(BUNDLE.getString("metatag.tags")); //$NON-NLS-1$ detailsPanel.add(lblTags, "20, 24, default, top"); JScrollPane scrollPaneTags = new JScrollPane(); detailsPanel.add(scrollPaneTags, "22, 24, 1, 5, fill, fill"); listTags = new JList(); scrollPaneTags.setViewportView(listTags); JButton btnAddActor = new JButton(""); btnAddActor.setMargin(new Insets(2, 2, 2, 2)); btnAddActor.setAction(new AddActorAction()); btnAddActor.setIcon(IconManager.LIST_ADD); detailsPanel.add(btnAddActor, "2, 26, right, top"); JButton btnAddTag = new JButton(""); btnAddTag.setMargin(new Insets(2, 2, 2, 2)); btnAddTag.setAction(new AddTagAction()); btnAddTag.setIcon(IconManager.LIST_ADD); detailsPanel.add(btnAddTag, "20, 26, right, top"); JButton btnRemoveActor = new JButton(""); btnRemoveActor.setMargin(new Insets(2, 2, 2, 2)); btnRemoveActor.setAction(new RemoveActorAction()); btnRemoveActor.setIcon(IconManager.LIST_REMOVE); detailsPanel.add(btnRemoveActor, "2, 28, right, top"); JButton btnRemoveTag = new JButton(""); btnRemoveTag.setMargin(new Insets(2, 2, 2, 2)); btnRemoveTag.setAction(new RemoveTagAction()); btnRemoveTag.setIcon(IconManager.LIST_REMOVE); detailsPanel.add(btnRemoveTag, "20, 28, right, top"); cbTags = new AutocompleteComboBox(tvShowList.getTagsInEpisodes().toArray()); cbTags.setEditable(true); detailsPanel.add(cbTags, "22, 30, fill, default"); } /** * Media Files panel */ { mediaFilesPanel = new MediaFileEditorPanel(mediaFiles); tabbedPane.addTab(BUNDLE.getString("metatag.mediafiles"), null, mediaFilesPanel, null); //$NON-NLS-1$ } { JPanel bottomPanel = new JPanel(); getContentPane().add(bottomPanel, BorderLayout.SOUTH); bottomPanel.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.LABEL_COMPONENT_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"), FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormFactory.LINE_GAP_ROWSPEC, RowSpec.decode("25px"), FormFactory.RELATED_GAP_ROWSPEC, })); cbScraper = new MediaScraperComboBox(tvShowList.getAvailableMediaScrapers()); MediaScraper defaultScraper = tvShowList.getDefaultMediaScraper(); cbScraper.setSelectedItem(defaultScraper); bottomPanel.add(cbScraper, "2, 2, fill, default"); JButton btnScrape = new JButton(BUNDLE.getString("Button.scrape")); //$NON-NLS-1$ btnScrape.setPreferredSize(new Dimension(100, 23)); btnScrape.setMaximumSize(new Dimension(0, 0)); btnScrape.setMinimumSize(new Dimension(100, 23)); btnScrape.setActionCommand("Scrape"); btnScrape.addActionListener(this); bottomPanel.add(btnScrape, "4, 2, left, fill"); JButton btnSearch = new JButton(BUNDLE.getString("tvshowepisodechooser.search")); //$NON-NLS-1$ btnSearch.setActionCommand("Search"); btnSearch.addActionListener(this); btnSearch.setIcon(IconManager.SEARCH); bottomPanel.add(btnSearch, "6, 2, left, fill"); { JPanel buttonPane = new JPanel(); bottomPanel.add(buttonPane, "8, 2, fill, fill"); EqualsLayout layout = new EqualsLayout(5); layout.setMinWidth(100); buttonPane.setLayout(layout); JButton okButton = new JButton(BUNDLE.getString("Button.ok")); //$NON-NLS-1$ okButton.setToolTipText(BUNDLE.getString("tvshow.change")); okButton.setIcon(IconManager.APPLY); buttonPane.add(okButton); okButton.setActionCommand("OK"); okButton.addActionListener(this); JButton cancelButton = new JButton(BUNDLE.getString("Button.cancel")); //$NON-NLS-1$ cancelButton.setToolTipText(BUNDLE.getString("edit.discard")); cancelButton.setIcon(IconManager.CANCEL); buttonPane.add(cancelButton); cancelButton.setActionCommand("Cancel"); cancelButton.addActionListener(this); if (inQueue) { JButton abortButton = new JButton(BUNDLE.getString("Button.abortqueue")); //$NON-NLS-1$ abortButton.setToolTipText(BUNDLE.getString("tvshow.edit.abortqueue.desc")); //$NON-NLS-1$ abortButton.setIcon(IconManager.PROCESS_STOP); buttonPane.add(abortButton); abortButton.setActionCommand("Abort"); abortButton.addActionListener(this); } } } initDataBindings(); // fill data { MediaFile mediaFile = episodeToEdit.getMediaFiles().get(0); lblFilename.setText(mediaFile.getFileAsPath().toString()); tfTitle.setText(episodeToEdit.getTitle()); spSeason.setModel(new SpinnerNumberModel(episodeToEdit.getAiredSeason(), -1, Integer.MAX_VALUE, 1)); spEpisode.setModel(new SpinnerNumberModel(episodeToEdit.getAiredEpisode(), -1, Integer.MAX_VALUE, 1)); spDvdSeason.setModel(new SpinnerNumberModel(episodeToEdit.getDvdSeason(), -1, Integer.MAX_VALUE, 1)); spDvdEpisode.setModel(new SpinnerNumberModel(episodeToEdit.getDvdEpisode(), -1, Integer.MAX_VALUE, 1)); spDisplaySeason .setModel(new SpinnerNumberModel(episodeToEdit.getDisplaySeason(), -1, Integer.MAX_VALUE, 1)); spDisplayEpisode .setModel(new SpinnerNumberModel(episodeToEdit.getDisplayEpisode(), -1, Integer.MAX_VALUE, 1)); spDateAdded.setValue(episodeToEdit.getDateAdded()); lblThumb.setImagePath(episodeToEdit.getArtworkFilename(MediaFileType.THUMB)); spRating.setModel(new SpinnerNumberModel(episodeToEdit.getRating(), 0.0, 10.0, 0.1)); spRating.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { voteCount = 1; } }); voteCount = episodeToEdit.getVotes(); chckbxWatched.setSelected(episodeToEdit.isWatched()); taPlot.setText(episodeToEdit.getPlot()); taPlot.setCaretPosition(0); tfDirector.setText(episodeToEdit.getDirector()); tfWriter.setText(episodeToEdit.getWriter()); cbMediaSource.setSelectedItem(episodeToEdit.getMediaSource()); for (TvShowActor origCast : episodeToEdit.getGuests()) { TvShowActor actor = new TvShowActor(); actor.setName(origCast.getName()); actor.setCharacter(origCast.getCharacter()); actor.setThumbUrl(origCast.getThumbUrl()); cast.add(actor); } for (String tag : episodeToEdit.getTags()) { tags.add(tag); } } // adjust table columns tableGuests.getColumnModel().getColumn(0).setHeaderValue(BUNDLE.getString("metatag.name")); //$NON-NLS-1$ tableGuests.getColumnModel().getColumn(1).setHeaderValue(BUNDLE.getString("metatag.role")); //$NON-NLS-1$ }