private Map<String, Object> populatePropertiesWithRequiredAttributes( final Map<String, Object> properties, ConnectorId id) { Map<String, Object> result = new HashMap<String, Object>(properties); for (Entry<String, Object> entry : properties.entrySet()) { result.put(entry.getKey(), entry.getValue()); } result.put(Constants.DOMAIN_KEY, id.getDomainType()); result.put(Constants.CONNECTOR_KEY, id.getConnectorType()); result.put(Constants.ID_KEY, id.toFullID()); return result; }
private void validateId(ConnectorId id) { Preconditions.checkNotNull(id); Preconditions.checkNotNull(id.getConnectorType()); Preconditions.checkNotNull(id.getDomainType()); Preconditions.checkNotNull(id.getInstanceId()); }
protected ConnectorInstanceFactory getConnectorFactory(ConnectorId id) { String connectorType = id.getConnectorType(); Filter connectorFilter = serviceUtils.makeFilter(ConnectorInstanceFactory.class, String.format("(&(%s=%s)(%s=%s))", Constants.DOMAIN_KEY, id.getDomainType(), Constants.CONNECTOR_KEY, connectorType)); ConnectorInstanceFactory service = serviceUtils.getOsgiServiceProxy(connectorFilter, ConnectorInstanceFactory.class); return service; }
/** * parses a full connector id (format <domainType>+<connectorType>+<instanceId>) and sets the corresponding values * in the event. Example: "scm+git+projectx-main-repo" */ public void parseConnectorId(String connectorId) { ConnectorId id = ConnectorId.fromFullId(connectorId); domainId = id.getDomainType(); connectorId = id.getConnectorType(); instanceId = id.getInstanceId(); }
private void createService(ConnectorId id, ConnectorDescription description) throws ConnectorValidationFailedException { DomainProvider domainProvider = getDomainProvider(id.getDomainType()); ConnectorInstanceFactory factory = getConnectorFactory(id); Map<String, String> errors = factory.getValidationErrors(description.getAttributes()); if (!errors.isEmpty()) { throw new ConnectorValidationFailedException(errors); } finishCreatingInstance(id, description, domainProvider, factory); }
private void finishCreatingInstance(ConnectorId id, ConnectorDescription description, DomainProvider domainProvider, ConnectorInstanceFactory factory) { Connector serviceInstance = factory.createNewInstance(id.toString()); if (serviceInstance == null) { throw new IllegalStateException("Factory cannot create a new service for instance id " + id.toString()); } factory.applyAttributes(serviceInstance, description.getAttributes()); serviceInstance.setDomainId(id.getDomainType()); serviceInstance.setConnectorId(id.getConnectorType()); String[] clazzes = new String[]{ OpenEngSBService.class.getName(), Domain.class.getName(), domainProvider.getDomainInterface().getName(), }; Map<String, Object> properties = populatePropertiesWithRequiredAttributes(description.getProperties(), id); ServiceRegistration serviceRegistration = bundleContext.registerService(clazzes, serviceInstance, MapAsDictionary.wrap(properties)); registrations.put(id, serviceRegistration); instances.put(id, serviceInstance); }
private void forceCreateService(ConnectorId id, ConnectorDescription description) { DomainProvider domainProvider = getDomainProvider(id.getDomainType()); ConnectorInstanceFactory factory = getConnectorFactory(id); Connector serviceInstance = factory.createNewInstance(id.toString()); factory.applyAttributes(serviceInstance, description.getAttributes()); finishCreatingInstance(id, description, domainProvider, factory); }