import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceI;
import jalview.gui.Help.HelpId;
import jalview.gui.StructureViewer.ViewerType;
-import jalview.hmmer.HMMBuildThread;
+import jalview.hmmer.HmmerCommand;
import jalview.io.FileFormatI;
import jalview.io.JalviewFileChooser;
import jalview.io.JalviewFileView;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import java.util.Scanner;
import javax.help.HelpSetException;
import javax.swing.JColorChooser;
/*
* Set HMMER tab defaults
*/
- trimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
- isHMMERInstalled
- .setSelected(Cache.getDefault("HMMER_INSTALLED", false));
+ hmmrTrimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
if (Cache.getDefault("USE_UNIPROT", false))
{
- uniprot.setSelected(true);
+ hmmerBackgroundUniprot.setSelected(true);
}
else
{
- alignment.setSelected(true);
+ hmmerBackgroundAlignment.setSelected(true);
}
- numberOfSequencesToKeepField
+ hmmerSequenceCount
.setText(Cache.getProperty("SEQUENCES_TO_KEEP"));
- installationLocation.setEnabled(isHMMERInstalled.isSelected());
- hmmerPath.setEnabled(isHMMERInstalled.isSelected());
hmmerPath.setText(Cache.getProperty(HMMER_PATH));
hmmerPath.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- validateHMMERPath();
+ validateHMMERPath(true);
+ }
+ });
+ hmmerPath.addFocusListener(new FocusAdapter()
+ {
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+ validateHMMERPath(true);
}
});
* Save HMMER settings
*/
Cache.applicationProperties.setProperty("TRIM_TERMINI",
- Boolean.toString(trimTermini.isSelected()));
+ Boolean.toString(hmmrTrimTermini.isSelected()));
Cache.applicationProperties.setProperty("USE_UNIPROT",
- Boolean.toString(uniprot.isSelected()));
+ Boolean.toString(hmmerBackgroundUniprot.isSelected()));
Cache.applicationProperties.setProperty("SEQUENCES_TO_KEEP",
- numberOfSequencesToKeepField.getText());
+ hmmerSequenceCount.getText());
Cache.applicationProperties.setProperty(HMMER_PATH,
hmmerPath.getText());
- boolean hmmerInstalled = isHMMERInstalled.isSelected();
- Cache.applicationProperties.setProperty("HMMER_INSTALLED",
- Boolean.toString(hmmerInstalled));
- boolean hmmerFunctioning = validateHMMERPath(false);
- Cache.applicationProperties.setProperty("HMMER_FUNCTIONING",
- Boolean.toString(hmmerFunctioning));
AlignFrame[] frames = Desktop.getAlignFrames();
- boolean hmmerStatus = hmmerFunctioning && hmmerInstalled ? true : false;
if (frames != null && frames.length > 0)
{
- for (AlignFrame frame : frames)
+ for (AlignFrame f : frames)
{
- frame.updateHMMERStatus(hmmerStatus);
+ f.updateHMMERStatus();
}
}
- trimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
+ hmmrTrimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
if (Cache.getDefault("USE_UNIPROT", false))
{
- uniprot.setSelected(true);
+ hmmerBackgroundUniprot.setSelected(true);
}
else
{
- alignment.setSelected(true);
+ hmmerBackgroundAlignment.setSelected(true);
}
- numberOfSequencesToKeepField
+ hmmerSequenceCount
.setText(Cache.getProperty("SEQUENCES_TO_KEEP"));
hmmerPath.setText(Cache.getProperty(HMMER_PATH));
structureTab.requestFocusInWindow();
return false;
}
- if (isHMMERInstalled.isSelected())
- {
- if (!validateHMMER())
- {
- hmmerTab.requestFocusInWindow();
- return false;
- }
- }
return true;
}
}
- @Override
- protected boolean validateHMMER()
- {
- return validateHMMERPath();
-
- }
-
/**
* DOCUMENT ME!
*/
}
/**
- * Returns true if hmmer path contains the necessary valid executables, else
- * show an error dialog (if showing dialog).
+ * Returns true if hmmer path is to a folder that contains an executable
+ * hmmbuild or hmmbuild.exe, else false (optionally after showing a warning
+ * dialog)
*/
- private boolean validateHMMERPath(boolean showDialog)
+ @Override
+ protected boolean validateHMMERPath(boolean showWarning)
{
- int missing = 0;
- String message = "";
String folder = hmmerPath.getText().trim();
- if (folder.length() > 0)
- {
- File f = new File(folder);
- if (!f.exists())
- {
- if (showDialog)
- {
- JvOptionPane.showInternalMessageDialog(Desktop.desktop,
- MessageManager.getString("label.folder_not_exists"),
- MessageManager.getString("label.invalid_folder"),
- JvOptionPane.ERROR_MESSAGE);
- }
- return false;
- }
- AlignmentI alignment = new Alignment(
- new SequenceI[]
- { new Sequence("test", "WLWL", 0, 3) });
- if (canExecute(folder + "/hmmbuild"))
- {
- validateHMMBuild(alignment);
- }
- else
- {
- message += MessageManager.getString("label.hmmbuild_not_found")
- + "\n";
- missing++;
- }
-
-
- if (canExecute(folder + "/hmmalign"))
- {
-
- }
- else
- {
- message += MessageManager.getString("label.hmmalign_not_found")
- + "\n";
- missing++;
- }
-
- if (canExecute(folder + "/hmmsearch"))
- {
-
- }
- else
- {
- message += MessageManager.getString("label.hmmsearch_not_found")
- + "\n";
- missing++;
- }
- }
-
- if (missing > 0)
- {
- if (missing < 3)
- {
- if (showDialog)
- {
- JvOptionPane.showInternalMessageDialog(Desktop.desktop, message,
- MessageManager.getString("label.invalid_folder"),
- JvOptionPane.ERROR_MESSAGE);
- }
- return false;
- }
- else
- {
- if (showDialog)
- {
- JvOptionPane.showInternalMessageDialog(Desktop.desktop,
- MessageManager.getString("label.no_binaries"),
- MessageManager.getString("label.invalid_folder"),
- JvOptionPane.ERROR_MESSAGE);
- }
-
- return false;
- }
- }
-
- return true;
+ if (HmmerCommand.getExecutable(HmmerCommand.HMMBUILD, folder) != null)
+ {
+ return true;
+ }
+ if (showWarning && folder.length() > 0)
+ {
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+ MessageManager.getString("label.hmmbuild_not_found"),
+ MessageManager.getString("label.invalid_folder"),
+ JvOptionPane.ERROR_MESSAGE);
+ }
+ return false;
}
/**
}
/**
- * Runs hmmbuild to check if it is working. While doing this it parses the
- * version of HMMER.
- *
- * @param frame
- * @return
- */
- public boolean validateHMMBuild(AlignmentI alignment)
- {
- HMMBuildThread hmmbuild = new HMMBuildThread(alignment);
- hmmbuild.hmmbuildWaitTillComplete();
- SequenceI hmmSeq = alignment.getSequenceAt(0);
- HiddenMarkovModel hmm;
- if (hmmSeq.isHMMConsensusSequence() && hmmSeq.getHMM() != null)
- {
- hmm = hmmSeq.getHMM();
-
- if (hmm.getNumberOfSymbols() < 1)
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-
- String header = hmm.getFileHeader();
- if (header == null)
- {
- return false;
- }
- else
- {
- Scanner scanner = new Scanner(header);
- scanner.next();
- String string = scanner.next();
- String version = string.substring(1);
- Cache.setProperty("HMMER_VERSION", version);
- scanner.close();
-
- }
- return true;
- }
-
-
- private boolean validateHMMERPath()
- {
- return validateHMMERPath(true);
- }
-
- /**
* If Chimera is selected, check it can be found on default or user-specified
* path, if not show a warning/help dialog.
*/