mharindu 10 years ago
commit 6eb1af110c

@ -0,0 +1,44 @@
/*
*
* Copyright (c) 2015, 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.common;
/**
* DTO of the consumer key and secret
*/
public class Credential {
String consumerKey;
String consumerSecret;
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;
}
}

@ -17,7 +17,9 @@
*/ */
package org.wso2.carbon.device.mgt.common; package org.wso2.carbon.device.mgt.common;
public class DeviceIdentifier { import java.io.Serializable;
public class DeviceIdentifier implements Serializable{
private String id; private String id;
private String type; private String type;
@ -29,7 +31,6 @@ public class DeviceIdentifier {
public void setType(String type) { public void setType(String type) {
this.type = type; this.type = type;
} }
public String getId() { public String getId() {
return id; return id;
} }

@ -0,0 +1,24 @@
/*
*
* Copyright (c) 2015, 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.common;
public enum Platform {
ANDROID, IOS, WINDOWS;
}

@ -15,11 +15,12 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
package org.wso2.carbon.device.mgt.core.app.mgt; package org.wso2.carbon.device.mgt.common.app.mgt;
import org.wso2.carbon.device.mgt.common.Credential;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.dto.Application; import java.util.List;
/** /**
* This will handle the Application management side of MDM by acting a bridge between * This will handle the Application management side of MDM by acting a bridge between
@ -68,4 +69,7 @@ public interface AppManagerConnector {
*/ */
Credential getClientCredentials() throws AppManagerConnectorException; Credential getClientCredentials() throws AppManagerConnectorException;
void installApplication(Operation operation, List<DeviceIdentifier> deviceIdentifiers) throws
AppManagerConnectorException;
} }

@ -16,7 +16,7 @@
* under the License. * under the License.
*/ */
package org.wso2.carbon.device.mgt.core.app.mgt; package org.wso2.carbon.device.mgt.common.app.mgt;
/** /**
* Handles the exceptions related to Application management. * Handles the exceptions related to Application management.

@ -0,0 +1,87 @@
/*
*
* Copyright (c) 2015, 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.common.app.mgt;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.Platform;
import java.util.List;
public class Application {
private String applicationName;
private String appId;
private String locationUrl;
private String imageUrl;
private String version;
private String appType;
public String getAppType() {
return appType;
}
public void setAppType(String appType) {
this.appType = appType;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getLocationUrl() {
return locationUrl;
}
public void setLocationUrl(String locationUrl) {
this.locationUrl = locationUrl;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}

@ -0,0 +1,64 @@
/*
*
* Copyright (c) 2015, 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.common.app.mgt;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import java.util.List;
public class ApplicationWrapper {
private List<String> userNameList;
private List<String> roleNameList;
private List<DeviceIdentifier> deviceIdentifiers;
private Application application;
public List<String> getUserNameList() {
return userNameList;
}
public void setUserNameList(List<String> userNameList) {
this.userNameList = userNameList;
}
public List<String> getRoleNameList() {
return roleNameList;
}
public void setRoleNameList(List<String> roleNameList) {
this.roleNameList = roleNameList;
}
public List<DeviceIdentifier> getDeviceIdentifiers() {
return deviceIdentifiers;
}
public void setDeviceIdentifiers(List<DeviceIdentifier> deviceIdentifiers) {
this.deviceIdentifiers = deviceIdentifiers;
}
public Application getApplication() {
return application;
}
public void setApplication(Application application) {
this.application = application;
}
}

@ -0,0 +1,33 @@
/*
*
* Copyright (c) 2015, 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.common.spi;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import java.util.List;
public interface AppManager {
void installApplication(Operation operation, List<DeviceIdentifier> deviceIdentifiers)
throws AppManagerConnectorException;
}

@ -18,7 +18,10 @@
package org.wso2.carbon.device.mgt.common.spi; package org.wso2.carbon.device.mgt.common.spi;
import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.FeatureManager;
import java.util.List; import java.util.List;
@ -31,14 +34,14 @@ public interface DeviceManager {
/** /**
* Method to retrieve the provider type that implements DeviceManager interface. * Method to retrieve the provider type that implements DeviceManager interface.
* *
* @return Returns provider type * @return Returns provider type
*/ */
String getProviderType(); String getProviderType();
/** /**
* Method to return feature manager implementation associated with a particular platform-specific plugin. * Method to return feature manager implementation associated with a particular platform-specific plugin.
* *
* @return Returns an instance of feature manager * @return Returns an instance of feature manager
*/ */
FeatureManager getFeatureManager(); FeatureManager getFeatureManager();
@ -110,7 +113,7 @@ public interface DeviceManager {
* Method to retrieve metadata of a device corresponding to a particular type that carries a specific identifier. * Method to retrieve metadata of a device corresponding to a particular type that carries a specific identifier.
* *
* @param deviceId Fully qualified device identifier * @param deviceId Fully qualified device identifier
* @return Metadata corresponding to a particular device * @return Metadata corresponding to a particular device
* @throws DeviceManagementException If some unusual behaviour is observed obtaining the device object * @throws DeviceManagementException If some unusual behaviour is observed obtaining the device object
*/ */
Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException; Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
@ -133,5 +136,4 @@ public interface DeviceManager {
*/ */
boolean setOwnership(DeviceIdentifier deviceId, String ownershipType) throws DeviceManagementException; boolean setOwnership(DeviceIdentifier deviceId, String ownershipType) throws DeviceManagementException;
} }

@ -0,0 +1,24 @@
/*
*
* Copyright (c) 2015, 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.common.spi;
public interface DeviceMgtService extends DeviceManager,AppManager {
}

@ -18,7 +18,7 @@
package org.wso2.carbon.device.mgt.core; package org.wso2.carbon.device.mgt.core;
import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceMgtService;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
import java.util.HashMap; import java.util.HashMap;
@ -26,13 +26,13 @@ import java.util.Map;
public class DeviceManagementRepository { public class DeviceManagementRepository {
private Map<String, DeviceManager> providers; private Map<String, DeviceMgtService> providers;
public DeviceManagementRepository() { public DeviceManagementRepository() {
providers = new HashMap<String, DeviceManager>(); providers = new HashMap<String, DeviceMgtService>();
} }
public void addDeviceManagementProvider(DeviceManager provider) throws DeviceManagementException { public void addDeviceManagementProvider(DeviceMgtService provider) throws DeviceManagementException {
String deviceType = provider.getProviderType(); String deviceType = provider.getProviderType();
try { try {
DeviceManagerUtil.registerDeviceType(deviceType); DeviceManagerUtil.registerDeviceType(deviceType);
@ -43,7 +43,7 @@ public class DeviceManagementRepository {
providers.put(deviceType, provider); providers.put(deviceType, provider);
} }
public void removeDeviceManagementProvider(DeviceManager provider) throws DeviceManagementException { public void removeDeviceManagementProvider(DeviceMgtService provider) throws DeviceManagementException {
String deviceType = provider.getProviderType(); String deviceType = provider.getProviderType();
try { try {
DeviceManagerUtil.unregisterDeviceType(deviceType); DeviceManagerUtil.unregisterDeviceType(deviceType);
@ -54,7 +54,7 @@ public class DeviceManagementRepository {
providers.remove(deviceType); providers.remove(deviceType);
} }
public DeviceManager getDeviceManagementProvider(String type) { public DeviceMgtService getDeviceManagementProvider(String type) {
return providers.get(type); return providers.get(type);
} }

@ -22,10 +22,8 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceManager;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.email.NotificationMessages; import org.wso2.carbon.device.mgt.core.config.email.NotificationMessages;
@ -37,9 +35,8 @@ import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.dto.Status; import org.wso2.carbon.device.mgt.core.dto.Status;
import org.wso2.carbon.device.mgt.core.email.EmailConstants; import org.wso2.carbon.device.mgt.core.email.EmailConstants;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.internal.EmailServiceDataHolder; import org.wso2.carbon.device.mgt.core.internal.EmailServiceDataHolder;
import org.wso2.carbon.device.mgt.core.license.mgt.LicenseManagerImpl;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
@ -54,8 +51,6 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
private DeviceDAO deviceDAO; private DeviceDAO deviceDAO;
private DeviceTypeDAO deviceTypeDAO; private DeviceTypeDAO deviceTypeDAO;
private DeviceManagementRepository pluginRepository; private DeviceManagementRepository pluginRepository;
private OperationManager operationManager;
private LicenseManager licenseManager;
private static Log log = LogFactory.getLog(DeviceManagementServiceProviderImpl.class); private static Log log = LogFactory.getLog(DeviceManagementServiceProviderImpl.class);
@ -63,15 +58,11 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
this.pluginRepository = pluginRepository; this.pluginRepository = pluginRepository;
this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO(); this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
this.operationManager = new OperationManagerImpl();
this.licenseManager = new LicenseManagerImpl();
} }
public DeviceManagementServiceProviderImpl(){ public DeviceManagementServiceProviderImpl() {
this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO(); this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
this.operationManager = new OperationManagerImpl();
this.licenseManager = new LicenseManagerImpl();
} }
@Override @Override
@ -104,7 +95,7 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
} }
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while obtaining the device for id " + throw new DeviceManagementException("Error occurred while obtaining the device for id " +
"'" + deviceId.getId() + "' and type:"+deviceId.getType(), e); "'" + deviceId.getId() + "' and type:" + deviceId.getType(), e);
} }
return convertedDevice; return convertedDevice;
} }
@ -256,7 +247,8 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
} }
@Override @Override
public void sendEnrolmentInvitation(EmailMessageProperties emailMessageProperties) throws DeviceManagementException { public void sendEnrolmentInvitation(EmailMessageProperties emailMessageProperties)
throws DeviceManagementException {
List<NotificationMessages> notificationMessages = DeviceConfigurationManager.getInstance() List<NotificationMessages> notificationMessages = DeviceConfigurationManager.getInstance()
.getNotificationMessagesConfig().getNotificationMessagesList(); .getNotificationMessagesConfig().getNotificationMessagesList();
@ -267,9 +259,9 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
String url = ""; String url = "";
String subject = ""; String subject = "";
for(NotificationMessages notificationMessage : notificationMessages){ for (NotificationMessages notificationMessage : notificationMessages) {
if (DeviceManagementConstants.EmailNotifications.ENROL_NOTIFICATION_TYPE. if (DeviceManagementConstants.EmailNotifications.ENROL_NOTIFICATION_TYPE.
equals(notificationMessage.getType())) { equals(notificationMessage.getType())) {
messageHeader = notificationMessage.getHeader(); messageHeader = notificationMessage.getHeader();
messageBody = notificationMessage.getBody(); messageBody = notificationMessage.getBody();
messageFooter = notificationMessage.getFooter(); messageFooter = notificationMessage.getFooter();
@ -283,18 +275,18 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
try { try {
messageHeader = messageHeader.replaceAll("\\{" + EmailConstants.EnrolmentEmailConstants.FIRST_NAME + "\\}", messageHeader = messageHeader.replaceAll("\\{" + EmailConstants.EnrolmentEmailConstants.FIRST_NAME + "\\}",
URLEncoder.encode(emailMessageProperties.getFirstName(), URLEncoder.encode(emailMessageProperties.getFirstName(),
EmailConstants.EnrolmentEmailConstants.ENCODED_SCHEME)); EmailConstants.EnrolmentEmailConstants.ENCODED_SCHEME));
messageBody = messageBody + System.getProperty("line.separator") + url.replaceAll("\\{" messageBody = messageBody + System.getProperty("line.separator") + url.replaceAll("\\{"
+ EmailConstants.EnrolmentEmailConstants.DOWNLOAD_URL + "\\}", + EmailConstants.EnrolmentEmailConstants.DOWNLOAD_URL + "\\}",
URLDecoder.decode(emailMessageProperties.getEnrolmentUrl(), URLDecoder.decode(emailMessageProperties.getEnrolmentUrl(),
EmailConstants.EnrolmentEmailConstants.ENCODED_SCHEME)); EmailConstants.EnrolmentEmailConstants.ENCODED_SCHEME));
messageBuilder.append(messageHeader).append(System.getProperty("line.separator")); messageBuilder.append(messageHeader).append(System.getProperty("line.separator"));
messageBuilder.append(messageBody).append(System.getProperty("line.separator")).append(messageFooter); messageBuilder.append(messageBody).append(System.getProperty("line.separator")).append(messageFooter);
} catch (IOException e) { } catch (IOException e) {
log.error("IO error in processing enrol email message "+emailMessageProperties); log.error("IO error in processing enrol email message " + emailMessageProperties);
throw new DeviceManagementException("Error replacing tags in email template '" + throw new DeviceManagementException("Error replacing tags in email template '" +
emailMessageProperties.getSubject() + "'", e); emailMessageProperties.getSubject() + "'", e);
} }
@ -314,9 +306,9 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
String url = ""; String url = "";
String subject = ""; String subject = "";
for(NotificationMessages notificationMessage : notificationMessages){ for (NotificationMessages notificationMessage : notificationMessages) {
if (DeviceManagementConstants.EmailNotifications.USER_REGISTRATION_NOTIFICATION_TYPE. if (DeviceManagementConstants.EmailNotifications.USER_REGISTRATION_NOTIFICATION_TYPE.
equals(notificationMessage.getType())) { equals(notificationMessage.getType())) {
messageHeader = notificationMessage.getHeader(); messageHeader = notificationMessage.getHeader();
messageBody = notificationMessage.getBody(); messageBody = notificationMessage.getBody();
messageFooter = notificationMessage.getFooter(); messageFooter = notificationMessage.getFooter();
@ -350,7 +342,7 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
messageBuilder.append(messageBody).append(System.getProperty("line.separator")).append(messageFooter); messageBuilder.append(messageBody).append(System.getProperty("line.separator")).append(messageFooter);
} catch (IOException e) { } catch (IOException e) {
log.error("IO error in processing enrol email message "+emailMessageProperties); log.error("IO error in processing enrol email message " + emailMessageProperties);
throw new DeviceManagementException("Error replacing tags in email template '" + throw new DeviceManagementException("Error replacing tags in email template '" +
emailMessageProperties.getSubject() + "'", e); emailMessageProperties.getSubject() + "'", e);
} }
@ -402,12 +394,12 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
@Override @Override
public License getLicense(String deviceType, String languageCode) throws LicenseManagementException { public License getLicense(String deviceType, String languageCode) throws LicenseManagementException {
return licenseManager.getLicense(deviceType, languageCode); return DeviceManagementDataHolder.getInstance().getLicenseManager().getLicense(deviceType, languageCode);
} }
@Override @Override
public boolean addLicense(String type, License license) throws LicenseManagementException { public boolean addLicense(String type, License license) throws LicenseManagementException {
return licenseManager.addLicense(type, license); return DeviceManagementDataHolder.getInstance().getLicenseManager().addLicense(type, license);
} }
public DeviceDAO getDeviceDAO() { public DeviceDAO getDeviceDAO() {
@ -425,55 +417,58 @@ public class DeviceManagementServiceProviderImpl implements DeviceManagementServ
@Override @Override
public boolean addOperation(Operation operation, List<DeviceIdentifier> devices) throws public boolean addOperation(Operation operation, List<DeviceIdentifier> devices) throws
OperationManagementException { OperationManagementException {
return operationManager.addOperation(operation, devices); return DeviceManagementDataHolder.getInstance().getOperationManager().addOperation(operation, devices);
} }
@Override @Override
public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementException { public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementException {
return operationManager.getOperations(deviceId); return DeviceManagementDataHolder.getInstance().getOperationManager().getOperations(deviceId);
} }
@Override @Override
public List<? extends Operation> getPendingOperations(DeviceIdentifier deviceId) throws OperationManagementException { public List<? extends Operation> getPendingOperations(DeviceIdentifier deviceId)
return operationManager.getPendingOperations(deviceId); throws OperationManagementException {
return DeviceManagementDataHolder.getInstance().getOperationManager().getPendingOperations(deviceId);
} }
@Override @Override
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException { public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
return operationManager.getNextPendingOperation(deviceId); return DeviceManagementDataHolder.getInstance().getOperationManager().getNextPendingOperation(deviceId);
} }
@Override @Override
public void updateOperation(int operationId, Operation.Status operationStatus) public void updateOperation(int operationId, Operation.Status operationStatus)
throws OperationManagementException { throws OperationManagementException {
operationManager.updateOperation(operationId, operationStatus); DeviceManagementDataHolder.getInstance().getOperationManager().updateOperation(operationId, operationStatus);
} }
@Override @Override
public void deleteOperation(int operationId) throws OperationManagementException { public void deleteOperation(int operationId) throws OperationManagementException {
operationManager.deleteOperation(operationId); DeviceManagementDataHolder.getInstance().getOperationManager().deleteOperation(operationId);
} }
@Override @Override
public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId, int operationId) public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId, int operationId)
throws OperationManagementException { throws OperationManagementException {
return operationManager.getOperationByDeviceAndOperationId(deviceId, operationId); return DeviceManagementDataHolder.getInstance().getOperationManager().getOperationByDeviceAndOperationId(
deviceId, operationId);
} }
@Override @Override
public List<? extends Operation> getOperationsByDeviceAndStatus(DeviceIdentifier identifier, public List<? extends Operation> getOperationsByDeviceAndStatus(DeviceIdentifier identifier,
Operation.Status status) throws OperationManagementException, DeviceManagementException { Operation.Status status) throws OperationManagementException, DeviceManagementException {
return operationManager.getOperationsByDeviceAndStatus(identifier, status); return DeviceManagementDataHolder.getInstance().getOperationManager().getOperationsByDeviceAndStatus(identifier,
status);
} }
@Override @Override
public Operation getOperation(int operationId) throws OperationManagementException { public Operation getOperation(int operationId) throws OperationManagementException {
return operationManager.getOperation(operationId); return DeviceManagementDataHolder.getInstance().getOperationManager().getOperation(operationId);
} }
@Override @Override
public List<? extends Operation> getOperationsForStatus(Operation.Status status) public List<? extends Operation> getOperationsForStatus(Operation.Status status)
throws OperationManagementException { throws OperationManagementException {
return operationManager.getOperationsForStatus(status); return DeviceManagementDataHolder.getInstance().getOperationManager().getOperationsForStatus(status);
} }
} }

@ -17,16 +17,20 @@
*/ */
package org.wso2.carbon.device.mgt.core.app.mgt; package org.wso2.carbon.device.mgt.core.app.mgt;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.Credential;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.core.dto.Application; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import java.util.List;
public class AppManagementServiceImpl implements AppManagerConnector { public class AppManagementServiceImpl implements AppManagerConnector {
@Override @Override
public Application[] getApplicationList(String domain, int pageNumber, public Application[] getApplicationList(String domain, int pageNumber, int size) throws AppManagerConnectorException {
int size) throws AppManagerConnectorException {
return DeviceManagementDataHolder.getInstance().getAppManager().getApplicationList(domain, pageNumber, size); return DeviceManagementDataHolder.getInstance().getAppManager().getApplicationList(domain, pageNumber, size);
} }
@ -48,4 +52,10 @@ public class AppManagementServiceImpl implements AppManagerConnector {
return DeviceManagementDataHolder.getInstance().getAppManager().getClientCredentials(); return DeviceManagementDataHolder.getInstance().getAppManager().getClientCredentials();
} }
@Override
public void installApplication(Operation operation, List<DeviceIdentifier> deviceIdentifiers)
throws AppManagerConnectorException {
DeviceManagementDataHolder.getInstance().getAppManager().installApplication(operation, deviceIdentifiers);
}
} }

