List of usage examples for java.lang ProcessBuilder directory
File directory
To view the source code for java.lang ProcessBuilder directory.
Click Source Link
From source file:edu.uci.ics.asterix.aql.translator.AqlTranslator.java
private void handlePregelixStatement(AqlMetadataProvider metadataProvider, Statement stmt, IHyracksClientConnection hcc) throws AsterixException, Exception { RunStatement pregelixStmt = (RunStatement) stmt; boolean bActiveTxn = true; String dataverseNameFrom = getActiveDataverse(pregelixStmt.getDataverseNameFrom()); String dataverseNameTo = getActiveDataverse(pregelixStmt.getDataverseNameTo()); String datasetNameFrom = pregelixStmt.getDatasetNameFrom().getValue(); String datasetNameTo = pregelixStmt.getDatasetNameTo().getValue(); if (dataverseNameFrom != dataverseNameTo) { throw new AlgebricksException("Pregelix statements across different dataverses are not supported."); }/*from w ww . ja v a2 s .co m*/ MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); metadataProvider.setMetadataTxnContext(mdTxnCtx); MetadataLockManager.INSTANCE.pregelixBegin(dataverseNameFrom, datasetNameFrom, datasetNameTo); try { // construct input paths Index fromIndex = null; List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseNameFrom, pregelixStmt.getDatasetNameFrom().getValue()); for (Index ind : indexes) { if (ind.isPrimaryIndex()) fromIndex = ind; } if (fromIndex == null) { throw new AlgebricksException("Tried to access non-existing dataset: " + datasetNameFrom); } Dataset datasetFrom = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseNameFrom, datasetNameFrom); IFileSplitProvider fromSplits = metadataProvider.splitProviderAndPartitionConstraintsForDataset( dataverseNameFrom, datasetNameFrom, fromIndex.getIndexName(), datasetFrom.getDatasetDetails().isTemp()).first; StringBuilder fromSplitsPaths = new StringBuilder(); for (FileSplit f : fromSplits.getFileSplits()) { fromSplitsPaths .append("asterix://" + f.getNodeName() + f.getLocalFile().getFile().getAbsolutePath()); fromSplitsPaths.append(","); } fromSplitsPaths.setLength(fromSplitsPaths.length() - 1); // Construct output paths Index toIndex = null; indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseNameTo, pregelixStmt.getDatasetNameTo().getValue()); for (Index ind : indexes) { if (ind.isPrimaryIndex()) toIndex = ind; } if (toIndex == null) { throw new AlgebricksException("Tried to access non-existing dataset: " + datasetNameTo); } Dataset datasetTo = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseNameTo, datasetNameTo); IFileSplitProvider toSplits = metadataProvider.splitProviderAndPartitionConstraintsForDataset( dataverseNameTo, datasetNameTo, toIndex.getIndexName(), datasetTo.getDatasetDetails().isTemp()).first; StringBuilder toSplitsPaths = new StringBuilder(); for (FileSplit f : toSplits.getFileSplits()) { toSplitsPaths.append("asterix://" + f.getNodeName() + f.getLocalFile().getFile().getAbsolutePath()); toSplitsPaths.append(","); } toSplitsPaths.setLength(toSplitsPaths.length() - 1); try { Dataset toDataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseNameTo, datasetNameTo); DropStatement dropStmt = new DropStatement(new Identifier(dataverseNameTo), pregelixStmt.getDatasetNameTo(), true); this.handleDatasetDropStatement(metadataProvider, dropStmt, hcc); IDatasetDetailsDecl idd = new InternalDetailsDecl( new Identifier(toDataset.getDatasetDetails().getNodeGroupName()), toIndex.getKeyFieldNames(), false, toDataset.getDatasetDetails().getCompactionPolicy(), toDataset.getDatasetDetails().getCompactionPolicyProperties(), null, toDataset.getDatasetDetails().isTemp()); DatasetDecl createToDataset = new DatasetDecl(new Identifier(dataverseNameTo), pregelixStmt.getDatasetNameTo(), new Identifier(toDataset.getItemTypeName()), toDataset.getHints(), toDataset.getDatasetType(), idd, false); this.handleCreateDatasetStatement(metadataProvider, createToDataset, hcc); } catch (Exception e) { e.printStackTrace(); throw new AlgebricksException("Error cleaning the result dataset. This should not happen."); } // Flush source dataset flushDataset(hcc, metadataProvider, mdTxnCtx, dataverseNameFrom, datasetNameFrom, fromIndex.getIndexName()); // call Pregelix String pregelix_home = System.getenv("PREGELIX_HOME"); if (pregelix_home == null) { throw new AlgebricksException("PREGELIX_HOME is not defined!"); } // construct command ArrayList<String> cmd = new ArrayList<String>(); cmd.add("bin/pregelix"); cmd.add(pregelixStmt.getParameters().get(0)); // jar cmd.add(pregelixStmt.getParameters().get(1)); // class for (String s : pregelixStmt.getParameters().get(2).split(" ")) { cmd.add(s); } cmd.add("-inputpaths"); cmd.add(fromSplitsPaths.toString()); cmd.add("-outputpath"); cmd.add(toSplitsPaths.toString()); StringBuilder command = new StringBuilder(); for (String s : cmd) { command.append(s); command.append(" "); } LOGGER.info("Running Pregelix Command: " + command.toString()); ProcessBuilder pb = new ProcessBuilder(cmd); pb.directory(new File(pregelix_home)); pb.redirectErrorStream(true); MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); bActiveTxn = false; Process pr = pb.start(); int resultState = 0; BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); if (line.contains("job finished")) { resultState = 1; } if (line.contains("Exception") || line.contains("Error")) { if (line.contains("Connection refused")) { throw new AlgebricksException( "The connection to your Pregelix cluster was refused. Is it running? Is the port in the query correct?"); } if (line.contains("Could not find or load main class")) { throw new AlgebricksException( "The main class of your Pregelix query was not found. Is the path to your .jar file correct?"); } if (line.contains("ClassNotFoundException")) { throw new AlgebricksException( "The vertex class of your Pregelix query was not found. Does it exist? Is the spelling correct?"); } if (line.contains("HyracksException")) { throw new AlgebricksException( "Something went wrong executing your Pregelix Job (HyracksException). Check the configuration of STORAGE_BUFFERCACHE_PAGESIZE and STORAGE_MEMORYCOMPONENT_PAGESIZE." + "It must match the one of Asterix. You can use managix describe -admin to find out the right configuration. " + "Check also if your datatypes in Pregelix and Asterix are matching."); } throw new AlgebricksException( "Something went wrong executing your Pregelix Job. Perhaps the Pregelix cluster needs to be restartet. " + "Check the following things: Are the datatypes of Asterix and Pregelix matching? " + "Is the server configuration correct (node names, buffer sizes, framesize)? Check the logfiles for more details."); } } pr.waitFor(); in.close(); if (resultState != 1) { throw new AlgebricksException( "Something went wrong executing your Pregelix Job. Perhaps the Pregelix cluster needs to be restartet. " + "Check the following things: Are the datatypes of Asterix and Pregelix matching? " + "Is the server configuration correct (node names, buffer sizes, framesize)? Check the logfiles for more details."); } } catch (Exception e) { if (bActiveTxn) { abort(e, e, mdTxnCtx); } throw e; } finally { MetadataLockManager.INSTANCE.pregelixEnd(dataverseNameFrom, datasetNameFrom, datasetNameTo); } }
From source file:org.apache.asterix.app.translator.QueryTranslator.java
protected void handlePregelixStatement(AqlMetadataProvider metadataProvider, Statement stmt, IHyracksClientConnection hcc) throws Exception { RunStatement pregelixStmt = (RunStatement) stmt; boolean bActiveTxn = true; String dataverseNameFrom = getActiveDataverse(pregelixStmt.getDataverseNameFrom()); String dataverseNameTo = getActiveDataverse(pregelixStmt.getDataverseNameTo()); String datasetNameFrom = pregelixStmt.getDatasetNameFrom().getValue(); String datasetNameTo = pregelixStmt.getDatasetNameTo().getValue(); MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); metadataProvider.setMetadataTxnContext(mdTxnCtx); List<String> readDataverses = new ArrayList<>(); readDataverses.add(dataverseNameFrom); List<String> readDatasets = new ArrayList<>(); readDatasets.add(datasetNameFrom);/* w ww. ja va 2 s. co m*/ MetadataLockManager.INSTANCE.insertDeleteUpsertBegin(dataverseNameTo, datasetNameTo, readDataverses, readDatasets); try { prepareRunExternalRuntime(metadataProvider, hcc, pregelixStmt, dataverseNameFrom, dataverseNameTo, datasetNameFrom, datasetNameTo, mdTxnCtx); String pregelixHomeKey = "PREGELIX_HOME"; // Finds PREGELIX_HOME in system environment variables. String pregelixHome = System.getenv(pregelixHomeKey); // Finds PREGELIX_HOME in Java properties. if (pregelixHome == null) { pregelixHome = System.getProperty(pregelixHomeKey); } // Finds PREGELIX_HOME in AsterixDB configuration. if (pregelixHome == null) { // Since there is a default value for PREGELIX_HOME in AsterixCompilerProperties, // pregelixHome can never be null. pregelixHome = AsterixAppContextInfo.INSTANCE.getCompilerProperties().getPregelixHome(); } // Constructs the pregelix command line. List<String> cmd = constructPregelixCommand(pregelixStmt, dataverseNameFrom, datasetNameFrom, dataverseNameTo, datasetNameTo); ProcessBuilder pb = new ProcessBuilder(cmd); pb.directory(new File(pregelixHome)); pb.redirectErrorStream(true); MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); bActiveTxn = false; // Executes the Pregelix command. int resultState = executeExternalShellProgram(pb); // Checks the return state of the external Pregelix command. if (resultState != 0) { throw new AlgebricksException( "Something went wrong executing your Pregelix Job. Perhaps the Pregelix cluster " + "needs to be restarted. " + "Check the following things: Are the datatypes of Asterix and Pregelix matching? " + "Is the server configuration correct (node names, buffer sizes, framesize)? " + "Check the logfiles for more details."); } } catch (Exception e) { if (bActiveTxn) { abort(e, e, mdTxnCtx); } throw e; } finally { MetadataLockManager.INSTANCE.insertDeleteUpsertEnd(dataverseNameTo, datasetNameTo, readDataverses, readDatasets); } }
From source file:de.huberlin.wbi.cuneiform.core.cre.LocalThread.java
@Override public void run() { Path scriptFile, location, successMarker, reportFile, callLocation, stdErrFile, stdOutFile; // Path lockMarker; Process process;/*from www .java 2s. c o m*/ int exitValue; Set<JsonReportEntry> report; JsonReportEntry entry; String line; StringBuffer buf; Path srcPath, destPath; ProcessBuilder processBuilder; Ticket ticket; String script, stdOut, stdErr; long tic, toc; JSONObject obj; Message msg; Charset cs; int trial; boolean suc; Exception ex; if (log.isDebugEnabled()) log.debug("Starting up local thread for ticket " + invoc.getTicketId() + "."); if (invoc == null) throw new NullPointerException("Invocation must not be null."); ticket = invoc.getTicket(); process = null; stdOut = null; stdErr = null; // lockMarker = null; script = null; successMarker = null; cs = Charset.forName("UTF-8"); try { callLocation = Paths.get(System.getProperty("user.dir")); location = buildDir.resolve(String.valueOf(invoc.getTicketId())); // lockMarker = location.resolve( Invocation.LOCK_FILENAME ); successMarker = location.resolve(Invocation.SUCCESS_FILENAME); reportFile = location.resolve(Invocation.REPORT_FILENAME); script = invoc.toScript(); // if( Files.exists( lockMarker ) ) // throw new IOException( "Lock held on ticket "+invoc.getTicketId() ); if (!Files.exists(successMarker)) { deleteIfExists(location); Files.createDirectories(location); // Files.createFile( lockMarker ); scriptFile = invoc.getExecutablePath(location); Files.createFile(scriptFile, PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---"))); // write executable script try (BufferedWriter writer = Files.newBufferedWriter(scriptFile, cs, StandardOpenOption.CREATE)) { writer.write(script); } // write executable log entry try (BufferedWriter writer = Files.newBufferedWriter(reportFile, cs, StandardOpenOption.CREATE)) { writer.write(ticket.getExecutableLogEntry().toString()); writer.write('\n'); } for (String filename : invoc.getStageInList()) { if (filename.charAt(0) == '/') throw new UnsupportedOperationException("Absolute path encountered '" + filename + "'."); srcPath = centralRepo.resolve(filename); destPath = location.resolve(filename); if (!Files.exists(srcPath)) { srcPath = callLocation.resolve(filename); if (log.isTraceEnabled()) log.trace("Resolving relative path '" + srcPath + "'."); } else if (log.isTraceEnabled()) log.trace("Resolving path to central repository '" + srcPath + "'."); if (log.isTraceEnabled()) log.trace("Trying to create symbolic link from '" + srcPath + "' to '" + destPath + "'."); if (!Files.exists(destPath.getParent())) Files.createDirectories(destPath.getParent()); Files.createSymbolicLink(destPath, srcPath); } // run script processBuilder = new ProcessBuilder(invoc.getCmd()); processBuilder.directory(location.toFile()); stdOutFile = location.resolve(Invocation.STDOUT_FILENAME); stdErrFile = location.resolve(Invocation.STDERR_FILENAME); processBuilder.redirectOutput(stdOutFile.toFile()); processBuilder.redirectError(stdErrFile.toFile()); trial = 1; suc = false; ex = null; tic = System.currentTimeMillis(); do { try { process = processBuilder.start(); suc = true; } catch (IOException e) { ex = e; if (log.isWarnEnabled()) log.warn("Unable to start process on trial " + (trial++) + " Waiting " + WAIT_INTERVAL + "ms: " + e.getMessage()); Thread.sleep(WAIT_INTERVAL); } } while (suc == false && trial <= MAX_TRIALS); if (process == null) { ticketSrc.sendMsg(new TicketFailedMsg(cre, ticket, ex, script, null, null)); // Files.delete( lockMarker ); return; } exitValue = process.waitFor(); toc = System.currentTimeMillis(); try (BufferedWriter writer = Files.newBufferedWriter(reportFile, cs, StandardOpenOption.APPEND)) { obj = new JSONObject(); obj.put(JsonReportEntry.LABEL_REALTIME, toc - tic); entry = invoc.createJsonReportEntry(tic, JsonReportEntry.KEY_INVOC_TIME, obj); writer.write(entry.toString()); writer.write('\n'); try (BufferedReader reader = Files.newBufferedReader(stdOutFile, cs)) { buf = new StringBuffer(); while ((line = reader.readLine()) != null) buf.append(line).append('\n'); stdOut = buf.toString(); if (!stdOut.isEmpty()) { entry = invoc.createJsonReportEntry(JsonReportEntry.KEY_INVOC_STDOUT, stdOut); writer.write(entry.toString()); writer.write('\n'); } } try (BufferedReader reader = Files.newBufferedReader(stdErrFile, cs)) { buf = new StringBuffer(); while ((line = reader.readLine()) != null) buf.append(line).append('\n'); stdErr = buf.toString(); if (!stdErr.isEmpty()) { entry = invoc.createJsonReportEntry(JsonReportEntry.KEY_INVOC_STDERR, stdErr); writer.write(entry.toString()); writer.write('\n'); } } if (exitValue == 0) Files.createFile(successMarker); else { ticketSrc.sendMsg(new TicketFailedMsg(cre, ticket, null, script, stdOut, stdErr)); // Files.delete( lockMarker ); return; } } } // gather report report = new HashSet<>(); try (BufferedReader reader = Files.newBufferedReader(reportFile, cs)) { while ((line = reader.readLine()) != null) { line = line.trim(); if (line.isEmpty()) continue; entry = new JsonReportEntry(line); // If the report comes from the hard cache then the run id // is different from the run id of this invocation. This is // corrected here. entry.setRunId(invoc.getRunId()); report.add(entry); } } invoc.evalReport(report); // create link in central data repository for (String f : invoc.getStageOutList()) { srcPath = location.resolve(f); destPath = centralRepo.resolve(f); if (Files.exists(destPath)) continue; if (log.isTraceEnabled()) log.trace("Creating link from " + srcPath + " to " + destPath + "."); Files.createSymbolicLink(destPath, srcPath); } ticketSrc.sendMsg(new TicketFinishedMsg(cre, invoc.getTicket(), report)); if (log.isTraceEnabled()) log.trace("Local thread ran through without exception."); // Files.deleteIfExists( lockMarker ); } catch (InterruptedException e) { if (log.isTraceEnabled()) log.trace("Local thread has been interrupted."); } catch (Exception e) { if (log.isTraceEnabled()) log.trace("Something went wrong. Deleting success marker if present."); if (successMarker != null) try { Files.deleteIfExists(successMarker); } catch (IOException e1) { e1.printStackTrace(); } msg = new TicketFailedMsg(cre, ticket, e, script, stdOut, stdErr); ticketSrc.sendMsg(msg); } finally { if (process != null) { if (log.isDebugEnabled()) log.debug("Stopping local thread for ticket " + invoc.getTicketId() + "."); process.destroy(); } } }
From source file:org.ramadda.repository.Repository.java
/** * Excecute a command//from www.j a v a 2s .c om * * @param commands command parameters * @param envVars enviroment variables * @param workingDir the working directory * * @return the input and output streams * * @throws Exception problem with execution */ public String[] executeCommand(List<String> commands, Map<String, String> envVars, File workingDir) throws Exception { ProcessBuilder pb = new ProcessBuilder(commands); if (envVars != null) { Map<String, String> env = pb.environment(); //env.clear(); env.putAll(envVars); } pb.directory(workingDir); Process process = pb.start(); String errorMsg = new String(IOUtil.readBytes(process.getErrorStream())); String outMsg = new String(IOUtil.readBytes(process.getInputStream())); int result = process.waitFor(); return new String[] { outMsg, errorMsg }; }
From source file:org.taverna.server.localworker.impl.WorkerCore.java
/** * Fire up the workflow. This causes a transition into the operating state. * /* ww w. j a v a 2 s. c o m*/ * @param executeWorkflowCommand * The command to run to execute the workflow. * @param workflow * The workflow document to execute. * @param workingDir * What directory to use as the working directory. * @param inputBaclava * The baclava file to use for inputs, or <tt>null</tt> to use * the other <b>input*</b> arguments' values. * @param inputFiles * A mapping of input names to files that supply them. Note that * we assume that nothing mapped here will be mapped in * <b>inputValues</b>. * @param inputValues * A mapping of input names to values to supply to them. Note * that we assume that nothing mapped here will be mapped in * <b>inputFiles</b>. * @param outputBaclava * What baclava file to write the output from the workflow into, * or <tt>null</tt> to have it written into the <tt>out</tt> * subdirectory. * @param token * The name of the workflow run. * @throws IOException * If any of quite a large number of things goes wrong. */ @Override public void initWorker(String executeWorkflowCommand, String workflow, File workingDir, File inputBaclava, Map<String, File> inputFiles, Map<String, String> inputValues, File outputBaclava, File securityDir, char[] password, Map<String, String> environment, String token) throws IOException { ProcessBuilder pb = new ProcessBuilder(); /* * WARNING! HERE THERE BE DRAGONS! BE CAREFUL HERE! * * Work around _Maven_ bug with permissions in zip files! The executable * bit is stripped by Maven's handling of file permissions, and there's * no practical way to work around it without massively increasing the * pain in other ways. Only want this on Unix - Windows isn't affected * by this - so we use the file separator as a proxy for whether this is * a true POSIX system. Ugly! Ugly ugly ugly... * * http://jira.codehaus.org/browse/MASSEMBLY-337 is relevant, but not * the whole story as we don't want to use a non-standard packaging * method as there's a real chance of it going wrong in an unexpected * way then. Other parts of the story are that the executable bit isn't * preserved when unpacking with the dependency plugin, and there's no * way to be sure that the servlet container will preserve the bit * either (as that's probably using a Java-based ZIP engine). */ if (File.separatorChar == '/') pb.command().add("/bin/sh"); pb.command().add(executeWorkflowCommand); // Enable verbose logging pb.command().add("-logfile"); pb.command().add(new File(new File(workingDir, "logs"), "detail.log").getAbsolutePath()); if (securityDir != null) { pb.command().add(CREDENTIAL_MANAGER_DIRECTORY); pb.command().add(securityDir.getAbsolutePath()); out.println("security dir location: " + securityDir); } if (password != null) { pb.command().add(CREDENTIAL_MANAGER_PASSWORD); out.println("password of length " + password.length + " will be written to subprocess stdin"); } // Add arguments denoting inputs if (inputBaclava != null) { pb.command().add("-inputdoc"); pb.command().add(inputBaclava.getAbsolutePath()); if (!inputBaclava.exists()) throw new IOException("input baclava file doesn't exist"); } else { for (Entry<String, File> port : inputFiles.entrySet()) { if (port.getValue() != null) { pb.command().add("-inputfile"); pb.command().add(port.getKey()); pb.command().add(port.getValue().getAbsolutePath()); if (!port.getValue().exists()) throw new IOException("input file for port \"" + port + "\" doesn't exist"); } } for (Entry<String, String> port : inputValues.entrySet()) { if (port.getValue() != null) { pb.command().add("-inputvalue"); pb.command().add(port.getKey()); pb.command().add(port.getValue()); } } } // Add arguments denoting outputs if (outputBaclava != null) { pb.command().add("-outputdoc"); pb.command().add(outputBaclava.getAbsolutePath()); if (!outputBaclava.getParentFile().exists()) throw new IOException("parent directory of output baclava file does not exist"); if (outputBaclava.exists()) throw new IOException("output baclava file exists"); } else { File out = new File(workingDir, "out"); if (!out.mkdir()) { throw new IOException("failed to make output directory \"out\""); } if (!out.delete()) { // Taverna needs the dir to *not* exist now throw new IOException("failed to delete output directory \"out\""); } pb.command().add("-outputdir"); pb.command().add(out.getAbsolutePath()); } // Add an argument holding the workflow File tmp = createTempFile("taverna", ".t2flow"); Writer w = new OutputStreamWriter(new FileOutputStream(tmp), "UTF-8"); try { w.write(workflow); } finally { w.close(); } tmp.deleteOnExit(); pb.command().add(tmp.getAbsolutePath()); // Indicate what working directory to use pb.directory(workingDir); wd = workingDir; Map<String, String> env = pb.environment(); // Merge any options we have had imposed on us from outside env.putAll(environment); // Patch the environment to deal with TAVUTILS-17 assert env.get("PATH") != null; env.put("PATH", new File(System.getProperty("java.home"), "bin") + pathSeparator + env.get("PATH")); // Patch the environment to deal with TAVSERV-189 env.put("RAVEN_APPHOME", workingDir.getCanonicalPath()); // Patch the environment to deal with TAVSERV-224 env.put("TAVERNA_RUN_ID", token); if (interactionHost != null) { env.put("INTERACTION_HOST", interactionHost); env.put("INTERACTION_PORT", interactionPort); env.put("INTERACTION_WEBDAV", interactionWebdavPath); env.put("INTERACTION_FEED", interactionFeedPath); } // Start the subprocess out.println("starting " + pb.command() + " in directory " + workingDir); subprocess = pb.start(); if (subprocess == null) throw new IOException("unknown failure creating process"); start = new Date(); // Capture its stdout and stderr new AsyncCopy(subprocess.getInputStream(), stdout); new AsyncCopy(subprocess.getErrorStream(), stderr); if (password != null) new AsyncPrint(subprocess.getOutputStream(), password); }
From source file:com.panet.imeta.job.entries.shell.JobEntryShell.java
private void executeShell(Result result, List<RowMetaAndData> cmdRows, String[] args) { LogWriter log = LogWriter.getInstance(); FileObject fileObject = null; String realScript = null;/*from w w w .j a v a 2s . com*/ FileObject tempFile = null; try { // What's the exact command? String base[] = null; List<String> cmds = new ArrayList<String>(); if (log.isBasic()) log.logBasic(toString(), Messages.getString("JobShell.RunningOn", Const.getOS())); if (insertScript) { realScript = environmentSubstitute(script); } else { String realFilename = environmentSubstitute(getFilename()); fileObject = KettleVFS.getFileObject(realFilename); } if (Const.getOS().equals("Windows 95")) { base = new String[] { "command.com", "/C" }; } else if (Const.getOS().startsWith("Windows")) { base = new String[] { "cmd.exe", "/C" }; } else { if (!insertScript) { // Just set the command to the script we need to execute... // base = new String[] { KettleVFS.getFilename(fileObject) }; } else { // Create a unique new temporary filename in the working directory, put the script in there // Set the permissions to execute and then run it... // try { tempFile = KettleVFS.createTempFile("kettle", "shell", workDirectory); tempFile.createFile(); OutputStream outputStream = tempFile.getContent().getOutputStream(); outputStream.write(realScript.getBytes()); outputStream.close(); String tempFilename = KettleVFS.getFilename(tempFile); // Now we have to make this file executable... // On Unix-like systems this is done using the command "/bin/chmod +x filename" // ProcessBuilder procBuilder = new ProcessBuilder("chmod", "+x", tempFilename); Process proc = procBuilder.start(); // Eat/log stderr/stdout all messages in a different thread... StreamLogger errorLogger = new StreamLogger(proc.getErrorStream(), toString() + " (stderr)"); StreamLogger outputLogger = new StreamLogger(proc.getInputStream(), toString() + " (stdout)"); new Thread(errorLogger).start(); new Thread(outputLogger).start(); proc.waitFor(); // Now set this filename as the base command... // base = new String[] { tempFilename }; } catch (Exception e) { throw new Exception("Unable to create temporary file to execute script", e); } } } // Construct the arguments... if (argFromPrevious && cmdRows != null) { // Add the base command... for (int i = 0; i < base.length; i++) cmds.add(base[i]); if (Const.getOS().equals("Windows 95") || Const.getOS().startsWith("Windows")) { // for windows all arguments including the command itself // need to be // included in 1 argument to cmd/command. StringBuffer cmdline = new StringBuffer(300); cmdline.append('"'); if (insertScript) cmdline.append(realScript); else cmdline.append(optionallyQuoteField(KettleVFS.getFilename(fileObject), "\"")); // Add the arguments from previous results... for (int i = 0; i < cmdRows.size(); i++) // Normally just // one row, but // once in a // while to // remain // compatible we // have // multiple. { RowMetaAndData r = (RowMetaAndData) cmdRows.get(i); for (int j = 0; j < r.size(); j++) { cmdline.append(' '); cmdline.append(optionallyQuoteField(r.getString(j, null), "\"")); } } cmdline.append('"'); cmds.add(cmdline.toString()); } else { // Add the arguments from previous results... for (int i = 0; i < cmdRows.size(); i++) // Normally just // one row, but // once in a // while to // remain // compatible we // have // multiple. { RowMetaAndData r = (RowMetaAndData) cmdRows.get(i); for (int j = 0; j < r.size(); j++) { cmds.add(optionallyQuoteField(r.getString(j, null), "\"")); } } } } else if (args != null) { // Add the base command... for (int i = 0; i < base.length; i++) cmds.add(base[i]); if (Const.getOS().equals("Windows 95") || Const.getOS().startsWith("Windows")) { // for windows all arguments including the command itself // need to be // included in 1 argument to cmd/command. StringBuffer cmdline = new StringBuffer(300); cmdline.append('"'); if (insertScript) cmdline.append(realScript); else cmdline.append(optionallyQuoteField(KettleVFS.getFilename(fileObject), "\"")); for (int i = 0; i < args.length; i++) { cmdline.append(' '); cmdline.append(optionallyQuoteField(args[i], "\"")); } cmdline.append('"'); cmds.add(cmdline.toString()); } else { for (int i = 0; i < args.length; i++) { cmds.add(args[i]); } } } StringBuffer command = new StringBuffer(); Iterator<String> it = cmds.iterator(); boolean first = true; while (it.hasNext()) { if (!first) command.append(' '); else first = false; command.append((String) it.next()); } if (log.isBasic()) log.logBasic(toString(), Messages.getString("JobShell.ExecCommand", command.toString())); // Build the environment variable list... ProcessBuilder procBuilder = new ProcessBuilder(cmds); Map<String, String> env = procBuilder.environment(); String[] variables = listVariables(); for (int i = 0; i < variables.length; i++) { env.put(variables[i], getVariable(variables[i])); } if (getWorkDirectory() != null && !Const.isEmpty(Const.rtrim(getWorkDirectory()))) { String vfsFilename = environmentSubstitute(getWorkDirectory()); File file = new File(KettleVFS.getFilename(KettleVFS.getFileObject(vfsFilename))); procBuilder.directory(file); } Process proc = procBuilder.start(); // any error message? StreamLogger errorLogger = new StreamLogger(proc.getErrorStream(), toString() + " (stderr)"); // any output? StreamLogger outputLogger = new StreamLogger(proc.getInputStream(), toString() + " (stdout)"); // kick them off new Thread(errorLogger).start(); new Thread(outputLogger).start(); proc.waitFor(); if (log.isDetailed()) log.logDetailed(toString(), Messages.getString("JobShell.CommandFinished", command.toString())); // What's the exit status? result.setExitStatus(proc.exitValue()); if (result.getExitStatus() != 0) { if (log.isDetailed()) log.logDetailed(toString(), Messages.getString("JobShell.ExitStatus", environmentSubstitute(getFilename()), "" + result.getExitStatus())); result.setNrErrors(1); } // close the streams // otherwise you get "Too many open files, java.io.IOException" after a lot of iterations proc.getErrorStream().close(); proc.getOutputStream().close(); } catch (IOException ioe) { log.logError(toString(), Messages.getString("JobShell.ErrorRunningShell", environmentSubstitute(getFilename()), ioe.toString())); result.setNrErrors(1); } catch (InterruptedException ie) { log.logError(toString(), Messages.getString("JobShell.Shellinterupted", environmentSubstitute(getFilename()), ie.toString())); result.setNrErrors(1); } catch (Exception e) { log.logError(toString(), Messages.getString("JobShell.UnexpectedError", environmentSubstitute(getFilename()), e.toString())); result.setNrErrors(1); } finally { // If we created a temporary file, remove it... // if (tempFile != null) { try { tempFile.delete(); } catch (Exception e) { Messages.getString("JobShell.UnexpectedError", tempFile.toString(), e.toString()); } } } if (result.getNrErrors() > 0) { result.setResult(false); } else { result.setResult(true); } }
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;// www. j a va 2 s .c om 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 ); } }