adding DeviceInfo operation handler

revert-dabc3590
Hasunie 8 years ago
parent d82670fa94
commit 67e75ee38a

@ -226,13 +226,17 @@ public class WindowsAPIUtils {
} }
} }
private static void updateDeviceInfo(DeviceIdentifier deviceId, DeviceInfo deviceInfo) /**
* This method is used to update Device Information.
* @param deviceId DeviceID to need to update.
* @param deviceInfo Device Info to be update/
* @throws DeviceDetailsMgtException Error occurs while updating Device Info.
*/
public static void updateDeviceInfo(DeviceIdentifier deviceId, DeviceInfo deviceInfo)
throws DeviceDetailsMgtException { throws DeviceDetailsMgtException {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceInformationManager informationManager = DeviceInformationManager informationManager =
(DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null); (DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null);
informationManager.addDeviceInfo(deviceId, deviceInfo); informationManager.addDeviceInfo(deviceId, deviceInfo);
} }
} }

@ -24,6 +24,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification; import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService; import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService;
@ -165,7 +166,7 @@ public class OperationHandler {
} }
} }
/*** /**
* Update status of the ring operation. * Update status of the ring operation.
* *
* @param status Ring status of the device. * @param status Ring status of the device.
@ -193,7 +194,7 @@ public class OperationHandler {
} }
} }
/*** /**
* Update the status of the DataWipe operation. * Update the status of the DataWipe operation.
* *
* @param status Status of the data wipe. * @param status Status of the data wipe.
@ -222,6 +223,23 @@ public class OperationHandler {
} }
} }
public void updateDeviceInfoStatus(DeviceIdentifier deviceIdentifier) throws OperationManagementException {
List<? extends Operation> pendingDeviceInfoOperations;
try {
pendingDeviceInfoOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier);
} catch (DeviceManagementException e) {
throw new OperationManagementException("Error occurred in getting pending operation.");
}
for (Operation operation : pendingDeviceInfoOperations) {
if (PluginConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) {
operation.setStatus(Operation.Status.COMPLETED);
updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations);
}
}
}
/** /**
* Get pending operations. * Get pending operations.
* *
@ -231,13 +249,20 @@ public class OperationHandler {
*/ */
public List<? extends Operation> getPendingOperations(SyncmlDocument syncmlDocument) public List<? extends Operation> getPendingOperations(SyncmlDocument syncmlDocument)
throws OperationManagementException, WindowsOperationException { throws OperationManagementException, WindowsOperationException {
SyncmlHeader syncmlHeader = syncmlDocument.getHeader();
SyncmlBody syncmlBody = syncmlDocument.getBody();
List<? extends Operation> pendingOperations; List<? extends Operation> pendingOperations;
DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlHeader.getSource().getLocURI());
syncmlDocument.getHeader().getSource().getLocURI()); int sessionId = syncmlHeader.getSessionId();
int msgId = syncmlHeader.getMsgID();
if (!(PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID == msgId &&
PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId)) {
if ((syncmlBody.getResults() != null)) {
updateDeviceInfo(syncmlDocument);
}
}
UpdateUriOperations(syncmlDocument); UpdateUriOperations(syncmlDocument);
generateComplianceFeatureStatus(syncmlDocument); generateComplianceFeatureStatus(syncmlDocument);
pendingOperations = WindowsAPIUtils.getDeviceManagementService().getPendingOperations(deviceIdentifier); pendingOperations = WindowsAPIUtils.getDeviceManagementService().getPendingOperations(deviceIdentifier);
return pendingOperations; return pendingOperations;
} }
@ -486,4 +511,61 @@ public class OperationHandler {
} }
} }
public void updateDeviceInfo(SyncmlDocument syncmlDocument) throws WindowsOperationException {
String softwareVersion;
String imsi;
String imei;
String model;
String vendor;
String totalRAM;
String deviceID = null;
String totalStorage;
List<ItemTag> deviceInformations = syncmlDocument.getBody().getResults().getItem();
DeviceInfo deviceInfo = new DeviceInfo();
for (ItemTag item : deviceInformations) {
String source = item.getSource().getLocURI();
if (OperationCode.Info.SOFTWARE_VERSION.getCode().equals(source)) {
softwareVersion = item.getData();
deviceInfo.setOsVersion(softwareVersion);
}
if (OperationCode.Info.IMSI.getCode().equals(source)) {
imsi = item.getData();
deviceInfo.setIMSI(imsi);
}
if (OperationCode.Info.IMEI.getCode().equals(source)) {
imei = item.getData();
deviceInfo.setIMEI(imei);
}
if (OperationCode.Info.DEVICE_MODEL.getCode().equals(source)) {
model = item.getData();
deviceInfo.setDeviceModel(model);
}
if (OperationCode.Info.VENDOR.getCode().equals(source)) {
vendor = item.getData();
deviceInfo.setVendor(vendor);
}
if (OperationCode.Info.TOTAL_RAM.getCode().equals(source)) {
totalRAM = item.getData();
deviceInfo.setAvailableRAMMemory(Double.parseDouble(totalRAM));
}
if (OperationCode.Info.TOTAL_STORAGE.getCode().equals(source)) {
totalStorage = item.getData();
deviceInfo.setInternalAvailableMemory(Double.parseDouble(totalStorage));
}
if (OperationCode.Info.DEV_ID.getCode().equals(source)) {
deviceID = item.getData();
}
}
DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(deviceID);
try {
WindowsAPIUtils.updateDeviceInfo(deviceIdentifier, deviceInfo);
updateDeviceInfoStatus(deviceIdentifier);
} catch (org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException e) {
throw new WindowsOperationException("Error occurred while adding Device info.");
} catch (OperationManagementException e) {
throw new WindowsOperationException("Error occurred while updating Device info operation status.");
}
}
} }

