diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
index 07ef52fde5..0d53ffbc05 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
@@ -207,6 +207,24 @@
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/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/ApiOriginFilter.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/ApiOriginFilter.java
new file mode 100644
index 0000000000..9ba3b5b97b
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/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.device.mgt.jaxrs;
+
+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/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java
deleted file mode 100644
index e28de808a0..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java
+++ /dev/null
@@ -1,34 +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.device.mgt.jaxrs.api;
-
-import io.swagger.annotations.Api;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-
-/**
- * Authentication related REST-API interface.
- */
-@Api(value = "Authentication")
-@Produces({ "application/json", "application/xml" })
-@Consumes({ "application/json", "application/xml" })
-public interface Authentication {
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Certificate.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Certificate.java
index af03e226aa..c7f1e4ff04 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Certificate.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Certificate.java
@@ -18,15 +18,10 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse;
import org.wso2.carbon.device.mgt.common.PaginationResult;
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import org.wso2.carbon.device.mgt.jaxrs.beans.EnrollmentCertificate;
import javax.ws.rs.*;
@@ -39,6 +34,7 @@ import javax.ws.rs.core.Response;
@Api(value = "Certificate", description = "Certificate related tasks such as saving certificates, " +
"can be done through this API")
@SuppressWarnings("NonJaxWsWebServices")
+@Path("/certificates")
@Produces({ "application/json", "application/xml" })
@Consumes({ "application/json", "application/xml" })
public interface Certificate {
@@ -83,7 +79,7 @@ public interface Certificate {
notes = "Get the client side SSL certificate details",
response = CertificateResponse.class)
@ApiResponses(value = {
- @ApiResponse(code = 200, message = "OK"),
+ @ApiResponse(code = 200, message = "OK", response = CertificateResponse.class),
@ApiResponse(code = 400, message = "Notification status updated successfully"),
@ApiResponse(code = 500, message = "Error occurred while converting PEM file to X509Certificate")
})
@@ -112,7 +108,7 @@ public interface Certificate {
+ "page therefore the details are paginated",
response = PaginationResult.class)
@ApiResponses(value = {
- @ApiResponse(code = 200, message = "OK"),
+ @ApiResponse(code = 200, message = "OK", response = PaginationResult.class),
@ApiResponse(code = 400, message = "Invalid start index"),
@ApiResponse(code = 400, message = "Invalid length value"),
@ApiResponse(code = 500, message = "Error occurred while fetching all certificates")
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java
index 7c5db4f189..5ae44a5162 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java
@@ -18,13 +18,8 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@@ -34,9 +29,9 @@ import javax.ws.rs.core.Response;
* General Tenant Configuration REST-API implementation.
* All end points support JSON, XMl with content negotiation.
*/
+@Path("/configuration")
@Api(value = "Configuration", description = "General Tenant Configuration management capabilities are exposed " +
- "through " +
- "this API")
+ "through this API")
@SuppressWarnings("NonJaxWsWebServices")
@Produces({ "application/json", "application/xml" })
@Consumes({ "application/json", "application/xml" })
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java
index 0dc381d335..569df1cac1 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java
@@ -29,7 +29,7 @@ import javax.ws.rs.core.Response;
/**
* Device related operations such as get all the available devices, etc.
*/
-
+@Path("/devices")
@Api(value = "Device", description = "Device related operations such as get all the available devices, etc.")
@SuppressWarnings("NonJaxWsWebServices")
public interface Device {
@@ -41,6 +41,7 @@ public interface Device {
* @return Device List
*/
@GET
+ @Path("devices")
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
@@ -95,7 +96,7 @@ public interface Device {
*/
@GET
@Path("user/{user}")
- Response getDevice(@PathParam("user") String user);
+ Response getDeviceOfUser(@PathParam("user") String user);
/**
* Fetch device count of a given user.
@@ -105,7 +106,7 @@ public interface Device {
*/
@GET
@Path("user/{user}/count")
- Response getDeviceCount(@PathParam("user") String user);
+ Response getDeviceCountOfUser(@PathParam("user") String user);
/**
* Get current device count
@@ -118,7 +119,7 @@ public interface Device {
httpMethod = "GET",
value = "Getting the Device Count",
notes = "Get the number of devices that are registered with WSO2 EMM.",
- response = Integer.class)
+ response = int.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Device count"),
@ApiResponse(code = 500, message = "Error occurred while fetching the device count")
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java
index 40bd74aa62..0d20230610 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java
@@ -18,14 +18,9 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
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.jaxrs.beans.UserCredentialWrapper;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -36,7 +31,7 @@ import javax.ws.rs.core.Response;
/**
* Device information related operations.
*/
-
+@Path("/information")
@Api(value = "DeviceInformation", description = "Device information related operations can be found here.")
@SuppressWarnings("NonJaxWsWebServices")
public interface DeviceInformation {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java
index 41f1747b34..7941ac81c8 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java
@@ -42,8 +42,9 @@ import javax.ws.rs.core.Response;
*/
@Api(value = "DeviceNotification", description = "Device notification related operations can be found here.")
@SuppressWarnings("NonJaxWsWebServices")
+@Path("/notifications")
@Produces({"application/json", "application/xml"})
-@Consumes({ "application/json", "application/xml" })
+@Consumes({"application/json", "application/xml"})
public interface DeviceNotification {
@GET
@@ -57,9 +58,10 @@ public interface DeviceNotification {
response = Notification.class,
responseContainer = "List")
@ApiResponses(value = {
- @ApiResponse(code = 200, message = "List of Notifications"),
+ @ApiResponse(code = 200, message = "List of Notifications", response = Notification.class,
+ responseContainer = "List"),
@ApiResponse(code = 500, message = "Error occurred while retrieving the notification list")
- })
+ })
Response getNotifications();
@GET
@@ -74,12 +76,13 @@ public interface DeviceNotification {
response = Notification.class,
responseContainer = "List")
@ApiResponses(value = {
- @ApiResponse(code = 200, message = "List of Notifications"),
+ @ApiResponse(code = 200, message = "List of Notifications", response = Notification.class,
+ responseContainer = "List"),
@ApiResponse(code = 500, message = "Error occurred while retrieving the notification list")
- })
+ })
Response getNotificationsByStatus(@ApiParam(name = "status", value = "Provide the notification status as"
- + " the value for {status}", required = true)
- @PathParam("status") Notification.Status status);
+ + " the value for {status}", required = true)
+ @PathParam("status") Notification.Status status);
@PUT
@Path("{id}/{status}")
@@ -93,12 +96,12 @@ public interface DeviceNotification {
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Notification status updated successfully"),
@ApiResponse(code = 500, message = "Error occurred while updating notification status")
- })
- Response updateNotificationStatus( @ApiParam(name = "id", value = "Provide the ID of the notification"
- + " you wish you update", required = true) @PathParam("id") int id,
- @ApiParam(name = "status", value = "Provide the notification status as"
- + " the value", required = true) @PathParam("status")
- Notification.Status status);
+ })
+ Response updateNotificationStatus(@ApiParam(name = "id", value = "Provide the ID of the notification"
+ + " you wish you update", required = true) @PathParam("id") int id,
+ @ApiParam(name = "status", value = "Provide the notification status as"
+ + " the value", required = true) @PathParam("status")
+ Notification.Status status);
@POST
@ApiOperation(
@@ -110,7 +113,7 @@ public interface DeviceNotification {
@ApiResponses(value = {
@ApiResponse(code = 201, message = "NNotification has added successfully"),
@ApiResponse(code = 500, message = "Error occurred while updating notification status")
- })
+ })
Response addNotification(Notification notification);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java
index 5760813e07..38ea427db5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java
@@ -18,23 +18,19 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import org.wso2.carbon.device.mgt.common.PaginationResult;
+import io.swagger.annotations.*;
import org.wso2.carbon.device.mgt.common.device.details.DeviceWrapper;
import org.wso2.carbon.device.mgt.common.search.SearchContext;
import javax.ws.rs.GET;
+import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* Device search related operations such as getting device information.
*/
-
+@Path("/search")
@Api(value = "DeviceSearch", description = "Device searching related operations can be found here.")
@SuppressWarnings("NonJaxWsWebServices")
public interface DeviceSearch {
@@ -48,9 +44,9 @@ public interface DeviceSearch {
response = DeviceWrapper.class,
responseContainer = "List")
@ApiResponses(value = {
- @ApiResponse(code = 200, message = "OK"),
+ @ApiResponse(code = 200, message = "OK", response = DeviceWrapper.class, responseContainer = "List"),
@ApiResponse(code = 500, message = "Error occurred while searching the device information")
})
- Response getDeviceInfo(@ApiParam(name = "enrollmentCertificates", value = "List of search conditions",
+ Response getFilteredDeviceInfo(@ApiParam(name = "enrollmentCertificates", value = "List of search conditions",
required = true) SearchContext searchContext);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java
index 5051c153fc..5d85d40d4e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java
@@ -34,6 +34,7 @@ import javax.ws.rs.core.Response;
@Api(value = "Feature", description = "Feature management related operations can be found here.")
@SuppressWarnings("NonJaxWsWebServices")
+@Path("/features")
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public interface Feature {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java
index fe07dce2e3..f8884e818c 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.Response;
* This class represents license related operations.
*/
@Api(value = "License")
+@Path("/license")
@SuppressWarnings("NonJaxWsWebServices")
public interface License {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java
index bb54200f16..baefe95816 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java
@@ -19,25 +19,19 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
import io.swagger.annotations.*;
-import org.wso2.carbon.device.mgt.common.PaginationResult;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
import org.wso2.carbon.device.mgt.jaxrs.api.context.DeviceOperationContext;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
*
*/
-
+@Path("/operations")
@Api(value = "Operation", description = "Operation management related operations can be found here.")
public interface Operation {
@@ -51,7 +45,7 @@ public interface Operation {
consumes = MediaType.APPLICATION_JSON + ", " + MediaType.APPLICATION_XML,
produces = MediaType.APPLICATION_JSON + ", " + MediaType.APPLICATION_XML,
httpMethod = "GET",
- value = "Getting Pagination Details for Operations on a Device.",
+ value = "Getting Paginated Details for Operations on a Device.",
notes = "You will carry out many operations on a device. In a situation where you wish to view the all" +
" the operations carried out on a device it is not feasible to show all the details on one page" +
" therefore the details are paginated." +
@@ -59,23 +53,23 @@ public interface Operation {
"carried out, the details of the 21 operations will be broken down into 3 pages with 10 operation" +
" details per page.",
response = org.wso2.carbon.device.mgt.common.operation.mgt.Operation.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "List of Operations on a device."),
- @ApiResponse(code = 500, message = "Error occurred while fetching the operations for the " +
- "device.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "List of Operations on a device."),
+ @ApiResponse(code = 500, message = "Error occurred while fetching the operations for the " +
+ "device.")})
Response getDeviceOperations(@ApiParam(name = "type", value = "Define the device type as the value for {type}. " +
- "Example: ios, android or windows.",
- required = true) @PathParam("type") String type,
+ "Example: ios, android or windows.",
+ required = true) @PathParam("type") String type,
@ApiParam(name = "id", value = "Define the device ID",
- required = true) @PathParam("id") String id,
+ required = true) @PathParam("id") String id,
@ApiParam(name = "start", value = "Provide the starting pagination index. Example 10",
- required = true) @QueryParam("start") int startIdx,
+ required = true) @QueryParam("start") int startIdx,
@ApiParam(name = "length", value = "Provide how many device details you require from" +
- " the starting pagination index. For example if " +
- "you require the device details from the 10th " +
- "pagination index to the 15th, " +
- "you must define 10 as the value for start and 5 " +
- "as the value for length.",
- required = true) @QueryParam("length") int length,
+ " the starting pagination index. For example if " +
+ "you require the device details from the 10th " +
+ "pagination index to the 15th, " +
+ "you must define 10 as the value for start and 5 " +
+ "as the value for length.",
+ required = true) @QueryParam("length") int length,
@QueryParam("search") String search);
@GET
@@ -88,14 +82,14 @@ public interface Operation {
responseContainer = "List",
notes = "Get the details of operations carried out on a selected device.",
response = org.wso2.carbon.device.mgt.common.operation.mgt.Operation.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "List of Operations on a device."),
- @ApiResponse(code = 500, message = "Error occurred while fetching the operations for the " +
- "device.") })
- Response getDeviceOperations(@ApiParam(name = "type", value = "Define the device type as the value for {type}. " +
- "Example: ios, android or windows.",
- required = true) @PathParam("type") String type,
- @ApiParam(name = "id", value = "Define the device ID",
- required = true) @PathParam("id") String id);
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "List of Operations on a device."),
+ @ApiResponse(code = 500, message = "Error occurred while fetching the operations for the " +
+ "device.")})
+ Response getAllDeviceOperations(@ApiParam(name = "type", value = "Define the device type as the value for {type}. " +
+ "Example: ios, android or windows.",
+ required = true) @PathParam("type") String type,
+ @ApiParam(name = "id", value = "Define the device ID",
+ required = true) @PathParam("id") String id);
/* @deprecated */
@POST
@@ -111,14 +105,14 @@ public interface Operation {
responseContainer = "List",
notes = "Get the list of applications that a device has subscribed.",
response = Application.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "List of installed application details of a device."),
- @ApiResponse(code = 500, message = "Error occurred while fetching the apps of the device" +
- ".") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "List of installed application details of a device.", response = Application.class, responseContainer = "List"),
+ @ApiResponse(code = 500, message = "Error occurred while fetching the apps of the device" +
+ ".")})
Response getInstalledApps(@ApiParam(name = "type", value = "Define the device type as the value for {type}. " +
- "Example: ios, android or windows.",
- required = true) @PathParam("type") String type,
+ "Example: ios, android or windows.",
+ required = true) @PathParam("type") String type,
@ApiParam(name = "id", value = "Define the device ID",
- required = true) @PathParam("id") String id);
+ required = true) @PathParam("id") String id);
@POST
@Path("installApp/{tenantDomain}")
@@ -128,16 +122,16 @@ public interface Operation {
httpMethod = "POST",
value = "Installing an Application on a Device.",
notes = "Install a selected application on a device.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Operation was successfully added to the queue."),
- @ApiResponse(code = 500, message = "Error occurred while saving the operation.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Operation was successfully added to the queue."),
+ @ApiResponse(code = 500, message = "Error occurred while saving the operation.")})
Response installApplication(@ApiParam(name = "applicationWrapper", value = "Details about the application and the" +
- " users and roles it should be " +
- "installed on.",
- required = true) ApplicationWrapper applicationWrapper,
+ " users and roles it should be " +
+ "installed on.",
+ required = true) ApplicationWrapper applicationWrapper,
@ApiParam(name = "tenantDomain", value = "Provide the tenant domain as the value for " +
- "{tenantDomain}. The default tenant domain " +
- "of WSO2 EMM is carbon.super.",
- required = true) @PathParam("tenantDomain") String tenantDomain);
+ "{tenantDomain}. The default tenant domain " +
+ "of WSO2 EMM is carbon.super.",
+ required = true) @PathParam("tenantDomain") String tenantDomain);
@POST
@Path("uninstallApp/{tenantDomain}")
@@ -147,16 +141,16 @@ public interface Operation {
httpMethod = "POST",
value = "Uninstalling an Application from a Device.",
notes = "Uninstall a selected application from a device.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Operation was successfully added to the queue."),
- @ApiResponse(code = 500, message = "Error occurred while saving the operation.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Operation was successfully added to the queue."),
+ @ApiResponse(code = 500, message = "Error occurred while saving the operation.")})
Response uninstallApplication(@ApiParam(name = "applicationWrapper", value = "Details about the application and" +
- " the users and roles it should be " +
- "uninstalled.",
- required = true) ApplicationWrapper applicationWrapper,
+ " the users and roles it should be " +
+ "uninstalled.",
+ required = true) ApplicationWrapper applicationWrapper,
@ApiParam(name = "tenantDomain", value = "Provide the tenant domain as the value for " +
- "{tenantDomain}. The default tenant domain " +
- "of WSO2 EMM is carbon.super.",
- required = true) @PathParam("tenantDomain") String tenantDomain);
+ "{tenantDomain}. The default tenant domain " +
+ "of WSO2 EMM is carbon.super.",
+ required = true) @PathParam("tenantDomain") String tenantDomain);
@GET
@@ -167,8 +161,8 @@ public interface Operation {
httpMethod = "POST",
value = "Retrieving the operation details.",
notes = "This will return the operation details including the responses from the devices")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Activity details provided successfully.."),
- @ApiResponse(code = 500, message = "Error occurred while fetching the activity for the supplied id.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Activity details provided successfully.."),
+ @ApiResponse(code = 500, message = "Error occurred while fetching the activity for the supplied id.")})
Response getActivity(@ApiParam(name = "id", value = "Provide activity id {id} as ACTIVITY_(number)",
required = true) @PathParam("id") String id)
throws MDMAPIException;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java
index 57a5521328..7189cff0e4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java
@@ -20,25 +20,15 @@ package org.wso2.carbon.device.mgt.jaxrs.api;
import io.swagger.annotations.*;
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import org.wso2.carbon.device.mgt.jaxrs.beans.PolicyWrapper;
import org.wso2.carbon.device.mgt.jaxrs.beans.PriorityUpdatedPolicyWrapper;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
-/**
- *
- */
-
+@Path("/policies")
@Api(value = "Policy", description = "Policy management related operations can be found here.")
public interface Policy {
@@ -52,11 +42,11 @@ public interface Policy {
notes = "Add a policy using this REST API command. When adding a policy you will have the option of " +
"saving the policy or saving and publishing the policy. Using the REST API command given below " +
"you are able to save a created Policy and this policy will be in the inactive state")
- @ApiResponses(value = { @ApiResponse(code = 201, message = "Created the policy."),
- @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
- "adding the policy") })
+ @ApiResponses(value = {@ApiResponse(code = 201, message = "Created the policy."),
+ @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
+ "adding the policy")})
Response addPolicy(@ApiParam(name = "policyWrapper", value = "Policy details related to the operation.",
- required = true) PolicyWrapper policyWrapper);
+ required = true) PolicyWrapper policyWrapper);
@POST
@Path("active-policy")
@@ -69,14 +59,14 @@ public interface Policy {
"will have the option of saving the policy or saving and publishing the policy. Using the REST " +
"API command given below you are able to save and publish a created policy and this policy will " +
"be in the active state.")
- @ApiResponses(value = { @ApiResponse(code = 201, message = "Created the policy."),
- @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
- "adding the policy") })
+ @ApiResponses(value = {@ApiResponse(code = 201, message = "Created the policy."),
+ @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
+ "adding the policy")})
Response addActivePolicy(@ApiParam(name = "policyWrapper", value = "Policy details related to the operation.",
- required = true) PolicyWrapper policyWrapper);
+ required = true) PolicyWrapper policyWrapper);
@GET
- @Produces({ MediaType.APPLICATION_JSON})
+ @Produces({MediaType.APPLICATION_JSON})
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
@@ -85,9 +75,10 @@ public interface Policy {
responseContainer = "List",
notes = "Retrieve the details of all the policies that you have created in WSO2 EMM.",
response = org.wso2.carbon.policy.mgt.common.Policy.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Fetched all policies."),
- @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
- "fetching the policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Fetched all policies.",
+ response = org.wso2.carbon.policy.mgt.common.Policy.class, responseContainer = "List"),
+ @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
+ "fetching the policies.")})
Response getAllPolicies();
@GET
@@ -100,11 +91,11 @@ public interface Policy {
value = "Getting Details of a Policy.",
notes = "Retrieve the details of a selected policy in WSO2 EMM.",
response = org.wso2.carbon.policy.mgt.common.Policy.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Fetched policy details."),
- @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
- "fetching the policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Fetched policy details."),
+ @ApiResponse(code = 500, message = "Policy Management related error occurred when " +
+ "fetching the policies.")})
Response getPolicy(@ApiParam(name = "id", value = "Policy ID value to identify a policy uniquely.",
- required = true) @PathParam("id") int policyId);
+ required = true) @PathParam("id") int policyId);
@GET
@Path("count")
@@ -114,9 +105,9 @@ public interface Policy {
httpMethod = "GET",
value = "Getting the Policy Count.",
notes = "Get the number of policies that are created in WSO2 EMM.",
- response = Integer.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Fetched the policy count."),
- @ApiResponse(code = 500, message = "Error while Fetching the policy count.") })
+ response = int.class)
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Fetched the policy count."),
+ @ApiResponse(code = 500, message = "Error while Fetching the policy count.")})
Response getPolicyCount();
@PUT
@@ -128,13 +119,13 @@ public interface Policy {
value = "Updating a Policy.",
notes = "If you wish to make changes to an existing policy, you can do so by updating the policy using " +
"this API")
- @ApiResponses(value = { @ApiResponse(code = 201, message = "Policy has been updated successfully."),
- @ApiResponse(code = 500, message = "Policy Management related exception in policy " +
- "update") })
+ @ApiResponses(value = {@ApiResponse(code = 201, message = "Policy has been updated successfully."),
+ @ApiResponse(code = 500, message = "Policy Management related exception in policy " +
+ "update")})
Response updatePolicy(@ApiParam(name = "policyWrapper", value = "Policy details related to the operation.",
- required = true) PolicyWrapper policyWrapper,
+ required = true) PolicyWrapper policyWrapper,
@ApiParam(name = "id", value = "Policy ID value to identify a policy uniquely.",
- required = true) @PathParam("id") int policyId);
+ required = true) @PathParam("id") int policyId);
@PUT
@Path("priorities")
@@ -147,12 +138,12 @@ public interface Policy {
value = "Updating the Policy Priority.",
notes = "If you wish to make changes to the existing policy priority order, " +
"you can do so by updating the priority order using this API")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Policy Priorities successfully updated."),
- @ApiResponse(code = 400, message = "Policy priorities did not update."),
- @ApiResponse(code = 500, message = "Error in updating policy priorities.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Policy Priorities successfully updated."),
+ @ApiResponse(code = 400, message = "Policy priorities did not update."),
+ @ApiResponse(code = 500, message = "Error in updating policy priorities.")})
Response updatePolicyPriorities(@ApiParam(name = "priorityUpdatedPolicies",
- value = "List of policy update details..",
- required = true) List priorityUpdatedPolicies);
+ value = "List of policy update details..",
+ required = true) List priorityUpdatedPolicies);
@POST
@Path("bulk-remove")
@@ -164,11 +155,11 @@ public interface Policy {
httpMethod = "POST",
value = "Removing Multiple Policies.",
notes = "In situations where you need to delete more than one policy you can do so using this API.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Policies have been successfully deleted."),
- @ApiResponse(code = 400, message = "Policy does not exist."),
- @ApiResponse(code = 500, message = "Error in deleting policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Policies have been successfully deleted."),
+ @ApiResponse(code = 400, message = "Policy does not exist."),
+ @ApiResponse(code = 500, message = "Error in deleting policies.")})
Response bulkRemovePolicy(@ApiParam(name = "policyIds", value = "Policy ID list to be deleted.",
- required = true) List policyIds);
+ required = true) List policyIds);
@PUT
@Produces("application/json")
@@ -180,10 +171,10 @@ public interface Policy {
value = "Activating Policies.",
notes = "Using the REST API command you are able to publish a policy in order to bring a policy that is " +
"in the inactive state to the active state.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Policies have been successfully activated."),
- @ApiResponse(code = 500, message = "Error in activating policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Policies have been successfully activated."),
+ @ApiResponse(code = 500, message = "Error in activating policies.")})
Response activatePolicy(@ApiParam(name = "policyIds", value = "Policy ID list to be activated.",
- required = true) List policyIds);
+ required = true) List policyIds);
@PUT
@Produces("application/json")
@@ -195,10 +186,10 @@ public interface Policy {
value = "Deactivating Policies.",
notes = "Using the REST API command you are able to unpublish a policy in order to bring a policy that " +
"is in the active state to the inactive state.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Policies have been successfully deactivated."),
- @ApiResponse(code = 500, message = "Error in deactivating policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Policies have been successfully deactivated."),
+ @ApiResponse(code = 500, message = "Error in deactivating policies.")})
Response inactivatePolicy(@ApiParam(name = "policyIds", value = "Policy ID list to be deactivated.",
- required = true) List policyIds) throws MDMAPIException;
+ required = true) List policyIds) throws MDMAPIException;
@PUT
@Produces("application/json")
@@ -213,8 +204,8 @@ public interface Policy {
" policies (removing, activating, deactivating and updating) or add new policies, the existing" +
" devices will not receive these changes immediately. Once all the required changes are made" +
" you need to apply the changes to push the policy changes to the existing devices.")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Changes have been successfully updated."),
- @ApiResponse(code = 500, message = "Error in updating policies.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Changes have been successfully updated."),
+ @ApiResponse(code = 500, message = "Error in updating policies.")})
Response applyChanges();
@GET
@@ -229,11 +220,11 @@ public interface Policy {
"It will monitor the device based on the policy monitoring frequency that you define in " +
"milliseconds.Using this REST API to start the policy monitoring task is optional as " +
"WSO2 EMM uses an OSGI call to start the monitoring task")
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Policy monitoring service started successfully."),
- @ApiResponse(code = 500, message = "Policy Management related exception when starting " +
- "monitoring service.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Policy monitoring service started successfully."),
+ @ApiResponse(code = 500, message = "Policy Management related exception when starting " +
+ "monitoring service.")})
Response startTaskService(@ApiParam(name = "milliseconds", value = "Policy monitoring frequency in milliseconds.",
- required = true) @PathParam("milliseconds") int monitoringFrequency);
+ required = true) @PathParam("milliseconds") int monitoringFrequency);
@GET
@Path("update-task/{milliseconds}")
@@ -258,11 +249,11 @@ public interface Policy {
"filters the policies based on the Platform (device type), filters based on the device ownership" +
" type , filters based on the user role or name and finally the policy is enforced on the device.",
response = org.wso2.carbon.policy.mgt.common.Policy.class)
- @ApiResponses(value = { @ApiResponse(code = 200, message = "Fetched current policy."),
- @ApiResponse(code = 500, message = "Error occurred while getting the current policy.") })
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Fetched current policy."),
+ @ApiResponse(code = 500, message = "Error occurred while getting the current policy.")})
Response getDeviceActivePolicy(@ApiParam(name = "type", value = "Define the device type as the value for {type}." +
- " Example: ios, android, windows..",
- required = true) @PathParam("type") String type,
+ " Example: ios, android, windows..",
+ required = true) @PathParam("type") String type,
@ApiParam(name = "id", value = "Define the device ID as the value for {id}.",
- required = true) @PathParam("id") String id);
+ required = true) @PathParam("id") String id);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java
index 182b1adbf6..7762048499 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response;
* These end points provide profile related operations.
*/
@Api(value = "Profile")
+@Path("/profiles")
@SuppressWarnings("NonJaxWsWebServices")
public interface Profile {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java
index a179d32e42..a9cc10cf83 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java
@@ -19,26 +19,15 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
import io.swagger.annotations.*;
-import org.wso2.carbon.device.mgt.common.app.mgt.Application;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import org.wso2.carbon.device.mgt.jaxrs.beans.RoleWrapper;
import org.wso2.carbon.user.mgt.common.UIPermissionNode;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
-/**
- *
- */
+@Path("/roles")
@Api(value = "Role", description = "Role management related operations can be found here.")
public interface Role {
@@ -54,7 +43,7 @@ public interface Role {
response = String.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "List of available roles"),
@ApiResponse(code = 500, message = "Error occurred while fetching the role list.") })
- Response getRoles();
+ Response getAllRoles();
@GET
@Path("{userStore}")
@@ -69,7 +58,7 @@ public interface Role {
response = String.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "List of available roles"),
@ApiResponse(code = 500, message = "Error occurred while fetching the role list.") })
- Response getRoles(@ApiParam(name = "userStore", value = "Provide the name of the UserStore you wish to get the" +
+ Response getRolesOfUserStore(@ApiParam(name = "userStore", value = "Provide the name of the UserStore you wish to get the" +
" details from ",
required = true) @PathParam("userStore") String userStore);
@@ -203,9 +192,10 @@ public interface Role {
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting the Role Count.",
- response = Integer.class,
+ response = int.class,
notes = "Get the number of roles in WSO2 EMM.")
@ApiResponses(value = { @ApiResponse(code = 200, message = "Retrieved the role count."),
@ApiResponse(code = 500, message = "Error occurred while retrieving the role count.") })
Response getRoleCount();
+
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java
index c3aefdbd82..7ac2eeab7f 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java
@@ -18,25 +18,12 @@
package org.wso2.carbon.device.mgt.jaxrs.api;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
import org.apache.axis2.databinding.types.soapencoding.Integer;
-import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
import org.wso2.carbon.device.mgt.jaxrs.beans.UserCredentialWrapper;
import org.wso2.carbon.device.mgt.jaxrs.beans.UserWrapper;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
@@ -44,6 +31,7 @@ import java.util.List;
/**
* This represents the JAX-RS services of User related functionality.
*/
+@Path("/users")
@Api(value = "User", description = "User management related operations can be found here.")
public interface User {
@@ -138,7 +126,7 @@ public interface User {
@ApiResponse(code = 400, message = "User by username: 'username' does not exist for role retrieval"),
@ApiResponse(code = 500, message = "Exception in trying to retrieve roles for user by username: 'username'")
})
- Response getRoles(@ApiParam(name = "username", value = "Provide the user name of the user you wish to get"
+ Response getRolesOfUser(@ApiParam(name = "username", value = "Provide the user name of the user you wish to get"
+ " the role details", required = true) @QueryParam("username") String username);
@GET
@@ -253,7 +241,7 @@ public interface User {
httpMethod = "GET",
value = "Getting the User Count",
notes = "Get the number of users in WSO2 EMM",
- response = Integer.class)
+ response = int.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 500, message = "Error occurred while retrieving the list of users that exist"
@@ -264,7 +252,7 @@ public interface User {
@PUT
@Path("{roleName}/users")
@Produces({MediaType.APPLICATION_JSON})
- Response updateRoles(@PathParam("username") String username, List userList);
+ Response updateRoles(@PathParam("roleName") String roleName, List userList);
@POST
@Path("change-password")
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java
deleted file mode 100644
index 8bc0cd78d8..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java
+++ /dev/null
@@ -1,36 +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.device.mgt.jaxrs.api.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-
-/**
- * Authentication related REST-API implementation.
- */
-@Produces({ "application/json", "application/xml" })
-@Consumes({ "application/json", "application/xml" })
-public class AuthenticationImpl {
-
- private static Log log = LogFactory.getLog(AuthenticationImpl.class);
-}
-
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java
index e25b9b9288..19ea361c08 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java
@@ -142,7 +142,7 @@ public class DeviceImpl implements Device{
*/
@GET
@Path("user/{user}")
- public Response getDevice(@PathParam("user") String user) {
+ public Response getDeviceOfUser(@PathParam("user") String user) {
List devices;
try {
devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesOfUser(user);
@@ -165,7 +165,7 @@ public class DeviceImpl implements Device{
*/
@GET
@Path("user/{user}/count")
- public Response getDeviceCount(@PathParam("user") String user) {
+ public Response getDeviceCountOfUser(@PathParam("user") String user) {
try {
Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(user);
return Response.status(Response.Status.OK).entity(count).build();
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java
index 4582fa24d3..7ed9576d0b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java
@@ -38,7 +38,7 @@ public class DeviceSearchImpl implements DeviceSearch {
private static Log log = LogFactory.getLog(DeviceSearchImpl.class);
@GET
- public Response getDeviceInfo(SearchContext searchContext) {
+ public Response getFilteredDeviceInfo(SearchContext searchContext) {
SearchManagerService searchManagerService;
List devices;
try {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java
index 8306682668..edd4fc1906 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java
@@ -103,7 +103,7 @@ public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Opera
@Override
@GET
@Path("{type}/{id}")
- public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) {
+ public Response getAllDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) {
List extends org.wso2.carbon.device.mgt.common.operation.mgt.Operation> operations;
DeviceManagementProviderService dmService;
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java
index 739f5f5678..278a7dfd26 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java
@@ -65,7 +65,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role {
@Override
@GET
@Produces({MediaType.APPLICATION_JSON})
- public Response getRoles() {
+ public Response getAllRoles() {
List filteredRoles;
try {
filteredRoles = getRolesFromUserStore();
@@ -89,7 +89,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role {
@GET
@Path("{userStore}")
@Produces({MediaType.APPLICATION_JSON})
- public Response getRoles(@PathParam("userStore") String userStore) {
+ public Response getRolesOfUserStore(@PathParam("userStore") String userStore) {
String[] roles;
try {
AbstractUserStoreManager abstractUserStoreManager =
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java
index 2b136e6131..427a654e54 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java
@@ -371,7 +371,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User {
@GET
@Path("roles")
@Produces({MediaType.APPLICATION_JSON})
- public Response getRoles(@QueryParam("username") String username) {
+ public Response getRolesOfUser(@QueryParam("username") String username) {
ResponsePayload responsePayload = new ResponsePayload();
try {
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
@@ -716,7 +716,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User {
@PUT
@Path("{roleName}/users")
@Produces({MediaType.APPLICATION_JSON})
- public Response updateRoles(@PathParam("username") String username, List userList) {
+ public Response updateRoles(@PathParam("roleName") String username, List userList) {
try {
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
if (log.isDebugEnabled()) {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ApplicationWrapper.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ApplicationWrapper.java
index bb43a97643..1040045dde 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ApplicationWrapper.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ApplicationWrapper.java
@@ -21,51 +21,54 @@ package org.wso2.carbon.device.mgt.jaxrs.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+
import java.util.List;
@ApiModel(value = "ApplicationWrapper", description = "Application details together with user, " +
- "role or devices the application is associated with.")
+ "role or devices the application is associated with.")
public class ApplicationWrapper {
- @ApiModelProperty(name = "userNameList", value = "List of user names.", required = true )
- private List userNameList;
- @ApiModelProperty(name = "roleNameList", value = "List of role names.", required = true )
- private List roleNameList;
- @ApiModelProperty(name = "deviceIdentifiers", value = "List of device identifiers.", required = true )
- private List deviceIdentifiers;
- @ApiModelProperty(name = "application", value = "Details of the mobile application.", required = true )
- private MobileApp application;
+ @ApiModelProperty(name = "userNameList", value = "List of user names.", required = true)
+ private List userNameList;
+ @ApiModelProperty(name = "roleNameList", value = "List of role names.", required = true)
+ private List roleNameList;
+ @ApiModelProperty(name = "deviceIdentifiers", value = "List of device identifiers.", required = true,
+ dataType = "List[org.wso2.carbon.device.mgt.common.DeviceIdentifier]")
+ private List deviceIdentifiers;
+ @ApiModelProperty(name = "application", value = "Details of the mobile application.", required = true)
+ private MobileApp application;
+
+ public MobileApp getApplication() {
+ return application;
+ }
- public MobileApp getApplication() {
- return application;
- }
+ public void setApplication(MobileApp application) {
+ this.application = application;
+ }
- public void setApplication(MobileApp application) {
- this.application = application;
- }
- public List getUserNameList() {
- return userNameList;
- }
+ public List getUserNameList() {
+ return userNameList;
+ }
- public void setUserNameList(List userNameList) {
- this.userNameList = userNameList;
- }
+ public void setUserNameList(List userNameList) {
+ this.userNameList = userNameList;
+ }
- public List getRoleNameList() {
- return roleNameList;
- }
+ public List getRoleNameList() {
+ return roleNameList;
+ }
- public void setRoleNameList(List roleNameList) {
- this.roleNameList = roleNameList;
- }
+ public void setRoleNameList(List roleNameList) {
+ this.roleNameList = roleNameList;
+ }
- public List getDeviceIdentifiers() {
- return deviceIdentifiers;
- }
+ public List getDeviceIdentifiers() {
+ return deviceIdentifiers;
+ }
- public void setDeviceIdentifiers(List deviceIdentifiers) {
- this.deviceIdentifiers = deviceIdentifiers;
- }
+ public void setDeviceIdentifiers(List deviceIdentifiers) {
+ this.deviceIdentifiers = deviceIdentifiers;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java
index dd6a699c6c..fe7f4e0268 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java
@@ -27,42 +27,42 @@ import java.util.Properties;
* This class represents the generic mobile AuthenticationImpl information
* which is used by AppM.
*/
-@ApiModel(value = "ApplicationWrapper", description = "Details of a mobile application.")
+@ApiModel(value = "MobileApp", description = "Details of a mobile application.")
public class MobileApp {
- @ApiModelProperty(name = "id", value = "Id of the app used internally.", required = true )
+ @ApiModelProperty(name = "id", value = "Id of the app used internally.", required = true)
private String id;
- @ApiModelProperty(name = "name", value = "The name of the application.", required = true )
+ @ApiModelProperty(name = "name", value = "The name of the application.", required = true)
private String name;
@ApiModelProperty(name = "type", value = "The type of the application. The following types of applications are " +
- "supported: enterprise, public and webapp..", required = true )
+ "supported: enterprise, public and webapp..", required = true)
private MobileAppTypes type;
- @ApiModelProperty(name = "platform", value = "Platform the app can be installed on .", required = true )
+ @ApiModelProperty(name = "platform", value = "Platform the app can be installed on .", required = true)
private String platform;
- @ApiModelProperty(name = "version", value = "Version of the application.", required = true )
+ @ApiModelProperty(name = "version", value = "Version of the application.", required = true)
private String version;
- @ApiModelProperty(name = "identifier", value = "The package name of the application.", required = true )
+ @ApiModelProperty(name = "identifier", value = "The package name of the application.", required = true)
private String identifier;
- @ApiModelProperty(name = "iconImage", value = "Link to the icon of the app.", required = true )
+ @ApiModelProperty(name = "iconImage", value = "Link to the icon of the app.", required = true)
private String iconImage;
@ApiModelProperty(name = "packageName", value = "Define the exact name of the application package. You can use one " +
- "of the following methods to get the package name.\n" +
- "Go to the respective application in the play store and copy the" +
- " ID or package name from the URL.\n" +
- "Example: The play store application URL for the Viber app is " +
- "https://play.google.com/store/apps/details?id=com.viber.voip&hl=en." +
- " Therefore, the package name or " +
- "the application ID is: id=com.viber.voip \n" +
- "Download the System Info for Android to your device from the" +
- " play store. \n" +
- "Once the application is successfully installed go to the Tasks " +
- "tab and you will see the package name under the respective " +
- "application..", required = true )
+ "of the following methods to get the package name.\n" +
+ "Go to the respective application in the play store and copy the" +
+ " ID or package name from the URL.\n" +
+ "Example: The play store application URL for the Viber app is " +
+ "https://play.google.com/store/apps/details?id=com.viber.voip&hl=en." +
+ " Therefore, the package name or " +
+ "the application ID is: id=com.viber.voip \n" +
+ "Download the System Info for Android to your device from the" +
+ " play store. \n" +
+ "Once the application is successfully installed go to the Tasks " +
+ "tab and you will see the package name under the respective " +
+ "application..", required = true)
private String packageName;
- @ApiModelProperty(name = "appIdentifier", value = "The package name of the application.", required = true )
+ @ApiModelProperty(name = "appIdentifier", value = "The package name of the application.", required = true)
private String appIdentifier;
private String location;
- @ApiModelProperty(name = "properties", value = "List of meta data.", required = true )
+ @ApiModelProperty(name = "properties", value = "List of meta data.", required = true)
private Properties properties;
public MobileAppTypes getType() {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java
index cad8906371..17f8b905bf 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java
@@ -18,11 +18,10 @@
package org.wso2.carbon.device.mgt.jaxrs.beans;
-
-
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
+
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.sql.Timestamp;
@@ -118,4 +117,5 @@ public class Profile {
public void setProfileFeaturesList(List profileFeaturesList) {
this.profileFeaturesList = profileFeaturesList;
}
+
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/RoleWrapper.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/RoleWrapper.java
index ed8cfda09c..c0856021e2 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/RoleWrapper.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/RoleWrapper.java
@@ -23,54 +23,54 @@ import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.user.mgt.common.UIPermissionNode;
@ApiModel(value = "RoleWrapper", description = "Role details including permission and the users in the roles are " +
- "wrapped here.")
+ "wrapped here.")
public class RoleWrapper {
@ApiModelProperty(name = "roleName", value = "The name of the role.", required = true)
- private String roleName;
+ private String roleName;
@ApiModelProperty(name = "permissions", value = "Lists out all the permissions associated with roles.",
- required = true)
- private String[] permissions;
+ required = true, dataType = "List[java.lang.String]")
+ private String[] permissions;
@ApiModelProperty(name = "users", value = "The list of users assigned to the selected role.",
- required = true)
- private String[] users;
+ required = true, dataType = "List[java.lang.String]")
+ private String[] users;
@ApiModelProperty(name = "permissionList", value = "This contain the following, " +
- "\n resourcePath\tThe path related to the API.\n " +
- "displayName\tThe name of the permission that is shown " +
- "in the UI.\n" +
- "nodeList\tLists out the nested permissions.",
- required = true)
- private UIPermissionNode permissionList;
+ "\n resourcePath\tThe path related to the API.\n " +
+ "displayName\tThe name of the permission that is shown " +
+ "in the UI.\n" +
+ "nodeList\tLists out the nested permissions.",
+ required = true)
+ private UIPermissionNode permissionList;
- public String getRoleName() {
- return roleName;
- }
+ public String getRoleName() {
+ return roleName;
+ }
- public void setRoleName(String roleName) {
- this.roleName = roleName;
- }
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
- public String[] getPermissions() {
- return permissions;
- }
+ public String[] getPermissions() {
+ return permissions;
+ }
- public void setPermissions(String[] permissions) {
- this.permissions = permissions;
- }
+ public void setPermissions(String[] permissions) {
+ this.permissions = permissions;
+ }
- public String[] getUsers() {
- return users;
- }
+ public String[] getUsers() {
+ return users;
+ }
- public void setUsers(String[] users) {
- this.users = users;
- }
+ public void setUsers(String[] users) {
+ this.users = users;
+ }
- public UIPermissionNode getPermissionList() {
- return permissionList;
- }
+ public UIPermissionNode getPermissionList() {
+ return permissionList;
+ }
- public void setPermissionList(UIPermissionNode permissionList) {
- this.permissionList = permissionList;
- }
+ public void setPermissionList(UIPermissionNode permissionList) {
+ this.permissionList = permissionList;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml
index 3f2159018c..05d9a6d8b4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml
@@ -24,145 +24,46 @@
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">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -175,9 +76,6 @@
-
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
index ab8d04cbe8..97f0970968 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
@@ -25,6 +25,16 @@
org.apache.cxf.transport.servlet.CXFServlet
+
+
+
+
+
+
+
+ swagger.security.filter
+ ApiAuthorizationFilterImpl
+
1
@@ -41,7 +51,7 @@
doAuthentication
- true
+ false