diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml index d66e9ff997..5b9b7deb78 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml @@ -83,6 +83,28 @@ org.wso2.carbon org.wso2.carbon.logging + + + org.wso2.carbon + org.wso2.carbon.policy.mgt.common + + + + org.wso2.carbon + org.wso2.carbon.utils + + + org.wso2.carbon + org.wso2.carbon.core + + + org.wso2.carbon + org.wso2.carbon.ndatasource.core + + + org.wso2.carbon + org.wso2.carbon.ndatasource.rdbms + org.wso2.carbon org.wso2.carbon.logging diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java new file mode 100644 index 0000000000..944bf89a9e --- /dev/null +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java @@ -0,0 +1,38 @@ +/* +* Copyright (c) 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.policy.mgt.core.dao; + +import org.wso2.carbon.policy.mgt.common.Policy; + +public interface PolicyDAO { + + int addPolicy(Policy policy) throws PolicyManagerDAOException; + + int addPolicy(String deviceType, Policy policy) throws PolicyManagerDAOException; + + int addPolicy(String deviceID, String deviceType, Policy policy) throws PolicyManagerDAOException; + + void updatePolicy(int id) throws PolicyManagerDAOException; + + Policy getPolicy() throws PolicyManagerDAOException; + + Policy getPolicy(String deviceType) throws PolicyManagerDAOException; + + Policy getPolicy(String deviceID, String deviceType) throws PolicyManagerDAOException; +} diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagementDAOFactory.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagementDAOFactory.java index 0e2b1c91a5..f1d9cf56ca 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagementDAOFactory.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagementDAOFactory.java @@ -18,5 +18,63 @@ package org.wso2.carbon.policy.mgt.core.dao; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.dao.impl.PolicyDAOImpl; +import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; + +import javax.sql.DataSource; +import java.util.Hashtable; +import java.util.List; + public class PolicyManagementDAOFactory { + + private static DataSource dataSource; + private static final Log log = LogFactory.getLog(PolicyManagementDAOFactory.class); + + + public static PolicyDAO getDeviceTypeDAO() { + return new PolicyDAOImpl(dataSource); + } + + public static void init(DataSourceConfig config) { + dataSource = resolveDataSource(config); + } + + /** + * Resolve data source from the data source definition + * + * @param config data source configuration + * @return data source resolved from the data source definition + */ + private static DataSource resolveDataSource(DataSourceConfig config) { + DataSource dataSource = null; + if (config == null) { + throw new RuntimeException("Device Management Repository data source configuration " + + "is null and thus, is not initialized"); + } + JNDILookupDefinition jndiConfig = config.getJndiLookupDefintion(); + if (jndiConfig != null) { + if (log.isDebugEnabled()) { + log.debug("Initializing Device Management Repository data source using the JNDI " + + "Lookup Definition"); + } + List jndiPropertyList = + jndiConfig.getJndiProperties(); + if (jndiPropertyList != null) { + Hashtable jndiProperties = new Hashtable(); + for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) { + jndiProperties.put(prop.getName(), prop.getValue()); + } + dataSource = + PolicyManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), jndiProperties); + } else { + dataSource = PolicyManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), null); + } + } + return dataSource; + } + } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagerDAOException.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagerDAOException.java new file mode 100644 index 0000000000..4913f6752c --- /dev/null +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagerDAOException.java @@ -0,0 +1,55 @@ +/* +* Copyright (c) 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.policy.mgt.core.dao; + +public class PolicyManagerDAOException extends Exception{ + + private String policyDAOErrorMessage; + + public String getPolicyDAOErrorMessage() { + return policyDAOErrorMessage; + } + + public void setPolicyDAOErrorMessage(String policyDAOErrorMessage) { + this.policyDAOErrorMessage = policyDAOErrorMessage; + } + + public PolicyManagerDAOException(String message) { + super(message); + setPolicyDAOErrorMessage(message); + } + + public PolicyManagerDAOException(String message, Exception ex) { + super(message, ex); + setPolicyDAOErrorMessage(message); + } + + public PolicyManagerDAOException(String message, Throwable cause) { + super(message, cause); + setPolicyDAOErrorMessage(message); + } + + public PolicyManagerDAOException() { + super(); + } + + public PolicyManagerDAOException(Throwable cause) { + super(cause); + } +} diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java new file mode 100644 index 0000000000..0a5c6bc744 --- /dev/null +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java @@ -0,0 +1,73 @@ +/* +* Copyright (c) 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.policy.mgt.core.dao.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.policy.mgt.common.Policy; +import org.wso2.carbon.policy.mgt.core.dao.PolicyDAO; +import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException; + +import javax.sql.DataSource; + +public class PolicyDAOImpl implements PolicyDAO { + + private static DataSource dataSource; + private static final Log log = LogFactory.getLog(PolicyDAOImpl.class); + + public PolicyDAOImpl(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Override + public int addPolicy(Policy policy) throws PolicyManagerDAOException { + + return 0; + } + + @Override + public int addPolicy(String deviceType, Policy policy) throws PolicyManagerDAOException { + return 0; + } + + @Override + public int addPolicy(String deviceID, String deviceType, Policy policy) throws PolicyManagerDAOException { + return 0; + } + + @Override + public void updatePolicy(int id) throws PolicyManagerDAOException { + + } + + @Override + public Policy getPolicy() throws PolicyManagerDAOException { + return null; + } + + @Override + public Policy getPolicy(String deviceType) throws PolicyManagerDAOException { + return null; + } + + @Override + public Policy getPolicy(String deviceID, String deviceType) throws PolicyManagerDAOException { + return null; + } +} diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/util/PolicyManagementDAOUtil.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/util/PolicyManagementDAOUtil.java index e8c0c39068..55d4be5ec9 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/util/PolicyManagementDAOUtil.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/util/PolicyManagementDAOUtil.java @@ -18,5 +18,21 @@ package org.wso2.carbon.policy.mgt.core.dao.util; +import javax.naming.InitialContext; +import javax.sql.DataSource; +import java.util.Hashtable; + public class PolicyManagementDAOUtil { + public static DataSource lookupDataSource(String dataSourceName, final Hashtable jndiProperties) { + try { + if (jndiProperties == null || jndiProperties.isEmpty()) { + return (DataSource) InitialContext.doLookup(dataSourceName); + } + final InitialContext context = new InitialContext(jndiProperties); + return (DataSource) context.doLookup(dataSourceName); + } catch (Exception e) { + throw new RuntimeException("Error in looking up data source: " + e.getMessage(), e); + } + } + } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementDataHolder.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementDataHolder.java index 8726335f11..afbf02eca0 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementDataHolder.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementDataHolder.java @@ -18,5 +18,40 @@ package org.wso2.carbon.policy.mgt.core.internal; +import org.wso2.carbon.user.core.service.RealmService; +import org.wso2.carbon.user.core.tenant.TenantManager; + public class PolicyManagementDataHolder { + + private RealmService realmService; + private TenantManager tenantManager; + private static PolicyManagementDataHolder thisInstance = new PolicyManagementDataHolder(); + + private PolicyManagementDataHolder() {} + + public static PolicyManagementDataHolder getInstance() { + return thisInstance; + } + + public RealmService getRealmService() { + return realmService; + } + + public void setRealmService(RealmService realmService) { + this.realmService = realmService; + this.setTenantManager(realmService); + } + + private void setTenantManager(RealmService realmService) { + if (realmService == null) { + throw new IllegalStateException("Realm service is not initialized properly"); + } + this.tenantManager = realmService.getTenantManager(); + } + + public TenantManager getTenantManager() { + return tenantManager; + } + + } diff --git a/pom.xml b/pom.xml index 73843cab13..1d092189aa 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,14 @@ ${project.version} - + + org.wso2.carbon + org.wso2.carbon.policy.mgt.common + ${project.version} + + + + org.eclipse.osgi org.eclipse.osgi