/** * Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET * (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije * informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE * COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp., * INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM * ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC)) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.societies.css.devicemgmt.devicemanager.impl; import java.util.ArrayList; import java.util.List; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.css.devicemgmt.IDevice; import org.societies.api.css.devicemgmt.IDriverService; import org.societies.api.internal.css.devicemgmt.IDeviceControl; import org.societies.api.internal.css.devicemgmt.model.DeviceCommonInfo; import org.societies.api.internal.css.devicemgmt.model.DeviceMgmtDriverServiceConstants; public class DeviceImpl implements IDevice, IDeviceControl{ private static Logger LOG = LoggerFactory.getLogger(DeviceImpl.class); private DeviceManager deviceManager; private DeviceCommonInfo deviceCommonInfo; private String deviceId; private boolean status = true; private String deviceNodeId; public DeviceImpl(DeviceManager deviceMgr, String deviceNodeId, String deviceId, DeviceCommonInfo deviceCommonInfo) { this.deviceManager = deviceMgr; this.deviceCommonInfo = deviceCommonInfo; this.deviceId = deviceId; this.deviceNodeId = deviceNodeId; } @Override public String getDeviceName() { return deviceCommonInfo.getDeviceName(); } @Override public String getDeviceId() { return this.deviceId; } @Override public String getDeviceType() { return deviceCommonInfo.getDeviceType(); } @Override public String getDeviceDescription() { return deviceCommonInfo.getDeviceDescription(); } @Override public String getDeviceConnectionType() { return deviceCommonInfo.getDeviceConnectionType(); } // public void enable() { // // this.status = true; // } // // // public void disable() { // // this.status = false; // } @Override public boolean isEnable() { return this.status; } @Override public String getDeviceLocation() { return deviceCommonInfo.getDeviceLocation(); } @Override public String getDeviceProvider() { return deviceCommonInfo.getDeviceProvider(); } @Override public boolean isContextSource() { return deviceCommonInfo.getContextSource(); } @Override public List<String> getEventNameList(){ return null; } @Override public String getDeviceNodeId() { return this.deviceNodeId; } @Override public IDriverService getService(String serviceName) { if (status) { LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ getService 1 " + serviceName); String physicalDeviceId = deviceManager.getPhysicalDeviceId(deviceId); LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ getService 2 physicalDeviceId: " + physicalDeviceId); List <String> serviceList = deviceManager.getDeviceServiceNames(deviceId); LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ getService 3"); if (serviceList != null && physicalDeviceId != null) { LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ serviceList non null"); if (serviceList.contains(serviceName)) { LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ serviceList.contains(serviceId) get service by: service id = " + serviceName +" and device Id = " + deviceId); ServiceReference[] sr = null; try { sr = DeviceManager.bundleContext.getServiceReferences(IDriverService.class.getName(), "(&("+DeviceMgmtDriverServiceConstants.DEVICE_DRIVER_SERVICE_NAME+"="+serviceName+")("+ DeviceMgmtDriverServiceConstants.DEVICE_DRIVER_PHYSICAL_DEVICE_ID+"="+physicalDeviceId+"))"); } catch (InvalidSyntaxException e) { e.printStackTrace(); } if (sr != null) { LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ sr"); IDriverService iDeviceService = (IDriverService)DeviceManager.bundleContext.getService(sr[0]); return iDeviceService; } LOG.info("++++++++++++++++++++++++++++++++++++++++++++++ sr null"); return null; } return null; } return null; } else { return null; } } @Override public IDriverService [] getServices() { if (status) { String physicalDeviceId = deviceManager.getPhysicalDeviceId(this.deviceId); List <String> serviceNameList = deviceManager.getDeviceServiceNames(this.deviceId); List<IDriverService> deviceServiceList = new ArrayList<IDriverService>(); if (serviceNameList != null && physicalDeviceId != null) { ServiceReference[] sr = null; for(String serviceName : serviceNameList) { try { sr = DeviceManager.bundleContext.getServiceReferences(IDriverService.class.getName(), "(&("+DeviceMgmtDriverServiceConstants.DEVICE_DRIVER_SERVICE_NAME+"="+serviceName+")("+ DeviceMgmtDriverServiceConstants.DEVICE_DRIVER_PHYSICAL_DEVICE_ID+"="+physicalDeviceId+"))"); } catch (InvalidSyntaxException e) { e.printStackTrace(); } if (sr != null) { IDriverService iDeviceService = (IDriverService)DeviceManager.bundleContext.getService(sr[0]); deviceServiceList.add(iDeviceService); } } return (IDriverService [])deviceServiceList.toArray(new IDriverService []{}); } else { return null; } } else { return null; } } public void removeDevice() { deviceManager.removeDeviceFromContainer(deviceCommonInfo.getDeviceFamilyIdentity(), deviceId); LOG.info("-- The device " + deviceId + " has been removed"); } @Override public void enable(String nodeId, String deviceId) { this.status = true; LOG.info("-- IDevice: a device with Id: " + deviceId + " is enabled"); } @Override public void disable(String nodeId, String deviceId) { this.status = false; LOG.info("-- IDevice: a device with Id: " + deviceId + " is disable"); } @Override public void share(String nodeId, String deviceId) { } @Override public void unshare(String nodeId, String deviceId) { } }