/* Copyright (C) 2003 EBI, GRL This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.d You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.ensembl.mart.editor; import java.util.Iterator; import java.util.List; import javax.swing.tree.DefaultMutableTreeNode; import org.ensembl.mart.lib.config.AttributeCollection; import org.ensembl.mart.lib.config.AttributeDescription; import org.ensembl.mart.lib.config.AttributeGroup; import org.ensembl.mart.lib.config.AttributeList; import org.ensembl.mart.lib.config.AttributePage; import org.ensembl.mart.lib.config.BaseNamedConfigurationObject; import org.ensembl.mart.lib.config.DatasetConfig; import org.ensembl.mart.lib.config.DynamicDataset; import org.ensembl.mart.lib.config.Exportable; import org.ensembl.mart.lib.config.FilterCollection; import org.ensembl.mart.lib.config.FilterDescription; import org.ensembl.mart.lib.config.FilterGroup; import org.ensembl.mart.lib.config.FilterPage; import org.ensembl.mart.lib.config.Importable; import org.ensembl.mart.lib.config.Option; import org.ensembl.mart.lib.config.PushAction; import org.ensembl.mart.lib.config.SpecificAttributeContent; import org.ensembl.mart.lib.config.SpecificFilterContent; import org.ensembl.mart.lib.config.SpecificOptionContent; //import org.ensembl.mart.lib.config.SeqModule; /** * Class DatasetConfigTreeNode extends DefaultMutableTreeNode. * * <p>This class is written so that the tree node is aware of the datasetconfig etc objects * </p> * * @author <a href="mailto:katerina@ebi.ac.uk">Katerina Tzouvara</a> * //@see org.ensembl.mart.config.DatasetConfig */ public class DatasetConfigTreeNode extends DefaultMutableTreeNode { /** * Each Node stores all child objects in a single Vector, but some DatasetConfigTree * userObjects store heterogenous groups of children in different lists in a particular * order. This method calculates the index adjustment to apply to any node Vector index * to get the DatasetConfigTree userObject index, which could be 0 for any DatasetConfigTree * object that only stores one type of child object. In general, for a DatasetConfigTree * userObject which stores separate lists of objects a, b, and c in order, the relationship * between the node Vector index (V) and the individual object index within the * parent DatasetConfigTree userObject is: * (a) V[i] = a[i] * (b) V[i] = b[i - (a.length)] * (c) V[i] = c[i - (a.length + b.length)] * @param parent - DatasetConfigTree userObject into which dropnode is to be dropped * @param child - DatasetConfigTree userObject object for which an index inside parent is needed * @return adjustment for any index of child inside parent. */ protected static int getHeterogenousOffset(Object parent, Object child) { int hetOffset = -1; if (child instanceof org.ensembl.mart.lib.config.Importable) { DatasetConfig dsc = (DatasetConfig) parent; hetOffset = ((dsc.getTemplateFlag()==null && dsc.getTemplateFlag().equals("1"))?1:0); } else if (child instanceof org.ensembl.mart.lib.config.Exportable) { //Exportables go after Importables within a DatasetConfig DatasetConfig dsc = (DatasetConfig) parent; hetOffset = ((dsc.getTemplateFlag()==null && dsc.getTemplateFlag().equals("1"))?1:0) + dsc.getImportables().length; } else if (child instanceof org.ensembl.mart.lib.config.FilterPage) { //FilterPages go after Importables and Exportables within a DatasetConfig DatasetConfig dsc = (DatasetConfig) parent; hetOffset = ((dsc.getTemplateFlag()==null && dsc.getTemplateFlag().equals("1"))?1:0) + dsc.getImportables().length + dsc.getExportables().length; } else if (child instanceof org.ensembl.mart.lib.config.AttributePage) { //AttributePages go after Importables, Exportables, and FilterPages within a DatasetConfig DatasetConfig dsc = (DatasetConfig) parent; hetOffset = ((dsc.getTemplateFlag()==null && dsc.getTemplateFlag().equals("1"))?1:0) + dsc.getImportables().length + dsc.getExportables().length + dsc.getFilterPages().length; //} //else if (child instanceof org.ensembl.mart.lib.config.Disable) { //Disables go after Enables within a FilterDescription //FilterDescription fdesc = (FilterDescription) parent; //hetOffset = fdesc.getEnables().length; } //else if (child instanceof org.ensembl.mart.lib.config.Option) { //if (parent instanceof org.ensembl.mart.lib.config.FilterDescription) { //Options go after Enables and Disables within a FilterDescription //FilterDescription fdesc = (FilterDescription) parent; //} else { //Options go first within an Option //hetOffset = 0; //} //} else if (child instanceof org.ensembl.mart.lib.config.PushAction) { //PushActions go after Options within an Option Option op = (Option) parent; hetOffset = op.getOptions().length; } else { //for all others insert at top of list hetOffset = 0; } return hetOffset; } protected String name; public DatasetConfigTreeNode(String name) { this.name = name; } public DatasetConfigTreeNode(String name, Object obj) { this.name = name; this.setUserObject(obj); } public void setName(String newName) { name = newName; } public String toString() { return name; } public void setUserObject(Object obj) { //System.out.println("ADDING TEST " + obj); super.setUserObject(obj); //System.out.println("--- SET USER OBJECT CALLED FOR "+obj.getClass().getName()); String nodeObjectClass = obj.getClass().getName(); if (nodeObjectClass.equals("org.ensembl.mart.lib.config.DatasetConfig")) { setName("DatasetConfig: " + ((BaseNamedConfigurationObject) obj).getInternalName()); DatasetConfig dsv = (DatasetConfig) obj; // Is it a template? if (dsv.getTemplateFlag()!=null && dsv.getTemplateFlag().equals("1")) { // Find out what DSs it uses. DatasetConfigTreeNode fpNode = new DatasetConfigTreeNode("PartitionTable: Datasets"); fpNode.setUserObject(new BaseNamedConfigurationObject() { public boolean isBroken() { return false; } }); List datasetAtts = dsv.getDynamicDatasets(); for (int a = 0; a < datasetAtts.size(); a++){ DynamicDataset ds = (DynamicDataset)datasetAtts.get(a); DatasetConfigTreeNode fp = new DatasetConfigTreeNode("Partition: "+ds.getInternalName()); fp.setUserObject(ds); fpNode.add(fp); } this.add(fpNode); } Importable[] imps = dsv.getImportables(); for (int i = 0; i < imps.length; i++) { Importable importable = imps[i]; String impName = importable.getLinkName(); DatasetConfigTreeNode impNode = new DatasetConfigTreeNode("Importable:" + impName); impNode.setUserObject(importable); this.add(impNode); } Exportable[] exps = dsv.getExportables(); for (int i = 0; i < exps.length; i++) { Exportable exportable = exps[i]; String expName = exportable.getLinkName(); DatasetConfigTreeNode expNode = new DatasetConfigTreeNode("Exportable:" + expName); expNode.setUserObject(exportable); this.add(expNode); } FilterPage[] fpages = dsv.getFilterPages(); for (int i = 0; i < fpages.length; i++) { if (fpages[i].getClass().getName().equals("org.ensembl.mart.lib.config.FilterPage")) { FilterPage fp = fpages[i]; String fpName = fp.getInternalName(); DatasetConfigTreeNode fpNode = new DatasetConfigTreeNode("FilterPage:" + fpName); fpNode.setUserObject(fp); this.add(fpNode); List groups = fp.getFilterGroups(); for (int j = 0; j < groups.size(); j++) { if (groups.get(j).getClass().getName().equals("org.ensembl.mart.lib.config.FilterGroup")) { FilterGroup fiGroup = (FilterGroup) groups.get(j); String grName = fiGroup.getInternalName(); DatasetConfigTreeNode grNode = new DatasetConfigTreeNode("FilterGroup:" + grName); grNode.setUserObject(fiGroup); FilterCollection[] collections = fiGroup.getFilterCollections(); for (int z = 0; z < collections.length; z++) { FilterCollection fiCollection = collections[z]; String colName = fiCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("FilterCollection:" + colName); colNode.setUserObject(fiCollection); List descriptions = fiCollection.getFilterDescriptions(); for (int y = 0; y < descriptions.size(); y++) { FilterDescription fiDescription = (FilterDescription) descriptions.get(y); String desName = fiDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Filter:" + desName); desNode.setUserObject(fiDescription); for (Iterator r = fiDescription.getSpecificFilterContents().iterator(); r.hasNext(); ) { SpecificFilterContent filtAtt = (SpecificFilterContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificFilterContent:" + dynName); dynNode.setUserObject(filtAtt); Option[] options = filtAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } Option[] options = fiDescription.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } } } } } } AttributePage[] apages = dsv.getAttributePages(); for (int i = 0; i < apages.length; i++) { if (apages[i].getClass().getName().equals("org.ensembl.mart.lib.config.AttributePage")) { AttributePage ap = apages[i]; String apName = ap.getInternalName(); DatasetConfigTreeNode apNode = new DatasetConfigTreeNode("AttributePage:" + apName); apNode.setUserObject(ap); this.add(apNode); List groups = ap.getAttributeGroups(); for (int j = 0; j < groups.size(); j++) { if (groups.get(j).getClass().getName().equals("org.ensembl.mart.lib.config.AttributeGroup")) { AttributeGroup atGroup = (AttributeGroup) groups.get(j); String grName = atGroup.getInternalName(); DatasetConfigTreeNode grNode = new DatasetConfigTreeNode("AttributeGroup:" + grName); grNode.setUserObject(atGroup); AttributeCollection[] collections = atGroup.getAttributeCollections(); for (int z = 0; z < collections.length; z++) { AttributeCollection atCollection = collections[z]; String colName = atCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("AttributeCollection:" + colName); colNode.setUserObject(atCollection); List descriptions = atCollection.getAttributeDescriptions(); for (int y = 0; y < descriptions.size(); y++) { AttributeDescription atDescription = (AttributeDescription) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Attribute:" + desName); desNode.setUserObject(atDescription); for (Iterator r = atDescription.getSpecificAttributeContents().iterator(); r.hasNext(); ) { SpecificAttributeContent filtAtt = (SpecificAttributeContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificAttributeContent:" + dynName); dynNode.setUserObject(filtAtt); } } descriptions = atCollection.getAttributeLists(); for (int y = 0; y < descriptions.size(); y++) { AttributeList atDescription = (AttributeList) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("AttributeList:" + desName); desNode.setUserObject(atDescription); } } } } } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.FilterPage")) { setName("FilterPage: " + ((BaseNamedConfigurationObject) obj).getInternalName()); FilterPage fp = (FilterPage) obj; List groups = fp.getFilterGroups(); for (int j = 0; j < groups.size(); j++) { if (groups.get(j).getClass().getName().equals("org.ensembl.mart.lib.config.FilterGroup")) { FilterGroup fiGroup = (FilterGroup) groups.get(j); String grName = fiGroup.getInternalName(); DatasetConfigTreeNode grNode = new DatasetConfigTreeNode("FilterGroup:" + grName); grNode.setUserObject(fiGroup); this.add(grNode); FilterCollection[] collections = fiGroup.getFilterCollections(); for (int z = 0; z < collections.length; z++) { FilterCollection fiCollection = collections[z]; String colName = fiCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("FilterCollection:" + colName); colNode.setUserObject(fiCollection); List descriptions = fiCollection.getFilterDescriptions(); for (int y = 0; y < descriptions.size(); y++) { FilterDescription fiDescription = (FilterDescription) descriptions.get(y); String desName = fiDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Filter:" + desName); desNode.setUserObject(fiDescription); for (Iterator r = fiDescription.getSpecificFilterContents().iterator(); r.hasNext(); ) { SpecificFilterContent filtAtt = (SpecificFilterContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificFilterContent:" + dynName); dynNode.setUserObject(filtAtt); Option[] options = filtAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } Option[] options = fiDescription.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } } } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.AttributePage")) { setName("AttributePage: " + ((BaseNamedConfigurationObject) obj).getInternalName()); AttributePage atPage = (AttributePage) obj; List groups = atPage.getAttributeGroups(); for (int j = 0; j < groups.size(); j++) { if (groups.get(j).getClass().getName().equals("org.ensembl.mart.lib.config.AttributeGroup")) { AttributeGroup atGroup = (AttributeGroup) groups.get(j); String grName = atGroup.getInternalName(); DatasetConfigTreeNode grNode = new DatasetConfigTreeNode("AttributeGroup:" + grName); grNode.setUserObject(atGroup); this.add(grNode); AttributeCollection[] collections = atGroup.getAttributeCollections(); for (int z = 0; z < collections.length; z++) { AttributeCollection atCollection = collections[z]; String colName = atCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("AttributeCollection:" + colName); colNode.setUserObject(atCollection); List descriptions = atCollection.getAttributeDescriptions(); for (int y = 0; y < descriptions.size(); y++) { AttributeDescription atDescription = (AttributeDescription) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Attribute:" + desName); desNode.setUserObject(atDescription); for (Iterator r = atDescription.getSpecificAttributeContents().iterator(); r.hasNext(); ) { SpecificAttributeContent filtAtt = (SpecificAttributeContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificAttributeContent:" + dynName); dynNode.setUserObject(filtAtt); } } descriptions = atCollection.getAttributeLists(); for (int y = 0; y < descriptions.size(); y++) { AttributeList atDescription = (AttributeList) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("AttributeList:" + desName); desNode.setUserObject(atDescription); } } } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.FilterGroup")) { setName("FilterGroup: " + ((BaseNamedConfigurationObject) obj).getInternalName()); FilterGroup fiGroup = (FilterGroup) obj; FilterCollection[] collections = fiGroup.getFilterCollections(); for (int z = 0; z < collections.length; z++) { FilterCollection fiCollection = collections[z]; String colName = fiCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("FilterCollection:" + colName); colNode.setUserObject(fiCollection); this.add(colNode); List descriptions = fiCollection.getFilterDescriptions(); for (int y = 0; y < descriptions.size(); y++) { FilterDescription fiDescription = (FilterDescription) descriptions.get(y); String desName = fiDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Filter:" + desName); desNode.setUserObject(fiDescription); for (Iterator r = fiDescription.getSpecificFilterContents().iterator(); r.hasNext(); ) { SpecificFilterContent filtAtt = (SpecificFilterContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificFilterContent:" + dynName); dynNode.setUserObject(filtAtt); Option[] options = filtAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } Option[] options = fiDescription.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.AttributeGroup")) { setName("AttributeGroup: " + ((BaseNamedConfigurationObject) obj).getInternalName()); AttributeGroup atGroup = (AttributeGroup) obj; AttributeCollection[] collections = atGroup.getAttributeCollections(); for (int z = 0; z < collections.length; z++) { AttributeCollection atCollection = collections[z]; String colName = atCollection.getInternalName(); DatasetConfigTreeNode colNode = new DatasetConfigTreeNode("AttributeCollection:" + colName); this.add(colNode); colNode.setUserObject(atCollection); List descriptions = atCollection.getAttributeDescriptions(); for (int y = 0; y < descriptions.size(); y++) { AttributeDescription atDescription = (AttributeDescription) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Attribute:" + desName); desNode.setUserObject(atDescription); //colNode.add(desNode); for (Iterator r = atDescription.getSpecificAttributeContents().iterator(); r.hasNext(); ) { SpecificAttributeContent filtAtt = (SpecificAttributeContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificAttributeContent:" + dynName); dynNode.setUserObject(filtAtt); } } descriptions = atCollection.getAttributeLists(); for (int y = 0; y < descriptions.size(); y++) { AttributeList atDescription = (AttributeList) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("AttributeList:" + desName); desNode.setUserObject(atDescription); //colNode.add(desNode); } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.DSAttributeGroup")) { setName("DSAttributeGroup: " + ((BaseNamedConfigurationObject) obj).getInternalName()); // DSAttributeGroup atGroup = (DSAttributeGroup) obj; } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.FilterCollection")) { setName("FilterCollection: " + ((BaseNamedConfigurationObject) obj).getInternalName()); FilterCollection fiCollection = (FilterCollection) obj; List descriptions = fiCollection.getFilterDescriptions(); for (int y = 0; y < descriptions.size(); y++) { FilterDescription fiDescription = (FilterDescription) descriptions.get(y); String desName = fiDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Filter:" + desName); desNode.setUserObject(fiDescription); this.add(desNode); for (Iterator r = fiDescription.getSpecificFilterContents().iterator(); r.hasNext(); ) { SpecificFilterContent filtAtt = (SpecificFilterContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificFilterContent:" + dynName); dynNode.setUserObject(filtAtt); Option[] options = filtAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } Option[] options = fiDescription.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.AttributeCollection")) { setName("AttributeCollection: " + ((BaseNamedConfigurationObject) obj).getInternalName()); AttributeCollection atCollection = (AttributeCollection) obj; List descriptions = atCollection.getAttributeDescriptions(); for (int y = 0; y < descriptions.size(); y++) { AttributeDescription atDescription = (AttributeDescription) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Attribute:" + desName); desNode.setUserObject(atDescription); this.add(desNode); for (Iterator r = atDescription.getSpecificAttributeContents().iterator(); r.hasNext(); ) { SpecificAttributeContent filtAtt = (SpecificAttributeContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificAttributeContent:" + dynName); dynNode.setUserObject(filtAtt); } } descriptions = atCollection.getAttributeLists(); for (int y = 0; y < descriptions.size(); y++) { AttributeList atDescription = (AttributeList) descriptions.get(y); String desName = atDescription.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("AttributeList:" + desName); desNode.setUserObject(atDescription); this.add(desNode); } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.FilterDescription")) { //System.out.println("FILT\t" + ((BaseNamedConfigurationObject) obj).getInternalName()); setName("Filter: " + ((BaseNamedConfigurationObject) obj).getInternalName()); //setName("FilterCollection: " + ((BaseNamedConfigurationObject) obj).getInternalName()); FilterDescription fiDescription = (FilterDescription) obj; for (Iterator r = fiDescription.getSpecificFilterContents().iterator(); r.hasNext(); ) { SpecificFilterContent filtAtt = (SpecificFilterContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificFilterContent:" + dynName); dynNode.setUserObject(filtAtt); this.add(dynNode); Option[] options = filtAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } Option[] ops = fiDescription.getOptions(); for (int y = 0; y < ops.length; y++) { Option option = (Option) ops[y]; String desName = option.getInternalName(); DatasetConfigTreeNode desNode = new DatasetConfigTreeNode("Option:" + desName); desNode.setUserObject(option); this.add(desNode); // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.AttributeDescription")) { //checkUniqueness((BaseNamedConfigurationObject)obj); setName("Attribute: " + ((BaseNamedConfigurationObject) obj).getInternalName()); AttributeDescription ad = (AttributeDescription) obj; //System.out.println("ATT\t" + ((BaseNamedConfigurationObject) obj).getInternalName()+":"+ad.getDynamicAttributeContents().size()); for (Iterator r = ad.getSpecificAttributeContents().iterator(); r.hasNext(); ) { SpecificAttributeContent filtAtt = (SpecificAttributeContent)r.next(); String dynName = filtAtt.getInternalName(); DatasetConfigTreeNode dynNode = new DatasetConfigTreeNode("SpecificAttributeContent:" + dynName); dynNode.setUserObject(filtAtt); this.add(dynNode); } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.AttributeList")) { //checkUniqueness((BaseNamedConfigurationObject)obj); setName("AttributeList: " + ((BaseNamedConfigurationObject) obj).getInternalName()); } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.SpecificAttributeContent")) { setName("SpecificAttributeContent: " + ((BaseNamedConfigurationObject) obj).getInternalName() ); SpecificAttributeContent dynAtt = (SpecificAttributeContent) obj; } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.SpecificOptionContent")) { setName("SpecificOptionContent: " + ((BaseNamedConfigurationObject) obj).getInternalName() ); SpecificOptionContent dynAtt = (SpecificOptionContent) obj; } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.SpecificFilterContent")) { setName("SpecificFilterContent: " + ((BaseNamedConfigurationObject) obj).getInternalName() ); SpecificFilterContent dynAtt = (SpecificFilterContent) obj; Option[] options = dynAtt.getOptions(); for (int k = 0; k < options.length; k++) { Option option = options[k]; String optionName = option.getInternalName(); DatasetConfigTreeNode optionNode = new DatasetConfigTreeNode("Option: " + optionName); optionNode.setUserObject(option); this.add(optionNode);// TRY THIS // specific option contents for (Iterator r2 = option.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); } // code for options within options ie for expression menus Option[] subOptions = option.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op = subOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op); } // new code to cycle through push actions PushAction[] pushActions = option.getPushActions(); for (int l = 0; l < pushActions.length; l++) { PushAction pa = pushActions[l]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option op = paOptions[m]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(op); } } //end of new code } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.Exportable")) { //System.out.println("EXP\t" + ((BaseNamedConfigurationObject) obj).getInternalName()); setName("Exportable: " + ((BaseNamedConfigurationObject) obj).getInternalName()); Exportable ad = (Exportable) obj; //System.out.println("ATT\t" + ((BaseNamedConfigurationObject) obj).getInternalName()+":"+ad.getDynamicAttributeContents().size()); } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.Importable")) { //System.out.println("IMP\t" + ((BaseNamedConfigurationObject) obj).getInternalName()); setName("Importable: " + ((BaseNamedConfigurationObject) obj).getInternalName()); Importable ad = (Importable) obj; //System.out.println("ATT\t" + ((BaseNamedConfigurationObject) obj).getInternalName()+":"+ad.getDynamicAttributeContents().size()); } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.Enable")) { //setName("Enable"); } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.Disable")) { setName("Disable"); } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.DynamicDataset")) { setName("Partition: " + ((DynamicDataset) obj).getInternalName()); } //else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.PushAction")) { // setName("Push Action"); //} else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.Option")) { //System.out.println("OP\t" + ((BaseNamedConfigurationObject) obj).getInternalName()); setName("Option: " + ((BaseNamedConfigurationObject) obj).getInternalName()); Option op = (Option) obj; // specific option contents for (Iterator r2 = op.getSpecificOptionContents().iterator(); r2.hasNext(); ) { SpecificOptionContent optAtt = (SpecificOptionContent)r2.next(); String dynName2 = optAtt.getInternalName(); DatasetConfigTreeNode dynNode2 = new DatasetConfigTreeNode("SpecificOptionContent:" + dynName2); dynNode2.setUserObject(optAtt); this.add(dynNode2); } // code for options within options ie for expression menus Option[] subOptions = op.getOptions(); for (int m = 0; m < subOptions.length; m++) { Option op2 = subOptions[m]; String paoptionName = op2.getInternalName(); DatasetConfigTreeNode subOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); subOptionNode.setUserObject(op2); this.add(subOptionNode); } PushAction[] pushActions = op.getPushActions(); for (int k = 0; k < pushActions.length; k++) { PushAction pa = pushActions[k]; DatasetConfigTreeNode pushActionNode = new DatasetConfigTreeNode("PushAction"); pushActionNode.setUserObject(pa); this.add(pushActionNode); Option[] paOptions = pa.getOptions(); for (int m = 0; m < paOptions.length; m++) { Option paop = paOptions[m]; String paoptionName = paop.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option: " + paoptionName); paOptionNode.setUserObject(paop); } } } else if (nodeObjectClass.equals("org.ensembl.mart.lib.config.PushAction")) { setName("Push Action: " + ((BaseNamedConfigurationObject) obj).getInternalName()); PushAction pa = (PushAction) obj; Option[] paOptions = pa.getOptions(); for (int k = 0; k < paOptions.length; k++) { Option op = paOptions[k]; String paoptionName = op.getInternalName(); DatasetConfigTreeNode paOptionNode = new DatasetConfigTreeNode("Option" + paoptionName); paOptionNode.setUserObject(op); this.add(paOptionNode); } } } }