public PhysicalConnectionSourceDefinition generateConnectionSource(LogicalProducer producer) throws GenerationException { String producerName = producer.getDefinition().getName(); URI uri = producer.getParent().getUri(); ServiceContract serviceContract = producer.getDefinition().getServiceContract(); String interfaceName = serviceContract.getQualifiedInterfaceName(); return new SpringConnectionSourceDefinition(producerName, interfaceName, uri); }
protected ProducerDefinition createDefinition(String name, Type type, Class<?> implClass, InjectingComponentType componentType, Member member, IntrospectionContext context) { TypeMapping typeMapping = context.getTypeMapping(implClass); Class<?> baseType = helper.getBaseType(type, typeMapping); ServiceContract contract = contractProcessor.introspect(baseType, implClass, context, componentType); if (contract.getOperations().size() != 1) { String interfaceName = contract.getInterfaceName(); InvalidProducerInterface error = new InvalidProducerInterface("Producer interfaces must have one method: " + interfaceName, member, componentType); context.addError(error); } // TODO handle policies return new ProducerDefinition(name, contract); }
private void createProducers(ComponentDefinition<?> definition, LogicalComponent<?> component, ComponentType componentType) { for (ProducerDefinition producer : componentType.getProducers().values()) { String name = producer.getName(); URI producerUri = component.getUri().resolve('#' + name); LogicalProducer logicalProducer = new LogicalProducer(producerUri, producer, component); // producer is configured in the component definition ComponentProducer componentProducer = definition.getProducers().get(name); if (componentProducer != null) { logicalProducer.addIntents(componentProducer.getIntents()); // TODO refactor this: URIs should be resolved to channels by a separate service that also handles promotion for (URI uri : componentProducer.getTargets()) { if (uri.isAbsolute()) { LogicalComponent<?> domain = component.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalProducer.addTarget(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalProducer.addTarget(URI.create(component.getParent().getUri().toString() + "/" + uri.toString())); } } } component.addProducer(logicalProducer); } }
ProducerDefinition definition = new ProducerDefinition(name, contract); type.add(definition); return true;