From: <jrb...@us...> - 2009-10-13 17:58:04
|
Revision: 962 http://cishell.svn.sourceforge.net/cishell/?rev=962&view=rev Author: jrbibers Date: 2009-10-13 17:57:55 +0000 (Tue, 13 Oct 2009) Log Message: ----------- Corrected a design flaw in the mutateParameter utilities. To date, all parameters transformed using ObjectClassDefinitionTransformer have been uniformly written out with the attribute definition filter ObjectClassDefinition.REQUIRED. Now the transformer preserves each AttributeDefinition's original filter (currently one of ObjectClassDefinition.REQUIRED or ObjectClassDefinition.OPTIONAL, where this assumption is reflected in the constant ATOMIC_ATTRIBUTE_DEFINITION_FILTERS). This change should not alter the behavior of any plug-in currently depending on the mutateParameter utilities (since none, to my knowledge, have optional parameters). Modified Paths: -------------- trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java Modified: trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF =================================================================== --- trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2009-10-12 18:29:29 UTC (rev 961) +++ trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2009-10-13 17:57:55 UTC (rev 962) @@ -3,7 +3,7 @@ Bundle-Name: Utilities Plug-in Bundle-SymbolicName: org.cishell.utilities Bundle-Version: 1.0.0 -Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-RequiredExecutionEnvironment: J2SE-1.4 Import-Package: org.cishell.framework;version="1.0.0", org.cishell.framework.algorithm;version="1.0.0", org.cishell.framework.data, 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-12 18:29:29 UTC (rev 961) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java 2009-10-13 17:57:55 UTC (rev 962) @@ -1,5 +1,7 @@ package org.cishell.utilities.mutateParameter; +import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -9,10 +11,20 @@ import org.osgi.service.metatype.ObjectClassDefinition; public class ObjectClassDefinitionTransformer { - private static final int OUTGOING_ATTRIBUTES_FILTER = - ObjectClassDefinition.REQUIRED; - private static final int INCOMING_ATTRIBUTES_FILTER = - ObjectClassDefinition.ALL; + /** + * AttributeDefinition filters as described in ObjectClassDefinition. + * "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 { + List l = new ArrayList(); + l.add(ObjectClassDefinition.REQUIRED); + l.add(ObjectClassDefinition.OPTIONAL); + ATOMIC_ATTRIBUTE_DEFINITION_FILTERS = Collections.unmodifiableList(l); + } /* Create newOCD from oldOCD by applying transformer * to each AttributeDefinition. @@ -23,12 +35,20 @@ BasicObjectClassDefinition newOCD = MutateParameterUtilities.createNewParameters(oldOCD); - AttributeDefinition[] oldADs = - oldOCD.getAttributeDefinitions(INCOMING_ATTRIBUTES_FILTER); - for (int ii = 0; ii < oldADs.length; ii++) { - newOCD.addAttributeDefinition( - OUTGOING_ATTRIBUTES_FILTER, - transformer.transform(oldADs[ii])); + // For each kind of AttributeDefinition filter .. + for (Iterator filterIt = ATOMIC_ATTRIBUTE_DEFINITION_FILTERS.iterator(); + filterIt.hasNext();) { + int filter = ((Integer) filterIt.next()).intValue(); + + // Grab all matching AttributeDefinitions and transform them. + AttributeDefinition[] oldADs = + oldOCD.getAttributeDefinitions(filter); + + for (int ii = 0; ii < oldADs.length; ii++) { + newOCD.addAttributeDefinition( + filter, + transformer.transform(oldADs[ii])); + } } return newOCD; @@ -42,6 +62,7 @@ for (Iterator it = transformers.iterator(); it.hasNext();) { AttributeDefinitionTransformer transformer = (AttributeDefinitionTransformer) it.next(); + newOCD = apply(transformer, newOCD); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |