|
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.
|