package ch.elexis.core.services; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.core.runtime.IStatus; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.component.annotations.ReferencePolicyOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.elexis.core.model.stock.ICommissioningSystemDriverFactory; import ch.elexis.core.status.StatusUtil; @Component(service = {}) public class StockCommissioningSystemDriverFactories { private Logger log = LoggerFactory.getLogger(StockCommissioningSystemDriverFactories.class); private static Map<UUID, ICommissioningSystemDriverFactory> driverFactories = new ConcurrentHashMap<UUID, ICommissioningSystemDriverFactory>(); @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY) public void bind(ICommissioningSystemDriverFactory driverFactory){ log.debug("Binding " + driverFactory.getClass().getName()); driverFactories.put(driverFactory.getIdentification(), driverFactory); } // @Activate // public void activate(){ // log.trace("Initializing stock commissioning systems."); // IStatus status = new StockCommissioningSystemService().initializeAllInstances(); // if (!status.isOK()) { // StatusUtil.logStatus(log, status, true); // } // } public void unbind(ICommissioningSystemDriverFactory driverFactory){ log.debug("Unbinding " + driverFactory.getClass().getName()); log.info("Shutting down stock commissioning systems for driver id [{}]", driverFactory.getIdentification().toString()); IStatus status = new StockCommissioningSystemService() .shutdownInstancesUsingDriver(driverFactory.getIdentification()); if (!status.isOK()) { StatusUtil.logStatus(log, status, true); } driverFactories.remove(driverFactory.getIdentification()); } public static ICommissioningSystemDriverFactory getDriverFactory(UUID driver){ return driverFactories.get(driver); } public static List<UUID> getAllDriverUuids(){ return new ArrayList<UUID>(driverFactories.keySet()); } public static String getInfoStringForDriver(UUID driverUuid, boolean extended){ ICommissioningSystemDriverFactory icsdf = driverFactories.get(driverUuid); if (icsdf != null) { if (extended) { return icsdf.getName() + " (" + icsdf.getDescription() + ")"; } else { return icsdf.getName(); } } return ""; } }