You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2018/04/14 01:09:11 UTC
svn commit: r1829114 [2/8] - in /aries/trunk/cdi: ./ cdi-extender/
cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/
cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/
cdi-extender/src/main/java/org/apache/ari...
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Constants.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Constants.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Constants.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Constants.java Sat Apr 14 01:09:09 2018
@@ -27,29 +27,10 @@ public class Constants {
public static final String CDI10_URI = "http://www.osgi.org/xmlns/cdi/v1.0.0";
public static final Set<String> CDI_URIS = Sets.immutableHashSet(CDI10_URI);
- public static final String ARRAY_ELEMENT = "array";
- public static final String CARDINALITY_ATTRIBUTE = "cardinality";
+ public static final String BEAN_ELEMENT = "bean";
public static final String CLASS_ATTRIBUTE = "class";
- public static final String COMPONENT_ELEMENT = "component";
- public static final String CONFIGURATION_ELEMENT = "configuration";
- public static final String CONFIGURATION_PID_ATTRIBUTE = "configuration-pid";
- public static final String CONFIGURATION_POLICY_ATTRIBUTE = "configuration-policy";
- public static final String INTERFACE_ATTRIBUTE = "interface";
- public static final String LIST_ELEMENT = "list";
public static final String NAME_ATTRIBUTE = "name";
- public static final String POLICY_ATTRIBUTE = "policy";
- public static final String POLICY_OPTION_ATTRIBUTE = "policy-option";
- public static final String PROPERTY_ELEMENT = "property";
- public static final String PROVIDE_ELEMENT = "provide";
- public static final String REFERENCE_ELEMENT = "reference";
- public static final String SCOPE_ATTRIBUTE= "scope";
- public static final String SERVICE_ATTRIBUTE = "service";
- public static final String SERVICE_SCOPE_ATTRIBUTE = "service-scope";
- public static final String SET_ELEMENT = "set";
- public static final String TARGET_ATTRIBUTE = "target";
- public static final String TYPE_ATTRIBUTE = "type";
- public static final String VALUE_ATTRIBUTE = "value";
- public static final String VALUE_ELEMENT = "value";
- public static final String VALUE_TYPE_ATTRIBUTE = "value-type";
+ public static final String QUALIFIER_BLACKLIST_ELEMENT = "qualifier-blacklist";
+ public static final String QUALIFIER_ELEMENT = "qualifier";
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBeansHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBeansHandler.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBeansHandler.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBeansHandler.java Sat Apr 14 01:09:09 2018
@@ -14,34 +14,22 @@
package org.apache.aries.cdi.container.internal.model;
-import static org.apache.aries.cdi.container.internal.model.Constants.ARRAY_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.CLASS_ATTRIBUTE;
+import static org.apache.aries.cdi.container.internal.model.Constants.BEAN_ELEMENT;
import static org.apache.aries.cdi.container.internal.model.Constants.CDI10_URI;
import static org.apache.aries.cdi.container.internal.model.Constants.CDI_URIS;
-import static org.apache.aries.cdi.container.internal.model.Constants.COMPONENT_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.CONFIGURATION_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.INTERFACE_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.LIST_ELEMENT;
+import static org.apache.aries.cdi.container.internal.model.Constants.CLASS_ATTRIBUTE;
import static org.apache.aries.cdi.container.internal.model.Constants.NAME_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.PROPERTY_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.PROVIDE_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.REFERENCE_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.SERVICE_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.SET_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.TYPE_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.VALUE_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.VALUE_ELEMENT;
-import static org.apache.aries.cdi.container.internal.model.Constants.VALUE_TYPE_ATTRIBUTE;
+import static org.apache.aries.cdi.container.internal.model.Constants.QUALIFIER_ELEMENT;
import java.net.URL;
-import java.util.Formatter;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
-import org.apache.aries.cdi.container.internal.configuration.ConfigurationModel;
-import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
+import org.apache.aries.cdi.container.internal.component.OSGiBean;
+import org.apache.aries.cdi.container.internal.exception.BeanElementException;
+import org.apache.aries.cdi.container.internal.exception.BlacklistQualifierException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
@@ -56,148 +44,51 @@ public class OSGiBeansHandler extends De
}
public BeansModel createBeansModel() {
- return new BeansModel(_components, _beanDescriptorURLs);
- }
-
- @Override
- public void characters(char[] c, int start, int length) {
- if (_propertySB == null) {
- return;
- }
-
- _propertySB.append(c, start, length);
+ return new BeansModel(_beans, _qualifierBlackList, _errors, _beanDescriptorURLs);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
- if (matches(ARRAY_ELEMENT, uri, localName) && (_propertyValue == null)) {
- _collectionType = CollectionType.ARRAY;
- }
- if (matches(COMPONENT_ELEMENT, uri, localName)) {
- try {
- Class<?> clazz = _classLoader.loadClass(
- Model.getValue(CDI10_URI, CLASS_ATTRIBUTE, attributes));
+ if (matches(BEAN_ELEMENT, uri, localName)) {
+ String className = Model.getValue(CDI10_URI, CLASS_ATTRIBUTE, attributes);
- _componentModel = new ComponentModel.Builder(clazz).attributes(attributes);
- }
- catch (ClassNotFoundException cnfe) {
- if (_log.isErrorEnabled()) {
- _log.error("CDIe - {}", cnfe.getMessage(), cnfe);
- }
- }
- }
- if (matches(CONFIGURATION_ELEMENT, uri, localName)) {
try {
- Class<?> clazz = _classLoader.loadClass(
- Model.getValue(CDI10_URI, TYPE_ATTRIBUTE, attributes));
+ Class<?> clazz = _classLoader.loadClass(className);
- _componentModel.configuration(new ConfigurationModel.Builder(clazz).attributes(attributes).build());
+ _beanModel = new OSGiBean.Builder(clazz);
}
- catch (ClassNotFoundException cnfe) {
- if (_log.isErrorEnabled()) {
- _log.error("CDIe - {}", cnfe.getMessage(), cnfe);
- }
+ catch (ReflectiveOperationException roe) {
+ _errors.add(
+ new BeanElementException(
+ "Error loading bean class from element: " + className,
+ roe));
}
}
- if (matches(LIST_ELEMENT, uri, localName) && (_propertyValue == null)) {
- _collectionType = CollectionType.LIST;
- }
- if (matches(PROPERTY_ELEMENT, uri, localName)) {
- _propertyName = attributes.getValue(NAME_ATTRIBUTE).trim();
- _propertyType = attributes.getValue(VALUE_TYPE_ATTRIBUTE);
- if (_propertyType == null) {
- _propertyType = "String";
- }
- String value = attributes.getValue(uri, VALUE_ATTRIBUTE);
- if (value != null) {
- _propertyValue = value.trim();
- }
- else {
- _propertySB = new StringBuilder();
- }
- }
- if (matches(PROVIDE_ELEMENT, uri, localName)) {
- String value = attributes.getValue(INTERFACE_ATTRIBUTE).trim();
- _componentModel.provide(value);
- }
- if (matches(REFERENCE_ELEMENT, uri, localName)) {
- try {
- Class<?> clazz = _classLoader.loadClass(
- Model.getValue(CDI10_URI, SERVICE_ATTRIBUTE, attributes));
+ if (matches(QUALIFIER_ELEMENT, uri, localName)) {
+ String className = Model.getValue(CDI10_URI, NAME_ATTRIBUTE, attributes);
- _referenceModel = new ReferenceModel.Builder(attributes).service(clazz).build();
+ try {
+ _qualifier = _classLoader.loadClass(className);
}
- catch (ClassNotFoundException cnfe) {
- if (_log.isErrorEnabled()) {
- _log.error("CDIe - {}", cnfe.getMessage(), cnfe);
- }
+ catch (ReflectiveOperationException roe) {
+ _errors.add(
+ new BlacklistQualifierException(
+ "Error loading blacklisted qualifier from element: " + className,
+ roe));
}
}
- if (matches(SET_ELEMENT, uri, localName) && (_propertyValue == null)) {
- _collectionType = CollectionType.SET;
- }
- if (matches(VALUE_ELEMENT, uri, localName) && (_collectionType != null)) {
- _propertySB = new StringBuilder();
- }
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
- if (matches(ARRAY_ELEMENT, uri, localName)) {
- _collectionType = null;
- }
- if (matches(COMPONENT_ELEMENT, uri, localName)) {
- ComponentModel componentModel = _componentModel.build();
- _components.put(componentModel.getBeanClass().getName(), componentModel);
- _componentModel = null;
- }
- if (matches(LIST_ELEMENT, uri, localName)) {
- _collectionType = null;
- }
- if (matches(PROPERTY_ELEMENT, uri, localName)) {
- if ((_propertyValue == null) && (_propertySB != null)) {
- _propertyValue = _propertySB.toString().trim();
- }
- if (_propertyValue != null) {
- try (Formatter f = new Formatter()) {
- f.format("%s:%s=%s", _propertyName, _propertyType, _propertyValue);
- _componentModel.property(f.toString());
- }
- }
- _propertySB = null;
- _propertyName = null;
- _propertyType = null;
- _propertyValue = null;
- }
- if (matches(REFERENCE_ELEMENT, uri, localName)) {
- _componentModel.reference(_referenceModel);
- _referenceModel = null;
- }
- if (matches(SET_ELEMENT, uri, localName)) {
- _collectionType = null;
- }
- if (matches(VALUE_ELEMENT, uri, localName) && (_collectionType != null)) {
- StringBuilder sb = new StringBuilder();
- sb.append(_propertyName);
- sb.append(":");
- if (_collectionType == CollectionType.LIST) {
- sb.append("List<");
- sb.append(_propertyType);
- sb.append(">");
- }
- else if (_collectionType == CollectionType.SET) {
- sb.append("Set<");
- sb.append(_propertyType);
- sb.append(">");
- }
- else {
- sb.append(_propertyType);
- }
- sb.append("=");
- sb.append(_propertySB.toString().trim());
-
- _componentModel.property(sb.toString());
- _propertySB = null;
+ if (matches(BEAN_ELEMENT, uri, localName)) {
+ OSGiBean osgiBean = _beanModel.build();
+ _beans.put(osgiBean.getBeanClass().getName(), osgiBean);
+ _beanModel = null;
+ }
+ if (matches(QUALIFIER_ELEMENT, uri, localName) && (_qualifier != null)) {
+ _qualifierBlackList.add(_qualifier);
+ _qualifier = null;
}
}
@@ -208,22 +99,15 @@ public class OSGiBeansHandler extends De
return false;
}
- enum CollectionType {
- ARRAY, LIST, SET
- }
-
private final static Logger _log = LoggerFactory.getLogger(
OSGiBeansHandler.class);
private final ClassLoader _classLoader;
- private final Map<String, ComponentModel> _components = new HashMap<>();
+ private final Map<String, OSGiBean> _beans = new HashMap<>();
private final List<URL> _beanDescriptorURLs;
- private String _propertyName;
- private StringBuilder _propertySB;
- private String _propertyType;
- private String _propertyValue;
- private CollectionType _collectionType;
- private ReferenceModel _referenceModel;
- private ComponentModel.Builder _componentModel;
+ private OSGiBean.Builder _beanModel;
+ private List<Throwable> _errors = new ArrayList<>();
+ private Class<?> _qualifier;
+ private final List<Class<?>> _qualifierBlackList = new ArrayList<>();
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ObserverMethodAnnotated.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ObserverMethodAnnotated.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ObserverMethodAnnotated.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ObserverMethodAnnotated.java Sat Apr 14 01:09:09 2018
@@ -9,11 +9,11 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.ObserverMethod;
import org.apache.aries.cdi.container.internal.util.Sets;
-import org.osgi.service.cdi.annotations.ServiceEvent;
+import org.osgi.service.cdi.reference.ReferenceEvent;
public class ObserverMethodAnnotated implements Annotated {
- public ObserverMethodAnnotated(ObserverMethod<ServiceEvent<?>> observerMethod) {
+ public ObserverMethodAnnotated(ObserverMethod<ReferenceEvent<?>> observerMethod) {
_observerMethod = observerMethod;
_qualifiers = _observerMethod.getObservedQualifiers();
}
@@ -67,7 +67,7 @@ public class ObserverMethodAnnotated imp
return null;
}
- private final ObserverMethod<ServiceEvent<?>> _observerMethod;
+ private final ObserverMethod<ReferenceEvent<?>> _observerMethod;
private final Set<Annotation> _qualifiers;
}
\ No newline at end of file
Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceEventImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceEventImpl.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceEventImpl.java (added)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceEventImpl.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,151 @@
+/**
+ * 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.apache.aries.cdi.container.internal.model;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.function.Consumer;
+
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cdi.reference.ReferenceEvent;
+import org.osgi.service.cdi.reference.ReferenceServiceObjects;
+
+public class ReferenceEventImpl<T> implements ReferenceEvent<T> {
+
+ public static enum Event { ADDING, MODIFIED, REMOVED }
+
+ private final T _t;
+ private final ReferenceEventImpl.Event _event;
+
+ public ReferenceEventImpl(T t, ReferenceEventImpl.Event event) {
+ _t = t;
+ _event = event;
+ }
+
+ @Override
+ public void onAdding(Consumer<T> action) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onAddingServiceReference(Consumer<ServiceReference<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onAddingServiceObjects(Consumer<ReferenceServiceObjects<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onAddingProperties(Consumer<Map<String, ?>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onAddingTuple(Consumer<Entry<Map<String, ?>, T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onUpdate(Consumer<T> action) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onUpdateServiceReference(Consumer<ServiceReference<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onUpdateServiceObjects(Consumer<ReferenceServiceObjects<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onUpdateProperties(Consumer<Map<String, ?>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onUpdateTuple(Consumer<Entry<Map<String, ?>, T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onRemove(Consumer<T> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onRemoveServiceReference(Consumer<ServiceReference<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onRemoveServiceObjects(Consumer<ReferenceServiceObjects<T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onRemoveProperties(Consumer<Map<String, ?>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onRemoveTuple(Consumer<Entry<Map<String, ?>, T>> consumer) {
+ // TODO Auto-generated method stub
+
+ }
+
+// @Override
+// public ServiceEvent<T> adding(Consumer<T> consumer) {
+// if (_event == Event.ADDING) {
+// consumer.accept(_t);
+// };
+// return this;
+// }
+//
+// @Override
+// public ServiceEvent<T> modified(Consumer<T> consumer) {
+// if (_event == Event.MODIFIED) {
+// consumer.accept(_t);
+// }
+// return this;
+// }
+//
+// @Override
+// public ServiceEvent<T> removed(Consumer<T> consumer) {
+// if (_event == Event.REMOVED) {
+// consumer.accept(_t);
+// }
+// return this;
+// }
+
+}
\ No newline at end of file
Copied: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Init.java (from r1828903, aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Init.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Init.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Init.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Init.java&r1=1828903&r2=1829114&rev=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Init.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Init.java Sat Apr 14 01:09:09 2018
@@ -26,9 +26,9 @@ import org.osgi.framework.wiring.BundleW
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class Phase_Init implements Phase {
+public class Init implements Phase {
- public Phase_Init(Bundle bundle, ContainerState containerState) {
+ public Init(Bundle bundle, ContainerState containerState) {
_containerState = containerState;
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
@@ -80,7 +80,7 @@ public class Phase_Init implements Phase
}
}
- private static final Logger _log = LoggerFactory.getLogger(Phase_Init.class);
+ private static final Logger _log = LoggerFactory.getLogger(Init.class);
private final ContainerState _containerState;
private volatile Phase _extensionPhase;
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Configuration.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Configuration.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Configuration.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Configuration.java Sat Apr 14 01:09:09 2018
@@ -14,26 +14,12 @@
package org.apache.aries.cdi.container.internal.phase;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Consumer;
import javax.enterprise.inject.spi.Extension;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
-import org.apache.aries.cdi.container.internal.configuration.ConfigurationCallback;
-import org.apache.aries.cdi.container.internal.configuration.ConfigurationManagedService;
import org.apache.aries.cdi.container.internal.container.ContainerState;
import org.jboss.weld.bootstrap.spi.Metadata;
-import org.osgi.framework.Constants;
-import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.annotations.Configuration;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
public class Phase_Configuration implements Phase {
@@ -41,13 +27,25 @@ public class Phase_Configuration impleme
ContainerState containerState,
Collection<Metadata<Extension>> extensions) {
- _containerState = containerState;
- _extensions = extensions;
+// _containerState = containerState;
+// _extensions = extensions;
+//
+// _componentModels = _containerState.beansModel().getComponentModels();
+ }
+
+ @Override
+ public void close() {
+ // TODO Auto-generated method stub
- _componentModels = _containerState.beansModel().getComponentModels();
}
@Override
+ public void open() {
+ // TODO Auto-generated method stub
+
+ }
+
+/* @Override
public void close() {
_lock.lock();
@@ -224,4 +222,4 @@ public class Phase_Configuration impleme
private final Collection<Metadata<Extension>> _extensions;
private final Lock _lock = new ReentrantLock();
private volatile Phase _nextPhase;
-}
\ No newline at end of file
+*/}
\ No newline at end of file
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Extension.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Extension.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Extension.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Extension.java Sat Apr 14 01:09:09 2018
@@ -14,36 +14,12 @@
package org.apache.aries.cdi.container.internal.phase;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import javax.enterprise.inject.spi.Extension;
-
import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.apache.aries.cdi.container.internal.extension.ExtensionDependency;
-import org.apache.aries.cdi.container.internal.extension.ExtensionMetadata;
-import org.jboss.weld.bootstrap.spi.Metadata;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.wiring.BundleWire;
-import org.osgi.framework.wiring.BundleWiring;
-import org.osgi.service.cdi.CdiConstants;
-import org.osgi.service.cdi.CdiEvent;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class Phase_Extension implements Phase {
public Phase_Extension(ContainerState containerState) {
- _containerState = containerState;
+/* _containerState = containerState;
_bundleContext = _containerState.bundle().getBundleContext();
BundleWiring bundleWiring = _containerState.bundle().adapt(BundleWiring.class);
@@ -52,9 +28,21 @@ public class Phase_Extension implements
_extensions = new ConcurrentSkipListMap<>(Comparator.reverseOrder());
_containerState.setExtensionDependencies(_extensionDependencies);
+*/ }
+
+ @Override
+ public void close() {
+ // TODO Auto-generated method stub
+
}
@Override
+ public void open() {
+ // TODO Auto-generated method stub
+
+ }
+
+/* @Override
public void close() {
if (_extensionTracker != null) {
_extensionTracker.close();
@@ -197,5 +185,5 @@ public class Phase_Extension implements
}
}
-
+*/
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Publish.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Publish.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Publish.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Publish.java Sat Apr 14 01:09:09 2018
@@ -18,14 +18,8 @@ import java.util.Collection;
import javax.enterprise.inject.spi.Extension;
-import org.apache.aries.cdi.container.internal.container.ContainerBootstrap;
import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.jboss.weld.bootstrap.WeldBootstrap;
import org.jboss.weld.bootstrap.spi.Metadata;
-import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.annotations.ServiceScope;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class Phase_Publish implements Phase {
@@ -33,11 +27,23 @@ public class Phase_Publish implements Ph
ContainerState containerState,
Collection<Metadata<Extension>> extensions) {
- _containerState = containerState;
+/* _containerState = containerState;
_extensions = extensions;
+*/ }
+
+ @Override
+ public void close() {
+ // TODO Auto-generated method stub
+
}
@Override
+ public void open() {
+ // TODO Auto-generated method stub
+
+ }
+
+/* @Override
public void close() {
_containerState.serviceRegistrator().close();
_containerState.beanManagerRegistrator().close();
@@ -99,5 +105,5 @@ public class Phase_Publish implements Ph
private volatile ContainerBootstrap _cb;
private final ContainerState _containerState;
private final Collection<Metadata<Extension>> _extensions;
-
+*/
}
\ No newline at end of file
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Reference.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Reference.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Reference.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Reference.java Sat Apr 14 01:09:09 2018
@@ -15,25 +15,11 @@
package org.apache.aries.cdi.container.internal.phase;
import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Consumer;
import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ObserverMethod;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.apache.aries.cdi.container.internal.reference.ReferenceCallback;
-import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
import org.jboss.weld.bootstrap.spi.Metadata;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.annotations.ServiceEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class Phase_Reference implements Phase {
@@ -41,13 +27,25 @@ public class Phase_Reference implements
ContainerState containerState,
Collection<Metadata<Extension>> extensions) {
- _containerState = containerState;
+/* _containerState = containerState;
_extensions = extensions;
_componentModels = _containerState.beansModel().getComponentModels();
+*/ }
+
+ @Override
+ public void close() {
+ // TODO Auto-generated method stub
+
}
@Override
+ public void open() {
+ // TODO Auto-generated method stub
+
+ }
+
+/* @Override
public void close() {
_lock.lock();
@@ -185,5 +183,5 @@ public class Phase_Reference implements
private final Collection<Metadata<Extension>> _extensions;
private final Lock _lock = new ReentrantLock(true);
private volatile Phase _nextPhase;
-
+*/
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceBean.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceBean.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceBean.java Sat Apr 14 01:09:09 2018
@@ -29,16 +29,15 @@ import javax.enterprise.inject.spi.Decor
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Named;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
+import org.apache.aries.cdi.container.internal.component.OSGiBean;
import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.osgi.service.cdi.annotations.ReferenceCardinality;
public class ReferenceBean implements Bean<Object> {
public ReferenceBean(
ContainerState containerState,
ReferenceModel referenceModel,
- ComponentModel componentModel,
+ OSGiBean componentModel,
InjectionPoint injectionPoint,
BeanManager beanManager) {
@@ -72,7 +71,7 @@ public class ReferenceBean implements Be
@Override
public Class<?> getBeanClass() {
- return _referenceModel.getBeanClass();
+ return null; // TODO _referenceModel.getBeanClass();
}
@Override
@@ -102,7 +101,7 @@ public class ReferenceBean implements Be
@Override
public Set<Type> getTypes() {
- return _referenceModel.getTypes();
+ return null; // TODO _referenceModel.getTypes();
}
@Override
@@ -112,7 +111,7 @@ public class ReferenceBean implements Be
@Override
public boolean isNullable() {
- return _referenceModel.getCardinality() == ReferenceCardinality.OPTIONAL ? true : false;
+ return false;//_referenceModel.getCardinality() == ReferenceCardinality.OPTIONAL ? true : false;
}
@Override
@@ -129,13 +128,13 @@ public class ReferenceBean implements Be
private Object _getInjectedInstance() {
Map<String, ReferenceCallback> map = _containerState.referenceCallbacks().get(_componentModel);
- ReferenceCallback referenceCallback = map.get(_referenceModel.getName());
+// ReferenceCallback referenceCallback = map.get(_referenceModel.getName());
- return referenceCallback.tracked().values().iterator().next();
+ return null; // TODO referenceCallback.tracked().values().iterator().next();
}
private final BeanManager _beanManager;
- private final ComponentModel _componentModel;
+ private final OSGiBean _componentModel;
private final ContainerState _containerState;
private final InjectionPoint _injectionPoint;
private final String _name;
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceCallback.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceCallback.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceCallback.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceCallback.java Sat Apr 14 01:09:09 2018
@@ -14,39 +14,30 @@
package org.apache.aries.cdi.container.internal.reference;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Consumer;
-
-import javax.enterprise.inject.spi.ObserverMethod;
-
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
-import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.apache.aries.cdi.container.internal.model.CollectionType;
-import org.apache.aries.cdi.container.internal.model.Context;
-import org.apache.aries.cdi.container.internal.model.ServiceEventImpl;
import org.osgi.framework.ServiceReference;
-import org.osgi.service.cdi.annotations.ReferenceCardinality;
-import org.osgi.service.cdi.annotations.ServiceEvent;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
public class ReferenceCallback implements ServiceTrackerCustomizer<Object, Object> {
- public static class Builder {
+ @Override
+ public Object addingService(ServiceReference<Object> reference) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void modifiedService(ServiceReference<Object> reference, Object service) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void removedService(ServiceReference<Object> reference, Object service) {
+ // TODO Auto-generated method stub
+
+ }
+
+/* public static class Builder {
public Builder(Context context) {
this(null, null, context);
@@ -182,7 +173,7 @@ public class ReferenceCallback implement
else {
_tracked.put(reference, object);
- observer().ifPresent(o -> o.notify(event(object, ServiceEventImpl.Event.ADDING)));
+ observer().ifPresent(o -> o.notify(event(object, ReferenceEventImpl.Event.ADDING)));
}
_onAdd.ifPresent(f -> f.accept(this));
@@ -204,7 +195,7 @@ public class ReferenceCallback implement
entry -> {
_tracked.put(entry.getKey(), entry.getValue());
- observer().ifPresent(o -> o.notify(event(entry.getValue(), ServiceEventImpl.Event.ADDING)));
+ observer().ifPresent(o -> o.notify(event(entry.getValue(), ReferenceEventImpl.Event.ADDING)));
return true;
}
@@ -251,7 +242,7 @@ public class ReferenceCallback implement
else {
_tracked.put(reference, object);
- observer().ifPresent(o -> o.notify(event(object, ServiceEventImpl.Event.MODIFIED)));
+ observer().ifPresent(o -> o.notify(event(object, ReferenceEventImpl.Event.MODIFIED)));
}
}
@@ -275,7 +266,7 @@ public class ReferenceCallback implement
else {
final Object instance = _tracked.remove(reference);
- observer().ifPresent(o -> o.notify(event(instance, ServiceEventImpl.Event.REMOVED)));
+ observer().ifPresent(o -> o.notify(event(instance, ReferenceEventImpl.Event.REMOVED)));
}
_onRemove.ifPresent(f -> f.accept(this));
@@ -285,8 +276,8 @@ public class ReferenceCallback implement
}
}
- <T> ServiceEvent<T> event(T t, ServiceEventImpl.Event event) {
- return new ServiceEventImpl<T>(t, event);
+ <T> ServiceEvent<T> event(T t, ReferenceEventImpl.Event event) {
+ return new ReferenceEventImpl<T>(t, event);
}
public boolean resolved() {
@@ -404,5 +395,5 @@ public class ReferenceCallback implement
private List<String> _keys;
}
-
+*/
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel.java Sat Apr 14 01:09:09 2018
@@ -14,273 +14,138 @@
package org.apache.aries.cdi.container.internal.reference;
-import static org.apache.aries.cdi.container.internal.model.Model.*;
import static org.apache.aries.cdi.container.internal.util.Reflection.cast;
-import static java.lang.String.format;
-import static org.apache.aries.cdi.container.internal.model.Constants.CARDINALITY_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.CDI10_URI;
-import static org.apache.aries.cdi.container.internal.model.Constants.NAME_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.POLICY_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.POLICY_OPTION_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.SCOPE_ATTRIBUTE;
-import static org.apache.aries.cdi.container.internal.model.Constants.TARGET_ATTRIBUTE;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
+import java.lang.reflect.Member;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.WildcardType;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.AnnotatedCallable;
+import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Named;
+import javax.inject.Provider;
import org.apache.aries.cdi.container.internal.model.CollectionType;
import org.apache.aries.cdi.container.internal.util.Conversions;
import org.apache.aries.cdi.container.internal.util.Maps;
-import org.apache.aries.cdi.container.internal.util.Sets;
-import org.apache.aries.cdi.container.internal.util.Types;
import org.osgi.framework.Constants;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
+import org.osgi.service.cdi.annotations.Greedy;
import org.osgi.service.cdi.annotations.Reference;
-import org.osgi.service.cdi.annotations.ReferenceCardinality;
-import org.osgi.service.cdi.annotations.ReferencePolicy;
-import org.osgi.service.cdi.annotations.ReferencePolicyOption;
-import org.osgi.service.cdi.annotations.ReferenceScope;
-import org.osgi.service.cdi.annotations.ServiceEvent;
+import org.osgi.service.cdi.reference.ReferenceServiceObjects;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO.Policy;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO.PolicyOption;
import org.osgi.util.converter.TypeReference;
-import org.xml.sax.Attributes;
public class ReferenceModel {
public static class Builder {
- public Builder(Attributes attributes) {
- _cardinality = _cardinality(attributes);
- _name = _name(attributes);
- _option = _option(attributes);
- _policy = _policy(attributes);
- _scope = _scope(attributes);
- _target = _target(attributes);
- }
-
- public Builder(Set<Annotation> qualifiers) {
- _qualifiers = qualifiers;
- Reference reference = getQualifier(_qualifiers, Reference.class);
- if (reference != null) {
- _cardinality = reference.cardinality();
- _name = reference.name();
- _option = reference.policyOption();
- _policy = reference.policy();
- _scope = reference.scope();
- _service = reference.service();
- _target = reference.target();
- }
- }
-
public ReferenceModel build() {
- if ((_annotated == null) && (_service == null)) {
- throw new IllegalArgumentException(
- "Either injectionPoint or service must be set!");
- }
+ return new ReferenceModel(_annotated, _member, _qualifiers, _type, _referenceClass);
+ }
- if (_annotated == null) {
- _annotated = new ReferenceAnnotated(_service);
- }
+ public Builder injectionPoint(InjectionPoint injectionPoint) {
+ _annotated = injectionPoint.getAnnotated();
+ _member = injectionPoint.getMember();
+ _qualifiers = injectionPoint.getQualifiers();
+ _type = injectionPoint.getType();
- Type type = upwrapCDITypes(_annotated.getBaseType());
+ if (_annotated instanceof AnnotatedParameter) {
+ AnnotatedParameter<?> parameter = (AnnotatedParameter<?>)_annotated;
- _policy = calculatePolicy(_policy);
- _option = calculatePolicyOption(_option);
- _scope = calculateScope(_scope);
- Multiplicity multiplicity = calculateMultiplicity(_annotated.getBaseType());// we need the pure type to check "Instance"
- _cardinality = calculateCardinality(_cardinality, multiplicity, type);
- CollectionType collectionType = calculateCollectionType(type);
- Class<?> beanClass = calculateBeanClass(type);
- _service = calculateServiceClass(_service, _cardinality, collectionType, type, _annotated);
- _name = calculateName(_name, _service, _annotated);
+ _referenceClass = parameter.getDeclaringCallable().getDeclaringType().getJavaClass();
+ }
+ if (_annotated instanceof AnnotatedField) {
+ AnnotatedField<?> field = (AnnotatedField<?>)_annotated;
- return new ReferenceModel(_service, _cardinality, _name, _policy, _option, _target, _scope, _qualifiers, beanClass, type, collectionType);
- }
+ _referenceClass = field.getDeclaringType().getJavaClass();
+ }
- public Builder cardinality(ReferenceCardinality cardinality) {
- _cardinality = cardinality;
return this;
}
- public Builder annotated(Annotated annotated) {
- _annotated = annotated;
- return this;
- }
+ private Annotated _annotated;
+ private Member _member;
+ private Set<Annotation> _qualifiers;
+ private Class<?> _referenceClass;
+ private Type _type;
- public Builder name(String name) {
- _name = name;
- return this;
- }
+ }
- public Builder option(ReferencePolicyOption option) {
- _option = option;
- return this;
- }
+ public static enum Scope {
+ BUNDLE, PROTOTYPE, SINGLETON
+ }
- public Builder policy(ReferencePolicy policy) {
- _policy = policy;
- return this;
- }
+ private ReferenceModel(
+ Annotated annotated,
+ Member member,
+ Set<Annotation> qualifiers,
+ Type type,
+ Class<?> referenceClass) {
- public Builder scope(ReferenceScope scope) {
- _scope = scope;
- return this;
- }
+ _annotated = annotated;
+ _member = member;
+ _qualifiers = qualifiers;
+ _injectionPointType = type;
+ _referenceClass = referenceClass;
- public Builder service(Class<?> service) {
- _service = service;
- return this;
- }
+ calculateServiceType(_injectionPointType);
- public Builder target(String target) {
- _target = target;
- return this;
- }
+ Reference reference = _annotated.getAnnotation(Reference.class);
- @SuppressWarnings("unchecked")
- private static <T extends Annotation> T getQualifier(
- Set<Annotation> qualifiers, Class<T> clazz) {
- for (Annotation annotation : qualifiers) {
- if (clazz.isAssignableFrom(annotation.annotationType())) {
- return (T)annotation;
- }
+ if ((reference != null) && (reference.value() != null) && (reference.value() != Object.class)) {
+ if (!_serviceType.isAssignableFrom(reference.value())) {
+ throw new IllegalArgumentException(
+ "The service type specified in @Reference (" + reference.value() +
+ ") is not compatible with the type calculated from the injection point: " +
+ _serviceType);
}
- return null;
+ _serviceType = reference.value();
}
- private ReferenceCardinality _cardinality;
- private Annotated _annotated;
- private String _name;
- private ReferencePolicyOption _option;
- private ReferencePolicy _policy;
- private Set<Annotation> _qualifiers;
- private ReferenceScope _scope;
- private Class<?> _service;
- private String _target;
+ Type rawType = _injectionPointType;
- }
+ if (rawType instanceof ParameterizedType) {
+ ParameterizedType pt = cast(_injectionPointType);
- private ReferenceModel(
- Class<?> service,
- ReferenceCardinality cardinality,
- String name,
- ReferencePolicy policy,
- ReferencePolicyOption option,
- String target,
- ReferenceScope scope,
- Set<Annotation> qualifiers,
- Class<?> beanClass,
- Type injectionPointType,
- CollectionType collectionType) {
-
- _service = service;
- _cardinality = cardinality;
- _name = name;
- _policy = policy;
- _option = option;
- _target = target;
- _scope = scope;
- _qualifiers = new LinkedHashSet<>();
- if (qualifiers != null) {
- _qualifiers.addAll(qualifiers);
+ rawType = pt.getRawType();
}
- _beanClass = beanClass;
- _injectionPointType = injectionPointType;
- _collectionType = collectionType;
- _types = Sets.immutableHashSet(_injectionPointType, Object.class);
- }
+ _beanClass = cast(rawType);
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((_beanClass == null) ? 0 : _beanClass.hashCode());
- result = prime * result + ((_cardinality == null) ? 0 : _cardinality.hashCode());
- result = prime * result + ((_name == null) ? 0 : _name.hashCode());
- result = prime * result + ((_option == null) ? 0 : _option.hashCode());
- result = prime * result + ((_policy == null) ? 0 : _policy.hashCode());
- result = prime * result + ((_scope == null) ? 0 : _scope.hashCode());
- result = prime * result + ((_service == null) ? 0 : _service.hashCode());
- result = prime * result + ((_target == null) ? 0 : _target.hashCode());
- return result;
- }
+ _name = calculateName(_serviceType, _annotated);
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- ReferenceModel other = (ReferenceModel) obj;
- if (_beanClass == null) {
- if (other._beanClass != null)
- return false;
- } else if (!_beanClass.equals(other._beanClass))
- return false;
- if (_cardinality != other._cardinality)
- return false;
- if (_name == null) {
- if (other._name != null)
- return false;
- } else if (!_name.equals(other._name))
- return false;
- if (_option != other._option)
- return false;
- if (_policy != other._policy)
- return false;
- if (_scope != other._scope)
- return false;
- if (_service == null) {
- if (other._service != null)
- return false;
- } else if (!_service.equals(other._service))
- return false;
- if (_target == null) {
- if (other._target != null)
- return false;
- } else if (!_target.equals(other._target))
- return false;
- return true;
- }
-
- public boolean found() {
- return _found.get();
+ if (_annotated.isAnnotationPresent(Greedy.class)) {
+ _greedy = true;
+ }
}
- public void found(boolean found) {
- _found.set(found);
+ public Annotated getAnnotated() {
+ return _annotated;
}
public Class<?> getBeanClass() {
return _beanClass;
}
- public ReferenceCardinality getCardinality() {
- return _cardinality;
- }
-
public CollectionType getCollectionType() {
return _collectionType;
}
@@ -293,43 +158,43 @@ public class ReferenceModel {
return _name;
}
- public ReferencePolicy getPolicy() {
- return _policy;
- }
-
- public ReferencePolicyOption getPolicyOption() {
- return _option;
+ public Member getMember() {
+ return _member;
}
public Set<Annotation> getQualifiers() {
return _qualifiers;
}
- public ReferenceScope getScope() {
- return _scope;
- }
-
- public Class<?> getServiceClass() {
- return _service;
+ public Class<?> getServiceType() {
+ return _serviceType;
}
public String getTarget() {
- return _target;
+ return _targetFilter;
}
public Set<Type> getTypes() {
- return _types;
+ return null; // TODO _types;
+ }
+
+ public boolean dynamic() {
+ return _dynamic;
}
- public void setQualifiers(Set<Annotation> qualifiers) {
- _qualifiers.clear();
- _qualifiers.addAll(qualifiers);
+ public boolean optional() {
+ return _optional;
+ }
+
+ public boolean unary() {
+ return _multiplicity == MaximumCardinality.ONE;
}
@Override
public String toString() {
if (_string == null) {
- _string = String.format("reference[name='%s', service='%s', scope='%s', target='%s']", _name, _service, _scope, _target);
+ //_string = String.format("reference[name='%s', service='%s', scope='%s', target='%s']", _name, _service, _scope, _target);
+ _string = super.toString();
}
return _string;
}
@@ -337,7 +202,7 @@ public class ReferenceModel {
public static String buildFilter(
Class<?> serviceType,
String target,
- ReferenceScope scope,
+ Scope scope,
Set<Annotation> qualifiers)
throws InvalidSyntaxException {
@@ -349,27 +214,13 @@ public class ReferenceModel {
sb.append(serviceType.getName());
sb.append(")");
- if (scope == ReferenceScope.PROTOTYPE) {
+ if (scope == Scope.PROTOTYPE) {
sb.append("(");
sb.append(Constants.SERVICE_SCOPE);
sb.append("=");
sb.append(Constants.SCOPE_PROTOTYPE);
sb.append(")");
}
- else if (scope == ReferenceScope.SINGLETON) {
- sb.append("(");
- sb.append(Constants.SERVICE_SCOPE);
- sb.append("=");
- sb.append(Constants.SCOPE_SINGLETON);
- sb.append(")");
- }
- else if (scope == ReferenceScope.BUNDLE) {
- sb.append("(");
- sb.append(Constants.SERVICE_SCOPE);
- sb.append("=");
- sb.append(Constants.SCOPE_BUNDLE);
- sb.append(")");
- }
String targetFilter = target == null ? "" : target;
@@ -400,344 +251,398 @@ public class ReferenceModel {
return sb.toString();
}
- private static Class<?> calculateBeanClass(Type type) {
- if (type instanceof ParameterizedType) {
- ParameterizedType pType = (ParameterizedType)type;
-
- type = pType.getRawType();
- }
- else if (type instanceof WildcardType) {
- throw new IllegalArgumentException(
- "Cannot use a wildcard as the bean: " + type);
- }
+// private static Class<?> calculateBeanClass(Type type) {
+// if (type instanceof ParameterizedType) {
+// ParameterizedType pType = (ParameterizedType)type;
+//
+// type = pType.getRawType();
+// }
+// else if (type instanceof WildcardType) {
+// throw new IllegalArgumentException(
+// "Cannot use a wildcard as the bean: " + type);
+// }
+//
+// return cast(type);
+// }
+
+// private static CollectionType calculateCollectionType(Type type) {
+// if (type instanceof ParameterizedType) {
+// ParameterizedType parameterizedType = cast(type);
+//
+// Type rawType = parameterizedType.getRawType();
+//
+// if ((List.class == cast(rawType)) ||
+// Collection.class.isAssignableFrom(cast(rawType))) {
+//
+// Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+//
+// return calculateCollectionType(actualTypeArguments[0]);
+// }
+// else if (Map.class == cast(rawType)) {
+// Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+//
+// Type first = actualTypeArguments[0];
+// Type second = actualTypeArguments[1];
+//
+// if (!(first instanceof ParameterizedType) &&
+// String.class.isAssignableFrom(cast(first))) {
+//
+// if ((!(second instanceof ParameterizedType) && (second == Object.class)) ||
+// (second instanceof WildcardType)) {
+//
+// return CollectionType.PROPERTIES;
+// }
+// }
+// }
+// else if (Map.Entry.class == cast(rawType)) {
+// return CollectionType.TUPLE;
+// }
+// else if (ServiceObjects.class == cast(rawType)) {
+// return CollectionType.SERVICEOBJECTS;
+// }
+// else if (ServiceReference.class == cast(rawType)) {
+// return CollectionType.REFERENCE;
+// }
+// }
+// else if (Map.Entry.class == cast(type)) {
+// return CollectionType.TUPLE;
+// }
+// else if (ServiceObjects.class == cast(type)) {
+// return CollectionType.SERVICEOBJECTS;
+// }
+// else if (ServiceReference.class == cast(type)) {
+// return CollectionType.REFERENCE;
+// }
+//
+// return CollectionType.SERVICE;
+// }
+
+// private static ReferenceCardinality calculateCardinality(
+// ReferenceCardinality cardinality, Multiplicity multiplicity, Type type) {
+//
+// if ((multiplicity == Multiplicity.UNARY) &&
+// ((cardinality == ReferenceCardinality.AT_LEAST_ONE) || (cardinality == ReferenceCardinality.MULTIPLE))) {
+//
+// throw new IllegalArgumentException(
+// format(
+// "Unary injection point type %s cannot be defined by multiple cardinality %s",
+// type, cardinality));
+// }
+// else if ((multiplicity == Multiplicity.MULTIPLE) &&
+// ((cardinality == ReferenceCardinality.OPTIONAL) || (cardinality == ReferenceCardinality.MANDATORY))) {
+//
+// throw new IllegalArgumentException(
+// format(
+// "Multiple injection point type %s cannot be defined by unary cardinality %s",
+// type, cardinality));
+// }
+//
+// if ((cardinality == null) || (cardinality == ReferenceCardinality.DEFAULT)) {
+// switch(multiplicity) {
+// case MULTIPLE:
+// return ReferenceCardinality.MULTIPLE;
+// case UNARY:
+// return ReferenceCardinality.MANDATORY;
+// }
+// }
+//
+// return cardinality;
+// }
+
+// private static Multiplicity calculateMultiplicity(Type type) {
+// if (type instanceof ParameterizedType) {
+// ParameterizedType parameterizedType = cast(type);
+//
+// Type rawType = parameterizedType.getRawType();
+//
+// if ((Instance.class == cast(rawType)) ||
+// Collection.class.isAssignableFrom(cast(rawType)) ||
+// ServiceEvent.class == cast(rawType)) {
+//
+// return Multiplicity.MULTIPLE;
+// }
+// }
+//
+// return Multiplicity.UNARY;
+// }
- return cast(type);
- }
+ private String calculateName(Class<?> service, Annotated annotated) {
+ Named named = annotated.getAnnotation(Named.class);
- private static CollectionType calculateCollectionType(Type type) {
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = cast(type);
+ if (named != null) {
+ if (named.value() == null | named.value().equals("")) {
+ throw new IllegalArgumentException(
+ "It's illegal to specify @Name without specifying a value with @Reference: " +
+ annotated);
+ }
+ return named.value();
+ }
- Type rawType = parameterizedType.getRawType();
+ String prefix = _referenceClass.getName() + ".";
- if ((List.class == cast(rawType)) ||
- Collection.class.isAssignableFrom(cast(rawType))) {
+ if (annotated instanceof AnnotatedParameter) {
+ AnnotatedParameter<?> parameter = (AnnotatedParameter<?>)annotated;
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+ AnnotatedCallable<?> declaringCallable = parameter.getDeclaringCallable();
- return calculateCollectionType(actualTypeArguments[0]);
+ if (declaringCallable instanceof AnnotatedConstructor) {
+ return prefix + "new" + parameter.getPosition();
}
- else if (Map.class == cast(rawType)) {
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
-
- Type first = actualTypeArguments[0];
- Type second = actualTypeArguments[1];
+ else {
+ AnnotatedMethod<?> method = (AnnotatedMethod<?>)declaringCallable;
- if (!(first instanceof ParameterizedType) &&
- String.class.isAssignableFrom(cast(first))) {
+ return prefix + method.getJavaMember().getName() + parameter.getPosition();
+ }
+ }
+ else {
+ AnnotatedField<?> annotatedField = (AnnotatedField<?>)annotated;
- if ((!(second instanceof ParameterizedType) && (second == Object.class)) ||
- (second instanceof WildcardType)) {
+ return prefix + annotatedField.getJavaMember().getName();
+ }
+ }
- return CollectionType.PROPERTIES;
- }
- }
+ private void calculateServiceType(Type type) {
+ if (!(type instanceof ParameterizedType)) {
+ if (!(type instanceof Class)) {
+ throw new IllegalArgumentException(
+ "The service type must not be generic: " + type);
}
- else if (Map.Entry.class == cast(rawType)) {
- return CollectionType.TUPLE;
+ else if (Map.class == cast(type)) {
+ throw new IllegalArgumentException(
+ "Map must specify a generic type arguments: " + type);
}
- else if (ServiceObjects.class == cast(rawType)) {
- return CollectionType.SERVICEOBJECTS;
+ else if (Map.Entry.class == cast(type)) {
+ throw new IllegalArgumentException(
+ "Map.Entry must specify a generic type arguments: " + type);
}
- else if (ServiceReference.class == cast(rawType)) {
- return CollectionType.REFERENCE;
+ else if (ReferenceServiceObjects.class == cast(type)) {
+ throw new IllegalArgumentException(
+ "ReferenceServiceObjects must specify a generic type argument: " + type);
+ }
+ else if (ServiceReference.class == cast(type)) {
+ throw new IllegalArgumentException(
+ "ServiceReference must specify a generic type argument: " + type);
}
- }
- else if (Map.Entry.class == cast(type)) {
- return CollectionType.TUPLE;
- }
- else if (ServiceObjects.class == cast(type)) {
- return CollectionType.SERVICEOBJECTS;
- }
- else if (ServiceReference.class == cast(type)) {
- return CollectionType.REFERENCE;
- }
- return CollectionType.SERVICE;
- }
+ _serviceType = cast(type);
- private static ReferenceCardinality calculateCardinality(
- ReferenceCardinality cardinality, Multiplicity multiplicity, Type type) {
+ return;
+ }
- if ((multiplicity == Multiplicity.UNARY) &&
- ((cardinality == ReferenceCardinality.AT_LEAST_ONE) || (cardinality == ReferenceCardinality.MULTIPLE))) {
+ ParameterizedType parameterizedType = cast(type);
- throw new IllegalArgumentException(
- format(
- "Unary injection point type %s cannot be defined by multiple cardinality %s",
- type, cardinality));
- }
- else if ((multiplicity == Multiplicity.MULTIPLE) &&
- ((cardinality == ReferenceCardinality.OPTIONAL) || (cardinality == ReferenceCardinality.MANDATORY))) {
+ Type rawType = parameterizedType.getRawType();
+ if (Instance.class == cast(rawType)) {
throw new IllegalArgumentException(
- format(
- "Multiple injection point type %s cannot be defined by unary cardinality %s",
- type, cardinality));
+ "Instance<T> is not supported with @Reference: " + type);
}
- if ((cardinality == null) || (cardinality == ReferenceCardinality.DEFAULT)) {
- switch(multiplicity) {
- case MULTIPLE:
- return ReferenceCardinality.MULTIPLE;
- case UNARY:
- return ReferenceCardinality.MANDATORY;
- }
- }
-
- return cardinality;
- }
-
- private static Multiplicity calculateMultiplicity(Type type) {
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = cast(type);
+ if ((!_dynamic) && (Provider.class == cast(rawType))) {
+ _dynamic = true;
- Type rawType = parameterizedType.getRawType();
+ calculateServiceType(parameterizedType.getActualTypeArguments()[0]);
- if ((Instance.class == cast(rawType)) ||
- Collection.class.isAssignableFrom(cast(rawType)) ||
- ServiceEvent.class == cast(rawType)) {
-
- return Multiplicity.MULTIPLE;
- }
+ return;
}
- return Multiplicity.UNARY;
- }
+ if ((!_optional) && (Optional.class == cast(rawType))) {
+ _optional = true;
- public static String calculateName(String name, Class<?> service, Annotated annotated) {
- if ((name != null) && (name.length() > 0)) {
- return name;
- }
-
- if (annotated != null) {
- if (annotated instanceof AnnotatedParameter) {
- AnnotatedParameter<?> annotatedParameter = (AnnotatedParameter<?>)annotated;
-
- return Types.getName(service) + annotatedParameter.getPosition();
- }
- if (annotated instanceof AnnotatedField) {
- AnnotatedField<?> annotatedField = (AnnotatedField<?>)annotated;
+ calculateServiceType(parameterizedType.getActualTypeArguments()[0]);
- return annotatedField.getJavaMember().getName();
- }
+ return;
}
- return Types.getName(service);
- }
+ if ((_multiplicity == MaximumCardinality.ONE) &&
+ ((Collection.class == cast(rawType)) ||
+ (Iterable.class == cast(rawType)) ||
+ (List.class == cast(rawType)))) {
- private static ReferencePolicy calculatePolicy(ReferencePolicy policy) {
- if ((policy == null) || (policy == ReferencePolicy.DEFAULT)) {
- return ReferencePolicy.STATIC;
- }
+ _optional = true;
+ _multiplicity = MaximumCardinality.MANY;
- return policy;
- }
+ calculateServiceType(parameterizedType.getActualTypeArguments()[0]);
- private static ReferencePolicyOption calculatePolicyOption(ReferencePolicyOption option) {
- if ((option == null) || (option == ReferencePolicyOption.DEFAULT)) {
- return ReferencePolicyOption.RELUCTANT;
+ return;
}
- return option;
- }
-
- private static ReferenceScope calculateScope(ReferenceScope scope) {
- if ((scope == null) || (scope == ReferenceScope.DEFAULT)) {
- return ReferenceScope.DEFAULT;
- }
-
- return scope;
- }
-
- private static Class<?> calculateServiceClass(Type injectionPointType) {
- Type type = injectionPointType;
-
- if (!(type instanceof ParameterizedType)) {
- return cast(type);
- }
+ Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
- ParameterizedType parameterizedType = cast(type);
+ Type argument = actualTypeArguments[0];
- Type rawType = parameterizedType.getRawType();
+ if (Map.class == cast(rawType)) {
+ if (String.class != cast(argument)) {
+ throw new IllegalArgumentException(
+ "Maps of properties must use the form Map<String, (? | Object)>: " + type);
+ }
- if ((List.class == cast(rawType)) ||
- Collection.class.isAssignableFrom(cast(rawType))) {
+ argument = actualTypeArguments[1];
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+ if ((Object.class != cast(argument)) &&
+ (!(argument instanceof WildcardType))) {
- type = actualTypeArguments[0];
+ throw new IllegalArgumentException(
+ "Maps of properties must use the form Map<String, (? | Object)>: " + type);
+ }
- if (type instanceof ParameterizedType) {
- parameterizedType = (ParameterizedType)type;
+ _collectionType = CollectionType.PROPERTIES;
- rawType = parameterizedType.getRawType();
- }
- else if ((type instanceof WildcardType) ||
- Map.Entry.class.isAssignableFrom(cast(type))) {
+ Reference reference = _annotated.getAnnotation(Reference.class);
- return null;
- }
- else {
- rawType = type;
+ if ((reference == null) || (reference.value() == null)) {
+ throw new IllegalArgumentException(
+ "Maps of properties must specify service type with @Reference.value(): " + argument);
}
- }
- if (!Map.Entry.class.isAssignableFrom(cast(rawType)) &&
- !ServiceObjects.class.isAssignableFrom(cast(rawType)) &&
- !ServiceReference.class.isAssignableFrom(cast(rawType))) {
+ _serviceType = reference.value();
- return cast(rawType);
+ return;
}
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
-
- Type argument = actualTypeArguments[0];
-
- if (Map.Entry.class.isAssignableFrom(cast(rawType))) {
+ if (Map.Entry.class == cast(rawType)) {
if (!checkKey(argument)) {
throw new IllegalArgumentException(
- "Tuples must have a key of type Map<String, [? or Object]>: " + argument);
+ "Tuples must have a key of type Map<String, (? | Object)>: " + argument);
}
argument = actualTypeArguments[1];
- }
-
- if (argument instanceof ParameterizedType) {
- ParameterizedType parameterizedType1 = cast(argument);
- return cast(parameterizedType1.getRawType());
- }
- else if (argument instanceof WildcardType) {
- WildcardType wildcardType = (WildcardType)argument;
+ if (!(argument instanceof Class)) {
+ throw new IllegalArgumentException(
+ "The service type must not be generic: " + argument);
+ }
- if ((wildcardType.getUpperBounds().length == 1)) {
- argument = wildcardType.getUpperBounds()[0];
+ _collectionType = CollectionType.TUPLE;
- if (Object.class.equals(argument)) {
- return null;
- }
- else if (argument instanceof Class) {
- return cast(argument);
- }
- }
+ _serviceType = cast(argument);
- throw new IllegalArgumentException(
- "@Reference cannot use nested parameterized types or multiple upper bounds: " + injectionPointType);
+ return;
}
- return cast(argument);
- }
-
- private static Class<?> calculateServiceClass(
- Class<?> service, ReferenceCardinality cardinality, CollectionType collectionType, Type injectionPointType, Annotated annotated) {
+ if (ReferenceServiceObjects.class == cast(rawType)) {
+ _collectionType = CollectionType.SERVICEOBJECTS;
- Class<?> calculatedServiceClass = calculateServiceClass(injectionPointType);
+ calculateServiceType(argument);
- if ((service == null) || (service == Object.class)) {
- if (calculatedServiceClass == null) {
- throw new IllegalArgumentException(
- "Could not determine the service type from @Reference on annotated " +
- annotated);
- }
+ return;
+ }
- switch(collectionType) {
- case PROPERTIES:
- if (calculatedServiceClass == Map.class) {
- throw new IllegalArgumentException(
- "A @Reference cannot bind service properties to a Map<String, Object> without " +
- "specifying the @Reference.service property: " + annotated);
- }
- break;
- case REFERENCE:
- if (calculatedServiceClass == ServiceReference.class) {
- throw new IllegalArgumentException(
- "A @Reference cannot bind a ServiceReference without specifying either the " +
- "@Reference.service property or a generic type argument (e.g. ServiceReference<Foo>: " +
- annotated);
- }
- break;
- case SERVICEOBJECTS:
- if (calculatedServiceClass == ServiceObjects.class) {
- throw new IllegalArgumentException(
- "A @Reference cannot bind a ServiceObjects without specifying either the " +
- "@Reference.service property or a generic type argument (e.g. ServiceObjects<Foo>: " +
- annotated);
- }
- break;
- case TUPLE:
- if (calculatedServiceClass == Map.Entry.class) {
- throw new IllegalArgumentException(
- "A @Reference cannot bind a Map.Entry without specifying either the " +
- "@Reference.service property or a generic type argument (e.g. Map.Entry<Map<String, Object>, Foo>: " +
- annotated);
- }
- break;
- default:
- }
-
- return calculatedServiceClass;
- }
-
- switch(collectionType) {
- case PROPERTIES:
- if (Map.class.isAssignableFrom(calculatedServiceClass)) {
- return service;
- }
- break;
- case REFERENCE:
- if ((calculatedServiceClass == null) ||
- ServiceReference.class.isAssignableFrom(calculatedServiceClass)) {
- return service;
- }
- break;
- case SERVICEOBJECTS:
- if ((calculatedServiceClass == null) ||
- ServiceObjects.class.isAssignableFrom(calculatedServiceClass)) {
- return service;
- }
- break;
- case TUPLE:
- if ((calculatedServiceClass != null) &&
- Map.Entry.class.isAssignableFrom(calculatedServiceClass)) {
-
- if (!checkKey(calculatedServiceClass)) {
- throw new IllegalArgumentException(
- "Tuples must have a key of type Map<String, [? or Object]>: " + calculatedServiceClass);
- }
+ if (ServiceReference.class == cast(rawType)) {
+ _collectionType = CollectionType.REFERENCE;
- return service;
- }
- else if ((calculatedServiceClass == null) ||
- calculatedServiceClass.isAssignableFrom(service)) {
+ calculateServiceType(argument);
- return service;
- }
- break;
- case SERVICE:
- if (((calculatedServiceClass == null) &&
- ((cardinality == ReferenceCardinality.MULTIPLE) ||
- (cardinality == ReferenceCardinality.AT_LEAST_ONE))) ||
- ((calculatedServiceClass != null) &&
- calculatedServiceClass.isAssignableFrom(service))) {
- return service;
- }
+ return;
}
- throw new IllegalArgumentException(
- "@Reference.service " + service + " is not compatible with annotated " + annotated);
+ _serviceType = cast(rawType);
+
+ if (_serviceType.getTypeParameters().length > 0) {
+ throw new IllegalArgumentException(
+ "Illegal service type: " + argument);
+ }
}
+// private static Class<?> calculateServiceClass(
+// Class<?> service, ReferenceCardinality cardinality, CollectionType collectionType, Type injectionPointType, Annotated annotated) {
+//
+// Class<?> calculatedServiceClass = calculateServiceClass(injectionPointType);
+//
+// if ((service == null) || (service == Object.class)) {
+// if (calculatedServiceClass == null) {
+// throw new IllegalArgumentException(
+// "Could not determine the service type from @Reference on annotated " +
+// annotated);
+// }
+//
+// switch(collectionType) {
+// case PROPERTIES:
+// if (calculatedServiceClass == Map.class) {
+// throw new IllegalArgumentException(
+// "A @Reference cannot bind service properties to a Map<String, Object> without " +
+// "specifying the @Reference.service property: " + annotated);
+// }
+// break;
+// case REFERENCE:
+// if (calculatedServiceClass == ServiceReference.class) {
+// throw new IllegalArgumentException(
+// "A @Reference cannot bind a ServiceReference without specifying either the " +
+// "@Reference.service property or a generic type argument (e.g. ServiceReference<Foo>: " +
+// annotated);
+// }
+// break;
+// case SERVICEOBJECTS:
+// if (calculatedServiceClass == ServiceObjects.class) {
+// throw new IllegalArgumentException(
+// "A @Reference cannot bind a ServiceObjects without specifying either the " +
+// "@Reference.service property or a generic type argument (e.g. ServiceObjects<Foo>: " +
+// annotated);
+// }
+// break;
+// case TUPLE:
+// if (calculatedServiceClass == Map.Entry.class) {
+// throw new IllegalArgumentException(
+// "A @Reference cannot bind a Map.Entry without specifying either the " +
+// "@Reference.service property or a generic type argument (e.g. Map.Entry<Map<String, Object>, Foo>: " +
+// annotated);
+// }
+// break;
+// default:
+// }
+//
+// return calculatedServiceClass;
+// }
+//
+// switch(collectionType) {
+// case PROPERTIES:
+// if (Map.class.isAssignableFrom(calculatedServiceClass)) {
+// return service;
+// }
+// break;
+// case REFERENCE:
+// if ((calculatedServiceClass == null) ||
+// ServiceReference.class.isAssignableFrom(calculatedServiceClass)) {
+// return service;
+// }
+// break;
+// case SERVICEOBJECTS:
+// if ((calculatedServiceClass == null) ||
+// ServiceObjects.class.isAssignableFrom(calculatedServiceClass)) {
+// return service;
+// }
+// break;
+// case TUPLE:
+// if ((calculatedServiceClass != null) &&
+// Map.Entry.class.isAssignableFrom(calculatedServiceClass)) {
+//
+// if (!checkKey(calculatedServiceClass)) {
+// throw new IllegalArgumentException(
+// "Tuples must have a key of type Map<String, [? or Object]>: " + calculatedServiceClass);
+// }
+//
+// return service;
+// }
+// else if ((calculatedServiceClass == null) ||
+// calculatedServiceClass.isAssignableFrom(service)) {
+//
+// return service;
+// }
+// break;
+// case SERVICE:
+// if (((calculatedServiceClass == null) &&
+// ((cardinality == ReferenceCardinality.MULTIPLE) ||
+// (cardinality == ReferenceCardinality.AT_LEAST_ONE))) ||
+// ((calculatedServiceClass != null) &&
+// calculatedServiceClass.isAssignableFrom(service))) {
+// return service;
+// }
+// }
+//
+// throw new IllegalArgumentException(
+// "@Reference.service " + service + " is not compatible with annotated " + annotated);
+// }
+
// check the key type to make sure it complies with Map<String, ?> OR Map<String, Object>
private static boolean checkKey(Type mapEntryType) {
if (!(mapEntryType instanceof ParameterizedType)) {
@@ -766,105 +671,51 @@ public class ReferenceModel {
return true;
}
- private static ReferenceCardinality _cardinality(Attributes attributes) {
- return ReferenceCardinality.get(
- getValue(CDI10_URI, CARDINALITY_ATTRIBUTE, attributes, ReferenceCardinality.DEFAULT.toString()));
- }
-
- private static String _name(Attributes attributes) {
- return getValue(CDI10_URI, NAME_ATTRIBUTE, attributes);
+// private static Type upwrapCDITypes(Type type) {
+// if (type instanceof ParameterizedType) {
+// ParameterizedType pType = (ParameterizedType)type;
+//
+// Type rawType = pType.getRawType();
+//
+// if (Instance.class == Reflection.cast(rawType) ||
+// ServiceEvent.class == Reflection.cast(rawType)) {
+//
+// type = pType.getActualTypeArguments()[0];
+// }
+// }
+//
+// return type;
+// }
+
+ public ReferenceTemplateDTO toDTO() {
+ ReferenceTemplateDTO dto = new ReferenceTemplateDTO();
+ dto.maximumCardinality = _multiplicity;
+ dto.minimumCardinality = (_multiplicity == MaximumCardinality.ONE) ? (_optional?0:1) : (0);
+ dto.name = _name;
+ dto.policy = (_dynamic) ? Policy.DYNAMIC : Policy.STATIC;
+ dto.policyOption = (_greedy) ? PolicyOption.GREEDY: PolicyOption.RELUCTANT;
+ dto.targetFilter = _targetFilter;
+ dto.serviceType = _serviceType.getName();
+ return dto;
}
- private static ReferencePolicyOption _option(Attributes attributes) {
- return ReferencePolicyOption.get(
- getValue(CDI10_URI, POLICY_OPTION_ATTRIBUTE, attributes, ReferencePolicyOption.DEFAULT.toString()));
- }
-
- private static ReferencePolicy _policy(Attributes attributes) {
- return ReferencePolicy.get(
- getValue(CDI10_URI, POLICY_ATTRIBUTE, attributes, ReferencePolicy.DEFAULT.toString()));
- }
-
- private static ReferenceScope _scope(Attributes attributes) {
- return ReferenceScope.get(getValue(
- CDI10_URI, SCOPE_ATTRIBUTE, attributes, ReferenceScope.DEFAULT.toString()));
- }
-
- private static String _target(Attributes attributes) {
- return getValue(CDI10_URI, TARGET_ATTRIBUTE, attributes);
- }
-
- private static Type upwrapCDITypes(Type type) {
- if (type instanceof ParameterizedType) {
- ParameterizedType pType = (ParameterizedType)type;
-
- Type rawType = pType.getRawType();
-
- if (Instance.class == cast(rawType) ||
- ServiceEvent.class == cast(rawType)) {
-
- type = pType.getActualTypeArguments()[0];
- }
- }
-
- return type;
- }
+ private static final String _emptyFilter = "";
private static final TypeReference<Map<String, String>> _mapType = new TypeReference<Map<String, String>>(){};
- private final Class<?> _beanClass;
- private final ReferenceCardinality _cardinality;
- private final CollectionType _collectionType;
- private final AtomicBoolean _found = new AtomicBoolean();
+ private final Annotated _annotated;
+ private Class<?> _beanClass;
+ private CollectionType _collectionType = CollectionType.SERVICE;
+ private boolean _dynamic = false;
+ private boolean _greedy = false;
private final Type _injectionPointType;
- private final String _name;
- private final ReferencePolicyOption _option;
- private final ReferencePolicy _policy;
+ private final Member _member;
+ private MaximumCardinality _multiplicity = MaximumCardinality.ONE;
+ private String _name;
+ private boolean _optional = false;
private final Set<Annotation> _qualifiers;
- private final ReferenceScope _scope;
- private final Class<?> _service;
+ private Class<?> _referenceClass;
+ private Class<?> _serviceType;
private String _string;
- private final String _target;
- private final Set<Type> _types;
-
- private static class ReferenceAnnotated implements Annotated {
-
- public ReferenceAnnotated(Class<?> service) {
- _service = service;
- }
-
- @Override
- public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
- return null;
- }
-
- @Override
- public Set<Annotation> getAnnotations() {
- return Collections.emptySet();
- }
-
- @Override
- public <T extends Annotation> Set<T> getAnnotations(Class<T> annotationType) {
- return null;
- }
-
- @Override
- public Type getBaseType() {
- return _service;
- }
-
- @Override
- public Set<Type> getTypeClosure() {
- return Sets.hashSet(_service);
- }
-
- @Override
- public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
- return false;
- }
-
- private final Class<?> _service;
-
- }
-
+ private String _targetFilter = _emptyFilter;
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/ServiceDeclaration.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/ServiceDeclaration.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/ServiceDeclaration.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/ServiceDeclaration.java Sat Apr 14 01:09:09 2018
@@ -16,17 +16,11 @@ package org.apache.aries.cdi.container.i
import static org.apache.aries.cdi.container.internal.util.Reflection.cast;
-import java.util.Arrays;
-import java.util.Dictionary;
-import java.util.stream.Collectors;
-
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
-import org.apache.aries.cdi.container.internal.component.ComponentProperties;
+import org.apache.aries.cdi.container.internal.component.OSGiBean;
import org.apache.aries.cdi.container.internal.container.ContainerState;
-import org.apache.aries.cdi.container.internal.util.Types;
import org.osgi.framework.Bundle;
import org.osgi.framework.PrototypeServiceFactory;
import org.osgi.framework.ServiceFactory;
@@ -36,7 +30,7 @@ public class ServiceDeclaration {
public ServiceDeclaration(
ContainerState containerState,
- ComponentModel componentModel,
+ OSGiBean componentModel,
Bean<?> bean,
CreationalContext<?> creationalContext) {
@@ -48,7 +42,7 @@ public class ServiceDeclaration {
Object instance = null;
- if (_componentModel.getServiceScope() == ServiceScope.SINGLETON) {
+/* if (_componentModel.getServiceScope() == ServiceScope.SINGLETON) {
instance = new SingletonScopeWrapper();
}
else if (_componentModel.getServiceScope() == ServiceScope.BUNDLE) {
@@ -57,11 +51,11 @@ public class ServiceDeclaration {
else if (_componentModel.getServiceScope() == ServiceScope.PROTOTYPE) {
instance = new PrototypeScopeWrapper();
}
-
+*/
_instance = instance;
}
- public String[] getClassNames() {
+/* public String[] getClassNames() {
return Arrays.stream(
Types.types(_componentModel, _componentModel.getBeanClass(), _containerState.classLoader())
).map(
@@ -80,12 +74,12 @@ public class ServiceDeclaration {
public ServiceScope getScope() {
return _componentModel.getServiceScope();
}
-
+*/
public Object getServiceInstance() {
return _instance;
}
- public Dictionary<String, ?> getServiceProperties() {
+/* public Dictionary<String, ?> getServiceProperties() {
return new ComponentProperties().bean(
_bean
).componentModel(
@@ -94,9 +88,9 @@ public class ServiceDeclaration {
_containerState
).build();
}
-
+*/
private final Bean<?> _bean;
- private final ComponentModel _componentModel;
+ private final OSGiBean _componentModel;
private final ContainerState _containerState;
private final CreationalContext<?> _creationalContext;
private final Object _instance;
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Types.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Types.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Types.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Types.java Sat Apr 14 01:09:09 2018
@@ -17,12 +17,9 @@ package org.apache.aries.cdi.container.i
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
import javax.enterprise.inject.spi.InjectionPoint;
-import org.apache.aries.cdi.container.internal.component.ComponentModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -88,7 +85,7 @@ public class Types {
return type.getTypeName();
}
- public static Class<?>[] types(
+/* public static Class<?>[] types(
ComponentModel componentModel, Class<?> beanClass, ClassLoader classLoader) {
List<Class<?>> classes = new ArrayList<>();
@@ -125,7 +122,7 @@ public class Types {
return classes.toArray(new Class[0]);
}
-
+*/
public static final Logger _log = LoggerFactory.getLogger(Types.class);
}
\ No newline at end of file
Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/Component.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/Component.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/Component.java (added)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/Component.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,19 @@
+package org.apache.aries.cdi.container.internal.v2.component;
+
+import org.osgi.service.cdi.runtime.dto.ComponentDTO;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public interface Component {
+
+ void addConfiguration(ConfigurationTemplateDTO dto);
+
+ void addReference(ReferenceTemplateDTO dto);
+
+ ComponentDTO getSnapshot();
+
+ ComponentTemplateDTO getTemplate();
+
+
+}
Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/ContainerComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/ContainerComponent.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/ContainerComponent.java (added)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/ContainerComponent.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,56 @@
+package org.apache.aries.cdi.container.internal.v2.component;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.osgi.service.cdi.runtime.dto.ComponentDTO;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationPolicy;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class ContainerComponent implements Component {
+
+ public ContainerComponent(String containerId) {
+ _snapshot = new ComponentDTO();
+ _snapshot.template = new ComponentTemplateDTO();
+ _snapshot.template.activations = new CopyOnWriteArrayList<>();
+ _snapshot.template.configurations = new CopyOnWriteArrayList<>();
+
+ ConfigurationTemplateDTO factoryConfig = new ConfigurationTemplateDTO();
+ factoryConfig.componentConfiguration = true;
+ factoryConfig.maximumCardinality = MaximumCardinality.ONE;
+ factoryConfig.pid = containerId;
+ factoryConfig.policy = ConfigurationPolicy.OPTIONAL;
+
+ _snapshot.template.configurations.add(factoryConfig);
+ _snapshot.template.name = containerId;
+ _snapshot.template.references = new CopyOnWriteArrayList<>();
+ _snapshot.template.type = ComponentTemplateDTO.Type.CONTAINER;
+ }
+
+ @Override
+ public void addConfiguration(ConfigurationTemplateDTO dto) {
+ if (dto == null) return;
+ _snapshot.template.configurations.add(dto);
+ }
+
+ @Override
+ public void addReference(ReferenceTemplateDTO dto) {
+ if (dto == null) return;
+ _snapshot.template.references.add(dto);
+ }
+
+ @Override
+ public ComponentDTO getSnapshot() {
+ return _snapshot; // TODO make safe copy using converter
+ }
+
+ @Override
+ public ComponentTemplateDTO getTemplate() {
+ return _snapshot.template; // TODO make safe copy using converter
+ }
+
+ private final ComponentDTO _snapshot;
+
+}