diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java
index 2aee823196..d0ee58c0a6 100644
--- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java
+++ b/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java
@@ -295,10 +295,10 @@ public class AndroidSenseServiceImpl implements AndroidSenseService {
return Response.status(Response.Status.NOT_ACCEPTABLE.getStatusCode()).entity(false).build();
}
} catch (DeviceManagementException e) {
- log.error(e.getErrorMessage(), e);
+ log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(false).build();
} catch (ConfigurationManagementException e) {
- log.error(e.getErrorMessage(), e);
+ log.error(e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(false).build();
}
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml
index d08016c5d9..1258094d9b 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/pom.xml
@@ -46,7 +46,7 @@
2.2
WEB-INF/lib/*cxf*.jar
- mdm-android-agent
+ api#device-mgt#android#v1.0
@@ -72,7 +72,7 @@
-
+
@@ -168,12 +168,6 @@
commons-httpclient
provided
-
- io.swagger
- swagger-annotations
- provided
-
-
com.google.code.gson
gson
@@ -188,5 +182,28 @@
org.wso2.carbon.analytics.api
provided
+
+ io.swagger
+ swagger-annotations
+
+
+ io.swagger
+ swagger-core
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ io.swagger
+ swagger-jaxrs
+
+
+ javax.servlet
+ servlet-api
+ provided
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/DeviceLock.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/DeviceLock.java
index 5dc8b7904f..e76ff6f1a1 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/DeviceLock.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/DeviceLock.java
@@ -26,7 +26,7 @@ import java.io.Serializable;
description = "This class carries all information related to device lock operation.")
public class DeviceLock extends AndroidOperation implements Serializable {
- @ApiModelProperty(name = "message", value = "Pop up message of the lock operation.", required = true)
+ @ApiModelProperty(name = "message", value = "Pop up message of the lock operation.", required = false)
private String message;
@ApiModelProperty(name = "isHardLockEnabled", value = "Hard lock enable status of the Device", required = true)
private boolean isHardLockEnabled;
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorListItem.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorListItem.java
new file mode 100644
index 0000000000..1e48b01833
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorListItem.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.bean;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+@ApiModel(description = "")
+public class ErrorListItem {
+
+ @NotNull
+ private String code = null;
+ @NotNull
+ private String message = null;
+
+ @ApiModelProperty(required = true, value = "")
+ @JsonProperty("code")
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public ErrorListItem() {}
+
+ public ErrorListItem(String code, String msg) {
+ this.code = code;
+ this.message = msg;
+ }
+
+
+ /**
+ * Description about individual errors occurred
+ **/
+ @ApiModelProperty(required = true, value = "Description about individual errors occurred")
+ @JsonProperty("message")
+ public String getMessage() {
+ return message;
+ }
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("errorItem {\n");
+
+ sb.append(" code: ").append(code).append("\n");
+ sb.append(" message: ").append(message).append("\n");
+ sb.append("}\n");
+ return sb.toString();
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorResponse.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorResponse.java
new file mode 100644
index 0000000000..7680e36641
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/ErrorResponse.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.bean;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@ApiModel(description = "")
+public class ErrorResponse {
+
+ private Long code = null;
+ private String message = null;
+ private String description = null;
+ private String moreInfo = null;
+ private List errorItems = new ArrayList<>();
+
+ private ErrorResponse() {
+ }
+
+ @JsonProperty(value = "code")
+ @ApiModelProperty(required = true, value = "")
+ public Long getCode() {
+ return code;
+ }
+
+ public void setCode(Long code) {
+ this.code = code;
+ }
+
+ @JsonProperty(value = "message")
+ @ApiModelProperty(required = true, value = "ErrorResponse message.")
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ @JsonProperty(value = "description")
+ @ApiModelProperty(value = "A detail description about the error message.")
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @JsonProperty(value = "moreInfo")
+ @ApiModelProperty(value = "Preferably an url with more details about the error.")
+ public String getMoreInfo() {
+ return moreInfo;
+ }
+
+ public void setMoreInfo(String moreInfo) {
+ this.moreInfo = moreInfo;
+ }
+
+ public void addErrorListItem(ErrorListItem item) {
+ this.errorItems.add(item);
+ }
+
+ /**
+ * If there are more than one error list them out. \nFor example, list out validation errors by each field.
+ */
+ @JsonProperty(value = "errorItems")
+ @ApiModelProperty(value = "If there are more than one error list them out. \n" +
+ "For example, list out validation errors by each field.")
+ public List getErrorItems() {
+ return errorItems;
+ }
+
+ public void setErrorItems(List error) {
+ this.errorItems = error;
+ }
+
+ @Override
+ public String toString() {
+// StringBuilder sb = new StringBuilder();
+// sb.append("{");
+// boolean cont = false;
+// if (code != null) {
+// cont = true;
+// sb.append(" \"code\": ").append(code);
+// }
+// if (message != null) {
+// if (cont) {
+// sb.append(",");
+// }
+// cont = true;
+// sb.append(" \"message\": \"").append(message).append("\"");
+// }
+// if (description != null) {
+// if (cont) {
+// sb.append(",");
+// }
+// cont = true;
+// sb.append(" \"description\": ").append(description).append("\"");
+// }
+// if (moreInfo != null) {
+// if (cont) {
+// sb.append(",");
+// }
+// cont = true;
+// sb.append(" \"moreInfo\": \"").append(moreInfo).append("\"");
+// }
+// if (error != null && error.size() > 0) {
+// if (cont) {
+// sb.append(",");
+// }
+// sb.append(" \"errorItems\": ").append(error);
+// }
+// sb.append("}");
+// return sb.toString();
+ return null;
+ }
+
+ public static class ErrorResponseBuilder {
+
+ private Long code = null;
+ private String message = null;
+ private String description = null;
+ private String moreInfo = null;
+ private List error;
+
+
+ public ErrorResponseBuilder() {
+ this.error = new ArrayList<>();
+ }
+
+ public ErrorResponseBuilder setCode(long code) {
+ this.code = code;
+ return this;
+ }
+
+ public ErrorResponseBuilder setMessage(String message) {
+ this.message = message;
+ return this;
+ }
+
+ public ErrorResponseBuilder setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public ErrorResponseBuilder setMoreInfo(String moreInfo) {
+ this.moreInfo = moreInfo;
+ return this;
+ }
+
+ public ErrorResponseBuilder addErrorItem(String code, String msg) {
+ ErrorListItem item = new ErrorListItem();
+ item.setCode(code);
+ item.setMessage(msg);
+ this.error.add(item);
+ return this;
+ }
+
+ public ErrorResponse build() {
+ ErrorResponse errorResponse = new ErrorResponse();
+ errorResponse.setCode(code);
+ errorResponse.setMessage(message);
+ errorResponse.setErrorItems(error);
+ errorResponse.setDescription(description);
+ errorResponse.setMoreInfo(moreInfo);
+ return errorResponse;
+ }
+ }
+
+}
+
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/Notification.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/Notification.java
index e7cdb5788a..7cc4d46273 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/Notification.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/Notification.java
@@ -30,14 +30,25 @@ import java.io.Serializable;
description = "Details related to notifications passed to device.")
public class Notification extends AndroidOperation implements Serializable {
- @ApiModelProperty(name = "message", value = "The message to be sent to the device.", required = true)
- private String message;
+ @ApiModelProperty(name = "messageText", value = "The message text to be sent to the device.", required = true)
+ private String messageText;
- public String getMessage() {
- return message;
+ @ApiModelProperty(name = "messageTitle", value = "The message title to be sent to the device.", required = true)
+ private String messageTitle;
+
+ public String getMessageText() {
+ return messageText;
+ }
+
+ public void setMessageText(String messageText) {
+ this.messageText = messageText;
+ }
+
+ public String getMessageTitle() {
+ return messageTitle;
}
- public void setMessage(String message) {
- this.message = message;
+ public void setMessageTitle(String messageTitle) {
+ this.messageTitle = messageTitle;
}
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/UpgradeFirmware.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/UpgradeFirmware.java
index fc3b5e08d6..1b21523255 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/UpgradeFirmware.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/UpgradeFirmware.java
@@ -29,24 +29,29 @@ import java.io.Serializable;
@ApiModel(value = "UpgradeFirmware",
description = "This class carries all information related to UpgradeFirmware.")
public class UpgradeFirmware extends AndroidOperation implements Serializable {
- @ApiModelProperty(name = "schedule", value = "Schedule of the UpgradeFirmware.")
+
+ @ApiModelProperty(name = "schedule", value = "Schedule of the UpgradeFirmware.", required = true)
private String schedule;
@ApiModelProperty(name = "server", value = "Firmware package server.")
private String server;
+ @SuppressWarnings("unused")
public String getSchedule() {
return schedule;
}
+ @SuppressWarnings("unused")
public void setSchedule(String schedule) {
this.schedule = schedule;
}
+ @SuppressWarnings("unused")
public String getServer() {
return server;
}
+ @SuppressWarnings("unused")
public void setServer(String server) {
this.server = server;
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DeviceLockBeanWrapper.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DeviceLockBeanWrapper.java
index 5811c31022..bd668fabaf 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DeviceLockBeanWrapper.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DeviceLockBeanWrapper.java
@@ -30,6 +30,7 @@ import java.util.List;
@ApiModel(value = "DeviceLockBeanWrapper",
description = "DeviceLock related Information.")
public class DeviceLockBeanWrapper {
+
@ApiModelProperty(name = "deviceIDs", value = "Device id list of the operation to be executed.", required = true)
private List deviceIDs;
@ApiModelProperty(name = "operation", value = "Information of the Device lock operation.", required = true)
@@ -50,4 +51,5 @@ public class DeviceLockBeanWrapper {
public void setOperation(DeviceLock operation) {
this.operation = operation;
}
+
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DisenrollmentBeanWrapper.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DisenrollmentBeanWrapper.java
index 86e7fb3afa..fdcab01203 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DisenrollmentBeanWrapper.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/DisenrollmentBeanWrapper.java
@@ -46,4 +46,5 @@ public class DisenrollmentBeanWrapper {
public void setDeviceIDs(List deviceIDs) {
this.deviceIDs = deviceIDs;
}
+
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/EventBeanWrapper.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/EventBeanWrapper.java
index d8e21c8d4d..d05cb58f8e 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/EventBeanWrapper.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/EventBeanWrapper.java
@@ -27,6 +27,7 @@ import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "EventBeanWrapper",
description = "Android agent's event related Information.")
public class EventBeanWrapper {
+
@ApiModelProperty(name = "deviceIdentifier", value = "DeviceIdentifier to be need to retrieve/publish Event.", required = true)
private String deviceIdentifier;
@ApiModelProperty(name = "payload", value = "Event payload.", required = true)
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/NotificationBeanWrapper.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/NotificationBeanWrapper.java
index 573e2affc8..eb82e49ee7 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/NotificationBeanWrapper.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/bean/wrapper/NotificationBeanWrapper.java
@@ -51,4 +51,5 @@ public class NotificationBeanWrapper {
public void setOperation(Notification operation) {
this.operation = operation;
}
+
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/BadRequestException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/BadRequestException.java
index 894bcc4026..741f24b313 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/BadRequestException.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/BadRequestException.java
@@ -18,6 +18,7 @@
package org.wso2.carbon.mdm.services.android.exception;
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
import org.wso2.carbon.mdm.services.android.util.Message;
import javax.ws.rs.WebApplicationException;
@@ -29,8 +30,8 @@ import javax.ws.rs.core.Response;
*/
public class BadRequestException extends WebApplicationException {
- public BadRequestException(Message message, MediaType mediaType) {
- super(Response.status(Response.Status.BAD_REQUEST).entity(message).
- type(mediaType).build());
+ public BadRequestException(ErrorResponse error) {
+ super(Response.status(Response.Status.BAD_REQUEST).entity(error).build());
}
+
}
\ No newline at end of file
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/NotFoundException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/NotFoundException.java
new file mode 100644
index 0000000000..bda2219bf5
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/NotFoundException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.exception;
+
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+public class NotFoundException extends WebApplicationException {
+
+ private static final long serialVersionUID = 147943572342342340L;
+
+ public NotFoundException(ErrorResponse error) {
+ super(Response.status(Response.Status.NOT_FOUND).entity(error).build());
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/UnexpectedServerErrorException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/UnexpectedServerErrorException.java
new file mode 100644
index 0000000000..6db5b0e69c
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/UnexpectedServerErrorException.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.exception;
+
+
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+public class UnexpectedServerErrorException extends WebApplicationException {
+
+ private static final long serialVersionUID = 147943579458906890L;
+
+ public UnexpectedServerErrorException(ErrorResponse error) {
+ super(Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build());
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java
new file mode 100644
index 0000000000..3e504e52c3
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java
@@ -0,0 +1,1312 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services;
+
+import io.swagger.annotations.*;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
+import org.wso2.carbon.mdm.services.android.bean.wrapper.*;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+@Path("/admin/devices")
+@Api(value = "Android Device Management Administrative Service", description = "Device management related admin APIs.")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public interface DeviceManagementAdminService {
+
+ @POST
+ @Path("/lock-devices")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Adds a Device Lock on Android Devices",
+ notes = "Using this API you have the option of hard locking an Android device, where the Administrator " +
+ "permanently locks the device or screen locking an Android device",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device lock operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new lock operation.")
+ })
+ Response configureDeviceLock(
+ @ApiParam(name = "deviceLockBeanWrapper",
+ value = "Device lock configurations with device IDs") DeviceLockBeanWrapper deviceLockBeanWrapper);
+
+ @POST
+ @Path("/unlock-devices")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Adding a Device Unlock on Android Devices",
+ responseContainer = "List",
+ notes = "Using this API you have the option of unlocking an Android device, where the Administrator " +
+ "unlocks the device",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service")
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device un-lock operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new un-lock operation.")
+ })
+ Response configureDeviceUnlock(
+ @ApiParam(name = "deviceIDs", value = "DeviceIds to be enable device unlock operation")
+ List deviceIDs);
+
+
+ @POST
+ @Path("/location")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Requesting Location Coordinates of Android Devices",
+ responseContainer = "List",
+ notes = "Request location coordinates of Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service")
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Get-location operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new get-location operation.")})
+ Response getDeviceLocation(
+ @ApiParam(name = "deviceIDs", value = "DeviceIDs to be requested to get device location")
+ List deviceIDs);
+
+ @POST
+ @Path("/clear-password")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Clearing the Password on Android Devices",
+ notes = "Clear the password on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Clear password operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new clear password operation.")
+ })
+ Response removePassword(
+ @ApiParam(name = "deviceIDs",
+ value = "DeviceIds to be requested to remove password") List deviceIDs);
+
+ @POST
+ @Path("/control-camera")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Enabling or Disabling the Camera on Android Devices",
+ notes = "Enable or disable the camera on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Control camera operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new control camera operation.")
+ })
+ Response configureCamera(
+ @ApiParam(name = "cameraBeanWrapper", value = "Camera enable/disable configurations with device IDs")
+ CameraBeanWrapper cameraBeanWrapper);
+
+ @POST
+ @Path("/info")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Requesting Information from Android Devices",
+ notes = "Using this REST API you are able to request for Android device details. Once this REST API is" +
+ " executed it will be in the Android operation queue until the device calls the server to retrieve " +
+ "the list of operations that needs to be executed on the device",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device info operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new device info operation.")
+ })
+ Response getDeviceInformation(
+ @ApiParam(name = "deviceIds", value = "Device IDs to be requested to get device information")
+ List deviceIDs);
+
+ @POST
+ @Path("/enterprise-wipe")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Enterprise Wiping Android Devices",
+ notes = "Enterprise wipe is the process of deleting enterprise related data on a device while keeping the " +
+ "personal data intact. You are able to enterprise wipe Android devices using this REST API",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Enterprise wipe operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a enterprise wipe operation.")})
+ Response wipeDevice(@ApiParam(name = "deviceIDs", value = "Device IDs to be requested to do enterprise-wipe")
+ List deviceIDs);
+
+ @POST
+ @Path("/wipe")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Factory Resetting an Android Device",
+ notes = "Factory rest or erases all the data stored in the Android devices " +
+ "to restore them back to the original system",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device wipe operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a device wipe operation.")})
+ Response wipeData(
+ @ApiParam(name = "wipeDataBeanWrapper", value = "Configurations and DeviceIds needed to do wipe-data")
+ WipeDataBeanWrapper wipeDataBeanWrapper);
+
+ @POST
+ @Path("/applications")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Requesting the List of Installed Applications on Android Devices",
+ notes = "Using this REST API the server requests for the list of applications that are installed on" +
+ " the Android devices. Once this REST API is executed it will be in the Android operation queue " +
+ "until the device calls the server to retrieve the list of operations that needs to be executed " +
+ "on the device",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Get-applications operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new get-applications operation.")
+ })
+ Response getApplications(
+ @ApiParam(name = "deviceIDs", value = "Device Ids needed to get applications that are already installed")
+ List deviceIDs);
+
+ @POST
+ @Path("/ring")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Ringing Android Devices",
+ notes = "Ring Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device ring operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new device ring operation.")
+ })
+ Response ringDevice(
+ @ApiParam(name = "deviceIDs", value = "Device Ids needed for ring") List deviceIDs);
+
+ @POST
+ @Path("/reboot")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Rebooting Android Devices",
+ notes = "Reboot Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device reboot operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new device reboot operation.")
+ })
+ Response rebootDevice(
+ @ApiParam(name = "deviceIDs", value = "Device Ids needed for reboot.") List deviceIDs);
+
+ @POST
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Muting Android Devices",
+ notes = "Mute Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device mute operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new device mute operation.")
+ })
+ @Path("/mute")
+ Response muteDevice(
+ @ApiParam(name = "deviceIDs", value = "DeviceIDs need to be muted") List deviceIDs);
+
+ @POST
+ @Path("/install-application")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Installing an Application on Android Devices",
+ notes = "Install an application on an Android device. If the device you are installing the application" +
+ " on has the WSO2 system service installed, the application installation will happen in silent " +
+ "mode, else the device user's consent will be required",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Install application operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new install-application operation.")
+ })
+ Response installApplication(
+ @ApiParam(name = "applicationInstallationBeanWrapper", value = "Properties of installed apps and device IDs")
+ ApplicationInstallationBeanWrapper applicationInstallationBeanWrapper);
+
+ @POST
+ @Path("/update-application")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Updating an Application on Android Devices",
+ notes = "Update an application on an Android device. If the device you are updating the application" +
+ " has the WSO2 system service installed, the application update will happen in silent " +
+ "mode, else the device user's consent will be required",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Update-application operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new update-application operation.")
+ })
+ Response updateApplication(
+ @ApiParam(name = "applicationUpdateBeanWrapper", value = "Properties of updated apps and device IDs")
+ ApplicationUpdateBeanWrapper applicationUpdateBeanWrapper);
+
+ @POST
+ @Path("/uninstall-application")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Uninstalling an Application from Android Devices",
+ notes = "Uninstall an application from Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Uninstall-application operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new uninstall-application operation.")
+ })
+ Response uninstallApplication(
+ @ApiParam(name = "applicationUninstallationBeanWrapper",
+ value = "applicationUninstallationConfigs and Device Ids")
+ ApplicationUninstallationBeanWrapper applicationUninstallationBeanWrapper);
+
+ @POST
+ @Path("/blacklist-applications")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Get BlackListed Applications",
+ notes = "Getting BlackListed Applications",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Blacklist-applications operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new blacklist-applications operation.")
+ })
+ Response blacklistApplications(
+ @ApiParam(name = "blacklistApplicationsBeanWrapper", value = "BlacklistApplications " +
+ "Configuration and DeviceIds")
+ BlacklistApplicationsBeanWrapper blacklistApplicationsBeanWrapper);
+
+ @POST
+ @Path("/upgrade-firmware")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Upgrading device firmware",
+ notes = "Device firmware upgrade",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Upgrade firmware operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new upgrade firmware operation.")
+ })
+ Response upgradeFirmware(
+ @ApiParam(name = "upgradeFirmwareBeanWrapper",
+ value = "Firmware upgrade configuration and DeviceIds")
+ UpgradeFirmwareBeanWrapper upgradeFirmwareBeanWrapper);
+
+ @POST
+ @Path("/configure-vpn")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Configuring VPN on Android devices",
+ notes = "Configure VPN on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Configure VPN operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new configure VPN operation.")
+ })
+ Response configureVPN(
+ @ApiParam(name = "vpnBeanWrapper",
+ value = "VPN configuration and DeviceIds")
+ VpnBeanWrapper vpnBeanWrapper);
+
+ @POST
+ @Path("/send-notification")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Sending a Notification to Android Devices",
+ notes = "Send a notification to Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Send notification operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new send notification operation.")
+ })
+ Response sendNotification(
+ @ApiParam(name = "notificationBeanWrapper",
+ value = "Notification Configurations and device Ids")
+ NotificationBeanWrapper notificationBeanWrapper);
+
+ @POST
+ @Path("/configure-wifi")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Configuring Wi-Fi on Android Devices",
+ notes = "Configure Wi-Fi on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Configure wifi operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new configure wifi operation.")
+ })
+ Response configureWifi(
+ @ApiParam(name = "wifiBeanWrapper",
+ value = "WifiConfigurations and Device Ids") WifiBeanWrapper wifiBeanWrapper);
+
+ @POST
+ @Path("/encrypt-storage")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Encrypting Storage on Android Devices",
+ notes = "Encrypt the data stored on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Encrypt storage operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new encrypt storage operation.")
+ })
+ Response encryptStorage(
+ @ApiParam(name = "encryptionBeanWrapper",
+ value = "Configurations and deviceIds need to be done data encryption")
+ EncryptionBeanWrapper encryptionBeanWrapper);
+
+ @POST
+ @Path("/change-lock-code")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Changing the Lock Code on Android Devices",
+ notes = "Change the lock code on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Change lock code operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new change lock code operation.")
+ })
+ Response changeLockCode(
+ @ApiParam(name = "lockCodeBeanWrapper",
+ value = "Configurations and device Ids need to be done change lock code")
+ LockCodeBeanWrapper lockCodeBeanWrapper);
+
+ @POST
+ @Path("/set-password-policy")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Setting a Passcode Policy on Android Devices",
+ notes = "Set a password policy on Android devices",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Set password policy operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new set password policy operation.")
+ })
+ Response setPasswordPolicy(
+ @ApiParam(name = "passwordPolicyBeanWrapper",
+ value = "Password Policy Configurations and Device Ids")
+ PasswordPolicyBeanWrapper passwordPolicyBeanWrapper);
+
+ @POST
+ @Path("set-webclip")
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Setting a Web Clip on Android Devices",
+ notes = "Set a web clip on Android devices. A web clip is used to add a bookmark to a web application",
+ response = Activity.class,
+ tags = "Android Device Management Administrative Service"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Set webclip operation has successfully been scheduled",
+ response = Activity.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the activity instance that refers to the scheduled operation."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new set webclip operation.")
+ })
+ Response setWebClip(
+ @ApiParam(name = "webClipBeanWrapper",
+ value = "Configurations to need set web clip on device and device Ids")
+ WebClipBeanWrapper webClipBeanWrapper);
+
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java
new file mode 100644
index 0000000000..4464d6c734
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services;
+
+import io.swagger.annotations.*;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.app.mgt.Application;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+@Api(value = "Android Device Management",
+ description = "This carries all the resources related to Android device management functionalities")
+@Path("/devices")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public interface DeviceManagementService {
+
+ @PUT
+ @Path("/{id}/applications")
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "PUT",
+ value = "Update the application list of a device",
+ tags = "Android Device Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Application list has been updated successfully",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The URL of the updated application list."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "The content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while updating the application list.")
+ })
+ Response updateApplicationList(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier")
+ @PathParam("id") String id,
+ @ApiParam(
+ name = "applications",
+ value = "List of applications that need to be persisted against the device")
+ List applications);
+
+ @PUT
+ @Path("/{id}/pending-operations")
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "PUT",
+ value = "Get the operation list pending for the device",
+ responseContainer = "List",
+ notes = "The Android agent communicates with the server to get the operations that are queued up " +
+ "at the server end for a given device using via this particular resource",
+ response = Operation.class,
+ tags = "Android Device Management")
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully fetched the pending application list of the Android device.",
+ response = Operation.class,
+ responseContainer = "List",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "The content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")
+ }),
+ @ApiResponse(
+ code = 304,
+ message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
+ @ApiResponse(
+ code = 406,
+ message = "Not Acceptable.\n The requested media type is not supported"),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n Server error occurred while fetching policies.")
+ })
+ Response getPendingOperations(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier")
+ @PathParam("id") String id,
+ @ApiParam(
+ name = "If-Modified-Since",
+ value = "Validates if the requested variant has not been modified since the time specified",
+ required = false)
+ @HeaderParam("If-Modified-Since") String ifModifiedSince,
+ @ApiParam(
+ name = "resultOperations",
+ value = "Device Operation Status")
+ List extends Operation> resultOperations);
+
+ @POST
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Register an Android Device",
+ notes = "When carrying out device registration via an Android device, you need to initially install" +
+ " an Android Agent on the device, before being able to register the device with WSO2 EMM. Instead," +
+ " you can use this REST API to register an Android device with WSO2 EMM, without having to install" +
+ " an Android Agent on the respective device",
+ tags = "Android Device Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 201,
+ message = "Created. \n Device enrollment has successfully been created",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the added device enrollment."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while adding a new policy.")
+ })
+ Response enrollDevice(@ApiParam(name = "device", value = "Device Information to be enroll") Device device);
+
+ @GET
+ @Path("/{id}/status")
+ @ApiOperation(
+ httpMethod = "GET",
+ value = "Getting the Registration Status of an Android Device",
+ notes = "Use this REST API to retrieve the registration status of an Android device",
+ tags = "Android Device Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully fetched the status of the Android device enrollment.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "The content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests."),
+ }),
+ @ApiResponse(
+ code = 304,
+ message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
+ @ApiResponse(
+ code = 406,
+ message = "Not Acceptable.\n The requested media type is not supported"),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n Server error occurred while fetching the enrollment status of the Android device.")
+ })
+ Response isEnrolled(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier")
+ @PathParam("id") String id,
+ @ApiParam(
+ name = "If-Modified-Since",
+ value = "Validates if the requested variant has not been modified since the time specified",
+ required = false)
+ @HeaderParam("If-Modified-Since") String ifModifiedSince);
+
+ @PUT
+ @Path("/{id}")
+ @ApiOperation(
+ httpMethod = "PUT",
+ value = "Updating the Registration Details of an Android Device",
+ notes = "Use this REST API to update the registration details of an Android device",
+ tags = "Android Device Management"
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Device enrollment has been updated successfully",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the updated device enrollment."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while updating the device enrollment.")
+ })
+ Response modifyEnrollment(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier")
+ @PathParam("id") String id,
+ @ApiParam(
+ name = "device",
+ value = "Device information to be modify") Device device);
+
+ @DELETE
+ @Path("/{id}")
+ @ApiOperation(
+ httpMethod = "DELETE",
+ value = "Un-register an Android Device",
+ notes = "Use this REST API to un-register a specific Android device",
+ tags = "Android Device Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Device has successfully been dis-enrolled"),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while dis-enrolling the device.")
+ })
+ Response disEnrollDevice(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier")
+ @PathParam("id") String id);
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java
new file mode 100644
index 0000000000..7d74b700d5
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services;
+
+import io.swagger.annotations.*;
+import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
+import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Api(value = "Android Configuration Management", description = "This API carries all resource associated with " +
+ "manipulating the general configurations of Android platform")
+@Path("/configuration")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public interface DeviceTypeConfigurationService {
+
+ @GET
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "GET",
+ value = "Getting Android Platform Configurations",
+ notes = "Get the Android platform configuration details using this REST API",
+ response = PlatformConfiguration.class,
+ tags = "Android Configuration Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully fetched Android platform configuration.",
+ response = PlatformConfiguration.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests."),
+ }),
+ @ApiResponse(
+ code = 304,
+ message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 406,
+ message = "Not Acceptable.\n The requested media type is not supported"),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n Server error occurred while fetching Android platform configuration.")
+ })
+ Response getConfiguration(
+ @ApiParam(
+ name = "If-Modified-Since",
+ value = "Validates if the requested variant has not been modified since the time specified",
+ required = false)
+ @HeaderParam("If-Modified-Since") String ifModifiedSince);
+
+ @PUT
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "PUT",
+ value = "Updating Android Platform Configuration.",
+ notes = "Update the Android platform configurations using this REST API.",
+ tags = "Android Configuration Management"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Android platform configuration has been updated successfully",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "URL of the updated Android platform configuration."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while modifying Android platform configuration.")
+ })
+ Response updateConfiguration(
+ @ApiParam(name = "configuration",
+ value = "AndroidPlatformConfiguration")
+ PlatformConfiguration configuration);
+
+ @GET
+ @Path("license")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(
+ produces = MediaType.TEXT_PLAIN,
+ httpMethod = "GET",
+ value = "Getting the License Agreement for Android Device Registration",
+ notes = "Use this REST API to retrieve the license agreement that is used for the Android device " +
+ "registration process",
+ response = String.class,
+ tags = "Android Configuration Management")
+ @ApiResponses(value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully fetched Android license configuration.",
+ response = PlatformConfiguration.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "Content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests."),
+ }),
+ @ApiResponse(
+ code = 304,
+ message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource to be deleted does not exist."),
+ @ApiResponse(
+ code = 406,
+ message = "Not Acceptable.\n The requested media type is not supported"),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n Server error occurred while fetching Android license configuration.")
+ })
+ Response getLicense(
+ @ApiParam(
+ name = "If-Modified-Since",
+ value = "Validates if the requested variant has not been modified since the time specified",
+ required = false)
+ @HeaderParam("If-Modified-Since") String ifModifiedSince) throws AndroidAgentException;
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java
new file mode 100644
index 0000000000..c488440906
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services;
+
+import io.swagger.annotations.*;
+import org.wso2.carbon.mdm.services.android.bean.DeviceState;
+import org.wso2.carbon.mdm.services.android.bean.wrapper.EventBeanWrapper;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Api(value = "Event Receiver", description = "Event publishing/retrieving related APIs.To enable Eventing need to" +
+ " configure as ref-https://docs.wso2.com/display/EMM210/Managing+Event+Publishing+with+WSO2+Data+Analytics+Server, " +
+ "https://docs.wso2.com/display/EMM210/Creating+a+New+Event+Stream+and+Receiver")
+@Path("/events")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public interface EventReceiverService {
+
+ @POST
+ @Path("/publish")
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ consumes = MediaType.APPLICATION_JSON,
+ httpMethod = "POST",
+ value = "Event publishing via REST API.",
+ notes = "Publish events received by the EMM Android client to WSO2 DAS using this API.",
+ tags = "Event Receiver"
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(code = 201, message = "Created. \n Event is published successfully. Location header " +
+ "contains URL of newly enrolled device",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The URL of the added policy."),
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "The content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource has been modified the last time.\n" +
+ "Used by caches, or in conditional requests.")
+ }),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Location",
+ description = "The Source URL of the document.")}),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error."),
+ @ApiResponse(
+ code = 415,
+ message = "Unsupported media type. \n The entity of the request was in a not supported format."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n " +
+ "Server error occurred while publishing events.")
+ })
+ Response publishEvents(
+ @ApiParam(
+ name = "eventBeanWrapper",
+ value = "Information of the agent event to be published on DAS.")
+ EventBeanWrapper eventBeanWrapper);
+
+ @GET
+ @ApiOperation(
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "GET",
+ value = "Getting event details for a given time period.",
+ notes = "Get the event details of a device for a given time duration using this API.Request must contain " +
+ "the device identifier. Optionally, both, date from and date to value should be present to get " +
+ "alerts between times. Based on device type and the device identifier also filtering can be done" +
+ "(This cannot be combined with to and from parameters).",
+ response = DeviceState.class,
+ responseContainer = "List",
+ tags = "Event Receiver"
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Event details of a device for a given time duration have been successfully fetched",
+ response = DeviceState.class, responseContainer = "List"),
+ @ApiResponse(
+ code = 303,
+ message = "See Other. \n Source can be retrieved from the URL specified at" +
+ " the Location header.",
+ responseHeaders = {
+ @ResponseHeader(name = "Content-Location", description = "Source URL of the document.")
+ }),
+ @ApiResponse(
+ code = 304,
+ message = "Not Modified. \n " +
+ "Empty body because the client already has the latest version of the requested resource."),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request or validation error. You must provide" +
+ " the device identifier. Additionally, the device identifier can be combined with either the type" +
+ " OR date from and to."),
+ @ApiResponse(
+ code = 404,
+ message = "Not Found. \n Resource requested does not exist."),
+ @ApiResponse(
+ code = 500,
+ message = "Error occurred while getting published events for specific device.")
+ })
+ Response retrieveAlerts(
+ @ApiParam(
+ name = "id",
+ value = "Device Identifier to be need to retrieve events.",
+ required = true)
+ @QueryParam("id") String deviceId,
+ @ApiParam(
+ name = "from",
+ value = "From Date.")
+ @QueryParam("from") long from,
+ @ApiParam(
+ name = "to",
+ value = "To Date.")
+ @QueryParam("to") long to,
+ @ApiParam(
+ name = "type",
+ value = "Type of the Alert to be need to retrieve events.")
+ @QueryParam("type") String type,
+ @ApiParam(
+ name = "If-Modified-Since",
+ value = "Validates if the requested variant has not been modified since the time specified",
+ required = false)
+ @HeaderParam("If-Modified-Since") String ifModifiedSince);
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/ConfigurationMgtService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/ConfigurationMgtService.java
deleted file mode 100644
index c05579aafc..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/ConfigurationMgtService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.configuration;
-
-import io.swagger.annotations.*;
-import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-/**
- * Android Platform Configuration REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-@Api(value = "ConfigurationMgtService")
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public interface ConfigurationMgtService {
-
- @POST
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Configuring Android Platform Settings",
- notes = "Configure the Android platform settings using this REST API"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Android platform configuration saved successfully"),
- @ApiResponse(code = 500, message = "Internal Server Error")
- })
- Response configureSettings(@ApiParam(name = "configuration", value = "AndroidPlatformConfiguration")
- PlatformConfiguration configuration) throws AndroidAgentException;
-
- @GET
- @ApiOperation(
- httpMethod = "GET",
- value = "Getting Android Platform Configurations",
- notes = "Get the Android platform configuration details using this REST API",
- response = PlatformConfiguration.class
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Get Android Configurations"),
- @ApiResponse(code = 500, message = "Server Error")
- })
- Response getConfiguration() throws AndroidAgentException;
-
- @PUT
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "PUT",
- value = "Updating Android Platform Configurations",
- notes = "Update the Android platform configurations using this REST API"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Error occurred while modifying configuration settings of " +
- "Android platform")
- })
- Response updateConfiguration(@ApiParam(name = "configuration", value = "AndroidPlatformConfiguration")
- PlatformConfiguration configuration) throws AndroidAgentException;
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/DeviceManagementService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/DeviceManagementService.java
deleted file mode 100644
index fc95711a70..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/DeviceManagementService.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.devicemgt;
-
-import io.swagger.annotations.*;
-import org.wso2.carbon.device.mgt.common.Device;
-import org.wso2.carbon.device.mgt.common.app.mgt.Application;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-/**
- * Android Device Management REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-
-@Api(value = "DeviceManagementService", description = "Android Device Management REST-API implementation.")
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public interface DeviceManagementService {
-
-
- /**
- * Get all devices.Returns list of Android devices registered in MDM.
- *
- * @return Device List
- * @throws org.wso2.carbon.mdm.services.android.exception.AndroidAgentException
- */
- @GET
- @ApiOperation(
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "GET",
- value = "Getting Details of All Android Devices",
- notes = "Use this REST API to retrieve the details " +
- "(e.g., the Android device type, serial number, International Mobile Station Equipment Identity " +
- "(IMEI), owner, version, model etc.) of all Android devices that are registered with WSO2 EMM.",
- response = Device.class,
- responseContainer = "List"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "List of Devices"),
- @ApiResponse(code = 500, message = "Error occurred while fetching the device list")
- })
- Response getAllDevices() throws AndroidAgentException;
-
- /**
- * Fetch Android device details of a given device Id.
- *
- * @param id Device Id
- * @return Device
- * @throws org.wso2.carbon.mdm.services.android.exception.AndroidAgentException
- */
- @GET
- @Path("{id}")
- @ApiOperation(
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "GET",
- value = "Getting Details of an Android Device",
- notes = "Use this REST API to retrieve the details " +
- "(e.g., the Android device type, serial number, International Mobile Station Equipment Identity " +
- "(IMEI), owner, version, model etc.) of a specific Android device that is registered with WSO2 EMM",
- response = Device.class
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Information of the given device"),
- @ApiResponse(code = 500, message = "Error occurred while fetching the device information")
- })
- Response getDevice(@ApiParam(name = "id", value = "deviceIdentifier")
- @PathParam("id") String id) throws AndroidAgentException;
-
- /**
- * Update Android device details of given device id.
- *
- * @param id Device Id
- * @param device Device Details
- * @return Message
- * @throws AndroidAgentException
- */
- @PUT
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "PUT",
- value = "Updating the Details of an Android Device",
- notes = "Use this REST API to update the details of an Android device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 202, message = "The device enrollment details has been updated successfully"),
- @ApiResponse(code = 500, message = "Error occurred while modifying the device information"),
- @ApiResponse(code = 304, message = "Device not found for the update")
- })
- @Path("{id}")
- Response updateDevice(@ApiParam(name = "id", value = "deviceIdentifier")
- @PathParam("id") String id, @ApiParam(name = "device", value = "deviceIdentifier")
- Device device) throws AndroidAgentException;
-
- @POST
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Updating an ApplicationList",
- notes = "Update application list in server side."
- )
- @ApiResponses(value = {
- @ApiResponse(code = 202, message = "Device information has modified successfully"),
- @ApiResponse(code = 500, message = "Error occurred while modifying the application list")
- })
- Response updateApplicationList(@ApiParam(name = "id", value = "deviceIdentifier") @PathParam("id") String id,
- @ApiParam(name = "applications", value = "updatable applications")
- List applications) throws AndroidAgentException;
-
- @GET
- @Path("license")
- @Produces("text/html")
- @ApiOperation(
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "GET",
- value = "Getting the License Agreement for Android Device Registration",
- notes = "Use this REST API to retrieve the license agreement that is used for the Android device " +
- "registration process",
- response = String.class)
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Licence agreement"),
- @ApiResponse(code = 500, message = "Error occurred while retrieving the license configured for Android " +
- "device enrolment")
- })
- Response getLicense() throws AndroidAgentException;
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/impl/DeviceManagementServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/impl/DeviceManagementServiceImpl.java
deleted file mode 100644
index 06ccdf3e91..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/devicemgt/impl/DeviceManagementServiceImpl.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.devicemgt.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.common.Device;
-import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
-import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.device.mgt.common.app.mgt.Application;
-import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
-import org.wso2.carbon.device.mgt.common.license.mgt.License;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import org.wso2.carbon.mdm.services.android.services.devicemgt.DeviceManagementService;
-import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
-import org.wso2.carbon.mdm.services.android.util.Message;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-/**
- * Android Device Management REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public class DeviceManagementServiceImpl implements DeviceManagementService {
-
- private static Log log = LogFactory.getLog(DeviceManagementServiceImpl.class);
-
- /**
- * Get all devices.Returns list of Android devices registered in MDM.
- *
- * @return Device List
- * @throws AndroidAgentException
- */
- @GET
- public Response getAllDevices()
- throws AndroidAgentException {
- String msg;
- List devices;
-
- try {
- devices = AndroidAPIUtils.getDeviceManagementService().
- getAllDevices(DeviceManagementConstants.MobileDeviceTypes.
- MOBILE_DEVICE_TYPE_ANDROID);
- } catch (DeviceManagementException e) {
- msg = "Error occurred while fetching the device list.";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- return Response.status(Response.Status.OK).entity(devices).build();
- }
-
- /**
- * Fetch Android device details of a given device Id.
- *
- * @param id Device Id
- * @return Device
- * @throws AndroidAgentException
- */
- @GET
- @Path("{id}")
- public Response getDevice(@PathParam("id") String id)
- throws AndroidAgentException {
-
- String msg;
- Device device;
-
- try {
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
- device = AndroidAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier);
- if (device == null) {
- return Response.status(Response.Status.NOT_FOUND).build();
- }
- } catch (DeviceManagementException deviceMgtEx) {
- msg = "Error occurred while fetching the device information.";
- log.error(msg, deviceMgtEx);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- return Response.status(Response.Status.OK).entity(device).build();
- }
-
- /**
- * Update Android device details of given device id.
- *
- * @param id Device Id
- * @param device Device Details
- * @return Message
- * @throws AndroidAgentException
- */
- @PUT
- @Path("{id}")
- public Response updateDevice(@PathParam("id") String id, Device device)
- throws AndroidAgentException {
- String msg;
- Message responseMessage = new Message();
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(id);
- deviceIdentifier
- .setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- boolean result;
- try {
- device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- result = AndroidAPIUtils.getDeviceManagementService()
- .updateDeviceInfo(deviceIdentifier, device);
- if (result) {
- responseMessage.setResponseMessage("Device information has modified successfully.");
- return Response.status(Response.Status.ACCEPTED).entity(responseMessage).build();
- } else {
- responseMessage.setResponseMessage("Device not found for the update.");
- return Response.status(Response.Status.NOT_MODIFIED).entity(responseMessage).build();
- }
- } catch (DeviceManagementException e) {
- msg = "Error occurred while modifying the device information.";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
- @POST
- @Path("appList/{id}")
- public Response updateApplicationList(@PathParam("id") String id, List applications)
- throws
- AndroidAgentException {
-
- Message responseMessage = new Message();
- DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
- deviceIdentifier.setId(id);
- deviceIdentifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- try {
- AndroidAPIUtils.getApplicationManagerService().
- updateApplicationListInstalledInDevice(deviceIdentifier, applications);
- responseMessage.setResponseMessage("Device information has modified successfully.");
- return Response.status(Response.Status.ACCEPTED).entity(responseMessage).build();
- } catch (ApplicationManagementException e) {
- String msg = "Error occurred while modifying the application list.";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
- @GET
- @Path("license")
- @Produces("text/html")
- public Response getLicense() throws AndroidAgentException {
- License license = null;
-
- try {
- license =
- AndroidAPIUtils.getDeviceManagementService().getLicense(
- DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID,
- DeviceManagementConstants.LanguageCodes.LANGUAGE_CODE_ENGLISH_US);
- } catch (DeviceManagementException e) {
- String msg = "Error occurred while retrieving the license configured for Android device enrolment";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- return Response.status(Response.Status.OK).entity((license == null) ? null : license.getText()).build();
- }
-
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/EnrollmentService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/EnrollmentService.java
deleted file mode 100644
index b150fd19d6..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/EnrollmentService.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.enrollment;
-
-import io.swagger.annotations.*;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-/**
- * Android Device Enrollment REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-
-@Api(value = "EnrollmentService", description = "Android Device Enrollment REST-API implementation.")
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public interface EnrollmentService {
-
- @POST
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Registering an Android Device",
- notes = "When carrying out device registration via an Android device, you need to initially install" +
- " an Android Agent on the device, before being able to register the device with WSO2 EMM. Instead," +
- " you can use this REST API to register an Android device with WSO2 EMM, without having to install" +
- " an Android Agent on the respective device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Device enrollment succeeded"),
- @ApiResponse(code = 500, message = "Device enrollment failed"),
- })
- Response enrollDevice(@ApiParam(name = "device", value = "Device Information to be enroll")
- org.wso2.carbon.device.mgt.common.Device device) throws AndroidAgentException;
-
- @GET
- @Path("{deviceId}")
- @ApiOperation(
- httpMethod = "GET",
- value = "Getting the Registration Status of an Android Device",
- notes = "Use this REST API to retrieve the registration status of an Android device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 202, message = "Device has already enrolled"),
- @ApiResponse(code = 404, message = "Device not found")
- })
- Response isEnrolled(@ApiParam(name = "deviceId", value = "DeviceIdentifier") @PathParam("deviceId") String id)
- throws AndroidAgentException;
-
- @PUT
- @Path("{deviceId}")
- @ApiOperation(
- httpMethod = "PUT",
- value = "Updating the Registration Details of an Android Device",
- notes = "Use this REST API to update the registration details of an Android device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 202, message = "Device enrollment has updated successfully"),
- @ApiResponse(code = 404, message = "Device not found for enrollment")
- })
- Response modifyEnrollment(@ApiParam(name = "deviceId", value = "DeviceIdentifier") @PathParam("deviceId") String id,
- @ApiParam(name = "device", value = "Device information to be modify")
- org.wso2.carbon.device.mgt.common.Device device)
- throws AndroidAgentException;
-
- @DELETE
- @ApiOperation(
- httpMethod = "DELETE",
- value = "Un-registering an Android Device",
- notes = "Use this REST API to unregister a specific Android device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 202, message = "Device has removed successfully"),
- @ApiResponse(code = 404, message = "Device not found")
- })
- @Path("{deviceId}")
- Response disEnrollDevice(@ApiParam(name = "deviceId", value = "DeviceIdentifier") @PathParam("deviceId") String id)
- throws AndroidAgentException;
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/impl/EnrollmentServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/impl/EnrollmentServiceImpl.java
deleted file mode 100644
index cf8d295c04..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/enrollment/impl/EnrollmentServiceImpl.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.enrollment.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
-import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import org.wso2.carbon.mdm.services.android.services.enrollment.EnrollmentService;
-import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
-import org.wso2.carbon.mdm.services.android.util.Message;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-
-/**
- * Android Device Enrollment REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public class EnrollmentServiceImpl implements EnrollmentService {
-
- private static Log log = LogFactory.getLog(EnrollmentService.class);
-
- @POST
- public Response enrollDevice(org.wso2.carbon.device.mgt.common.Device device)
- throws AndroidAgentException {
-
- Message responseMsg = new Message();
- String msg;
- try {
- device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- device.getEnrolmentInfo().setOwner(AndroidAPIUtils.getAuthenticatedUser());
- boolean status = AndroidAPIUtils.getDeviceManagementService().enrollDevice(device);
- if (status) {
- Response.status(Response.Status.CREATED);
- responseMsg.setResponseMessage("Device enrollment succeeded.");
- return Response.status(Response.Status.CREATED).entity(responseMsg).build();
- } else {
- Response.status(Response.Status.INTERNAL_SERVER_ERROR);
- responseMsg.setResponseMessage("Device enrollment failed.");
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(responseMsg).build();
- }
- } catch (DeviceManagementException e) {
- msg = "Error occurred while enrolling the device";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
- @GET
- @Path("{deviceId}")
- public Response isEnrolled(@PathParam("deviceId") String id) throws AndroidAgentException {
- String msg;
- boolean result;
- Message responseMsg = new Message();
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
-
- try {
- result = AndroidAPIUtils.getDeviceManagementService().isEnrolled(deviceIdentifier);
- if (result) {
- responseMsg.setResponseMessage("Device has already enrolled");
- responseMsg.setResponseCode(Response.Status.ACCEPTED.toString());
- return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build();
- } else {
- responseMsg.setResponseMessage("Device not found");
- responseMsg.setResponseCode(Response.Status.NOT_FOUND.toString());
- return Response.status(Response.Status.NOT_FOUND).entity(responseMsg).build();
- }
- } catch (DeviceManagementException e) {
- msg = "Error occurred while checking enrollment status of the device.";
- responseMsg.setResponseMessage(msg);
- responseMsg.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString());
- Response.status(Response.Status.INTERNAL_SERVER_ERROR);
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
- @PUT
- @Path("{deviceId}")
- public Response modifyEnrollment(@PathParam("deviceId") String id,
- org.wso2.carbon.device.mgt.common.Device device)
- throws AndroidAgentException {
- String msg;
- boolean result;
- Message responseMsg = new Message();
- try {
- device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- result = AndroidAPIUtils.getDeviceManagementService().modifyEnrollment(device);
- if (result) {
- responseMsg.setResponseMessage("Device enrollment has updated successfully");
- responseMsg.setResponseCode(Response.Status.ACCEPTED.toString());
- return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build();
- } else {
- responseMsg.setResponseMessage("Device not found for enrollment");
- responseMsg.setResponseCode(Response.Status.NOT_MODIFIED.toString());
- return Response.status(Response.Status.NOT_MODIFIED).entity(responseMsg).build();
- }
- } catch (DeviceManagementException e) {
- msg = "Error occurred while modifying enrollment of the device";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
- @DELETE
- @Path("{deviceId}")
- public Response disEnrollDevice(@PathParam("deviceId") String id) throws AndroidAgentException {
- Message responseMsg = new Message();
- boolean result;
- String msg;
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
-
- try {
- result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
- if (result) {
- responseMsg.setResponseMessage("Device has removed successfully");
- responseMsg.setResponseCode(Response.Status.ACCEPTED.toString());
- return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build();
- } else {
- responseMsg.setResponseMessage("Device not found");
- responseMsg.setResponseCode(Response.Status.NOT_FOUND.toString());
- return Response.status(Response.Status.NOT_FOUND).entity(responseMsg).build();
- }
- } catch (DeviceManagementException e) {
- msg = "Error occurred while dis enrolling the device";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- }
-
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementAdminServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementAdminServiceImpl.java
new file mode 100644
index 0000000000..468882aa9a
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementAdminServiceImpl.java
@@ -0,0 +1,822 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services.impl;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
+import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
+import org.wso2.carbon.mdm.services.android.bean.*;
+import org.wso2.carbon.mdm.services.android.bean.wrapper.*;
+import org.wso2.carbon.mdm.services.android.exception.BadRequestException;
+import org.wso2.carbon.mdm.services.android.exception.UnexpectedServerErrorException;
+import org.wso2.carbon.mdm.services.android.services.DeviceManagementAdminService;
+import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
+import org.wso2.carbon.mdm.services.android.util.AndroidConstants;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+@Path("/admin/devices")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
+
+ private static final Log log = LogFactory.getLog(DeviceManagementAdminServiceImpl.class);
+
+ @POST
+ @Path("/lock-devices")
+ @Override
+ public Response configureDeviceLock(DeviceLockBeanWrapper deviceLockBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android device lock operation");
+ }
+
+ try {
+ if (deviceLockBeanWrapper == null || deviceLockBeanWrapper.getOperation() == null) {
+ String errorMessage = "Lock bean is empty.";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ DeviceLock lock = deviceLockBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_LOCK);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setEnabled(true);
+ operation.setPayLoad(lock.toJSON());
+ return AndroidAPIUtils.getOperationResponse(deviceLockBeanWrapper.getDeviceIDs(), operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/unlock-devices")
+ @Override
+ public Response configureDeviceUnlock(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android device unlock operation.");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_UNLOCK);
+ operation.setType(Operation.Type.COMMAND);
+ operation.setEnabled(true);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/location")
+ @Override
+ public Response getDeviceLocation(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android device location operation.");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_LOCATION);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/clear-password")
+ @Override
+ public Response removePassword(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android clear password operation.");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.CLEAR_PASSWORD);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance.";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/control-camera")
+ @Override
+ public Response configureCamera(CameraBeanWrapper cameraBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android Camera operation");
+ }
+
+ try {
+ if (cameraBeanWrapper == null || cameraBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the configure camera operation is incorrect.";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ Camera camera = cameraBeanWrapper.getOperation();
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.CAMERA);
+ operation.setType(Operation.Type.COMMAND);
+ operation.setEnabled(camera.isEnabled());
+ return AndroidAPIUtils.getOperationResponse(cameraBeanWrapper.getDeviceIDs(), operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/info")
+ @Override
+ public Response getDeviceInformation(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking get Android device information operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_INFO);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build();
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/enterprise-wipe")
+ @Override
+ public Response wipeDevice(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking enterprise-wipe device operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.ENTERPRISE_WIPE);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/wipe")
+ @Override
+ public Response wipeData(WipeDataBeanWrapper wipeDataBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android wipe-data device operation");
+ }
+
+ try {
+ if (wipeDataBeanWrapper == null || wipeDataBeanWrapper.getOperation() == null) {
+ String errorMessage = "WipeData bean is empty.";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ WipeData wipeData = wipeDataBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.WIPE_DATA);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(wipeData.toJSON());
+ return AndroidAPIUtils.getOperationResponse(wipeDataBeanWrapper.getDeviceIDs(), operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/applications")
+ @Override
+ public Response getApplications(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android getApplicationList device operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.APPLICATION_LIST);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/ring")
+ @Override
+ public Response ringDevice(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android ring-device device operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_RING);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/reboot")
+ @Override
+ public Response rebootDevice(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android reboot-device device operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_REBOOT);
+ operation.setType(Operation.Type.COMMAND);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/mute")
+ @Override
+ public Response muteDevice(List deviceIDs) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking mute device operation");
+ }
+
+ try {
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.DEVICE_MUTE);
+ operation.setType(Operation.Type.COMMAND);
+ operation.setEnabled(true);
+ return AndroidAPIUtils.getOperationResponse(deviceIDs, operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/install-application")
+ @Override
+ public Response installApplication(ApplicationInstallationBeanWrapper applicationInstallationBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'InstallApplication' operation");
+ }
+
+ try {
+ if (applicationInstallationBeanWrapper == null || applicationInstallationBeanWrapper.getOperation() ==
+ null) {
+ String errorMessage = "The payload of the application installing operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ ApplicationInstallation applicationInstallation = applicationInstallationBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.INSTALL_APPLICATION);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(applicationInstallation.toJSON());
+ return AndroidAPIUtils.getOperationResponse(applicationInstallationBeanWrapper.getDeviceIDs(),
+ operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/update-application")
+ @Override
+ public Response updateApplication(ApplicationUpdateBeanWrapper applicationUpdateBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'UpdateApplication' operation");
+ }
+
+ try {
+ if (applicationUpdateBeanWrapper == null || applicationUpdateBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the application update operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ ApplicationUpdate applicationUpdate = applicationUpdateBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.UPDATE_APPLICATION);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(applicationUpdate.toJSON());
+
+ return AndroidAPIUtils.getOperationResponse(applicationUpdateBeanWrapper.getDeviceIDs(),
+ operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/uninstall-application")
+ @Override
+ public Response uninstallApplication(ApplicationUninstallationBeanWrapper applicationUninstallationBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'UninstallApplication' operation");
+ }
+
+ try {
+ if (applicationUninstallationBeanWrapper == null ||
+ applicationUninstallationBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the application uninstalling operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ ApplicationUninstallation applicationUninstallation = applicationUninstallationBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.UNINSTALL_APPLICATION);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(applicationUninstallation.toJSON());
+
+ return AndroidAPIUtils.getOperationResponse(applicationUninstallationBeanWrapper.getDeviceIDs(),
+ operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/blacklist-applications")
+ @Override
+ public Response blacklistApplications(BlacklistApplicationsBeanWrapper blacklistApplicationsBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'Blacklist-Applications' operation");
+ }
+
+ try {
+ if (blacklistApplicationsBeanWrapper == null || blacklistApplicationsBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the blacklisting apps operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ BlacklistApplications blacklistApplications = blacklistApplicationsBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.BLACKLIST_APPLICATIONS);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(blacklistApplications.toJSON());
+ return AndroidAPIUtils.getOperationResponse(blacklistApplicationsBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/upgrade-firmware")
+ @Override
+ public Response upgradeFirmware(UpgradeFirmwareBeanWrapper upgradeFirmwareBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android upgrade-firmware device operation");
+ }
+
+ try {
+ if (upgradeFirmwareBeanWrapper == null || upgradeFirmwareBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the upgrade firmware operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ UpgradeFirmware upgradeFirmware = upgradeFirmwareBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.UPGRADE_FIRMWARE);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(upgradeFirmware.toJSON());
+ return AndroidAPIUtils.getOperationResponse(upgradeFirmwareBeanWrapper.getDeviceIDs(), operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/configure-vpn")
+ @Override
+ public Response configureVPN(VpnBeanWrapper vpnBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android VPN device operation");
+ }
+
+ try {
+ if (vpnBeanWrapper == null || vpnBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the VPN operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ Vpn vpn = vpnBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.VPN);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(vpn.toJSON());
+ return AndroidAPIUtils.getOperationResponse(vpnBeanWrapper.getDeviceIDs(),
+ operation);
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/send-notification")
+ @Override
+ public Response sendNotification(NotificationBeanWrapper notificationBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'notification' operation");
+ }
+
+ try {
+ if (notificationBeanWrapper == null || notificationBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the notification operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ Notification notification = notificationBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.NOTIFICATION);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(notification.toJSON());
+ return AndroidAPIUtils.getOperationResponse(notificationBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/configure-wifi")
+ @Override
+ public Response configureWifi(WifiBeanWrapper wifiBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'configure wifi' operation");
+ }
+
+ try {
+ if (wifiBeanWrapper == null || wifiBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the wifi operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ Wifi wifi = wifiBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.WIFI);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(wifi.toJSON());
+
+ return AndroidAPIUtils.getOperationResponse(wifiBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/encrypt-storage")
+ @Override
+ public Response encryptStorage(EncryptionBeanWrapper encryptionBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'encrypt' operation");
+ }
+
+ try {
+ if (encryptionBeanWrapper == null || encryptionBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the device encryption operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ DeviceEncryption deviceEncryption = encryptionBeanWrapper.getOperation();
+ CommandOperation operation = new CommandOperation();
+ operation.setCode(AndroidConstants.OperationCodes.ENCRYPT_STORAGE);
+ operation.setType(Operation.Type.COMMAND);
+ operation.setEnabled(deviceEncryption.isEncrypted());
+ return AndroidAPIUtils.getOperationResponse(encryptionBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/change-lock-code")
+ @Override
+ public Response changeLockCode(LockCodeBeanWrapper lockCodeBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'change lock code' operation");
+ }
+
+ try {
+ if (lockCodeBeanWrapper == null || lockCodeBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the change lock code operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ LockCode lockCode = lockCodeBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.CHANGE_LOCK_CODE);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(lockCode.toJSON());
+ return AndroidAPIUtils.getOperationResponse(lockCodeBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("/set-password-policy")
+ @Override
+ public Response setPasswordPolicy(PasswordPolicyBeanWrapper passwordPolicyBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'password policy' operation");
+ }
+
+ try {
+ if (passwordPolicyBeanWrapper == null || passwordPolicyBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the change password policy operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ PasscodePolicy passcodePolicy = passwordPolicyBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.PASSCODE_POLICY);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(passcodePolicy.toJSON());
+
+ return AndroidAPIUtils.getOperationResponse(passwordPolicyBeanWrapper.getDeviceIDs(),
+ operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+ @POST
+ @Path("set-webclip")
+ @Override
+ public Response setWebClip(WebClipBeanWrapper webClipBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking 'webclip' operation");
+ }
+
+ try {
+
+
+ if (webClipBeanWrapper == null || webClipBeanWrapper.getOperation() == null) {
+ String errorMessage = "The payload of the add webclip operation is incorrect";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
+ WebClip webClip = webClipBeanWrapper.getOperation();
+ ProfileOperation operation = new ProfileOperation();
+ operation.setCode(AndroidConstants.OperationCodes.WEBCLIP);
+ operation.setType(Operation.Type.PROFILE);
+ operation.setPayLoad(webClip.toJSON());
+ return AndroidAPIUtils.getOperationResponse(webClipBeanWrapper.getDeviceIDs(), operation);
+
+ } catch (OperationManagementException e) {
+ String errorMessage = "Issue in retrieving operation management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ } catch (DeviceManagementException e) {
+ String errorMessage = "Issue in retrieving device management service instance";
+ log.error(errorMessage, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
+ }
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementServiceImpl.java
new file mode 100644
index 0000000000..f8c0980d77
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceManagementServiceImpl.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services.impl;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.app.mgt.Application;
+import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
+import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+import org.wso2.carbon.mdm.services.android.exception.UnexpectedServerErrorException;
+import org.wso2.carbon.mdm.services.android.services.DeviceManagementService;
+import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
+import org.wso2.carbon.mdm.services.android.util.AndroidConstants;
+import org.wso2.carbon.mdm.services.android.util.AndroidDeviceUtils;
+import org.wso2.carbon.mdm.services.android.util.Message;
+import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
+import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
+import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+@Path("/devices")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class DeviceManagementServiceImpl implements DeviceManagementService {
+
+ private static final String OPERATION_ERROR_STATUS = "ERROR";
+ private static final Log log = LogFactory.getLog(DeviceManagementServiceImpl.class);
+
+ @PUT
+ @Path("/{id}/applications")
+ @Override
+ public Response updateApplicationList(@PathParam("id") String id, List applications) {
+ Message responseMessage = new Message();
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(id);
+ deviceIdentifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
+ try {
+ AndroidAPIUtils.getApplicationManagerService().
+ updateApplicationListInstalledInDevice(deviceIdentifier, applications);
+ responseMessage.setResponseMessage("Device information has modified successfully.");
+ return Response.status(Response.Status.ACCEPTED).entity(responseMessage).build();
+ } catch (ApplicationManagementException e) {
+ String msg = "Error occurred while modifying the application list.";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ @PUT
+ @Path("/{id}/pending-operations")
+ @Override
+ public Response getPendingOperations(@PathParam("id") String id,
+ @HeaderParam("If-Modified-Since") String ifModifiedSince,
+ List extends Operation> resultOperations) {
+ if (id == null || id.isEmpty()) {
+ String msg = "Device identifier is null or empty, hence returning device not found";
+ log.error(msg);
+ return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
+ }
+ DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
+ try {
+ if (!AndroidDeviceUtils.isValidDeviceIdentifier(deviceIdentifier)) {
+ String msg = "Device not found for identifier '" + id + "'";
+ log.error(msg);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android pending operations:" + id);
+ }
+ if (resultOperations != null && !resultOperations.isEmpty()) {
+ updateOperations(id, resultOperations);
+ }
+ } catch (OperationManagementException e) {
+ String msg = "Issue in retrieving operation management service instance";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ } catch (PolicyComplianceException e) {
+ String msg = "Issue in updating Monitoring operation";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ } catch (DeviceManagementException e) {
+ String msg = "Issue in retrieving device management service instance";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ } catch (ApplicationManagementException e) {
+ String msg = "Issue in retrieving application management service instance";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ } catch (NotificationManagementException e) {
+ String msg = "Issue in retrieving Notification management service instance";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+
+ List extends Operation> pendingOperations;
+ try {
+ pendingOperations = AndroidAPIUtils.getPendingOperations(deviceIdentifier);
+ } catch (OperationManagementException e) {
+ String msg = "Issue in retrieving operation management service instance";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ return Response.status(Response.Status.CREATED).entity(pendingOperations).build();
+ }
+
+ private void updateOperations(String deviceId, List extends Operation> operations)
+ throws OperationManagementException, PolicyComplianceException,
+ ApplicationManagementException, NotificationManagementException, DeviceManagementException {
+ for (org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation : operations) {
+ AndroidAPIUtils.updateOperation(deviceId, operation);
+ if (OPERATION_ERROR_STATUS.equals(operation.getStatus().toString())) {
+ org.wso2.carbon.device.mgt.common.notification.mgt.Notification notification = new
+ org.wso2.carbon.device.mgt.common.notification.mgt.Notification();
+ DeviceIdentifier id = new DeviceIdentifier();
+ id.setId(deviceId);
+ id.setType(AndroidConstants.DEVICE_TYPE_ANDROID);
+ String deviceName = AndroidAPIUtils.getDeviceManagementService().getDevice(id).getName();
+ notification.setOperationId(operation.getId());
+ notification.setStatus(org.wso2.carbon.device.mgt.common.notification.mgt.Notification.
+ Status.NEW.toString());
+ notification.setDescription("Operation " + operation.getCode() + " failed to execute on device " +
+ deviceName + ". Device ID : " + deviceId);
+ AndroidAPIUtils.getNotificationManagementService().addNotification(id, notification);
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Updating operation '" + operation.toString() + "'");
+ }
+ }
+ }
+
+ @POST
+ @Override
+ public Response enrollDevice(Device device) {
+ try {
+ device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
+ device.getEnrolmentInfo().setOwner(AndroidAPIUtils.getAuthenticatedUser());
+ boolean status = AndroidAPIUtils.getDeviceManagementService().enrollDevice(device);
+
+ PolicyManagerService policyManagerService = AndroidAPIUtils.getPolicyManagerService();
+ policyManagerService.getEffectivePolicy(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType()));
+ if (status) {
+ return Response.status(Response.Status.OK).entity("Android device, which carries the id '" +
+ device.getDeviceIdentifier() + "' has successfully been enrolled").build();
+ } else {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Failed to enroll '" +
+ device.getType() + "' device, which carries the id '" +
+ device.getDeviceIdentifier() + "'").build();
+ }
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while enrolling the '" + device.getType() + "', which carries the id '" +
+ device.getDeviceIdentifier() + "'";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ } catch (PolicyManagementException e) {
+ String msg = "Error occurred while enforcing default enrollment policy upon '" + device.getType() +
+ "', which carries the id '" +
+ device.getDeviceIdentifier() + "'";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ @GET
+ @Path("/{id}/status")
+ @Override
+ public Response isEnrolled(@PathParam("id") String id, @HeaderParam("If-Modified-Since") String ifModifiedSince) {
+ boolean result;
+ DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
+ try {
+ result = AndroidAPIUtils.getDeviceManagementService().isEnrolled(deviceIdentifier);
+ if (result) {
+ return Response.status(Response.Status.OK).entity("Android device that carries the id '" +
+ id + "' is enrolled").build();
+ } else {
+ return Response.status(Response.Status.NOT_FOUND).entity("No Android device is found upon the id '" +
+ id + "'").build();
+ }
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while checking enrollment status of the device.";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ @PUT
+ @Path("/{id}")
+ @Override
+ public Response modifyEnrollment(@PathParam("id") String id, Device device) {
+ boolean result;
+ try {
+ device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
+ result = AndroidAPIUtils.getDeviceManagementService().modifyEnrollment(device);
+ if (result) {
+ return Response.status(Response.Status.ACCEPTED).entity("Enrollment of Android device that " +
+ "carries the id '" + id + "' has successfully updated").build();
+ } else {
+ return Response.status(Response.Status.NOT_MODIFIED).entity("Enrollment of Android device that " +
+ "carries the id '" + id + "' has not been updated").build();
+ }
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while modifying enrollment of the Android device that carries the id '" +
+ id + "'";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ @DELETE
+ @Path("/{id}")
+ @Override
+ public Response disEnrollDevice(@PathParam("id") String id) {
+ boolean result;
+ DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
+ try {
+ result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
+ if (result) {
+ return Response.status(Response.Status.OK).entity("Android device that carries id '" + id +
+ "' has successfully dis-enrolled").build();
+ } else {
+ return Response.status(Response.Status.NOT_FOUND).entity("Android device that carries id '" + id +
+ "' has not been dis-enrolled").build();
+ }
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while dis-enrolling the Android device that carries the id '" + id + "'";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/impl/ConfigurationMgtServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceTypeConfigurationServiceImpl.java
similarity index 54%
rename from components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/impl/ConfigurationMgtServiceImpl.java
rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceTypeConfigurationServiceImpl.java
index 57f5d7693d..6ec2c470b7 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/configuration/impl/ConfigurationMgtServiceImpl.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/DeviceTypeConfigurationServiceImpl.java
@@ -1,22 +1,22 @@
/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
*
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
*/
-
-package org.wso2.carbon.mdm.services.android.services.configuration.impl;
+package org.wso2.carbon.mdm.services.android.services.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -25,69 +25,32 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import org.wso2.carbon.mdm.services.android.services.configuration.ConfigurationMgtService;
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+import org.wso2.carbon.mdm.services.android.exception.UnexpectedServerErrorException;
+import org.wso2.carbon.mdm.services.android.services.DeviceTypeConfigurationService;
import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
import org.wso2.carbon.mdm.services.android.util.AndroidConstants;
import org.wso2.carbon.mdm.services.android.util.Message;
+
import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
-/**
- * Android Platform Configuration REST-API implementation.
- * All end points supports JSON, XMl with content negotiation.
- */
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public class ConfigurationMgtServiceImpl implements ConfigurationMgtService {
- private static Log log = LogFactory.getLog(ConfigurationMgtServiceImpl.class);
+@Path("/configuration")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class DeviceTypeConfigurationServiceImpl implements DeviceTypeConfigurationService {
- @POST
- public Response configureSettings(PlatformConfiguration configuration)
- throws AndroidAgentException {
-
- Message responseMsg = new Message();
- String msg;
- ConfigurationEntry licenseEntry = null;
- try {
- configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- List configs = configuration.getConfiguration();
- for (ConfigurationEntry entry : configs) {
- if (AndroidConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) {
- License license = new License();
- license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- license.setLanguage(AndroidConstants.TenantConfigProperties.LANGUAGE_US);
- license.setVersion("1.0.0");
- license.setText(entry.getValue().toString());
- AndroidAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants.
- MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID, license);
- licenseEntry = entry;
- break;
- }
- }
-
- if (licenseEntry != null) {
- configs.remove(licenseEntry);
- }
- configuration.setConfiguration(configs);
- AndroidAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
- Response.status(Response.Status.CREATED);
- responseMsg.setResponseMessage("Android platform configuration saved successfully.");
- responseMsg.setResponseCode(Response.Status.CREATED.toString());
- } catch (DeviceManagementException e) {
- msg = "Error occurred while configuring the android platform";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
- }
- return Response.status(Response.Status.CREATED).entity(responseMsg).build();
- }
+ private static final Log log = LogFactory.getLog(DeviceTypeConfigurationServiceImpl.class);
@GET
- public Response getConfiguration() throws AndroidAgentException {
+ @Override
+ public Response getConfiguration(
+ @HeaderParam("If-Modified-Since") String ifModifiedSince) {
String msg;
- PlatformConfiguration PlatformConfiguration = null;
+ PlatformConfiguration PlatformConfiguration;
List configs;
try {
PlatformConfiguration = AndroidAPIUtils.getDeviceManagementService().
@@ -98,11 +61,10 @@ public class ConfigurationMgtServiceImpl implements ConfigurationMgtService {
PlatformConfiguration = new PlatformConfiguration();
configs = new ArrayList<>();
}
-
ConfigurationEntry entry = new ConfigurationEntry();
License license = AndroidAPIUtils.getDeviceManagementService().getLicense(
DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID, AndroidConstants.
- TenantConfigProperties.LANGUAGE_US);
+ TenantConfigProperties.LANGUAGE_US);
if (license != null && configs != null) {
entry.setContentType(AndroidConstants.TenantConfigProperties.CONTENT_TYPE_TEXT);
@@ -114,13 +76,15 @@ public class ConfigurationMgtServiceImpl implements ConfigurationMgtService {
} catch (DeviceManagementException e) {
msg = "Error occurred while retrieving the Android tenant configuration";
log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
}
return Response.status(Response.Status.OK).entity(PlatformConfiguration).build();
}
@PUT
- public Response updateConfiguration(PlatformConfiguration configuration) throws AndroidAgentException {
+ @Override
+ public Response updateConfiguration(PlatformConfiguration configuration) {
String msg;
Message responseMsg = new Message();
ConfigurationEntry licenseEntry = null;
@@ -147,14 +111,36 @@ public class ConfigurationMgtServiceImpl implements ConfigurationMgtService {
AndroidAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
//AndroidAPIUtils.getGCMService().resetTenantConfigCache();
Response.status(Response.Status.ACCEPTED);
- responseMsg.setResponseMessage("Android platform configuration has updated successfully.");
+ responseMsg.setResponseMessage("Android platform configuration has been updated successfully.");
responseMsg.setResponseCode(Response.Status.ACCEPTED.toString());
} catch (DeviceManagementException e) {
msg = "Error occurred while modifying configuration settings of Android platform";
log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
}
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
}
+
+ @GET
+ @Path("/license")
+ @Produces(MediaType.TEXT_PLAIN)
+ public Response getLicense(
+ @HeaderParam("If-Modified-Since") String ifModifiedSince) {
+ License license;
+ try {
+ license =
+ AndroidAPIUtils.getDeviceManagementService().getLicense(
+ DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID,
+ DeviceManagementConstants.LanguageCodes.LANGUAGE_CODE_ENGLISH_US);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while retrieving the license configured for Android device enrolment";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ return Response.status(Response.Status.OK).entity((license == null) ? null : license.getText()).build();
+ }
+
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/EventReceiverServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/EventReceiverServiceImpl.java
new file mode 100644
index 0000000000..cdbcab310f
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/impl/EventReceiverServiceImpl.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.services.impl;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
+import org.wso2.carbon.mdm.services.android.bean.DeviceState;
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+import org.wso2.carbon.mdm.services.android.bean.wrapper.EventBeanWrapper;
+import org.wso2.carbon.mdm.services.android.exception.BadRequestException;
+import org.wso2.carbon.mdm.services.android.exception.NotFoundException;
+import org.wso2.carbon.mdm.services.android.exception.UnexpectedServerErrorException;
+import org.wso2.carbon.mdm.services.android.services.EventReceiverService;
+import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
+import org.wso2.carbon.mdm.services.android.util.Message;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+@Path("/events")
+public class EventReceiverServiceImpl implements EventReceiverService {
+
+ private static final String EVENT_STREAM_DEFINITION = "android_agent";
+ private static final Log log = LogFactory.getLog(EventReceiverServiceImpl.class);
+
+ @POST
+ @Path("/publish")
+ @Override
+ public Response publishEvents(EventBeanWrapper eventBeanWrapper) {
+ if (log.isDebugEnabled()) {
+ log.debug("Invoking Android device even logging.");
+ }
+ Message message = new Message();
+
+ Object payload[] = {eventBeanWrapper.getDeviceIdentifier(), eventBeanWrapper.getPayload(),
+ eventBeanWrapper.getType()};
+ try {
+ if (AndroidAPIUtils.getEventPublisherService().publishEvent(
+ EVENT_STREAM_DEFINITION, "1.0.0", new Object[0], new Object[0], payload)) {
+ message.setResponseCode("Event is published successfully.");
+ return Response.status(Response.Status.CREATED).entity(message).build();
+ } else {
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage("Error occurred while " +
+ "publishing the event.").build());
+ }
+ } catch (DataPublisherConfigurationException e) {
+ String msg = "Error occurred while getting the Data publisher Service instance.";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ @GET
+ @Override
+ public Response retrieveAlerts(@QueryParam("id") String deviceId, @QueryParam("from") long from,
+ @QueryParam("to") long to, @QueryParam("type") String type,
+ @HeaderParam("If-Modified-Since") String ifModifiedSince) {
+
+ if (from != 0l && to != 0l && deviceId != null) {
+ return retrieveAlertFromDate(deviceId, from, to);
+ } else if (deviceId != null && type != null) {
+ return retrieveAlertByType(deviceId, type);
+ } else if (deviceId != null) {
+ return retrieveAlert(deviceId);
+ } else {
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage("Request must contain " +
+ "the device identifier. Optionally, both from and to value should be present to get " +
+ "alerts between times.").build());
+ }
+ }
+
+ private Response retrieveAlert(String deviceId) {
+ if (log.isDebugEnabled()) {
+ log.debug("Retrieving events for given device Identifier.");
+ }
+ String query = "deviceIdentifier:" + deviceId;
+ List deviceStates;
+ try {
+ deviceStates = AndroidAPIUtils.getAllEventsForDevice(EVENT_STREAM_DEFINITION, query);
+ if (deviceStates == null) {
+ throw new NotFoundException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage("No any alerts are " +
+ "published for Device: " + deviceId + ".").build());
+ } else {
+ return Response.status(Response.Status.OK).entity(deviceStates).build();
+ }
+ } catch (AnalyticsException e) {
+ String msg = "Error occurred while getting published events for specific device: " + deviceId + ".";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ private Response retrieveAlertFromDate(String deviceId, long from, long to) {
+ String fromDate = String.valueOf(from);
+ String toDate = String.valueOf(to);
+ if (log.isDebugEnabled()) {
+ log.debug("Retrieving events for given device Identifier and time period.");
+ }
+
+ String query = "deviceIdentifier:" + deviceId + " AND _timestamp: [" + fromDate + " TO " + toDate + "]";
+ List deviceStates;
+ try {
+ deviceStates = AndroidAPIUtils.getAllEventsForDevice(EVENT_STREAM_DEFINITION, query);
+ if (deviceStates == null) {
+ throw new NotFoundException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage("No any alerts are " +
+ "published on given date for given Device: " + deviceId + ".").build());
+
+ } else {
+ return Response.status(Response.Status.OK).entity(deviceStates).build();
+ }
+ } catch (AnalyticsException e) {
+ String msg = "Error occurred while getting published events for specific " +
+ "Device: " + deviceId + " on given Date.";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+ private Response retrieveAlertByType(String deviceId, String type) {
+ if (log.isDebugEnabled()) {
+ log.debug("Retrieving events for given device identifier and type.");
+ }
+ String query = "deviceIdentifier:" + deviceId + " AND type:" + type;
+ List deviceStates;
+ try {
+ deviceStates = AndroidAPIUtils.getAllEventsForDevice(EVENT_STREAM_DEFINITION, query);
+ if (deviceStates == null) {
+ throw new NotFoundException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage("No any alerts are " +
+ "published for given Device: '" + deviceId + "' and given specific Type.").build());
+
+ } else {
+ return Response.status(Response.Status.OK).entity(deviceStates).build();
+ }
+ } catch (AnalyticsException e) {
+ String msg = "Error occurred while getting published events for specific " +
+ "Device: " + deviceId + "and given specific Type.";
+ log.error(msg, e);
+ throw new UnexpectedServerErrorException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
+ }
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/OperationMgtService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/OperationMgtService.java
deleted file mode 100644
index 0eec30f256..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/OperationMgtService.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.operationmgt;
-
-import io.swagger.annotations.*;
-import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
-import org.wso2.carbon.mdm.services.android.bean.wrapper.*;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-/**
- * Android Device Operation REST-API implementation.
- */
-
-@Api(value = "OperationMgtService", description = "Android Device Operation REST-API implementation.")
-public interface OperationMgtService {
- String ACCEPT = "Accept";
-
- @PUT
- @Path("{id}")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "PUT",
- value = "Getting Pending Android Device Operations",
- responseContainer = "List",
- notes = "The Android agent communicates with the server to get the operations that are queued up " +
- "at the server end for a given device using this REST API",
- response = Operation.class)
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "List of pending operations"),
- @ApiResponse(code = 500, message = "Issue in retrieving operation management service instance")
- })
- Response getPendingOperations(
- @ApiParam(name = "acceptHeader", value = "Accept Header") @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "id", value = "DeviceIdentifier") @PathParam("id") String id,
- @ApiParam(name = "resultOperations", value = "Device Operation Status")
- List extends Operation> resultOperations);
-
- @POST
- @Path("lock")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Adding a Device Lock on Android Devices",
- notes = "Using this API you have the option of hard locking an Android device, where the Administrator " +
- "permanently locks the device or screen locking an Android device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response configureDeviceLock(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "cameraBeanWrapper",
- value = "Device lock configurations with device IDs") DeviceLockBeanWrapper deviceLockBeanWrapper);
-
- @POST
- @Path("unlock")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Adding a Device Unlock on Android Devices",
- responseContainer = "List",
- notes = "Using this API you have the option of unlocking an Android device, where the Administrator " +
- "unlocks the device",
- response = String.class)
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response configureDeviceUnlock(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs", value =
- "DeviceIds to be enable device unlock operation")
- List deviceIDs);
-
-
- @POST
- @Path("location")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Requesting Location Coordinates of Android Devices",
- responseContainer = "List",
- notes = "Request location coordinates of Android devices",
- response = String.class)
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Requested Device Coordinates"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")})
- Response getDeviceLocation(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "DeviceIDs to be requested to get device location")
- List deviceIDs);
-
- @POST
- @Path("clear-password")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Clearing the Password on Android Devices",
- notes = "Clear the password on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response removePassword(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "DeviceIds to be requested to remove password")
- List deviceIDs);
-
- @POST
- @Path("camera")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Enabling or Disabling the Camera on Android Devices",
- notes = "Enable or disable the camera on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in creating a new camera instance")
- })
- Response configureCamera(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "cameraBeanWrapper",
- value = "Camera enable/disable configurations with device IDs") CameraBeanWrapper cameraBeanWrapper);
-
- @POST
- @Path("device-info")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Requesting Information from Android Devices",
- notes = "Using this REST API you are able to request for Android device details. Once this REST API is" +
- " executed it will be in the Android operation queue until the device calls the server to retrieve " +
- "the list of operations that needs to be executed on the device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Device Information"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response getDeviceInformation(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIds",
- value = "Device IDs to be requested to get device information")
- List deviceIDs);
-
- @POST
- @Path("enterprise-wipe")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Enterprise Wiping Android Devices",
- notes = "Enterprise wipe is the process of deleting enterprise related data on a device while keeping the " +
- "personal data intact. You are able to enterprise wipe Android devices using this REST API"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance"
- )})
- Response wipeDevice(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "Device IDs to be requested to done enterprise-wipe")
- List deviceIDs);
-
- @POST
- @Path("wipe-data")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Factory Resetting an Android Device",
- notes = "Factory rest or erases all the data stored in the Android devices " +
- "to restore them back to the original system"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")})
- Response wipeData(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "wipeDataBeanWrapper",
- value = "Configurations and DeviceIds to be need to done wipe-data")
- WipeDataBeanWrapper wipeDataBeanWrapper);
-
- @POST
- @Path("application-list")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Requesting the List of Installed Applications on Android Devices",
- notes = "Using this REST API the server requests for the list of applications that are installed on" +
- " the Android devices. Once this REST API is executed it will be in the Android operation queue " +
- "until the device calls the server to retrieve the list of operations that needs to be executed " +
- "on the device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "List of applications for specific deviceIdentifier"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response getApplications(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "Device Ids to be need to get applications which already installed")
- List deviceIDs);
-
- @POST
- @Path("ring-device")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Ringing Android Devices",
- notes = "Ring Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response ringDevice(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "Device Ids needs to be ring") List deviceIDs);
-
- @POST
- @Path("reboot-device")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Rebooting Android Devices",
- notes = "Reboot Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response rebootDevice(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "deviceIDs",
- value = "Device Ids needs to be rebooted") List deviceIDs);
-
- @POST
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Muting Android Devices",
- notes = "Mute Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- @Path("mute")
- Response muteDevice(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "deviceIDs", value = "DeviceIDs need to be muted") List deviceIDs);
-
- @POST
- @Path("install-application")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Installing an Application on Android Devices",
- notes = "Install an application on an Android device. If the device you are installing the application" +
- " on has the WSO2 system service installed, the application installation will happen in silent " +
- "mode, else the device user's consent will be required"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response installApplication(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "applicationInstallationBeanWrapper",
- value = "Properties of installed apps and device IDs")
- ApplicationInstallationBeanWrapper applicationInstallationBeanWrapper);
-
- @POST
- @Path("update-application")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Updating an Application on Android Devices",
- notes = "Update an application on an Android device. If the device you are updating the application" +
- " has the WSO2 system service installed, the application update will happen in silent " +
- "mode, else the device user's consent will be required"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response updateApplication(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "applicationUpdateBeanWrapper",
- value = "Properties of updated apps and device IDs")
- ApplicationUpdateBeanWrapper applicationUpdateBeanWrapper);
-
- @POST
- @Path("uninstall-application")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Uninstalling an Application from Android Devices",
- notes = "Uninstall an application from Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response uninstallApplication(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "applicationUninstallationBeanWrapper",
- value = "applicationUninstallationConfigs and Device Ids")
- ApplicationUninstallationBeanWrapper applicationUninstallationBeanWrapper);
-
- @POST
- @Path("blacklist-applications")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Get BlackListed Applications",
- notes = "Getting BlackListed Applications"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response blacklistApplications(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "blacklistApplicationsBeanWrapper",
- value = "BlacklistApplications Configuration and DeviceIds")
- BlacklistApplicationsBeanWrapper blacklistApplicationsBeanWrapper);
-
- @POST
- @Path("upgrade-firmware")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Upgrading device firmware",
- notes = "Device firmware upgrade"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response upgradeFirmware(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "upgradeFirmwareBeanWrapper",
- value = "Firmware upgrade configuration and DeviceIds")
- UpgradeFirmwareBeanWrapper upgradeFirmwareBeanWrapper);
-
- @POST
- @Path("vpn")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Configuring VPN on Android devices",
- notes = "Configure VPN on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response configureVPN(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "vpnBeanWrapper",
- value = "VPN configuration and DeviceIds")
- VpnBeanWrapper vpnBeanWrapper);
-
- @POST
- @Path("notification")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Sending a Notification to Android Devices",
- notes = "Send a notification to Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response sendNotification(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "notificationBeanWrapper",
- value = "Notification Configurations and device Ids")
- NotificationBeanWrapper notificationBeanWrapper);
-
- @POST
- @Path("wifi")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Configuring Wi-Fi on Android Devices",
- notes = "Configure Wi-Fi on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response configureWifi(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "wifiBeanWrapper",
- value = "WifiConfigurations and Device Ids") WifiBeanWrapper wifiBeanWrapper);
-
- @POST
- @Path("encrypt")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Encrypting Storage on Android Devices",
- notes = "Encrypt the data stored on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response encryptStorage(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "encryptionBeanWrapper",
- value = "Configurations and deviceIds need to be done data encryption")
- EncryptionBeanWrapper encryptionBeanWrapper);
-
- @POST
- @Path("change-lock-code")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Changing the Lock Code on Android Devices",
- notes = "Change the lock code on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response changeLockCode(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "lockCodeBeanWrapper",
- value = "Configurations and device Ids need to be done change lock code")
- LockCodeBeanWrapper lockCodeBeanWrapper);
-
- @POST
- @Path("password-policy")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Setting a Passcode Policy on Android Devices",
- notes = "Set a password policy on Android devices"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "created"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response setPasswordPolicy(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "passwordPolicyBeanWrapper",
- value = "Password Policy Configurations and Device Ids")
- PasswordPolicyBeanWrapper passwordPolicyBeanWrapper);
-
- @POST
- @Path("webclip")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Setting a Web Clip on Android Devices",
- notes = "Set a web clip on Android devices. A web clip is used to add a bookmark to a web application"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Accepted"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response setWebClip(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader, @ApiParam(name = "webClipBeanWrapper",
- value = "Configurations to need set web clip on device and device Ids")
- WebClipBeanWrapper webClipBeanWrapper);
-
- @POST
- @Path("disenroll")
- @ApiOperation(
- consumes = MediaType.APPLICATION_JSON,
- httpMethod = "POST",
- value = "Un-Register The Device from the EMM server",
- notes = "unregister the given device"
- )
- @ApiResponses(value = {
- @ApiResponse(code = 201, message = "Accepted"),
- @ApiResponse(code = 500, message = "Issue in retrieving device management service instance")
- })
- Response setDisenrollment(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam(ACCEPT) String acceptHeader,
- @ApiParam(name = "disenrollmentBeanWrapper", value = "Dis-enrollment configurations")
- DisenrollmentBeanWrapper disenrollmentBeanWrapper);
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/impl/OperationMgtServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/impl/OperationMgtServiceImpl.java
deleted file mode 100644
index 030f96384c..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/operationmgt/impl/OperationMgtServiceImpl.java
+++ /dev/null
@@ -1,1272 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.operationmgt.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
-import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
-import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
-import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
-import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
-import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
-import org.wso2.carbon.mdm.services.android.bean.*;
-import org.wso2.carbon.mdm.services.android.bean.Notification;
-import org.wso2.carbon.mdm.services.android.bean.wrapper.*;
-import org.wso2.carbon.mdm.services.android.services.operationmgt.OperationMgtService;
-import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
-import org.wso2.carbon.mdm.services.android.util.AndroidConstants;
-import org.wso2.carbon.mdm.services.android.util.AndroidDeviceUtils;
-import org.wso2.carbon.mdm.services.android.util.Message;
-import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-public class OperationMgtServiceImpl implements OperationMgtService {
-
- private static Log log = LogFactory.getLog(OperationMgtService.class);
- private static final String ACCEPT = "Accept";
- private static final String OPERATION_ERROR_STATUS = "ERROR";
- private static final String DEVICE_TYPE_ANDROID = "android";
-
- @PUT
- @Path("{id}")
- public Response getPendingOperations
- (@HeaderParam(ACCEPT) String acceptHeader, @PathParam("id") String id,
- List extends Operation> resultOperations) {
- Message message;
- String errorMessage;
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
-
- if (id == null || id.isEmpty()) {
- errorMessage = "Device identifier is null or empty, hence returning device not found";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.BAD_REQUEST.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
- try {
- if (!AndroidDeviceUtils.isValidDeviceIdentifier(deviceIdentifier)) {
- errorMessage = "Device not found for identifier '" + id + "'";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.BAD_REQUEST.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android pending operations:" + id);
- }
- if (resultOperations != null && !resultOperations.isEmpty()) {
- updateOperations(id, resultOperations);
- }
- } catch (OperationManagementException e) {
- errorMessage = "Issue in retrieving operation management service instance";
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(
- responseMediaType).build();
- } catch (PolicyComplianceException e) {
- errorMessage = "Issue in updating Monitoring operation";
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- errorMessage = "Issue in retrieving device management service instance";
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(
- responseMediaType).build();
- } catch (ApplicationManagementException e) {
- errorMessage = "Issue in retrieving application management service instance";
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(
- responseMediaType).build();
- } catch (NotificationManagementException e) {
- errorMessage = "Issue in retrieving Notification management service instance";
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(
- responseMediaType).build();
- }
-
- List extends Operation> pendingOperations;
- try {
- pendingOperations = AndroidAPIUtils.getPendingOperations(deviceIdentifier);
- } catch (OperationManagementException e) {
- errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- return Response.status(Response.Status.CREATED).entity(pendingOperations).type(
- responseMediaType).build();
- }
-
- @POST
- @Path("lock")
- public Response configureDeviceLock(@HeaderParam(ACCEPT) String acceptHeader,
- DeviceLockBeanWrapper deviceLockBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android device lock operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
- Response response;
-
- try {
- DeviceLock lock = deviceLockBeanWrapper.getOperation();
-
- if (lock == null) {
- String errorMessage = "Lock bean is empty";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_LOCK);
- operation.setType(Operation.Type.PROFILE);
- operation.setEnabled(true);
- operation.setPayLoad(lock.toJSON());
- response = AndroidAPIUtils.getOperationResponse(deviceLockBeanWrapper.getDeviceIDs(), operation,
- message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- return response;
- }
-
- @POST
- @Path("unlock")
- public Response configureDeviceUnlock(@HeaderParam(ACCEPT) String acceptHeader, List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android device unlock operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
- Response response;
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_UNLOCK);
- operation.setType(Operation.Type.COMMAND);
- operation.setEnabled(true);
- response = AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- return response;
- }
-
- @POST
- @Path("location")
- public Response getDeviceLocation(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android device location operation");
- }
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_LOCATION);
- operation.setType(Operation.Type.COMMAND);
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation,
- message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("clear-password")
- public Response removePassword(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android clear password operation");
- }
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.CLEAR_PASSWORD);
- operation.setType(Operation.Type.COMMAND);
-
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation,
- message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("camera")
- public Response configureCamera(@HeaderParam(ACCEPT) String acceptHeader,
- CameraBeanWrapper cameraBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android Camera operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- Camera camera = cameraBeanWrapper.getOperation();
-
- if (camera == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the configure camera operation is incorrect");
- }
- throw new OperationManagementException("Issue in creating a new camera instance");
- }
-
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.CAMERA);
- operation.setType(Operation.Type.COMMAND);
- operation.setEnabled(camera.isEnabled());
-
- return AndroidAPIUtils.getOperationResponse(cameraBeanWrapper.getDeviceIDs(), operation, message,
- responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("device-info")
- public Response getDeviceInformation(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking get Android device information operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_INFO);
- operation.setType(Operation.Type.COMMAND);
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("enterprise-wipe")
- public Response wipeDevice(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking enterprise-wipe device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.ENTERPRISE_WIPE);
- operation.setType(Operation.Type.COMMAND);
-
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("wipe-data")
- public Response wipeData(@HeaderParam(ACCEPT) String acceptHeader,
- WipeDataBeanWrapper wipeDataBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android wipe-data device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- WipeData wipeData = wipeDataBeanWrapper.getOperation();
-
- if (wipeData == null) {
- throw new OperationManagementException("WipeData bean is empty");
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.WIPE_DATA);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(wipeData.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(wipeDataBeanWrapper.getDeviceIDs(), operation, message,
- responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("application-list")
- public Response getApplications(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android getApplicationList device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.APPLICATION_LIST);
- operation.setType(Operation.Type.COMMAND);
-
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("ring-device")
- public Response ringDevice(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android ring-device device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_RING);
- operation.setType(Operation.Type.COMMAND);
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("reboot-device")
- public Response rebootDevice(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android reboot-device device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_REBOOT);
- operation.setType(Operation.Type.COMMAND);
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("mute")
- public Response muteDevice(@HeaderParam(ACCEPT) String acceptHeader,
- List deviceIDs) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking mute device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DEVICE_MUTE);
- operation.setType(Operation.Type.COMMAND);
- operation.setEnabled(true);
- return AndroidAPIUtils.getOperationResponse(deviceIDs, operation, message,
- responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("install-application")
- public Response installApplication(@HeaderParam(ACCEPT) String acceptHeader,
- ApplicationInstallationBeanWrapper applicationInstallationBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'InstallApplication' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- ApplicationInstallation applicationInstallation = applicationInstallationBeanWrapper.getOperation();
-
- if (applicationInstallation == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the application installing operation is incorrect");
- }
- String errorMessage = "Issue in creating a new application installation instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.INSTALL_APPLICATION);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(applicationInstallation.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(applicationInstallationBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("update-application")
- public Response updateApplication(@HeaderParam(ACCEPT) String acceptHeader,
- ApplicationUpdateBeanWrapper applicationUpdateBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'UpdateApplication' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- ApplicationUpdate applicationUpdate = applicationUpdateBeanWrapper.getOperation();
-
- if (applicationUpdate == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the application update operation is incorrect");
- }
- String errorMessage = "Issue in creating a new application update instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.UPDATE_APPLICATION);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(applicationUpdate.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(applicationUpdateBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("uninstall-application")
- public Response uninstallApplication(@HeaderParam(ACCEPT) String acceptHeader,
- ApplicationUninstallationBeanWrapper applicationUninstallationBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'UninstallApplication' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- ApplicationUninstallation applicationUninstallation = applicationUninstallationBeanWrapper.getOperation();
-
- if (applicationUninstallation == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the application uninstalling operation is incorrect");
- }
- String errorMessage = "Issue in creating a new application uninstallation instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.UNINSTALL_APPLICATION);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(applicationUninstallation.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(applicationUninstallationBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("blacklist-applications")
- public Response blacklistApplications(@HeaderParam(ACCEPT) String acceptHeader,
- BlacklistApplicationsBeanWrapper blacklistApplicationsBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'Blacklist-Applications' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- BlacklistApplications blacklistApplications = blacklistApplicationsBeanWrapper.getOperation();
-
- if (blacklistApplications == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the blacklisting apps operation is incorrect");
- }
- String errorMessage = "Issue in creating a new blacklist applications instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.BLACKLIST_APPLICATIONS);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(blacklistApplications.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(blacklistApplicationsBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("upgrade-firmware")
- public Response upgradeFirmware(@HeaderParam(ACCEPT) String acceptHeader,
- UpgradeFirmwareBeanWrapper upgradeFirmwareBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android upgrade-firmware device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- UpgradeFirmware upgradeFirmware = upgradeFirmwareBeanWrapper.getOperation();
-
- if (upgradeFirmware == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the upgrade firmware operation is incorrect");
- }
- String errorMessage = "Issue in creating a new upgrade firmware instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.UPGRADE_FIRMWARE);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(upgradeFirmware.toJSON());
- return AndroidAPIUtils.getOperationResponse(upgradeFirmwareBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("vpn")
- public Response configureVPN(@HeaderParam(ACCEPT) String acceptHeader,
- VpnBeanWrapper vpnBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android VPN device operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- Vpn vpn = vpnBeanWrapper.getOperation();
-
- if (vpn == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the VPN operation is incorrect");
- }
- String errorMessage = "Issue in creating a new VPN instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.VPN);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(vpn.toJSON());
- return AndroidAPIUtils.getOperationResponse(vpnBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("notification")
- public Response sendNotification(@HeaderParam(ACCEPT) String acceptHeader,
- NotificationBeanWrapper notificationBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'notification' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- Notification notification = notificationBeanWrapper.getOperation();
-
- if (notification == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the notification operation is incorrect");
- }
- String errorMessage = "Issue in creating a new notification instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.NOTIFICATION);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(notification.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(notificationBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("wifi")
- public Response configureWifi(@HeaderParam(ACCEPT) String acceptHeader,
- WifiBeanWrapper wifiBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'configure wifi' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- Wifi wifi = wifiBeanWrapper.getOperation();
-
- if (wifi == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the wifi operation is incorrect");
- }
- String errorMessage = "Issue in creating a new Wifi instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.WIFI);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(wifi.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(wifiBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("encrypt")
- public Response encryptStorage(@HeaderParam(ACCEPT) String acceptHeader,
- EncryptionBeanWrapper encryptionBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'encrypt' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- DeviceEncryption deviceEncryption = encryptionBeanWrapper.getOperation();
-
- if (deviceEncryption == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the device encryption operation is incorrect");
- }
- String errorMessage = "Issue in creating a new encryption instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.ENCRYPT_STORAGE);
- operation.setType(Operation.Type.COMMAND);
- operation.setEnabled(deviceEncryption.isEncrypted());
-
- return AndroidAPIUtils.getOperationResponse(encryptionBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("change-lock-code")
- public Response changeLockCode(@HeaderParam(ACCEPT) String acceptHeader,
- LockCodeBeanWrapper lockCodeBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'change lock code' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- LockCode lockCode = lockCodeBeanWrapper.getOperation();
-
- if (lockCode == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the change lock code operation is incorrect");
- }
- String errorMessage = "Issue in retrieving a new lock-code instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.CHANGE_LOCK_CODE);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(lockCode.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(lockCodeBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("password-policy")
- public Response setPasswordPolicy(@HeaderParam(ACCEPT) String acceptHeader,
- PasswordPolicyBeanWrapper passwordPolicyBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'password policy' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- PasscodePolicy passcodePolicy = passwordPolicyBeanWrapper.getOperation();
-
- if (passcodePolicy == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the change password policy operation is incorrect");
- }
- String errorMessage = "Issue in creating a new Password policy instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.PASSCODE_POLICY);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(passcodePolicy.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(passwordPolicyBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("webclip")
- public Response setWebClip(@HeaderParam(ACCEPT) String acceptHeader,
- WebClipBeanWrapper webClipBeanWrapper) {
- if (log.isDebugEnabled()) {
- log.debug("Invoking 'webclip' operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- WebClip webClip = webClipBeanWrapper.getOperation();
-
- if (webClip == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the add webclip operation is incorrect");
- }
- String errorMessage = "Issue in creating a new web clip instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- ProfileOperation operation = new ProfileOperation();
- operation.setCode(AndroidConstants.OperationCodes.WEBCLIP);
- operation.setType(Operation.Type.PROFILE);
- operation.setPayLoad(webClip.toJSON());
-
- return AndroidAPIUtils.getOperationResponse(webClipBeanWrapper.getDeviceIDs(),
- operation, message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- @POST
- @Path("disenroll")
- public Response setDisenrollment(@HeaderParam(ACCEPT) String acceptHeader,
- DisenrollmentBeanWrapper disenrollmentBeanWrapper) {
-
- if (log.isDebugEnabled()) {
- log.debug("Invoking Android device disenrollment operation");
- }
-
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message message = new Message();
-
- try {
- Disenrollment disenrollment = disenrollmentBeanWrapper.getOperation();
-
- if (disenrollment == null) {
- if (log.isDebugEnabled()) {
- log.debug("The payload of the device disenrollment operation is incorrect");
- }
- String errorMessage = "Issue in creating a new disenrollment instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
-
- CommandOperation operation = new CommandOperation();
- operation.setCode(AndroidConstants.OperationCodes.DISENROLL);
- operation.setType(Operation.Type.COMMAND);
- operation.setEnabled(disenrollment.isEnabled());
-
- return AndroidAPIUtils.getOperationResponse(disenrollmentBeanWrapper.getDeviceIDs(), operation,
- message, responseMediaType);
-
- } catch (OperationManagementException e) {
- String errorMessage = "Issue in retrieving operation management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- } catch (DeviceManagementException e) {
- String errorMessage = "Issue in retrieving device management service instance";
- message = Message.responseMessage(errorMessage).
- responseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()).build();
- log.error(errorMessage, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message).type(
- responseMediaType).build();
- }
- }
-
- private void updateOperations(String deviceId, List extends Operation> operations)
- throws OperationManagementException, PolicyComplianceException,
- ApplicationManagementException, NotificationManagementException, DeviceManagementException {
- for (org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation : operations) {
- AndroidAPIUtils.updateOperation(deviceId, operation);
- if (operation.getStatus().equals(OPERATION_ERROR_STATUS)) {
- org.wso2.carbon.device.mgt.common.notification.mgt.Notification notification = new
- org.wso2.carbon.device.mgt.common.notification.mgt.Notification();
- DeviceIdentifier id = new DeviceIdentifier();
- id.setId(deviceId);
- id.setType(DEVICE_TYPE_ANDROID);
- String deviceName = AndroidAPIUtils.getDeviceManagementService().getDevice(id).getName();
- notification.setOperationId(operation.getId());
- notification.setStatus(org.wso2.carbon.device.mgt.common.notification.mgt.Notification.
- Status.NEW.toString());
- notification.setDeviceIdentifier(id);
- notification.setDescription("Operation " + operation.getCode() + " failed to execute on device " +
- deviceName + ". Device ID : " + deviceId);
- AndroidAPIUtils.getNotificationManagementService().addNotification(notification);
- }
- if (log.isDebugEnabled()) {
- log.debug("Updating operation '" + operation.toString() + "'");
- }
- }
- }
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/PolicyMgtService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/PolicyMgtService.java
deleted file mode 100644
index adcb2228f2..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/PolicyMgtService.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.policymgt;
-
-import io.swagger.annotations.*;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import org.wso2.carbon.mdm.services.android.util.Message;
-import org.wso2.carbon.policy.mgt.common.ProfileFeature;
-
-import javax.jws.WebService;
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-@Api(value = "PolicyMgtService", description = "Policy management related REST-API implementation.")
-@WebService
-@Produces({"application/json", "application/xml"})
-@Consumes({"application/json", "application/xml"})
-public interface PolicyMgtService {
-
- @GET
- @Path("{deviceId}")
- @ApiOperation(
- httpMethod = "GET",
- value = "Identifying whether a Policy is Enforced on an Android Device",
- notes = "When a device registers with WSO2 EMM, a policy is enforced on the device based on the policy " +
- "enforcement criteria. Using this API you are able to identify if a specific device has a policy " +
- "enforced or if no policy is enforced on the device."
- )
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Effective policy added to operation"),
- @ApiResponse(code = 204, message = "No effective policy found")
- })
- Response getEffectivePolicy(@ApiParam(name = "acceptHeader", value = "Accept Header") @HeaderParam("Accept")
- String acceptHeader,
- @ApiParam(name = "deviceId", value = "DeviceIdentifier") @PathParam("deviceId")
- String id) throws AndroidAgentException;
-
- @GET
- @Path("/features/{deviceId}")
- @ApiOperation(
- produces = MediaType.APPLICATION_JSON,
- httpMethod = "GET",
- value = "Get Effective Features",
- responseContainer = "List",
- notes = "Get already applied features for given device Identifier",
- response = ProfileFeature.class)
- @ApiResponses(value = {
- @ApiResponse(code = 200, message = "Effective Feature List"),
- @ApiResponse(code = 404, message = "Not Found"),
- @ApiResponse(code = 500, message = "Error occurred while getting the features")
- })
- Response getEffectiveFeatures(@ApiParam(name = "acceptHeader", value = "Accept Header")
- @HeaderParam("Accept") String acceptHeader,
- @ApiParam(name = "deviceId", value = "DeviceIdentifier")
- @PathParam("deviceId") String id) throws AndroidAgentException;
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/impl/PolicyMgtServiceImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/impl/PolicyMgtServiceImpl.java
deleted file mode 100644
index 33d9c1603c..0000000000
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/policymgt/impl/PolicyMgtServiceImpl.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.wso2.carbon.mdm.services.android.services.policymgt.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
-import org.wso2.carbon.mdm.services.android.exception.AndroidAgentException;
-import org.wso2.carbon.mdm.services.android.services.policymgt.PolicyMgtService;
-import org.wso2.carbon.mdm.services.android.util.AndroidAPIUtils;
-import org.wso2.carbon.mdm.services.android.util.Message;
-import org.wso2.carbon.policy.mgt.common.FeatureManagementException;
-import org.wso2.carbon.policy.mgt.common.Policy;
-import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
-import org.wso2.carbon.policy.mgt.common.ProfileFeature;
-import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-
-public class PolicyMgtServiceImpl implements PolicyMgtService {
- private static Log log = LogFactory.getLog(PolicyMgtService.class);
-
- @GET
- @Path("{deviceId}")
- public Response getEffectivePolicy(@HeaderParam("Accept") String acceptHeader,
- @PathParam("deviceId") String id) throws AndroidAgentException {
-
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- Message responseMessage = new Message();
- Policy policy;
- try {
- PolicyManagerService policyManagerService = AndroidAPIUtils.getPolicyManagerService();
- policy = policyManagerService.getEffectivePolicy(deviceIdentifier);
- if (policy == null) {
- responseMessage = Message.responseMessage("No effective policy found").
- responseCode(Response.Status.NO_CONTENT.toString()).build();
- return Response.status(Response.Status.NO_CONTENT).entity(responseMessage).type(
- responseMediaType).build();
- } else {
- responseMessage = Message.responseMessage("Effective policy added to operation").
- responseCode(Response.Status.OK.toString()).build();
- return Response.status(Response.Status.OK).entity(responseMessage).type(
- responseMediaType).build();
- }
- } catch (PolicyManagementException e) {
- String msg = "Error occurred while getting the policy.";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(
- responseMediaType).build();
- }
- }
-
- @GET
- @Path("/features/{deviceId}")
- public Response getEffectiveFeatures(@HeaderParam("Accept") String acceptHeader,
- @PathParam("deviceId") String id) throws AndroidAgentException {
- List profileFeatures;
- DeviceIdentifier deviceIdentifier = AndroidAPIUtils.convertToDeviceIdentifierObject(id);
- MediaType responseMediaType = AndroidAPIUtils.getResponseMediaType(acceptHeader);
- try {
- PolicyManagerService policyManagerService = AndroidAPIUtils.getPolicyManagerService();
- profileFeatures = policyManagerService.getEffectiveFeatures(deviceIdentifier);
- if (profileFeatures == null) {
- Response.status(Response.Status.NOT_FOUND);
- return Response.status(Response.Status.NOT_FOUND).type(
- responseMediaType).build();
- }
- } catch (FeatureManagementException e) {
- String msg = "Error occurred while getting the features.";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(
- responseMediaType).build();
- }
- return Response.status(Response.Status.OK).entity(profileFeatures).type(
- responseMediaType).build();
- }
-}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidAPIUtils.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidAPIUtils.java
index acb487d68f..c83b18a895 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidAPIUtils.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidAPIUtils.java
@@ -36,6 +36,7 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
+import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService;
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
@@ -47,6 +48,8 @@ import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManag
import org.wso2.carbon.device.mgt.core.search.mgt.impl.Utils;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.mdm.services.android.bean.DeviceState;
+import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
+import org.wso2.carbon.mdm.services.android.exception.BadRequestException;
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
@@ -114,13 +117,16 @@ public class AndroidAPIUtils {
return responseMediaType;
}
- public static Response getOperationResponse(List deviceIDs, Operation operation,
- Message message, MediaType responseMediaType)
+ public static Response getOperationResponse(List deviceIDs, Operation operation)
throws DeviceManagementException, OperationManagementException {
-
+ if (deviceIDs == null || deviceIDs.size() == 0) {
+ String errorMessage = "Device identifier list is empty";
+ log.error(errorMessage);
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
+ }
AndroidDeviceUtils deviceUtils = new AndroidDeviceUtils();
- DeviceIDHolder deviceIDHolder = deviceUtils.validateDeviceIdentifiers(deviceIDs,
- message, responseMediaType);
+ DeviceIDHolder deviceIDHolder = deviceUtils.validateDeviceIdentifiers(deviceIDs);
List validDeviceIds = deviceIDHolder.getValidDeviceIDList();
Activity activity = getDeviceManagementService().addOperation(
@@ -137,13 +143,11 @@ public class AndroidAPIUtils {
// }
// }
if (!deviceIDHolder.getErrorDeviceIdList().isEmpty()) {
- return javax.ws.rs.core.Response.status(AndroidConstants.StatusCodes.
- MULTI_STATUS_HTTP_CODE).type(
- responseMediaType).entity(deviceUtils.
- convertErrorMapIntoErrorMessage(deviceIDHolder.getErrorDeviceIdList())).build();
+ throw new BadRequestException(
+ new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(deviceUtils.
+ convertErrorMapIntoErrorMessage(deviceIDHolder.getErrorDeviceIdList())).build());
}
- return javax.ws.rs.core.Response.status(javax.ws.rs.core.Response.Status.CREATED).entity(activity).
- type(responseMediaType).build();
+ return Response.status(Response.Status.CREATED).entity(activity).build();
}
@@ -262,33 +266,39 @@ public class AndroidAPIUtils {
deviceIdentifier.setId(deviceId);
deviceIdentifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- if (AndroidConstants.OperationCodes.MONITOR.equals(operation.getCode())) {
+ if (!Operation.Status.ERROR.equals(operation.getStatus()) &&
+ AndroidConstants.OperationCodes.MONITOR.equals(operation.getCode())) {
if (log.isDebugEnabled()) {
log.info("Received compliance status from MONITOR operation ID: " + operation.getId());
}
getPolicyManagerService().checkPolicyCompliance(deviceIdentifier, operation.getPayLoad());
- } else if (AndroidConstants.OperationCodes.APPLICATION_LIST.equals(operation.getCode())) {
+ } else if (!Operation.Status.ERROR.equals(operation.getStatus()) && AndroidConstants.
+ OperationCodes.APPLICATION_LIST.equals(operation.getCode())) {
if (log.isDebugEnabled()) {
log.info("Received applications list from device '" + deviceId + "'");
}
updateApplicationList(operation, deviceIdentifier);
- } else if (AndroidConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) {
+ } else if (!Operation.Status.ERROR.equals(operation.getStatus()) && AndroidConstants.
+ OperationCodes.DEVICE_INFO.equals(operation.getCode())) {
try {
Device device = new Gson().fromJson(operation.getOperationResponse(), Device.class);
org.wso2.carbon.device.mgt.common.device.details.DeviceInfo deviceInfo = convertDeviceToInfo(device);
- deviceInfo.setDeviceIdentifier(deviceIdentifier);
- updateDeviceInfo(deviceInfo);
+ updateDeviceInfo(deviceIdentifier, deviceInfo);
} catch (DeviceDetailsMgtException e) {
throw new OperationManagementException("Error occurred while updating the device information.", e);
}
- } else if (AndroidConstants.OperationCodes.DEVICE_LOCATION.equals(operation.getCode())) {
+ } else if (!Operation.Status.ERROR.equals(operation.getStatus()) &&
+ AndroidConstants.OperationCodes.DEVICE_LOCATION.equals(operation.getCode())) {
try {
DeviceLocation location = new Gson().fromJson(operation.getOperationResponse(), DeviceLocation.class);
- if (location != null) {
+ // reason for checking "location.getLatitude() != null" because when device fails to provide
+ // device location and send status instead, above Gson converter create new location object
+ // with null attributes
+ if (location != null && location.getLatitude() != null) {
location.setDeviceIdentifier(deviceIdentifier);
updateDeviceLocation(location);
}
@@ -296,7 +306,6 @@ public class AndroidAPIUtils {
throw new OperationManagementException("Error occurred while updating the device location.", e);
}
}
-
getDeviceManagementService().updateOperation(deviceIdentifier, operation);
}
@@ -311,31 +320,35 @@ public class AndroidAPIUtils {
private static void updateApplicationList(Operation operation, DeviceIdentifier deviceIdentifier)
throws ApplicationManagementException {
// Parsing json string to get applications list.
- JsonElement jsonElement = new JsonParser().parse(operation.getOperationResponse());
- JsonArray jsonArray = jsonElement.getAsJsonArray();
- Application app;
- List applications = new ArrayList(jsonArray.size());
- for (JsonElement element : jsonArray) {
- app = new Application();
- app.setName(element.getAsJsonObject().
- get(AndroidConstants.ApplicationProperties.NAME).getAsString());
- app.setApplicationIdentifier(element.getAsJsonObject().
- get(AndroidConstants.ApplicationProperties.IDENTIFIER).getAsString());
- app.setPlatform(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
- if (element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.USS) != null) {
- app.setMemoryUsage(element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.USS).getAsInt());
- }
- if (element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.VERSION) != null) {
- app.setVersion(element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.VERSION).getAsString());
+ if (operation.getOperationResponse() != null) {
+ JsonElement jsonElement = new JsonParser().parse(operation.getOperationResponse());
+ JsonArray jsonArray = jsonElement.getAsJsonArray();
+ Application app;
+ List applications = new ArrayList(jsonArray.size());
+ for (JsonElement element : jsonArray) {
+ app = new Application();
+ app.setName(element.getAsJsonObject().
+ get(AndroidConstants.ApplicationProperties.NAME).getAsString());
+ app.setApplicationIdentifier(element.getAsJsonObject().
+ get(AndroidConstants.ApplicationProperties.IDENTIFIER).getAsString());
+ app.setPlatform(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
+ if (element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.USS) != null) {
+ app.setMemoryUsage(element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.USS).getAsInt());
+ }
+ if (element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.VERSION) != null) {
+ app.setVersion(element.getAsJsonObject().get(AndroidConstants.ApplicationProperties.VERSION).getAsString());
+ }
+ applications.add(app);
}
- applications.add(app);
+ getApplicationManagerService().updateApplicationListInstalledInDevice(deviceIdentifier, applications);
+ } else {
+ log.error("Operation Response is null.");
}
- getApplicationManagerService().updateApplicationListInstalledInDevice(deviceIdentifier, applications);
+
}
private static void updateDeviceLocation(DeviceLocation deviceLocation) throws DeviceDetailsMgtException {
-
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceInformationManager informationManager =
(DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null);
@@ -344,14 +357,14 @@ public class AndroidAPIUtils {
}
- private static void updateDeviceInfo(org.wso2.carbon.device.mgt.common.device.details.DeviceInfo deviceInfo)
+ private static void updateDeviceInfo(DeviceIdentifier deviceId, DeviceInfo deviceInfo)
throws DeviceDetailsMgtException {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceInformationManager informationManager =
(DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null);
- informationManager.addDeviceInfo(deviceInfo);
+ informationManager.addDeviceInfo(deviceId, deviceInfo);
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidConstants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidConstants.java
index 8ba454da3d..7aad2f7b1f 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidConstants.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidConstants.java
@@ -23,101 +23,111 @@ package org.wso2.carbon.mdm.services.android.util;
*/
public final class AndroidConstants {
- public final class DeviceProperties{
- private DeviceProperties() {
- throw new AssertionError();
- }
- public static final String PROPERTY_USER_KEY = "username";
- public static final String PROPERTY_DEVICE_KEY = "device";
- }
-
- public final class DeviceFeatures{
- private DeviceFeatures() {
- throw new AssertionError();
- }
- }
-
- public final class DeviceConstants{
- private DeviceConstants() {
- throw new AssertionError();
- }
- public static final String DEVICE_MAC_KEY = "mac";
- public static final String DEVICE_DESCRIPTION_KEY = "description";
- public static final String DEVICE_OWNERSHIP_KEY = "ownership";
- public static final String DEVICE_PROPERTIES_KEY = "properties";
- public static final String DEVICE_FEATURES_KEY = "features";
- public static final String DEVICE_DATA = "data";
- public static final String DEVICE_ID_NOT_FOUND = "Device Id not found for device found at %s";
- public static final String DEVICE_ID_SERVICE_NOT_FOUND =
- "Issue in retrieving device management service instance for device found at %s";
- }
-
- public final class Messages{
- private Messages(){
- throw new AssertionError();
- }
- public static final String DEVICE_MANAGER_SERVICE_NOT_AVAILABLE =
- "Device Manager service not available";
- }
-
- public final class OperationCodes{
- private OperationCodes(){
- throw new AssertionError();
- }
- public static final String DEVICE_LOCK = "DEVICE_LOCK";
- public static final String DEVICE_UNLOCK = "DEVICE_UNLOCK";
- public static final String DEVICE_LOCATION = "DEVICE_LOCATION";
- public static final String WIFI = "WIFI";
- public static final String CAMERA = "CAMERA";
- public static final String DEVICE_MUTE = "DEVICE_MUTE";
- public static final String PASSCODE_POLICY = "PASSCODE_POLICY";
- public static final String DEVICE_INFO = "DEVICE_INFO";
- public static final String ENTERPRISE_WIPE = "ENTERPRISE_WIPE";
- public static final String CLEAR_PASSWORD = "CLEAR_PASSWORD";
- public static final String WIPE_DATA = "WIPE_DATA";
- public static final String APPLICATION_LIST = "APPLICATION_LIST";
- public static final String CHANGE_LOCK_CODE = "CHANGE_LOCK_CODE";
- public static final String INSTALL_APPLICATION = "INSTALL_APPLICATION";
- public static final String UPDATE_APPLICATION = "UPDATE_APPLICATION";
- public static final String UNINSTALL_APPLICATION = "UNINSTALL_APPLICATION";
- public static final String BLACKLIST_APPLICATIONS = "BLACKLIST_APPLICATIONS";
- public static final String ENCRYPT_STORAGE = "ENCRYPT_STORAGE";
- public static final String DEVICE_RING = "DEVICE_RING";
- public static final String DEVICE_REBOOT = "REBOOT";
- public static final String UPGRADE_FIRMWARE = "UPGRADE_FIRMWARE";
- public static final String NOTIFICATION = "NOTIFICATION";
- public static final String WEBCLIP = "WEBCLIP";
- public static final String DISENROLL = "DISENROLL";
- public static final String MONITOR = "MONITOR";
- public static final String VPN = "VPN";
- public static final String APP_RESTRICTION = "APP-RESTRICTION";
- public static final String WORK_PROFILE = "WORK_PROFILE";
+ public static final String DEVICE_TYPE_ANDROID = "android";
+
+ public final class DeviceProperties {
+ private DeviceProperties() {
+ throw new AssertionError();
+ }
+
+ public static final String PROPERTY_USER_KEY = "username";
+ public static final String PROPERTY_DEVICE_KEY = "device";
+ }
+
+ public final class DeviceFeatures {
+ private DeviceFeatures() {
+ throw new AssertionError();
+ }
+ }
+
+ public final class DeviceConstants {
+ private DeviceConstants() {
+ throw new AssertionError();
+ }
+
+ public static final String DEVICE_MAC_KEY = "mac";
+ public static final String DEVICE_DESCRIPTION_KEY = "description";
+ public static final String DEVICE_OWNERSHIP_KEY = "ownership";
+ public static final String DEVICE_PROPERTIES_KEY = "properties";
+ public static final String DEVICE_FEATURES_KEY = "features";
+ public static final String DEVICE_DATA = "data";
+ public static final String DEVICE_ID_NOT_FOUND = "Device not found for device id: %s";
+ public static final String DEVICE_ID_SERVICE_NOT_FOUND =
+ "Issue in retrieving device management service instance for device found at %s";
+ }
+
+ public final class Messages {
+ private Messages() {
+ throw new AssertionError();
+ }
+
+ public static final String DEVICE_MANAGER_SERVICE_NOT_AVAILABLE =
+ "Device Manager service not available";
}
- public final class StatusCodes{
- private StatusCodes(){
- throw new AssertionError();
- }
- public static final int MULTI_STATUS_HTTP_CODE = 207;
- }
-
- public final class TenantConfigProperties{
- private TenantConfigProperties(){
- throw new AssertionError();
- }
- public static final String LICENSE_KEY = "androidEula";
- public static final String LANGUAGE_US = "en_US";
- public static final String CONTENT_TYPE_TEXT = "text";
- }
+ public final class OperationCodes {
+ private OperationCodes() {
+ throw new AssertionError();
+ }
+
+ public static final String DEVICE_LOCK = "DEVICE_LOCK";
+ public static final String DEVICE_UNLOCK = "DEVICE_UNLOCK";
+ public static final String DEVICE_LOCATION = "DEVICE_LOCATION";
+ public static final String WIFI = "WIFI";
+ public static final String CAMERA = "CAMERA";
+ public static final String DEVICE_MUTE = "DEVICE_MUTE";
+ public static final String PASSCODE_POLICY = "PASSCODE_POLICY";
+ public static final String DEVICE_INFO = "DEVICE_INFO";
+ public static final String ENTERPRISE_WIPE = "ENTERPRISE_WIPE";
+ public static final String CLEAR_PASSWORD = "CLEAR_PASSWORD";
+ public static final String WIPE_DATA = "WIPE_DATA";
+ public static final String APPLICATION_LIST = "APPLICATION_LIST";
+ public static final String CHANGE_LOCK_CODE = "CHANGE_LOCK_CODE";
+ public static final String INSTALL_APPLICATION = "INSTALL_APPLICATION";
+ public static final String UPDATE_APPLICATION = "UPDATE_APPLICATION";
+ public static final String UNINSTALL_APPLICATION = "UNINSTALL_APPLICATION";
+ public static final String BLACKLIST_APPLICATIONS = "BLACKLIST_APPLICATIONS";
+ public static final String ENCRYPT_STORAGE = "ENCRYPT_STORAGE";
+ public static final String DEVICE_RING = "DEVICE_RING";
+ public static final String DEVICE_REBOOT = "REBOOT";
+ public static final String UPGRADE_FIRMWARE = "UPGRADE_FIRMWARE";
+ public static final String NOTIFICATION = "NOTIFICATION";
+ public static final String WEBCLIP = "WEBCLIP";
+ public static final String DISENROLL = "DISENROLL";
+ public static final String MONITOR = "MONITOR";
+ public static final String VPN = "VPN";
+ public static final String APP_RESTRICTION = "APP-RESTRICTION";
+ public static final String WORK_PROFILE = "WORK_PROFILE";
+ }
+
+ public final class StatusCodes {
+ private StatusCodes() {
+ throw new AssertionError();
+ }
+
+ public static final int MULTI_STATUS_HTTP_CODE = 207;
+ }
+
+ public final class TenantConfigProperties {
+ private TenantConfigProperties() {
+ throw new AssertionError();
+ }
+
+ public static final String LICENSE_KEY = "androidEula";
+ public static final String LANGUAGE_US = "en_US";
+ public static final String CONTENT_TYPE_TEXT = "text";
+ }
public final class ApplicationProperties {
- private ApplicationProperties(){
+ private ApplicationProperties() {
throw new AssertionError();
}
+
public static final String NAME = "name";
public static final String IDENTIFIER = "package";
public static final String USS = "USS";
public static final String VERSION = "version";
public static final String ICON = "icon";
}
+
}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidDeviceUtils.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidDeviceUtils.java
index f8733cf10c..9c4c660a73 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidDeviceUtils.java
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/AndroidDeviceUtils.java
@@ -20,9 +20,6 @@ package org.wso2.carbon.mdm.services.android.util;
import org.apache.commons.lang.StringUtils;
import org.wso2.carbon.device.mgt.common.*;
-import org.wso2.carbon.mdm.services.android.exception.BadRequestException;
-
-import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
@@ -33,13 +30,7 @@ public class AndroidDeviceUtils {
private static final String COMMA_SEPARATION_PATTERN = ", ";
- public DeviceIDHolder validateDeviceIdentifiers(List deviceIDs,
- Message message, MediaType responseMediaType) {
-
- if (deviceIDs == null || deviceIDs.isEmpty()) {
- message.setResponseMessage("Device identifier list is empty");
- throw new BadRequestException(message, responseMediaType);
- }
+ public DeviceIDHolder validateDeviceIdentifiers(List deviceIDs) {
List errorDeviceIdList = new ArrayList();
List validDeviceIDList = new ArrayList();
@@ -64,8 +55,8 @@ public class AndroidDeviceUtils {
if (isValidDeviceIdentifier(deviceIdentifier)) {
validDeviceIDList.add(deviceIdentifier);
} else {
- errorDeviceIdList.add(String.format(AndroidConstants.DeviceConstants.DEVICE_ID_NOT_FOUND,
- deviceIDCounter));
+ errorDeviceIdList.add(String.format(AndroidConstants.DeviceConstants.
+ DEVICE_ID_NOT_FOUND, deviceID));
}
} catch (DeviceManagementException e) {
errorDeviceIdList.add(String.format(AndroidConstants.DeviceConstants.DEVICE_ID_SERVICE_NOT_FOUND,
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/ApiOriginFilter.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/ApiOriginFilter.java
new file mode 100644
index 0000000000..455d582bb2
--- /dev/null
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/util/ApiOriginFilter.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.wso2.carbon.mdm.services.android.util;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiOriginFilter implements Filter {
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ HttpServletResponse res = (HttpServletResponse) response;
+ res.addHeader("Access-Control-Allow-Origin", "*");
+ res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
+ res.addHeader("Access-Control-Allow-Headers", "Content-Type");
+ chain.doFilter(request, response);
+ }
+
+ public void destroy() {
+ //do nothing
+ }
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ //do nothing
+ }
+
+}
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/META-INF/permissions.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/META-INF/permissions.xml
index 1fd0c7c660..89527545ae 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/META-INF/permissions.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/META-INF/permissions.xml
@@ -30,121 +30,116 @@
-
- Get Pending Operation
- /device-mgt/android/operations/poll
- /operation/*
- PUT
- emm_android_agent
-
+
Lock
- /device-mgt/android/operations/lock
- /operation/lock
+ /device-mgt/admin/operations/android/lock
+ /admin/devices/lock-devices
POST
emm_admin,emm_user
Unlock
- /device-mgt/android/operations/unlock
- /operation/unlock
+ /device-mgt/admin/operations/android/unlock
+ /admin/devices/unlock-devices
POST
emm_admin,emm_user
Mute
- /device-mgt/android/operations/mute
- /operation/mute
+ /device-mgt/admin/operations/android/mute
+ /admin/devices/mute
POST
emm_admin,emm_user
Location
- /device-mgt/android/operations/location
- /operation/location
+ /device-mgt/admin/operations/android/location
+ /admin/devices/location
POST
emm_admin,emm_user
Clear Passcode
- /operation/clear-password/
+ /device-mgt/admin/operations/android/clear-password
+ /admin/devices/clear-password
POST
emm_admin
Camera
- /device-mgt/android/operations/camera
- /operation/camera
+ /device-mgt/admin/operations/android/camera
+ /admin/devices/control-camera
POST
emm_admin,emm_user
Device Info
- /device-mgt/android/operations/device-info
- /operation/device-info
+ /device-mgt/admin/operations/android/device-info
+ /admin/devices/info
POST
emm_admin,emm_user
Enterprise Wipe
- /device-mgt/android/operations/enterprise-wipe
- /operation/enterprise-wipe
+ /device-mgt/admin/operations/android/enterprise-wipe
+ /admin/devices/enterprise-wipe
POST
emm_admin
Wipe Data
- /device-mgt/android/operations/wipe-data
- /operation/wipe-data
+ /device-mgt/admin/operations/android/wipe-data
+ /admin/devices/wipe
POST
emm_admin
Application List
- /device-mgt/android/operations/application-list
- /operation/application-list
+ /device-mgt/admin/operations/android/application-list
+ /admin/devices/applications
POST
emm_admin,emm_user
Ring
- /device-mgt/android/operations/ring-device
- /operation/ring-device
+ /device-mgt/admin/operations/android/ring-device
+ /admin/devices/ring
POST
emm_admin,emm_user
Reboot
- /device-mgt/android/operations/reboot-device
- /operation/reboot-device
+ /device-mgt/admin/operations/android/reboot-device
+ /admin/devices/reboot
POST
emm_admin,emm_user
Upgrade Firmware
- /device-mgt/android/operations/upgrade-firmware
- /operation/upgrade-firmware
+ /device-mgt/admin/operations/android/upgrade-firmware
+ /admin/devices/upgrade-firmware
POST
- emm_admin,emm_user
+ emm_admin
Configure VPN
- /device-mgt/android/operations/vpn
- /operation/vpn
+ /device-mgt/admin/operations/android/vpn
+ /admin/devices/configure-vpn
POST
emm_admin,emm_user
@@ -152,86 +147,86 @@
Install Application
/device-mgt/android/operations/install-application
- /operation/install-application
+ /admin/devices/install-application
POST
emm_admin,emm_user
Update Application
- /device-mgt/android/operations/update-application
- /operation/update-application
+ /device-mgt/admin/operations/android/install-application
+ /admin/devices/update-application
POST
emm_admin,emm_user
Uninstall Application
- /device-mgt/android/operations/uninstall-application
- /operation/uninstall-application
+ /device-mgt/admin/operations/android/uninstall-application
+ /admin/devices/uninstall-application
POST
emm_admin,emm_user
Blacklist Applications
- /device-mgt/android/operations/blacklist-applications
- /operation/blacklist-applications
+ /device-mgt/admin/operations/android/blacklist-applications
+ /admin/devices/blacklist-applications
POST
emm_admin
Notification
- /device-mgt/android/operations/notification
- /operation/notification
+ /device-mgt/admin/operations/android/notification
+ /admin/devices/send-notification
POST
emm_admin,emm_user
Wifi
- /device-mgt/android/operations/wifi
- /operation/wifi
+ /device-mgt/admin/operations/android/wifi
+ /admin/devices/configure-wifi
POST
emm_admin
Encryption
- /device-mgt/android/operations/encrypt
- /operation/encrypt
+ /device-mgt/admin/operations/android/encrypt
+ /admin/devices/encrypt-storage
POST
emm_admin
Change lock code
- /device-mgt/android/operations/change-lock-code
- /operation/change-lock-code
+ /device-mgt/admin/operations/android/change-lock-code
+ /admin/devices/change-lock-code
POST
emm_admin
Password Policy
- /device-mgt/android/operations/password-policy
- /operation/password-policy
+ /device-mgt/admin/operations/android/password-policy
+ /admin/devices/set-password-policy
POST
emm_admin
Webclip
- /device-mgt/android/operations/webclip
- /operation/webclip
+ /device-mgt/admin/operations/android/webclip
+ /admin/devices/set-webclip
POST
emm_admin
Disenroll
- /device-mgt/android/operations/disenroll
+ /device-mgt/admin/operations/android/disenroll
/operation/disenroll
POST
emm_android_agent
@@ -240,7 +235,7 @@
View devices
- /device-mgt/android/devices/list
+ /device-mgt/admin/devices/view
/device
GET
emm_admin
@@ -248,7 +243,7 @@
View device
- /device-mgt/android/devices/view
+ /device-mgt/admin/devices/view
/device/*
GET
emm_admin,emm_user
@@ -256,7 +251,7 @@
Update device
- /device-mgt/android/devices/update
+ /device-mgt/admin/devices/update
/device/*
PUT
emm_admin,emm_user
@@ -264,7 +259,7 @@
Update application list
- /device-mgt/android/devices/update-app
+ /device-mgt/admin/operations/android/update-applist
/device/appList/*
POST
emm_admin
@@ -272,8 +267,8 @@
View license
- /device-mgt/android/license/view
- /device/license
+ /device-mgt/user/enroll/android
+ /configuration/license
GET
emm_android_agent
@@ -281,20 +276,52 @@
Enroll device
- /device-mgt/android/devices/enroll
- /enrollment
+ /device-mgt/user/enroll/android
+ /devices
POST
emm_android_agent
- Get Enrollment Status
- /device-mgt/android/devices/enroll
- /enrollment/*
+ Devices related Operations
+ /device-mgt/user/enroll/android
+ /devices/*
GET
emm_android_agent
+
+ Device is enrolled
+ /device-mgt/user/enroll/android
+ /devices/*/status
+ GET
+ emm_android_agent
+
+
+
+ Devices related Operations
+ /device-mgt/user/enroll/android
+ /devices/*/pending-operations
+ PUT
+ emm_android_agent
+
+
+
+ Modify devices
+ /device-mgt/user/enroll/android
+ /devices/*
+ PUT
+ emm_android_agent
+
+
+
+ Delete devices
+ /device-mgt/user/enroll/android
+ /devices/*
+ DELETE
+ emm_android_agent
+
+
Update Enrollment
/device-mgt/android/devices/enroll
@@ -314,7 +341,7 @@
View Policies
- /device-mgt/android/policies/view
+ /device-mgt/user/enroll/android
/policy/*
GET
emm_admin
@@ -322,7 +349,7 @@
View Policy Features
- /device-mgt/android/policies/view
+ /device-mgt/user/enroll/android
/policy/features/*
GET
emm_admin
@@ -331,7 +358,7 @@
View Tenant configuration
- /device-mgt/android/tenant/configuration
+ /device-mgt/admin/platform-configs/view
/configuration
GET
emm_admin
@@ -339,7 +366,7 @@
Add Tenant configuration
- /device-mgt/android/tenant/configuration
+ /device-mgt/admin/platform-configs/add
/configuration
POST
emm_admin
@@ -347,7 +374,7 @@
Update Tenant configuration
- /device-mgt/android/tenant/configuration
+ /device-mgt/admin/platform-configs/modify
/configuration
PUT
emm_admin
@@ -355,28 +382,14 @@
Event Addition
/device-mgt/android/events/add
- /events
+ /events/publish
POST
emm_user,emm_admin
Event Retrieve
/device-mgt/android/events/view
- /events/*
- GET
- emm_admin
-
-
- Event Retrieve
- /device-mgt/android/events/date
- /events/*/date
- GET
- emm_admin
-
-
- Event Retrieve
- /device-mgt/android/events/type
- /events/*/type/*
+ /events
GET
emm_admin
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/cxf-servlet.xml
index 89e199a7bd..cc020be214 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/cxf-servlet.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/cxf-servlet.xml
@@ -23,67 +23,41 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/web.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/web.xml
index ad42bfafd6..48eeb393eb 100644
--- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/web.xml
+++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/webapp/WEB-INF/web.xml
@@ -28,6 +28,11 @@
org.apache.cxf.transport.servlet.CXFServlet
+
+
+ swagger.security.filter
+ ApiAuthorizationFilterImpl
+
1
@@ -74,4 +79,13 @@
+
+ ApiOriginFilter
+ org.wso2.carbon.mdm.services.android.util.ApiOriginFilter
+
+
+ ApiOriginFilter
+ /*
+
+
diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/mdm/mobileservices/windows/operations/util/OperationUtils.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/mdm/mobileservices/windows/operations/util/OperationUtils.java
index f9140826e3..4ff0475afc 100644
--- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/mdm/mobileservices/windows/operations/util/OperationUtils.java
+++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/mdm/mobileservices/windows/operations/util/OperationUtils.java
@@ -87,10 +87,9 @@ public class OperationUtils {
Notification lockResetNotification = new Notification();
lockResetNotification.setOperationId(status.getCommandReference());
lockResetNotification.setStatus(String.valueOf(Notification.Status.NEW));
- lockResetNotification.setDeviceIdentifier(deviceIdentifier);
lockResetNotification.setDescription(
Constants.SyncMLResponseCodes.LOCKRESET_NOTIFICATION);
- nmService.addNotification(lockResetNotification);
+ nmService.addNotification(deviceIdentifier, lockResetNotification);
} catch (NotificationManagementException e) {
throw new WindowsOperationException("Failure occurred in getting notification service", e);
}
@@ -156,10 +155,9 @@ public class OperationUtils {
Notification lockResetNotification = new Notification();
lockResetNotification.setOperationId(status.getCommandReference());
lockResetNotification.setStatus(String.valueOf(Notification.Status.NEW));
- lockResetNotification.setDeviceIdentifier(deviceIdentifier);
lockResetNotification.setDescription(Constants.SyncMLResponseCodes.LOCKRESET_NOTIFICATION);
- nmService.addNotification(lockResetNotification);
+ nmService.addNotification(deviceIdentifier, lockResetNotification);
} catch (NotificationManagementException e) {
String msg = "Failure occurred in getting notification service";
log.error(msg, e);
@@ -404,10 +402,9 @@ public class OperationUtils {
Notification notification = new Notification();
notification.setDescription("Auto generated DevicePin : " + pinValue);
notification.setOperationId(result.getCommandReference());
- notification.setDeviceIdentifier(deviceIdentifier);
notification.setStatus(String.valueOf(Notification.Status.NEW));
try {
- nmService.addNotification(notification);
+ nmService.addNotification(deviceIdentifier, notification);
} catch (NotificationManagementException e) {
String msg = "Failure Occurred in getting notification service.";
log.error(msg, e);
diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml
index 6efb424d36..581ca9d104 100644
--- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml
+++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml
@@ -118,7 +118,7 @@
true
${project.build.directory}/maven-shared-archive-resources/webapps/
- mdm-android-agent.war
+ api#device-mgt#android#v1.0.war
diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf
index 349c097852..3b9d91aec8 100644
--- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf
+++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf
@@ -1,5 +1,5 @@
instructions.configure = \
-org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/webapps/mdm-android-agent.war,target:${installFolder}/../../deployment/server/webapps/mdm-android-agent.war,overwrite:true);\
+org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/webapps/api#device-mgt#android#v1.0.war,target:${installFolder}/../../deployment/server/webapps/api#device-mgt#android#v1.0.war,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/jaggeryapps/,target:${installFolder}/../../deployment/server/jaggeryapps/,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/conf/mobile-config.xml,target:${installFolder}/../../conf/mobile-config.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/dbscripts/plugins/,target:${installFolder}/../../../dbscripts/cdm/plugins/android,overwrite:true);\
diff --git a/pom.xml b/pom.xml
index 4589508674..df3853bec8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,28 @@
swagger-annotations
${swagger.version}
+
+ io.swagger
+ swagger-core
+ ${swagger.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ io.swagger
+ swagger-jaxrs
+ ${swagger.version}
+
+
+ javax.servlet
+ servlet-api
+ ${servlet-api.version}
+ provided
+
@@ -1180,6 +1202,8 @@
github-scm
+
+ 2.5