use of org.osgi.service.blueprint.reflect.Metadata in project aries by apache.
the class Parser method parseBeanProperty.
public BeanProperty parseBeanProperty(ComponentMetadata enclosingComponent, Element element) {
String name = element.hasAttribute(NAME_ATTRIBUTE) ? element.getAttribute(NAME_ATTRIBUTE) : null;
Metadata value = parseArgumentOrPropertyValue(element, enclosingComponent);
return new BeanPropertyImpl(name, value);
}
use of org.osgi.service.blueprint.reflect.Metadata in project aries by apache.
the class SpringOsgiNamespaceHandler method parseService.
private Metadata parseService(Element element, ParserContext context) {
MutableServiceMetadata metadata = context.createMetadata(MutableServiceMetadata.class);
// Parse attributes
if (element.hasAttribute(ID_ATTRIBUTE)) {
metadata.setId(element.getAttribute(ID_ATTRIBUTE));
} else {
metadata.setId(generateId(context));
}
if (nonEmpty(element.getAttribute(REF_ATTRIBUTE)) != null) {
MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class);
ref.setComponentId(element.getAttribute(REF_ATTRIBUTE));
metadata.setServiceComponent(ref);
}
metadata.setRanking(nonEmpty(element.getAttribute(RANKING_ATTRIBUTE)) != null ? Integer.parseInt(element.getAttribute(RANKING_ATTRIBUTE)) : 0);
String itf = nonEmpty(element.getAttribute(INTERFACE_ATTRIBUTE));
if (itf != null) {
metadata.addInterface(itf);
}
String[] dependsOn = StringUtils.tokenizeToStringArray(nonEmpty(element.getAttribute(DEPENDS_ON_ATTRIBUTE)), ",; ");
metadata.setDependsOn(dependsOn != null ? Arrays.asList(dependsOn) : null);
String autoExp = nonEmpty(element.getAttribute(AUTO_EXPORT_ATTRIBUTE));
if (AUTO_EXPORT_INTERFACES.equals(autoExp)) {
metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_INTERFACES);
} else if (AUTO_EXPORT_CLASS_HIERARCHY.equals(autoExp)) {
metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_CLASS_HIERARCHY);
} else if (AUTO_EXPORT_ALL_CLASSES.equals(autoExp)) {
metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_ALL_CLASSES);
} else {
metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_DISABLED);
}
// Parse child elements
for (Element child : getChildren(element)) {
if (element.getNamespaceURI().equals(child.getNamespaceURI())) {
if (INTERFACES_ELEMENT.equals(child.getLocalName())) {
List<String> itfs = parseInterfaces(child);
for (String intf : itfs) {
metadata.addInterface(intf);
}
} else if (REGISTRATION_LISTENER_ELEMENT.equals(child.getLocalName())) {
String regMethod = nonEmpty(child.getAttribute(REGISTRATION_METHOD_ATTRIBUTE));
String unregMethod = nonEmpty(child.getAttribute(UNREGISTRATION_METHOD_ATTRIBUTE));
String refStr = nonEmpty(child.getAttribute(REF_ATTRIBUTE));
Target listenerComponent = null;
if (refStr != null) {
MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class);
ref.setComponentId(refStr);
listenerComponent = ref;
}
for (Element cchild : getChildren(child)) {
if (listenerComponent != null) {
throw new IllegalArgumentException("Only one of @ref attribute or inlined bean definition element is allowed");
}
listenerComponent = parseInlinedTarget(context, metadata, cchild);
}
if (listenerComponent == null) {
throw new IllegalArgumentException("Missing @ref attribute or inlined bean definition element");
}
metadata.addRegistrationListener(listenerComponent, regMethod, unregMethod);
} else if (SERVICE_PROPERTIES_ELEMENT.equals(child.getLocalName())) {
// TODO: @key-type
for (Element e : getChildren(child)) {
if (ENTRY_ELEMENT.equals(e.getLocalName())) {
NonNullMetadata key;
Metadata val;
boolean hasKeyAttribute = e.hasAttribute(KEY_ATTRIBUTE);
boolean hasKeyRefAttribute = e.hasAttribute(KEY_REF_ATTRIBUTE);
if (hasKeyRefAttribute && !hasKeyAttribute) {
MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class);
r.setComponentId(e.getAttribute(KEY_REF_ATTRIBUTE));
key = r;
} else if (hasKeyAttribute && !hasKeyRefAttribute) {
MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class);
v.setStringValue(e.getAttribute(KEY_ATTRIBUTE));
key = v;
} else {
throw new IllegalStateException("Either key or key-ref must be specified");
}
// TODO: support key
boolean hasValAttribute = e.hasAttribute(VALUE_ATTRIBUTE);
boolean hasValRefAttribute = e.hasAttribute(VALUE_REF_ATTRIBUTE);
if (hasValRefAttribute && !hasValAttribute) {
MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class);
r.setComponentId(e.getAttribute(VALUE_REF_ATTRIBUTE));
val = r;
} else if (hasValAttribute && !hasValRefAttribute) {
MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class);
v.setStringValue(e.getAttribute(VALUE_ATTRIBUTE));
val = v;
} else {
throw new IllegalStateException("Either val or val-ref must be specified");
}
// TODO: support children elements ?
metadata.addServiceProperty(key, val);
}
}
}
} else if (BLUEPRINT_NAMESPACE.equals(child.getNamespaceURI()) && BEAN_ELEMENT.equals(child.getLocalName())) {
if (metadata.getServiceComponent() != null) {
throw new IllegalArgumentException("Only one of @ref attribute and bean element is allowed");
}
Target bean = context.parseElement(BeanMetadata.class, metadata, child);
metadata.setServiceComponent(bean);
} else {
if (metadata.getServiceComponent() != null) {
throw new IllegalArgumentException("Only one of @ref attribute or inlined bean definition element is allowed");
}
NamespaceHandler handler = context.getNamespaceHandler(URI.create(child.getNamespaceURI()));
if (handler == null) {
throw new IllegalStateException("No NamespaceHandler found for " + child.getNamespaceURI());
}
Metadata md = handler.parse(child, context);
if (!(md instanceof Target)) {
throw new IllegalStateException("NamespaceHandler did not return a Target instance but " + md);
}
metadata.setServiceComponent((Target) md);
}
}
return metadata;
}
use of org.osgi.service.blueprint.reflect.Metadata in project aries by apache.
the class CmNamespaceHandler method parsePropertyPlaceholder.
private ComponentMetadata parsePropertyPlaceholder(ParserContext context, Element element) {
MutableBeanMetadata metadata = context.createMetadata(MutableBeanMetadata.class);
metadata.setProcessor(true);
metadata.setId(getId(context, element));
metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
metadata.setRuntimeClass(CmPropertyPlaceholder.class);
metadata.setInitMethod("init");
metadata.setDestroyMethod("destroy");
metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
metadata.addProperty("configAdmin", createConfigurationAdminRef(context));
metadata.addProperty("persistentId", createValue(context, element.getAttribute(PERSISTENT_ID_ATTRIBUTE)));
String prefix = element.hasAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE) ? element.getAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE) : "${";
metadata.addProperty("placeholderPrefix", createValue(context, prefix));
String suffix = element.hasAttribute(PLACEHOLDER_SUFFIX_ATTRIBUTE) ? element.getAttribute(PLACEHOLDER_SUFFIX_ATTRIBUTE) : "}";
metadata.addProperty("placeholderSuffix", createValue(context, suffix));
String nullValue = element.hasAttribute(PLACEHOLDER_NULL_VALUE_ATTRIBUTE) ? element.getAttribute(PLACEHOLDER_NULL_VALUE_ATTRIBUTE) : null;
if (nullValue != null) {
metadata.addProperty("nullValue", createValue(context, nullValue));
}
String defaultsRef = element.hasAttribute(DEFAULTS_REF_ATTRIBUTE) ? element.getAttribute(DEFAULTS_REF_ATTRIBUTE) : null;
if (defaultsRef != null) {
metadata.addProperty("defaultProperties", createRef(context, defaultsRef));
}
String ignoreMissingLocations = extractIgnoreMissingLocations(element);
if (ignoreMissingLocations != null) {
metadata.addProperty("ignoreMissingLocations", createValue(context, ignoreMissingLocations));
}
String systemProperties = extractSystemPropertiesAttribute(element);
if (systemProperties == null) {
systemProperties = SYSTEM_PROPERTIES_NEVER;
}
metadata.addProperty("systemProperties", createValue(context, systemProperties));
String updateStrategy = element.getAttribute(UPDATE_STRATEGY_ATTRIBUTE);
if (updateStrategy != null) {
metadata.addProperty("updateStrategy", createValue(context, updateStrategy));
}
metadata.addProperty("managedObjectManager", createRef(context, MANAGED_OBJECT_MANAGER_NAME));
// Parse elements
List<String> locations = new ArrayList<String>();
NodeList nl = element.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node instanceof Element) {
Element e = (Element) node;
if (isCmNamespace(e.getNamespaceURI())) {
if (nodeNameEquals(e, DEFAULT_PROPERTIES_ELEMENT)) {
if (defaultsRef != null) {
throw new ComponentDefinitionException("Only one of " + DEFAULTS_REF_ATTRIBUTE + " attribute or " + DEFAULT_PROPERTIES_ELEMENT + " element is allowed");
}
Metadata props = parseDefaultProperties(context, metadata, e);
metadata.addProperty("defaultProperties", props);
}
} else if (isExtNamespace(e.getNamespaceURI())) {
if (nodeNameEquals(e, LOCATION_ELEMENT)) {
locations.add(getTextValue(e));
}
}
}
}
if (!locations.isEmpty()) {
metadata.addProperty("locations", createList(context, locations));
}
PlaceholdersUtils.validatePlaceholder(metadata, context.getComponentDefinitionRegistry());
return metadata;
}
use of org.osgi.service.blueprint.reflect.Metadata in project aries by apache.
the class NSHandlerOne method parse.
// process elements
public Metadata parse(Element element, ParserContext context) {
Metadata retval = null;
if (element.getLocalName().equals(ELT_NAME)) {
final String id = element.getAttributeNS(NSURI, ATTRIB_ONE);
final String value = element.getAttributeNS(NSURI, ATTRIB_TWO);
PassThroughMetadata ptm = new PassThroughMetadata() {
public String getId() {
return id;
}
// not used currently
public List<String> getDependsOn() {
return null;
}
// also not used currently
public int getActivation() {
return 0;
}
public Object getObject() {
return value;
}
};
retval = ptm;
}
return retval;
}
use of org.osgi.service.blueprint.reflect.Metadata in project aries by apache.
the class NSHandlerSix method parse.
// process elements
public Metadata parse(Element element, ParserContext context) {
Metadata retval = null;
if (element.getLocalName().equals(ELT_NAME)) {
final String id = element.getAttributeNS(NSURI, ATTRIB_ID);
MutableBeanMetadata bm = context.createMetadata(MutableBeanMetadata.class);
bm.setId(id);
bm.setScope("PROTOTYPE");
bm.setClassName(TestBean.class.getName());
retval = bm;
}
return retval;
}
Aggregations