@ -18,12 +18,26 @@
*/ */
package org.wso2.carbon.device.mgt.core.app.mgt; package org.wso2.carbon.device.mgt.core.app.mgt;
import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.core.DeviceManagementRepository;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig; import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
public class AppManagerConnectorFactory { public class AppManagerConnectorFactory {
private static DeviceManagementRepository pluginRepository;
public DeviceManagementRepository getPluginRepository() {
return pluginRepository;
}
public void setPluginRepository(DeviceManagementRepository pluginRepository) {
this.pluginRepository = pluginRepository;
}
public static AppManagerConnector getConnector(AppManagementConfig config) { public static AppManagerConnector getConnector(AppManagementConfig config) {
return new RemoteAppManagerConnector(config); return new RemoteAppManagerConnector(config, pluginRepository);
} }
} }

@ -23,19 +23,25 @@ import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory; import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.Credential;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.spi.DeviceMgtService;
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants; import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.core.DeviceManagementRepository;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig; import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.ServiceAuthenticator; import org.wso2.carbon.device.mgt.core.app.mgt.oauth.ServiceAuthenticator;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations; import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
import org.wso2.carbon.device.mgt.core.dto.Application;
import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceException; import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceException;
import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceStub; import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceStub;
import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO; import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO;
import java.rmi.RemoteException; import java.rmi.RemoteException;
import java.util.List;
/** /**
* Implements AppManagerConnector interface * Implements AppManagerConnector interface
@ -45,12 +51,14 @@ public class RemoteAppManagerConnector implements AppManagerConnector {
private ConfigurationContext configCtx; private ConfigurationContext configCtx;
private ServiceAuthenticator authenticator; private ServiceAuthenticator authenticator;
private String oAuthAdminServiceUrl; private String oAuthAdminServiceUrl;
private DeviceManagementRepository pluginRepository;
private static final String GET_APP_LIST_URL = "store/apis/assets/mobileapp?domain=carbon.super&page=1"; private static final String GET_APP_LIST_URL = "store/apis/assets/mobileapp?domain=carbon.super&page=1";
private static final Log log = LogFactory.getLog(RemoteAppManagerConnector.class); private static final Log log = LogFactory.getLog(RemoteAppManagerConnector.class);
public RemoteAppManagerConnector(AppManagementConfig appManagementConfig) { public RemoteAppManagerConnector(AppManagementConfig appManagementConfig, DeviceManagementRepository pluginRepository) {
IdentityConfigurations identityConfig = DeviceConfigurationManager.getInstance().getDeviceManagementConfig(). IdentityConfigurations identityConfig = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
getDeviceManagementConfigRepository().getIdentityConfigurations(); getDeviceManagementConfigRepository().getIdentityConfigurations();
this.authenticator = this.authenticator =
@ -63,6 +71,7 @@ public class RemoteAppManagerConnector implements AppManagerConnector {
throw new IllegalArgumentException("Error occurred while initializing Axis2 Configuration Context. " + throw new IllegalArgumentException("Error occurred while initializing Axis2 Configuration Context. " +
"Please check if an appropriate axis2.xml is provided", e); "Please check if an appropriate axis2.xml is provided", e);
} }
this.pluginRepository = pluginRepository;
} }
@Override @Override
@ -93,6 +102,16 @@ public class RemoteAppManagerConnector implements AppManagerConnector {
return credential; return credential;
} }
@Override
public void installApplication(Operation operation, List<DeviceIdentifier> deviceIdentifiers)
throws AppManagerConnectorException {
for(DeviceIdentifier deviceIdentifier:deviceIdentifiers){
DeviceMgtService dms = this.getPluginRepository().getDeviceManagementProvider(deviceIdentifier.getType());
dms.installApplication(operation,deviceIdentifiers);
}
}
private OAuthConsumerAppDTO getAppInfo() throws AppManagerConnectorException { private OAuthConsumerAppDTO getAppInfo() throws AppManagerConnectorException {
OAuthConsumerAppDTO appInfo = null; OAuthConsumerAppDTO appInfo = null;
try { try {
@ -133,4 +152,7 @@ public class RemoteAppManagerConnector implements AppManagerConnector {
throw new AppManagerConnectorException(msg, e); throw new AppManagerConnectorException(msg, e);
} }
public DeviceManagementRepository getPluginRepository() {
return pluginRepository;
}
} }

@ -19,8 +19,7 @@
package org.wso2.carbon.device.mgt.core.app.mgt.config; package org.wso2.carbon.device.mgt.core.app.mgt.config;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnectorException; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
import org.wso2.carbon.utils.CarbonUtils; import org.wso2.carbon.utils.CarbonUtils;

@ -21,7 +21,7 @@ package org.wso2.carbon.device.mgt.core.app.mgt.oauth;
import org.apache.axis2.client.Options; import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient; import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HttpTransportProperties; import org.apache.axis2.transport.http.HttpTransportProperties;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnectorException; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
/** /**
* Authenticate a given service client. * Authenticate a given service client.

@ -20,8 +20,9 @@
package org.wso2.carbon.device.mgt.core.internal; package org.wso2.carbon.device.mgt.core.internal;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService; import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnector; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig; import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig; import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
@ -40,6 +41,7 @@ public class DeviceManagementDataHolder {
private APIPublisherService apiPublisherService; private APIPublisherService apiPublisherService;
private AppManagerConnector appManager; private AppManagerConnector appManager;
private AppManagementConfig appManagerConfig; private AppManagementConfig appManagerConfig;
private OperationManager operationManager;
private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder(); private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder();
@ -126,4 +128,11 @@ public class DeviceManagementDataHolder {
this.appManagerConfig = appManagerConfig; this.appManagerConfig = appManagerConfig;
} }
public OperationManager getOperationManager() {
return operationManager;
}
public void setOperationManager(OperationManager operationManager) {
this.operationManager = operationManager;
}
} }

@ -27,7 +27,10 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceManager;
import org.wso2.carbon.device.mgt.common.spi.DeviceMgtService;
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants; import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.core.DeviceManagementRepository; import org.wso2.carbon.device.mgt.core.DeviceManagementRepository;
import org.wso2.carbon.device.mgt.core.DeviceManagementServiceProviderImpl; import org.wso2.carbon.device.mgt.core.DeviceManagementServiceProviderImpl;
@ -35,8 +38,8 @@ import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService;
import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherServiceImpl; import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherServiceImpl;
import org.wso2.carbon.device.mgt.core.api.mgt.APIRegistrationStartupObserver; import org.wso2.carbon.device.mgt.core.api.mgt.APIRegistrationStartupObserver;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementServiceImpl; import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementServiceImpl;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnector; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerConnectorException; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.core.app.mgt.RemoteAppManagerConnector; import org.wso2.carbon.device.mgt.core.app.mgt.RemoteAppManagerConnector;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig; import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfigurationManager; import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfigurationManager;
@ -47,6 +50,7 @@ import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfigurationManager; import org.wso2.carbon.device.mgt.core.config.license.LicenseConfigurationManager;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.license.mgt.LicenseManagerImpl; import org.wso2.carbon.device.mgt.core.license.mgt.LicenseManagerImpl;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementServiceImpl; import org.wso2.carbon.device.mgt.core.service.DeviceManagementServiceImpl;
@ -67,7 +71,7 @@ import java.util.List;
* bind="setRealmService" * bind="setRealmService"
* unbind="unsetRealmService" * unbind="unsetRealmService"
* @scr.reference name="device.manager.service" * @scr.reference name="device.manager.service"
* interface="org.wso2.carbon.device.mgt.common.spi.DeviceManager" * interface="org.wso2.carbon.device.mgt.common.spi.DeviceMgtService"
* cardinality="0..n" * cardinality="0..n"
* policy="dynamic" * policy="dynamic"
* bind="setDeviceManager" * bind="setDeviceManager"
@ -98,14 +102,13 @@ public class DeviceManagementServiceComponent {
private static final Object LOCK = new Object(); private static final Object LOCK = new Object();
private boolean isInitialized; private boolean isInitialized;
private List<DeviceManager> deviceManagers = new ArrayList<DeviceManager>(); private List<DeviceMgtService> deviceManagers = new ArrayList<DeviceMgtService>();
protected void activate(ComponentContext componentContext) { protected void activate(ComponentContext componentContext) {
try { try {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Initializing device management core bundle"); log.debug("Initializing device management core bundle");
} }
/* Initializing Device Management Configuration */ /* Initializing Device Management Configuration */
DeviceConfigurationManager.getInstance().initConfig(); DeviceConfigurationManager.getInstance().initConfig();
DeviceManagementConfig config = DeviceManagementConfig config =
@ -114,15 +117,16 @@ public class DeviceManagementServiceComponent {
DataSourceConfig dsConfig = config.getDeviceManagementConfigRepository().getDataSourceConfig(); DataSourceConfig dsConfig = config.getDeviceManagementConfigRepository().getDataSourceConfig();
DeviceManagementDAOFactory.init(dsConfig); DeviceManagementDAOFactory.init(dsConfig);
DeviceManagementService deviceManagementProvider =
new DeviceManagementServiceProviderImpl(this.getPluginRepository());
DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceManagementProvider);
/* Initializing license manager */ /* Initializing license manager */
this.initLicenseManager(); this.initLicenseManager();
/*Initialize Operation Manager*/
this.initOperationsManager();
/* Initializing app manager connector */ /* Initializing app manager connector */
this.initAppManagerConnector(); this.initAppManagerConnector();
DeviceManagementService deviceManagementProvider =
new DeviceManagementServiceProviderImpl(this.getPluginRepository());
DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceManagementProvider);
OperationManagementDAOFactory.init(dsConfig); OperationManagementDAOFactory.init(dsConfig);
/* If -Dsetup option enabled then create device management database schema */ /* If -Dsetup option enabled then create device management database schema */
@ -138,7 +142,7 @@ public class DeviceManagementServiceComponent {
} }
synchronized (LOCK) { synchronized (LOCK) {
for (DeviceManager deviceManager : deviceManagers) { for (DeviceMgtService deviceManager : deviceManagers) {
this.registerDeviceManagementProvider(deviceManager); this.registerDeviceManagementProvider(deviceManager);
} }
this.isInitialized = true; this.isInitialized = true;
@ -169,21 +173,20 @@ public class DeviceManagementServiceComponent {
DeviceManagementDataHolder.getInstance().setLicenseConfig(licenseConfig); DeviceManagementDataHolder.getInstance().setLicenseConfig(licenseConfig);
} }
private void initOperationsManager() throws OperationManagementException {
OperationManager operationManager = new OperationManagerImpl();
DeviceManagementDataHolder.getInstance().setOperationManager(operationManager);
}
private void initAppManagerConnector() throws AppManagerConnectorException { private void initAppManagerConnector() throws AppManagerConnectorException {
AppManagementConfigurationManager.getInstance().initConfig(); AppManagementConfigurationManager.getInstance().initConfig();
AppManagementConfig appConfig = AppManagementConfig appConfig =
AppManagementConfigurationManager.getInstance().getAppManagementConfig(); AppManagementConfigurationManager.getInstance().getAppManagementConfig();
DeviceManagementDataHolder.getInstance().setAppManagerConfig(appConfig); DeviceManagementDataHolder.getInstance().setAppManagerConfig(appConfig);
RemoteAppManagerConnector appManager = new RemoteAppManagerConnector(appConfig); RemoteAppManagerConnector appManager = new RemoteAppManagerConnector(appConfig,this.getPluginRepository());
DeviceManagementDataHolder.getInstance().setAppManager(appManager); DeviceManagementDataHolder.getInstance().setAppManager(appManager);
} }
// private void initAPIProviders() throws DeviceManagementException {
// for (APIConfig config : APIPublisherConfig.getInstance().getApiConfigs()) {
// config.init();
// }
// }
private void registerServices(ComponentContext componentContext) { private void registerServices(ComponentContext componentContext) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Registering OSGi service DeviceManagementServiceImpl"); log.debug("Registering OSGi service DeviceManagementServiceImpl");
@ -231,7 +234,7 @@ public class DeviceManagementServiceComponent {
} }
} }
private void registerDeviceManagementProvider(DeviceManager deviceManager) { private void registerDeviceManagementProvider(DeviceMgtService deviceManager) {
try { try {
this.getPluginRepository().addDeviceManagementProvider(deviceManager); this.getPluginRepository().addDeviceManagementProvider(deviceManager);
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {
@ -245,7 +248,7 @@ public class DeviceManagementServiceComponent {
* *
* @param deviceManager An instance of DeviceManager * @param deviceManager An instance of DeviceManager
*/ */
protected void setDeviceManager(DeviceManager deviceManager) { protected void setDeviceManager(DeviceMgtService deviceManager) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Setting Device Management Service Provider: '" + deviceManager.getProviderType() + "'"); log.debug("Setting Device Management Service Provider: '" + deviceManager.getProviderType() + "'");
} }
@ -262,7 +265,7 @@ public class DeviceManagementServiceComponent {
* *
* @param deviceManager An Instance of DeviceManager * @param deviceManager An Instance of DeviceManager
*/ */
protected void unsetDeviceManager(DeviceManager deviceManager) { protected void unsetDeviceManager(DeviceMgtService deviceManager) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Unsetting Device Management Service Provider : '" + deviceManager.getProviderType() + "'"); log.debug("Unsetting Device Management Service Provider : '" + deviceManager.getProviderType() + "'");
} }

@ -18,6 +18,7 @@
package org.wso2.carbon.device.mgt.core.service; package org.wso2.carbon.device.mgt.core.service;
import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnector;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceManager;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;

@ -23,7 +23,7 @@ import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
import java.util.List; import java.util.List;
public class DeviceManagementServiceImpl implements DeviceManagementService { public class DeviceManagementServiceImpl implements DeviceManagementService {

@ -22,6 +22,7 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceManager;
import org.wso2.carbon.device.mgt.common.spi.DeviceMgtService;
public class DeviceManagementRepositoryTests { public class DeviceManagementRepositoryTests {
@ -34,7 +35,7 @@ public class DeviceManagementRepositoryTests {
@Test @Test
public void testAddDeviceManagementService() { public void testAddDeviceManagementService() {
DeviceManager sourceProvider = new TestDeviceManager(); DeviceMgtService sourceProvider = new TestDeviceManager();
try { try {
this.getRepository().addDeviceManagementProvider(sourceProvider); this.getRepository().addDeviceManagementProvider(sourceProvider);
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {
@ -47,7 +48,7 @@ public class DeviceManagementRepositoryTests {
@Test(dependsOnMethods = "testAddDeviceManagementService") @Test(dependsOnMethods = "testAddDeviceManagementService")
public void testRemoveDeviceManagementService() { public void testRemoveDeviceManagementService() {
DeviceManager sourceProvider = new TestDeviceManager(); DeviceMgtService sourceProvider = new TestDeviceManager();
try { try {
this.getRepository().removeDeviceManagementProvider(sourceProvider); this.getRepository().removeDeviceManagementProvider(sourceProvider);
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {

@ -17,15 +17,15 @@
*/ */
package org.wso2.carbon.device.mgt.core; package org.wso2.carbon.device.mgt.core;
import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.app.mgt.AppManagerConnectorException;
import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.FeatureManager; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.spi.DeviceManager; import org.wso2.carbon.device.mgt.common.spi.DeviceMgtService;
import java.util.List; import java.util.List;
public class TestDeviceManager implements DeviceManager { public class TestDeviceManager implements DeviceMgtService {
public static final String DEVICE_TYPE_TEST = "Test"; public static final String DEVICE_TYPE_TEST = "Test";
@ -89,4 +89,9 @@ public class TestDeviceManager implements DeviceManager {
return false; return false;
} }
@Override
public void installApplication(Operation operation, List<DeviceIdentifier> deviceIdentifiers)
throws AppManagerConnectorException {
}
} }

@ -27,17 +27,18 @@ import java.sql.Timestamp;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
//TODO :
public class PIPDevice { public class PIPDevice {
Device device; private Device device;
DeviceType deviceType; private DeviceType deviceType;
DeviceIdentifier deviceIdentifier; private DeviceIdentifier deviceIdentifier;
String ownershipType; private String ownershipType;
List<String> userIds; private List<String> userIds;
String roles []; private String roles[];
String altitude; private String altitude;
String longitude; private String longitude;
Timestamp timestamp; private Timestamp timestamp;
/*This will be used to record attributes to which would come from other PDPs*/ /*This will be used to record attributes to which would come from other PDPs*/
Map<String, Object> attributes; Map<String, Object> attributes;

@ -21,6 +21,7 @@ package org.wso2.carbon.policy.mgt.common;
import org.wso2.carbon.device.mgt.core.dto.Device; import org.wso2.carbon.device.mgt.core.dto.Device;
import java.io.Serializable;
import java.sql.Date; import java.sql.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -28,12 +29,11 @@ import java.util.Map;
/** /**
* This class will be the used to create policy object with relevant information for evaluating. * This class will be the used to create policy object with relevant information for evaluating.
*/ */
public class Policy implements Comparable<Policy> { public class Policy implements Comparable<Policy>, Serializable {
private int id; // Identifier of the policy. private int id; // Identifier of the policy.
private int priorityId; // Priority of the policies. This will be used only for simple evaluation. private int priorityId; // Priority of the policies. This will be used only for simple evaluation.
private Profile profile; // Profile private Profile profile; // Profile
private int profileId;
private String policyName; // Name of the policy. private String policyName; // Name of the policy.
private boolean generic; // If true, this should be applied to all related device. private boolean generic; // If true, this should be applied to all related device.
private List<String> roleList; // Roles which this policy should be applied. private List<String> roleList; // Roles which this policy should be applied.
@ -57,6 +57,7 @@ public class Policy implements Comparable<Policy> {
private String longitude; // Longitude private String longitude; // Longitude
private int tenantId; private int tenantId;
private int profileId;
/*This will be used to record attributes which will be used by customer extended PDPs and PIPs*/ /*This will be used to record attributes which will be used by customer extended PDPs and PIPs*/

@ -31,8 +31,6 @@ public interface PolicyAdministratorPoint {
/** /**
* This method adds a policy to the platform * This method adds a policy to the platform
* *
* @param policy
* @return primary key (generated key)
*/ */
Policy addPolicy(Policy policy) throws PolicyManagementException; Policy addPolicy(Policy policy) throws PolicyManagementException;
@ -40,13 +38,10 @@ public interface PolicyAdministratorPoint {
Policy updatePolicy(Policy policy) throws PolicyManagementException; Policy updatePolicy(Policy policy) throws PolicyManagementException;
boolean deletePolicy(Policy policy) throws PolicyManagementException;
/** /**
* This method adds a policy per device which should be implemented by the related plugins. * This method adds a policy per device which should be implemented by the related plugins.
*
* @param deviceIdentifierList
* @param policy
* @return
* @throws PolicyManagementException
*/ */
Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws PolicyManagementException; Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws PolicyManagementException;
@ -132,7 +127,7 @@ public interface PolicyAdministratorPoint {
*/ */
Profile addProfile(Profile profile) throws PolicyManagementException; Profile addProfile(Profile profile) throws PolicyManagementException;
boolean deleteProfile(int profileId) throws PolicyManagementException; boolean deleteProfile(Profile profile) throws PolicyManagementException;
Profile updateProfile(Profile profile) throws PolicyManagementException; Profile updateProfile(Profile profile) throws PolicyManagementException;

@ -34,7 +34,7 @@ public interface PolicyEvaluationPoint {
* @param deviceIdentifier device information. * @param deviceIdentifier device information.
* @return returns the effective policy. * @return returns the effective policy.
*/ */
Policy getEffectivePolicies(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException; Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException;
/** /**
@ -42,5 +42,5 @@ public interface PolicyEvaluationPoint {
* @param deviceIdentifier device information. * @param deviceIdentifier device information.
* @return returns the effective feature set. * @return returns the effective feature set.
*/ */
List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException ; List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException;
} }

@ -124,7 +124,7 @@ CREATE TABLE IF NOT EXISTS `WSO2CDM`.`DM_FEATURES` (
`NAME` VARCHAR(256) NOT NULL , `NAME` VARCHAR(256) NOT NULL ,
`CODE` VARCHAR(45) NULL DEFAULT NULL , `CODE` VARCHAR(45) NULL DEFAULT NULL ,
`DESCRIPTION` TEXT NULL DEFAULT NULL , `DESCRIPTION` TEXT NULL DEFAULT NULL ,
`EVALUVATION_RULE` VARCHAR(60) NOT NULL , `EVALUATION_RULE` VARCHAR(60) NOT NULL ,
PRIMARY KEY (`ID`) ) PRIMARY KEY (`ID`) )
ENGINE = InnoDB ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1; DEFAULT CHARACTER SET = latin1;

@ -119,6 +119,10 @@
<groupId>org.wso2.carbon</groupId> <groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.core</artifactId> <artifactId>org.wso2.carbon.core</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.base</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.wso2.carbon</groupId> <groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.ndatasource.core</artifactId> <artifactId>org.wso2.carbon.ndatasource.core</artifactId>

@ -19,7 +19,6 @@
package org.wso2.carbon.policy.mgt.core; package org.wso2.carbon.policy.mgt.core;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.policy.mgt.common.*; import org.wso2.carbon.policy.mgt.common.*;
@ -39,15 +38,19 @@ public interface PolicyManagerService {
Policy updatePolicy(Policy policy) throws PolicyManagementException; Policy updatePolicy(Policy policy) throws PolicyManagementException;
Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException; boolean deletePolicy(Policy policy) throws PolicyManagementException;
Policy getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws FeatureManagementException; Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException;
List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws FeatureManagementException;
List<Policy> getPolicies(String deviceType) throws PolicyManagementException; List<Policy> getPolicies(String deviceType) throws PolicyManagementException;
List<Feature> getFeatures() throws FeatureManagementException; List<Feature> getFeatures() throws FeatureManagementException;
PolicyAdministratorPoint getPAP() throws PolicyManagementException; PolicyAdministratorPoint getPAP() throws PolicyManagementException;
PolicyInformationPoint getPIP() throws PolicyManagementException;
PolicyInformationPoint getPIP() throws PolicyManagementException; PolicyEvaluationPoint getPEP() throws PolicyManagementException;
} }

@ -24,6 +24,7 @@ import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.policy.mgt.common.*; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl; import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl;
import org.wso2.carbon.policy.mgt.core.impl.PolicyInformationPointImpl; import org.wso2.carbon.policy.mgt.core.impl.PolicyInformationPointImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import java.util.List; import java.util.List;
@ -67,19 +68,41 @@ public class PolicyManagerServiceImpl implements PolicyManagerService {
return policyAdministratorPoint.updatePolicy(policy); return policyAdministratorPoint.updatePolicy(policy);
} }
@Override
public boolean deletePolicy(Policy policy) throws PolicyManagementException {
return policyAdministratorPoint.deletePolicy(policy);
}
@Override @Override
public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
return null; try {
return PolicyManagementDataHolder.getInstance().getPolicyEvaluationPoint().
getEffectivePolicy(deviceIdentifier);
} catch (PolicyEvaluationException e) {
String msg = "Error occurred while getting the effective policies from the PEP service for device " +
deviceIdentifier.getId() + " - " + deviceIdentifier.getType();
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
} }
@Override @Override
public Policy getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws FeatureManagementException { public List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws
return null; FeatureManagementException {
try {
return PolicyManagementDataHolder.getInstance().getPolicyEvaluationPoint().
getEffectiveFeatures(deviceIdentifier);
} catch (PolicyEvaluationException e) {
String msg = "Error occurred while getting the effective features from the PEP service " +
deviceIdentifier.getId() + " - " + deviceIdentifier.getType();
log.error(msg, e);
throw new FeatureManagementException(msg, e);
}
} }
@Override @Override
public List<Policy> getPolicies(String deviceType) throws PolicyManagementException { public List<Policy> getPolicies(String deviceType) throws PolicyManagementException {
return null; return policyAdministratorPoint.getPoliciesOfDeviceType(deviceType);
} }
@Override @Override
@ -96,4 +119,9 @@ public class PolicyManagerServiceImpl implements PolicyManagerService {
public PolicyInformationPoint getPIP() throws PolicyManagementException { public PolicyInformationPoint getPIP() throws PolicyManagementException {
return new PolicyInformationPointImpl(); return new PolicyInformationPointImpl();
} }
@Override
public PolicyEvaluationPoint getPEP() throws PolicyManagementException {
return PolicyManagementDataHolder.getInstance().getPolicyEvaluationPoint();
}
} }

@ -38,9 +38,11 @@ public interface FeatureDAO {
ProfileFeature updateProfileFeature(ProfileFeature feature, int profileId) throws FeatureManagerDAOException; ProfileFeature updateProfileFeature(ProfileFeature feature, int profileId) throws FeatureManagerDAOException;
List<ProfileFeature> addProfileFeatures(List<ProfileFeature> features, int profileId) throws FeatureManagerDAOException; List<ProfileFeature> addProfileFeatures(List<ProfileFeature> features, int profileId) throws
FeatureManagerDAOException;
List<ProfileFeature> updateProfileFeatures(List<ProfileFeature> features, int profileId) throws FeatureManagerDAOException; List<ProfileFeature> updateProfileFeatures(List<ProfileFeature> features, int profileId) throws
FeatureManagerDAOException;
List<Feature> getAllFeatures() throws FeatureManagerDAOException; List<Feature> getAllFeatures() throws FeatureManagerDAOException;

@ -73,4 +73,13 @@ public interface PolicyDAO {
PolicyLocations getLocationsOfPolicy(Policy policy) throws PolicyManagerDAOException; PolicyLocations getLocationsOfPolicy(Policy policy) throws PolicyManagerDAOException;
void addEffectivePolicyToDevice(int deviceId, int policyId, List<ProfileFeature> profileFeatures)
throws PolicyManagerDAOException;
void setPolicyApplied(int deviceId) throws PolicyManagerDAOException;
void updateEffectivePolicyToDevice(int deviceId, int policyId, List<ProfileFeature> profileFeatures)
throws PolicyManagerDAOException;
boolean checkPolicyAvailable(int deviceId) throws PolicyManagerDAOException;
} }

@ -50,7 +50,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "INSERT INTO DM_FEATURES (NAME, CODE, DESCRIPTION, EVALUVATION_RULE, DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?)"; String query = "INSERT INTO DM_FEATURES (NAME, CODE, DESCRIPTION, EVALUATION_RULE, DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
stmt.setString(1, feature.getName()); stmt.setString(1, feature.getName());
stmt.setString(2, feature.getCode()); stmt.setString(2, feature.getCode());
@ -88,7 +88,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "INSERT INTO DM_FEATURES (NAME, CODE, DESCRIPTION, EVALUVATION_RULE, DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?)"; String query = "INSERT INTO DM_FEATURES (NAME, CODE, DESCRIPTION, EVALUATION_RULE, DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
for (Feature feature : features) { for (Feature feature : features) {
@ -133,7 +133,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "UPDATE DM_FEATURES SET NAME = ?, CODE = ?, DESCRIPTION = ?, EVALUVATION_RULE = ? WHERE ID = ?"; String query = "UPDATE DM_FEATURES SET NAME = ?, CODE = ?, DESCRIPTION = ?, EVALUATION_RULE = ? WHERE ID = ?";
stmt = conn.prepareStatement(query); stmt = conn.prepareStatement(query);
stmt.setString(1, feature.getName()); stmt.setString(1, feature.getName());
stmt.setString(2, feature.getCode()); stmt.setString(2, feature.getCode());
@ -266,7 +266,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT ID, NAME, CODE, DEVICE_TYPE_ID, EVALUVATION_RULE FROM DM_FEATURES"; String query = "SELECT ID, NAME, CODE, DEVICE_TYPE_ID, EVALUATION_RULE FROM DM_FEATURES";
stmt = conn.prepareStatement(query); stmt = conn.prepareStatement(query);
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
@ -277,7 +277,7 @@ public class FeatureDAOImpl implements FeatureDAO {
feature.setCode(resultSet.getString("CODE")); feature.setCode(resultSet.getString("CODE"));
feature.setName(resultSet.getString("NAME")); feature.setName(resultSet.getString("NAME"));
feature.setDeviceTypeId(resultSet.getInt("DEVICE_TYPE_ID")); feature.setDeviceTypeId(resultSet.getInt("DEVICE_TYPE_ID"));
feature.setRuleValue(resultSet.getString("EVALUVATION_RULE")); feature.setRuleValue(resultSet.getString("EVALUATION_RULE"));
featureList.add(feature); featureList.add(feature);
} }
@ -303,7 +303,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT PF.ID AS ID, PF.FEATURE_ID FEATURE_ID, F.NAME NAME, F.CODE CODE, " + String query = "SELECT PF.ID AS ID, PF.FEATURE_ID FEATURE_ID, F.NAME NAME, F.CODE CODE, " +
"F.EVALUVATION_RULE RULE, F.CONTENT AS CONTENT FROM DM_PROFILE_FEATURES AS PF " + "F.EVALUATION_RULE RULE, PF.CONTENT AS CONTENT, PF.PROFILE_ID PROFILE_ID FROM DM_PROFILE_FEATURES AS PF " +
"JOIN DM_FEATURES AS F ON F.ID = PF.FEATURE_ID"; "JOIN DM_FEATURES AS F ON F.ID = PF.FEATURE_ID";
stmt = conn.prepareStatement(query); stmt = conn.prepareStatement(query);
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
@ -320,6 +320,7 @@ public class FeatureDAOImpl implements FeatureDAO {
profileFeature.setFeature(feature); profileFeature.setFeature(feature);
profileFeature.setId(resultSet.getInt("ID")); profileFeature.setId(resultSet.getInt("ID"));
profileFeature.setContent(resultSet.getObject("CONTENT")); profileFeature.setContent(resultSet.getObject("CONTENT"));
profileFeature.setProfileId(resultSet.getInt("PROFILE_ID"));
featureList.add(profileFeature); featureList.add(profileFeature);
} }
@ -345,7 +346,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT f.ID ID, f.NAME NAME, f.CODE CODE, f.DEVICE_TYPE_ID DEVICE_TYPE_ID," + String query = "SELECT f.ID ID, f.NAME NAME, f.CODE CODE, f.DEVICE_TYPE_ID DEVICE_TYPE_ID," +
" f.EVALUVATION_RULE EVALUVATION_RULE FROM DM_FEATURES f INNER JOIN DM_DEVICE_TYPE d " + " f.EVALUATION_RULE EVALUATION_RULE FROM DM_FEATURES f INNER JOIN DM_DEVICE_TYPE d " +
"ON d.ID=f.DEVICE_TYPE_ID WHERE d.NAME = ?"; "ON d.ID=f.DEVICE_TYPE_ID WHERE d.NAME = ?";
stmt = conn.prepareStatement(query); stmt = conn.prepareStatement(query);
stmt.setString(1, deviceType); stmt.setString(1, deviceType);
@ -358,7 +359,7 @@ public class FeatureDAOImpl implements FeatureDAO {
feature.setCode(resultSet.getString("CODE")); feature.setCode(resultSet.getString("CODE"));
feature.setName(resultSet.getString("NAME")); feature.setName(resultSet.getString("NAME"));
feature.setDeviceTypeId(resultSet.getInt("DEVICE_TYPE_ID")); feature.setDeviceTypeId(resultSet.getInt("DEVICE_TYPE_ID"));
feature.setRuleValue(resultSet.getString("EVALUVATION_RULE")); feature.setRuleValue(resultSet.getString("EVALUATION_RULE"));
featureList.add(feature); featureList.add(feature);
} }
@ -384,7 +385,7 @@ public class FeatureDAOImpl implements FeatureDAO {
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT PF.ID AS ID, PF.FEATURE_ID FEATURE_ID, F.NAME NAME, F.CODE CODE, " + String query = "SELECT PF.ID AS ID, PF.FEATURE_ID FEATURE_ID, F.NAME NAME, F.CODE CODE, " +
"F.EVALUVATION_RULE RULE, F.CONTENT AS CONTENT FROM DM_PROFILE_FEATURES AS PF " + "F.EVALUATION_RULE RULE, F.CONTENT AS CONTENT FROM DM_PROFILE_FEATURES AS PF " +
"JOIN DM_FEATURES AS F ON F.ID = PF.FEATURE_ID WHERE PROFILE_ID=?"; "JOIN DM_FEATURES AS F ON F.ID = PF.FEATURE_ID WHERE PROFILE_ID=?";
stmt = conn.prepareStatement(query); stmt = conn.prepareStatement(query);
stmt.setInt(1, profileId); stmt.setInt(1, profileId);

@ -21,22 +21,16 @@ package org.wso2.carbon.policy.mgt.core.dao.impl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.core.dto.Device; import org.wso2.carbon.device.mgt.core.dto.Device;
import org.wso2.carbon.policy.mgt.common.Policy; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.common.PolicyDates;
import org.wso2.carbon.policy.mgt.common.PolicyLocations;
import org.wso2.carbon.policy.mgt.common.PolicyTimes;
import org.wso2.carbon.policy.mgt.core.dao.PolicyDAO; import org.wso2.carbon.policy.mgt.core.dao.PolicyDAO;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException;
import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
import java.sql.Connection; import java.sql.*;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
public class PolicyDAOImpl implements PolicyDAO { public class PolicyDAOImpl implements PolicyDAO {
@ -200,7 +194,8 @@ public class PolicyDAOImpl implements PolicyDAO {
} }
@Override @Override
public Policy addLocationToPolicy(String latitude, String longitude, Policy policy) throws PolicyManagerDAOException { public Policy addLocationToPolicy(String latitude, String longitude, Policy policy) throws
PolicyManagerDAOException {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
@ -270,6 +265,7 @@ public class PolicyDAOImpl implements PolicyDAO {
policy.setId(policyId); policy.setId(policyId);
policy.setPolicyName(resultSet.getString("NAME")); policy.setPolicyName(resultSet.getString("NAME"));
policy.setTenantId(resultSet.getInt("TENANT_ID")); policy.setTenantId(resultSet.getInt("TENANT_ID"));
policy.setPriorityId(resultSet.getInt("PRIORITY"));
} }
return policy; return policy;
@ -302,6 +298,7 @@ public class PolicyDAOImpl implements PolicyDAO {
policy.setId(resultSet.getInt("ID")); policy.setId(resultSet.getInt("ID"));
policy.setPolicyName(resultSet.getString("NAME")); policy.setPolicyName(resultSet.getString("NAME"));
policy.setTenantId(resultSet.getInt("TENANT_ID")); policy.setTenantId(resultSet.getInt("TENANT_ID"));
policy.setPriorityId(resultSet.getInt("PRIORITY"));
} }
return policy; return policy;
@ -335,6 +332,7 @@ public class PolicyDAOImpl implements PolicyDAO {
policy.setProfileId(resultSet.getInt("PROFILE_ID")); policy.setProfileId(resultSet.getInt("PROFILE_ID"));
policy.setPolicyName(resultSet.getString("NAME")); policy.setPolicyName(resultSet.getString("NAME"));
policy.setTenantId(resultSet.getInt("TENANT_ID")); policy.setTenantId(resultSet.getInt("TENANT_ID"));
policy.setPriorityId(resultSet.getInt("PRIORITY"));
policies.add(policy); policies.add(policy);
} }
return policies; return policies;
@ -432,7 +430,6 @@ public class PolicyDAOImpl implements PolicyDAO {
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
//TODO:
policy.setStartTime(resultSet.getInt("STARTING_TIME")); policy.setStartTime(resultSet.getInt("STARTING_TIME"));
policy.setEndTime(resultSet.getInt("ENDING_TIME")); policy.setEndTime(resultSet.getInt("ENDING_TIME"));
@ -467,7 +464,7 @@ public class PolicyDAOImpl implements PolicyDAO {
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
//TODO:
policy.setStartDate(resultSet.getDate("START_DATE")); policy.setStartDate(resultSet.getDate("START_DATE"));
policy.setEndDate(resultSet.getDate("END_DATE")); policy.setEndDate(resultSet.getDate("END_DATE"));
@ -502,7 +499,7 @@ public class PolicyDAOImpl implements PolicyDAO {
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
//TODO:
policy.setLatitude(resultSet.getString("LATITUDE")); policy.setLatitude(resultSet.getString("LATITUDE"));
policy.setLongitude(resultSet.getString("LONGITUDE")); policy.setLongitude(resultSet.getString("LONGITUDE"));
@ -521,6 +518,117 @@ public class PolicyDAOImpl implements PolicyDAO {
return locations; return locations;
} }
@Override
public void addEffectivePolicyToDevice(int deviceId, int policyId, List<ProfileFeature> profileFeatures)
throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
try {
conn = this.getConnection();
String query = "INSERT INTO DM_DEVICE_POLICY_APPLIED " +
"(DEVICE_ID, POLICY_ID, POLICY_CONTENT, CREATED_TIME, UPDATED_TIME) VALUES (?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, policyId);
stmt.setObject(3, profileFeatures);
stmt.setTimestamp(4, currentTimestamp);
stmt.setTimestamp(5, currentTimestamp);
stmt.executeUpdate();
} catch (SQLException e) {
String msg = "Error occurred while adding the evaluated feature list to device.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
}
@Override
public void setPolicyApplied(int deviceId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
try {
conn = this.getConnection();
String query = "UPDATE DM_DEVICE_POLICY_APPLIED SET APPLIED_TIME = ?, APPLIED = ? WHERE DEVICE_ID = ? ";
stmt = conn.prepareStatement(query);
stmt.setTimestamp(1, currentTimestamp);
stmt.setBoolean(2, true);
stmt.setInt(3, deviceId);
stmt.executeUpdate();
} catch (SQLException e) {
String msg = "Error occurred while updating applied policy to device (" + deviceId + ")";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
}
@Override
public void updateEffectivePolicyToDevice(int deviceId, int policyId, List<ProfileFeature> profileFeatures)
throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
try {
conn = this.getConnection();
String query = "UPDATE DM_DEVICE_POLICY_APPLIED SET POLICY_ID = ?, POLICY_CONTENT = ?, UPDATED_TIME = ?, " +
"APPLIED = ? WHERE DEVICE_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, policyId);
stmt.setObject(2, profileFeatures);
stmt.setTimestamp(3, currentTimestamp);
stmt.setBoolean(4, false);
stmt.setInt(5, deviceId);
stmt.executeUpdate();
} catch (SQLException e) {
String msg = "Error occurred while updating the evaluated feature list to device.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
}
@Override
public boolean checkPolicyAvailable(int deviceId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
boolean exist = false;
try {
conn = this.getConnection();
String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
resultSet = stmt.executeQuery();
exist = resultSet.next();
} catch (SQLException e) {
String msg = "Error occurred while checking whether device (" + deviceId + ") has a policy to apply.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
this.closeConnection();
}
return exist;
}
@Override @Override
public List<Integer> getPolicyIdsOfDevice(Device device) throws PolicyManagerDAOException { public List<Integer> getPolicyIdsOfDevice(Device device) throws PolicyManagerDAOException {
@ -711,8 +819,8 @@ public class PolicyDAOImpl implements PolicyDAO {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet generatedKeys = null; ResultSet generatedKeys = null;
int tenantId = PolicyManagerUtil.getTenantId();
int tenantId = MultitenantConstants.SUPER_TENANT_ID;
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "INSERT INTO DM_POLICY (NAME, PROFILE_ID, TENANT_ID, PRIORITY) VALUES (?, ?, ?, ?)"; String query = "INSERT INTO DM_POLICY (NAME, PROFILE_ID, TENANT_ID, PRIORITY) VALUES (?, ?, ?, ?)";

@ -20,6 +20,7 @@ package org.wso2.carbon.policy.mgt.core.dao.impl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.policy.mgt.common.Profile; import org.wso2.carbon.policy.mgt.common.Profile;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory;
@ -27,7 +28,7 @@ import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException;
import org.wso2.carbon.policy.mgt.core.dao.ProfileDAO; import org.wso2.carbon.policy.mgt.core.dao.ProfileDAO;
import org.wso2.carbon.policy.mgt.core.dao.ProfileManagerDAOException; import org.wso2.carbon.policy.mgt.core.dao.ProfileManagerDAOException;
import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -45,7 +46,7 @@ public class ProfileDAOImpl implements ProfileDAO {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet generatedKeys = null; ResultSet generatedKeys = null;
int tenantId = MultitenantConstants.SUPER_TENANT_ID; int tenantId = PolicyManagerUtil.getTenantId();
try { try {
conn = this.getConnection(); conn = this.getConnection();
@ -91,7 +92,7 @@ public class ProfileDAOImpl implements ProfileDAO {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet generatedKeys = null; ResultSet generatedKeys = null;
int tenantId = MultitenantConstants.SUPER_TENANT_ID; int tenantId = PolicyManagerUtil.getTenantId();
try { try {
conn = this.getConnection(); conn = this.getConnection();

@ -57,6 +57,11 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
return policyManager.updatePolicy(policy); return policyManager.updatePolicy(policy);
} }
@Override
public boolean deletePolicy(Policy policy) throws PolicyManagementException {
return policyManager.deletePolicy(policy);
}
@Override @Override
public Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws PolicyManagementException { public Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws PolicyManagementException {
return policyManager.addPolicyToDevice(deviceIdentifierList, policy); return policyManager.addPolicyToDevice(deviceIdentifierList, policy);
@ -94,17 +99,17 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
@Override @Override
public boolean isPolicyAvailableForDevice(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { public boolean isPolicyAvailableForDevice(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
return false; return policyManager.checkPolicyAvailable(deviceIdentifier);
} }
@Override @Override
public boolean isPolicyApplied(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { public boolean isPolicyApplied(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
return false; return policyManager.setPolicyApplied(deviceIdentifier);
} }
@Override @Override
public void setPolicyUsed(DeviceIdentifier deviceIdentifier, Policy policy) throws PolicyManagementException { public void setPolicyUsed(DeviceIdentifier deviceIdentifier, Policy policy) throws PolicyManagementException {
policyManager.addAppliedPolicyToDevice(deviceIdentifier, policy.getId(), policy.getProfile().getProfileFeaturesList());
} }
@Override @Override
@ -119,8 +124,14 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
} }
@Override @Override
public boolean deleteProfile(int profileId) throws PolicyManagementException { public boolean deleteProfile(Profile profile) throws PolicyManagementException {
return false; try {
return profileManager.deleteProfile(profile);
} catch (ProfileManagementException e) {
String msg = "Error occurred while deleting the profile.";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
} }
@Override @Override

@ -59,9 +59,9 @@ public class PolicyInformationPointImpl implements PolicyInformationPoint {
PIPDevice pipDevice = new PIPDevice(); PIPDevice pipDevice = new PIPDevice();
org.wso2.carbon.device.mgt.common.Device device; org.wso2.carbon.device.mgt.common.Device device;
// TODO : Find
DeviceType deviceType = new DeviceType(); DeviceType deviceType = new DeviceType();
deviceType.setName(deviceIdentifier.getType()); deviceType.setName(deviceIdentifier.getType());
deviceManagementService = getDeviceManagementService();
try { try {
device = deviceManagementService.getDevice(deviceIdentifier); device = deviceManagementService.getDevice(deviceIdentifier);
@ -147,4 +147,8 @@ public class PolicyInformationPointImpl implements PolicyInformationPoint {
return finalPolicies; return finalPolicies;
} }
private DeviceManagementService getDeviceManagementService() {
return PolicyManagementDataHolder.getInstance().getDeviceManagementService();
}
} }

@ -23,13 +23,12 @@ import org.apache.commons.logging.LogFactory;
import org.osgi.service.component.ComponentContext; import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint; import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint;
import org.wso2.carbon.policy.mgt.common.PolicyInformationPoint;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService; import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import org.wso2.carbon.policy.mgt.core.PolicyManagerServiceImpl;
import org.wso2.carbon.policy.mgt.core.config.PolicyConfigurationManager; import org.wso2.carbon.policy.mgt.core.config.PolicyConfigurationManager;
import org.wso2.carbon.policy.mgt.core.config.PolicyManagementConfig; import org.wso2.carbon.policy.mgt.core.config.PolicyManagementConfig;
import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory;
import org.wso2.carbon.policy.mgt.core.service.PolicyManagementService;
import org.wso2.carbon.user.core.service.RealmService; import org.wso2.carbon.user.core.service.RealmService;
/** /**
@ -40,12 +39,6 @@ import org.wso2.carbon.user.core.service.RealmService;
* policy="dynamic" * policy="dynamic"
* bind="setRealmService" * bind="setRealmService"
* unbind="unsetRealmService" * unbind="unsetRealmService"
* @scr.reference name="org.wso2.carbon.devicemgt.policy.information.point.default"
* interface="org.wso2.carbon.policy.mgt.common.PolicyInformationPoint"
* cardinality="1..1"
* policy="dynamic"
* bind="setPIPService"
* unbind="unsetPIPService"
* @scr.reference name="org.wso2.carbon.devicemgt.simple.policy.evaluation.manager" * @scr.reference name="org.wso2.carbon.devicemgt.simple.policy.evaluation.manager"
* interface="org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint" * interface="org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint"
* cardinality="1..1" * cardinality="1..1"
@ -59,7 +52,7 @@ import org.wso2.carbon.user.core.service.RealmService;
* bind="setDeviceManagementService" * bind="setDeviceManagementService"
* unbind="unsetDeviceManagementService" * unbind="unsetDeviceManagementService"
*/ */
@SuppressWarnings("unused")
public class PolicyManagementServiceComponent { public class PolicyManagementServiceComponent {
private static Log log = LogFactory.getLog(PolicyManagementServiceComponent.class); private static Log log = LogFactory.getLog(PolicyManagementServiceComponent.class);
@ -73,11 +66,10 @@ public class PolicyManagementServiceComponent {
PolicyManagementDAOFactory.init(dsConfig); PolicyManagementDAOFactory.init(dsConfig);
componentContext.getBundleContext().registerService( componentContext.getBundleContext().registerService(
PolicyManagerService.class.getName(), new PolicyManagementService(), null); PolicyManagerService.class.getName(), new PolicyManagerServiceImpl(), null);
} catch (Throwable t) { } catch (Throwable t) {
String msg = "Error occurred while initializing the Policy management core."; log.error("Error occurred while initializing the Policy management core.", t);
log.error(msg, t);
} }
} }
@ -108,7 +100,7 @@ public class PolicyManagementServiceComponent {
} }
protected void setPIPService(PolicyInformationPoint pipService) { /* protected void setPIPService(PolicyInformationPoint pipService) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Setting Policy Information Service"); log.debug("Setting Policy Information Service");
} }
@ -120,7 +112,7 @@ public class PolicyManagementServiceComponent {
log.debug("Unsetting Policy Information Service"); log.debug("Unsetting Policy Information Service");
} }
PolicyManagementDataHolder.getInstance().setPolicyInformationPoint(null); PolicyManagementDataHolder.getInstance().setPolicyInformationPoint(null);
} }*/
protected void setPEPService(PolicyEvaluationPoint pepService) { protected void setPEPService(PolicyEvaluationPoint pepService) {

@ -22,6 +22,7 @@ import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.dto.Device; import org.wso2.carbon.device.mgt.core.dto.Device;
import org.wso2.carbon.policy.mgt.common.Policy; import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException; import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.common.ProfileFeature;
import java.util.List; import java.util.List;
@ -33,7 +34,8 @@ public interface PolicyManager {
boolean deletePolicy(Policy policy) throws PolicyManagementException; boolean deletePolicy(Policy policy) throws PolicyManagementException;
Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws PolicyManagementException; Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, Policy policy) throws
PolicyManagementException;
Policy addPolicyToRole(List<String> roleNames, Policy policy) throws PolicyManagementException; Policy addPolicyToRole(List<String> roleNames, Policy policy) throws PolicyManagementException;
@ -54,4 +56,11 @@ public interface PolicyManager {
List<Policy> getPoliciesOfUser(String username) throws PolicyManagementException; List<Policy> getPoliciesOfUser(String username) throws PolicyManagementException;
List<Device> getPolicyAppliedDevicesIds(int policyId) throws PolicyManagementException; List<Device> getPolicyAppliedDevicesIds(int policyId) throws PolicyManagementException;
void addAppliedPolicyToDevice(DeviceIdentifier deviceIdentifier, int policyId, List<ProfileFeature> profileFeatures) throws
PolicyManagementException;
boolean checkPolicyAvailable(DeviceIdentifier deviceIdentifier) throws PolicyManagementException;
boolean setPolicyApplied(DeviceIdentifier deviceIdentifier) throws PolicyManagementException;
} }

@ -27,11 +27,10 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO; import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
import org.wso2.carbon.device.mgt.core.dto.Device; import org.wso2.carbon.device.mgt.core.dto.Device;
import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.policy.mgt.common.Policy; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.common.Profile;
import org.wso2.carbon.policy.mgt.core.dao.*; import org.wso2.carbon.policy.mgt.core.dao.*;
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager; import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
import org.wso2.carbon.policy.mgt.core.mgt.ProfileManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -43,6 +42,7 @@ public class PolicyManagerImpl implements PolicyManager {
private FeatureDAO featureDAO; private FeatureDAO featureDAO;
private DeviceDAO deviceDAO; private DeviceDAO deviceDAO;
private DeviceTypeDAO deviceTypeDAO; private DeviceTypeDAO deviceTypeDAO;
private ProfileManager profileManager;
private static Log log = LogFactory.getLog(PolicyManagerImpl.class); private static Log log = LogFactory.getLog(PolicyManagerImpl.class);
public PolicyManagerImpl() { public PolicyManagerImpl() {
@ -51,6 +51,7 @@ public class PolicyManagerImpl implements PolicyManager {
this.featureDAO = PolicyManagementDAOFactory.getFeatureDAO(); this.featureDAO = PolicyManagementDAOFactory.getFeatureDAO();
this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO(); this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
this.profileManager = new ProfileManagerImpl();
} }
@Override @Override
@ -462,13 +463,16 @@ public class PolicyManagerImpl implements PolicyManager {
List<Policy> policies = new ArrayList<Policy>(); List<Policy> policies = new ArrayList<Policy>();
try { try {
DeviceType deviceType = deviceTypeDAO.getDeviceType(deviceTypeName); // DeviceType deviceType = deviceTypeDAO.getDeviceType(deviceTypeName);
List<Profile> profileList = profileDAO.getProfilesOfDeviceType(deviceType);
List<Profile> profileList = profileManager.getProfilesOfDeviceType(deviceTypeName);
List<Policy> allPolicies = policyDAO.getAllPolicies(); List<Policy> allPolicies = policyDAO.getAllPolicies();
for (Profile profile : profileList) { for (Profile profile : profileList) {
for (Policy policy : allPolicies) { for (Policy policy : allPolicies) {
if (policy.getProfileId() == profile.getProfileId()) { if (policy.getProfileId() == profile.getProfileId()) {
policy.setProfile(profile);
policies.add(policy); policies.add(policy);
} }
} }
@ -478,12 +482,16 @@ public class PolicyManagerImpl implements PolicyManager {
String msg = "Error occurred while getting all the policies."; String msg = "Error occurred while getting all the policies.";
log.error(msg, e); log.error(msg, e);
throw new PolicyManagementException(msg, e); throw new PolicyManagementException(msg, e);
} catch (ProfileManagerDAOException e) { // } catch (ProfileManagerDAOException e) {
String msg = "Error occurred while getting the profiles related to device type (" + deviceTypeName + ")"; // String msg = "Error occurred while getting the profiles related to device type (" + deviceTypeName + ")";
log.error(msg, e); // log.error(msg, e);
throw new PolicyManagementException(msg, e); // throw new PolicyManagementException(msg, e);
} catch (DeviceManagementDAOException e) { // } catch (DeviceManagementDAOException e) {
String msg = "Error occurred while getting device type object related to (" + deviceTypeName + ")"; // String msg = "Error occurred while getting device type object related to (" + deviceTypeName + ")";
// log.error(msg, e);
// throw new PolicyManagementException(msg, e);
} catch (ProfileManagementException e) {
String msg = "Error occurred while getting all the profile features.";
log.error(msg, e); log.error(msg, e);
throw new PolicyManagementException(msg, e); throw new PolicyManagementException(msg, e);
} }
@ -565,4 +573,75 @@ public class PolicyManagerImpl implements PolicyManager {
} }
return deviceList; return deviceList;
} }
@Override
public void addAppliedPolicyToDevice(DeviceIdentifier deviceIdentifier, int policyId, List<ProfileFeature> profileFeatures) throws
PolicyManagementException {
int deviceId = -1;
try {
Device device = deviceDAO.getDevice(deviceIdentifier);
deviceId = device.getId();
boolean exist = policyDAO.checkPolicyAvailable(deviceId);
PolicyManagementDAOFactory.beginTransaction();
if (exist) {
policyDAO.updateEffectivePolicyToDevice(deviceId, policyId, profileFeatures);
} else {
policyDAO.addEffectivePolicyToDevice(deviceId, policyId, profileFeatures);
}
PolicyManagementDAOFactory.commitTransaction();
} catch (PolicyManagerDAOException e) {
try {
PolicyManagementDAOFactory.rollbackTransaction();
} catch (PolicyManagerDAOException e1) {
log.warn("Error occurred while roll backing the transaction.");
}
String msg = "Error occurred while adding the evaluated policy to device (" +
deviceId + " - " + policyId + ")";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
} catch (DeviceManagementDAOException e) {
String msg = "Error occurred while getting the device details (" + deviceIdentifier.getId() + ")";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
}
@Override
public boolean checkPolicyAvailable(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
boolean exist;
try {
Device device = deviceDAO.getDevice(deviceIdentifier);
exist = policyDAO.checkPolicyAvailable(device.getId());
} catch (PolicyManagerDAOException e) {
String msg = "Error occurred while checking whether device has a policy to apply.";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
} catch (DeviceManagementDAOException e) {
String msg = "Error occurred while getting the device details (" + deviceIdentifier.getId() + ")";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
return exist;
}
@Override
public boolean setPolicyApplied(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
try {
Device device = deviceDAO.getDevice(deviceIdentifier);
policyDAO.setPolicyApplied(device.getId());
return true;
} catch (PolicyManagerDAOException e) {
String msg = "Error occurred while setting the policy has applied to device (" +
deviceIdentifier.getId() + ")";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
} catch (DeviceManagementDAOException e) {
String msg = "Error occurred while getting the device details (" + deviceIdentifier.getId() + ")";
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
}
} }

@ -64,13 +64,19 @@ public class PolicyManagementService implements PolicyManagerService {
return policyManagerService.updatePolicy(policy); return policyManagerService.updatePolicy(policy);
} }
@Override
public boolean deletePolicy(Policy policy) throws PolicyManagementException {
return policyManagerService.deletePolicy(policy);
}
@Override @Override
public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyManagementException {
return policyManagerService.getEffectivePolicy(deviceIdentifier); return policyManagerService.getEffectivePolicy(deviceIdentifier);
} }
@Override @Override
public Policy getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws FeatureManagementException { public List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier) throws
FeatureManagementException {
return policyManagerService.getEffectiveFeatures(deviceIdentifier); return policyManagerService.getEffectiveFeatures(deviceIdentifier);
} }
@ -93,4 +99,9 @@ public class PolicyManagementService implements PolicyManagerService {
public PolicyInformationPoint getPIP() throws PolicyManagementException { public PolicyInformationPoint getPIP() throws PolicyManagementException {
return policyManagerService.getPIP(); return policyManagerService.getPIP();
} }
@Override
public PolicyEvaluationPoint getPEP() throws PolicyManagementException {
return policyManagerService.getPEP();
}
} }

@ -21,10 +21,12 @@ package org.wso2.carbon.policy.mgt.core.util;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException; import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.policy.mgt.core.config.datasource.JNDILookupDefinition; import org.wso2.carbon.policy.mgt.core.config.datasource.JNDILookupDefinition;
import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
import javax.sql.DataSource; import javax.sql.DataSource;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
@ -82,4 +84,23 @@ public class PolicyManagerUtil {
} }
return dataSource; return dataSource;
} }
public static int getTenantId() {
//TODO: Get the tenant id proper way. This is has to be fix for test to run.
int tenantId;
tenantId = MultitenantConstants.SUPER_TENANT_ID;
/* try {
if (PrivilegedCarbonContext.getThreadLocalCarbonContext() != null) {
tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
} else {
tenantId = MultitenantConstants.SUPER_TENANT_ID;
}
} catch (Exception e) {
}*/
return tenantId;
}
} }

@ -235,7 +235,7 @@ public class PolicyDAOTestCase {
List<DeviceIdentifier> deviceIdentifierList = new ArrayList<DeviceIdentifier>(); List<DeviceIdentifier> deviceIdentifierList = new ArrayList<DeviceIdentifier>();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(device.getDeviceIdentificationId()); deviceIdentifier.setId(device.getDeviceIdentificationId());
deviceIdentifier.setType("ANDROID"); deviceIdentifier.setType("android");
deviceIdentifierList.add(deviceIdentifier); deviceIdentifierList.add(deviceIdentifier);
policyManager.addPolicyToDevice(deviceIdentifierList, policy); policyManager.addPolicyToDevice(deviceIdentifierList, policy);
@ -266,7 +266,7 @@ public class PolicyDAOTestCase {
public void getDeviceTypeRelatedPolicy() throws PolicyManagementException { public void getDeviceTypeRelatedPolicy() throws PolicyManagementException {
PolicyAdministratorPoint policyAdministratorPoint = new PolicyAdministratorPointImpl(); PolicyAdministratorPoint policyAdministratorPoint = new PolicyAdministratorPointImpl();
List<Policy> policyList = policyAdministratorPoint.getPoliciesOfDeviceType("ANDROID"); List<Policy> policyList = policyAdministratorPoint.getPoliciesOfDeviceType("android");
log.debug("----------Device type related policy---------"); log.debug("----------Device type related policy---------");

@ -25,7 +25,7 @@ public class DeviceTypeCreator {
public static DeviceType getDeviceType(){ public static DeviceType getDeviceType(){
DeviceType deviceType = new DeviceType(); DeviceType deviceType = new DeviceType();
deviceType.setName("ANDROID"); deviceType.setName("android");
deviceType.setId(1); deviceType.setId(1);
return deviceType; return deviceType;

@ -32,7 +32,7 @@ public class ProfileCreator {
DeviceType deviceType = new DeviceType(); DeviceType deviceType = new DeviceType();
deviceType.setId(1); deviceType.setId(1);
deviceType.setName("ANDROID"); deviceType.setName("android");
profile.setProfileFeaturesList(ProfileFeatureCreator.getProfileFeature(features)); profile.setProfileFeaturesList(ProfileFeatureCreator.getProfileFeature(features));
profile.setProfileName("Test Profile"); profile.setProfileName("Test Profile");

@ -142,7 +142,7 @@ CREATE TABLE IF NOT EXISTS DM_FEATURES (
CODE VARCHAR(45) NULL DEFAULT NULL , CODE VARCHAR(45) NULL DEFAULT NULL ,
DEVICE_TYPE_ID INT NOT NULL , DEVICE_TYPE_ID INT NOT NULL ,
DESCRIPTION TEXT NULL DEFAULT NULL , DESCRIPTION TEXT NULL DEFAULT NULL ,
EVALUVATION_RULE VARCHAR(60) NOT NULL , EVALUATION_RULE VARCHAR(60) NOT NULL ,
PRIMARY KEY (ID) , PRIMARY KEY (ID) ,
CONSTRAINT DM_FEATURES_DEVICE_TYPE CONSTRAINT DM_FEATURES_DEVICE_TYPE
FOREIGN KEY (DEVICE_TYPE_ID ) FOREIGN KEY (DEVICE_TYPE_ID )

@ -154,7 +154,7 @@ CREATE TABLE IF NOT EXISTS `WSO2CDM`.`DM_FEATURES` (
`CODE` VARCHAR(45) NULL DEFAULT NULL , `CODE` VARCHAR(45) NULL DEFAULT NULL ,
`DEVICE_TYPE_ID` INT NOT NULL , `DEVICE_TYPE_ID` INT NOT NULL ,
`DESCRIPTION` TEXT NULL DEFAULT NULL , `DESCRIPTION` TEXT NULL DEFAULT NULL ,
`EVALUVATION_RULE` VARCHAR(60) NOT NULL , `EVALUATION_RULE` VARCHAR(60) NOT NULL ,
PRIMARY KEY (`ID`) , PRIMARY KEY (`ID`) ,
INDEX `DM_FEATURES_DEVICE_TYPE` (`DEVICE_TYPE_ID` ASC) , INDEX `DM_FEATURES_DEVICE_TYPE` (`DEVICE_TYPE_ID` ASC) ,
CONSTRAINT `DM_FEATURES_DEVICE_TYPE` CONSTRAINT `DM_FEATURES_DEVICE_TYPE`
@ -286,6 +286,36 @@ CREATE TABLE IF NOT EXISTS `WSO2CDM`.`DM_USER_POLICY` (
ENGINE = InnoDB; ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `WSO2CDM`.`DM_DEVICE_POLICY_APPLIED`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `WSO2CDM`.`DM_DEVICE_POLICY_APPLIED` ;
CREATE TABLE IF NOT EXISTS `WSO2CDM`.`DM_DEVICE_POLICY_APPLIED` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`DEVICE_ID` INT NOT NULL ,
`POLICY_ID` INT NOT NULL ,
`POLICY_CONTENT` BLOB NULL ,
`APPLIED` TINYINT(1) NULL ,
`CREATED_TIME` TIMESTAMP NULL ,
`UPDATED_TIME` TIMESTAMP NULL ,
`APPLIED_TIME` TIMESTAMP NULL ,
PRIMARY KEY (`ID`) ,
INDEX `FK_DM_POLICY_DEVCIE_APPLIED` (`DEVICE_ID` ASC) ,
INDEX `FK_DM_POLICY_DEVICE_APPLIED_POLICY` (`POLICY_ID` ASC) ,
CONSTRAINT `FK_DM_POLICY_DEVCIE_APPLIED`
FOREIGN KEY (`DEVICE_ID` )
REFERENCES `WSO2CDM`.`DM_DEVICE` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `FK_DM_POLICY_DEVICE_APPLIED_POLICY`
FOREIGN KEY (`POLICY_ID` )
REFERENCES `WSO2CDM`.`DM_POLICY` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE; SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

@ -19,10 +19,10 @@
<DeviceMgtTestDBConfigurations> <DeviceMgtTestDBConfigurations>
<DBType typeName="MySql"> <DBType typeName="MySql">
<connectionurl>jdbc:mysql://10.100.0.47:3306/WSO2CDM</connectionurl> <connectionurl>jdbc:mysql://localhost:3306/WSO2CDM</connectionurl>
<driverclass>com.mysql.jdbc.Driver</driverclass> <driverclass>com.mysql.jdbc.Driver</driverclass>
<userName>root</userName> <userName>root</userName>
<pwd>root</pwd> <pwd></pwd>
</DBType> </DBType>
<DBType typeName="H2"> <DBType typeName="H2">
<connectionurl>jdbc:h2:mem:WSO2_TEST_DB;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000</connectionurl> <connectionurl>jdbc:h2:mem:WSO2_TEST_DB;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000</connectionurl>

@ -35,7 +35,7 @@ public class PolicyEvaluationServiceImpl implements PolicyEvaluationPoint {
} }
@Override @Override
public Policy getEffectivePolicies(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException { public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException {
return evaluation.getEffectivePolicy(deviceIdentifier); return evaluation.getEffectivePolicy(deviceIdentifier);
} }

@ -25,7 +25,7 @@ import org.wso2.carbon.policy.mgt.common.PolicyEvaluationException;
public interface SimpleEvaluation { public interface SimpleEvaluation {
void sortPolicy() throws PolicyEvaluationException; void sortPolicies() throws PolicyEvaluationException;
Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException; Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException;

@ -21,47 +21,62 @@ package org.wso2.carbon.simple.policy.decision.point;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.policy.mgt.common.PIPDevice; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyEvaluationException;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService; import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import org.wso2.carbon.simple.policy.decision.point.internal.PolicyDecisionPointDataHolder; import org.wso2.carbon.simple.policy.decision.point.internal.PolicyDecisionPointDataHolder;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class SimpleEvaluationImpl implements SimpleEvaluation { public class SimpleEvaluationImpl implements SimpleEvaluation {
private static final Log log = LogFactory.getLog(SimpleEvaluationImpl.class); private static final Log log = LogFactory.getLog(SimpleEvaluationImpl.class);
//TODO : to revove the stale reference
private PolicyManagerService policyManagerService; private PolicyManagerService policyManagerService;
private List<Policy> policyList; private List<Policy> policyList = new ArrayList<Policy>();
public SimpleEvaluationImpl() { // public SimpleEvaluationImpl() {
policyManagerService = PolicyDecisionPointDataHolder.getInstance().getPolicyManagerService(); // policyManagerService = PolicyDecisionPointDataHolder.getInstance().getPolicyManagerService();
} // }
@Override @Override
public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException { public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException {
Policy policy = new Policy();
PolicyAdministratorPoint policyAdministratorPoint;
PolicyInformationPoint policyInformationPoint;
policyManagerService = getPolicyManagerService();
try { try {
if (policyManagerService == null && policyList == null) { if (policyManagerService != null) {
PIPDevice pipDevice = policyManagerService.getPIP().getDeviceData(deviceIdentifier);
policyList = policyManagerService.getPIP().getRelatedPolicies(pipDevice); policyInformationPoint = policyManagerService.getPIP();
PIPDevice pipDevice = policyInformationPoint.getDeviceData(deviceIdentifier);
policyList = policyInformationPoint.getRelatedPolicies(pipDevice);
sortPolicies();
policy = policyList.get(0);
policyAdministratorPoint = policyManagerService.getPAP();
policyAdministratorPoint.setPolicyUsed(deviceIdentifier, policy);
} }
sortPolicy();
} catch (PolicyManagementException e) { } catch (PolicyManagementException e) {
String msg = "Error occurred when retrieving the policy related data from policy management service."; String msg = "Error occurred when retrieving the policy related data from policy management service.";
log.error(msg, e); log.error(msg, e);
throw new PolicyEvaluationException(msg, e); throw new PolicyEvaluationException(msg, e);
} }
return policy;
return policyList.get(0);
} }
@Override @Override
public void sortPolicy() throws PolicyEvaluationException { public void sortPolicies() throws PolicyEvaluationException {
Collections.sort(policyList); Collections.sort(policyList);
} }
private PolicyManagerService getPolicyManagerService(){
return PolicyDecisionPointDataHolder.getInstance().getPolicyManagerService();
}
} }

Loading…
Cancel
Save