aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Ross2013-09-11 06:36:18 (EDT)
committerJohn Ross2013-09-16 13:37:00 (EDT)
commit5f41f307cf746e0e3469855f20f798962e051221 (patch)
tree844fa695d00f2f4c1eaa5f14eb387b57910db7c1
parentede377dd311210ae0fe7f72985635507bcd6a211 (diff)
downloadrt.equinox.bundles-5f41f307cf746e0e3469855f20f798962e051221.zip
rt.equinox.bundles-5f41f307cf746e0e3469855f20f798962e051221.tar.gz
rt.equinox.bundles-5f41f307cf746e0e3469855f20f798962e051221.tar.bz2
Bug 416640 - [metatype] Consider providing API access to min/max values from metadata XML.
Add new methods to the EquinoxAttributeDefinition interface allowing access to the min and max values. The return type is String which matches the type defined by the metatype XML schema. Update implementation to accept min/max values that are not integers for type String. If min and max are integers, a string length comparison takes place. If either min or max is not an integer, then String.compareTo is called. Increment bundle minor version. Update equinox metatype api version to 1.3.
-rw-r--r--bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF4
-rw-r--r--bundles/org.eclipse.equinox.metatype/pom.xml2
-rw-r--r--bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/EquinoxAttributeDefinition.java18
-rw-r--r--bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/AttributeDefinitionImpl.java8
-rw-r--r--bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/DataParser.java3
-rw-r--r--bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/MetaTypeProviderTracker.java11
-rw-r--r--bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/ValueTokenizer.java25
7 files changed, 58 insertions, 13 deletions
diff --git a/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
index dbf4a94..5a4391d 100644
--- a/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
@@ -1,6 +1,6 @@
Bundle-ManifestVersion: 2
Bundle-Name: %bundleName
-Bundle-Version: 1.3.100.qualifier
+Bundle-Version: 1.4.0.qualifier
Bundle-SymbolicName: org.eclipse.equinox.metatype
Bundle-Activator: org.eclipse.equinox.metatype.impl.Activator
Import-Package: javax.xml.parsers,
@@ -14,7 +14,7 @@ Import-Package: javax.xml.parsers,
org.xml.sax,
org.xml.sax.helpers
Export-Package: org.eclipse.equinox.metatype;version="1.2.0",
- org.eclipse.equinox.metatype.impl;version="1.2.0";x-friends:=org.eclipse.equinox.compendium.tests
+ org.eclipse.equinox.metatype.impl;version="1.3.0";x-friends:=org.eclipse.equinox.compendium.tests
Bundle-Vendor: %bundleVendor
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/bundles/org.eclipse.equinox.metatype/pom.xml b/bundles/org.eclipse.equinox.metatype/pom.xml
index 9e08dc2..f499cab 100644
--- a/bundles/org.eclipse.equinox.metatype/pom.xml
+++ b/bundles/org.eclipse.equinox.metatype/pom.xml
@@ -19,7 +19,7 @@
</parent>
<groupId>org.eclipse.equinox</groupId>
<artifactId>org.eclipse.equinox.metatype</artifactId>
- <version>1.3.100-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<build>
<plugins>
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/EquinoxAttributeDefinition.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/EquinoxAttributeDefinition.java
index 99070ff..dcf73d7 100644
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/EquinoxAttributeDefinition.java
+++ b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/EquinoxAttributeDefinition.java
@@ -23,5 +23,21 @@ import org.osgi.service.metatype.AttributeDefinition;
*
*/
public interface EquinoxAttributeDefinition extends AttributeDefinition, Extendable {
- // Empty interface to support extendable attribute definitions.
+ /**
+ * Get the maximum value this attribute may hold as specified by the
+ * optional "max" XML attribute of the &lt;AD&gt; element.
+ *
+ * @return The maximum value this attribute may hold, or <code>null</code>
+ * if unspecified.
+ */
+ public String getMax();
+
+ /**
+ * Get the minimum value this attribute may hold as specified by the
+ * optional "min" XML attribute of the &lt;AD&gt; element.
+ *
+ * @return The minimum value this attribute may hold, or <code>null</code>
+ * if unspecified.
+ */
+ public String getMin();
}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/AttributeDefinitionImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/AttributeDefinitionImpl.java
index a0c2d9c..2e671d6 100644
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/AttributeDefinitionImpl.java
+++ b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/AttributeDefinitionImpl.java
@@ -313,4 +313,12 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Equi
public Set<String> getExtensionUris() {
return helper.getExtensionUris();
}
+
+ public String getMax() {
+ return _maxValue == null ? null : String.valueOf(_maxValue);
+ }
+
+ public String getMin() {
+ return _minValue == null ? null : String.valueOf(_minValue);
+ }
}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/DataParser.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/DataParser.java
index 850b78f..176e236 100644
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/DataParser.java
+++ b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/DataParser.java
@@ -123,8 +123,7 @@ public class DataParser {
// PASSWORD should be treated like STRING.
case AttributeDefinition.PASSWORD :
case AttributeDefinition.STRING :
- // Both the min and max of STRING are Integers.
- return new Integer(value);
+ return value;
case AttributeDefinition.LONG :
return new Long(value);
case AttributeDefinition.INTEGER :
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/MetaTypeProviderTracker.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/MetaTypeProviderTracker.java
index 5433ceb..5e4c875 100644
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/MetaTypeProviderTracker.java
+++ b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/MetaTypeProviderTracker.java
@@ -10,11 +10,10 @@
*******************************************************************************/
package org.eclipse.equinox.metatype.impl;
-import org.eclipse.equinox.metatype.*;
-
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
+import org.eclipse.equinox.metatype.*;
import org.eclipse.osgi.util.NLS;
import org.osgi.framework.*;
import org.osgi.service.cm.ManagedService;
@@ -273,6 +272,14 @@ public class MetaTypeProviderTracker implements EquinoxMetaTypeInformation {
public Set<String> getExtensionUris() {
return Collections.EMPTY_SET;
}
+
+ public String getMax() {
+ return null;
+ }
+
+ public String getMin() {
+ return null;
+ }
});
}
return result.toArray(new EquinoxAttributeDefinition[result.size()]);
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/ValueTokenizer.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/ValueTokenizer.java
index 9e28978..d916055 100644
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/ValueTokenizer.java
+++ b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/impl/ValueTokenizer.java
@@ -142,6 +142,25 @@ public class ValueTokenizer {
return buffer.toString();
}
+ private boolean validateString(AttributeDefinitionImpl ad, String value) {
+ // Try validating the string length.
+ try {
+ // All or nothing. If either min or max is not null and cannot be
+ // parsed as an integer, do the string comparison instead.
+ Integer min = ad._minValue == null ? null : Integer.valueOf((String) ad._minValue);
+ Integer max = ad._maxValue == null ? null : Integer.valueOf((String) ad._maxValue);
+ if (min != null && value.length() < min)
+ return true;
+ if (max != null && value.length() > max)
+ return true;
+ } catch (NumberFormatException e) {
+ // Either min or max was not an integer. Do a string comparison.
+ if ((ad._minValue != null && value.compareTo((String) ad._minValue) < 0) || (ad._maxValue != null && value.compareTo((String) ad._maxValue) > 0))
+ return true;
+ }
+ return false;
+ }
+
public String validate(AttributeDefinitionImpl ad) {
// An empty list means the original value was null. Null is never valid.
if (values.isEmpty()) {
@@ -173,11 +192,7 @@ public class ValueTokenizer {
switch (ad._dataType) {
case AttributeDefinition.PASSWORD :
case AttributeDefinition.STRING :
- if (ad._minValue != null && s.length() < (Integer) ad._minValue) {
- rangeError = true;
- } else if (ad._maxValue != null && s.length() > (Integer) ad._maxValue) {
- rangeError = true;
- }
+ rangeError = validateString(ad, s);
break;
case AttributeDefinition.INTEGER :
Integer intVal = new Integer(s);