package com.cipres.mrBayesPlugin; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.ngbw.directclient.CiCipresException; import org.ngbw.restdatatypes.ErrorData; import org.ngbw.restdatatypes.LimitStatus; import org.ngbw.restdatatypes.ParamError; import com.biomatters.geneious.publicapi.components.Dialogs; import com.biomatters.geneious.publicapi.documents.AnnotatedPluginDocument; import com.biomatters.geneious.publicapi.documents.sequence.SequenceAlignmentDocument; import com.biomatters.geneious.publicapi.documents.sequence.SequenceDocument; import com.biomatters.geneious.publicapi.plugin.DocumentOperation; import com.biomatters.geneious.publicapi.plugin.DocumentOperationException; import com.biomatters.geneious.publicapi.plugin.DocumentSelectionSignature; import com.biomatters.geneious.publicapi.plugin.GeneiousActionOptions; import com.biomatters.geneious.publicapi.plugin.Icons; import com.biomatters.geneious.publicapi.plugin.Options; import com.biomatters.geneious.publicapi.utilities.IconUtilities; import com.cipres.mrBayesPlugin.ui.LoginOptions; import com.cipres.mrBayesPlugin.ui.RAxMLRESTXSEDEOptions; import com.cipres.mrBayesPlugin.utilities.CipresUtilities; import jebl.util.ProgressListener; public class CipresRAxMLRESTXSEDETree extends DocumentOperation { private static final String NEWLINE = System.getProperty("line.separator"); @Override public GeneiousActionOptions getActionOptions() { Icons icon= IconUtilities.getIcons("tree24.png"); return new GeneiousActionOptions("RAxML_CIPRES", "RAxML is a program for sequential and parallel maximum likelihood based inference of large phylogenetic trees.", icon, GeneiousActionOptions.Category.TreeBuilding); } @Override public String getHelp() { return "RAxML (Randomized Axelerated Maximum Likelihood) is a program for sequential and parallel " + "Maximum Likelihood based inference of large phylogenetic trees.\r\nIt can also be used for postanalyses of sets of phylogenetic trees, analyses of alignments and, evolutionary placement of short reads."; } @Override public DocumentSelectionSignature[] getSelectionSignatures() { DocumentSelectionSignature singleAlignmentSignature = new DocumentSelectionSignature( SequenceAlignmentDocument.class, 1, 1); //DocumentSelectionSignature singleSequenceSignature = new DocumentSelectionSignature( // SequenceDocument.class, 1, 1); return new DocumentSelectionSignature[]{singleAlignmentSignature/*, nucleotideSequenceSelectionSignature, proteinSequenceSelectionSignature*/}; //return new DocumentSelectionSignature[]{singleSequenceSignature}; } public Options getOptions(final AnnotatedPluginDocument[] docs) throws DocumentOperationException{ Options options = null; if (CipresUtilities.isNewUser()) { options = new LoginOptions(); options.canRestoreDefaults(); } else { options = new RAxMLRESTXSEDEOptions(docs); } return options; } public List performOperation(AnnotatedPluginDocument[] docs, ProgressListener progress, Options options) throws DocumentOperationException{ String userName = null; String password = null; if (options instanceof LoginOptions) { LoginOptions loginOpt = (LoginOptions)options; userName = loginOpt.getUsername(); password = loginOpt.getPassword(); } if (CipresMrBayesInitializer.Instance.initialize(userName, password) == false) return null; else { if (options instanceof LoginOptions) { Dialogs.showMessageDialog("Your login credentials have been saved. Please right click on your data and select Tree... again."); return null; } } RAxMLRESTXSEDEOptions raxmlRESTXSEDEOptions = (RAxMLRESTXSEDEOptions)options; List files = new ArrayList(); final AnnotatedPluginDocument doc = docs[0]; final SequenceAlignmentDocument alignmentDoc = (SequenceAlignmentDocument) doc.getDocument(); if (alignmentDoc.getNumberOfSequences() < 4) { throw new DocumentOperationException("MrBayes requires at least 4 sequences." + NEWLINE + "Please select an alignment" + " containing 4 or more sequences."); } raxmlRESTXSEDEOptions.populateJsonCommand(); Map> vParams = raxmlRESTXSEDEOptions.getVParams(); Map inputParams = raxmlRESTXSEDEOptions.getInputParams(); Map metadata = raxmlRESTXSEDEOptions.getMetadata(docs[0].getName()); System.out.println("The size of vParams = " + vParams.size()); System.out.println("vParams = " + vParams); System.out.println("inputParams = " + inputParams); System.out.println("metadata = " + metadata); try { CipresUtilities.submitJob("RAXMLHPC8_REST_XSEDE", vParams, inputParams, metadata); } catch (CiCipresException ce) { System.err.println("Caught in SubmitJob"); ErrorData ed = ce.getErrorData(); System.out.println("Cipres error code=" + ed.code + ", message=" + ed.displayMessage); if (ed.code == ErrorData.FORM_VALIDATION) { for (ParamError pe : ed.paramError) { System.out.println(pe.param + ": " + pe.error); } } else if (ed.code == ErrorData.USAGE_LIMIT) { LimitStatus ls = ed.limitStatus; System.out.println("Usage Limit Error, type=" + ls.type + ", ceiling=" + ls.ceiling); } } return null; } }