package aliview.settings;
import java.awt.Container;
import java.io.File;
import java.util.ArrayList;
import java.util.Vector;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.apache.log4j.Logger;
import utils.OSNativeUtils;
import aliview.AliViewWindow;
import aliview.aligner.AlignemtItem;
import aliview.aligner.MuscleWrapper;
import aliview.alignment.AlignmentEvent;
import aliview.alignment.AlignmentListener;
import aliview.color.ColorScheme;
import aliview.color.ColorSchemeFactory;
import aliview.externalcommands.CommandItem;
import aliview.gui.pane.CharPixels;
public class Settings {
private static final Logger logger = Logger.getLogger(Settings.class);
private static final String LF = System.getProperty("line.separator");
//private static final String ALIVIEW_HELP_URL = "http://www.ormbunkar.se/aliview/help/help.html";
private static final String ALIVIEW_HELP_URL = "http://www.ormbunkar.se/aliview/index.html";
private static final String SAVE_ALIGNMENT_DIRECTORY = "SAVE_ALIGNMENT_DIRECTORY";
private static final String LOAD_ALIGNMENT_DIRECTORY = "LOAD_ALIGNMENT_DIRECTORY";
private static final String SAVE_SELECTION_DIRECTORY = "SAVE_SELECTION_DIRECTORY";
private static final String EXTERNAL_COMMAND_FILE_DIRECTORY = "EXTERNAL_COMMAND_FILE_DIRECTORY";
private static final String TOGGLE_SHORT_NAME_ONLY = "TOGGLE_SHORT_NAME_ONLY";
private static final String COLOR_SCHEME = "COLOR_SCHEME";
private static final String COLOR_SCHEME_AMINOACID = "COLOR_SCHEME_AMINOACID";
private static final String COLOR_SCHEME_NUCLEOTIDE = "COLOR_SCHEME_NUCLEOTIDE";
private static final String RECENT_FILE = "RECENT_FILE";
private static final String CMD_NAME_ = "CMD_NAME_";
private static final String CMD_PROGRAM_PATH_ = "CMD_PROGRAM_PATH_";
private static final String CMD_COMMAND_ = "CMD_COMMAND_";
private static final String CMD_IS_ACTIVATED_ = "CMD_IS_ACTIVATED_";
private static final String CMD_SHOW_COMMAND_WIN_ = "CMD_SHOW_COMMAND_WIN_";
private static SettingValue saveAlignmentDir = new SettingValue("SAVE_ALIGNMENT_DIRECTORY", System.getProperty("user.home"));
private static SettingValue minPrimerLength = new SettingValue("MIN_PRIMER_LEN", 20, 15, 30);
private static SettingValue maxPrimerLength = new SettingValue("MAX_PRIMER_LEN", 24, 15, 30);
private static SettingValue dimerReportThreashold = new SettingValue("DIMER_REPORT_THREASHOLD", 5, 1, 30);
private static SettingValue minPrimerTM = new SettingValue("MIN_PRIMER_TM", 40, 0, 100);
private static SettingValue maxPrimerTM = new SettingValue("MAX_PRIMER_TM", 80, 0, 100);
private static SettingValue useCustomFontSize = new SettingValue("USE_CUSTOM_FONT_SIZE", false);
private static SettingValue customFontSize = new SettingValue("CUSTOM_FONT_SIZE", 12, 1, 24);
private static SettingValue showCharsetRuler = new SettingValue("SHOW_CHARSET_RULER", true);
private static SettingValue reverseHorizontalMouseWheel = new SettingValue("REVERSE_HORIZONTAL_MOUSE_WHEEL", false);
private static SettingValue reverseVerticalMouseWheel = new SettingValue("REVERSE_VERTICAL_MOUSE_WHEEL", false);
private static SettingValue horizontalMouseWheelScrollModifier = new SettingValue("HORIZONTALMOUSEWHEELSCROLLMODIFIER", 20,1,100);
private static SettingValue verticalMouseWheelScrollModifier = new SettingValue("VERTICALMOUSEWHEELSCROLLMODIFIER", 20,1,100);
private static SettingValue largeFileIndexing = new SettingValue("LARGE_FILE_INDEXING", 100000,10,100000000);
private static SettingValue maxFileHistogramSequences = new SettingValue("MAX_FILE_HISTOGRAM_SEQUENCES", 1000,10,1000000);
private static final String LOGFILE_NAME = "AliView.log";
private static final String ALIVIEW_USERDATA_SUBDIR = ".AliView";
private static Preferences prefs = Preferences.userNodeForPackage(Settings.class);
private static ArrayList<SettingsListener> settingListeners = new ArrayList<SettingsListener>();
// This is a good place for putting all hide checkbox values
private static SettingValue hideFileSeqLimitedEditCapabilities = new SettingValue("hideFileSeqLimitedEditCapabilities", false);
private static SettingValue hideEditModeMessage = new SettingValue("hideEditModeMessage", false);
private static SettingValue hideMuscleProfileAlignInfoMessage = new SettingValue("hideMuscleProfileAlignInfoMessage", false);
private static SettingValue hideRealignEverythingMessage = new SettingValue("hideRealignEverythingMessage", false);
private static SettingValue hideAlignmentProgressWindowWhenDone = new SettingValue("hideAlignmentProgressWindowWhenDone", false);
private static SettingValue hideDuplicateSeqNamesMessage = new SettingValue("hideDuplicateSeqNamesMessage", false);
private static SettingValue hideAlignmentProgramInvalidCharsInfoMessage = new SettingValue("hideAlignmentProgramInvalidCharsInfoMessage", false);
private static SettingValue hideAskBeforeEditMode = new SettingValue("hideAskBeforeEditMode", false);
private static SettingValue fontCase = new SettingValue("fontCase", CharPixels.CASE_UNTOUCHED, 0, 10);
public static SettingValue getMinPrimerLength(){
return minPrimerLength;
}
public static SettingValue getMaxPrimerLength(){
return maxPrimerLength;
}
public static SettingValue getDimerReportThreashold() {
return dimerReportThreashold;
}
public static void putBooleanValue(SettingValue settingValue,boolean booleanValue) {
prefs.putBoolean(settingValue.getPrefsKey(), booleanValue);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static boolean getBooleanValue(SettingValue settingValue) {
boolean value = prefs.getBoolean(settingValue.getPrefsKey(), settingValue.getDefaultBooleanValue());
return value;
}
public static int getIntValue(SettingValue settingValue) {
int value = prefs.getInt(settingValue.getPrefsKey(), settingValue.getDefaultIntValue());
return value;
}
public static void putIntValue(SettingValue settingValue, int intValue){
prefs.putInt(settingValue.getPrefsKey(), intValue);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void putIntValue(SettingValue settingValue){
logger.info("put" + settingValue.getIntValue());
prefs.putInt(settingValue.getPrefsKey(), settingValue.getIntValue());
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String getStringValue(SettingValue settingValue) {
String value = prefs.get(settingValue.getPrefsKey(), settingValue.getDefaultStringValue());
return value;
}
public static void putStringValue(SettingValue settingValue, String value) {
prefs.put(settingValue.getPrefsKey(), value);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
public static void putIntValue(String prefsKey, int value) {
prefs.putInt(maxPrimerLength.getPrefsKey(), length);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
*/
public static final String getSaveAlignmentDirectory(){
return prefs.get(SAVE_ALIGNMENT_DIRECTORY, System.getProperty("user.home"));
}
public static final void putSaveAlignmentDirectory(String dirName){
prefs.put(SAVE_ALIGNMENT_DIRECTORY, dirName);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static final String getLoadAlignmentDirectory(){
return prefs.get(LOAD_ALIGNMENT_DIRECTORY, System.getProperty("user.home"));
}
public static final void putLoadAlignmentDirectory(String dirName){
prefs.put(LOAD_ALIGNMENT_DIRECTORY, dirName);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static final boolean getToggleShortNameOnly() {
return prefs.getBoolean(TOGGLE_SHORT_NAME_ONLY, false);
}
public static void putToggleShortNameOnly(boolean shortNameOnly) {
prefs.putBoolean(TOGGLE_SHORT_NAME_ONLY, shortNameOnly);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String getExternalCommandFileDirectory() {
return prefs.get(EXTERNAL_COMMAND_FILE_DIRECTORY, System.getProperty("user.home"));
}
public static void putExternalCommandFileDirectory(String selectedFile) {
prefs.put(EXTERNAL_COMMAND_FILE_DIRECTORY, selectedFile);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static final String getSaveSelectionDirectory() {
return prefs.get(SAVE_SELECTION_DIRECTORY, System.getProperty("user.home"));
}
public static void putSaveSelectionDirectory(String dirName) {
prefs.put(SAVE_SELECTION_DIRECTORY, dirName);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String getAliViewUserDataSubdir() {
return ALIVIEW_USERDATA_SUBDIR;
}
public static String getLogfileName() {
return LOGFILE_NAME;
}
public static ColorScheme getColorSchemeNucleotide() {
String colorSchemeName = prefs.get(COLOR_SCHEME_NUCLEOTIDE, null);
return ColorSchemeFactory.getColorScheme(colorSchemeName);
}
public static ColorScheme getColorSchemeAminoAcid() {
String colorSchemeName = prefs.get(COLOR_SCHEME_AMINOACID, null);
return ColorSchemeFactory.getColorScheme(colorSchemeName);
}
public static void setColorSchemeNucleotide(ColorScheme colorScheme) {
prefs.put(COLOR_SCHEME_NUCLEOTIDE, colorScheme.getName());
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void setColorSchemeAminoAcid(ColorScheme colorScheme) {
prefs.put(COLOR_SCHEME_AMINOACID, colorScheme.getName());
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ArrayList<CommandItem> getCommandItems(String prefix){
ArrayList<CommandItem> commands = new ArrayList<CommandItem>();
for(int n = 0; n < 10; n++){
// always try 10
CommandItem nextCmd = getCommandItem(n,prefix);
if(nextCmd.getName() == null){
// skip commands.add(new CommandItem("", "", "", false,false));
}else{
commands.add(nextCmd);
}
}
return commands;
}
public static void putCommandItems(ArrayList<CommandItem> commands, String prefix){
for(int n = 0; n < commands.size(); n++){
putCommandItem(n, prefix, commands.get(n));
}
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fireCommandItemsChanged();
}
public static void clearCommandItems(String prefix){
for(int n = 0; n < 10; n++){
logger.info("clear" + prefix);
clearCommandItem(n, prefix);
}
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void clearCommandItem(int i, String prefix){
prefs.remove(prefix + CMD_NAME_ + i);
prefs.remove(prefix + CMD_PROGRAM_PATH_ + i);
prefs.remove(prefix + CMD_COMMAND_ + i);
prefs.remove(prefix + CMD_IS_ACTIVATED_ + i);
prefs.remove(prefix + CMD_SHOW_COMMAND_WIN_ + i);
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static CommandItem getCommandItem(int i, String prefix){
String name = prefs.get(prefix + CMD_NAME_ + i, null);
String programPath = prefs.get(prefix + CMD_PROGRAM_PATH_ + i, null);
String command = prefs.get(prefix + CMD_COMMAND_ + i, null);
boolean isActivated = prefs.getBoolean(prefix + CMD_IS_ACTIVATED_ + i, false);
boolean showCommandWindow = prefs.getBoolean(prefix + CMD_SHOW_COMMAND_WIN_ + i, false);
return new CommandItem(name, programPath, command, isActivated, showCommandWindow);
}
private static void putCommandItem(int i, String prefix, CommandItem cmd){
logger.info("put"+cmd);
prefs.put(prefix + CMD_NAME_ + i, cmd.getName());
prefs.put(prefix + CMD_PROGRAM_PATH_ + i, cmd.getProgramPath());
prefs.put(prefix + CMD_COMMAND_ + i, cmd.getCommand());
prefs.putBoolean(prefix + CMD_IS_ACTIVATED_ + i, cmd.isActivated());
prefs.putBoolean(prefix + CMD_SHOW_COMMAND_WIN_ + i, cmd.isShowCommandWindow());
}
public static SettingValue getPrimerMinTM() {
return minPrimerTM;
}
public static SettingValue getPrimerMaxTM() {
return maxPrimerTM;
}
/*
private static CommandItem getExternalCommand(int i){
return getCommandItem(i, "EXTERNAL_");
}
private static void putExternalCommand(int i, CommandItem cmd){
putCommandItem(i, "EXTERNAL_", cmd);
}
*/
public static void putExternalCommands(ArrayList<CommandItem> items){
putCommandItems(items, "EXTERNAL_");
}
public static ArrayList<CommandItem> getExternalCommands(){
ArrayList<CommandItem> items = getCommandItems("EXTERNAL_");
if(items.size() == 0){
// DEFAULT
for(CommandItem item: getDefaultCommandItems()){
items.add(item);
}
}
return items;
}
/*
private static CommandItem getAlignADDCommand(int i){
return getCommandItem(i, "ALIGN_ADD_");
}
private static void putAlignADDCommand(int i, CommandItem cmd){
putCommandItem(i, "ALIGN_ADD_", cmd);
}
*/
private static CommandItem[] getDefaultCommandItems() {
// raxmlHPC -f a -x 1465421654 -# 1 -m PROTGAMMAGTR -n RAXML_ALIGN -s /tmp/aliview-tmp-current-alignment3189140589076301400phy
if(OSNativeUtils.isMac()){
CommandItem MAC_DEFAULT_1 = new CommandItem("FastTree + FigTree", "", "/usr/local/bin/FastTree -nt -gtr -out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA" + LF + "open -a \"FigTree v1.4.2.app\" TEMP_OUT_FILE", false, true);
CommandItem MAC_DEFAULT_2 = new CommandItem("Textedit", "", "open -a TextEdit CURRENT_ALIGNMENT_FASTA", false,false);
CommandItem MAC_DEFAULT_3 = new CommandItem("", "", "", false,false);
CommandItem MAC_DEFAULT_4 = new CommandItem("", "", "", false,false);
CommandItem MAC_DEFAULT_5 = new CommandItem("", "", "", false,false);
CommandItem[] MAC_COMMAND_ITEM_DEFAULTS = new CommandItem[]{MAC_DEFAULT_1, MAC_DEFAULT_2, MAC_DEFAULT_3, MAC_DEFAULT_4, MAC_DEFAULT_5};
return MAC_COMMAND_ITEM_DEFAULTS;
}else if(OSNativeUtils.isWindows()){
CommandItem WIN_DEFAULT_1 = new CommandItem("FastTree + FigTree", "", "\"C:\\Program Files\\FastTree\\FastTree.exe\" -nt -gtr -out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA" + LF + "\"C:\\Program Files\\FigTree\\FigTree v1.4.2.exe\" TEMP_OUT_FILE", true, true);
CommandItem WIN_DEFAULT_2 = new CommandItem("notepad++(Texteditor)", "", "\"C:\\Program Files (x86)\\Notepad++\\Notepad++.exe\" CURRENT_ALIGNMENT_FASTA", false,false);
CommandItem WIN_DEFAULT_3 = new CommandItem("", "", "", false,false);
CommandItem WIN_DEFAULT_4 = new CommandItem("", "", "", false,false);
CommandItem WIN_DEFAULT_5 = new CommandItem("", "", "", false,false);
CommandItem[] WIN_COMMAND_ITEM_DEFAULTS = new CommandItem[]{WIN_DEFAULT_1, WIN_DEFAULT_2, WIN_DEFAULT_3, WIN_DEFAULT_4, WIN_DEFAULT_5};
return WIN_COMMAND_ITEM_DEFAULTS;
}else{
CommandItem DEFAULT_1 = new CommandItem("FastTree + FigTree", "", "FastTree -nt -gtr -out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA" + LF + "figtree TEMP_OUT_FILE", false, true);
CommandItem DEFAULT_2 = new CommandItem("Geany(Texteditor)", "", "geany CURRENT_ALIGNMENT_FASTA", false,false);
CommandItem DEFAULT_3 = new CommandItem("", "", "", false,false);
CommandItem DEFAULT_4 = new CommandItem("", "", "", false,false);
CommandItem DEFAULT_5 = new CommandItem("", "", "", false,false);
CommandItem[] COMMAND_ITEM_DEFAULTS = new CommandItem[]{DEFAULT_1, DEFAULT_2, DEFAULT_3, DEFAULT_4, DEFAULT_5};
return COMMAND_ITEM_DEFAULTS;
}
}
private static CommandItem[] getAlignerAddDefaultItems() {
if(OSNativeUtils.isMac()){
CommandItem MAC_DEFAULT_ADD_ALIGNER_ITEM_1 = new CommandItem("Muscle-profile", MuscleWrapper.getMusclePath().getAbsolutePath(), "-profile -in1 CURRENT_ALIGNMENT_FASTA -in2 SECOND_SEQUENCES -out TEMP_OUT_FILE", true,true);
CommandItem MAC_DEFAULT_ADD_ALIGNER_ITEM_2 = new CommandItem("Mafft --add", "/usr/bin/mafft", "--add SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem MAC_DEFAULT_ADD_ALIGNER_ITEM_3 = new CommandItem("Mafft --addfragments", "/usr/local/bin/mafft", "--addfragments SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem MAC_DEFAULT_ADD_ALIGNER_ITEM_4 = new CommandItem("Mafft --addfull", "/usr/local/bin/mafft", "--addfull SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem MAC_DEFAULT_ADD_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,false);
CommandItem[] MAC_ALIGNER_ADD_ITEM_DEFAULTS = new CommandItem[]{MAC_DEFAULT_ADD_ALIGNER_ITEM_1, MAC_DEFAULT_ADD_ALIGNER_ITEM_2, MAC_DEFAULT_ADD_ALIGNER_ITEM_3, MAC_DEFAULT_ADD_ALIGNER_ITEM_4, MAC_DEFAULT_ADD_ALIGNER_ITEM_5};
return MAC_ALIGNER_ADD_ITEM_DEFAULTS;
}else if(OSNativeUtils.isWindows()){
CommandItem WIN_DEFAULT_ADD_ALIGNER_ITEM_1 = new CommandItem("Muscle-profile", MuscleWrapper.getMusclePath().getAbsolutePath(), "-profile -in1 CURRENT_ALIGNMENT_FASTA -in2 SECOND_SEQUENCES -out TEMP_OUT_FILE", true,true);
CommandItem WIN_DEFAULT_ADD_ALIGNER_ITEM_2 = new CommandItem("Mafft --add", "cmd.exe", "/C \"C:\\Program Files\\mafft-win\\mafft.bat\" --add SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem WIN_DEFAULT_ADD_ALIGNER_ITEM_3 = new CommandItem("Mafft --addfragments", "cmd.exe", "/C \"C:\\Program Files\\mafft-win\\mafft.bat\" --addfragments SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem WIN_DEFAULT_ADD_ALIGNER_ITEM_4 = new CommandItem("Mafft --addfull","cmd.exe", "/C \"C:\\Program Files\\mafft-win\\mafft.bat\" --addfull SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem WIN_DEFAULT_ADD_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,false);
CommandItem[] WIN_ALIGNER_ADD_ITEM_DEFAULTS = new CommandItem[]{WIN_DEFAULT_ADD_ALIGNER_ITEM_1, WIN_DEFAULT_ADD_ALIGNER_ITEM_2, WIN_DEFAULT_ADD_ALIGNER_ITEM_3, WIN_DEFAULT_ADD_ALIGNER_ITEM_4, WIN_DEFAULT_ADD_ALIGNER_ITEM_5};
return WIN_ALIGNER_ADD_ITEM_DEFAULTS;
}else{
CommandItem DEFAULT_ADD_ALIGNER_ITEM_1 = new CommandItem("Muscle-profile", MuscleWrapper.getMusclePath().getAbsolutePath(), "-profile -in1 CURRENT_ALIGNMENT_FASTA -in2 SECOND_SEQUENCES -out TEMP_OUT_FILE", true,true);
CommandItem DEFAULT_ADD_ALIGNER_ITEM_2 = new CommandItem("Mafft --add", "mafft", "--add SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem DEFAULT_ADD_ALIGNER_ITEM_3 = new CommandItem("Mafft --addfragments", "mafft", "--addfragments SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem DEFAULT_ADD_ALIGNER_ITEM_4 = new CommandItem("Mafft --addfull", "mafft", "--addfull SECOND_SEQUENCES --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem DEFAULT_ADD_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,false);
CommandItem[] ALIGNER_ADD_ITEM_DEFAULTS = new CommandItem[]{DEFAULT_ADD_ALIGNER_ITEM_1, DEFAULT_ADD_ALIGNER_ITEM_2, DEFAULT_ADD_ALIGNER_ITEM_3, DEFAULT_ADD_ALIGNER_ITEM_4, DEFAULT_ADD_ALIGNER_ITEM_5};
return ALIGNER_ADD_ITEM_DEFAULTS;
}
}
private static CommandItem[] getAlignerALLDefaultItems() {
if(OSNativeUtils.isMac()){
CommandItem MAC_DEFAULT_ALL_ALIGNER_ITEM_1 = new CommandItem("Muscle", MuscleWrapper.getMusclePath().getAbsolutePath(), "-in CURRENT_ALIGNMENT_FASTA -out TEMP_OUT_FILE", true, true);
CommandItem MAC_DEFAULT_ALL_ALIGNER_ITEM_2 = new CommandItem("Mafft-localpair", "/usr/local/bin/mafft", "--localpair --reorder --maxiterate 1000 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem MAC_DEFAULT_ALL_ALIGNER_ITEM_3 = new CommandItem("Mafft-globalpair", "/usr/local/bin/mafft", "--globalpair --thread 2 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem MAC_DEFAULT_ALL_ALIGNER_ITEM_4 = new CommandItem("", "", "", false,true);
CommandItem MAC_DEFAULT_ALL_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,true);
CommandItem[] MAC_ALIGNER_ALL_ITEM_DEFAULTS = new CommandItem[]{MAC_DEFAULT_ALL_ALIGNER_ITEM_1, MAC_DEFAULT_ALL_ALIGNER_ITEM_2, MAC_DEFAULT_ALL_ALIGNER_ITEM_3, MAC_DEFAULT_ALL_ALIGNER_ITEM_4, MAC_DEFAULT_ALL_ALIGNER_ITEM_5};
return MAC_ALIGNER_ALL_ITEM_DEFAULTS;
}else if(OSNativeUtils.isWindows()){
CommandItem WIN_DEFAULT_ALL_ALIGNER_ITEM_1 = new CommandItem("Muscle", MuscleWrapper.getMusclePath().getAbsolutePath(), "-in CURRENT_ALIGNMENT_FASTA -out TEMP_OUT_FILE", true, true);
CommandItem WIN_DEFAULT_ALL_ALIGNER_ITEM_2 = new CommandItem("Mafft", "cmd.exe", "/C \"C:\\Program Files\\mafft-win\\mafft.bat\" --localpair --reorder --maxiterate 1000 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem WIN_DEFAULT_ALL_ALIGNER_ITEM_3 = new CommandItem("Mafft--globalpair", "cmd.exe", "/C \"C:\\Program Files\\mafft-win\\mafft.bat\" --globalpair --thread 2 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem WIN_DEFAULT_ALL_ALIGNER_ITEM_4 = new CommandItem("", "", "", false,true);
CommandItem WIN_DEFAULT_ALL_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,true);
CommandItem[] WIN_ALIGNER_ALL_ITEM_DEFAULTS = new CommandItem[]{WIN_DEFAULT_ALL_ALIGNER_ITEM_1, WIN_DEFAULT_ALL_ALIGNER_ITEM_2, WIN_DEFAULT_ALL_ALIGNER_ITEM_3, WIN_DEFAULT_ALL_ALIGNER_ITEM_4, WIN_DEFAULT_ALL_ALIGNER_ITEM_5};
return WIN_ALIGNER_ALL_ITEM_DEFAULTS;
}else{
CommandItem DEFAULT_ALL_ALIGNER_ITEM_1 = new CommandItem("Muscle", MuscleWrapper.getMusclePath().getAbsolutePath(), "-in CURRENT_ALIGNMENT_FASTA -out TEMP_OUT_FILE", true, true);
CommandItem DEFAULT_ALL_ALIGNER_ITEM_2 = new CommandItem("Mafft", "mafft", "--localpair --reorder --maxiterate 1000 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem DEFAULT_ALL_ALIGNER_ITEM_3 = new CommandItem("Mafft", "mafft", "--globalpair --thread 2 --out TEMP_OUT_FILE CURRENT_ALIGNMENT_FASTA", false,true);
CommandItem DEFAULT_ALL_ALIGNER_ITEM_4 = new CommandItem("", "", "", false,true);
CommandItem DEFAULT_ALL_ALIGNER_ITEM_5 = new CommandItem("", "", "", false,true);
CommandItem[] ALIGNER_ALL_ITEM_DEFAULTS = new CommandItem[]{DEFAULT_ALL_ALIGNER_ITEM_1, DEFAULT_ALL_ALIGNER_ITEM_2, DEFAULT_ALL_ALIGNER_ITEM_3, DEFAULT_ALL_ALIGNER_ITEM_4, DEFAULT_ALL_ALIGNER_ITEM_5};
return ALIGNER_ALL_ITEM_DEFAULTS;
}
}
public static ArrayList<CommandItem> getAlignADDCommands(){
ArrayList<CommandItem> items = getCommandItems("ALIGN_ADD_");
if(items.size() == 0){
// DEFAULT
for(CommandItem item: getAlignerAddDefaultItems()){
logger.info(item.getName());
items.add(item);
}
}
return items;
}
public static void putAlignADDCommands(ArrayList<CommandItem> items){
putCommandItems(items, "ALIGN_ADD_");
fireAlignADDCmdsChanged();
}
public static void clearAlignADDCommands() {
clearCommandItems("ALIGN_ADD_");
fireAlignADDCmdsChanged();
}
public static void clearAlignALLCommands() {
clearCommandItems("ALIGN_ALL_");
fireAlignAllCmdsChanged();
}
public static void putAlignALLCommands(ArrayList<CommandItem> items){
putCommandItems(items, "ALIGN_ALL_");
fireAlignAllCmdsChanged();
}
public static ArrayList<CommandItem> getAlignALLCommands(){
ArrayList<CommandItem> items = getCommandItems("ALIGN_ALL_");
if(items.size() == 0){
logger.info("items.size() " + items.size() );
// DEFAULT
for(CommandItem item: getAlignerALLDefaultItems()){
logger.info(item);
items.add(item);
}
}
return items;
}
/*
private static CommandItem getAlignALLCommand(int i){
return getCommandItem(i, "ALIGN_ALL_");
}
private static void putAlignALLCommand(int i, CommandItem cmd){
putCommandItem(i, "ALIGN_ALL_", cmd);
}
*/
public static SettingValue getReverseHorizontalMouseWheel() {
return reverseHorizontalMouseWheel;
}
public static SettingValue getReverseVerticalMouseWheel() {
return reverseVerticalMouseWheel;
}
public static SettingValue getHorizontalScrollModifier() {
return horizontalMouseWheelScrollModifier;
}
public static SettingValue getVerticalScrollModifier() {
return verticalMouseWheelScrollModifier;
}
public static SettingValue getHideFileSeqLimitedEditCapabilities() {
return hideFileSeqLimitedEditCapabilities;
}
public static SettingValue getHideEditModeMessage() {
return hideEditModeMessage;
}
public static SettingValue getHideMuscleProfileAlignInfoMessage() {
return hideMuscleProfileAlignInfoMessage;
}
public static SettingValue getHideRealignEverythingMessage() {
return hideRealignEverythingMessage;
}
public static SettingValue getHideAlignmentProgressWindowWhenDone() {
return hideAlignmentProgressWindowWhenDone;
}
public static SettingValue getHideAlignmentProgramInvalidCharsInfoMessage() {
return hideAlignmentProgramInvalidCharsInfoMessage;
}
public static SettingValue getHideDuplicateSeqNamesMessage() {
return hideDuplicateSeqNamesMessage;
}
public static SettingValue getHideAskBeforeEditMode() {
return hideAskBeforeEditMode;
}
public static void clearAllHideThisDialogCheckboxes() {
getHideFileSeqLimitedEditCapabilities().putBooleanValue(false);
getHideEditModeMessage().putBooleanValue(false);
getHideMuscleProfileAlignInfoMessage().putBooleanValue(false);
getHideRealignEverythingMessage().putBooleanValue(false);
getHideAlignmentProgressWindowWhenDone().putBooleanValue(false);
getHideDuplicateSeqNamesMessage().putBooleanValue(false);
getHideAskBeforeEditMode().putBooleanValue(false);
}
public static void addRecentFile(File alignmentFile){
Vector<File> files = getRecentFiles();
// skip if file is same as last
if(files.size() > 0 && files.get(0).getAbsolutePath().equals(alignmentFile.getAbsolutePath()) == true){
// skip
}else{
// remove older previous files with same name
Vector<File> toRemove = new Vector<File>();
for(File aRecentFile: files){
if(alignmentFile.equals(aRecentFile)){
toRemove.add(aRecentFile);
}
}
files.removeAll(toRemove);
files.insertElementAt(alignmentFile, 0);
putRecentFiles(files);
}
}
private static void putRecentFiles(Vector<File> files){
// save the last 20 files
logger.info(files.size());
// first remove old ones
for(int n = 0; n < 20; n++){
logger.info("n" + n);
prefs.remove(RECENT_FILE + n);
}
// then add new ones
for(int n = 0; n < files.size() && n < 20; n++){
logger.info("n" + n);
prefs.put(RECENT_FILE + n, files.get(n).getAbsolutePath());
}
// and flush changes
try {
prefs.flush();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fireRecentFilesChanged();
}
public static Vector<File> getRecentFiles(){
Vector<File> recent = new Vector<File>();
for(int n = 0; n < 20; n++){
String nextFile = prefs.get(RECENT_FILE + n, null);
if(nextFile != null && nextFile.length() > 0){
recent.add(new File(nextFile));
}
}
return recent;
}
public static File getLastRecentFile() {
Vector<File> recentFiles = getRecentFiles();
if(recentFiles == null || recentFiles.size() == 0){
return null;
}
return recentFiles.get(0);
}
public static SettingValue getLargeFileIndexing() {
return largeFileIndexing;
}
public static void addSettingsListener(SettingsListener listener){
if(listener != null || !settingListeners.contains(listener)){
settingListeners.add(listener);
}
}
private static void fireRecentFilesChanged() {
//logger.info("fire fireRecentFilesChanged, settingListeners.size()" + settingListeners.size());
for(SettingsListener listener: settingListeners){
listener.recentFilesChanged();
}
}
private static void fireAlignAllCmdsChanged() {
for(SettingsListener listener: settingListeners){
listener.alignAllCmdsChanged();
}
}
private static void fireAlignADDCmdsChanged() {
for(SettingsListener listener: settingListeners){
listener.alignAddCmdsChanged();
}
}
private static void fireCommandItemsChanged() {
for(SettingsListener listener: settingListeners){
listener.externalCmdsChanged();
}
}
public static SettingValue getUseCustomFontSize() {
return useCustomFontSize;
}
public static SettingValue getCustomFontSize() {
return customFontSize;
}
public static SettingValue getShowCharsetRuler() {
return showCharsetRuler;
}
public static SettingValue getMaxFileHistogramSequences() {
return maxFileHistogramSequences;
}
public static String getAliViewHelpWebPage() {
return ALIVIEW_HELP_URL;
}
public static SettingValue getFontCase() {
return fontCase;
}
}