/******************************************************************************* * Copyright (c) 2009 Paul VanderLei, Simon Archer, Jeff McAffer and others. All * rights reserved. This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 and Eclipse Distribution License * v1.0 which accompanies this distribution. The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License * is available at http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Paul VanderLei, Simon Archer, Jeff McAffer - initial API and implementation *******************************************************************************/ package org.eclipse.examples.toast.internal.backend.controlcenter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.examples.toast.backend.controlcenter.IControlCenter; import org.eclipse.examples.toast.backend.controlcenter.IData; import org.eclipse.examples.toast.backend.data.IToastBackEndDataFactory; import org.eclipse.examples.toast.backend.data.IVehicle; import org.eclipse.examples.toast.backend.data.internal.Vehicle; import org.eclipse.examples.toast.backend.provisioning.IProvisioner; import org.eclipse.examples.toast.core.LogUtility; import org.eclipse.examples.toast.core.discovery.IDiscovery; import org.eclipse.examples.toast.core.discovery.IDiscoveryListener; public class ControlCenter implements IControlCenter, IDiscoveryListener { private IProvisioner provisioner; private IDiscovery discovery; private IData data; public ControlCenter() { super(); } private void loadData() { Collection vehicles = data.getVehicles(); for (Iterator i = vehicles.iterator(); i.hasNext();) { IVehicle vehicle = (IVehicle) i.next(); Map properties = new HashMap(); properties.put("osgi.os", System.getProperty("osgi.os")); properties.put("osgi.ws", System.getProperty("osgi.ws")); properties.put("osgi.arch", System.getProperty("osgi.arch")); provisioner.addProfile(vehicle.getName(), properties); } } public void setDiscovery(IDiscovery value) { discovery = value; } public void setData(IData value) { data = value; } public void setProvisioner(IProvisioner value) { provisioner = value; } public void startup() { Runnable work = new Runnable() { public void run() { loadData(); discovery.addListener(ControlCenter.this); Collection profiles = provisioner.getProfiles(); for (Iterator i = profiles.iterator(); i.hasNext();) addVehicle((String) i.next(), null); } }; new Thread(work).run(); } public void shutdown() { discovery.removeListener(this); } public Collection getKnownIds() { return data.getVehicleNames(); } public Collection getVehicles() { return new ArrayList(data.getVehicles()); } public IVehicle getVehicle(String name) { return data.getVehicle(name); } public IVehicle addVehicle(String name, Map properties) { IVehicle result = getVehicle(name); if (result != null) { return result; } Vehicle vehicle = (Vehicle) IToastBackEndDataFactory.eINSTANCE.createVehicle(); vehicle.setName(name); data.persist(vehicle); provisioner.addProfile(name, properties); return vehicle; } // TODO Semantics of removeVehicle are unclear as this method is never called public void removeVehicle(String name) { provisioner.removeProfile(name); } public void registered(String id, Map properties) { LogUtility.logDebug(this, "Vehicle registered: " + id); IVehicle vehicle = addVehicle(id, properties); vehicle.setOnline(true); data.update(vehicle); } public void unregistered(String name) { LogUtility.logDebug(this, "Vehicle unregistered: " + name); IVehicle vehicle = addVehicle(name, null); vehicle.setOnline(false); data.update(vehicle); } }