/* * $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();
}