blob: 6384829909374f3003819d29fd435bdd4b15334a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/
package org.eclipse.om2m.sdt.home.monitoring.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.om2m.commons.constants.FilterUsage;
import org.eclipse.om2m.commons.constants.MimeMediaType;
import org.eclipse.om2m.commons.constants.Operation;
import org.eclipse.om2m.commons.constants.ResponseStatusCode;
import org.eclipse.om2m.commons.resource.FilterCriteria;
import org.eclipse.om2m.commons.resource.RequestPrimitive;
import org.eclipse.om2m.commons.resource.ResponsePrimitive;
import org.eclipse.om2m.commons.resource.URIList;
import org.eclipse.om2m.core.service.CseService;
public class ResourceDiscovery {
public static CseService cseService;
private static Log LOGGER = LogFactory.getLog(ResourceDiscovery.class);
// DISCOVERY parameter
private static final String SEARCH_STRING_DISCOVERY_PARAMETER = "searchString";
// SEARCHSTRING
private static final String RESOURCE_ID_SEARCH_STRING = "ResourceID/";
private static final String RESOURCE_TYPE_APPLICATION_SEARCH_STRING = "ResourceType/Application";
public static void initCseService(CseService pCseService) {
cseService = pCseService;
}
public static String validateUserCredentials(String name, String password) {
LOGGER.info("validateUserCredentials " + name + "/" + password);
RequestPrimitive request = new RequestPrimitive();
request.setReturnContentType(MimeMediaType.OBJ);
request.setRequestContentType(MimeMediaType.OBJ);
request.setFrom(name + ":" + password);
request.setFilterCriteria(new FilterCriteria());
request.setOperation(Operation.RETRIEVE);
request.getFilterCriteria().setFilterUsage(FilterUsage.DISCOVERY_CRITERIA);
request.getFilterCriteria().getLabels().add(RESOURCE_ID_SEARCH_STRING + Constants.RESOURCE_ID);
request.getFilterCriteria().getLabels().add(RESOURCE_TYPE_APPLICATION_SEARCH_STRING);
request.setTo("/" + org.eclipse.om2m.commons.constants.Constants.CSE_ID
+ "/" + org.eclipse.om2m.commons.constants.Constants.CSE_NAME);
ResponsePrimitive response = cseService.doRequest(request);
if (! ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
LOGGER.info("KO");
return null;
}
URIList uriList = (URIList) response.getContent();
LOGGER.info("OK " + uriList);
return ((uriList == null) || uriList.getListOfUri().isEmpty()) ? null
: uriList.getListOfUri().get(0);
}
// public static List<String> retrievesAllDevices(String name, String password) {
// LOGGER.info("retrievesAllDevices");
// RequestPrimitive request = new RequestPrimitive();
// request.setTargetId(org.eclipse.om2m.commons.constants.Constants.SP_RELATIVE_URI_SEPARATOR
// + "/" + org.eclipse.om2m.commons.constants.Constants.CSE_ID
// + "/" + org.eclipse.om2m.commons.constants.Constants.CSE_NAME
// /*+ "/" + MN_CSE_NAME*/);
// request.setReturnContentType(MimeMediaType.OBJ);
// request.setRequestContentType(MimeMediaType.OBJ);
// request.setOperation(Operation.RETRIEVE);
// request.setFilterCriteria(new FilterCriteria());
// request.getFilterCriteria().setFilterUsage(FilterUsage.DISCOVERY_CRITERIA);
// request.getFilterCriteria().getLabels().add("object.type/device");
// request.setFrom(name + ":" + password);
//
// ResponsePrimitive response = cseService.doRequest(request);
// if (ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
// URIList uriList = (URIList) response.getContent();
// return uriList.getListOfUri();
// }
//
// return new ArrayList<String>();
// }
//
// public static String retrievesAllDevicesWithState(String name, String password) {
// LOGGER.info("retrievesAllDevicesWithState");
// List<String> deviceUris = retrievesAllDevices(name, password);
// String jsonString = "";
// // iterate over the list of device uri.
// for (String deviceUri : deviceUris) {
// Resource deviceFlex = retrieveDevice(deviceUri, name, password);
// if (deviceFlex != null) {
// String deviceId = null;
// List<String> labels = getLabels(deviceFlex);
// if (deviceFlex != null) {
// for (String label : labels) {
// if (label.startsWith("id/")) {
// deviceId = label.substring(3);
// }
// }
// }
//
// String deviceName = getLabelValue(labels, "name");
// String moduleUri = findDeviceStateModule((Resource)deviceFlex);
// String stateAttribute = findStateAttribute(findStateModuleDefinition(getDefinition(deviceFlex)));
// String deviceState = retrieveDeviceState(moduleUri, name, password);
//
// jsonString += (!jsonString.isEmpty() ? "," : "") + "{\"id\":\""
// + deviceId + "\"," + "\"name\":\"" + deviceName
// + "\",\"state\":" + deviceState + ",\"moduleUri\":\""
// + moduleUri + "\",\"attributeName\":\""
// + stateAttribute + "\"}";
// }
// }
// LOGGER.info("retrievesAllDevicesWithState " + jsonString);
// return jsonString.length() > 0 ? "[" + jsonString + "]" : "{}";
// }
//
// private static String findStateModuleDefinition(String deviceCntDef) {
// if (deviceCntDef != null) {
// if (deviceCntDef.equals(DeviceType.deviceLight.getDefinition())
// || deviceCntDef.equals(DeviceType.deviceGasValve.getDefinition()))
// return ModuleType.binarySwitch.getDefinition();
// if (deviceCntDef.equals(DeviceType.deviceWaterValve.getDefinition()))
// return ModuleType.liquidLevel.getDefinition();
// if (deviceCntDef.equals(DeviceType.deviceFloodDetector.getDefinition()))
// return ModuleType.waterSensor.getDefinition();
// if (deviceCntDef.equals(DeviceType.deviceSmokeDetector.getDefinition()))
// return ModuleType.smokeSensor.getDefinition();
//// switch (deviceCntDef.toLowerCase()) {
//// case "org.onem2m.home.device.devicelight":
//// case "org.onem2m.home.device.devicegasvalve":
//// return "org.onem2m.home.moduleclass.binaryswitch";
//// case "org.onem2m.home.device.devicewatervalve":
//// return "org.onem2m.home.moduleclass.waterlevel";
//// case "org.onem2m.home.device.deviceflooddetector":
//// return "org.onem2m.home.moduleclass.watersensor";
//// case "org.onem2m.home.device.devicesmokedetector":
//// return "org.onem2m.home.moduleclass.smokesensor";
//// }
// }
// return null;
// }
//
// private static String findStateAttribute(String moduleFlexCntDef) {
// if (moduleFlexCntDef != null) {
// if (moduleFlexCntDef.equals(ModuleType.smokeSensor.getDefinition())
// || moduleFlexCntDef.equals(ModuleType.waterSensor.getDefinition()))
// return DatapointType.alarm.getShortName();
// if (moduleFlexCntDef.equals(ModuleType.binarySwitch.getDefinition()))
// return DatapointType.powerState.getShortName();
// if (moduleFlexCntDef.equals(ModuleType.liquidLevel.getDefinition()))
// return DatapointType.liquidLevel.getShortName();
//// switch (moduleFlexCntDef.toLowerCase()) {
//// case "org.onem2m.home.moduleclass.binaryswitch":
//// return "powerState";
//// case "org.onem2m.home.moduleclass.watersensor":
//// case "org.onem2m.home.moduleclass.smokesensor":
//// return "alarm";
//// case "org.onem2m.home.moduleclass.waterlevel":
//// return "liquidlevel";
//// }
// }
// return null;
// }
//
// private static String findDeviceStateModule(Resource deviceFlex) {
// String deviceDefinition = getDefinition(deviceFlex);
// List<ChildResourceRef> childResourceRefs = null;
// if (deviceFlex instanceof AbstractFlexContainer) {
// childResourceRefs = ((AbstractFlexContainer) deviceFlex).getChildResource();
// } else if (deviceFlex instanceof FlexContainerAnnc) {
// childResourceRefs = ((FlexContainerAnnc) deviceFlex).getChildResource();
// }
// String stateModule = null;
// if (deviceDefinition != null) {
// stateModule = findStateModuleDefinition(deviceDefinition);
// }
//
// if ((stateModule != null) && (childResourceRefs != null)) {
// String moduleUri = null;
// for (ChildResourceRef ref : childResourceRefs) {
// if (ref.getType().equals(BigInteger.valueOf(ResourceType.FLEXCONTAINER_ANNC))
// || ref.getType().equals(BigInteger.valueOf(ResourceType.FLEXCONTAINER))) {
// if (ref.getResourceName().toLowerCase().contains(stateModule)) {
// moduleUri = ref.getValue();
// break;
// }
// }
// }
// return moduleUri;
// }
// return null;
// }
//
// public static String retrieveDeviceState(String moduleUri, String name, String password) {
// if (moduleUri != null) {
// LOGGER.info("retrieveDeviceState " + moduleUri);
// RequestPrimitive request = new RequestPrimitive();
// request.setFrom(name + ":" + password);
// request.setReturnContentType(MimeMediaType.OBJ);
// request.setRequestContentType(MimeMediaType.OBJ);
// request.setOperation(Operation.RETRIEVE);
// request.setTargetId(moduleUri);
// request.setResultContent(ResultContent.ORIGINAL_RES);
// ResponsePrimitive response = cseService.doRequest(request);
// AbstractFlexContainer moduleFlex = null;
// if (ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
// moduleFlex = (AbstractFlexContainer) response.getContent();
// }
// if (moduleFlex != null) {
// String stateAttribute = findStateAttribute(moduleFlex.getContainerDefinition());
// if (stateAttribute != null) {
// CustomAttribute stateCustomAttribute = moduleFlex.getCustomAttribute(stateAttribute);
// if (stateCustomAttribute != null) {
// String ret = stateCustomAttribute.getCustomAttributeValue();
// LOGGER.info("OK " + ret);
// return ret;
// }
// }
// }
// }
// LOGGER.info("KO");
// return null;
// }
//
// private static Resource retrieveDevice(String deviceUri, String name, String password) {
// RequestPrimitive request = new RequestPrimitive();
// request.setOperation(Operation.RETRIEVE);
// request.setReturnContentType(MimeMediaType.OBJ);
// request.setRequestContentType(MimeMediaType.OBJ);
// request.setFrom(name + ":" + password);
// request.setTargetId(deviceUri);
// request.setResultContent(ResultContent.ATTRIBUTES_AND_CHILD_REF);
//
// ResponsePrimitive response = cseService.doRequest(request);
// return (Resource) (ResponseStatusCode.OK.equals(response.getResponseStatusCode())
// ? response.getContent() : null);
// }
//
// public static String changeDeviceState(String name, String password,
// String moduleUri, String attributeName, boolean state) {
// LOGGER.info("changeDeviceState " + attributeName + "/" + state + " " + moduleUri);
// FlexContainer moduleFlexContainer = new FlexContainer();
// CustomAttribute customAttribute = new CustomAttribute();
// customAttribute.setCustomAttributeName(attributeName);
// customAttribute.setCustomAttributeType("xs:boolean");
// customAttribute.setCustomAttributeValue(Boolean.toString(state));
// moduleFlexContainer.getCustomAttributes().add(customAttribute);
//
// RequestPrimitive request = new RequestPrimitive();
// request.setContent(moduleFlexContainer);
// request.setReturnContentType(MimeMediaType.OBJ);
// request.setRequestContentType(MimeMediaType.OBJ);
// request.setResultContent(ResultContent.ORIGINAL_RES);
// request.setOperation(Operation.UPDATE);
// request.setFrom(name + ":" + password);
// request.setTargetId(moduleUri);
//
// ResponsePrimitive response = cseService.doRequest(request);
// return response.getResponseStatusCode().toString();
// }
//
// private static String getLabelValue(final List <String> labels, final String labelName) {
// if (labels != null) {
// for (String label : labels) {
// if (label.startsWith(labelName)) {
// return label.substring(labelName.length() + 1);
// }
// }
// }
// return null;
// }
//
// private static List<String> getLabels(Resource flex) {
// if (flex instanceof FlexContainerAnnc) {
// return ((FlexContainerAnnc) flex).getLabels();
// } else if (flex instanceof AbstractFlexContainer) {
// return ((AbstractFlexContainer) flex).getLabels();
// }
// return new ArrayList<String>();
// }
//
// private static String getDefinition(Resource flex) {
// if (flex instanceof AbstractFlexContainer) {
// return ((AbstractFlexContainer) flex).getContainerDefinition();
// }
// if (flex instanceof FlexContainerAnnc) {
// return ((FlexContainerAnnc) flex).getContainerDefinition();
// }
// return null;
// }
}