/* * $Header: /cvshome/build/org.osgi.service.metatype/src/org/osgi/service/metatype/AttributeDefinition.java,v 1.13 2006/06/16 16:31:23 hargrave Exp $ * * Copyright (c) OSGi Alliance (2001, 2006). All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.osgi.service.metatype; /** * An interface to describe an attribute. * *

* An AttributeDefinition object defines a description of the data * type of a property/attribute. * * @version $Revision: 1.13 $ */ public interface AttributeDefinition { /** * The STRING (1) type. * *

* Attributes of this type should be stored as String, * Vector with String or String[] objects, * depending on the getCardinality() value. */ public static final int STRING = 1; /** * The LONG (2) type. * * Attributes of this type should be stored as Long, * Vector with Long or long[] objects, * depending on the getCardinality() value. */ public static final int LONG = 2; /** * The INTEGER (3) type. * * Attributes of this type should be stored as Integer, * Vector with Integer or int[] objects, * depending on the getCardinality() value. */ public static final int INTEGER = 3; /** * The SHORT (4) type. * * Attributes of this type should be stored as Short, * Vector with Short or short[] objects, * depending on the getCardinality() value. */ public static final int SHORT = 4; /** * The CHARACTER (5) type. * * Attributes of this type should be stored as Character, * Vector with Character or char[] objects, * depending on the getCardinality() value. */ public static final int CHARACTER = 5; /** * The BYTE (6) type. * * Attributes of this type should be stored as Byte, * Vector with Byte or byte[] objects, * depending on the getCardinality() value. */ public static final int BYTE = 6; /** * The DOUBLE (7) type. * * Attributes of this type should be stored as Double, * Vector with Double or double[] objects, * depending on the getCardinality() value. */ public static final int DOUBLE = 7; /** * The FLOAT (8) type. * * Attributes of this type should be stored as Float, * Vector with Float or float[] objects, * depending on the getCardinality() value. */ public static final int FLOAT = 8; /** * The BIGINTEGER (9) type. * * Attributes of this type should be stored as BigInteger, * Vector with BigInteger or BigInteger[] * objects, depending on the getCardinality() value. * * @deprecated As of 1.1. */ public static final int BIGINTEGER = 9; /** * The BIGDECIMAL (10) type. * * Attributes of this type should be stored as BigDecimal, * Vector with BigDecimal or BigDecimal[] * objects depending on getCardinality(). * * @deprecated As of 1.1. */ public static final int BIGDECIMAL = 10; /** * The BOOLEAN (11) type. * * Attributes of this type should be stored as Boolean, * Vector with Boolean or boolean[] objects * depending on getCardinality(). */ public static final int BOOLEAN = 11; /** * Get the name of the attribute. This name may be localized. * * @return The localized name of the definition. */ public String getName(); /** * Unique identity for this attribute. * * Attributes share a global namespace in the registry. E.g. an attribute * cn or commonName must always be a String * and the semantics are always a name of some object. They share this * aspect with LDAP/X.500 attributes. In these standards the OSI Object * Identifier (OID) is used to uniquely identify an attribute. If such an * OID exists, (which can be requested at several standard organisations and * many companies already have a node in the tree) it can be returned here. * Otherwise, a unique id should be returned which can be a Java class name * (reverse domain name) or generated with a GUID algorithm. Note that all * LDAP defined attributes already have an OID. It is strongly advised to * define the attributes from existing LDAP schemes which will give the OID. * Many such schemes exist ranging from postal addresses to DHCP parameters. * * @return The id or oid */ public String getID(); /** * Return a description of this attribute. * * The description may be localized and must describe the semantics of this * type and any constraints. * * @return The localized description of the definition. */ public String getDescription(); /** * Return the cardinality of this attribute. * * The OSGi environment handles multi valued attributes in arrays ([]) or in * Vector objects. The return value is defined as follows: * *

	 * 
	 *    x = Integer.MIN_VALUE    no limit, but use Vector
	 *    x < 0                    -x = max occurrences, store in Vector
	 *    x > 0                     x = max occurrences, store in array []
	 *    x = Integer.MAX_VALUE    no limit, but use array []
	 *    x = 0                     1 occurrence required
	 *  
	 * 
* * @return The cardinality of this attribute. */ public int getCardinality(); /** * Return the type for this attribute. * *

* Defined in the following constants which map to the appropriate Java * type. STRING,LONG,INTEGER, * CHAR,BYTE,DOUBLE,FLOAT, * BOOLEAN. * * @return The type for this attribute. */ public int getType(); /** * Return a list of option values that this attribute can take. * *

* If the function returns null, there are no option values * available. * *

* Each value must be acceptable to validate() (return "") and must be a * String object that can be converted to the data type defined * by getType() for this attribute. * *

* This list must be in the same sequence as getOptionLabels(). * I.e. for each index i in getOptionValues, i in * getOptionLabels() should be the label. * *

* For example, if an attribute can have the value male, female, unknown, * this list can return * new String[] { "male", "female", "unknown" }. * * @return A list values */ public String[] getOptionValues(); /** * Return a list of labels of option values. * *

* The purpose of this method is to allow menus with localized labels. It is * associated with getOptionValues. The labels returned here are * ordered in the same way as the values in that method. * *

* If the function returns null, there are no option labels * available. *

* This list must be in the same sequence as the getOptionValues() * method. I.e. for each index i in getOptionLabels, i in * getOptionValues() should be the associated value. * *

* For example, if an attribute can have the value male, female, unknown, * this list can return (for dutch) * new String[] { "Man", "Vrouw", "Onbekend" }. * * @return A list values */ public String[] getOptionLabels(); /** * Validate an attribute in String form. * * An attribute might be further constrained in value. This method will * attempt to validate the attribute according to these constraints. It can * return three different values: * *

	 *  null           No validation present
	 *  ""             No problems detected
	 *  "..."          A localized description of why the value is wrong
	 * 
* * @param value The value before turning it into the basic data type * @return null, "", or another string */ public String validate(String value); /** * Return a default for this attribute. * * The object must be of the appropriate type as defined by the cardinality * and getType(). The return type is a list of String * objects that can be converted to the appropriate type. The cardinality of * the return array must follow the absolute cardinality of this type. E.g. * if the cardinality = 0, the array must contain 1 element. If the * cardinality is 1, it must contain 0 or 1 elements. If it is -5, it must * contain from 0 to max 5 elements. Note that the special case of a 0 * cardinality, meaning a single value, does not allow arrays or vectors of * 0 elements. * * @return Return a default value or null if no default exists. */ public String[] getDefaultValue(); }