You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/12/04 10:14:21 UTC
svn commit: r482105 - in /incubator/tuscany/java/sca/kernel:
core/src/main/java/org/apache/tuscany/core/builder/
core/src/main/java/org/apache/tuscany/core/loader/
core/src/test/java/org/apache/tuscany/core/loader/
core/src/test/java/org/apache/tuscany...
Author: jmarino
Date: Mon Dec 4 01:14:17 2006
New Revision: 482105
URL: http://svn.apache.org/viewvc?view=rev&rev=482105
Log:
add validation for set references
Added:
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java (with props)
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java (with props)
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingMustOverridePropertyException.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?view=diff&rev=482105&r1=482104&r2=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Mon Dec 4 01:14:17 2006
@@ -159,7 +159,7 @@
// wireService.createWires((Service) object, boundServiceDefinition);
String path = boundServiceDefinition.getTarget().getPath();
ServiceContract<?> contract = boundServiceDefinition.getServiceContract();
- wireService.createWires((Service)object, path, contract);
+ wireService.createWires((Service) object, path, contract);
}
return object;
}
@@ -185,7 +185,7 @@
if (wireService != null) {
String path = serviceDefinition.getTarget().getPath();
ServiceContract<?> contract = serviceDefinition.getServiceContract();
- wireService.createWires((Service)object, path, contract);
+ wireService.createWires((Service) object, path, contract);
}
return object;
}
@@ -199,4 +199,5 @@
}
return object;
}
+
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=482105&r1=482104&r2=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Mon Dec 4 01:14:17 2006
@@ -47,6 +47,7 @@
import org.apache.tuscany.spi.loader.LoaderUtil;
import org.apache.tuscany.spi.loader.MissingImplementationException;
import org.apache.tuscany.spi.loader.MissingMustOverridePropertyException;
+import org.apache.tuscany.spi.loader.MissingReferenceException;
import org.apache.tuscany.spi.loader.NotOverridablePropertyException;
import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.loader.UndefinedPropertyException;
@@ -57,6 +58,7 @@
import org.apache.tuscany.spi.model.OverrideOptions;
import org.apache.tuscany.spi.model.Property;
import org.apache.tuscany.spi.model.PropertyValue;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
import org.apache.tuscany.spi.model.ReferenceTarget;
import org.apache.tuscany.core.implementation.system.model.SystemImplementation;
@@ -84,34 +86,6 @@
this.propertyFactory = propertyFactory;
}
- @SuppressWarnings("unchecked")
- protected void populatePropertyValues(ComponentDefinition<Implementation<?>> componentDefinition)
- throws MissingMustOverridePropertyException {
- ComponentType componentType = componentDefinition.getImplementation().getComponentType();
- if (componentType != null) {
- Map<String, Property<?>> properties = componentType.getProperties();
- Map<String, PropertyValue<?>> propertyValues = componentDefinition.getPropertyValues();
-
- for (Property<?> aProperty : properties.values()) {
- if (propertyValues.get(aProperty.getName()) == null) {
- if (aProperty.getOverride() == OverrideOptions.MUST) {
- throw new MissingMustOverridePropertyException(aProperty.getName());
- } else if (aProperty.getDefaultValue() != null) {
- //} else {
- PropertyValue propertyValue = new PropertyValue();
- propertyValue.setName(aProperty.getName());
- propertyValue.setValue(aProperty.getDefaultValue());
- // propertyValue.setValueFactory(aProperty.getDefaultValueFactory());
- propertyValue.setValueFactory(new SimplePropertyObjectFactory(aProperty,
- propertyValue
- .getValue()));
- propertyValues.put(aProperty.getName(), propertyValue);
- }
- }
- }
- }
- }
-
public QName getXMLType() {
return COMPONENT;
}
@@ -164,7 +138,7 @@
.getImplementation() instanceof SystemImplementation)) {
populatePropertyValues(componentDefinition);
}
-
+ validate(componentDefinition);
return componentDefinition;
}
break;
@@ -231,7 +205,7 @@
String text = reader.getElementText();
String target = text != null ? text.trim() : null;
-
+
if (name == null || target == null) {
InvalidReferenceException le = new InvalidReferenceException();
le.setIdentifier(target);
@@ -250,4 +224,52 @@
componentDefinition.add(referenceTarget);
}
+ @SuppressWarnings("unchecked")
+ protected void populatePropertyValues(ComponentDefinition<Implementation<?>> componentDefinition)
+ throws MissingMustOverridePropertyException {
+ ComponentType componentType = componentDefinition.getImplementation().getComponentType();
+ if (componentType != null) {
+ Map<String, Property<?>> properties = componentType.getProperties();
+ Map<String, PropertyValue<?>> propertyValues = componentDefinition.getPropertyValues();
+
+ for (Property<?> aProperty : properties.values()) {
+ if (propertyValues.get(aProperty.getName()) == null) {
+ if (aProperty.getOverride() == OverrideOptions.MUST) {
+ throw new MissingMustOverridePropertyException(aProperty.getName());
+ } else if (aProperty.getDefaultValue() != null) {
+ //} else {
+ PropertyValue propertyValue = new PropertyValue();
+ propertyValue.setName(aProperty.getName());
+ propertyValue.setValue(aProperty.getDefaultValue());
+ // propertyValue.setValueFactory(aProperty.getDefaultValueFactory());
+ propertyValue.setValueFactory(new SimplePropertyObjectFactory(aProperty,
+ propertyValue
+ .getValue()));
+ propertyValues.put(aProperty.getName(), propertyValue);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Validates a component definition, ensuring all component type configuration elements are satisfied
+ */
+ protected void validate(ComponentDefinition<Implementation<?>> definition) throws LoaderException {
+ // validate refererences
+ Implementation<?> implementation = definition.getImplementation();
+ ComponentType<?, ?, ?> type = implementation.getComponentType();
+ if (type == null) {
+ return;
+ }
+ for (ReferenceDefinition referenceDef : type.getReferences().values()) {
+ if (referenceDef.isAutowire() || !referenceDef.isRequired()) {
+ continue;
+ }
+ String name = referenceDef.getName();
+ if (!definition.getReferenceTargets().containsKey(name)) {
+ throw new MissingReferenceException(name);
+ }
+ }
+ }
}
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java?view=auto&rev=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java Mon Dec 4 01:14:17 2006
@@ -0,0 +1,105 @@
+package org.apache.tuscany.core.loader;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.spi.implementation.java.PojoComponentType;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.MissingReferenceException;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
+import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.apache.tuscany.spi.model.ReferenceTarget;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.implementation.java.JavaImplementation;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ComponentLoaderValidationTestCase extends TestCase {
+
+ private ComponentLoaderValidationTestCase.TestLoader loader;
+
+ public void testValidation() throws LoaderException, XMLStreamException {
+ PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> type =
+ new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+ ReferenceDefinition refDefinition = new ReferenceDefinition();
+ refDefinition.setName("name");
+ type.add(refDefinition);
+ JavaImplementation impl = new JavaImplementation();
+ impl.setComponentType(type);
+ ComponentDefinition<Implementation<?>> defn = new ComponentDefinition<Implementation<?>>(impl);
+ ReferenceTarget target = new ReferenceTarget();
+ target.setReferenceName("name");
+ defn.add(target);
+ loader.validate(defn);
+ }
+
+ public void testReferenceNotSet() throws LoaderException, XMLStreamException {
+ PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> type =
+ new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+ ReferenceDefinition refDefinition = new ReferenceDefinition();
+ refDefinition.setName("name");
+ refDefinition.setRequired(true);
+ type.add(refDefinition);
+ JavaImplementation impl = new JavaImplementation();
+ impl.setComponentType(type);
+ ComponentDefinition<Implementation<?>> defn = new ComponentDefinition<Implementation<?>>(impl);
+ try {
+ loader.validate(defn);
+ fail();
+ } catch (MissingReferenceException e) {
+ // expected
+ }
+ }
+
+ public void testNotRequiredReference() throws LoaderException, XMLStreamException {
+ PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> type =
+ new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+ ReferenceDefinition refDefinition = new ReferenceDefinition();
+ refDefinition.setName("name");
+ refDefinition.setRequired(false);
+ type.add(refDefinition);
+ JavaImplementation impl = new JavaImplementation();
+ impl.setComponentType(type);
+ ComponentDefinition<Implementation<?>> defn = new ComponentDefinition<Implementation<?>>(impl);
+ loader.validate(defn);
+ }
+
+ public void testAutowire() throws LoaderException, XMLStreamException {
+ PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> type =
+ new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+ ReferenceDefinition refDefinition = new ReferenceDefinition();
+ refDefinition.setName("name");
+ refDefinition.setAutowire(true);
+ type.add(refDefinition);
+ JavaImplementation impl = new JavaImplementation();
+ impl.setComponentType(type);
+ ComponentDefinition<Implementation<?>> defn = new ComponentDefinition<Implementation<?>>(impl);
+ loader.validate(defn);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ LoaderRegistry mockRegistry = EasyMock.createMock(LoaderRegistry.class);
+ PropertyObjectFactory mockPropertyFactory = EasyMock.createMock(PropertyObjectFactory.class);
+ loader = new ComponentLoaderValidationTestCase.TestLoader(mockRegistry, mockPropertyFactory);
+ }
+
+ private class TestLoader extends ComponentLoader {
+
+ public TestLoader(LoaderRegistry registry, PropertyObjectFactory propertyFactory) {
+ super(registry, propertyFactory);
+ }
+
+ @Override
+ protected void validate(ComponentDefinition<Implementation<?>> definition) throws LoaderException {
+ super.validate(definition);
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderValidationTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java?view=diff&rev=482105&r1=482104&r2=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/mock/component/BasicInterfaceImpl.java Mon Dec 4 01:14:17 2006
@@ -28,13 +28,18 @@
@Property
public String publicProperty;
- @Reference
+
+ @Reference (required = false)
public BasicInterface publicReference;
+
@Property
protected String protectedProperty;
- @Reference
+
+ @Reference (required = false)
protected BasicInterface protectedReference;
+
private String privateProperty;
+
private BasicInterface privateReference;
@Property
@@ -42,7 +47,7 @@
this.privateProperty = privateProperty;
}
- @Reference
+ @Reference (required = false)
public void setPrivateReference(BasicInterface privateReference) {
this.privateReference = privateReference;
}
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingMustOverridePropertyException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingMustOverridePropertyException.java?view=diff&rev=482105&r1=482104&r2=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingMustOverridePropertyException.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingMustOverridePropertyException.java Mon Dec 4 01:14:17 2006
@@ -25,4 +25,15 @@
public MissingMustOverridePropertyException(String name) {
super(name);
}
+
+ public MissingMustOverridePropertyException() {
+ }
+
+ public MissingMustOverridePropertyException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public MissingMustOverridePropertyException(Throwable cause) {
+ super(cause);
+ }
}
Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java?view=auto&rev=482105
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java Mon Dec 4 01:14:17 2006
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.tuscany.spi.loader;
+
+/**
+ * Indicates a required reference was not configured
+ *
+ * @version $Rev$ $Date$
+ */
+public class MissingReferenceException extends LoaderException {
+ public MissingReferenceException() {
+ }
+
+ public MissingReferenceException(String message) {
+ super(message);
+ }
+
+ public MissingReferenceException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public MissingReferenceException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingReferenceException.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org