From: <jrb...@us...> - 2009-07-24 17:44:44
|
Revision: 896 http://cishell.svn.sourceforge.net/cishell/?rev=896&view=rev Author: jrbibers Date: 2009-07-24 17:44:30 +0000 (Fri, 24 Jul 2009) Log Message: ----------- Added ParameterMutator utilities for transforming ObjectClassDefinitions and AttributeDefinitions. See MutateParameterUtilities.mutateToDropdown() for an example usage. Added Paths: ----------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.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 trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/AttributeDefinitionTransformer.java 2009-07-24 17:44:30 UTC (rev 896) @@ -0,0 +1,19 @@ +package org.cishell.utilities.mutateParameter; + +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. + */ +public interface AttributeDefinitionTransformer { + public boolean shouldTransform(AttributeDefinition ad); + public AttributeDefinition transform(AttributeDefinition oldAD); + public String transformID(String oldID); + public String transformName(String oldName); + public String transformDescription(String oldDescription); + public int transformType(int oldType); +} + + + Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/DropdownTransformer.java 2009-07-24 17:44:30 UTC (rev 896) @@ -0,0 +1,27 @@ +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); +} + Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/NullDropdownTransformer.java 2009-07-24 17:44:30 UTC (rev 896) @@ -0,0 +1,40 @@ +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 boolean shouldTransform(AttributeDefinition ad) { + return false; + } + + 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 Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/mutateParameter/ObjectClassDefinitionTransformer.java 2009-07-24 17:44:30 UTC (rev 896) @@ -0,0 +1,51 @@ +package org.cishell.utilities.mutateParameter; + +import java.util.Iterator; +import java.util.List; + +import org.cishell.reference.service.metatype.BasicObjectClassDefinition; +import org.cishell.utilities.MutateParameterUtilities; +import org.osgi.service.metatype.AttributeDefinition; +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; + + /* Create newOCD from oldOCD by applying transformer + * to each AttributeDefinition. + */ + public static BasicObjectClassDefinition apply( + AttributeDefinitionTransformer transformer, + ObjectClassDefinition oldOCD) { + 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])); + } + + return newOCD; + } + + /* Convenience method for batching transformations. + * TODO Untested + */ + public static BasicObjectClassDefinition transform( + BasicObjectClassDefinition oldOCD, List transformers) { + BasicObjectClassDefinition newOCD = oldOCD; + + for ( Iterator it = transformers.iterator(); it.hasNext(); ) { + AttributeDefinitionTransformer transformer = + (AttributeDefinitionTransformer) it.next(); + newOCD = apply(transformer, newOCD); + } + + return newOCD; + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |