private void addTarget(LogicalProducer logicalProducer, URI uri, LogicalComponent<?> logicalComponent) { if (uri.isAbsolute()) { LogicalComponent<?> domain = logicalComponent.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalProducer.addTarget(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalProducer.addTarget(URI.create(logicalComponent.getParent().getUri().toString() + "/" + uri.toString())); } }
private LogicalCompositeComponent getComposite() { LogicalComponent<?> parent = getParent(); LogicalCompositeComponent composite = parent.getParent(); return composite != null ? composite : (LogicalCompositeComponent) parent; }
private void addSource(LogicalConsumer logicalConsumer, URI uri, LogicalComponent<?> logicalComponent) { if (uri.isAbsolute()) { LogicalComponent<?> domain = logicalComponent.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalConsumer.addSource(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalConsumer.addSource(URI.create(logicalComponent.getParent().getUri().toString() + "/" + uri.toString())); } }
private void addTarget(LogicalProducer logicalProducer, URI uri, LogicalComponent<?> logicalComponent) { if (uri.isAbsolute()) { LogicalComponent<?> domain = logicalComponent.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalProducer.addTarget(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalProducer.addTarget(URI.create(logicalComponent.getParent().getUri().toString() + "/" + uri.toString())); } }
private void addSource(LogicalConsumer logicalConsumer, URI uri, LogicalComponent<?> logicalComponent) { if (uri.isAbsolute()) { LogicalComponent<?> domain = logicalComponent.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalConsumer.addSource(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalConsumer.addSource(URI.create(logicalComponent.getParent().getUri().toString() + "/" + uri.toString())); } }
public Iterator getParentAxisIterator(Object contextNode) { if (contextNode instanceof LogicalComponent) { return new SingleObjectIterator(((LogicalComponent) contextNode).getParent()); } return JaxenConstants.EMPTY_ITERATOR; }
private URI getContributionUri(LogicalBinding<WsBindingDefinition> binding) { LogicalComponent<?> current = binding.getParent().getParent(); while (current.getParent().getParent() != null) { // component deployed directly to the domain current = current.getParent(); } return current.getDefinition().getContributionUri(); }
/** * Updates the list of services with the promotion hierarchy for the given service. The list is populated in reverse order so that the leaf * (promoted) service is stored last. * * @param service the current service to ascend from * @param services the list */ private void getPromotionHierarchy(LogicalService service, LinkedList<LogicalService> services) { LogicalComponent<CompositeImplementation> parent = service.getParent().getParent(); URI serviceUri = service.getUri(); for (LogicalService promotion : parent.getServices()) { URI targetUri = promotion.getPromotedUri(); if (targetUri.getFragment() == null) { // no service specified if (targetUri.equals(UriHelper.getDefragmentedName(serviceUri))) { services.addFirst(promotion); if (parent.getParent() != null) { getPromotionHierarchy(promotion, services); } } } else { if (targetUri.equals(serviceUri)) { services.addFirst(promotion); if (parent.getParent() != null) { getPromotionHierarchy(promotion, services); } } } } }
private void createConsumers(ComponentDefinition<?> definition, LogicalComponent<?> component, ComponentType componentType) { for (ConsumerDefinition consumer : componentType.getConsumers().values()) { String name = consumer.getName(); URI consumerUri = component.getUri().resolve('#' + name); LogicalConsumer logicalConsumer = new LogicalConsumer(consumerUri, consumer, component); // producer is configured in the component definition ComponentConsumer componentConsumer = definition.getConsumers().get(name); if (componentConsumer != null) { logicalConsumer.addIntents(componentConsumer.getIntents()); // TODO refactor this: URIs should be resolved to channels by a separate service that also handles promotion for (URI uri : componentConsumer.getSources()) { if (uri.isAbsolute()) { LogicalComponent<?> domain = component.getParent(); while (domain.getParent() != null) { domain = domain.getParent(); } logicalConsumer.addSource(URI.create(domain.getUri().toString() + "/" + uri.getAuthority())); } else { logicalConsumer.addSource(URI.create(component.getParent().getUri().toString() + "/" + uri.toString())); } } } component.addConsumer(logicalConsumer); } }
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); } }
private void instantiateReferenceWires(LogicalReference reference, InstantiationContext context) { LogicalCompositeComponent parent = reference.getParent().getParent(); Reference componentReference = reference.getComponentReference(); Reference<ComponentType> definition = reference.getDefinition(); if (componentReference == null && definition.getTargets().isEmpty()) { // the reference is not configured on the component definition in the composite or in the component type so there are no wires return; } List<Target> serviceTargets = componentReference != null ? componentReference.getTargets() : definition.getTargets(); if (serviceTargets.isEmpty()) { serviceTargets = definition.getTargets(); } if (serviceTargets.isEmpty()) { // no targets are specified return; } List<LogicalWire> wires = new ArrayList<>(); // resolve the reference targets and create logical wires for (Target target : serviceTargets) { LogicalWire wire = createWire(target, reference, null, parent, context); if (wire == null) { continue; } wires.add(wire); } if (!wires.isEmpty()) { parent.addWires(reference, wires); } reference.setResolved(true); }
/** * Returns the channel in the invocable hierarchy. * * @param channelUri the channel uri * @param invocable the invocable * @return the channel * @throws Fabric3Exception if the channel is not found */ public static LogicalChannel getChannelInHierarchy(URI channelUri, LogicalInvocable invocable) throws Fabric3Exception { LogicalChannel channel = null; LogicalCompositeComponent parent = invocable.getParent().getParent(); while (true) { if (parent != null) { channel = parent.getChannel(channelUri); if (channel != null) { break; } parent = parent.getParent(); } else { break; } } if (channel == null) { throw new Fabric3Exception("Channel not found: " + channelUri); } return channel; }
/** * Returns the channel in the invocable hierarchy. * * @param channelUri the channel uri * @param invocable the invocable * @return the channel * @throws ChannelNotFoundException if the channel is not found */ public static LogicalChannel getChannelInHierarchy(URI channelUri, LogicalInvocable invocable) throws ChannelNotFoundException { LogicalChannel channel = null; LogicalCompositeComponent parent = invocable.getParent().getParent(); while (true) { if (parent != null) { channel = parent.getChannel(channelUri); if (channel != null) { break; } parent = parent.getParent(); } else { break; } } if (channel == null) { throw new ChannelNotFoundException("Channel not found: " + channelUri); } return channel; }
public void normalize(LogicalComponent<?> component) { LogicalComponent<?> parent = component.getParent(); ComponentDefinition<?> definition = component.getDefinition(); Autowire autowire = definition.getAutowire(); if (autowire == Autowire.INHERITED) { // check in the parent composite definition if (parent != null) { autowire = parent.getAutowire(); if (autowire == Autowire.ON || autowire == Autowire.OFF) { component.setAutowire(autowire); } } else { // off by default component.setAutowire(Autowire.OFF); } } else { component.setAutowire(autowire); } } }
public FtpTargetDefinition generateTarget(LogicalBinding<FtpBindingDefinition> binding, ServiceContract contract, List<LogicalOperation> operations, EffectivePolicy policy) throws GenerationException { if (operations.size() != 1) { throw new GenerationException("Expects only one operation"); } URI id = binding.getParent().getParent().getParent().getUri(); FtpBindingDefinition definition = binding.getDefinition(); boolean active = definition.getTransferMode() == TransferMode.ACTIVE; FtpSecurity security = processPolicies(policy); FtpTargetDefinition hwtd = new FtpTargetDefinition(id, active, security, connectTimeout, socketTimeout); hwtd.setUri(definition.getTargetUri()); if (!definition.getSTORCommands().isEmpty()) { hwtd.setSTORCommands(definition.getSTORCommands()); } hwtd.setTmpFileSuffix(binding.getDefinition().getTmpFileSuffix()); return hwtd; }
private void resolveReferences(LogicalComponent<?> component, InstantiationContext context) { LogicalCompositeComponent parent = component.getParent(); for (LogicalReference reference : component.getReferences()) { if (reference.isBound()) { // reference is targeted using binding.sca or is explicitly bound so it should not be autowired continue; } Multiplicity multiplicityValue = reference.getDefinition().getMultiplicity(); boolean refMultiplicity = multiplicityValue.equals(Multiplicity.ZERO_N) || multiplicityValue.equals(Multiplicity.ONE_N); if (refMultiplicity || !reference.isResolved()) { // Only resolve references that have not been resolved or ones that are multiplicities since the latter may be reinjected. // Explicitly set the reference to unresolved, since if it was a multiplicity it may have been previously resolved. reference.setResolved(false); resolveReference(reference, parent, context); } } }
public FtpWireTargetDefinition generateTarget(LogicalBinding<FtpBindingDefinition> binding, ServiceContract contract, List<LogicalOperation> operations, EffectivePolicy policy) throws GenerationException { if (operations.size() != 1) { throw new GenerationException("Expects only one operation"); } URI id = binding.getParent().getParent().getParent().getUri(); FtpBindingDefinition definition = binding.getDefinition(); boolean active = definition.getTransferMode() == TransferMode.ACTIVE; FtpSecurity security = processPolicies(policy); FtpWireTargetDefinition hwtd = new FtpWireTargetDefinition(id, active, security, connectTimeout, socketTimeout); hwtd.setUri(definition.getTargetUri()); if (!definition.getSTORCommands().isEmpty()) { hwtd.setSTORCommands(definition.getSTORCommands()); } hwtd.setTmpFileSuffix(binding.getDefinition().getTmpFileSuffix()); return hwtd; }
private void resolveReferences(LogicalComponent<?> component, InstantiationContext context) { LogicalCompositeComponent parent = component.getParent(); for (LogicalReference reference : component.getReferences()) { if (reference.isBound()) { // reference is targeted using binding.sca or is explicitly bound so it should not be autowired continue; } Multiplicity multiplicityValue = reference.getDefinition().getMultiplicity(); boolean refMultiplicity = multiplicityValue.equals(Multiplicity.ZERO_N) || multiplicityValue.equals(Multiplicity.ONE_N); if (refMultiplicity || !reference.isResolved()) { // Only resolve references that have not been resolved or ones that are multiplicities since the latter may be reinjected. // Explicitly set the reference to unresolved, since if it was a multiplicity it may have been previously resolved. reference.setResolved(false); resolveReference(reference, parent, context); } } }
public ZeroMQWireTarget generateTarget(LogicalBinding<ZeroMQBinding> binding, ServiceContract contract, List<LogicalOperation> operations) { validateServiceContract(contract); ZeroMQMetadata metadata = binding.getDefinition().getZeroMQMetadata(); if (binding.isCallback()) { URI targetUri = URI.create("zmq://" + contract.getInterfaceName()); return new ZeroMQWireTarget(targetUri, metadata); } URI targetUri; // If this is an undeployment, use the previously calculated target URI. This must be done since the target component may no longer // be in the domain if it has been undeployed from another zone. if (LogicalState.MARKED == binding.getState()) { targetUri = binding.getMetadata(TARGET_URI, URI.class); } else { targetUri = binding.getDefinition().getTargetUri();// parseTargetUri(binding); if (targetUri != null) { targetUri = URI.create(binding.getParent().getParent().getParent().getUri() + "/" + targetUri); } else { // create a synthetic name targetUri = URI.create("f3synthetic://" + binding.getParent().getUri() + "/" + binding.getDefinition().getName()); } binding.addMetadata(TARGET_URI, targetUri); } return generateTarget(contract, targetUri, metadata); }
private void resolveReferences(LogicalComponent<?> component, InstantiationContext context) { LogicalCompositeComponent parent = component.getParent(); for (LogicalReference reference : component.getReferences()) { boolean scaTarget = isScaTarget(reference); if (scaTarget || reference.isConcreteBound()) { // reference is targeted using binding.sca or is explicitly bound so it should not be autowired continue; } Multiplicity multiplicityValue = reference.getDefinition().getMultiplicity(); boolean refMultiplicity = multiplicityValue.equals(Multiplicity.ZERO_N) || multiplicityValue.equals(Multiplicity.ONE_N); if (refMultiplicity || !reference.isResolved()) { // Only resolve references that have not been resolved or ones that are multiplicities since the latter may be reinjected. // Explicitly set the reference to unresolved, since if it was a multiplicity it may have been previously resolved. reference.setResolved(false); resolve(reference, parent, context); } } }