@ -247,10 +247,10 @@ public class OperationReply {
switch (type) { switch (type) {
case POLICY: case POLICY:
if (this.syncmlDocument.getBody().getAlert() != null) { if (this.syncmlDocument.getBody().getAlert() != null) {
if ((Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody() if ((Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody().getAlert()
.getAlert().getData())) || .getData())) || Constants.INITIAL_WIN10_ALERT_DATA.
Constants.INITIAL_WIN10_ALERT_DATA.equals(this.syncmlDocument.getBody() equals(this.syncmlDocument.getBody()
.getAlert().getData())) { .getAlert().getData())) {
SequenceTag policySequence = new SequenceTag(); SequenceTag policySequence = new SequenceTag();
policySequence = buildSequence(operation, policySequence); policySequence = buildSequence(operation, policySequence);
syncmlBody.setSequence(policySequence); syncmlBody.setSequence(policySequence);
@ -322,33 +322,40 @@ public class OperationReply {
} }
} }
if (PluginConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) { if (PluginConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) {
HeartBeatDeviceInfo heartBeatDeviceInfo = new HeartBeatDeviceInfo(); if (this.syncmlDocument.getBody().getAlert() != null) {
deviceInfoOperations = heartBeatDeviceInfo.getDeviceInfo(); if ((Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody().getAlert()
for (int x = 0; x > deviceInfoOperations.size(); x++) { .getData())) || Constants.INITIAL_WIN10_ALERT_DATA.
ItemTag deviceInfo = appendGetInfo(operation); equals(this.syncmlDocument.getBody()
getElements.add(deviceInfo); .getAlert().getData())) {
HeartBeatDeviceInfo heartBeatDeviceInfo = new HeartBeatDeviceInfo();
deviceInfoOperations = heartBeatDeviceInfo.getDeviceInfo();
for (Operation infoOperation : deviceInfoOperations) {
ItemTag deviceInfo = appendGetInfo(infoOperation);
getElements.add(deviceInfo);
}
}
} }
break;
} }
break;
} }
} }
if (!replaceItems.isEmpty()) {
replaceElement.setCommandId(Constants.SyncmlMessageCodes.replaceCommandId);
replaceElement.setItems(replaceItems);
}
if (!getElements.isEmpty()) {
getElement.setCommandId(Constants.SyncmlMessageCodes.elementCommandId);
getElement.setItems(getElements);
}
if (!addElements.isEmpty()) {
atomicTagElement.setCommandId(Constants.SyncmlMessageCodes.atomicCommandId);
atomicTagElement.setAdds(addElements);
}
syncmlBody.setGet(getElement);
syncmlBody.setExec(executeElements);
syncmlBody.setAtomicTag(atomicTagElement);
syncmlBody.setReplace(replaceElement);
} }
if (!replaceItems.isEmpty()) {
replaceElement.setCommandId(Constants.SyncmlMessageCodes.replaceCommandId);
replaceElement.setItems(replaceItems);
}
if (!getElements.isEmpty()) {
getElement.setCommandId(Constants.SyncmlMessageCodes.elementCommandId);
getElement.setItems(getElements);
}
if (!addElements.isEmpty()) {
atomicTagElement.setCommandId(Constants.SyncmlMessageCodes.atomicCommandId);
atomicTagElement.setAdds(addElements);
}
syncmlBody.setGet(getElement);
syncmlBody.setExec(executeElements);
syncmlBody.setAtomicTag(atomicTagElement);
syncmlBody.setReplace(replaceElement);
} }
private ItemTag appendExecInfo(Operation operation) { private ItemTag appendExecInfo(Operation operation) {

Loading…
Cancel
Save