From: <jrb...@us...> - 2009-10-27 22:03:11
|
Revision: 974 http://cishell.svn.sourceforge.net/cishell/?rev=974&view=rev Author: jrbibers Date: 2009-10-27 22:03:00 +0000 (Tue, 27 Oct 2009) Log Message: ----------- Added AlgorithmUtilities method for trying to parse filenames from the DataProperty.LABEL from a Data. It chains up through DataProperty.PARENT until one is found or we reach the topmost parent. Restructured the mutateParameters package and updated dependent plug-ins to reflect this. Added a new AttributeDefinitionTransformer for setting default values. Reviewed by Patrick. Modified Paths: -------------- trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF trunk/core/org.cishell.utilities/src/org/cishell/utilities/AlgorithmUtilities.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/MutateParameterUtilities.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java Added Paths: ----------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultDefaultValueTransformer.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultValueTransformer.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DefaultDropdownTransformer.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownMutator.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownTransformer.java Removed Paths: ------------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownMutator.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java Modified: trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF =================================================================== --- trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2009-10-27 22:03:00 UTC (rev 974) @@ -18,4 +18,6 @@ prefuse.util, prefuse.util.collections Export-Package: org.cishell.utilities, - org.cishell.utilities.mutateParameter + org.cishell.utilities.mutateParameter, + org.cishell.utilities.mutateParameter.defaultvalue, + org.cishell.utilities.mutateParameter.dropdown Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/AlgorithmUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/AlgorithmUtilities.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/AlgorithmUtilities.java 2009-10-27 22:03:00 UTC (rev 974) @@ -1,13 +1,16 @@ package org.cishell.utilities; +import java.io.File; +import java.util.Dictionary; + import org.cishell.framework.algorithm.AlgorithmFactory; import org.cishell.framework.data.BasicData; import org.cishell.framework.data.Data; +import org.cishell.framework.data.DataProperty; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; - public class AlgorithmUtilities { // TODO: ISILoadAndCleanAlgorithmFactory should use this? // It's copied directly from it (and cleaned up a little bit)... @@ -53,4 +56,64 @@ data[0].getData(), data[0].getFormat()) }; } + + /** + * Check data's label for something that looks like a file path. + * If found, try to extract a filename. + * If either bit fails, check same on the parent data, if present. + * The first filename-y text found this way is returned. + * If we fail all the way to the top parent (that is, data == null), return the empty string. + * + * @param data From whose label and parent labels to attempt filename extractions. + * @return A guess at the filename from data's label or its (transitively) parent labels. + * null when none can be found. + */ + /* TODO: A superior approach might be to define a new "standard" metadata + * property (i.e. DataProperty.ORIGINAL_DATASET or something). + * When searching for the source data (file)name, that new property would + * take precedent, and guessSourceDataFilename would be a default. + * To do this properly, the File Load algorithm would need to set this new + * property to the filename the user chose. On the same token, upon + * receiving a new data item, the Data Manager algorithm would set this new + * property to the data item's label if not set already. + */ + public static String guessSourceDataFilename(Data data) { + if (data == null) { + return ""; + } + + Dictionary metadata = data.getMetadata(); + String label = (String) metadata.get(DataProperty.LABEL); + Data parent = (Data) metadata.get(DataProperty.PARENT); + + if (label != null && label.indexOf(File.separator) != -1) { + /* If fileSeparator is a single backslash, + * escape it for the split() regular expression. + */ + String escapedFileSeparator = File.separator; + if ("\\".equals(escapedFileSeparator)) { + escapedFileSeparator = "\\\\"; + } + + String[] pathTokens = label.split(escapedFileSeparator); + + String guessedFilename = pathTokens[pathTokens.length - 1]; + + int lastExtensionSeparatorIndex = guessedFilename.lastIndexOf("."); + if (lastExtensionSeparatorIndex != -1) { + // Part before the extension ("foo" for "foo.bar"). + String guessedNameProper = + guessedFilename.substring(0, lastExtensionSeparatorIndex); + // ".bar" for "foo.bar". + String guessedExtension = guessedFilename.substring(lastExtensionSeparatorIndex); + String[] extensionTokens = guessedExtension.split("\\s+"); + + return guessedNameProper + extensionTokens[0]; + } else { + return guessSourceDataFilename(parent); + } + } else { + return guessSourceDataFilename(parent); + } + } } \ No newline at end of file Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/MutateParameterUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/MutateParameterUtilities.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/MutateParameterUtilities.java 2009-10-27 22:03:00 UTC (rev 974) @@ -6,15 +6,16 @@ import org.cishell.reference.service.metatype.BasicObjectClassDefinition; import org.cishell.utilities.mutateParameter.AttributeDefinitionTransformer; -import org.cishell.utilities.mutateParameter.NullDropdownTransformer; import org.cishell.utilities.mutateParameter.ObjectClassDefinitionTransformer; +import org.cishell.utilities.mutateParameter.defaultvalue.DefaultDefaultValueTransformer; +import org.cishell.utilities.mutateParameter.dropdown.DefaultDropdownTransformer; import org.osgi.service.metatype.AttributeDefinition; import org.osgi.service.metatype.ObjectClassDefinition; import prefuse.data.Table; public class MutateParameterUtilities { - /* TODO The mutateParameter subpackage is meant to eliminate all of the loops + /* TODO The mutateParameter subpackage is meant to replace most of the loops * that invoke the formFooAttributeDefinition methods. */ @@ -98,7 +99,7 @@ final String[] optionLabels, final String[] optionValues) { AttributeDefinitionTransformer transformer = - new NullDropdownTransformer() { + new DefaultDropdownTransformer() { public boolean shouldTransform(AttributeDefinition ad) { return true; } @@ -138,9 +139,9 @@ final String[] optionLabels, final String[] optionValues) { AttributeDefinitionTransformer dropdownTransformer = - new NullDropdownTransformer() { + new DefaultDropdownTransformer() { public boolean shouldTransform(AttributeDefinition ad) { - return parameterID.equals(ad.getID()); + return ad.getID().equals(parameterID); } public String[] transformOptionLabels( @@ -153,10 +154,27 @@ } }; - return ObjectClassDefinitionTransformer.apply(dropdownTransformer, - oldOCD); + return ObjectClassDefinitionTransformer.apply(dropdownTransformer, oldOCD); } + public static BasicObjectClassDefinition mutateDefaultValue( + ObjectClassDefinition oldOCD, + final String parameterID, + final String defaultValue) { + AttributeDefinitionTransformer transformer = + new DefaultDefaultValueTransformer() { + public boolean shouldTransform(AttributeDefinition ad) { + return ad.getID().equals(parameterID); + } + + public String transformDefaultValue(String[] oldDefaultValue) { + return defaultValue; + } + }; + + return ObjectClassDefinitionTransformer.apply(transformer, oldOCD); + } + public static BasicObjectClassDefinition createNewParameters( ObjectClassDefinition oldParameters) { try { Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -2,9 +2,8 @@ import org.osgi.service.metatype.AttributeDefinition; -/* There would be one implementation of this interface for each useful - * constructor of BasicAttributeDefinition, where the transform is defined as in - * DropdownTransformer. +/** + * This interface and its sub-interfaces correspond to constructors of BasicObjectClassDefinition. */ public interface AttributeDefinitionTransformer { public boolean shouldTransform(AttributeDefinition ad); Deleted: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownMutator.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownMutator.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownMutator.java 2009-10-27 22:03:00 UTC (rev 974) @@ -1,127 +0,0 @@ -package org.cishell.utilities.mutateParameter; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.cishell.utilities.ArrayUtilities; -import org.osgi.service.metatype.AttributeDefinition; -import org.osgi.service.metatype.ObjectClassDefinition; - -/* For aggregating and applying DropdownTransforms. - * Many convenience methods are given to support arrays vs. Lists - * and default vs. no default. - * The core functionality - * is in add(final String, final String[], final String[]) - * and mutate(ObjectClassDefinition) - */ -public class DropdownMutator { - private List transforms; - - public DropdownMutator() { - transforms = new ArrayList(); - } - - public ObjectClassDefinition mutate(ObjectClassDefinition ocd) { - return ObjectClassDefinitionTransformer.transform(ocd, transforms); - } - - public void add(String id, List options, String defaultOption) { - add(id, swapToFront(options, defaultOption)); - } - - public void add(String id, List options) { - add(id, options, options); - } - - public void add(String id, - List optionLabels, - String defaultOptionLabel, - List optionValues, - String defaultOptionValue) { - add(id, - swapToFront(optionLabels, defaultOptionLabel), - swapToFront(optionValues, defaultOptionValue)); - } - - public void add(String id, List optionLabels, List optionValues) { - add(id, - (String[]) optionLabels.toArray(new String[0]), - (String[]) optionValues.toArray(new String[0])); - } - - public void add(String id, String[] options, String defaultOption) { - add(id, swapToFront(options, defaultOption)); - } - - public void add(String id, String[] options) { - add(id, options, options); - } - - public void add(final String id, - final String[] optionLabels, - String defaultOptionLabel, - final String[] optionValues, - String defaultOptionValue) { - add(id, - swapToFront(optionLabels, defaultOptionLabel), - swapToFront(optionValues, defaultOptionValue)); - } - - public void add(final String id, - final String[] optionLabels, - final String[] optionValues) { - transforms.add( - new NullDropdownTransformer() { - public boolean shouldTransform(AttributeDefinition ad) { - return id.equals(ad.getID()); - } - - public String[] transformOptionLabels(String[] oldOptionLabels) { - return optionLabels; - } - - public String[] transformOptionValues(String[] oldOptionValues) { - return optionValues; - } - }); - } - - private static List swapToFront(List list, String target) { - if (list.contains(target)) { - int targetIndex = list.indexOf(target); - - List swappedList = new ArrayList(list.size()); - - for (Iterator listIt = list.iterator(); listIt.hasNext();) { - swappedList.add(listIt.next()); - } - - swappedList.set(0, list.get(targetIndex)); - swappedList.set(targetIndex, list.get(0)); - - return swappedList; - } else { - return list; - } - } - - private static String[] swapToFront(String[] array, String target) { - int targetIndex = ArrayUtilities.indexOf(array, target); - - if (targetIndex != -1) { - String[] swappedArray = new String[array.length]; - - for (int ii = 0; ii < array.length; ii++) { - swappedArray[ii] = array[ii]; - } - - swappedArray[0] = array[targetIndex]; - swappedArray[targetIndex] = array[0]; - - return swappedArray; - } else { - return array; - } - } -} Deleted: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -1,27 +0,0 @@ -package org.cishell.utilities.mutateParameter; - -import org.cishell.reference.service.metatype.BasicAttributeDefinition; -import org.osgi.service.metatype.AttributeDefinition; - -public abstract class DropdownTransformer - implements AttributeDefinitionTransformer { - public AttributeDefinition transform(AttributeDefinition oldAD) { - if (shouldTransform(oldAD)) { - return - new BasicAttributeDefinition( - transformID(oldAD.getID()), - transformName(oldAD.getName()), - transformDescription(oldAD.getDescription()), - transformType(oldAD.getType()), - transformOptionLabels(oldAD.getOptionLabels()), - transformOptionValues(oldAD.getOptionValues())); - } - else { - return oldAD; - } - } - - public abstract String[] transformOptionLabels(String[] oldOptionLabels); - public abstract String[] transformOptionValues(String[] oldOptionValues); -} - Deleted: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -1,38 +0,0 @@ -package org.cishell.utilities.mutateParameter; - -import org.osgi.service.metatype.AttributeDefinition; - -/* A dropdown-forming AttributeDefinition transformer which by default - * performs no transformation. - * This is a convenient access to DropdownTransformer where you may override - * methods to transform only the arguments that you wish to modify. - * The typical case would be extending shouldTransform (think of as a filter), - * transformOptionLabels, and transformOptionValues. - */ -public abstract class NullDropdownTransformer extends DropdownTransformer { - public abstract boolean shouldTransform(AttributeDefinition ad); - - public String transformID(String oldID) { - return oldID; - } - - public String transformName(String oldName) { - return oldName; - } - - public String transformDescription(String oldDescription) { - return oldDescription; - } - - public int transformType(int oldType) { - return oldType; - } - - public String[] transformOptionLabels(String[] oldOptionLabels) { - return oldOptionLabels; - } - - public String[] transformOptionValues(String[] oldOptionValues) { - return oldOptionValues; - } -} \ No newline at end of file Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java 2009-10-21 19:17:41 UTC (rev 973) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -16,7 +16,6 @@ * "Atomic" to exclude blanket filters like ObjectClassDefinition.ALL. * @see ObjectClassDefinition#REQUIRED * @see ObjectClassDefinition#OPTIONAL - * @see ObjectClassDefinition#ALL */ public static final List ATOMIC_ATTRIBUTE_DEFINITION_FILTERS; static { Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultDefaultValueTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultDefaultValueTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultDefaultValueTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -0,0 +1,41 @@ +package org.cishell.utilities.mutateParameter.defaultvalue; + +import org.osgi.service.metatype.AttributeDefinition; + +/** + * Default Default-Value Transformer (the first in the sense of this being the simplest + * implementation of DefaultValueTransformer. + * <p/> + * A (single-valued) default-value-setting AttributeDefinition transformer + * which by default performs no transformation. + * <p/> + * This is a convenient access to DefaultValueTransformer where you may override + * methods to transform only the arguments that you wish to modify. + * The typical case would be extending shouldTransform (think of as a filter) + * and transformDefaultValue. + * + * @see org.cishell.utilities.MutateParameterUtilities#mutateDefaultValue(ObjectClassDefinition, String, String) + */ +public abstract class DefaultDefaultValueTransformer extends DefaultValueTransformer { + public abstract boolean shouldTransform(AttributeDefinition ad); + + public String transformDescription(String oldDescription) { + return oldDescription; + } + + public String transformID(String oldID) { + return oldID; + } + + public String transformName(String oldName) { + return oldName; + } + + public int transformType(int oldType) { + return oldType; + } + + public String transformDefaultValue(String oldDefaultValue) { + return oldDefaultValue; + } +} Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultValueTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultValueTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/defaultvalue/DefaultValueTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -0,0 +1,26 @@ +package org.cishell.utilities.mutateParameter.defaultvalue; + +import org.cishell.reference.service.metatype.BasicAttributeDefinition; +import org.cishell.utilities.mutateParameter.AttributeDefinitionTransformer; +import org.osgi.service.metatype.AttributeDefinition; + +public abstract class DefaultValueTransformer implements AttributeDefinitionTransformer { + /** + * @see BasicAttributeDefinition#BasicAttributeDefinition(String, String, String, int, String) + */ + public AttributeDefinition transform(AttributeDefinition oldAD) { + if (shouldTransform(oldAD)) { + return + new BasicAttributeDefinition( + transformID(oldAD.getID()), + transformName(oldAD.getName()), + transformDescription(oldAD.getDescription()), + transformType(oldAD.getType()), + transformDefaultValue(oldAD.getDefaultValue())); + } else { + return oldAD; + } + } + + public abstract String transformDefaultValue(String[] oldDefaultValue); +} Copied: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DefaultDropdownTransformer.java (from rev 972, trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java) =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DefaultDropdownTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DefaultDropdownTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -0,0 +1,40 @@ +package org.cishell.utilities.mutateParameter.dropdown; + +import org.osgi.service.metatype.AttributeDefinition; + +/** + * A dropdown-forming AttributeDefinition transformer which by default performs no transformation. + * This is a convenient access to DropdownTransformer where you may override + * methods to transform only the arguments that you wish to modify. + * The typical case would be extending shouldTransform (think of as a filter), + * transformOptionLabels, and transformOptionValues. + * + * @see org.cishell.utilities.MutateParameterUtilities#mutateToDropdown(ObjectClassDefinition, String, String[], String[]) + */ +public abstract class DefaultDropdownTransformer extends DropdownTransformer { + public abstract boolean shouldTransform(AttributeDefinition ad); + + public String transformID(String oldID) { + return oldID; + } + + public String transformName(String oldName) { + return oldName; + } + + public String transformDescription(String oldDescription) { + return oldDescription; + } + + public int transformType(int oldType) { + return oldType; + } + + public String[] transformOptionLabels(String[] oldOptionLabels) { + return oldOptionLabels; + } + + public String[] transformOptionValues(String[] oldOptionValues) { + return oldOptionValues; + } +} \ No newline at end of file Copied: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownMutator.java (from rev 972, trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownMutator.java) =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownMutator.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownMutator.java 2009-10-27 22:03:00 UTC (rev 974) @@ -0,0 +1,128 @@ +package org.cishell.utilities.mutateParameter.dropdown; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.cishell.utilities.ArrayUtilities; +import org.cishell.utilities.mutateParameter.ObjectClassDefinitionTransformer; +import org.osgi.service.metatype.AttributeDefinition; +import org.osgi.service.metatype.ObjectClassDefinition; + +/* For aggregating and applying DropdownTransforms. + * Many convenience methods are given to support arrays vs. Lists + * and default vs. no default. + * The core functionality + * is in add(final String, final String[], final String[]) + * and mutate(ObjectClassDefinition) + */ +public class DropdownMutator { + private List transforms; + + public DropdownMutator() { + transforms = new ArrayList(); + } + + public ObjectClassDefinition mutate(ObjectClassDefinition ocd) { + return ObjectClassDefinitionTransformer.transform(ocd, transforms); + } + + public void add(String id, List options, String defaultOption) { + add(id, swapToFront(options, defaultOption)); + } + + public void add(String id, List options) { + add(id, options, options); + } + + public void add(String id, + List optionLabels, + String defaultOptionLabel, + List optionValues, + String defaultOptionValue) { + add(id, + swapToFront(optionLabels, defaultOptionLabel), + swapToFront(optionValues, defaultOptionValue)); + } + + public void add(String id, List optionLabels, List optionValues) { + add(id, + (String[]) optionLabels.toArray(new String[0]), + (String[]) optionValues.toArray(new String[0])); + } + + public void add(String id, String[] options, String defaultOption) { + add(id, swapToFront(options, defaultOption)); + } + + public void add(String id, String[] options) { + add(id, options, options); + } + + public void add(final String id, + final String[] optionLabels, + String defaultOptionLabel, + final String[] optionValues, + String defaultOptionValue) { + add(id, + swapToFront(optionLabels, defaultOptionLabel), + swapToFront(optionValues, defaultOptionValue)); + } + + public void add(final String id, + final String[] optionLabels, + final String[] optionValues) { + transforms.add( + new DefaultDropdownTransformer() { + public boolean shouldTransform(AttributeDefinition ad) { + return id.equals(ad.getID()); + } + + public String[] transformOptionLabels(String[] oldOptionLabels) { + return optionLabels; + } + + public String[] transformOptionValues(String[] oldOptionValues) { + return optionValues; + } + }); + } + + private static List swapToFront(List list, String target) { + if (list.contains(target)) { + int targetIndex = list.indexOf(target); + + List swappedList = new ArrayList(list.size()); + + for (Iterator listIt = list.iterator(); listIt.hasNext();) { + swappedList.add(listIt.next()); + } + + swappedList.set(0, list.get(targetIndex)); + swappedList.set(targetIndex, list.get(0)); + + return swappedList; + } else { + return list; + } + } + + private static String[] swapToFront(String[] array, String target) { + int targetIndex = ArrayUtilities.indexOf(array, target); + + if (targetIndex != -1) { + String[] swappedArray = new String[array.length]; + + for (int ii = 0; ii < array.length; ii++) { + swappedArray[ii] = array[ii]; + } + + swappedArray[0] = array[targetIndex]; + swappedArray[targetIndex] = array[0]; + + return swappedArray; + } else { + return array; + } + } +} Copied: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownTransformer.java (from rev 972, trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java) =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/dropdown/DropdownTransformer.java 2009-10-27 22:03:00 UTC (rev 974) @@ -0,0 +1,31 @@ +package org.cishell.utilities.mutateParameter.dropdown; + +import org.cishell.reference.service.metatype.BasicAttributeDefinition; +import org.cishell.utilities.mutateParameter.AttributeDefinitionTransformer; +import org.osgi.service.metatype.AttributeDefinition; + +public abstract class DropdownTransformer + implements AttributeDefinitionTransformer { + /** + * @see BasicAttributeDefinition#BasicAttributeDefinition(String, String, String, int, String[], String[]) + */ + public AttributeDefinition transform(AttributeDefinition oldAD) { + if (shouldTransform(oldAD)) { + return + new BasicAttributeDefinition( + transformID(oldAD.getID()), + transformName(oldAD.getName()), + transformDescription(oldAD.getDescription()), + transformType(oldAD.getType()), + transformOptionLabels(oldAD.getOptionLabels()), + transformOptionValues(oldAD.getOptionValues())); + } + else { + return oldAD; + } + } + + public abstract String[] transformOptionLabels(String[] oldOptionLabels); + public abstract String[] transformOptionValues(String[] oldOptionValues); +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |