private ConnectorDescription applyChanges(ConnectorDescription persistenceContent, ChangeSet changes) throws MergeException { MapDifference<String, String> changedAttributes = changes.getChangedAttributes(); Map<String, String> attributes = persistenceContent.getAttributes(); Map<String, String> newAttributes = ConfigUtils.updateMap(attributes, changedAttributes); Map<String, Object> newProperties = ConfigUtils.updateMap(persistenceContent.getProperties(), changes.getChangedProperties()); return new ConnectorDescription(newAttributes, new Hashtable<String, Object>(newProperties)); }
private void applyConfigChanges(ConnectorDescription old, ConnectorDescription diff) { Map<String, String> updatedAttributes = updateAttributes(old.getAttributes(), diff.getAttributes()); old.setAttributes(updatedAttributes); updateProperties(old.getProperties(), diff.getProperties()); }
private void addDefaultLocations(ConnectorId id, ConnectorDescription connectorDescription) { Map<String, Object> properties = connectorDescription.getProperties(); if (properties.get("location.root") != null) { return; } Map<String, Object> copy = new HashMap<String, Object>(properties); copy.put("location.root", id.getInstanceId()); connectorDescription.setProperties(copy); }
@Override public void forceUpdateRegistration(ConnectorId id, ConnectorDescription connectorDescription) { if (!instances.containsKey(id)) { forceCreateService(id, connectorDescription); } else if (connectorDescription.getAttributes() == null) { forceUpdateAttributes(id, connectorDescription.getAttributes()); } Map<String, Object> properties = connectorDescription.getProperties(); if (properties != null) { updateProperties(id, properties); } };
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); }
@Override public void install(File artifact) throws Exception { LOGGER.debug("ConnectorDeployer.install(\"{}\")", artifact.getAbsolutePath()); ConnectorFile configFile = oldConfigs.get(artifact); Map<String, Object> properties = new Hashtable<String, Object>(configFile.getProperties()); if (properties.get(Constants.SERVICE_RANKING) == null && ConnectorFile.isRootService(artifact)) { properties.put(Constants.SERVICE_RANKING, -1); } LOGGER.info("Loading instance {}", configFile.getConnectorId()); login(); try { serviceManager.create(configFile.getConnectorId(), new ConnectorDescription(new HashMap<String, String>(configFile.getAttributes()), properties)); } finally { logout(); } }
@Override public void updateRegistration(ConnectorId id, ConnectorDescription connectorDescription) throws ConnectorValidationFailedException { if (!instances.containsKey(id)) { createService(id, connectorDescription); } else if (connectorDescription.getAttributes() != null) { updateAttributes(id, connectorDescription.getAttributes()); } Map<String, Object> properties = connectorDescription.getProperties(); if (properties != null) { updateProperties(id, properties); } }
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); }
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); }