package org.osgi.service.indexer.impl.types; import java.util.List; import org.osgi.service.indexer.impl.Schema; import org.osgi.service.indexer.impl.util.Tag; public class TypedValue { private final Type type; private final Object value; public static TypedValue valueOf(Object value) { if (value instanceof TypedValue) { return (TypedValue) value; } return new TypedValue(value); } private TypedValue(Object value) { this.type = Type.typeOf(value); this.value = value; } public TypedValue(ScalarType scalar, List< ? > list) { this.type = Type.list(scalar); this.value = list; } public TypedValue(ScalarType scalar, Object value) { this.type = Type.scalar(scalar); this.value = value; } public Tag addTo(Tag tag) { if (type.isList() || type.getType() != ScalarType.String) { tag.addAttribute(Schema.ATTR_TYPE, type.toString()); } tag.addAttribute(Schema.ATTR_VALUE, type.convertToString(value)); return tag; } }