diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml
new file mode 100644
index 000000000..2430a66d6
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/pom.xml
@@ -0,0 +1,185 @@
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ appm-connector
+ 3.0.9-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ org.wso2.carbon.appmgt.mdm.restconnector
+ bundle
+ WSO2 Carbon - App Manager WSO2 MDM REST Connector Component
+ http://maven.apache.org
+
+
+ wso2-maven2-repository
+ WSO2 Maven2 Repository
+ http://dist.wso2.org/maven2/
+
+
+ wso2-maven2-snapshot-repository
+ WSO2 Maven2 Snapshot Repository
+ http://dist.wso2.org/snapshots/maven2/
+
+
+ wso2-nexus
+ WSO2 internal Repository
+ http://maven.wso2.org/nexus/content/groups/wso2-public/
+
+ true
+ daily
+ ignore
+
+
+
+
+
+
+
+ org.apache.felix
+ maven-scr-plugin
+
+
+ generate-scr-scrdescriptor
+
+ scr
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ org.wso2.carbon.appmgt.mdm.restconnector.internal
+
+ org.wso2.carbon.appmgt.mobile.utils.*,
+ org.wso2.carbon.appmgt.mobile.mdm.*,
+ org.wso2.carbon.appmgt.mobile.interfaces.*,
+ org.apache.commons.*,
+ org.wso2.carbon.user.core.service,
+ org.wso2.carbon.user.core.tenant,
+ org.wso2.carbon.user.api,
+ feign,
+ feign.auth,
+ feign.codec,
+ feign.gson,
+ *;resolution:=optional
+
+
+ !org.wso2.carbon.appmgt.mdm.restconnector.internal,
+ org.wso2.carbon.appmgt.mdm.restconnector.*
+
+
+ jsr311-api,
+ feign-jaxrs,
+ org.wso2.carbon.device.mgt.common
+
+
+
+
+
+
+
+
+
+ commons-io.wso2
+ commons-io
+
+
+ com.googlecode.json-simple.wso2
+ json-simple
+
+
+ com.googlecode.plist
+ dd-plist
+
+
+ org.wso2.carbon
+ org.wso2.carbon.logging
+
+
+ org.apache.felix
+ org.apache.felix.scr
+
+
+ org.wso2.carbon
+ org.wso2.carbon.ndatasource.core
+
+
+ org.wso2.carbon.governance
+ org.wso2.carbon.governance.api
+
+
+ org.wso2.carbon.appmgt
+ org.wso2.carbon.appmgt.mobile
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.identity.jwt.client.extension
+ 2.0.6-SNAPSHOT
+
+
+
+ io.github.openfeign
+ feign-core
+ 9.3.1
+
+
+ io.github.openfeign
+ feign-jaxrs
+ 9.3.1
+
+
+ io.github.openfeign
+ feign-gson
+ 9.3.1
+
+
+ javax.ws.rs
+ jsr311-api
+
+
+ io.swagger
+ swagger-jaxrs
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.device.mgt.common
+
+
+ org.apache.ws.commons.axiom
+ axiom-api
+
+
+ org.apache.ws.commons.axiom
+ axiom-impl
+
+
+
+
+
+
+
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/ApplicationOperationsImpl.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/ApplicationOperationsImpl.java
new file mode 100644
index 000000000..4f3580165
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/ApplicationOperationsImpl.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector;
+
+import feign.Feign;
+import feign.gson.GsonDecoder;
+import feign.gson.GsonEncoder;
+import feign.jaxrs.JAXRSContract;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.OAuthRequestInterceptor;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApplicationManagementAdminService;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApplicationWrapper;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.DeviceManagementAdminService;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.MobileApp;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.MobileAppTypes;
+import org.wso2.carbon.appmgt.mdm.restconnector.config.AuthorizationConfigurationManager;
+import org.wso2.carbon.appmgt.mobile.beans.ApplicationOperationAction;
+import org.wso2.carbon.appmgt.mobile.beans.ApplicationOperationDevice;
+import org.wso2.carbon.appmgt.mobile.beans.DeviceIdentifier;
+import org.wso2.carbon.appmgt.mobile.interfaces.ApplicationOperations;
+import org.wso2.carbon.appmgt.mobile.mdm.App;
+import org.wso2.carbon.appmgt.mobile.mdm.Device;
+import org.wso2.carbon.appmgt.mobile.utils.MobileApplicationException;
+import org.wso2.carbon.appmgt.mobile.utils.MobileConfigurations;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+public class ApplicationOperationsImpl implements ApplicationOperations {
+ private static final String CDMF_SERVER_BASE_CONTEXT = "/api/device-mgt/v1.0";
+ private static DeviceManagementAdminService deviceManagementAdminService;
+ private static final Log log = LogFactory.getLog(ApplicationOperationsImpl.class);
+ private static ApplicationManagementAdminService applicationManagementAdminService;
+
+ /**
+ * Constructor.
+ */
+ public ApplicationOperationsImpl() {
+ String authorizationConfigManagerServerURL = AuthorizationConfigurationManager.getInstance().getServerURL();
+ OAuthRequestInterceptor oAuthRequestInterceptor = new OAuthRequestInterceptor();
+ deviceManagementAdminService = Feign.builder()
+ .requestInterceptor(oAuthRequestInterceptor)
+ .contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
+ .target(DeviceManagementAdminService.class,
+ authorizationConfigManagerServerURL + CDMF_SERVER_BASE_CONTEXT);
+ applicationManagementAdminService = Feign.builder()
+ .requestInterceptor(oAuthRequestInterceptor)
+ .contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
+ .target(ApplicationManagementAdminService.class,
+ authorizationConfigManagerServerURL + CDMF_SERVER_BASE_CONTEXT);
+ }
+
+ /**
+ * Install, uninstall, reinstall application in devices.
+ *
+ * @param applicationOperationAction {@link ApplicationOperationAction} object
+ * @return Activity id
+ * @throws MobileApplicationException on errors while trying to perform action in devices
+ */
+ @Override
+ public String performAction(ApplicationOperationAction applicationOperationAction)
+ throws MobileApplicationException {
+ ApplicationWrapper applicationWrapper = new ApplicationWrapper();
+ MobileApp mobileApp = new MobileApp();
+
+ String type = applicationOperationAction.getType();
+ String[] params = applicationOperationAction.getParams();
+ int tenantId = applicationOperationAction.getTenantId();
+
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(tenantId);
+
+ List deviceIdentifiers = new ArrayList<>();
+ List deviceList;
+ if (Constants.USER.equals(type)) {
+ String platform = applicationOperationAction.getApp().getPlatform();
+ String userName;
+ for (String param : params) {
+ userName = param;
+ deviceList = deviceManagementAdminService.getDevices(userName, null).getList();
+
+ for (org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.Device device : deviceList) {
+ if (Constants.WEBAPP.equals(platform) || platform.equalsIgnoreCase(device.getType())) {
+ if (Constants.ACTIVE.equalsIgnoreCase(device.getEnrolmentInfo().getStatus().toString())) {
+ deviceIdentifiers.add(getDeviceIdentifierByDevice(device));
+ }
+ }
+ }
+ }
+ } else if (Constants.ROLE.equals(type)) {
+ String userRole;
+ for (String param : applicationOperationAction.getParams()) {
+ userRole = param;
+ deviceList = deviceManagementAdminService.getDevices(null, userRole).getList();
+ for (org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.Device device : deviceList) {
+ if (Constants.ACTIVE.equalsIgnoreCase(device.getEnrolmentInfo().getStatus().toString())) {
+ deviceIdentifiers.add(getDeviceIdentifierByDevice(device));
+ }
+ }
+ }
+ } else if (Constants.DEVICE.equals(type)) {
+ DeviceIdentifier deviceIdentifier;
+ for (String param : params) {
+ deviceIdentifier = new DeviceIdentifier();
+ if (isValidJSON(param)) {
+ JSONParser parser = new JSONParser();
+ try {
+ JSONObject parsedObj = (JSONObject) parser.parse(param);
+ deviceIdentifier.setId((String) parsedObj.get(Constants.ID));
+ String deviceType = (String) parsedObj.get(Constants.TYPE);
+ deviceIdentifier.setType(deviceType);
+ deviceIdentifiers.add(deviceIdentifier);
+ } catch (ParseException e) {
+ throw new MobileApplicationException("Device Identifier is not valid json object.", e);
+ }
+ }
+ }
+ } else {
+ throw new IllegalStateException("Invalid type is received from app store.");
+ }
+
+ App app = applicationOperationAction.getApp();
+ mobileApp.setId(app.getId());
+ mobileApp.setType(MobileAppTypes.valueOf(app.getType().toUpperCase()));
+ mobileApp.setAppIdentifier(app.getAppIdentifier());
+ mobileApp.setIconImage(app.getIconImage());
+ mobileApp.setIdentifier(app.getIdentifier());
+ mobileApp.setLocation(app.getLocation());
+ mobileApp.setName(app.getName());
+ mobileApp.setPackageName(app.getPackageName());
+ mobileApp.setPlatform(app.getPlatform());
+ mobileApp.setVersion(app.getVersion());
+ Properties mobileAppProperties = new Properties();
+
+ if (Constants.IOS.equals(app.getPlatform())) {
+ if (Constants.ENTERPRISE.equals(app.getType())) {
+ mobileAppProperties.put(Constants.IOSConstants.IS_REMOVE_APP, true);
+ mobileAppProperties.put(Constants.IOSConstants.IS_PREVENT_BACKUP, true);
+ } else if (Constants.IOSConstants.PUBLIC.equals(app.getType())) {
+ mobileAppProperties.put(Constants.IOSConstants.I_TUNES_ID, app.getIdentifier());
+ mobileAppProperties.put(Constants.IOSConstants.IS_REMOVE_APP, true);
+ mobileAppProperties.put(Constants.IOSConstants.IS_PREVENT_BACKUP, true);
+ } else if (Constants.WEBAPP.equals(app.getType())) {
+ mobileAppProperties.put(Constants.IOSConstants.LABEL, app.getName());
+ mobileAppProperties.put(Constants.IOSConstants.IS_REMOVE_APP, true);
+ }
+ } else if (Constants.WEBAPP.equals(app.getPlatform())) {
+ mobileAppProperties.put(Constants.IOSConstants.LABEL, app.getName());
+ mobileAppProperties.put(Constants.IOSConstants.IS_REMOVE_APP, true);
+ }
+ mobileApp.setProperties(mobileAppProperties);
+ applicationWrapper.setApplication(mobileApp);
+ Activity activity = null;
+
+ if (deviceIdentifiers.size() > 0) {
+ applicationWrapper.setDeviceIdentifiers(deviceIdentifiers);
+ if (Constants.INSTALL.equals(applicationOperationAction.getAction())) {
+ activity = applicationManagementAdminService.installApplication(applicationWrapper);
+ } else if (Constants.UPDATE.equals(applicationOperationAction.getAction())) {
+ activity = applicationManagementAdminService.installApplication(applicationWrapper);
+ } else {
+ activity = applicationManagementAdminService.uninstallApplication(applicationWrapper);
+ }
+ }
+
+ if (activity != null) {
+ return activity.getActivityId();
+ }
+ return null;
+ }
+
+ /**
+ * Get devices.
+ *
+ * @param applicationOperationDevice {@link ApplicationOperationAction} object
+ * @return list of {@link Device} objects
+ * @throws MobileApplicationException on errors while trying to get devices list
+ */
+ @Override
+ public List getDevices(ApplicationOperationDevice applicationOperationDevice)
+ throws MobileApplicationException {
+ Map queryParamsMap = new HashMap<>();
+ String platform = applicationOperationDevice.getPlatform();
+ String platformVersion = applicationOperationDevice.getPlatformVersion();
+ String userName = applicationOperationDevice.getCurrentUser().getUsername();
+ queryParamsMap.put(Constants.PLATFORM, platform);
+ queryParamsMap.put(Constants.PLATFORM_VERSION, platformVersion);
+ queryParamsMap.put(Constants.USER, userName);
+ String type = applicationOperationDevice.getType();
+ queryParamsMap.put(Constants.TYPE, type);
+ List deviceList =
+ deviceManagementAdminService.getDevices(userName, null).getList();
+
+ List processedDevices = new ArrayList<>();
+ for (org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.Device device : deviceList) {
+ Device processedDevice = new Device();
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(device.getDeviceIdentifier().toString());
+ deviceIdentifier.setType(device.getType().toString());
+ processedDevice.setDeviceIdentifier(deviceIdentifier);
+ processedDevice.setName(device.getName());
+ processedDevice.setModel(device.getName());
+ processedDevice.setType(device.getType());
+ String imgUrl;
+ if (Constants.ANDROID.equalsIgnoreCase((device.getType().toString()))) {
+ imgUrl = String.format(getActiveMDMProperties().get(Constants.PROPERTY_IMAGE_URL), Constants.NEXUS);
+ } else if (Constants.IOS.equalsIgnoreCase((device.getType().toString()))) {
+ imgUrl = String.format(getActiveMDMProperties().get(Constants.PROPERTY_IMAGE_URL), Constants.IPHONE);
+ } else {
+ imgUrl = String.format(getActiveMDMProperties().get(Constants.PROPERTY_IMAGE_URL), Constants.NONE);
+ }
+ processedDevice.setImage(imgUrl);
+ processedDevice.setPlatform(device.getType().toString());
+ processedDevices.add(processedDevice);
+ }
+ return processedDevices;
+
+ }
+
+ private HashMap getActiveMDMProperties() {
+ MobileConfigurations configurations = MobileConfigurations.getInstance();
+ return configurations.getActiveMDMProperties();
+ }
+
+ private static DeviceIdentifier getDeviceIdentifierByDevice(
+ org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.Device device) {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(device.getDeviceIdentifier());
+ deviceIdentifier.setType(device.getType());
+
+ return deviceIdentifier;
+ }
+
+ private boolean isValidJSON(String json) {
+ JSONParser parser = new JSONParser();
+ try {
+ parser.parse(json);
+ } catch (ParseException e) {
+ return false;
+ }
+ return true;
+ }
+
+ private void logError(String errorMessage, Throwable e) {
+ if (log.isDebugEnabled()) {
+ log.error(errorMessage, e);
+ } else {
+ log.error(errorMessage);
+ }
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/Constants.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/Constants.java
new file mode 100644
index 000000000..1721fc1a7
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/Constants.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector;
+
+public class Constants {
+ public static final String PROPERTY_SERVER_URL = "ServerURL";
+ public static final String PROPERTY_TOKEN_API_URL = "TokenApiURL";
+ public static final String PROPERTY_IMAGE_URL = "ImageURL";
+ public static final String PROPERTY_TOKEN_REFRESH_TIME_OFFSET = "TokenRefreshTimeOffset";
+ public static final String PROPERTY_USERNAME = "Username";
+ public static final String PROPERTY_PASSWORD = "Password";
+
+ public static final String USER = "user";
+ public static final String ROLE = "role";
+ public static final String USERS = USER + "s";
+ public static final String ROLES = ROLE + "s";
+ public static final String ANDROID = "android";
+ public static final String IOS = "ios";
+ public static final String WEBAPP = "webapp";
+ public static final String PLATFORM = "platform";
+ public static final String PLATFORM_VERSION = "platformVersion";
+ public static final String PROPERTIES = "properties";
+ public static final String TYPE = "type";
+ public static final String TYPES = TYPE + "s";
+ public static final String ID = "id";
+ public static final String NAME = "name";
+ public static final String USER_LIST = "userList";
+ public static final String DEVICE_IDENTIFIER = "deviceIdentifier";
+ public static final String DEVICE_IDENTIFIERS = DEVICE_IDENTIFIER + "s";
+ public static final String DEVICES = "devices";
+ public static final String APPLICATION = "application";
+ public static final String NEXUS = "nexus";
+ public static final String IPHONE = "iphone";
+ public static final String NONE = "none";
+ public static final String INSTALL = "install";
+ public static final String UPDATE = "update";
+ public static final String MOBILE_DEVICE = "mobileDevice";
+ public static final String ENTERPRISE = "enterprise";
+ public static final String ACTIVE = "active";
+ public static final String DEVICE = "device";
+
+
+ public class IOSConstants {
+
+ private IOSConstants() {
+ throw new AssertionError();
+ }
+
+ public static final String IS_REMOVE_APP = "isRemoveApp";
+ public static final String IS_PREVENT_BACKUP = "isPreventBackup";
+ public static final String I_TUNES_ID = "iTunesId";
+ public static final String LABEL = "label";
+ public static final String PUBLIC = "public";
+ public static final String OPCODE_INSTALL_ENTERPRISE_APPLICATION =
+ "INSTALL_ENTERPRISE_APPLICATION";
+ public static final String OPCODE_INSTALL_STORE_APPLICATION = "INSTALL_STORE_APPLICATION";
+ public static final String OPCODE_INSTALL_WEB_APPLICATION = "WEB_CLIP";
+ public static final String OPCODE_REMOVE_APPLICATION = "REMOVE_APPLICATION";
+ }
+
+ public class AndroidConstants {
+ private AndroidConstants() {
+ throw new AssertionError();
+ }
+
+ public static final String OPCODE_INSTALL_APPLICATION = "INSTALL_APPLICATION";
+ public static final String OPCODE_UPDATE_APPLICATION = "UPDATE_APPLICATION";
+ public static final String OPCODE_UNINSTALL_APPLICATION = "UNINSTALL_APPLICATION";
+ }
+
+ public class WebAppConstants {
+ public static final String WEBAPP = "webapp";
+ public static final String LABEL = "label";
+ public static final String IS_REMOVE_APP = "isRemoveApp";
+ public static final String NAME = "name";
+ }
+
+ public class RestConstants {
+ public static final String USERNAME = "username";
+ public static final String PASSWORD = "password";
+ public static final String AUTHORIZATION = "Authorization";
+ public static final String BEARER = "Bearer ";
+ public static final String BASIC = "Basic ";
+ public static final String COLON = ":";
+ public static final String GRANT_TYPE = "grant_type";
+ public static final String CONTENT_TYPE = "Content-Type";
+ public static final String ACCESS_TOKEN = "accessToken";
+ public static final String ACCEPT = "Accept";
+ public static final String APPLICATION_JSON = "application/json";
+ public static final String APPLICATION_FORM_URL_ENCODED = "application/x-www-form-urlencoded";
+ }
+
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/OAuthRequestInterceptor.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/OAuthRequestInterceptor.java
new file mode 100755
index 000000000..889b81bed
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/OAuthRequestInterceptor.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client;
+
+import feign.Feign;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import feign.auth.BasicAuthRequestInterceptor;
+import feign.gson.GsonDecoder;
+import feign.gson.GsonEncoder;
+import feign.jaxrs.JAXRSContract;
+import org.wso2.carbon.appmgt.mdm.restconnector.Constants;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.AccessTokenInfo;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApiApplicationKey;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApiApplicationRegistrationService;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApiRegistrationProfile;
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.TokenIssuerService;
+import org.wso2.carbon.appmgt.mdm.restconnector.config.AuthorizationConfigurationManager;
+import org.wso2.carbon.appmgt.mdm.restconnector.internal.AuthorizationDataHolder;
+
+/**
+ * This is a request interceptor to add oauth token header.
+ */
+public class OAuthRequestInterceptor implements RequestInterceptor {
+ private AccessTokenInfo tokenInfo;
+ private String refreshTimeOffset;
+ private static final String API_APPLICATION_REGISTRATION_CONTEXT = "/api-application-registration";
+ private static final String DEVICE_MANAGEMENT_SERVICE_TAG[] = {"device_management"};
+ private static final String APPLICATION_NAME = "appm_restconnector_application";
+ private static final String PASSWORD_GRANT_TYPE = "password";
+ private static final String REFRESH_GRANT_TYPE = "refreshToken";
+ private ApiApplicationRegistrationService apiApplicationRegistrationService;
+ private TokenIssuerService tokenIssuerService;
+
+ /**
+ * Creates an interceptor that authenticates all requests.
+ */
+ public OAuthRequestInterceptor() {
+ refreshTimeOffset = AuthorizationConfigurationManager.getInstance().getTokenRefreshTimeOffset();
+ String username = AuthorizationConfigurationManager.getInstance().getUserName();
+ String password = AuthorizationConfigurationManager.getInstance().getPassword();
+ apiApplicationRegistrationService = Feign.builder().requestInterceptor(
+ new BasicAuthRequestInterceptor(username, password))
+ .contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
+ .target(ApiApplicationRegistrationService.class,
+ AuthorizationConfigurationManager.getInstance().getServerURL() +
+ API_APPLICATION_REGISTRATION_CONTEXT);
+ AuthorizationDataHolder.getInstance().setApiApplicationRegistrationService(apiApplicationRegistrationService);
+
+ }
+
+ @Override
+ public void apply(RequestTemplate template) {
+ if (tokenInfo == null) {
+ ApiRegistrationProfile apiRegistrationProfile = new ApiRegistrationProfile();
+ apiRegistrationProfile.setApplicationName(APPLICATION_NAME);
+ apiRegistrationProfile.setIsAllowedToAllDomains(true);
+ apiRegistrationProfile.setIsMappingAnExistingOAuthApp(false);
+ apiRegistrationProfile.setTags(DEVICE_MANAGEMENT_SERVICE_TAG);
+ ApiApplicationKey apiApplicationKey = apiApplicationRegistrationService.register(apiRegistrationProfile);
+ String consumerKey = apiApplicationKey.getConsumerKey();
+ String consumerSecret = apiApplicationKey.getConsumerSecret();
+ String username = AuthorizationConfigurationManager.getInstance().getUserName();
+ String password = AuthorizationConfigurationManager.getInstance().getPassword();
+ tokenIssuerService = Feign.builder().requestInterceptor(
+ new BasicAuthRequestInterceptor(consumerKey, consumerSecret))
+ .contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
+ .target(TokenIssuerService.class, AuthorizationConfigurationManager.getInstance().getTokenApiURL());
+ tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password);
+ tokenInfo.setExpiresIn(System.currentTimeMillis() + tokenInfo.getExpiresIn());
+ }
+ synchronized (this) {
+ if (System.currentTimeMillis() + Long.parseLong(refreshTimeOffset) > tokenInfo.getExpiresIn()) {
+ tokenInfo = tokenIssuerService.getToken(REFRESH_GRANT_TYPE, tokenInfo.getRefreshToken());
+ tokenInfo.setExpiresIn(System.currentTimeMillis() + tokenInfo.getExpiresIn());
+ }
+ }
+ String headerValue = Constants.RestConstants.BEARER + tokenInfo.getAccessToken();
+ template.header(Constants.RestConstants.AUTHORIZATION, headerValue);
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/AccessTokenInfo.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/AccessTokenInfo.java
new file mode 100755
index 000000000..a776b9013
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/AccessTokenInfo.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+/**
+ * This hold access token info that returned from the api call.
+ */
+public class AccessTokenInfo {
+ public String tokenType;
+ public long expiresIn;
+ public String refreshToken;
+ public String accessToken;
+
+ public String getTokenType() {
+ return tokenType;
+ }
+
+ public void setTokenType(String tokenType) {
+ this.tokenType = tokenType;
+ }
+
+ public long getExpiresIn() {
+ return expiresIn;
+ }
+
+ public void setExpiresIn(long expiresIn) {
+ this.expiresIn = expiresIn;
+ }
+
+ public String getRefreshToken() {
+ return refreshToken;
+ }
+
+ public void setRefreshToken(String refreshToken) {
+ this.refreshToken = refreshToken;
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public void setAccessToken(String accessToken) {
+ this.accessToken = accessToken;
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationKey.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationKey.java
new file mode 100644
index 000000000..32dcc8718
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationKey.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+/**
+ * This holds api application consumer key and secret.
+ */
+public class ApiApplicationKey {
+ private String clientId;
+ private String clientSecret;
+
+ public String getConsumerKey() {
+ return this.clientId;
+ }
+
+ public void setClientId(String consumerKey) {
+ this.clientId = consumerKey;
+ }
+
+ public String getConsumerSecret() {
+ return this.clientSecret;
+ }
+
+ public void setClientSecret(String consumerSecret) {
+ this.clientSecret = consumerSecret;
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationRegistrationService.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationRegistrationService.java
new file mode 100755
index 000000000..65f5db187
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiApplicationRegistrationService.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+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;
+
+/**
+ * This is the application registration service that exposed for apimApplicationRegistration.
+ */
+
+@Path("/register")
+public interface ApiApplicationRegistrationService {
+
+ /**
+ * This method is used to register api application.
+ *
+ * @param registrationProfile contains the necessary attributes that are needed in order to register an app
+ */
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ ApiApplicationKey register(ApiRegistrationProfile registrationProfile);
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiRegistrationProfile.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiRegistrationProfile.java
new file mode 100755
index 000000000..15179e1a9
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApiRegistrationProfile.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+
+/**
+ * This class represents the data that are required to register the oauth application.
+ */
+public class ApiRegistrationProfile {
+ public String applicationName;
+ public String tags[];
+ public boolean isAllowedToAllDomains;
+ public String consumerKey;
+ public String consumerSecret;
+ public boolean isMappingAnExistingOAuthApp;
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public void setApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ public String[] getTags() {
+ return tags;
+ }
+
+ public void setTags(String[] tags) {
+ this.tags = tags;
+ }
+
+ public boolean isAllowedToAllDomains() {
+ return isAllowedToAllDomains;
+ }
+
+ public void setIsAllowedToAllDomains(boolean isAllowedToAllDomains) {
+ this.isAllowedToAllDomains = isAllowedToAllDomains;
+ }
+
+ public boolean isMappingAnExistingOAuthApp() {
+ return isMappingAnExistingOAuthApp;
+ }
+
+ public void setIsMappingAnExistingOAuthApp(boolean isMappingAnExistingOAuthApp) {
+ this.isMappingAnExistingOAuthApp = isMappingAnExistingOAuthApp;
+ }
+
+ public String getConsumerKey() {
+ return consumerKey;
+ }
+
+ public void setConsumerKey(String consumerKey) {
+ this.consumerKey = consumerKey;
+ }
+
+ public String getConsumerSecret() {
+ return consumerSecret;
+ }
+
+ public void setConsumerSecret(String consumerSecret) {
+ this.consumerSecret = consumerSecret;
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationManagementAdminService.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationManagementAdminService.java
new file mode 100644
index 000000000..3b390a7a8
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationManagementAdminService.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
+
+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;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Path("/admin/applications")
+
+/**
+ * This interface provided the definition of the application management service.
+ */
+public interface ApplicationManagementAdminService {
+
+ /**
+ * Install application.
+ *
+ * @param applicationWrapper {@link ApplicationWrapper} object
+ * @return {@link Activity} object
+ */
+ @POST
+ @Path("/install-application")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ Activity installApplication(ApplicationWrapper applicationWrapper);
+
+ /**
+ * Uninstall application.
+ *
+ * @param applicationWrapper {@link ApplicationWrapper} object
+ * @return {@link Activity} object
+ */
+ @POST
+ @Path("/uninstall-application")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ Activity uninstallApplication(ApplicationWrapper applicationWrapper);
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationWrapper.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationWrapper.java
new file mode 100644
index 000000000..4e0d497d1
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/ApplicationWrapper.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import org.wso2.carbon.appmgt.mobile.beans.DeviceIdentifier;
+
+import java.util.List;
+
+/**
+ * This DTO class is used to send application details and devices details to installation/uninstallation service.
+ */
+public class ApplicationWrapper {
+ private List userNameList;
+ private List roleNameList;
+ private List deviceIdentifiers;
+ private MobileApp application;
+
+ public List getUserNameList() {
+ return userNameList;
+ }
+
+ public void setUserNameList(List userNameList) {
+ this.userNameList = userNameList;
+ }
+
+ public List getDeviceIdentifiers() {
+ return deviceIdentifiers;
+ }
+
+ public void setDeviceIdentifiers(
+ List deviceIdentifiers) {
+ this.deviceIdentifiers = deviceIdentifiers;
+ }
+
+ public List getRoleNameList() {
+ return roleNameList;
+ }
+
+ public void setRoleNameList(List roleNameList) {
+ this.roleNameList = roleNameList;
+ }
+
+ public MobileApp getApplication() {
+ return application;
+ }
+
+ public void setApplication(MobileApp application) {
+ this.application = application;
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/BasePaginatedResult.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/BasePaginatedResult.java
new file mode 100644
index 000000000..0b17804dc
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/BasePaginatedResult.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Number of Resources returned.
+ */
+public class BasePaginatedResult {
+ @ApiModelProperty(value = "Number of total resources.", example = "2")
+ @JsonProperty("count")
+ private int count;
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/Device.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/Device.java
new file mode 100644
index 000000000..24916c1fa
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/Device.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import org.wso2.carbon.device.mgt.common.Feature;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * The DTO class of device.
+ */
+public class Device implements Serializable {
+ private static final long serialVersionUID = 1998101711L;
+ private int id;
+ private String name;
+ private String type;
+ private String description;
+ private String deviceIdentifier;
+ private EnrolmentInfo enrolmentInfo;
+
+ public Device() {
+ }
+
+ public Device(String name, String type, String description, String deviceId, EnrolmentInfo enrolmentInfo,
+ List features, List properties) {
+ this.name = name;
+ this.type = type;
+ this.description = description;
+ this.deviceIdentifier = deviceId;
+ this.enrolmentInfo = enrolmentInfo;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getDeviceIdentifier() {
+ return deviceIdentifier;
+ }
+
+ public void setDeviceIdentifier(String deviceIdentifier) {
+ this.deviceIdentifier = deviceIdentifier;
+ }
+
+ public EnrolmentInfo getEnrolmentInfo() {
+ return enrolmentInfo;
+ }
+
+ public void setEnrolmentInfo(EnrolmentInfo enrolmentInfo) {
+ this.enrolmentInfo = enrolmentInfo;
+ }
+
+ public static class Property {
+
+ private String name;
+ private String value;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "device [" +
+ "name=" + name + ";" +
+ "type=" + type + ";" +
+ "description=" + description + ";" +
+ "identifier=" + deviceIdentifier + ";" +
+ "EnrolmentInfo[" +
+ "owner=" + enrolmentInfo.getOwner() + ";" +
+ "ownership=" + enrolmentInfo.getOwnership() + ";" +
+ "status=" + enrolmentInfo.getStatus() + ";" +
+ "]" +
+ "]";
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (!(o instanceof org.wso2.carbon.device.mgt.common.Device))
+ return false;
+
+ org.wso2.carbon.device.mgt.common.Device device = (org.wso2.carbon.device.mgt.common.Device) o;
+
+ return getDeviceIdentifier().equals(device.getDeviceIdentifier());
+
+ }
+
+ @Override
+ public int hashCode() {
+ return getDeviceIdentifier().hashCode();
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceList.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceList.java
new file mode 100644
index 000000000..cbb866175
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceList.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DeviceList extends BasePaginatedResult {
+ private List devices = new ArrayList<>();
+
+ @ApiModelProperty(value = "List of devices returned")
+ @JsonProperty("devices")
+ public List getList() {
+ return devices;
+ }
+
+ public void setList(List devices) {
+ this.devices = devices;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n");
+
+ sb.append(" count: ").append(getCount()).append(",\n");
+ sb.append(" devices: [").append(devices).append("\n");
+ sb.append("]}\n");
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceManagementAdminService.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceManagementAdminService.java
new file mode 100644
index 000000000..0bed67b3a
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/DeviceManagementAdminService.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Path("/devices")
+
+/**
+ * This interface provided the definition of the device management service.
+ */
+public interface DeviceManagementAdminService {
+ /**
+ * Get devices.
+ *
+ * @param user Username
+ * @param role Role of the user
+ * @return {@link DeviceList} object
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ DeviceList getDevices(@QueryParam("user") String user, @QueryParam("role") String role);
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/EnrolmentInfo.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/EnrolmentInfo.java
new file mode 100644
index 000000000..66cd08304
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/EnrolmentInfo.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import java.io.Serializable;
+
+/**
+ * The DTO class for enrollment information.
+ */
+public class EnrolmentInfo implements Serializable {
+ private static final long serialVersionUID = 1998101712L;
+
+ public enum Status {
+ CREATED, ACTIVE, INACTIVE, UNREACHABLE, UNCLAIMED, SUSPENDED, BLOCKED, REMOVED, DISENROLLMENT_REQUESTED
+ }
+
+ public enum OwnerShip {
+ BYOD, COPE
+ }
+
+ private int id;
+ private OwnerShip ownership;
+ private Status status;
+ private String owner;
+ private Long dateOfEnrolment;
+ private Long dateOfLastUpdate;
+
+ public EnrolmentInfo() {
+ }
+
+ public EnrolmentInfo(String owner, OwnerShip ownership, Status status) {
+ this.owner = owner;
+ this.ownership = ownership;
+ this.status = status;
+ }
+
+ public Long getDateOfEnrolment() {
+ return dateOfEnrolment;
+ }
+
+ public void setDateOfEnrolment(Long dateOfEnrolment) {
+ this.dateOfEnrolment = dateOfEnrolment;
+ }
+
+ public Long getDateOfLastUpdate() {
+ return dateOfLastUpdate;
+ }
+
+ public void setDateOfLastUpdate(Long dateOfLastUpdate) {
+ this.dateOfLastUpdate = dateOfLastUpdate;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+
+ public OwnerShip getOwnership() {
+ return ownership;
+ }
+
+ public void setOwnership(OwnerShip ownership) {
+ this.ownership = ownership;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public void setStatus(Status status) {
+ this.status = status;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EnrolmentInfo) {
+ EnrolmentInfo tempInfo = (EnrolmentInfo) obj;
+ if (this.owner != null && this.ownership != null) {
+ if (this.owner.equals(tempInfo.getOwner()) && this.ownership.equals(tempInfo.getOwnership())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return owner.hashCode() ^ ownership.hashCode();
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileApp.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileApp.java
new file mode 100644
index 000000000..18a7b853f
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileApp.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import java.util.Properties;
+
+/**
+ * This class represents the generic mobile Application information which is used by AppM.
+ */
+public class MobileApp {
+
+ private String id;
+ private String name;
+ private MobileAppTypes type;
+ private String platform;
+ private String version;
+ private String identifier;
+ private String iconImage;
+ private String packageName;
+ private String appIdentifier;
+ private String location;
+ private Properties properties;
+
+ public MobileAppTypes getType() {
+ return type;
+ }
+
+ public void setType(MobileAppTypes type) {
+ this.type = type;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPlatform() {
+ return platform;
+ }
+
+ public void setPlatform(String platform) {
+ this.platform = platform;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ public void setIdentifier(String identifier) {
+ this.identifier = identifier;
+ }
+
+ public String getIconImage() {
+ return iconImage;
+ }
+
+ public void setIconImage(String iconImage) {
+ this.iconImage = iconImage;
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
+
+ public String getAppIdentifier() {
+ return appIdentifier;
+ }
+
+ public void setAppIdentifier(String appIdentifier) {
+ this.appIdentifier = appIdentifier;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileAppTypes.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileAppTypes.java
new file mode 100644
index 000000000..f3127ab25
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/MobileAppTypes.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+/**
+ * This enum contains the mobile app types.
+ */
+public enum MobileAppTypes {
+ ENTERPRISE, WEBAPP, PUBLIC
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/TokenIssuerService.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/TokenIssuerService.java
new file mode 100755
index 000000000..81e44bb2c
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/authorization/client/dto/TokenIssuerService.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.authorization.client.dto;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+/**
+ * This hold the api definition that is used as a contract with netflix feign.
+ */
+@Path("/token")
+public interface TokenIssuerService {
+
+ /**
+ * Get a token for password grant type.
+ * @param grant Token grant type
+ * @param username Username
+ * @param password Password
+ * @return {@link AccessTokenInfo} object
+ */
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username,
+ @QueryParam("password") String password);
+
+ /**
+ * Get a token for refresh grant type.
+ * @param grant Token grant type
+ * @param refreshToken Refresh token
+ * @return {@link AccessTokenInfo} object
+ */
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("refreshToken") String refreshToken);
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/config/AuthorizationConfigurationManager.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/config/AuthorizationConfigurationManager.java
new file mode 100644
index 000000000..247cbfad7
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/config/AuthorizationConfigurationManager.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.config;
+
+import org.wso2.carbon.appmgt.mdm.restconnector.Constants;
+import org.wso2.carbon.appmgt.mobile.utils.MobileConfigurations;
+
+import java.util.HashMap;
+
+public class AuthorizationConfigurationManager {
+
+ private String tokenApiURL;
+ private String imageURL;
+ private String serverURL;
+ private String userName;
+ private String password;
+ private String tokenRefreshTimeOffset;
+
+ private static AuthorizationConfigurationManager authorizationConfigurationManager = new
+ AuthorizationConfigurationManager();
+
+ private AuthorizationConfigurationManager() {
+ MobileConfigurations configurations = MobileConfigurations.getInstance();
+ HashMap configProperties = configurations.getActiveMDMProperties();
+ setTokenApiURL(configProperties.get(Constants.PROPERTY_TOKEN_API_URL));
+ setImageURL(configProperties.get(Constants.PROPERTY_IMAGE_URL));
+ setServerURL(configProperties.get(Constants.PROPERTY_SERVER_URL));
+ setUserName(configProperties.get(Constants.PROPERTY_USERNAME));
+ setPassword(configProperties.get(Constants.PROPERTY_PASSWORD));
+ setTokenRefreshTimeOffset(configProperties.get(Constants.PROPERTY_TOKEN_REFRESH_TIME_OFFSET));
+ }
+
+ public static AuthorizationConfigurationManager getInstance() {
+ return authorizationConfigurationManager;
+ }
+
+ public String getTokenApiURL() {
+ return tokenApiURL;
+ }
+
+ public void setTokenApiURL(String tokenApiURL) {
+ this.tokenApiURL = tokenApiURL;
+ }
+
+ public String getImageURL() {
+ return imageURL;
+ }
+
+ public void setImageURL(String imageURL) {
+ this.imageURL = imageURL;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getServerURL() {
+ return serverURL;
+ }
+
+ public void setServerURL(String serverURL) {
+ this.serverURL = serverURL;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public static AuthorizationConfigurationManager getAuthorizationConfigurationManager() {
+ return authorizationConfigurationManager;
+ }
+
+ public static void setAuthorizationConfigurationManager(
+ AuthorizationConfigurationManager authorizationConfigurationManager) {
+ AuthorizationConfigurationManager.authorizationConfigurationManager = authorizationConfigurationManager;
+ }
+
+ public String getTokenRefreshTimeOffset() {
+ return tokenRefreshTimeOffset;
+ }
+
+ public void setTokenRefreshTimeOffset(String tokenRefreshTimeOffset) {
+ this.tokenRefreshTimeOffset = tokenRefreshTimeOffset;
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/AuthorizationDataHolder.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/AuthorizationDataHolder.java
new file mode 100644
index 000000000..15a53b7ff
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/AuthorizationDataHolder.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.internal;
+
+import org.wso2.carbon.appmgt.mdm.restconnector.authorization.client.dto.ApiApplicationRegistrationService;
+
+public class AuthorizationDataHolder {
+ private static AuthorizationDataHolder thisInstance = new AuthorizationDataHolder();
+
+ private ApiApplicationRegistrationService apiApplicationRegistrationService;
+
+ private AuthorizationDataHolder() {
+ }
+
+ public static AuthorizationDataHolder getInstance() {
+ return thisInstance;
+ }
+
+ public ApiApplicationRegistrationService getApiApplicationRegistrationService() {
+ return apiApplicationRegistrationService;
+ }
+
+ public void setApiApplicationRegistrationService(
+ ApiApplicationRegistrationService apiApplicationRegistrationService) {
+ this.apiApplicationRegistrationService = apiApplicationRegistrationService;
+ }
+}
diff --git a/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/MDMComponent.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/MDMComponent.java
new file mode 100644
index 000000000..c75ed0981
--- /dev/null
+++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.restconnector/src/main/java/org/wso2/carbon/appmgt/mdm/restconnector/internal/MDMComponent.java
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright (c) 2017, 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.appmgt.mdm.restconnector.internal;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.appmgt.mdm.restconnector.ApplicationOperationsImpl;
+import org.wso2.carbon.appmgt.mobile.interfaces.ApplicationOperations;
+
+/**
+ * @scr.component name="org.wso2.carbon.appmgt.mdm.restconnector" immediate="true"
+ */
+public class MDMComponent {
+ private static final Log log = LogFactory.getLog(MDMComponent.class);
+ private ServiceRegistration mdmServiceRegistration;
+
+ protected void activate(ComponentContext context) {
+ BundleContext bundleContext = context.getBundleContext();
+ if (log.isDebugEnabled()) {
+ log.debug("WSO2MDM MDM Component activated");
+ }
+ try {
+ mdmServiceRegistration = bundleContext.registerService(ApplicationOperations.class.getName(), new
+ ApplicationOperationsImpl(), null);
+ } catch (Throwable e) {
+ log.error("Failed to activate org.wso2.carbon.appmgt.mdm.restconnector.internal." +
+ "MDMComponent : " + e);
+ }
+ }
+
+ protected void deactivate(ComponentContext context) {
+ if (mdmServiceRegistration != null) {
+ mdmServiceRegistration.unregister();
+ mdmServiceRegistration = null;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("WSO2MDM MDM Component deactivated");
+ }
+ }
+}
\ No newline at end of file
diff --git a/components/extensions/appm-connector/pom.xml b/components/extensions/appm-connector/pom.xml
index 2e5b0ed9a..41a0f2dae 100644
--- a/components/extensions/appm-connector/pom.xml
+++ b/components/extensions/appm-connector/pom.xml
@@ -34,6 +34,7 @@
org.wso2.carbon.appmgt.mdm.osgiconnector
+ org.wso2.carbon.appmgt.mdm.restconnector
diff --git a/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml
new file mode 100644
index 000000000..51506ea4f
--- /dev/null
+++ b/features/extensions-feature/org.wso2.carbon.appmgt.mdm.restconnector.feature/pom.xml
@@ -0,0 +1,97 @@
+
+
+
+ 4.0.0
+
+
+ org.wso2.carbon.devicemgt-plugins
+ extensions-feature
+ 3.0.9-SNAPSHOT
+ ../pom.xml
+
+
+ org.wso2.carbon.appmgt.mdm.restconnector.feature
+ pom
+ 3.0.9-SNAPSHOT
+ WSO2 Carbon - App management MDM REST Connector
+ http://wso2.org
+ This feature contains the core bundles required for APP management MDM REST connection
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.appmgt.mdm.restconnector
+ 3.0.9-SNAPSHOT
+
+
+ org.apache.ws.commons.axiom
+ axiom-api
+
+
+ org.apache.ws.commons.axiom
+ axiom-impl
+
+
+
+
+ com.googlecode.plist
+ dd-plist
+
+
+
+
+
+
+ org.wso2.maven
+ carbon-p2-plugin
+ ${carbon.p2.plugin.version}
+
+
+ 4-p2-feature-generation
+ package
+
+ p2-feature-gen
+
+
+ org.wso2.carbon.appmgt.mdm.restconnector
+ ../etc/feature.properties
+
+
+ org.wso2.carbon.p2.category.type:server
+
+ org.eclipse.equinox.p2.type.group:false
+
+
+
+
+
+ org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.restconnector:${carbon.devicemgt.plugins.version}
+
+ com.googlecode.plist:dd-plist:${googlecode.plist.version}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/features/extensions-feature/pom.xml b/features/extensions-feature/pom.xml
index 253b52d26..93339799d 100644
--- a/features/extensions-feature/pom.xml
+++ b/features/extensions-feature/pom.xml
@@ -35,6 +35,7 @@
org.wso2.carbon.appmgt.mdm.osgiconnector.feature
+ org.wso2.carbon.appmgt.mdm.restconnector.feature
org.wso2.carbon.device.mgt.adapter.feature
org.wso2.carbon.andes.extensions.device.mgt.mqtt.authorization.feature
org.wso2.extension.siddhi.execution.json.feature
diff --git a/pom.xml b/pom.xml
index 6ed8c37b3..c772e4c76 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1248,7 +1248,7 @@
[2.0.0, 3.0.0)
- 1.2.13
+ 1.2.15
3.0.9-SNAPSHOT