From 233c3c60b24ac527f2f8396d0b4fa1d64068a5a2 Mon Sep 17 00:00:00 2001
From: Geeth Munasinghe <geeth@wso2.com>
Date: Tue, 9 Dec 2014 18:54:05 +0530
Subject: [PATCH] Adding policy mgt daos

---
 .../org.wso2.carbon.policy.mgt.core/pom.xml   | 22 ++++++
 .../carbon/policy/mgt/core/dao/PolicyDAO.java | 38 ++++++++++
 .../core/dao/PolicyManagementDAOFactory.java  | 58 +++++++++++++++
 .../core/dao/PolicyManagerDAOException.java   | 55 ++++++++++++++
 .../mgt/core/dao/impl/PolicyDAOImpl.java      | 73 +++++++++++++++++++
 .../dao/util/PolicyManagementDAOUtil.java     | 16 ++++
 .../internal/PolicyManagementDataHolder.java  | 35 +++++++++
 pom.xml                                       |  9 ++-
 8 files changed, 305 insertions(+), 1 deletion(-)
 create mode 100644 components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java
 create mode 100644 components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyManagerDAOException.java
 create mode 100644 components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java

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 d66e9ff997e..5b9b7deb789 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 @@
             <groupId>org.wso2.carbon</groupId>
             <artifactId>org.wso2.carbon.logging</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.wso2.carbon</groupId>
+            <artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.wso2.carbon</groupId>
+            <artifactId>org.wso2.carbon.utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.wso2.carbon</groupId>
+            <artifactId>org.wso2.carbon.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.wso2.carbon</groupId>
+            <artifactId>org.wso2.carbon.ndatasource.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.wso2.carbon</groupId>
+            <artifactId>org.wso2.carbon.ndatasource.rdbms</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.wso2.carbon</groupId>
             <artifactId>org.wso2.carbon.logging</artifactId>
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 00000000000..944bf89a9ef
--- /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 0e2b1c91a51..f1d9cf56cab 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<JNDILookupDefinition.JNDIProperty> jndiPropertyList =
+                    jndiConfig.getJndiProperties();
+            if (jndiPropertyList != null) {
+                Hashtable<Object, Object> jndiProperties = new Hashtable<Object, Object>();
+                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 00000000000..4913f6752cd
--- /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 00000000000..0a5c6bc7443
--- /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 e8c0c39068b..55d4be5ec9a 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<Object, Object> 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 8726335f111..afbf02eca0f 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 73843cab139..1d092189aa8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,7 +123,14 @@
                 <version>${project.version}</version>
             </dependency>
 
-              <!--Osgi dependencies-->
+            <dependency>
+                <groupId>org.wso2.carbon</groupId>
+                <artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
+
+            <!--Osgi dependencies-->
             <dependency>
                 <groupId>org.eclipse.osgi</groupId>
                 <artifactId>org.eclipse.osgi</artifactId>