/*******************************************************************************
* Copyright (c) 2011, 2016 Eurotech and/or its affiliates
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eurotech
*******************************************************************************/
package org.eclipse.kura.core.configuration.upgrade;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.kura.configuration.ComponentConfiguration;
import org.eclipse.kura.configuration.ConfigurationService;
import org.eclipse.kura.core.configuration.ComponentConfigurationImpl;
import org.eclipse.kura.core.configuration.XmlComponentConfigurations;
import org.eclipse.kura.core.configuration.metatype.Tocd;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentConstants;
public class ConfigurationUpgrade {
private static final String KURA_CLOUD_SERVICE_FACTORY_PID = "kura.cloud.service.factory.pid";
private static final String FACTORY_PID = "org.eclipse.kura.core.cloud.factory.DefaultCloudServiceFactory";
private static final String CLOUD_SERVICE_FACTORY_PID = "org.eclipse.kura.cloud.CloudService";
private static final String DATA_SERVICE_FACTORY_PID = "org.eclipse.kura.data.DataService";
private static final String DATA_TRANSPORT_SERVICE_FACTORY_PID = "org.eclipse.kura.core.data.transport.mqtt.MqttDataTransport";
private static final String CLOUD_SERVICE_PID = "org.eclipse.kura.cloud.CloudService";
private static final String DATA_SERVICE_PID = "org.eclipse.kura.data.DataService";
private static final String DATA_TRANSPORT_SERVICE_PID = "org.eclipse.kura.core.data.transport.mqtt.MqttDataTransport";
private static final String DATA_SERVICE_REFERENCE_NAME = "DataService";
private static final String DATA_TRANSPORT_SERVICE_REFERENCE_NAME = "DataTransportService";
private static final String REFERENCE_TARGET_VALUE_FORMAT = "(" + ConfigurationService.KURA_SERVICE_PID + "=%s)";
public static XmlComponentConfigurations upgrade(XmlComponentConfigurations xmlConfigs) {
List<ComponentConfigurationImpl> result = new ArrayList<ComponentConfigurationImpl>();
for (ComponentConfiguration config : xmlConfigs.getConfigurations()) {
String pid = config.getPid();
Map<String, Object> props = new HashMap<String, Object>(config.getConfigurationProperties());
ComponentConfigurationImpl cc = new ComponentConfigurationImpl(pid, (Tocd) config.getDefinition(), props);
result.add(cc);
if (CLOUD_SERVICE_PID.equals(pid)) {
props.put(ConfigurationAdmin.SERVICE_FACTORYPID, CLOUD_SERVICE_FACTORY_PID);
String name = DATA_SERVICE_REFERENCE_NAME + ComponentConstants.REFERENCE_TARGET_SUFFIX;
props.put(name, String.format(REFERENCE_TARGET_VALUE_FORMAT, DATA_SERVICE_PID));
props.put(KURA_CLOUD_SERVICE_FACTORY_PID, FACTORY_PID);
} else if (DATA_SERVICE_PID.equals(pid)) {
props.put(ConfigurationAdmin.SERVICE_FACTORYPID, DATA_SERVICE_FACTORY_PID);
String name = DATA_TRANSPORT_SERVICE_REFERENCE_NAME + ComponentConstants.REFERENCE_TARGET_SUFFIX;
props.put(name, String.format(REFERENCE_TARGET_VALUE_FORMAT, DATA_TRANSPORT_SERVICE_PID));
props.put(KURA_CLOUD_SERVICE_FACTORY_PID, FACTORY_PID);
} else if (DATA_TRANSPORT_SERVICE_PID.equals(pid)) {
props.put(ConfigurationAdmin.SERVICE_FACTORYPID, DATA_TRANSPORT_SERVICE_FACTORY_PID);
props.put(KURA_CLOUD_SERVICE_FACTORY_PID, FACTORY_PID);
}
}
XmlComponentConfigurations xmlConfigurations = new XmlComponentConfigurations();
xmlConfigurations.setConfigurations(result);
return xmlConfigurations;
}
}