Java implementation clean up in preparation for some refactoring

- removal of unused code
  - review of code visibility
  - renaming of exception to follow best practices naming convention
  - etc


git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@723484 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
lresende 2008-12-04 23:08:49 +00:00
parent bc1c8ab4c4
commit d15ee677ee
14 changed files with 514 additions and 516 deletions

View file

@ -25,8 +25,9 @@ package org.apache.tuscany.sca.implementation.java.injection;
* @version $Rev$ $Date$
*/
public abstract class InjectionRuntimeException extends RuntimeException {
private static final long serialVersionUID = -2264137603099898773L;
public InjectionRuntimeException() {
public InjectionRuntimeException() {
super();
}

View file

@ -98,8 +98,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
public ObjectFactory createValueFactory(Property property, Object propertyValue, Class javaType) {
public ObjectFactory createValueFactory(Property property, Object propertyValue, Class<?> javaType) {
isSimpleType = isSimpleType(property);
Document doc = (Document)propertyValue;
Element rootElement = doc.getDocumentElement();
@ -133,61 +133,24 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
private boolean isSimpleType(Property property) {
if (property.getXSDType() != null) {
return SimpleTypeMapperImpl.isSimpleXSDType(property.getXSDType());
} else {
if (property instanceof Document) {
Document doc = (Document)property;
Element element = doc.getDocumentElement();
if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == Element.TEXT_NODE) {
return true;
}
}
}
return false;
public <B> B createPropertyValue(ComponentProperty property, Class<B> type)
{
ObjectFactory<B> factory = this.createValueFactory(property, property.getValue(), type);
return factory.getInstance();
}
private List<String> getSimplePropertyValues(String concatenatedValue, Class<?> javaType) {
List<String> propValues = new ArrayList<String>();
StringTokenizer st = null;
if (javaType.getName().equals("java.lang.String")) {
st = new StringTokenizer(concatenatedValue, "\"");
} else {
st = new StringTokenizer(concatenatedValue);
}
String aToken = null;
while (st.hasMoreTokens()) {
aToken = st.nextToken();
if (aToken.trim().length() > 0) {
propValues.add(aToken);
}
}
return propValues;
}
private List<Node> getComplexPropertyValues(Document document) {
Element rootElement = document.getDocumentElement();
List<Node> propValues = new ArrayList<Node>();
NodeList nodes = rootElement.getChildNodes();
for (int count = 0; count < nodes.getLength(); ++count) {
if (nodes.item(count).getNodeType() == Document.ELEMENT_NODE) {
propValues.add(DOMHelper.promote(nodes.item(count)));
}
}
return propValues;
}
public abstract class ObjectFactoryImplBase implements ObjectFactory {
abstract class ObjectFactoryImplBase implements ObjectFactory {
protected SimpleTypeMapper simpleTypeMapper = new SimpleTypeMapperImpl();
protected Property property;
protected Object propertyValue;
protected Class javaType;
protected Class<?> javaType;
protected DataType<XMLType> sourceDataType;
protected DataType<?> targetDataType;
boolean isSimpleType;
public ObjectFactoryImplBase(Property property, Object propertyValue, boolean isSimpleType, Class javaType) {
public ObjectFactoryImplBase(Property property, Object propertyValue, boolean isSimpleType, Class<?> javaType) {
this.isSimpleType = isSimpleType;
this.property = property;
this.propertyValue = propertyValue;
@ -216,8 +179,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
public class ObjectFactoryImpl extends ObjectFactoryImplBase {
public ObjectFactoryImpl(Property property, Object propertyValue, boolean isSimpleType, Class javaType) {
class ObjectFactoryImpl extends ObjectFactoryImplBase {
public ObjectFactoryImpl(Property property, Object propertyValue, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValue, isSimpleType, javaType);
}
@ -239,8 +202,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
public class ListObjectFactoryImpl extends ObjectFactoryImplBase {
public ListObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class javaType) {
class ListObjectFactoryImpl extends ObjectFactoryImplBase {
public ListObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValues, isSimpleType, javaType);
}
@ -272,8 +235,8 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
public class ArrayObjectFactoryImpl extends ObjectFactoryImplBase {
public ArrayObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class javaType) {
class ArrayObjectFactoryImpl extends ObjectFactoryImplBase {
public ArrayObjectFactoryImpl(Property property, List<?> propertyValues, boolean isSimpleType, Class<?> javaType) {
super(property, propertyValues, isSimpleType, javaType);
}
@ -307,18 +270,71 @@ public class JavaPropertyValueObjectFactory implements PropertyValueFactory {
}
}
/**
* This method will create an instance of the value for the specified Property.
*
* @param property The Property from which to retrieve the property value
* @param type The type of the property value being retrieved from the Property
* @param <B> Type type of the property value being looked up
*
* @return the value for the Property
* Utility methods
*/
public <B> B createPropertyValue(ComponentProperty property, Class<B> type)
{
ObjectFactory<B> factory = this.createValueFactory(property, property.getValue(), type);
return factory.getInstance();
/**
*
* @param property
* @return
*/
private static boolean isSimpleType(Property property) {
if (property.getXSDType() != null) {
return SimpleTypeMapperImpl.isSimpleXSDType(property.getXSDType());
} else {
if (property instanceof Document) {
Document doc = (Document)property;
Element element = doc.getDocumentElement();
if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == Element.TEXT_NODE) {
return true;
}
}
}
return false;
}
/**
* Retrieve list of simple property values
* @param concatenatedValue
* @param javaType
* @return
*/
private static List<String> getSimplePropertyValues(String concatenatedValue, Class<?> javaType) {
List<String> propValues = new ArrayList<String>();
StringTokenizer st = null;
if (javaType.getName().equals("java.lang.String")) {
st = new StringTokenizer(concatenatedValue, "\"");
} else {
st = new StringTokenizer(concatenatedValue);
}
String aToken = null;
while (st.hasMoreTokens()) {
aToken = st.nextToken();
if (aToken.trim().length() > 0) {
propValues.add(aToken);
}
}
return propValues;
}
/**
* Retrieve the list of complex property values
* @param document
* @return
*/
private static List<Node> getComplexPropertyValues(Document document) {
Element rootElement = document.getDocumentElement();
List<Node> propValues = new ArrayList<Node>();
NodeList nodes = rootElement.getChildNodes();
for (int count = 0; count < nodes.getLength(); ++count) {
if (nodes.item(count).getNodeType() == Document.ELEMENT_NODE) {
propValues.add(DOMHelper.promote(nodes.item(count)));
}
}
return propValues;
}
}

View file

@ -30,7 +30,7 @@ import org.apache.tuscany.sca.core.factory.ObjectFactory;
*
* @version $Rev$ $Date$
*/
public class ListMultiplicityObjectFactory implements ObjectFactory<List> {
public class ListMultiplicityObjectFactory implements ObjectFactory<List<?>> {
private ObjectFactory[] factories;
@ -39,7 +39,7 @@ public class ListMultiplicityObjectFactory implements ObjectFactory<List> {
this.factories = factories.toArray(new ObjectFactory[factories.size()]);
}
public List getInstance() throws ObjectCreationException {
public List<?> getInstance() throws ObjectCreationException {
List<Object> list = new ArrayList<Object>();
for (ObjectFactory factory : factories) {
list.add(factory.getInstance());

View file

@ -1,126 +0,0 @@
/*
* 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.sca.implementation.java.invocation;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.apache.tuscany.sca.assembly.ComponentReference;
import org.apache.tuscany.sca.assembly.ConfiguredOperation;
import org.apache.tuscany.sca.assembly.OperationsConfigurator;
import org.apache.tuscany.sca.implementation.java.JavaImplementation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Phase;
import org.apache.tuscany.sca.policy.PolicySet;
import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
import org.apache.tuscany.sca.policy.util.PolicyHandler;
import org.apache.tuscany.sca.policy.util.PolicyHandlerUtils;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeWire;
import org.apache.tuscany.sca.runtime.RuntimeWireProcessor;
/**
* Processor to inject policy handling interceptor whenever PolicySets are specified in a Java Implementation
*
* @version $Rev$ $Date$
*/
public class JavaPolicyHandlingRuntimeWireProcessor implements RuntimeWireProcessor {
private static final Logger logger = Logger.getLogger(JavaPolicyHandlingRuntimeWireProcessor.class.getName());
public JavaPolicyHandlingRuntimeWireProcessor() {
super();
}
public void process(RuntimeWire wire) {
/*Contract contract = wire.getSource().getContract();
if (!(contract instanceof RuntimeComponentReference)) {
return;
}*/
RuntimeComponent component = wire.getTarget().getComponent();
if (component != null && component.getImplementation() instanceof JavaImplementation) {
JavaImplementation javaImpl = (JavaImplementation)component.getImplementation();
if (javaImpl instanceof PolicySetAttachPoint) {
PolicyHandler policyHandler = null;
List<PolicyHandler> implPolicyHandlers = new ArrayList<PolicyHandler>();
PolicySetAttachPoint policiedImpl = (PolicySetAttachPoint)javaImpl;
try {
//for ( PolicySet policySet : policiedImpl.getPolicySets() ) {
for (PolicySet policySet : component.getPolicySets()) {
policyHandler =
PolicyHandlerUtils.findPolicyHandler(policySet, javaImpl.getPolicyHandlerClassNames());
if (policyHandler != null) {
policyHandler.setUp(javaImpl);
implPolicyHandlers.add(policyHandler);
} else {
//FIXME: to be removed after the PolicyHandler story has crystalized..
//maybe replace with exception then...
logger.warning("No PolicyHandler registered for PolicySet - " + policySet.getName());
}
}
List<PolicyHandler> applicablePolicyHandlers = null;
for (InvocationChain chain : wire.getInvocationChains()) {
applicablePolicyHandlers = new ArrayList<PolicyHandler>();
if (javaImpl instanceof OperationsConfigurator) {
String operationName = chain.getTargetOperation().getName();
OperationsConfigurator opConfigurator = (OperationsConfigurator)component;
for (ConfiguredOperation confOp : opConfigurator.getConfiguredOperations()) {
if (confOp.getName().equals(operationName)) {
for (PolicySet policySet : confOp.getPolicySets()) {
policyHandler =
PolicyHandlerUtils.findPolicyHandler(policySet, javaImpl
.getPolicyHandlerClassNames());
if (policyHandler != null) {
policyHandler.setUp(javaImpl);
applicablePolicyHandlers.add(policyHandler);
} else {
logger.warning("No PolicyHandler registered for " + policySet);
}
}
break;
}
}
//if no policies have been specified at the operation level then simply
//apply whatever is specified for the implementation level
if (applicablePolicyHandlers.isEmpty()) {
applicablePolicyHandlers = implPolicyHandlers;
}
}
if (!applicablePolicyHandlers.isEmpty()) {
String phase =
(wire.getSource().getContract() instanceof ComponentReference) ? Phase.REFERENCE_POLICY
: Phase.SERVICE_POLICY;
chain.addInterceptor(Phase.IMPLEMENTATION_POLICY, new PolicyHandlingInterceptor(chain.getTargetOperation(),
applicablePolicyHandlers));
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}

View file

@ -50,7 +50,7 @@ public abstract class AbstractPropertyProcessor<A extends Annotation> extends Ba
this.annotationClass = annotationClass;
}
private boolean removeProperty(JavaElementImpl prop, JavaImplementation type) {
private static boolean removeProperty(JavaElementImpl prop, JavaImplementation type) {
if(prop==null) {
return false;
}

View file

@ -65,7 +65,7 @@ public class ConversationProcessor extends BaseJavaClassVisitor {
type.setMaxAge(maxAge);
}
} catch (NumberFormatException e) {
throw new InvalidConversationalImplementation("Invalid maximum age", e);
throw new InvalidConversationalImplementationException("Invalid maximum age", e);
}
try {
if (maxIdleTimeVal.length() > 0) {
@ -73,7 +73,7 @@ public class ConversationProcessor extends BaseJavaClassVisitor {
type.setMaxIdleTime(maxIdleTime);
}
} catch (NumberFormatException e) {
throw new InvalidConversationalImplementation("Invalid maximum idle time", e);
throw new InvalidConversationalImplementationException("Invalid maximum idle time", e);
}
}
@ -99,7 +99,7 @@ public class ConversationProcessor extends BaseJavaClassVisitor {
type.addConversationIDMember(field);
}
protected long convertTimeMillis(String expr) throws NumberFormatException {
static long convertTimeMillis(String expr) throws NumberFormatException {
expr = expr.trim().toUpperCase();
int i = expr.lastIndexOf(SECONDS);
if (i >= 0) {

View file

@ -134,17 +134,6 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
}
}
private boolean isPublicSetter(Method method) {
return method.getParameterTypes().length == 1 && Modifier.isPublic(method.getModifiers())
&& method.getName().startsWith("set")
&& method.getReturnType() == void.class;
}
private boolean isProtectedSetter(Method method) {
return method.getParameterTypes().length == 1 && Modifier.isProtected(method.getModifiers())
&& method.getName().startsWith("set")
&& method.getReturnType() == void.class;
}
private <T> void calcPropRefs(Set<Method> methods,
List<org.apache.tuscany.sca.assembly.Service> services,
@ -360,10 +349,7 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
}
}
private static boolean areUnique(Class<?>[] collection) {
Set<Class<?>> set = new HashSet<Class<?>>(Arrays.asList(collection));
return set.size() == collection.length;
}
/**
* Returns true if the union of the given collections of properties and
@ -439,6 +425,119 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
return found;
}
/**
* Creates a mapped property.
*
* @param name the property name
* @param paramType the property type
*/
private org.apache.tuscany.sca.assembly.Property createProperty(String name, Class<?> paramType) {
org.apache.tuscany.sca.assembly.Property property = assemblyFactory.createProperty();
property.setName(name);
property.setXSDType(JavaXMLMapper.getXMLType(paramType));
return property;
}
private org.apache.tuscany.sca.assembly.Reference createReference(String name, Class<?> paramType)
throws IntrospectionException {
org.apache.tuscany.sca.assembly.Reference reference = assemblyFactory.createReference();
reference.setName(name);
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
reference.setInterfaceContract(interfaceContract);
try {
JavaInterface callInterface = javaFactory.createJavaInterface(paramType);
reference.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
reference.getInterfaceContract().setCallbackInterface(callbackInterface);
}
reference.setMultiplicity(Multiplicity.ZERO_ONE);
} catch (InvalidInterfaceException e1) {
throw new IntrospectionException(e1);
}
// FIXME: This part seems to have already been taken care above!!
try {
processCallback(paramType, reference);
} catch (InvalidServiceTypeException e) {
throw new IntrospectionException(e);
}
return reference;
}
private org.apache.tuscany.sca.assembly.Service createService(Class<?> interfaze) throws InvalidInterfaceException {
org.apache.tuscany.sca.assembly.Service service = assemblyFactory.createService();
service.setName(interfaze.getSimpleName());
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
service.setInterfaceContract(interfaceContract);
JavaInterface callInterface = javaFactory.createJavaInterface(interfaze);
service.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
service.getInterfaceContract().setCallbackInterface(callbackInterface);
}
Interface javaInterface = service.getInterfaceContract().getInterface();
javaInterface.setRemotable(interfaze.getAnnotation(Remotable.class) != null);
service.getInterfaceContract().setInterface(javaInterface);
return service;
}
private void processCallback(Class<?> interfaze, Contract contract) throws InvalidServiceTypeException {
Callback callback = interfaze.getAnnotation(Callback.class);
if (callback != null && !Void.class.equals(callback.value())) {
Class<?> callbackClass = callback.value();
JavaInterface javaInterface;
try {
javaInterface = javaFactory.createJavaInterface(callbackClass);
contract.getInterfaceContract().setCallbackInterface(javaInterface);
} catch (InvalidInterfaceException e) {
throw new InvalidServiceTypeException("Invalid callback interface "+callbackClass, interfaze);
}
} else if (callback != null && Void.class.equals(callback.value())) {
throw new InvalidServiceTypeException("No callback interface specified on annotation", interfaze);
}
}
/**
* Utility methods
*/
/**
* Verify if the method is a public setter
* @param method
* @return
*/
private static boolean isPublicSetter(Method method) {
return method.getParameterTypes().length == 1 && Modifier.isPublic(method.getModifiers())
&& method.getName().startsWith("set")
&& method.getReturnType() == void.class;
}
/**
* Verify if the method is a protected setter
* @param method
* @return
*/
private static boolean isProtectedSetter(Method method) {
return method.getParameterTypes().length == 1 && Modifier.isProtected(method.getModifiers())
&& method.getName().startsWith("set")
&& method.getReturnType() == void.class;
}
/**
* @param collection
* @return
*/
private static boolean areUnique(Class<?>[] collection) {
Set<Class<?>> set = new HashSet<Class<?>>(Arrays.asList(collection));
return set.size() == collection.length;
}
/**
* Returns true if a given type is reference according to the SCA
* specification rules for determining reference types The following rules
@ -462,7 +561,7 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
* The name of the reference or of the property is derived from the
* name found on the setter method or on the field.
*/
private boolean isReferenceType(Class<?> cls, Type genericType) {
private static boolean isReferenceType(Class<?> cls, Type genericType) {
Class<?> baseType = JavaIntrospectionHelper.getBaseType(cls, genericType);
return baseType.isInterface() && baseType.isAnnotationPresent(Remotable.class);
}
@ -470,8 +569,11 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
/**
* Returns true if the given operation is defined in the collection of
* service interfaces
* @param operation
* @param services
* @return
*/
private boolean isInServiceInterface(Method operation, List<org.apache.tuscany.sca.assembly.Service> services) {
private static boolean isInServiceInterface(Method operation, List<org.apache.tuscany.sca.assembly.Service> services) {
for (org.apache.tuscany.sca.assembly.Service service : services) {
Interface interface1 = service.getInterfaceContract().getInterface();
if (interface1 instanceof JavaInterface) {
@ -492,7 +594,7 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
* @param method
* @return
*/
private boolean isMethodMatched(Class<?> clazz, Method method) {
private static boolean isMethodMatched(Class<?> clazz, Method method) {
if (method.getDeclaringClass() == clazz) {
return true;
}
@ -506,19 +608,11 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
}
/**
* Creates a mapped property.
*
* @param name the property name
* @param paramType the property type
* Verify if there is any SCA annotation on the parameter
* @param parameter
* @return
*/
private org.apache.tuscany.sca.assembly.Property createProperty(String name, Class<?> paramType) {
org.apache.tuscany.sca.assembly.Property property = assemblyFactory.createProperty();
property.setName(name);
property.setXSDType(JavaXMLMapper.getXMLType(paramType));
return property;
}
private boolean isAnnotated(JavaParameterImpl parameter) {
private static boolean isAnnotated(JavaParameterImpl parameter) {
for (Annotation annotation : parameter.getAnnotations()) {
Class<? extends Annotation> annotType = annotation.annotationType();
if (annotType.equals(Property.class) || annotType.equals(Reference.class)
@ -529,7 +623,12 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
return false;
}
public boolean areUnique(JavaParameterImpl[] parameters) {
/**
* Verify if the parameters are unique
* @param parameters
* @return
*/
private static boolean areUnique(JavaParameterImpl[] parameters) {
Set<Class<?>> set = new HashSet<Class<?>>(parameters.length);
for (JavaParameterImpl p : parameters) {
if (!set.add(p.getType())) {
@ -538,71 +637,13 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor {
}
return true;
}
public org.apache.tuscany.sca.assembly.Reference createReference(String name, Class<?> paramType)
throws IntrospectionException {
org.apache.tuscany.sca.assembly.Reference reference = assemblyFactory.createReference();
reference.setName(name);
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
reference.setInterfaceContract(interfaceContract);
try {
JavaInterface callInterface = javaFactory.createJavaInterface(paramType);
reference.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
reference.getInterfaceContract().setCallbackInterface(callbackInterface);
}
reference.setMultiplicity(Multiplicity.ZERO_ONE);
} catch (InvalidInterfaceException e1) {
throw new IntrospectionException(e1);
}
// FIXME: This part seems to have already been taken care above!!
try {
processCallback(paramType, reference);
} catch (InvalidServiceType e) {
throw new IntrospectionException(e);
}
return reference;
}
public org.apache.tuscany.sca.assembly.Service createService(Class<?> interfaze) throws InvalidInterfaceException {
org.apache.tuscany.sca.assembly.Service service = assemblyFactory.createService();
service.setName(interfaze.getSimpleName());
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
service.setInterfaceContract(interfaceContract);
JavaInterface callInterface = javaFactory.createJavaInterface(interfaze);
service.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
service.getInterfaceContract().setCallbackInterface(callbackInterface);
}
Interface javaInterface = service.getInterfaceContract().getInterface();
javaInterface.setRemotable(interfaze.getAnnotation(Remotable.class) != null);
service.getInterfaceContract().setInterface(javaInterface);
return service;
}
public void processCallback(Class<?> interfaze, Contract contract) throws InvalidServiceType {
Callback callback = interfaze.getAnnotation(Callback.class);
if (callback != null && !Void.class.equals(callback.value())) {
Class<?> callbackClass = callback.value();
JavaInterface javaInterface;
try {
javaInterface = javaFactory.createJavaInterface(callbackClass);
contract.getInterfaceContract().setCallbackInterface(javaInterface);
} catch (InvalidInterfaceException e) {
throw new InvalidServiceType("Invalid callback interface "+callbackClass, interfaze);
}
} else if (callback != null && Void.class.equals(callback.value())) {
throw new InvalidServiceType("No callback interface specified on annotation", interfaze);
}
}
public boolean injectionAnnotationsPresent(Annotation[][] annots) {
/**
* Verify if the annotations are SCA annotation
* @param annots
* @return
*/
private static boolean injectionAnnotationsPresent(Annotation[][] annots) {
for (Annotation[] annotations : annots) {
for (Annotation annotation : annotations) {
Class<? extends Annotation> annotType = annotation.annotationType();

View file

@ -25,14 +25,14 @@ import org.apache.tuscany.sca.implementation.java.IntrospectionException;
*
* @version $Rev$ $Date$
*/
public class InvalidConversationalImplementation extends IntrospectionException {
public class InvalidConversationalImplementationException extends IntrospectionException {
private static final long serialVersionUID = -5487291552769408149L;
public InvalidConversationalImplementation(String message) {
public InvalidConversationalImplementationException(String message) {
super(message);
}
public InvalidConversationalImplementation(String message, Throwable cause) {
public InvalidConversationalImplementationException(String message, Throwable cause) {
super(message, cause);
}

View file

@ -26,15 +26,15 @@ import org.apache.tuscany.sca.implementation.java.IntrospectionException;
*
* @version $Rev$ $Date$
*/
public class InvalidServiceType extends IntrospectionException {
public class InvalidServiceTypeException extends IntrospectionException {
private static final long serialVersionUID = -1076466639416644386L;
private Class<?> serviceType;
public InvalidServiceType(String message) {
public InvalidServiceTypeException(String message) {
super(message);
}
public InvalidServiceType(String message, Class<?> clazz) {
public InvalidServiceTypeException(String message, Class<?> clazz) {
super(message);
this.serviceType = clazz;
}

View file

@ -58,93 +58,45 @@ public class PolicyProcessor extends BaseJavaClassVisitor {
this.policyFactory = policyFactory;
}
private QName getQName(String intentName) {
QName qname;
if (intentName.startsWith("{")) {
int i = intentName.indexOf('}');
if (i != -1) {
qname = new QName(intentName.substring(1, i), intentName.substring(i + 1));
} else {
qname = new QName("", intentName);
}
} else {
qname = new QName("", intentName);
@Override
public void visitField(Field field, JavaImplementation type) throws IntrospectionException {
org.osoa.sca.annotations.Reference annotation =
field.getAnnotation( org.osoa.sca.annotations.Reference.class);
if (annotation == null) {
return;
}
return qname;
}
/**
* Read policy intents on the given interface or class
* @param clazz
* @param requiredIntents
*/
private void readIntentsAndPolicySets(Class<?> clazz,
List<Intent> requiredIntents,
List<PolicySet> policySets) {
Requires intentAnnotation = clazz.getAnnotation(Requires.class);
if (intentAnnotation != null) {
String[] intentNames = intentAnnotation.value();
if (intentNames.length != 0) {
for (String intentName : intentNames) {
// Add each intent to the list
Intent intent = policyFactory.createIntent();
intent.setName(getQName(intentName));
requiredIntents.add(intent);
}
}
String name = annotation.name();
if ("".equals(name)) {
name = field.getName();
}
PolicySets policySetAnnotation = clazz.getAnnotation(PolicySets.class);
if (policySetAnnotation != null) {
String[] policySetNames = policySetAnnotation.value();
if (policySetNames.length != 0) {
for (String policySetName : policySetNames) {
// Add each intent to the list
PolicySet policySet = policyFactory.createPolicySet();
policySet.setName(getQName(policySetName));
policySets.add(policySet);
}
}
Reference reference = null;
if ( (reference = getReferenceByName(name, type)) != null ) {
readIntents(field.getAnnotation(Requires.class), reference.getRequiredIntents());
readPolicySets(field.getAnnotation(PolicySets.class), reference.getPolicySets());
}
}
private void readIntents(Requires intentAnnotation, List<Intent> requiredIntents) {
//Requires intentAnnotation = method.getAnnotation(Requires.class);
if (intentAnnotation != null) {
String[] intentNames = intentAnnotation.value();
if (intentNames.length != 0) {
//Operation operation = assemblyFactory.createOperation();
//operation.setName(method.getName());
//operation.setUnresolved(true);
for (String intentName : intentNames) {
// Add each intent to the list, associated with the
// operation corresponding to the annotated method
Intent intent = policyFactory.createIntent();
intent.setName(getQName(intentName));
//intent.getOperations().add(operation);
requiredIntents.add(intent);
}
}
}
}
private void readPolicySets(PolicySets policySetAnnotation, List<PolicySet> policySets) {
if (policySetAnnotation != null) {
String[] policySetNames = policySetAnnotation.value();
if (policySetNames.length != 0) {
//Operation operation = assemblyFactory.createOperation();
//operation.setName(method.getName());
//operation.setUnresolved(true);
for (String policySetName : policySetNames) {
// Add each intent to the list, associated with the
// operation corresponding to the annotated method
PolicySet policySet = policyFactory.createPolicySet();
policySet.setName(getQName(policySetName));
//intent.getOperations().add(operation);
policySets.add(policySet);
@Override
public void visitMethod(Method method, JavaImplementation type) throws IntrospectionException {
Reference reference = null;
if ( (reference = getReference(method, type)) != null ) {
readIntents(method.getAnnotation(Requires.class), reference.getRequiredIntents());
readPolicySets(method.getAnnotation(PolicySets.class), reference.getPolicySets());
} else {
if ( type instanceof OperationsConfigurator ) {
//Read the intents specified on the given implementation method
if ( (method.getAnnotation(Requires.class) != null ||
method.getAnnotation(PolicySets.class) != null ) &&
(type instanceof PolicySetAttachPoint )) {
ConfiguredOperation confOp = assemblyFactory.createConfiguredOperation();
confOp.setName(method.getName());
((OperationsConfigurator)type).getConfiguredOperations().add(confOp);
readIntents(method.getAnnotation(Requires.class), confOp.getRequiredIntents());
readPolicySets(method.getAnnotation(PolicySets.class), confOp.getPolicySets());
}
}
}
@ -223,7 +175,142 @@ public class PolicyProcessor extends BaseJavaClassVisitor {
}
}
private Reference getReference(Method method, JavaImplementation type) {
/**
* Read policy intents on the given interface or class
* @param clazz
* @param requiredIntents
*/
private void readIntentsAndPolicySets(Class<?> clazz,
List<Intent> requiredIntents,
List<PolicySet> policySets) {
Requires intentAnnotation = clazz.getAnnotation(Requires.class);
if (intentAnnotation != null) {
String[] intentNames = intentAnnotation.value();
if (intentNames.length != 0) {
for (String intentName : intentNames) {
// Add each intent to the list
Intent intent = policyFactory.createIntent();
intent.setName(getQName(intentName));
requiredIntents.add(intent);
}
}
}
PolicySets policySetAnnotation = clazz.getAnnotation(PolicySets.class);
if (policySetAnnotation != null) {
String[] policySetNames = policySetAnnotation.value();
if (policySetNames.length != 0) {
for (String policySetName : policySetNames) {
// Add each intent to the list
PolicySet policySet = policyFactory.createPolicySet();
policySet.setName(getQName(policySetName));
policySets.add(policySet);
}
}
}
}
/**
* Read intent annotations on the given interface or class
* @param intentAnnotation
* @param requiredIntents
*/
private void readIntents(Requires intentAnnotation, List<Intent> requiredIntents) {
//Requires intentAnnotation = method.getAnnotation(Requires.class);
if (intentAnnotation != null) {
String[] intentNames = intentAnnotation.value();
if (intentNames.length != 0) {
//Operation operation = assemblyFactory.createOperation();
//operation.setName(method.getName());
//operation.setUnresolved(true);
for (String intentName : intentNames) {
// Add each intent to the list, associated with the
// operation corresponding to the annotated method
Intent intent = policyFactory.createIntent();
intent.setName(getQName(intentName));
//intent.getOperations().add(operation);
requiredIntents.add(intent);
}
}
}
}
/**
* Read policy set annotations on a given interface or class
* @param policySetAnnotation
* @param policySets
*/
private void readPolicySets(PolicySets policySetAnnotation, List<PolicySet> policySets) {
if (policySetAnnotation != null) {
String[] policySetNames = policySetAnnotation.value();
if (policySetNames.length != 0) {
//Operation operation = assemblyFactory.createOperation();
//operation.setName(method.getName());
//operation.setUnresolved(true);
for (String policySetName : policySetNames) {
// Add each intent to the list, associated with the
// operation corresponding to the annotated method
PolicySet policySet = policyFactory.createPolicySet();
policySet.setName(getQName(policySetName));
//intent.getOperations().add(operation);
policySets.add(policySet);
}
}
}
}
/**
* Utility methods
*/
/**
*
* @param intentName
* @return
*/
private static QName getQName(String intentName) {
QName qname;
if (intentName.startsWith("{")) {
int i = intentName.indexOf('}');
if (i != -1) {
qname = new QName(intentName.substring(1, i), intentName.substring(i + 1));
} else {
qname = new QName("", intentName);
}
} else {
qname = new QName("", intentName);
}
return qname;
}
/**
*
* @param name
* @param type
* @return
*/
private static Reference getReferenceByName(String name, JavaImplementation type) {
for ( Reference reference : type.getReferences() ) {
if ( reference.getName().equals(name) ) {
return reference;
}
}
return null;
}
/**
*
* @param method
* @param type
* @return
*/
private static Reference getReference(Method method, JavaImplementation type) {
//since the ReferenceProcessor is called ahead of the PolicyProcessor the type should have
//picked up the reference setter method
org.osoa.sca.annotations.Reference annotation =
@ -239,56 +326,4 @@ public class PolicyProcessor extends BaseJavaClassVisitor {
}
return null;
}
private Reference getReferenceByName(String name, JavaImplementation type) {
for ( Reference reference : type.getReferences() ) {
if ( reference.getName().equals(name) ) {
return reference;
}
}
return null;
}
@Override
public void visitField(Field field, JavaImplementation type) throws IntrospectionException {
org.osoa.sca.annotations.Reference annotation =
field.getAnnotation( org.osoa.sca.annotations.Reference.class);
if (annotation == null) {
return;
}
String name = annotation.name();
if ("".equals(name)) {
name = field.getName();
}
Reference reference = null;
if ( (reference = getReferenceByName(name, type)) != null ) {
readIntents(field.getAnnotation(Requires.class), reference.getRequiredIntents());
readPolicySets(field.getAnnotation(PolicySets.class), reference.getPolicySets());
}
}
@Override
public void visitMethod(Method method, JavaImplementation type) throws IntrospectionException {
Reference reference = null;
if ( (reference = getReference(method, type)) != null ) {
readIntents(method.getAnnotation(Requires.class), reference.getRequiredIntents());
readPolicySets(method.getAnnotation(PolicySets.class), reference.getPolicySets());
} else {
if ( type instanceof OperationsConfigurator ) {
//Read the intents specified on the given implementation method
if ( (method.getAnnotation(Requires.class) != null ||
method.getAnnotation(PolicySets.class) != null ) &&
(type instanceof PolicySetAttachPoint )) {
ConfiguredOperation confOp = assemblyFactory.createConfiguredOperation();
confOp.setName(method.getName());
((OperationsConfigurator)type).getConfiguredOperations().add(confOp);
readIntents(method.getAnnotation(Requires.class), confOp.getRequiredIntents());
readPolicySets(method.getAnnotation(PolicySets.class), confOp.getPolicySets());
}
}
}
}
}

View file

@ -83,19 +83,6 @@ public class ReferenceProcessor extends BaseJavaClassVisitor {
type.getReferenceMembers().put(name, element);
}
private boolean removeReference(JavaElementImpl ref, JavaImplementation type) {
if (ref == null) {
return false;
}
List<org.apache.tuscany.sca.assembly.Reference> refs = type.getReferences();
for (int i = 0; i < refs.size(); i++) {
if (refs.get(i).getName().equals(ref.getName())) {
refs.remove(i);
return true;
}
}
return false;
}
@Override
public void visitField(Field field, JavaImplementation type) throws IntrospectionException {
@ -145,20 +132,13 @@ public class ReferenceProcessor extends BaseJavaClassVisitor {
parameter.setName(name);
}
private String getReferenceName(String paramName, int pos, String name) throws InvalidConstructorException {
if ("".equals(name)) {
name = paramName;
}
if ("".equals(name)) {
return "_ref" + pos;
}
if (!"".equals(paramName) && !name.equals(paramName)) {
throw new InvalidConstructorException("Mismatching names specified for reference parameter " + pos);
} else {
return name;
}
}
/**
* Create a SCA reference for a java Element
* @param element
* @param name
* @return
* @throws IntrospectionException
*/
private org.apache.tuscany.sca.assembly.Reference createReference(JavaElementImpl element, String name)
throws IntrospectionException {
org.apache.tuscany.sca.assembly.Reference reference = assemblyFactory.createReference();
@ -207,4 +187,53 @@ public class ReferenceProcessor extends BaseJavaClassVisitor {
}
return reference;
}
/**
* Utility methods
*/
/**
*
* @param paramName
* @param pos
* @param name
* @return
* @throws InvalidConstructorException
*/
private static String getReferenceName(String paramName, int pos, String name) throws InvalidConstructorException {
if ("".equals(name)) {
name = paramName;
}
if ("".equals(name)) {
return "_ref" + pos;
}
if (!"".equals(paramName) && !name.equals(paramName)) {
throw new InvalidConstructorException("Mismatching names specified for reference parameter " + pos);
} else {
return name;
}
}
/**
*
* @param ref
* @param type
* @return
*/
private static boolean removeReference(JavaElementImpl ref, JavaImplementation type) {
if (ref == null) {
return false;
}
List<org.apache.tuscany.sca.assembly.Reference> refs = type.getReferences();
for (int i = 0; i < refs.size(); i++) {
if (refs.get(i).getName().equals(ref.getName())) {
refs.remove(i);
return true;
}
}
return false;
}
}

View file

@ -96,12 +96,6 @@ public class ResourceProcessor extends BaseJavaClassVisitor {
type.getResources().put(resource.getName(), resource);
}
public JavaResourceImpl createResource(String name, JavaElementImpl element) {
element.setClassifer(org.apache.tuscany.sca.implementation.java.introspect.impl.Resource.class);
element.setName(name);
return new JavaResourceImpl(element);
}
@Override
public void visitConstructorParameter(JavaParameterImpl parameter, JavaImplementation type)
throws IntrospectionException {
@ -135,4 +129,20 @@ public class ResourceProcessor extends BaseJavaClassVisitor {
}
}
/**
* Utility methods
*/
/**
*
* @param name
* @param element
* @return
*/
private static JavaResourceImpl createResource(String name, JavaElementImpl element) {
element.setClassifer(org.apache.tuscany.sca.implementation.java.introspect.impl.Resource.class);
element.setName(name);
return new JavaResourceImpl(element);
}
}

View file

@ -135,12 +135,34 @@ public class ServiceProcessor extends BaseJavaClassVisitor {
createCallback(type, element);
}
public Service createService(Class<?> interfaze) throws InvalidInterfaceException {
Service service = assemblyFactory.createService();
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
service.setInterfaceContract(interfaceContract);
// create a relative URI
service.setName(interfaze.getSimpleName());
JavaInterface callInterface = javaFactory.createJavaInterface(interfaze);
service.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
service.getInterfaceContract().setCallbackInterface(callbackInterface);
}
return service;
}
/**
* Utility methods
*/
/**
* @param type
* @param element
* @throws IllegalCallbackReferenceException
*/
private void createCallback(JavaImplementation type, JavaElementImpl element)
private static void createCallback(JavaImplementation type, JavaElementImpl element)
throws IllegalCallbackReferenceException {
Service callbackService = null;
Class<?> callbackClass = element.getType();
@ -165,22 +187,4 @@ public class ServiceProcessor extends BaseJavaClassVisitor {
}
type.getCallbackMembers().get(baseType.getName()).add(element);
}
public Service createService(Class<?> interfaze) throws InvalidInterfaceException {
Service service = assemblyFactory.createService();
JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
service.setInterfaceContract(interfaceContract);
// create a relative URI
service.setName(interfaze.getSimpleName());
JavaInterface callInterface = javaFactory.createJavaInterface(interfaze);
service.getInterfaceContract().setInterface(callInterface);
if (callInterface.getCallbackClass() != null) {
JavaInterface callbackInterface = javaFactory.createJavaInterface(callInterface.getCallbackClass());
service.getInterfaceContract().setCallbackInterface(callbackInterface);
}
return service;
}
}

View file

@ -22,21 +22,19 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.apache.tuscany.sca.assembly.DefaultAssemblyFactory;
import org.junit.Before;
import org.junit.Test;
/**
* @version $Rev$ $Date$
*/
public class ConvertTimeMillisTestCase {
private MockProcessor registy;
@Test
@Test
public void testConvertSeconds() throws Exception {
assertEquals(10000L, registy.convertTimeMillis("10 seconds"));
assertEquals(10000L, registy.convertTimeMillis("10 SECONDS"));
assertEquals(10000L, MockProcessor.convertTimeMillis("10 seconds"));
assertEquals(10000L, MockProcessor.convertTimeMillis("10 SECONDS"));
try {
registy.convertTimeMillis("10seconds");
MockProcessor.convertTimeMillis("10seconds");
fail();
} catch (NumberFormatException e) {
// expected
@ -45,10 +43,10 @@ public class ConvertTimeMillisTestCase {
@Test
public void testConvertMinutes() throws Exception {
assertEquals(600000L, registy.convertTimeMillis("10 minutes"));
assertEquals(600000L, registy.convertTimeMillis("10 MINUTES"));
assertEquals(600000L, MockProcessor.convertTimeMillis("10 minutes"));
assertEquals(600000L, MockProcessor.convertTimeMillis("10 MINUTES"));
try {
registy.convertTimeMillis("10minutes");
MockProcessor.convertTimeMillis("10minutes");
fail();
} catch (NumberFormatException e) {
// expected
@ -57,10 +55,10 @@ public class ConvertTimeMillisTestCase {
@Test
public void testConvertHours() throws Exception {
assertEquals(36000000L, registy.convertTimeMillis("10 hours"));
assertEquals(36000000L, registy.convertTimeMillis("10 HOURS"));
assertEquals(36000000L, MockProcessor.convertTimeMillis("10 hours"));
assertEquals(36000000L, MockProcessor.convertTimeMillis("10 HOURS"));
try {
registy.convertTimeMillis("10hours");
MockProcessor.convertTimeMillis("10hours");
fail();
} catch (NumberFormatException e) {
// expected
@ -69,10 +67,10 @@ public class ConvertTimeMillisTestCase {
@Test
public void testConvertDays() throws Exception {
assertEquals(864000000L, registy.convertTimeMillis("10 days"));
assertEquals(864000000L, registy.convertTimeMillis("10 DAYS"));
assertEquals(864000000L, MockProcessor.convertTimeMillis("10 days"));
assertEquals(864000000L, MockProcessor.convertTimeMillis("10 DAYS"));
try {
registy.convertTimeMillis("10days");
MockProcessor.convertTimeMillis("10days");
fail();
} catch (NumberFormatException e) {
// expected
@ -81,10 +79,10 @@ public class ConvertTimeMillisTestCase {
@Test
public void testConvertYears() throws Exception {
assertEquals(315569260000L, registy.convertTimeMillis("10 years"));
assertEquals(315569260000L, registy.convertTimeMillis("10 YEARS"));
assertEquals(315569260000L, MockProcessor.convertTimeMillis("10 years"));
assertEquals(315569260000L, MockProcessor.convertTimeMillis("10 YEARS"));
try {
registy.convertTimeMillis("10years");
MockProcessor.convertTimeMillis("10years");
fail();
} catch (NumberFormatException e) {
// expected
@ -93,34 +91,24 @@ public class ConvertTimeMillisTestCase {
@Test
public void testConvertDefault() throws Exception {
assertEquals(10000L, registy.convertTimeMillis("10 "));
assertEquals(10000L, registy.convertTimeMillis("10"));
assertEquals(10000L, MockProcessor.convertTimeMillis("10 "));
assertEquals(10000L, MockProcessor.convertTimeMillis("10"));
}
@Test
public void testInvalid() throws Exception {
try {
registy.convertTimeMillis("foo");
MockProcessor.convertTimeMillis("foo");
fail();
} catch (NumberFormatException e) {
// expected
}
}
@Before
public void setUp() throws Exception {
registy = new MockProcessor();
}
private class MockProcessor extends ConversationProcessor {
public MockProcessor() {
super(new DefaultAssemblyFactory());
}
@Override
protected long convertTimeMillis(String expr) throws NumberFormatException {
return super.convertTimeMillis(expr);
}
}
}