package com.cipres.mrBayesPlugin; import java.util.Collection; import java.util.HashMap; 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.MrBayesOptions; import com.cipres.mrBayesPlugin.ui.RAxMLBBOptions; import com.cipres.mrBayesPlugin.utilities.CipresUtilities; import jebl.util.ProgressListener; public class CipresRAxMLBBTree extends DocumentOperation { @Override public GeneiousActionOptions getActionOptions() { Icons icon= IconUtilities.getIcons("tree24.png"); return new GeneiousActionOptions("RAxML_BlackBox_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 RAxMLBBOptions(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; } } RAxMLBBOptions raxmlBBOptions = (RAxMLBBOptions)options; raxmlBBOptions.populateJsonCommand(); Map> vParams = raxmlBBOptions.getVParams(); Map inputParams = raxmlBBOptions.getInputParams(); Map metadata = raxmlBBOptions.getMetadata(docs[0].getName()); System.out.println("vParams = " + vParams); System.out.println("inputParams = " + inputParams); System.out.println("metadata = " + metadata); try { CipresUtilities.submitJob("RAXMLHPC2BB", 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; } }