diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/pom.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/pom.xml new file mode 100644 index 0000000000..496462c287 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/pom.xml @@ -0,0 +1,362 @@ + + + + + + + org.wso2.carbon.devicemgt + operation-template-mgt + 5.0.20-SNAPSHOT + ../pom.xml + + + 4.0.0 + io.entgra.device.mgt.operation.template + bundle + Entgra IoT - Operation Template Core + Entgra IoT - Operation Template Core + http://entgra.io + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.felix + maven-scr-plugin + + + org.apache.felix + maven-bundle-plugin + true + + + ${project.artifactId} + ${project.artifactId} + ${carbon.device.mgt.version} + IOT Operation Template Bundle + io.entgra.device.mgt.operation.template.internal + + org.osgi.framework.*;version="${imp.package.version.osgi.framework}", + org.osgi.service.*;version="${imp.package.version.osgi.service}", + org.apache.commons.logging, + org.apache.commons.lang, + javax.xml, + javax.xml.stream, + javax.xml.bind.*;version="${javax.xml.bind.imp.pkg.version}", + javax.sql, + javax.xml.parsers; version=0.0.0, + org.w3c.dom, + com.google.gson.*, + javax.naming, + org.wso2.carbon.context, + org.wso2.carbon.base, + org.wso2.carbon.utils.*, + org.wso2.carbon.device.mgt.common.*, + org.wso2.carbon.device.mgt.core.*, + org.wso2.carbon.ndatasource.core, + org.wso2.carbon.registry.core, + org.wso2.carbon.registry.core.session, + org.wso2.carbon.registry.core.service, + org.wso2.carbon.registry.api, + org.wso2.carbon.device.mgt.extensions.license.mgt.registry, + javax.net.ssl, + org.wso2.carbon.core.util, + okhttp3 + + + !io.entgra.device.mgt.operation.template.internal, + io.entgra.device.mgt.operation.template.* + + + + + + org.jacoco + jacoco-maven-plugin + + ${basedir}/target/coverage-reports/jacoco-unit.exec + + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + test + + report + + + ${basedir}/target/coverage-reports/jacoco-unit.exec + ${basedir}/target/coverage-reports/site + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + file:src/test/resources/carbon-home/repository/conf/log4j.properties + + + + src/test/resources/testng.xml + + + + + + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.common + provided + + + org.wso2.carbon.identity.inbound.auth.oauth2 + org.wso2.carbon.identity.oauth.stub + + + org.apache.axis2.wso2 + axis2-client + + + org.apache.geronimo.specs.wso2 + geronimo-stax-api_1.0_spec + + + org.apache.ws.commons.axiom.wso2 + axiom + + + org.codehaus.woodstox + woodstox-core-asl + + + org.codehaus.woodstox + wstx-asl + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.analytics.data.publisher + + + org.wso2.carbon.analytics + org.wso2.carbon.analytics.api + + + + + org.powermock + powermock-module-testng + test + + + org.testng + testng + test + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.extensions + provided + + + org.codehaus.woodstox + stax2-api + + + org.codehaus.woodstox + woodstox-core-asl + + + org.wso2.carbon + org.wso2.carbon.securevault + + + org.apache.ws.commons.axiom.wso2 + axiom + + + + + org.wso2.carbon + org.wso2.carbon.ndatasource.core + provided + + + org.wso2.securevault + org.wso2.securevault + + + + + org.wso2.carbon + org.wso2.carbon.base + provided + + + org.wso2.securevault + org.wso2.securevault + + + org.apache.ws.commons.axiom.wso2 + axiom + + + org.mockito + mockito-core + + + + + org.eclipse.osgi + org.eclipse.osgi + provided + + + com.h2database.wso2 + h2-database-engine + test + + + org.eclipse.osgi + org.eclipse.osgi.services + provided + + + org.wso2.carbon + org.wso2.carbon.core + provided + + + org.wso2.carbon + org.wso2.carbon.logging + provided + + + org.wso2.carbon + org.wso2.carbon.utils + provided + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.core + provided + + + org.wso2.carbon + org.wso2.carbon.registry.api + provided + + + org.wso2.carbon + org.wso2.carbon.registry.core + provided + + + org.apache.tomcat.wso2 + jdbc-pool + provided + + + com.google.code.gson + gson + provided + + + io.github.openfeign + feign-core + provided + + + io.github.openfeign + feign-jackson + provided + + + com.google.guava + guava + + + io.github.openfeign + feign-jaxrs + provided + + + io.github.openfeign + feign-gson + provided + + + io.github.openfeign + feign-okhttp + provided + + + io.github.openfeign + feign-slf4j + provided + + + org.wso2.carbon.devicemgt + org.wso2.carbon.identity.jwt.client.extension + provided + + + commons-validator + commons-validator + provided + + + org.apache.cxf + cxf-rt-frontend-jaxws + provided + + + org.apache.cxf + cxf-rt-frontend-jaxrs + provided + + + org.apache.cxf + cxf-rt-transports-http + provided + + + commons-lang.wso2 + commons-lang + provided + + + javax.xml.bind + jaxb-api + test + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/cache/OperationTemplateCacheLoader.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/cache/OperationTemplateCacheLoader.java new file mode 100644 index 0000000000..792d540004 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/cache/OperationTemplateCacheLoader.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.cache; + +import com.google.common.cache.CacheLoader; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAO; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.dao.impl.util.OperationTemplateManagementUtil; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.dto.OperationTemplateCacheKey; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateMgtPluginException; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Class for the Operation Template cache. + */ +public class OperationTemplateCacheLoader extends CacheLoader { + + private static final Log log = LogFactory.getLog(OperationTemplateCacheLoader.class); + + private final OperationTemplateDAO operationTemplateDAO; + + public OperationTemplateCacheLoader() { + this.operationTemplateDAO = OperationTemplateDAOFactory.getOperationTemplateDAO(); + } + + /** + * + * @param key the non-null key whose value should be loaded + * @return + * @throws OperationTemplateMgtPluginException + */ + @Override + public OperationTemplate load(String key) throws OperationTemplateMgtPluginException { + OperationTemplateCacheKey operationTemplateCacheKey = OperationTemplateManagementUtil.getOperationTemplateCacheKey( + key); + int subTypeId = operationTemplateCacheKey.getSubTypeId(); + String operationCode = operationTemplateCacheKey.getOperationCode(); + String deviceType = operationTemplateCacheKey.getDeviceType(); + + if (log.isTraceEnabled()) { + log.trace( + "Loading operation template for subtype Id : " + subTypeId + " & deviceType : " + deviceType + " operation code : " + + operationCode); + } + try { + ConnectionManagerUtils.openDBConnection(); + return operationTemplateDAO.getOperationTemplate(subTypeId, deviceType, operationCode); + } catch (DBConnectionException e) { + String msg = + "Error occurred while obtaining the database connection to retrieve operation template for " + + + "subtype Id : " + subTypeId + " & operation code : " + operationCode; + log.error(msg); + throw new OperationTemplateMgtPluginException(msg, e); + } catch (InvalidCacheLoadException e) { + String msg = + "CacheLoader returned null for operation template for subtype Id : " + subTypeId + + " & operation code : " + operationCode; + log.error(msg, e); + return null; + } catch (OperationTemplateManagementDAOException e) { + String msg = + "Error occurred in the database level while retrieving operation template for subtype Id : " + + subTypeId + " & operation code : " + operationCode; + log.error(msg); + throw new OperationTemplateMgtPluginException(msg, e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + } + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAO.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAO.java new file mode 100644 index 0000000000..d395c4d54c --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAO.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao; + +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; + +/** + * This class represents the key operations associated with persisting mobile-device related + * information. + */ +public interface OperationTemplateDAO { + void addOperationTemplate(OperationTemplate operationTemplate) throws OperationTemplateManagementDAOException; + + OperationTemplate updateOperationTemplate(OperationTemplate operationTemplate) + throws OperationTemplateManagementDAOException; + + OperationTemplate getOperationTemplate(int subTypeId, String deviceType, String operationCode) throws OperationTemplateManagementDAOException; + + void deleteOperationTemplate(int subTypeId, String deviceCode, String operationCode) throws OperationTemplateManagementDAOException; + + boolean isExistsOperationTemplateBySubtypeIdAndOperationCode(int subTypeId, String deviceType, String operationCode) throws OperationTemplateManagementDAOException; +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAOFactory.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAOFactory.java new file mode 100644 index 0000000000..b62ed24635 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/OperationTemplateDAOFactory.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao; + +import io.entgra.device.mgt.operation.template.dao.impl.OperationTemplateDAOImpl; +import io.entgra.device.mgt.operation.template.dao.impl.OperationTemplateMySQLDAOImpl; +import io.entgra.device.mgt.operation.template.dao.impl.config.datasource.DataSourceConfig; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; + + +public class OperationTemplateDAOFactory { + + private static final Log log = LogFactory.getLog(OperationTemplateDAOFactory.class); + private static String databaseEngine; + + /** + * + * @param config + */ + public static void init(DataSourceConfig config) { + if (log.isDebugEnabled()) { + log.debug("Initializing Operation Template Mgt Data Source"); + } + ConnectionManagerUtils.resolveDataSource(config); + databaseEngine = ConnectionManagerUtils.getDatabaseType(); + } + + /** + * + * @return + */ + public static OperationTemplateDAO getOperationTemplateDAO() { + if (databaseEngine == null) { + throw new IllegalStateException("Database engine has not initialized properly."); + } + //noinspection SwitchStatementWithTooFewBranches + switch (databaseEngine) { + case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL: + return new OperationTemplateMySQLDAOImpl(); + default: + return new OperationTemplateDAOImpl(); + } + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateDAOImpl.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateDAOImpl.java new file mode 100644 index 0000000000..f32246ec0c --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateDAOImpl.java @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl; + +import com.google.gson.Gson; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAO; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import io.entgra.device.mgt.operation.template.util.DAOUtil; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Implementation for generic DB engines. + */ +public class OperationTemplateDAOImpl implements OperationTemplateDAO { + + private static final Log log = LogFactory.getLog(OperationTemplateDAOImpl.class); + + /** + * + * @param operationTemplate + * @throws OperationTemplateManagementDAOException + */ + @Override + public void addOperationTemplate(OperationTemplate operationTemplate) + throws OperationTemplateManagementDAOException { + + try { + String sql = + "INSERT INTO SUB_OPERATION_TEMPLATE (" + "OPERATION_DEFINITION, " + "OPERATION_CODE, " + + "SUB_TYPE_ID, " + "DEVICE_TYPE, " + "CREATE_TIMESTAMP, " + "UPDATE_TIMESTAMP) " + + "VALUES (?, ?, ?, ?, ?, ?)"; + Connection conn = ConnectionManagerUtils.getDBConnection(); + + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + + int index = 1; + stmt.setObject(index++, new Gson().toJson(operationTemplate.getOperationDefinition())); + stmt.setString(index++, operationTemplate.getCode()); + stmt.setInt(index++, operationTemplate.getSubTypeId()); + stmt.setString(index++, operationTemplate.getDeviceType()); + stmt.setTimestamp(index++, new Timestamp(System.currentTimeMillis())); + stmt.setTimestamp(index++, null); + stmt.executeUpdate(); + } catch (SQLException e) { + String msg = "Error occurred while processing insert operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to insert operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } + + /** + * + * @param operationTemplate + * @return + * @throws OperationTemplateManagementDAOException + */ + @Override + public OperationTemplate updateOperationTemplate(OperationTemplate operationTemplate) + throws OperationTemplateManagementDAOException { + + try { + String sql = + "UPDATE SUB_OPERATION_TEMPLATE SET OPERATION_DEFINITION = ? WHERE SUB_TYPE_ID = ? AND DEVICE_TYPE = ? " + + "AND OPERATION_CODE = ?"; + + Connection conn = ConnectionManagerUtils.getDBConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setString(1, operationTemplate.getOperationDefinition()); + stmt.setInt(2, operationTemplate.getSubTypeId()); + stmt.setString(3, operationTemplate.getDeviceType()); + stmt.setString(4, operationTemplate.getCode()); + stmt.executeUpdate(); + + return getOperationTemplate(operationTemplate.getSubTypeId(), operationTemplate.getDeviceType(), operationTemplate.getCode()); + } catch (SQLException e) { + String msg = "Error occurred while processing update operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to update operation template."; + throw new OperationTemplateManagementDAOException(msg, e); + } + } + + /** + * + * @param subTypeId + * @param deviceType + * @param operationCode + * @return + * @throws OperationTemplateManagementDAOException + */ + @Override + public OperationTemplate getOperationTemplate(int subTypeId, String deviceType, String operationCode) + throws OperationTemplateManagementDAOException { + try { + String sql = "SELECT * FROM SUB_OPERATION_TEMPLATE WHERE SUB_TYPE_ID = ? AND DEVICE_TYPE = ? AND OPERATION_CODE = ?"; + Connection conn = ConnectionManagerUtils.getDBConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, subTypeId); + stmt.setString(2, deviceType); + stmt.setString(3, operationCode); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return DAOUtil.loadOperationTemplate(rs); + } + return null; + } + } catch (SQLException e) { + String msg = "Error occurred while loading operation template."; + log.error(e.getMessage()); + throw new OperationTemplateManagementDAOException(msg, e); + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to loading operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } + + /** + * + * @param subTypeId + * @param deviceType + * @param operationCode + * @throws OperationTemplateManagementDAOException + */ + @Override + public void deleteOperationTemplate(int subTypeId, String deviceType, String operationCode) + throws OperationTemplateManagementDAOException { + String sql = "DELETE FROM SUB_OPERATION_TEMPLATE WHERE SUB_TYPE_ID = ? AND DEVICE_TYPE = ? AND OPERATION_CODE = ?"; + try { + Connection conn = ConnectionManagerUtils.getDBConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, subTypeId); + stmt.setString(2, deviceType); + stmt.setString(3, operationCode); + stmt.executeUpdate(); + } catch (SQLException e) { + String msg = "Error occurred while deleting operation template for sub type id : " + subTypeId + + " and operation code : " + operationCode; + log.error(msg, e); + throw new OperationTemplateManagementDAOException(msg, e); + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to delete operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } + + /** + * + * @param subTypeId + * @param deviceType + * @param operationCode + * @return + * @throws OperationTemplateManagementDAOException + */ + @Override + public boolean isExistsOperationTemplateBySubtypeIdAndOperationCode(int subTypeId, String deviceType, + String operationCode) throws OperationTemplateManagementDAOException { + try { + String sql = "SELECT * FROM SUB_OPERATION_TEMPLATE WHERE SUB_TYPE_ID = ? AND DEVICE_TYPE = ? AND OPERATION_CODE = ?"; + + Connection conn = ConnectionManagerUtils.getDBConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, subTypeId); + stmt.setString(2, deviceType); + stmt.setString(3, operationCode); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return true; + } + return false; + } + } catch (SQLException e) { + String msg = "Error occurred while loading operation template."; + log.error(e.getMessage()); + throw new OperationTemplateManagementDAOException(msg, e); + } + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to loading operation template."; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateMySQLDAOImpl.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateMySQLDAOImpl.java new file mode 100644 index 0000000000..26fedaa4e5 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/OperationTemplateMySQLDAOImpl.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl; + + +/** + * Implementation for MySQL + */ +public class OperationTemplateMySQLDAOImpl extends OperationTemplateDAOImpl { + + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceConfigurationManager.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceConfigurationManager.java new file mode 100644 index 0000000000..80915cd1bf --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceConfigurationManager.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.config; + +import io.entgra.device.mgt.operation.template.dao.impl.util.OperationTemplateManagementUtil; +import org.w3c.dom.Document; +import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException; +import org.wso2.carbon.utils.CarbonUtils; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import java.io.File; + +/** + * Class responsible for the mobile device manager configuration initialization. + */ +public class DeviceConfigurationManager { + + public static final String DEVICE_CONFIG_XML_NAME = "cdm-config.xml"; + private DeviceManagementConfig deviceManagementConfig; + private static DeviceConfigurationManager deviceConfigurationManager; + private final String operationTemplateMgtConfigXMLPath = CarbonUtils.getCarbonConfigDirPath() + File.separator + + DEVICE_CONFIG_XML_NAME; + + /** + * + * @return + */ + public static DeviceConfigurationManager getInstance() { + if (deviceConfigurationManager == null) { + synchronized (DeviceConfigurationManager.class) { + if (deviceConfigurationManager == null) { + deviceConfigurationManager = new DeviceConfigurationManager(); + } + } + } + return deviceConfigurationManager; + } + + /** + * + * @throws DeviceManagementException + */ + public synchronized void initConfig() throws DeviceManagementException { + try { + File deviceMgtConfig = new File(operationTemplateMgtConfigXMLPath); + Document doc = OperationTemplateManagementUtil.convertToDocument(deviceMgtConfig); + JAXBContext mobileDeviceMgmtContext = + JAXBContext.newInstance(DeviceManagementConfig.class); + Unmarshaller unmarshaller = mobileDeviceMgmtContext.createUnmarshaller(); + this.deviceManagementConfig = + (DeviceManagementConfig) unmarshaller.unmarshal(doc); + } catch (Exception e) { + throw new DeviceManagementException( + "Error occurred while initializing Mobile Device Management config", e); + } + } + + /** + * + * @return + */ + public DeviceManagementConfig getDeviceManagementConfig() { + return deviceManagementConfig; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementConfig.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementConfig.java new file mode 100644 index 0000000000..7a817d67ea --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementConfig.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.config; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Represents Mobile Device Mgt configuration. + */ +@XmlRootElement(name = "DeviceMgtConfiguration") +public final class DeviceManagementConfig { + + private DeviceManagementRepository deviceManagementRepository; + + @XmlElement(name = "ManagementRepository", required = true) + public DeviceManagementRepository getDeviceManagementRepository() { + return deviceManagementRepository; + } + + public void setDeviceManagementRepository( + DeviceManagementRepository deviceManagementRepository) { + this.deviceManagementRepository = deviceManagementRepository; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementRepository.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementRepository.java new file mode 100644 index 0000000000..315c1a8f3b --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/DeviceManagementRepository.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.config; + +import io.entgra.device.mgt.operation.template.dao.impl.config.datasource.DataSourceConfig; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Class for holding management repository data. + */ +@XmlRootElement(name = "ManagementRepository") +public class DeviceManagementRepository { + + private DataSourceConfig dataSourceConfig; + + @XmlElement(name = "DataSourceConfiguration", required = true) + public DataSourceConfig getDataSourceConfig() { + return dataSourceConfig; + } + + public void setDataSourceConfig( + DataSourceConfig dataSourceConfig) { + this.dataSourceConfig = dataSourceConfig; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/DataSourceConfig.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/DataSourceConfig.java new file mode 100644 index 0000000000..519fa3c92b --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/DataSourceConfig.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.config.datasource; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Class for holding data source configuration at parsing with JAXB. + */ +@XmlRootElement(name = "DataSourceConfiguration") +public class DataSourceConfig { + + private JNDILookupDefinition jndiLookupDefinition; + + @XmlElement(name = "JndiLookupDefinition", required = true) + public JNDILookupDefinition getJndiLookupDefinition() { + return jndiLookupDefinition; + } + + public void setJndiLookupDefinition(JNDILookupDefinition jndiLookupDefinition) { + this.jndiLookupDefinition = jndiLookupDefinition; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/JNDILookupDefinition.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/JNDILookupDefinition.java new file mode 100644 index 0000000000..6ecfcda805 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/config/datasource/JNDILookupDefinition.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.config.datasource; + +import javax.xml.bind.annotation.*; +import java.util.List; + +/** + * Class for hold JndiLookupDefinition at parsing with JAXB. + */ +@XmlRootElement(name = "JndiLookupDefinition") +public class JNDILookupDefinition { + + private String jndiName; + private List jndiProperties; + + @XmlElement(name = "Name", required = false) + public String getJndiName() { + return jndiName; + } + + public void setJndiName(String jndiName) { + this.jndiName = jndiName; + } + + @XmlElementWrapper(name = "Environment", nillable = false) + @XmlElement(name = "Property", nillable = false) + public List getJndiProperties() { + return jndiProperties; + } + + public void setJndiProperties(List jndiProperties) { + this.jndiProperties = jndiProperties; + } + + @XmlRootElement(name = "Property") + public static class JNDIProperty { + + private String name; + + private String value; + + @XmlAttribute(name = "Name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlValue + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + +} + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/util/OperationTemplateManagementUtil.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/util/OperationTemplateManagementUtil.java new file mode 100644 index 0000000000..079fb65847 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dao/impl/util/OperationTemplateManagementUtil.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dao.impl.util; + +import io.entgra.device.mgt.operation.template.dto.OperationTemplateCacheKey; +import org.w3c.dom.Document; +import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.File; + +public class OperationTemplateManagementUtil { + + private OperationTemplateManagementUtil() { + } + + /** + * + * @param file + * @return + * @throws DeviceManagementException + */ + public static Document convertToDocument(File file) throws DeviceManagementException { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + try { + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + DocumentBuilder docBuilder = factory.newDocumentBuilder(); + return docBuilder.parse(file); + } catch (Exception e) { + throw new DeviceManagementException("Error occurred while parsing file, while converting " + + "to a org.w3c.dom.Document", e); + } + } + + /** + * + * @param subTypeId + * @param deviceType + * @param operationCode + * @return + */ + public static String setOperationTemplateCacheKey(int subTypeId, String deviceType, String operationCode) { + return subTypeId + "|" + deviceType + "|" + operationCode; + } + + /** + * + * @param key + * @return + */ + public static OperationTemplateCacheKey getOperationTemplateCacheKey(String key) { + String[] keys = key.split("\\|"); + int subTypeId = Integer.parseInt(keys[0]); + String deviceType = keys[1]; + String operationCode = keys[2]; + + OperationTemplateCacheKey operationTemplateCacheKey = new OperationTemplateCacheKey(); + operationTemplateCacheKey.setSubTypeId(subTypeId); + operationTemplateCacheKey.setDeviceType(deviceType); + operationTemplateCacheKey.setOperationCode(operationCode); + + return operationTemplateCacheKey; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplate.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplate.java new file mode 100644 index 0000000000..0ecd0a1c47 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplate.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dto; + +public class OperationTemplate { + private int subTypeId; + + private String deviceType; + private int operationTemplateId; + private String code; + private String operationDefinition; + + public int getSubTypeId() { + return subTypeId; + } + + public void setSubTypeId(int subTypeId) { + this.subTypeId = subTypeId; + } + + public int getOperationTemplateId() { + return operationTemplateId; + } + + public void setOperationTemplateId(int operationTemplateId) { + this.operationTemplateId = operationTemplateId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOperationDefinition() { + return operationDefinition; + } + + public void setOperationDefinition(String operationDefinition) { + this.operationDefinition = operationDefinition; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplateCacheKey.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplateCacheKey.java new file mode 100644 index 0000000000..2bbbf1a22d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/dto/OperationTemplateCacheKey.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.dto; + +public class OperationTemplateCacheKey { + + int subTypeId; + String deviceType; + String operationCode; + + public int getSubTypeId() { + return subTypeId; + } + + public void setSubTypeId(int subTypeId) { + this.subTypeId = subTypeId; + } + + public String getOperationCode() { + return operationCode; + } + + public void setOperationCode(String operationCode) { + this.operationCode = operationCode; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/DBConnectionException.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/DBConnectionException.java new file mode 100644 index 0000000000..05928673d8 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/DBConnectionException.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.exception; + +/** + * Exception thrown due to Database Connection issues. + */ +public class DBConnectionException extends Exception { + + private static final long serialVersionUID = 8568807205814148601L; + + public DBConnectionException(String message, Throwable cause) { + super(message, cause); + } + + public DBConnectionException(String msg) { + super(msg); + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateManagementDAOException.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateManagementDAOException.java new file mode 100644 index 0000000000..da9aec9dd8 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateManagementDAOException.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.exception; + +public class OperationTemplateManagementDAOException extends Exception { + + private static final long serialVersionUID = -2880391246325221123L; + + public OperationTemplateManagementDAOException(String message, Throwable throwable) { + super(message, throwable); + } + + public OperationTemplateManagementDAOException(String message) { + super(message, new Exception()); + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateMgtPluginException.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateMgtPluginException.java new file mode 100644 index 0000000000..d2f9deafde --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/exception/OperationTemplateMgtPluginException.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.exception; + +public class OperationTemplateMgtPluginException extends Exception { + + private static final long serialVersionUID = 1426658754211497795L; + + private String errorMessage; + + public OperationTemplateMgtPluginException() { + super(); + } + + public OperationTemplateMgtPluginException(Throwable cause) { + super(cause); + } + + public OperationTemplateMgtPluginException(String msg, Exception nestedEx) { + super(msg, nestedEx); + setErrorMessage(msg); + } + + public OperationTemplateMgtPluginException(String message, Throwable cause) { + super(message, cause); + setErrorMessage(message); + } + + public OperationTemplateMgtPluginException(String msg) { + super(msg); + setErrorMessage(msg); + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/impl/OperationTemplateServiceImpl.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/impl/OperationTemplateServiceImpl.java new file mode 100644 index 0000000000..3094b04a53 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/impl/OperationTemplateServiceImpl.java @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.impl; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.LoadingCache; +import io.entgra.device.mgt.operation.template.cache.OperationTemplateCacheLoader; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAO; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.dao.impl.util.OperationTemplateManagementUtil; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateMgtPluginException; +import io.entgra.device.mgt.operation.template.spi.OperationTemplateService; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Operation Template service impl class. + */ +public class OperationTemplateServiceImpl implements OperationTemplateService { + + private static final Log log = LogFactory.getLog(OperationTemplateServiceImpl.class); + private static final LoadingCache operationTemplateCache = CacheBuilder.newBuilder() + .expireAfterWrite(15, TimeUnit.MINUTES).build(new OperationTemplateCacheLoader()); + private final OperationTemplateDAO operationTemplateDAO; + + public OperationTemplateServiceImpl() { + this.operationTemplateDAO = OperationTemplateDAOFactory.getOperationTemplateDAO(); + } + + /** + * @param operationTemplate + * @throws OperationTemplateMgtPluginException + */ + @Override + public void addOperationTemplate(OperationTemplate operationTemplate) + throws OperationTemplateMgtPluginException { + + try { + ConnectionManagerUtils.beginDBTransaction(); + operationTemplateDAO.addOperationTemplate(operationTemplate); + ConnectionManagerUtils.commitDBTransaction(); + + String key = OperationTemplateManagementUtil.setOperationTemplateCacheKey( + operationTemplate.getSubTypeId(), operationTemplate.getDeviceType(), operationTemplate.getCode()); + operationTemplateCache.put(key, operationTemplate); + + if (log.isDebugEnabled()) { + String msg = "Operation Template added successfully,for subtype id " + + operationTemplate.getSubTypeId() + " and operation code " + + operationTemplate.getCode() + ""; + log.debug(msg); + } + } catch (DBConnectionException | OperationTemplateManagementDAOException e) { + log.error(e.getMessage(), e); + throw new OperationTemplateMgtPluginException(e.getMessage(), e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + } + } + + /** + * @param operationTemplate + * @return + * @throws OperationTemplateMgtPluginException + */ + @Override + public OperationTemplate updateOperationTemplate(OperationTemplate operationTemplate) + throws OperationTemplateMgtPluginException { + + OperationTemplate updatedOperationTemplate = null; + try { + ConnectionManagerUtils.beginDBTransaction(); + updatedOperationTemplate = operationTemplateDAO.updateOperationTemplate( + operationTemplate); + ConnectionManagerUtils.commitDBTransaction(); + if (log.isDebugEnabled()) { + String msg = "Operation Template updated successfully,for subtype id " + + operationTemplate.getSubTypeId() + " and operation code " + operationTemplate.getCode() + + ""; + log.debug(msg); + } + return updatedOperationTemplate; + } catch (DBConnectionException | OperationTemplateManagementDAOException e) { + log.error(e.getMessage(), e); + throw new OperationTemplateMgtPluginException(e.getMessage(), e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + + if (updatedOperationTemplate != null) { + String key = OperationTemplateManagementUtil.setOperationTemplateCacheKey( + operationTemplate.getSubTypeId(), operationTemplate.getDeviceType(), operationTemplate.getCode()); + operationTemplateCache.refresh(key); + } + } + } + + /** + * @param subTypeId + * @param deviceType + * @param operationCode + * @return + * @throws OperationTemplateMgtPluginException + */ + @Override + public OperationTemplate getOperationTemplate(int subTypeId, String deviceType, String operationCode) + throws OperationTemplateMgtPluginException { + try { + String key = OperationTemplateManagementUtil.setOperationTemplateCacheKey(subTypeId, deviceType, + operationCode); + return operationTemplateCache.get(key); + } catch (ExecutionException e) { + log.error(e.getMessage()); + throw new OperationTemplateMgtPluginException(e.getMessage(), e); + } + } + + /** + * @param subTypeId + * @param deviceType + * @param operationCode + * @throws OperationTemplateMgtPluginException + */ + @Override + public void deleteOperationTemplate(int subTypeId, String deviceType, String operationCode) + throws OperationTemplateMgtPluginException { + + try { + ConnectionManagerUtils.beginDBTransaction(); + operationTemplateDAO.deleteOperationTemplate(subTypeId, deviceType, operationCode); + ConnectionManagerUtils.commitDBTransaction(); + if (log.isDebugEnabled()) { + String msg = "Operation Template deleted successfully,for subtype id " + + subTypeId + " and operation code " + + operationCode + ""; + log.debug(msg); + } + String key = OperationTemplateManagementUtil.setOperationTemplateCacheKey( + subTypeId, deviceType, operationCode); + operationTemplateCache.invalidate(key); + } catch (DBConnectionException | OperationTemplateManagementDAOException e) { + log.error(e.getMessage()); + throw new OperationTemplateMgtPluginException(e.getMessage(), e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + + } + } + + /** + * @param subTypeId + * @param operationCode + * @param deviceType + * @return + * @throws OperationTemplateMgtPluginException + */ + @Override + public boolean isExistsOperationTemplateBySubtypeIdAndOperationCode(int subTypeId, + String operationCode, String deviceType) throws OperationTemplateMgtPluginException { + try { + ConnectionManagerUtils.openDBConnection(); + return operationTemplateDAO.isExistsOperationTemplateBySubtypeIdAndOperationCode(subTypeId, deviceType, + operationCode); + + } catch (DBConnectionException | OperationTemplateManagementDAOException e) { + log.error(e.getMessage()); + throw new OperationTemplateMgtPluginException(e.getMessage(), e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + } + } + +} \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtDataHolder.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtDataHolder.java new file mode 100644 index 0000000000..2236d5cd90 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtDataHolder.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.internal; + +import io.entgra.device.mgt.operation.template.spi.OperationTemplateService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.registry.core.service.RegistryService; + +/** + * Operation Template data holder class + */ +public class OperationTemplateMgtDataHolder { + + public static final OperationTemplateMgtDataHolder thisInstance = new OperationTemplateMgtDataHolder(); + + private OperationTemplateService operationTemplateService; + private DeviceManagementProviderService deviceManagementProviderService; + private RegistryService registryService; + private OperationTemplateMgtDataHolder() { + } + public static OperationTemplateMgtDataHolder getInstance() { + return thisInstance; + } + + public OperationTemplateService getOperationTemplateService() { + return operationTemplateService; + } + + public void setOperationTemplateService(OperationTemplateService operationTemplateService) { + this.operationTemplateService = operationTemplateService; + } + + public DeviceManagementProviderService getDeviceManagementProviderService() { + return deviceManagementProviderService; + } + + public void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) { + this.deviceManagementProviderService = deviceManagementProviderService; + } + + public RegistryService getRegistryService() { + return registryService; + } + + public void setRegistryService(RegistryService registryService) { + this.registryService = registryService; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtServiceComponent.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtServiceComponent.java new file mode 100644 index 0000000000..5233b37387 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/internal/OperationTemplateMgtServiceComponent.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.internal; + +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.dao.impl.config.DeviceConfigurationManager; +import io.entgra.device.mgt.operation.template.dao.impl.config.DeviceManagementConfig; +import io.entgra.device.mgt.operation.template.dao.impl.config.datasource.DataSourceConfig; +import io.entgra.device.mgt.operation.template.impl.OperationTemplateServiceImpl; +import io.entgra.device.mgt.operation.template.spi.OperationTemplateService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.ComponentContext; +import org.wso2.carbon.ndatasource.core.DataSourceService; + +/** + * @scr.component name="io.entgra.device.mgt.operation.template.internal.OperationTemplateMgtServiceComponent" immediate="true" + * immediate="true" + * @scr.reference name="org.wso2.carbon.ndatasource" + * interface="org.wso2.carbon.ndatasource.core.DataSourceService" + * cardinality="1..1" + * policy="dynamic" + * bind="setDataSourceService" + * unbind="unsetDataSourceService" + */ +public class OperationTemplateMgtServiceComponent { + + private static final Log log = LogFactory.getLog(OperationTemplateMgtServiceComponent.class); + + /** + * + * @param componentContext + */ + protected void activate(ComponentContext componentContext) { + + if (log.isDebugEnabled()) { + log.debug("Activating Operation Template Management Service Component"); + } + try { + BundleContext bundleContext = componentContext.getBundleContext(); + + DeviceConfigurationManager.getInstance().initConfig(); + DeviceManagementConfig config = DeviceConfigurationManager.getInstance().getDeviceManagementConfig(); + DataSourceConfig dsConfig = config.getDeviceManagementRepository().getDataSourceConfig(); + OperationTemplateDAOFactory.init(dsConfig); + + OperationTemplateService operationTemplateService = new OperationTemplateServiceImpl(); + OperationTemplateMgtDataHolder.getInstance().setOperationTemplateService(operationTemplateService); + bundleContext.registerService(OperationTemplateService.class, operationTemplateService, null); + + if (log.isDebugEnabled()) { + log.debug("Operation Template Management Service Component has been successfully activated"); + } + } catch (Throwable e) { + log.error("Error occurred while activating Operation Template Management Service Component", e); + } + } + + /** + * + * @param componentContext + */ + protected void deactivate(ComponentContext componentContext) { + if (log.isDebugEnabled()) { + log.debug("De-activating Operation Template Management Service Component"); + } + try { + if (log.isDebugEnabled()) { + log.debug("Operation Template Management Service Component has been successfully de-activated"); + } + } catch (Throwable e) { + log.error("Error occurred while de-activating Operation Template Management bundle", e); + } + } + + /** + * + * @param dataSourceService + */ + protected void setDataSourceService(DataSourceService dataSourceService) { + /* This is to avoid mobile device management component getting initialized before the underlying datasources + are registered */ + if (log.isDebugEnabled()) { + log.debug("Data source service set to Operation Template Mgt component"); + } + } + + /** + * + * @param dataSourceService + */ + protected void unsetDataSourceService(DataSourceService dataSourceService) { + //do nothing + if (log.isDebugEnabled()) { + log.debug("Removing Data Source service from Operation Template Mgt component"); + } + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/spi/OperationTemplateService.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/spi/OperationTemplateService.java new file mode 100644 index 0000000000..b8c2eaefbd --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/spi/OperationTemplateService.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.spi; + +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateMgtPluginException; + +/** + * Operation Template service interface. + */ +public interface OperationTemplateService { + + void addOperationTemplate(OperationTemplate operationTemplate) throws OperationTemplateMgtPluginException; + OperationTemplate updateOperationTemplate(OperationTemplate operationTemplate) throws OperationTemplateMgtPluginException; + OperationTemplate getOperationTemplate(int subTypeId, String deviceType, String operationCode) throws OperationTemplateMgtPluginException; + void deleteOperationTemplate(int subTypeId, String deviceType, String operationCode) throws OperationTemplateMgtPluginException; + boolean isExistsOperationTemplateBySubtypeIdAndOperationCode(int subTypeId, String deviceType, String operationCode) throws OperationTemplateMgtPluginException; + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/ConnectionManagerUtils.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/ConnectionManagerUtils.java new file mode 100644 index 0000000000..f20f34d50b --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/ConnectionManagerUtils.java @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.util; + +import io.entgra.device.mgt.operation.template.dao.impl.config.datasource.DataSourceConfig; +import io.entgra.device.mgt.operation.template.dao.impl.config.datasource.JNDILookupDefinition; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Hashtable; +import java.util.List; +import javax.naming.InitialContext; +import javax.sql.DataSource; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.exceptions.IllegalTransactionStateException; + +/** + * Connection Manager Utils class. + */ +public class ConnectionManagerUtils { + + private static final Log log = LogFactory.getLog(ConnectionManagerUtils.class); + private static final ThreadLocal currentConnection = new ThreadLocal<>(); + private static DataSource dataSource; + + private ConnectionManagerUtils() { + } + + /** + * + * @throws DBConnectionException + */ + public static void openDBConnection() throws DBConnectionException { + Connection conn = currentConnection.get(); + if (conn != null) { + throw new IllegalTransactionStateException("Database connection has already been obtained."); + } + try { + conn = dataSource.getConnection(); + } catch (SQLException e) { + throw new DBConnectionException("Failed to get a database connection.", e); + } + currentConnection.set(conn); + } + + /** + * + * @return + * @throws DBConnectionException + */ + public static Connection getDBConnection() throws DBConnectionException { + Connection conn = currentConnection.get(); + if (conn != null) { + return conn; + } + try { + conn = dataSource.getConnection(); + currentConnection.set(conn); + + } catch (SQLException e) { + throw new DBConnectionException("Failed to get database connection.", e); + } + return conn; + + } + + /** + * + * @throws DBConnectionException + */ + public static void beginDBTransaction() throws DBConnectionException { + Connection conn = currentConnection.get(); + if (conn == null) { + conn = getDBConnection(); + } else if (inTransaction(conn)) { + throw new IllegalTransactionStateException("Transaction has already been started."); + } + + try { + conn.setAutoCommit(false); + } catch (SQLException e) { + throw new DBConnectionException("Error occurred while starting a database transaction.", e); + } + } + + /** + * + * @throws DBConnectionException + */ + public static void enableAutoCommitDBTransaction() throws DBConnectionException { + Connection conn = currentConnection.get(); + if (conn == null) { + throw new IllegalTransactionStateException("Database connection is not active."); + } + + if (!inTransaction(conn)) { + throw new IllegalTransactionStateException("Transaction has not been started."); + } + + try { + conn.setAutoCommit(Boolean.TRUE); + } catch (SQLException e) { + throw new DBConnectionException("Error occurred while ending database transaction.", e); + } + } + + + public static void commitDBTransaction() { + Connection conn = currentConnection.get(); + if (conn == null) { + throw new IllegalTransactionStateException("Database connection is not active."); + } + + if (!inTransaction(conn)) { + throw new IllegalTransactionStateException("Transaction has not been started."); + } + + try { + conn.commit(); + } catch (SQLException e) { + log.error("Error occurred while committing the transaction", e); + } + } + + + public static void rollbackDBTransaction() { + Connection conn = currentConnection.get(); + if (conn == null) { + throw new IllegalTransactionStateException("Database connection is not active."); + } + + if (!inTransaction(conn)) { + throw new IllegalTransactionStateException("Transaction has not been started."); + } + + try { + conn.rollback(); + } catch (SQLException e) { + log.warn("Error occurred while roll-backing the transaction", e); + } + } + + public static void closeDBConnection() { + Connection conn = currentConnection.get(); + if (conn == null) { + throw new IllegalTransactionStateException("Database connection is not active."); + } + try { + conn.close(); + } catch (SQLException e) { + log.error("Error occurred while closing the connection", e); + } + currentConnection.remove(); + } + + /** + * + * @param conn + * @return + */ + private static boolean inTransaction(Connection conn) { + try { + if (conn.getAutoCommit()) { + return false; + } + } catch (SQLException e) { + throw new IllegalTransactionStateException("Failed to get transaction state."); + } + return true; + } + + /** + * + * @return + * @throws DBConnectionException + */ + public static boolean isTransactionStarted() throws DBConnectionException { + Connection connection = getDBConnection(); + return inTransaction(connection); + } + + /** + * Resolve data source from the data source definition. + * + * @param config Data source configuration + * @return data source resolved from the data source definition + */ + public static DataSource resolveDataSource(DataSourceConfig config) { + if (config == null) { + throw new RuntimeException("Device Management Repository data source configuration " + + "is null and thus, is not initialized"); + } + JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition(); + if (jndiConfig == null) { + return dataSource; + } + 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 = ConnectionManagerUtils.lookupDataSource(jndiConfig.getJndiName(), + jndiProperties); + } else { + dataSource = ConnectionManagerUtils.lookupDataSource(jndiConfig.getJndiName(), null); + } + + return dataSource; + } + + /** + * + * @param dataSourceName + * @param jndiProperties + * @return + */ + public static DataSource lookupDataSource(String dataSourceName, + final Hashtable jndiProperties) { + + try { + if (jndiProperties == null || jndiProperties.isEmpty()) { + return InitialContext.doLookup(dataSourceName); + } + final InitialContext context = new InitialContext(jndiProperties); + return (DataSource) context.lookup(dataSourceName); + } catch (Exception e) { + String msg = "Error in looking up data source: " + e.getMessage(); + log.error(msg, e); + throw new RuntimeException(msg + e.getMessage(), e); + } + } + + /** + * + * @return + */ + public static String getDatabaseType() { + try { + return dataSource.getConnection().getMetaData().getDatabaseProductName(); + } catch (SQLException e) { + log.error("Error occurred while retrieving config.datasource connection", e); + } + return null; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/DAOUtil.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/DAOUtil.java new file mode 100644 index 0000000000..842a425370 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/main/java/io/entgra/device/mgt/operation/template/util/DAOUtil.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.util; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * DAO Util class. + */ +public class DAOUtil { + + private DAOUtil() { + throw new IllegalStateException("DAOUtil class"); + } + + /** + * + * @param rs + * @return + * @throws SQLException + * @throws JsonSyntaxException + */ + public static OperationTemplate loadOperationTemplate(ResultSet rs) + throws SQLException, JsonSyntaxException { + OperationTemplate operationTemplate = new OperationTemplate(); + Gson g = new Gson(); + operationTemplate.setSubTypeId(rs.getInt("SUB_TYPE_ID")); + operationTemplate.setCode(rs.getString("OPERATION_CODE")); + operationTemplate.setDeviceType(rs.getString("DEVICE_TYPE")); + operationTemplate.setOperationTemplateId(rs.getInt("SUB_OPERATION_TEMPLATE_ID")); + operationTemplate.setOperationDefinition(rs.getString("OPERATION_DEFINITION")); + + return operationTemplate; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAONegativeTest.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAONegativeTest.java new file mode 100644 index 0000000000..84fa0a811d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAONegativeTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAO; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; +import io.entgra.device.mgt.operation.template.mock.BaseOperationTemplatePluginTest; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class DAONegativeTest extends BaseOperationTemplatePluginTest { + private static final Log log = LogFactory.getLog(DAONegativeTest.class); + + private OperationTemplateDAO operationTemplateDAO; + + @BeforeClass + public void init() { + operationTemplateDAO = OperationTemplateDAOFactory.getOperationTemplateDAO(); + log.info("DAO Negative test initialized"); + } + + @Test(description = "This method tests the add operation template under negative circumstances with null data", + expectedExceptions = {OperationTemplateManagementDAOException.class} + ) + public void testAddOperationTemplate() throws OperationTemplateManagementDAOException { + + try { + ConnectionManagerUtils.beginDBTransaction(); + OperationTemplate operationTemplate = new OperationTemplate(); + operationTemplate.setSubTypeId(0); + operationTemplate.setCode(null); + operationTemplate.setOperationDefinition(TestUtils.getOperationDefinition(TestUtils.subtypeId, TestUtils.operationCode)); + operationTemplateDAO.addOperationTemplate(operationTemplate); + ConnectionManagerUtils.commitDBTransaction(); + } catch (OperationTemplateManagementDAOException e) { + ConnectionManagerUtils.rollbackDBTransaction(); + String msg = "Error occurred while processing SQL to insert Operation template"; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } catch (DBConnectionException e) { + String msg = "Error occurred while obtaining DB connection to insert Operation Template"; + log.error(msg); + throw new OperationTemplateManagementDAOException(msg, e); + } finally { + ConnectionManagerUtils.closeDBConnection(); + } + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAOTest.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAOTest.java new file mode 100644 index 0000000000..7252d9d5d3 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DAOTest.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAO; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.DBConnectionException; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateManagementDAOException; +import io.entgra.device.mgt.operation.template.mock.BaseOperationTemplatePluginTest; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class DAOTest extends BaseOperationTemplatePluginTest { + + private static final Log log = LogFactory.getLog(DAOTest.class); + + private OperationTemplateDAO operationTemplateDAO; + + @BeforeClass + public void init() { + operationTemplateDAO = OperationTemplateDAOFactory.getOperationTemplateDAO(); + log.info("DAO test initialized"); + } + + @Test(dependsOnMethods = "testAddOperationTemplate") + public void testGetOperationTemplate() + throws DBConnectionException, OperationTemplateManagementDAOException { + + ConnectionManagerUtils.openDBConnection(); + OperationTemplate operationTemplateActual = operationTemplateDAO.getOperationTemplate( + 4, TestUtils.deviceType, TestUtils.operationCode); + ConnectionManagerUtils.closeDBConnection(); + Assert.assertNotNull(operationTemplateActual, "Cannot be null"); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), 4); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + + @Test + public void testAddOperationTemplate() + throws DBConnectionException, OperationTemplateManagementDAOException { + + OperationTemplate operationTemplate = new OperationTemplate(); + operationTemplate.setSubTypeId(4); + operationTemplate.setCode(TestUtils.operationCode); + operationTemplate.setDeviceType(TestUtils.deviceType); + operationTemplate.setOperationDefinition( + TestUtils.getOperationDefinition(4, TestUtils.operationCode)); + + ConnectionManagerUtils.beginDBTransaction(); + operationTemplateDAO.addOperationTemplate(operationTemplate); + ConnectionManagerUtils.commitDBTransaction(); + + OperationTemplate operationTemplateActual = operationTemplateDAO.getOperationTemplate( + 4, TestUtils.deviceType, TestUtils.operationCode); + ConnectionManagerUtils.closeDBConnection(); + Assert.assertNotNull(operationTemplateActual, "Cannot be null"); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), 4); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + + @Test(dependsOnMethods = "testAddOperationTemplate") + public void testUpdateOperationTemplate() + throws DBConnectionException, OperationTemplateManagementDAOException { + + ConnectionManagerUtils.beginDBTransaction(); + OperationTemplate operationTemplate = operationTemplateDAO.getOperationTemplate( + 4, TestUtils.deviceType, TestUtils.operationCode); + OperationTemplate operationTemplateActual = operationTemplateDAO.updateOperationTemplate( + operationTemplate); + ConnectionManagerUtils.commitDBTransaction(); + ConnectionManagerUtils.closeDBConnection(); + + Assert.assertNotNull(operationTemplateActual, "Cannot be null"); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), 4); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DataSourceConfig.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DataSourceConfig.java new file mode 100644 index 0000000000..2c8eb1e4a4 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/DataSourceConfig.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "DataSourceConfig") +public class DataSourceConfig { + + private String url; + private String driverClassName; + private String user; + private String password; + + @Override + public String toString() { + return "DataSourceConfig[" + + " Url ='" + url + '\'' + + ", DriverClassName ='" + driverClassName + '\'' + + ", UserName ='" + user + '\'' + + ", Password ='" + password + '\'' + + "]"; + } + + @XmlElement(name = "Url", nillable = false) + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @XmlElement(name = "DriverClassName", nillable = false) + public String getDriverClassName() { + return driverClassName; + } + + public void setDriverClassName(String driverClassName) { + this.driverClassName = driverClassName; + } + + @XmlElement(name = "User", nillable = false) + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + @XmlElement(name = "Password", nillable = false) + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceNegativeTest.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceNegativeTest.java new file mode 100644 index 0000000000..fd1e6a5a8d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceNegativeTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateMgtPluginException; +import io.entgra.device.mgt.operation.template.impl.OperationTemplateServiceImpl; +import io.entgra.device.mgt.operation.template.spi.OperationTemplateService; +import io.entgra.device.mgt.operation.template.mock.BaseOperationTemplatePluginTest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class ServiceNegativeTest extends BaseOperationTemplatePluginTest { + + private static final Log log = LogFactory.getLog(ServiceNegativeTest.class); + private OperationTemplateService operationTemplateService; + + @BeforeClass + public void init() { + operationTemplateService = new OperationTemplateServiceImpl(); + log.info("Service test initialized"); + } + + @Test(description = "This method tests Add operation template under negative circumstances with null data", + expectedExceptions = {OperationTemplateMgtPluginException.class}) + public void testAddOperationTemplate() throws OperationTemplateMgtPluginException { + OperationTemplate operationTemplate = new OperationTemplate(); + operationTemplateService.addOperationTemplate(operationTemplate); + } + + @Test(description = "This method tests Add Operation template under negative circumstances while missing " + + "required fields", + expectedExceptions = {OperationTemplateMgtPluginException.class}, + expectedExceptionsMessageRegExp = "Error occurred while processing insert operation template.") + public void testAddOperationTemplates() throws OperationTemplateMgtPluginException { + + OperationTemplate operationTemplate = new OperationTemplate(); + operationTemplate.setDeviceType(TestUtils.deviceType); + operationTemplate.setCode(TestUtils.operationCode); + operationTemplate.setSubTypeId(1000); + operationTemplate.setOperationDefinition(TestUtils.getOperationDefinition(TestUtils.subtypeId, TestUtils.operationCode)); + operationTemplateService.addOperationTemplate(operationTemplate); + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceTest.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceTest.java new file mode 100644 index 0000000000..b126d59619 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/ServiceTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import com.google.common.cache.CacheLoader; +import io.entgra.device.mgt.operation.template.dto.OperationTemplate; +import io.entgra.device.mgt.operation.template.exception.OperationTemplateMgtPluginException; +import io.entgra.device.mgt.operation.template.impl.OperationTemplateServiceImpl; +import io.entgra.device.mgt.operation.template.mock.BaseOperationTemplatePluginTest; +import io.entgra.device.mgt.operation.template.spi.OperationTemplateService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class ServiceTest extends BaseOperationTemplatePluginTest { + + private static final Log log = LogFactory.getLog(ServiceTest.class); + private OperationTemplateService operationTemplateService; + + @BeforeClass + public void init() { + operationTemplateService = new OperationTemplateServiceImpl(); + log.info("Service test initialized"); + } + + @Test(dependsOnMethods = "testAddOperationTemplate") + public void testGetOperationTemplate() throws OperationTemplateMgtPluginException { + + OperationTemplate operationTemplateActual = operationTemplateService.getOperationTemplate(TestUtils.subtypeId, TestUtils.deviceType, TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), operationTemplateActual.getSubTypeId()); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + + @Test + public void testAddOperationTemplate() throws OperationTemplateMgtPluginException { + + OperationTemplate operationTemplate = new OperationTemplate(); + operationTemplate.setSubTypeId(TestUtils.subtypeId); + operationTemplate.setCode(TestUtils.operationCode); + operationTemplate.setDeviceType(TestUtils.deviceType); + operationTemplate.setOperationDefinition(TestUtils.getOperationDefinition(TestUtils.subtypeId, TestUtils.operationCode)); + operationTemplateService.addOperationTemplate(operationTemplate); + + OperationTemplate operationTemplateActual = operationTemplateService.getOperationTemplate(TestUtils.subtypeId, TestUtils.deviceType, TestUtils.operationCode); + Assert.assertNotNull(operationTemplateActual, "Cannot be null"); + Assert.assertEquals(operationTemplateActual.getOperationDefinition(), TestUtils.getOperationDefinition(TestUtils.subtypeId, TestUtils.operationCode)); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), operationTemplateActual.getSubTypeId()); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + + @Test(dependsOnMethods = "testAddOperationTemplate") + public void testUpdateOperationTemplate() throws OperationTemplateMgtPluginException { + + OperationTemplate operationTemplate = operationTemplateService.getOperationTemplate(TestUtils.subtypeId, TestUtils.deviceType, TestUtils.operationCode); + operationTemplate.setOperationDefinition("{}"); + OperationTemplate operationTemplateActual = operationTemplateService.updateOperationTemplate(operationTemplate); + + Assert.assertNotNull(operationTemplateActual, "Cannot be null"); + Assert.assertEquals(operationTemplateActual.getOperationDefinition(), "{}"); + Assert.assertEquals(operationTemplateActual.getSubTypeId(), operationTemplateActual.getSubTypeId()); + Assert.assertEquals(operationTemplateActual.getCode(), TestUtils.operationCode); + Assert.assertEquals(operationTemplateActual.getDeviceType(), TestUtils.deviceType); + } + + @Test(dependsOnMethods = {"testAddOperationTemplate", "testGetOperationTemplate", "testUpdateOperationTemplate"}, + expectedExceptions = {CacheLoader.InvalidCacheLoadException.class}) + public void testDeleteOperationTemplate() throws OperationTemplateMgtPluginException { + operationTemplateService.deleteOperationTemplate(TestUtils.subtypeId, TestUtils.deviceType, TestUtils.operationCode); + getOperationTemplateBySubtypeIdAndDeviceTypeAndOperationCode(TestUtils.subtypeId, TestUtils.deviceType, TestUtils.operationCode); + } + + public OperationTemplate getOperationTemplateBySubtypeIdAndDeviceTypeAndOperationCode(int subtypeId, String deviceType, String operationCode) throws OperationTemplateMgtPluginException { + return operationTemplateService.getOperationTemplate(subtypeId, deviceType, operationCode); + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/TestUtils.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/TestUtils.java new file mode 100644 index 0000000000..3a2af14e24 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/TestUtils.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template; + +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class TestUtils { + private static final Log log = LogFactory.getLog(TestUtils.class); + public static Integer subtypeId = 3; + public static String deviceType = "METER"; + public static String operationCode = "BILLING_REGISTERS_RETRIEVE"; + + public static String getOperationDefinition(int subtypeId, String operationCode) { + String operationDefinition = "{\"" + subtypeId + "\":2,\"deviceType\":\"METER\",\"maxAttempts\":1," + + "\"registerTransaction\":{},\"registers\":[\"0.0.0_0\",\"0.9.0_0\",\"1.8.0_0\"," + + "\"1.8.1_0\",\"1.8.2_0\",\"1.8.3_0\",\"2.8.0_0\",\"2.8.1_0\",\"2.8.2_0\",\"2.8.3_0\"," + + "\"1.8.0*01_0\",\"1.8.1*01_0\",\"1.8.2*01_0\",\"1.8.3*01_0\",\"2.8.0*01_0\"," + + "\"2.8.1*01_0\",\"2.8.2*01_0\",\"2.8.3*01_0\",\"9.6.0*01_0\",\"9.6.0_0\"," + + "\"10.6.0*01_0\",\"10.6.0_0\",\"0.4.2_0\",\"0.4.3_0\",\"0.4.5_0\",\"0.4.6_0\"," + + "\"14.7.0_0\",\"31.7.0_0\",\"32.7.0_0\",\"51.7.0_0\",\"52.7.0_0\",\"71.7.0_0\"," + + "\"72.7.0_0\"],\"attemptCount\":1,\"transportMode\":\"NET_ONLY\"," + + "\"hasPermanentError\":false,\"tryToReachViaSMS\":false,\"waitingTime\":0," + + "\"code\":\"" + operationCode + "\",\"properties\":{\"RequireDateAdjust\":\"30000\"," + + "\"RequireAuthentication\":\"32\",\"RequireSerialValidation\":\"1.0.0.0.0.255\"}," + + "\"type\":\"PROFILE\",\"id\":0,\"control\":\"NO_REPEAT\",\"isEnabled\":true}"; + + return operationDefinition; + } + + public static void cleanupResources(Connection conn, Statement stmt, ResultSet rs) { + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing result set", e); + } + } + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing prepared statement", e); + } + } + if (conn != null) { + ConnectionManagerUtils.closeDBConnection(); + } + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/BaseOperationTemplatePluginTest.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/BaseOperationTemplatePluginTest.java new file mode 100644 index 0000000000..e5a1b54850 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/BaseOperationTemplatePluginTest.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import io.entgra.device.mgt.operation.template.DataSourceConfig; +import io.entgra.device.mgt.operation.template.dao.OperationTemplateDAOFactory; +import io.entgra.device.mgt.operation.template.util.ConnectionManagerUtils; +import io.entgra.device.mgt.operation.template.TestUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.tomcat.jdbc.pool.PoolProperties; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Optional; +import org.testng.annotations.Parameters; +import org.w3c.dom.Document; +import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; +import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException; +import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; + +import javax.sql.DataSource; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import java.io.File; +import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.Statement; + +public abstract class BaseOperationTemplatePluginTest { + + private static final Log log = LogFactory.getLog(BaseOperationTemplatePluginTest.class); + + private static final String datasourceLocation = "src/test/resources/carbon-home/repository/conf/" + + "datasources/data-source-config.xml"; + + private static boolean mock; + + @BeforeSuite + @Parameters({"isMock"}) + public void setup(@Optional("false") boolean isMock) throws Exception { + log.info("Setting up test suite"); + this.initDataSource(); + this.initSQLScript(); + this.initializeCarbonContext(); + this.initServices(); + mock = isMock; + log.info("Setting up test suite done!"); + } + + protected void initDataSource() throws Exception { + DataSource dataSource = this.getDataSource(this.readDataSourceConfig()); + Class clazz1 = ConnectionManagerUtils.class; + Field f1 = clazz1.getDeclaredField("dataSource"); + f1.setAccessible(true); + f1.set(clazz1, dataSource); + + Class clazz2 = OperationTemplateDAOFactory.class; + Field f2 = clazz2.getDeclaredField("databaseEngine"); + f2.setAccessible(true); + f2.set(clazz2, DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2); + } + + private void initServices() { + + } + + @BeforeClass + public abstract void init() throws Exception; + + protected DataSource getDataSource(DataSourceConfig config) { + if (!isMock()) { + PoolProperties properties = new PoolProperties(); + properties.setUrl(config.getUrl()); + properties.setDriverClassName(config.getDriverClassName()); + properties.setUsername(config.getUser()); + properties.setPassword(config.getPassword()); + return new org.apache.tomcat.jdbc.pool.DataSource(properties); + } else { + return new MockDataSource(config.getUrl()); + } + } + + private void initializeCarbonContext() { + if (System.getProperty("carbon.home") == null) { + File file = new File("src/test/resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../../../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + } + + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants + .SUPER_TENANT_DOMAIN_NAME); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); + } + + protected DataSourceConfig readDataSourceConfig() throws DeviceManagementException { + try { + File file = new File(BaseOperationTemplatePluginTest.datasourceLocation); + Document doc = DeviceManagerUtil.convertToDocument(file); + JAXBContext testDBContext = JAXBContext.newInstance(DataSourceConfig.class); + Unmarshaller unmarshaller = testDBContext.createUnmarshaller(); + return (DataSourceConfig) unmarshaller.unmarshal(doc); + } catch (JAXBException e) { + throw new DeviceManagementException("Error occurred while reading data source configuration", e); + } + } + + private void initSQLScript() throws Exception { + Connection conn = null; + Statement stmt = null; + try { + ConnectionManagerUtils.beginDBTransaction(); + conn = ConnectionManagerUtils.getDBConnection(); + stmt = conn.createStatement(); + stmt.executeUpdate("RUNSCRIPT FROM './src/test/resources/carbon-home/dbscripts/dm-db-h2.sql'"); + stmt.executeUpdate("RUNSCRIPT FROM './src/test/resources/carbon-home/dbscripts/h2.sql'"); + } finally { + TestUtils.cleanupResources(conn, stmt, null); + } + } + + protected boolean isMock() { + return mock; + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockConnection.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockConnection.java new file mode 100644 index 0000000000..80068d7a9b --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockConnection.java @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import java.sql.CallableStatement; +import java.sql.SQLWarning; +import java.sql.Savepoint; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.Statement; +import java.sql.Clob; +import java.sql.Blob; +import java.sql.NClob; +import java.sql.SQLXML; +import java.sql.Struct; +import java.sql.Array; +import java.sql.SQLClientInfoException; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.Executor; + +/** + * This is mock class which provides mock database connection. + */ +public class MockConnection implements Connection { + + private final String url; + private final List statements = new ArrayList<>(); + private int statementCounter = 0; + + public MockConnection(String url) { + this.url = url; + } + + @Override + public Statement createStatement() throws SQLException { + return getStatement(); + } + + private MockStatement getStatement() { + if (!statements.isEmpty()) { + MockStatement statement = this.statements.get(this.statementCounter); + statementCounter++; + return statement; + } + return new MockStatement(); + } + + @Override + public PreparedStatement prepareStatement(String sql) throws SQLException { + return getStatement(); + } + + @Override + public CallableStatement prepareCall(String sql) throws SQLException { + return null; + } + + @Override + public String nativeSQL(String sql) throws SQLException { + return null; + } + + @Override + public boolean getAutoCommit() throws SQLException { + return false; + } + + @Override + public void setAutoCommit(boolean autoCommit) throws SQLException { + + } + + @Override + public void commit() throws SQLException { + + } + + @Override + public void rollback() throws SQLException { + + } + + @Override + public void close() throws SQLException { + + } + + @Override + public boolean isClosed() throws SQLException { + return false; + } + + @Override + public DatabaseMetaData getMetaData() throws SQLException { + return new MockDatabaseMetaData(this.url); + } + + @Override + public boolean isReadOnly() throws SQLException { + return false; + } + + @Override + public void setReadOnly(boolean readOnly) throws SQLException { + + } + + @Override + public String getCatalog() throws SQLException { + return null; + } + + @Override + public void setCatalog(String catalog) throws SQLException { + + } + + @Override + public int getTransactionIsolation() throws SQLException { + return 0; + } + + @Override + public void setTransactionIsolation(int level) throws SQLException { + + } + + @Override + public SQLWarning getWarnings() throws SQLException { + return null; + } + + @Override + public void clearWarnings() throws SQLException { + + } + + @Override + public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { + return null; + } + + @Override + public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) + throws SQLException { + return null; + } + + @Override + public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) + throws SQLException { + return null; + } + + @Override + public Map> getTypeMap() throws SQLException { + return null; + } + + @Override + public void setTypeMap(Map> map) throws SQLException { + + } + + @Override + public int getHoldability() throws SQLException { + return 0; + } + + @Override + public void setHoldability(int holdability) throws SQLException { + + } + + @Override + public Savepoint setSavepoint() throws SQLException { + return null; + } + + @Override + public Savepoint setSavepoint(String name) throws SQLException { + return null; + } + + @Override + public void rollback(Savepoint savepoint) throws SQLException { + + } + + @Override + public void releaseSavepoint(Savepoint savepoint) throws SQLException { + + } + + @Override + public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) + throws SQLException { + return null; + } + + @Override + public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, + int resultSetHoldability) throws SQLException { + return null; + } + + @Override + public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, + int resultSetHoldability) throws SQLException { + return null; + } + + @Override + public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { + return null; + } + + @Override + public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { + return null; + } + + @Override + public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { + return new MockStatement(); + } + + @Override + public Clob createClob() throws SQLException { + return null; + } + + @Override + public Blob createBlob() throws SQLException { + return null; + } + + @Override + public NClob createNClob() throws SQLException { + return null; + } + + @Override + public SQLXML createSQLXML() throws SQLException { + return null; + } + + @Override + public boolean isValid(int timeout) throws SQLException { + return false; + } + + @Override + public void setClientInfo(String name, String value) throws SQLClientInfoException { + + } + + @Override + public String getClientInfo(String name) throws SQLException { + return null; + } + + @Override + public Properties getClientInfo() throws SQLException { + return null; + } + + @Override + public void setClientInfo(Properties properties) throws SQLClientInfoException { + + } + + @Override + public Array createArrayOf(String typeName, Object[] elements) throws SQLException { + return null; + } + + @Override + public Struct createStruct(String typeName, Object[] attributes) throws SQLException { + return null; + } + + @Override + public String getSchema() throws SQLException { + return null; + } + + @Override + public void setSchema(String schema) throws SQLException { + + } + + @Override + public void abort(Executor executor) throws SQLException { + + } + + @Override + public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException { + + } + + @Override + public int getNetworkTimeout() throws SQLException { + return 0; + } + + @Override + public T unwrap(Class iface) throws SQLException { + return null; + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return false; + } + + public void addMockStatement(MockStatement mockStatement) { + this.statements.add(mockStatement); + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDataSource.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDataSource.java new file mode 100644 index 0000000000..a8ac6b305f --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDataSource.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import javax.sql.DataSource; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +/** + * This is the mock data source implementation that will be used in the test cases. + */ +public class MockDataSource implements DataSource { + private final List connections = new ArrayList<>(); + private final String url; + private boolean throwException = false; + private int connectionCounter = 0; + + public MockDataSource(String url) { + this.url = url; + } + + @Override + public Connection getConnection() throws SQLException { + if (throwException) { + throw new SQLException("Cannot created test connection."); + } else { + if (!connections.isEmpty()) { + if (this.connectionCounter < this.connections.size()) { + Connection connection = this.connections.get(this.connectionCounter); + this.connectionCounter++; + return connection; + } else { + return new MockConnection(url); + } + } + return new MockConnection(url); + } + } + + public void setConnection(Connection connection) { + this.connections.add(connection); + } + + @Override + public Connection getConnection(String username, String password) throws SQLException { + return null; + } + + @Override + public T unwrap(Class iface) throws SQLException { + return null; + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return false; + } + + @Override + public PrintWriter getLogWriter() throws SQLException { + return null; + } + + @Override + public void setLogWriter(PrintWriter out) throws SQLException { + + } + + @Override + public int getLoginTimeout() throws SQLException { + return 0; + } + + @Override + public void setLoginTimeout(int seconds) throws SQLException { + + } + + @Override + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + return null; + } + + public void setThrowException(boolean throwException) { + this.throwException = throwException; + } + + public void reset() { + this.throwException = false; + this.connections.clear(); + this.connectionCounter = 0; + } + + public String getUrl() { + return this.url; + } + + public MockConnection getConnection(int id) { + return (MockConnection) this.connections.get(id); + } + +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDatabaseMetaData.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDatabaseMetaData.java new file mode 100644 index 0000000000..2c9938229c --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockDatabaseMetaData.java @@ -0,0 +1,942 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.RowIdLifetime; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + +public class MockDatabaseMetaData implements DatabaseMetaData { + private final String url; + + public MockDatabaseMetaData(String url) { + this.url = url; + } + + @Override + public boolean allProceduresAreCallable() throws SQLException { + return false; + } + + @Override + public boolean allTablesAreSelectable() throws SQLException { + return false; + } + + @Override + public String getURL() throws SQLException { + return null; + } + + @Override + public String getUserName() throws SQLException { + return null; + } + + @Override + public boolean isReadOnly() throws SQLException { + return false; + } + + @Override + public boolean nullsAreSortedHigh() throws SQLException { + return false; + } + + @Override + public boolean nullsAreSortedLow() throws SQLException { + return false; + } + + @Override + public boolean nullsAreSortedAtStart() throws SQLException { + return false; + } + + @Override + public boolean nullsAreSortedAtEnd() throws SQLException { + return false; + } + + @Override + public String getDatabaseProductName() throws SQLException { + if (this.url.contains("mysql")) { + return DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL; + } else if (this.url.contains("h2")) { + return DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2; + } else if (this.url.contains("oracle")) { + return DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE; + } else if (this.url.contains("postgresql")) { + return DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL; + } else if (this.url.contains("sqlserver")) { + return DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL; + } else { + return null; + } + } + + @Override + public String getDatabaseProductVersion() throws SQLException { + return null; + } + + @Override + public String getDriverName() throws SQLException { + return null; + } + + @Override + public String getDriverVersion() throws SQLException { + return null; + } + + @Override + public int getDriverMajorVersion() { + return 0; + } + + @Override + public int getDriverMinorVersion() { + return 0; + } + + @Override + public boolean usesLocalFiles() throws SQLException { + return false; + } + + @Override + public boolean usesLocalFilePerTable() throws SQLException { + return false; + } + + @Override + public boolean supportsMixedCaseIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesUpperCaseIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesLowerCaseIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesMixedCaseIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesUpperCaseQuotedIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesLowerCaseQuotedIdentifiers() throws SQLException { + return false; + } + + @Override + public boolean storesMixedCaseQuotedIdentifiers() throws SQLException { + return false; + } + + @Override + public String getIdentifierQuoteString() throws SQLException { + return null; + } + + @Override + public String getSQLKeywords() throws SQLException { + return null; + } + + @Override + public String getNumericFunctions() throws SQLException { + return null; + } + + @Override + public String getStringFunctions() throws SQLException { + return null; + } + + @Override + public String getSystemFunctions() throws SQLException { + return null; + } + + @Override + public String getTimeDateFunctions() throws SQLException { + return null; + } + + @Override + public String getSearchStringEscape() throws SQLException { + return null; + } + + @Override + public String getExtraNameCharacters() throws SQLException { + return null; + } + + @Override + public boolean supportsAlterTableWithAddColumn() throws SQLException { + return false; + } + + @Override + public boolean supportsAlterTableWithDropColumn() throws SQLException { + return false; + } + + @Override + public boolean supportsColumnAliasing() throws SQLException { + return false; + } + + @Override + public boolean nullPlusNonNullIsNull() throws SQLException { + return false; + } + + @Override + public boolean supportsConvert() throws SQLException { + return false; + } + + @Override + public boolean supportsConvert(int fromType, int toType) throws SQLException { + return false; + } + + @Override + public boolean supportsTableCorrelationNames() throws SQLException { + return false; + } + + @Override + public boolean supportsDifferentTableCorrelationNames() throws SQLException { + return false; + } + + @Override + public boolean supportsExpressionsInOrderBy() throws SQLException { + return false; + } + + @Override + public boolean supportsOrderByUnrelated() throws SQLException { + return false; + } + + @Override + public boolean supportsGroupBy() throws SQLException { + return false; + } + + @Override + public boolean supportsGroupByUnrelated() throws SQLException { + return false; + } + + @Override + public boolean supportsGroupByBeyondSelect() throws SQLException { + return false; + } + + @Override + public boolean supportsLikeEscapeClause() throws SQLException { + return false; + } + + @Override + public boolean supportsMultipleResultSets() throws SQLException { + return false; + } + + @Override + public boolean supportsMultipleTransactions() throws SQLException { + return false; + } + + @Override + public boolean supportsNonNullableColumns() throws SQLException { + return false; + } + + @Override + public boolean supportsMinimumSQLGrammar() throws SQLException { + return false; + } + + @Override + public boolean supportsCoreSQLGrammar() throws SQLException { + return false; + } + + @Override + public boolean supportsExtendedSQLGrammar() throws SQLException { + return false; + } + + @Override + public boolean supportsANSI92EntryLevelSQL() throws SQLException { + return false; + } + + @Override + public boolean supportsANSI92IntermediateSQL() throws SQLException { + return false; + } + + @Override + public boolean supportsANSI92FullSQL() throws SQLException { + return false; + } + + @Override + public boolean supportsIntegrityEnhancementFacility() throws SQLException { + return false; + } + + @Override + public boolean supportsOuterJoins() throws SQLException { + return false; + } + + @Override + public boolean supportsFullOuterJoins() throws SQLException { + return false; + } + + @Override + public boolean supportsLimitedOuterJoins() throws SQLException { + return false; + } + + @Override + public String getSchemaTerm() throws SQLException { + return null; + } + + @Override + public String getProcedureTerm() throws SQLException { + return null; + } + + @Override + public String getCatalogTerm() throws SQLException { + return null; + } + + @Override + public boolean isCatalogAtStart() throws SQLException { + return false; + } + + @Override + public String getCatalogSeparator() throws SQLException { + return null; + } + + @Override + public boolean supportsSchemasInDataManipulation() throws SQLException { + return false; + } + + @Override + public boolean supportsSchemasInProcedureCalls() throws SQLException { + return false; + } + + @Override + public boolean supportsSchemasInTableDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsSchemasInIndexDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsCatalogsInDataManipulation() throws SQLException { + return false; + } + + @Override + public boolean supportsCatalogsInProcedureCalls() throws SQLException { + return false; + } + + @Override + public boolean supportsCatalogsInTableDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsCatalogsInIndexDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException { + return false; + } + + @Override + public boolean supportsPositionedDelete() throws SQLException { + return false; + } + + @Override + public boolean supportsPositionedUpdate() throws SQLException { + return false; + } + + @Override + public boolean supportsSelectForUpdate() throws SQLException { + return false; + } + + @Override + public boolean supportsStoredProcedures() throws SQLException { + return false; + } + + @Override + public boolean supportsSubqueriesInComparisons() throws SQLException { + return false; + } + + @Override + public boolean supportsSubqueriesInExists() throws SQLException { + return false; + } + + @Override + public boolean supportsSubqueriesInIns() throws SQLException { + return false; + } + + @Override + public boolean supportsSubqueriesInQuantifieds() throws SQLException { + return false; + } + + @Override + public boolean supportsCorrelatedSubqueries() throws SQLException { + return false; + } + + @Override + public boolean supportsUnion() throws SQLException { + return false; + } + + @Override + public boolean supportsUnionAll() throws SQLException { + return false; + } + + @Override + public boolean supportsOpenCursorsAcrossCommit() throws SQLException { + return false; + } + + @Override + public boolean supportsOpenCursorsAcrossRollback() throws SQLException { + return false; + } + + @Override + public boolean supportsOpenStatementsAcrossCommit() throws SQLException { + return false; + } + + @Override + public boolean supportsOpenStatementsAcrossRollback() throws SQLException { + return false; + } + + @Override + public int getMaxBinaryLiteralLength() throws SQLException { + return 0; + } + + @Override + public int getMaxCharLiteralLength() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnsInGroupBy() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnsInIndex() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnsInOrderBy() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnsInSelect() throws SQLException { + return 0; + } + + @Override + public int getMaxColumnsInTable() throws SQLException { + return 0; + } + + @Override + public int getMaxConnections() throws SQLException { + return 0; + } + + @Override + public int getMaxCursorNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxIndexLength() throws SQLException { + return 0; + } + + @Override + public int getMaxSchemaNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxProcedureNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxCatalogNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxRowSize() throws SQLException { + return 0; + } + + @Override + public boolean doesMaxRowSizeIncludeBlobs() throws SQLException { + return false; + } + + @Override + public int getMaxStatementLength() throws SQLException { + return 0; + } + + @Override + public int getMaxStatements() throws SQLException { + return 0; + } + + @Override + public int getMaxTableNameLength() throws SQLException { + return 0; + } + + @Override + public int getMaxTablesInSelect() throws SQLException { + return 0; + } + + @Override + public int getMaxUserNameLength() throws SQLException { + return 0; + } + + @Override + public int getDefaultTransactionIsolation() throws SQLException { + return 0; + } + + @Override + public boolean supportsTransactions() throws SQLException { + return false; + } + + @Override + public boolean supportsTransactionIsolationLevel(int level) throws SQLException { + return false; + } + + @Override + public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException { + return false; + } + + @Override + public boolean supportsDataManipulationTransactionsOnly() throws SQLException { + return false; + } + + @Override + public boolean dataDefinitionCausesTransactionCommit() throws SQLException { + return false; + } + + @Override + public boolean dataDefinitionIgnoredInTransactions() throws SQLException { + return false; + } + + @Override + public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) + throws SQLException { + return null; + } + + @Override + public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, + String columnNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) + throws SQLException { + return null; + } + + @Override + public ResultSet getSchemas() throws SQLException { + return null; + } + + @Override + public ResultSet getCatalogs() throws SQLException { + return null; + } + + @Override + public ResultSet getTableTypes() throws SQLException { + return null; + } + + @Override + public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, + String columnNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) + throws SQLException { + return null; + } + + @Override + public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) + throws SQLException { + return null; + } + + @Override + public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) + throws SQLException { + return null; + } + + @Override + public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException { + return null; + } + + @Override + public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException { + return null; + } + + @Override + public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException { + return null; + } + + @Override + public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException { + return null; + } + + @Override + public ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, + String foreignCatalog, String foreignSchema, String foreignTable) + throws SQLException { + return null; + } + + @Override + public ResultSet getTypeInfo() throws SQLException { + return null; + } + + @Override + public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) + throws SQLException { + return null; + } + + @Override + public boolean supportsResultSetType(int type) throws SQLException { + return false; + } + + @Override + public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException { + return false; + } + + @Override + public boolean ownUpdatesAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean ownDeletesAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean ownInsertsAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean othersUpdatesAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean othersDeletesAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean othersInsertsAreVisible(int type) throws SQLException { + return false; + } + + @Override + public boolean updatesAreDetected(int type) throws SQLException { + return false; + } + + @Override + public boolean deletesAreDetected(int type) throws SQLException { + return false; + } + + @Override + public boolean insertsAreDetected(int type) throws SQLException { + return false; + } + + @Override + public boolean supportsBatchUpdates() throws SQLException { + return false; + } + + @Override + public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) + throws SQLException { + return null; + } + + @Override + public Connection getConnection() throws SQLException { + return null; + } + + @Override + public boolean supportsSavepoints() throws SQLException { + return false; + } + + @Override + public boolean supportsNamedParameters() throws SQLException { + return false; + } + + @Override + public boolean supportsMultipleOpenResults() throws SQLException { + return false; + } + + @Override + public boolean supportsGetGeneratedKeys() throws SQLException { + return false; + } + + @Override + public ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, + String attributeNamePattern) throws SQLException { + return null; + } + + @Override + public boolean supportsResultSetHoldability(int holdability) throws SQLException { + return false; + } + + @Override + public int getResultSetHoldability() throws SQLException { + return 0; + } + + @Override + public int getDatabaseMajorVersion() throws SQLException { + return 0; + } + + @Override + public int getDatabaseMinorVersion() throws SQLException { + return 0; + } + + @Override + public int getJDBCMajorVersion() throws SQLException { + return 0; + } + + @Override + public int getJDBCMinorVersion() throws SQLException { + return 0; + } + + @Override + public int getSQLStateType() throws SQLException { + return 0; + } + + @Override + public boolean locatorsUpdateCopy() throws SQLException { + return false; + } + + @Override + public boolean supportsStatementPooling() throws SQLException { + return false; + } + + @Override + public RowIdLifetime getRowIdLifetime() throws SQLException { + return null; + } + + @Override + public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException { + return null; + } + + @Override + public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException { + return false; + } + + @Override + public boolean autoCommitFailureClosesAllResultSets() throws SQLException { + return false; + } + + @Override + public ResultSet getClientInfoProperties() throws SQLException { + return null; + } + + @Override + public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, + String columnNamePattern) throws SQLException { + return null; + } + + @Override + public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, + String columnNamePattern) throws SQLException { + return null; + } + + @Override + public boolean generatedKeyAlwaysReturned() throws SQLException { + return false; + } + + @Override + public T unwrap(Class iface) throws SQLException { + return null; + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return false; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockResultSet.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockResultSet.java new file mode 100644 index 0000000000..f4840f9a62 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockResultSet.java @@ -0,0 +1,1114 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import java.io.InputStream; +import java.io.Reader; +import java.math.BigDecimal; +import java.net.URL; +import java.sql.ResultSet; +import java.sql.SQLWarning; +import java.sql.Date; +import java.sql.Time; +import java.sql.Timestamp; +import java.sql.Clob; +import java.sql.Blob; +import java.sql.NClob; +import java.sql.SQLXML; +import java.sql.Ref; +import java.sql.Array; +import java.sql.ResultSetMetaData; +import java.sql.RowId; +import java.sql.Statement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +public class MockResultSet implements ResultSet { + private final List stringList = new ArrayList<>(); + private final List integerList = new ArrayList<>(); + private final List doubleList = new ArrayList<>(); + private final List booleanList = new ArrayList<>(); + private final List timestamps = new ArrayList<>(); + + private final AtomicInteger stringCounter = new AtomicInteger(0); + private final AtomicInteger integerCounter = new AtomicInteger(0); + private final AtomicInteger doubleCounter = new AtomicInteger(0); + private final AtomicInteger booleanCounter = new AtomicInteger(0); + private final AtomicInteger timestampCounter = new AtomicInteger(0); + + private boolean iterated = false; + private boolean hasData = false; + + @Override + public boolean next() throws SQLException { + if (!this.iterated && this.hasData) { + this.iterated = true; + return true; + } else { + return false; + } + } + + @Override + public void close() throws SQLException { + + } + + @Override + public boolean wasNull() throws SQLException { + return false; + } + + @Override + public String getString(int columnIndex) throws SQLException { + Object item = getItem(this.stringList, this.stringCounter); + if (item != null) { + return (String) item; + } else { + return ""; + } + } + + private Object getItem(List list, AtomicInteger counter) { + if (!list.isEmpty()) { + return list.get(counter.getAndIncrement()); + } + return null; + } + + @Override + public boolean getBoolean(int columnIndex) throws SQLException { + Object item = getItem(this.booleanList, this.booleanCounter); + if (item != null) { + return (Boolean) item; + } else { + return false; + } + } + + @Override + public byte getByte(int columnIndex) throws SQLException { + return 0; + } + + @Override + public short getShort(int columnIndex) throws SQLException { + return 0; + } + + @Override + public int getInt(int columnIndex) throws SQLException { + Object item = getItem(this.integerList, this.integerCounter); + if (item != null) { + return (Integer) item; + } else { + return 0; + } + } + + @Override + public long getLong(int columnIndex) throws SQLException { + return 0; + } + + @Override + public float getFloat(int columnIndex) throws SQLException { + return 0; + } + + @Override + public double getDouble(int columnIndex) throws SQLException { + Object item = getItem(this.doubleList, this.doubleCounter); + if (item != null) { + return (Double) item; + } else { + return 0.0; + } + } + + @Override + public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException { + return null; + } + + @Override + public byte[] getBytes(int columnIndex) throws SQLException { + return new byte[0]; + } + + @Override + public Date getDate(int columnIndex) throws SQLException { + return null; + } + + @Override + public Time getTime(int columnIndex) throws SQLException { + return null; + } + + @Override + public Timestamp getTimestamp(int columnIndex) throws SQLException { + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } + } + + @Override + public InputStream getAsciiStream(int columnIndex) throws SQLException { + return null; + } + + @Override + public InputStream getUnicodeStream(int columnIndex) throws SQLException { + return null; + } + + @Override + public InputStream getBinaryStream(int columnIndex) throws SQLException { + return null; + } + + @Override + public String getString(String columnLabel) throws SQLException { + Object item = getItem(this.stringList, this.stringCounter); + if (item != null) { + return (String) item; + } else { + return ""; + } + } + + @Override + public boolean getBoolean(String columnLabel) throws SQLException { + Object item = getItem(this.booleanList, this.booleanCounter); + if (item != null) { + return (Boolean) item; + } else { + return false; + } + } + + @Override + public byte getByte(String columnLabel) throws SQLException { + return 0; + } + + @Override + public short getShort(String columnLabel) throws SQLException { + return 0; + } + + @Override + public int getInt(String columnLabel) throws SQLException { + Object item = getItem(this.integerList, this.integerCounter); + if (item != null) { + return (Integer) item; + } else { + return 0; + } + } + + @Override + public long getLong(String columnLabel) throws SQLException { + return 0; + } + + @Override + public float getFloat(String columnLabel) throws SQLException { + return 0; + } + + @Override + public double getDouble(String columnLabel) throws SQLException { + Object item = getItem(this.doubleList, this.doubleCounter); + if (item != null) { + return (Double) item; + } else { + return 0.0; + } + } + + @Override + public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException { + return null; + } + + @Override + public byte[] getBytes(String columnLabel) throws SQLException { + return new byte[0]; + } + + @Override + public Date getDate(String columnLabel) throws SQLException { + return null; + } + + @Override + public Time getTime(String columnLabel) throws SQLException { + return null; + } + + @Override + public Timestamp getTimestamp(String columnLabel) throws SQLException { + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } + } + + @Override + public InputStream getAsciiStream(String columnLabel) throws SQLException { + return null; + } + + @Override + public InputStream getUnicodeStream(String columnLabel) throws SQLException { + return null; + } + + @Override + public InputStream getBinaryStream(String columnLabel) throws SQLException { + return null; + } + + @Override + public SQLWarning getWarnings() throws SQLException { + return null; + } + + @Override + public void clearWarnings() throws SQLException { + + } + + @Override + public String getCursorName() throws SQLException { + return null; + } + + @Override + public ResultSetMetaData getMetaData() throws SQLException { + return null; + } + + @Override + public Object getObject(int columnIndex) throws SQLException { + return null; + } + + @Override + public Object getObject(String columnLabel) throws SQLException { + return null; + } + + @Override + public int findColumn(String columnLabel) throws SQLException { + return 0; + } + + @Override + public Reader getCharacterStream(int columnIndex) throws SQLException { + return null; + } + + @Override + public Reader getCharacterStream(String columnLabel) throws SQLException { + return null; + } + + @Override + public BigDecimal getBigDecimal(int columnIndex) throws SQLException { + return null; + } + + @Override + public BigDecimal getBigDecimal(String columnLabel) throws SQLException { + return null; + } + + @Override + public boolean isBeforeFirst() throws SQLException { + return false; + } + + @Override + public boolean isAfterLast() throws SQLException { + return false; + } + + @Override + public boolean isFirst() throws SQLException { + return false; + } + + @Override + public boolean isLast() throws SQLException { + return false; + } + + @Override + public void beforeFirst() throws SQLException { + + } + + @Override + public void afterLast() throws SQLException { + + } + + @Override + public boolean first() throws SQLException { + return false; + } + + @Override + public boolean last() throws SQLException { + return false; + } + + @Override + public int getRow() throws SQLException { + return 0; + } + + @Override + public boolean absolute(int row) throws SQLException { + return false; + } + + @Override + public boolean relative(int rows) throws SQLException { + return false; + } + + @Override + public boolean previous() throws SQLException { + return false; + } + + @Override + public int getFetchDirection() throws SQLException { + return 0; + } + + @Override + public void setFetchDirection(int direction) throws SQLException { + + } + + @Override + public int getFetchSize() throws SQLException { + return 0; + } + + @Override + public void setFetchSize(int rows) throws SQLException { + + } + + @Override + public int getType() throws SQLException { + return 0; + } + + @Override + public int getConcurrency() throws SQLException { + return 0; + } + + @Override + public boolean rowUpdated() throws SQLException { + return false; + } + + @Override + public boolean rowInserted() throws SQLException { + return false; + } + + @Override + public boolean rowDeleted() throws SQLException { + return false; + } + + @Override + public void updateNull(int columnIndex) throws SQLException { + + } + + @Override + public void updateBoolean(int columnIndex, boolean x) throws SQLException { + + } + + @Override + public void updateByte(int columnIndex, byte x) throws SQLException { + + } + + @Override + public void updateShort(int columnIndex, short x) throws SQLException { + + } + + @Override + public void updateInt(int columnIndex, int x) throws SQLException { + + } + + @Override + public void updateLong(int columnIndex, long x) throws SQLException { + + } + + @Override + public void updateFloat(int columnIndex, float x) throws SQLException { + + } + + @Override + public void updateDouble(int columnIndex, double x) throws SQLException { + + } + + @Override + public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException { + + } + + @Override + public void updateString(int columnIndex, String x) throws SQLException { + + } + + @Override + public void updateBytes(int columnIndex, byte[] x) throws SQLException { + + } + + @Override + public void updateDate(int columnIndex, Date x) throws SQLException { + + } + + @Override + public void updateTime(int columnIndex, Time x) throws SQLException { + + } + + @Override + public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException { + + } + + @Override + public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException { + + } + + @Override + public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException { + + } + + @Override + public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException { + + } + + @Override + public void updateObject(int columnIndex, Object x, int scaleOrLength) throws SQLException { + + } + + @Override + public void updateObject(int columnIndex, Object x) throws SQLException { + + } + + @Override + public void updateNull(String columnLabel) throws SQLException { + + } + + @Override + public void updateBoolean(String columnLabel, boolean x) throws SQLException { + + } + + @Override + public void updateByte(String columnLabel, byte x) throws SQLException { + + } + + @Override + public void updateShort(String columnLabel, short x) throws SQLException { + + } + + @Override + public void updateInt(String columnLabel, int x) throws SQLException { + + } + + @Override + public void updateLong(String columnLabel, long x) throws SQLException { + + } + + @Override + public void updateFloat(String columnLabel, float x) throws SQLException { + + } + + @Override + public void updateDouble(String columnLabel, double x) throws SQLException { + + } + + @Override + public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException { + + } + + @Override + public void updateString(String columnLabel, String x) throws SQLException { + + } + + @Override + public void updateBytes(String columnLabel, byte[] x) throws SQLException { + + } + + @Override + public void updateDate(String columnLabel, Date x) throws SQLException { + + } + + @Override + public void updateTime(String columnLabel, Time x) throws SQLException { + + } + + @Override + public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException { + + } + + @Override + public void updateAsciiStream(String columnLabel, InputStream x, int length) throws SQLException { + + } + + @Override + public void updateBinaryStream(String columnLabel, InputStream x, int length) throws SQLException { + + } + + @Override + public void updateCharacterStream(String columnLabel, Reader reader, int length) throws SQLException { + + } + + @Override + public void updateObject(String columnLabel, Object x, int scaleOrLength) throws SQLException { + + } + + @Override + public void updateObject(String columnLabel, Object x) throws SQLException { + + } + + @Override + public void insertRow() throws SQLException { + + } + + @Override + public void updateRow() throws SQLException { + + } + + @Override + public void deleteRow() throws SQLException { + + } + + @Override + public void refreshRow() throws SQLException { + + } + + @Override + public void cancelRowUpdates() throws SQLException { + + } + + @Override + public void moveToInsertRow() throws SQLException { + + } + + @Override + public void moveToCurrentRow() throws SQLException { + + } + + @Override + public Statement getStatement() throws SQLException { + return null; + } + + @Override + public Object getObject(int columnIndex, Map> map) throws SQLException { + return null; + } + + @Override + public Ref getRef(int columnIndex) throws SQLException { + return null; + } + + @Override + public Blob getBlob(int columnIndex) throws SQLException { + return null; + } + + @Override + public Clob getClob(int columnIndex) throws SQLException { + return null; + } + + @Override + public Array getArray(int columnIndex) throws SQLException { + return null; + } + + @Override + public Object getObject(String columnLabel, Map> map) throws SQLException { + return null; + } + + @Override + public Ref getRef(String columnLabel) throws SQLException { + return null; + } + + @Override + public Blob getBlob(String columnLabel) throws SQLException { + return null; + } + + @Override + public Clob getClob(String columnLabel) throws SQLException { + return null; + } + + @Override + public Array getArray(String columnLabel) throws SQLException { + return null; + } + + @Override + public Date getDate(int columnIndex, Calendar cal) throws SQLException { + return null; + } + + @Override + public Date getDate(String columnLabel, Calendar cal) throws SQLException { + return null; + } + + @Override + public Time getTime(int columnIndex, Calendar cal) throws SQLException { + return null; + } + + @Override + public Time getTime(String columnLabel, Calendar cal) throws SQLException { + return null; + } + + @Override + public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException { + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } + } + + @Override + public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException { + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } + } + + @Override + public URL getURL(int columnIndex) throws SQLException { + return null; + } + + @Override + public URL getURL(String columnLabel) throws SQLException { + return null; + } + + @Override + public void updateRef(int columnIndex, Ref x) throws SQLException { + + } + + @Override + public void updateRef(String columnLabel, Ref x) throws SQLException { + + } + + @Override + public void updateBlob(int columnIndex, Blob x) throws SQLException { + + } + + @Override + public void updateBlob(String columnLabel, Blob x) throws SQLException { + + } + + @Override + public void updateClob(int columnIndex, Clob x) throws SQLException { + + } + + @Override + public void updateClob(String columnLabel, Clob x) throws SQLException { + + } + + @Override + public void updateArray(int columnIndex, Array x) throws SQLException { + + } + + @Override + public void updateArray(String columnLabel, Array x) throws SQLException { + + } + + @Override + public RowId getRowId(int columnIndex) throws SQLException { + return null; + } + + @Override + public RowId getRowId(String columnLabel) throws SQLException { + return null; + } + + @Override + public void updateRowId(int columnIndex, RowId x) throws SQLException { + + } + + @Override + public void updateRowId(String columnLabel, RowId x) throws SQLException { + + } + + @Override + public int getHoldability() throws SQLException { + return 0; + } + + @Override + public boolean isClosed() throws SQLException { + return false; + } + + @Override + public void updateNString(int columnIndex, String nString) throws SQLException { + + } + + @Override + public void updateNString(String columnLabel, String nString) throws SQLException { + + } + + @Override + public void updateNClob(int columnIndex, NClob nClob) throws SQLException { + + } + + @Override + public void updateNClob(String columnLabel, NClob nClob) throws SQLException { + + } + + @Override + public NClob getNClob(int columnIndex) throws SQLException { + return null; + } + + @Override + public NClob getNClob(String columnLabel) throws SQLException { + return null; + } + + @Override + public SQLXML getSQLXML(int columnIndex) throws SQLException { + return null; + } + + @Override + public SQLXML getSQLXML(String columnLabel) throws SQLException { + return null; + } + + @Override + public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException { + + } + + @Override + public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException { + + } + + @Override + public String getNString(int columnIndex) throws SQLException { + return null; + } + + @Override + public String getNString(String columnLabel) throws SQLException { + return null; + } + + @Override + public Reader getNCharacterStream(int columnIndex) throws SQLException { + return null; + } + + @Override + public Reader getNCharacterStream(String columnLabel) throws SQLException { + return null; + } + + @Override + public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException { + + } + + @Override + public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException { + + } + + @Override + public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException { + + } + + @Override + public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException { + + } + + @Override + public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException { + + } + + @Override + public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException { + + } + + @Override + public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException { + + } + + @Override + public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException { + + } + + @Override + public void updateClob(int columnIndex, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateClob(String columnLabel, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException { + + } + + @Override + public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException { + + } + + @Override + public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException { + + } + + @Override + public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException { + + } + + @Override + public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException { + + } + + @Override + public void updateCharacterStream(int columnIndex, Reader x) throws SQLException { + + } + + @Override + public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException { + + } + + @Override + public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException { + + } + + @Override + public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException { + + } + + @Override + public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException { + + } + + @Override + public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException { + + } + + @Override + public void updateClob(int columnIndex, Reader reader) throws SQLException { + + } + + @Override + public void updateClob(String columnLabel, Reader reader) throws SQLException { + + } + + @Override + public void updateNClob(int columnIndex, Reader reader) throws SQLException { + + } + + @Override + public void updateNClob(String columnLabel, Reader reader) throws SQLException { + + } + + @Override + public T getObject(int columnIndex, Class type) throws SQLException { + return null; + } + + @Override + public T getObject(String columnLabel, Class type) throws SQLException { + return null; + } + + @Override + public T unwrap(Class iface) throws SQLException { + return null; + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return false; + } + + public void addString(String string) { + this.stringList.add(string); + this.hasData = true; + } + + public void addInteger(Integer integer) { + this.integerList.add(integer); + this.hasData = true; + } + + public void addBoolean(Boolean bool) { + this.booleanList.add(bool); + this.hasData = true; + } + + public void addDouble(Double doubleVal) { + this.doubleList.add(doubleVal); + this.hasData = true; + } + + public void addTimestamp(Timestamp timestamp) { + this.timestamps.add(timestamp); + this.hasData = true; + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockStatement.java b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockStatement.java new file mode 100644 index 0000000000..8d63d98c89 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/java/io/entgra/device/mgt/operation/template/mock/MockStatement.java @@ -0,0 +1,562 @@ +/* + * Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. + * + * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. + * + * Licensed under the Entgra Commercial License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://entgra.io/licenses/entgra-commercial/1.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 io.entgra.device.mgt.operation.template.mock; + +import java.io.InputStream; +import java.io.Reader; +import java.math.BigDecimal; +import java.net.URL; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLWarning; +import java.sql.Date; +import java.sql.Time; +import java.sql.Timestamp; +import java.sql.PreparedStatement; +import java.sql.ParameterMetaData; +import java.sql.Clob; +import java.sql.Blob; +import java.sql.NClob; +import java.sql.SQLXML; +import java.sql.Ref; +import java.sql.Array; +import java.sql.ResultSetMetaData; +import java.sql.RowId; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * This is the mock statement for the test cases. + */ +public class MockStatement implements PreparedStatement { + private final List resultSets = new ArrayList<>(); + private int resultSetCounter; + + @Override + public ResultSet executeQuery(String sql) throws SQLException { + return this.getMockResultSet(); + } + + private ResultSet getMockResultSet() { + if (!this.resultSets.isEmpty()) { + ResultSet resultSet = this.resultSets.get(this.resultSetCounter); + this.resultSetCounter++; + return resultSet; + } else { + return new MockResultSet(); + } + } + + @Override + public int executeUpdate(String sql) throws SQLException { + return 0; + } + + @Override + public void close() throws SQLException { + + } + + @Override + public int getMaxFieldSize() throws SQLException { + return 0; + } + + @Override + public void setMaxFieldSize(int max) throws SQLException { + + } + + @Override + public int getMaxRows() throws SQLException { + return 0; + } + + @Override + public void setMaxRows(int max) throws SQLException { + + } + + @Override + public void setEscapeProcessing(boolean enable) throws SQLException { + + } + + @Override + public int getQueryTimeout() throws SQLException { + return 0; + } + + @Override + public void setQueryTimeout(int seconds) throws SQLException { + + } + + @Override + public void cancel() throws SQLException { + + } + + @Override + public SQLWarning getWarnings() throws SQLException { + return null; + } + + @Override + public void clearWarnings() throws SQLException { + + } + + @Override + public void setCursorName(String name) throws SQLException { + + } + + @Override + public boolean execute(String sql) throws SQLException { + return false; + } + + @Override + public ResultSet getResultSet() throws SQLException { + return getMockResultSet(); + } + + @Override + public int getUpdateCount() throws SQLException { + return 0; + } + + @Override + public boolean getMoreResults() throws SQLException { + return false; + } + + @Override + public int getFetchDirection() throws SQLException { + return 0; + } + + @Override + public void setFetchDirection(int direction) throws SQLException { + + } + + @Override + public int getFetchSize() throws SQLException { + return 0; + } + + @Override + public void setFetchSize(int rows) throws SQLException { + + } + + @Override + public int getResultSetConcurrency() throws SQLException { + return 0; + } + + @Override + public int getResultSetType() throws SQLException { + return 0; + } + + @Override + public void addBatch(String sql) throws SQLException { + + } + + @Override + public void clearBatch() throws SQLException { + + } + + @Override + public int[] executeBatch() throws SQLException { + return new int[0]; + } + + @Override + public Connection getConnection() throws SQLException { + return null; + } + + @Override + public boolean getMoreResults(int current) throws SQLException { + return false; + } + + @Override + public ResultSet getGeneratedKeys() throws SQLException { + return getMockResultSet(); + } + + @Override + public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException { + return 0; + } + + @Override + public int executeUpdate(String sql, int[] columnIndexes) throws SQLException { + return 0; + } + + @Override + public int executeUpdate(String sql, String[] columnNames) throws SQLException { + return 0; + } + + @Override + public boolean execute(String sql, int autoGeneratedKeys) throws SQLException { + return false; + } + + @Override + public boolean execute(String sql, int[] columnIndexes) throws SQLException { + return false; + } + + @Override + public boolean execute(String sql, String[] columnNames) throws SQLException { + return false; + } + + @Override + public int getResultSetHoldability() throws SQLException { + return 0; + } + + @Override + public boolean isClosed() throws SQLException { + return false; + } + + @Override + public boolean isPoolable() throws SQLException { + return false; + } + + @Override + public void setPoolable(boolean poolable) throws SQLException { + + } + + @Override + public void closeOnCompletion() throws SQLException { + + } + + @Override + public boolean isCloseOnCompletion() throws SQLException { + return false; + } + + @Override + public T unwrap(Class iface) throws SQLException { + return null; + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return false; + } + + @Override + public ResultSet executeQuery() throws SQLException { + return getMockResultSet(); + } + + @Override + public int executeUpdate() throws SQLException { + return 0; + } + + @Override + public void setNull(int parameterIndex, int sqlType) throws SQLException { + + } + + @Override + public void setBoolean(int parameterIndex, boolean x) throws SQLException { + + } + + @Override + public void setByte(int parameterIndex, byte x) throws SQLException { + + } + + @Override + public void setShort(int parameterIndex, short x) throws SQLException { + + } + + @Override + public void setInt(int parameterIndex, int x) throws SQLException { + + } + + @Override + public void setLong(int parameterIndex, long x) throws SQLException { + + } + + @Override + public void setFloat(int parameterIndex, float x) throws SQLException { + + } + + @Override + public void setDouble(int parameterIndex, double x) throws SQLException { + + } + + @Override + public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException { + + } + + @Override + public void setString(int parameterIndex, String x) throws SQLException { + + } + + @Override + public void setBytes(int parameterIndex, byte[] x) throws SQLException { + + } + + @Override + public void setDate(int parameterIndex, Date x) throws SQLException { + + } + + @Override + public void setTime(int parameterIndex, Time x) throws SQLException { + + } + + @Override + public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException { + + } + + @Override + public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException { + + } + + @Override + public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException { + + } + + @Override + public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException { + + } + + @Override + public void clearParameters() throws SQLException { + + } + + @Override + public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException { + + } + + @Override + public void setObject(int parameterIndex, Object x) throws SQLException { + + } + + @Override + public boolean execute() throws SQLException { + return false; + } + + @Override + public void addBatch() throws SQLException { + + } + + @Override + public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException { + + } + + @Override + public void setRef(int parameterIndex, Ref x) throws SQLException { + + } + + @Override + public void setBlob(int parameterIndex, Blob x) throws SQLException { + + } + + @Override + public void setClob(int parameterIndex, Clob x) throws SQLException { + + } + + @Override + public void setArray(int parameterIndex, Array x) throws SQLException { + + } + + @Override + public ResultSetMetaData getMetaData() throws SQLException { + return null; + } + + @Override + public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException { + + } + + @Override + public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException { + + } + + @Override + public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException { + + } + + @Override + public void setNull(int parameterIndex, int sqlType, String typeName) throws SQLException { + + } + + @Override + public void setURL(int parameterIndex, URL x) throws SQLException { + + } + + @Override + public ParameterMetaData getParameterMetaData() throws SQLException { + return null; + } + + @Override + public void setRowId(int parameterIndex, RowId x) throws SQLException { + + } + + @Override + public void setNString(int parameterIndex, String value) throws SQLException { + + } + + @Override + public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException { + + } + + @Override + public void setNClob(int parameterIndex, NClob value) throws SQLException { + + } + + @Override + public void setClob(int parameterIndex, Reader reader, long length) throws SQLException { + + } + + @Override + public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException { + + } + + @Override + public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException { + + } + + @Override + public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException { + + } + + @Override + public void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) throws SQLException { + + } + + @Override + public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException { + + } + + @Override + public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException { + + } + + @Override + public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException { + + } + + @Override + public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException { + + } + + @Override + public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException { + + } + + @Override + public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException { + + } + + @Override + public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException { + + } + + @Override + public void setClob(int parameterIndex, Reader reader) throws SQLException { + + } + + @Override + public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException { + + } + + @Override + public void setNClob(int parameterIndex, Reader reader) throws SQLException { + + } + + public void addResultSet(MockResultSet resultSet) { + this.resultSets.add(resultSet); + } +} diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql new file mode 100644 index 0000000000..52b28e950d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/dm-db-h2.sql @@ -0,0 +1,738 @@ +CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE ( + ID INT AUTO_INCREMENT NOT NULL, + NAME VARCHAR(300) NULL DEFAULT NULL, + DEVICE_TYPE_META VARCHAR(20000) NULL DEFAULT NULL, + LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL, + PROVIDER_TENANT_ID INTEGER DEFAULT 0, + SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( + ID INTEGER auto_increment NOT NULL, + SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, + CERTIFICATE BLOB DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + USERNAME VARCHAR(500) DEFAULT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_GROUP ( + ID INTEGER AUTO_INCREMENT NOT NULL, + GROUP_NAME VARCHAR(100) DEFAULT NULL, + STATUS VARCHAR(50) DEFAULT NULL, + DESCRIPTION TEXT DEFAULT NULL, + OWNER VARCHAR(255) DEFAULT NULL, + PARENT_PATH VARCHAR(255) DEFAULT '/', + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_ROLE_GROUP_MAP ( + ID INTEGER AUTO_INCREMENT NOT NULL, + GROUP_ID INTEGER DEFAULT NULL, + ROLE VARCHAR(45) DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID), + CONSTRAINT fk_DM_ROLE_GROUP_MAP_DM_GROUP2 FOREIGN KEY (GROUP_ID) + REFERENCES DM_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE ( + ID INTEGER auto_increment NOT NULL, + DESCRIPTION TEXT DEFAULT NULL, + NAME VARCHAR(100) DEFAULT NULL, + DEVICE_TYPE_ID INT(11) DEFAULT NULL, + DEVICE_IDENTIFICATION VARCHAR(300) DEFAULT NULL, + LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID), + CONSTRAINT fk_DM_DEVICE_DM_DEVICE_TYPE2 FOREIGN KEY (DEVICE_TYPE_ID) + REFERENCES DM_DEVICE_TYPE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT uk_DM_DEVICE UNIQUE (NAME, DEVICE_TYPE_ID, DEVICE_IDENTIFICATION, TENANT_ID) +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_PROPERTIES ( + DEVICE_TYPE_NAME VARCHAR(300) NOT NULL, + DEVICE_IDENTIFICATION VARCHAR(300) NOT NULL, + PROPERTY_NAME VARCHAR(100) DEFAULT 0, + PROPERTY_VALUE VARCHAR(100) DEFAULT NULL, + TENANT_ID VARCHAR(100), + PRIMARY KEY (DEVICE_TYPE_NAME, DEVICE_IDENTIFICATION, PROPERTY_NAME, TENANT_ID) +); + +CREATE TABLE IF NOT EXISTS GROUP_PROPERTIES ( + GROUP_ID INTEGER NOT NULL, + PROPERTY_NAME VARCHAR(100) DEFAULT 0, + PROPERTY_VALUE VARCHAR(100) DEFAULT NULL, + TENANT_ID VARCHAR(100), + PRIMARY KEY (GROUP_ID, PROPERTY_NAME, TENANT_ID) +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_MAP ( + ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INTEGER DEFAULT NULL, + GROUP_ID INTEGER DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID), + CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_DEVICE2 FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_GROUP2 FOREIGN KEY (GROUP_ID) + REFERENCES DM_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS DM_OPERATION ( + ID INTEGER AUTO_INCREMENT NOT NULL, + TYPE VARCHAR(50) NOT NULL, + CREATED_TIMESTAMP TIMESTAMP NOT NULL, + RECEIVED_TIMESTAMP TIMESTAMP NULL, + OPERATION_CODE VARCHAR(1000) NOT NULL, + INITIATED_BY VARCHAR(100) NULL, + OPERATION_DETAILS BLOB DEFAULT NULL, + ENABLED BOOLEAN NOT NULL DEFAULT FALSE, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_ENROLMENT ( + ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INTEGER NOT NULL, + OWNER VARCHAR(255) NOT NULL, + OWNERSHIP VARCHAR(45) DEFAULT NULL, + STATUS VARCHAR(50) NULL, + IS_TRANSFERRED BOOLEAN NOT NULL DEFAULT FALSE, + DATE_OF_ENROLMENT TIMESTAMP DEFAULT NULL, + DATE_OF_LAST_UPDATE TIMESTAMP DEFAULT NULL, + TENANT_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_device_enrolment FOREIGN KEY (DEVICE_ID) REFERENCES + DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT uk_dm_device_enrolment UNIQUE (DEVICE_ID, OWNER, OWNERSHIP, TENANT_ID) +); + +CREATE TABLE IF NOT EXISTS DM_ENROLMENT_OP_MAPPING ( + ID INTEGER AUTO_INCREMENT NOT NULL, + ENROLMENT_ID INTEGER NOT NULL, + OPERATION_ID INTEGER NOT NULL, + STATUS VARCHAR(50) NULL, + PUSH_NOTIFICATION_STATUS VARCHAR(50) NULL, + CREATED_TIMESTAMP INT NOT NULL, + UPDATED_TIMESTAMP INT NOT NULL, + OPERATION_CODE VARCHAR(50) NOT NULL, + INITIATED_BY VARCHAR(100) NULL, + TYPE VARCHAR(20) NOT NULL, + DEVICE_ID INTEGER DEFAULT NULL, + DEVICE_TYPE VARCHAR(300) NOT NULL, + DEVICE_IDENTIFICATION VARCHAR(300) DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_device_operation_mapping_device FOREIGN KEY (ENROLMENT_ID) REFERENCES + DM_ENROLMENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_device_operation_mapping_operation FOREIGN KEY (OPERATION_ID) REFERENCES + DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_OPERATION_RESPONSE ( + ID INTEGER AUTO_INCREMENT NOT NULL, + ENROLMENT_ID INTEGER NOT NULL, + OPERATION_ID INTEGER NOT NULL, + EN_OP_MAP_ID INTEGER NOT NULL, + OPERATION_RESPONSE VARCHAR(1024) DEFAULT NULL , + IS_LARGE_RESPONSE BOOLEAN NOT NULL DEFAULT FALSE, + RECEIVED_TIMESTAMP TIMESTAMP NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_device_operation_response_enrollment FOREIGN KEY (ENROLMENT_ID) REFERENCES + DM_ENROLMENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_device_operation_response_operation FOREIGN KEY (OPERATION_ID) REFERENCES + DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_en_op_map_response FOREIGN KEY (EN_OP_MAP_ID) REFERENCES + DM_ENROLMENT_OP_MAPPING (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + +CREATE TABLE DM_DEVICE_OPERATION_RESPONSE_LARGE ( + ID INTEGER NOT NULL, + OPERATION_RESPONSE LONGBLOB DEFAULT NULL, + OPERATION_ID INTEGER NOT NULL, + EN_OP_MAP_ID INTEGER NOT NULL, + RECEIVED_TIMESTAMP TIMESTAMP NULL, + DEVICE_IDENTIFICATION VARCHAR(300) DEFAULT NULL, + CONSTRAINT fk_dm_device_operation_response_large_mapping FOREIGN KEY (ID) + REFERENCES DM_DEVICE_OPERATION_RESPONSE (ID) + ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_en_op_map_response_large FOREIGN KEY (EN_OP_MAP_ID) + REFERENCES DM_ENROLMENT_OP_MAPPING (ID) + ON DELETE NO ACTION ON UPDATE NO ACTION +); + +-- POLICY RELATED TABLES -- + +CREATE TABLE IF NOT EXISTS DM_PROFILE ( + ID INT NOT NULL AUTO_INCREMENT , + PROFILE_NAME VARCHAR(45) NOT NULL , + TENANT_ID INT NOT NULL , + DEVICE_TYPE VARCHAR(300) NOT NULL , + CREATED_TIME DATETIME NOT NULL , + UPDATED_TIME DATETIME NOT NULL , + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_POLICY ( + ID INT(11) NOT NULL AUTO_INCREMENT , + NAME VARCHAR(45) DEFAULT NULL , + DESCRIPTION VARCHAR(1000) NULL, + PAYLOAD_VERSION VARCHAR (45) NULL, + TENANT_ID INT(11) NOT NULL , + PROFILE_ID INT(11) NOT NULL , + OWNERSHIP_TYPE VARCHAR(45) NULL, + COMPLIANCE VARCHAR(100) NULL, + PRIORITY INT NOT NULL, + ACTIVE INT(2) NOT NULL, + UPDATED INT(1) NULL, + POLICY_TYPE VARCHAR(45) NULL, + PRIMARY KEY (ID) , + CONSTRAINT FK_DM_PROFILE_DM_POLICY + FOREIGN KEY (PROFILE_ID ) + REFERENCES DM_PROFILE (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY ( + ID INT(11) NOT NULL AUTO_INCREMENT , + DEVICE_ID INT(11) NOT NULL , + ENROLMENT_ID INT(11) NOT NULL, + DEVICE BLOB NOT NULL, + POLICY_ID INT(11) NOT NULL , + PRIMARY KEY (ID) , + CONSTRAINT FK_POLICY_DEVICE_POLICY + FOREIGN KEY (POLICY_ID ) + REFERENCES DM_POLICY (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT FK_DEVICE_DEVICE_POLICY + FOREIGN KEY (DEVICE_ID ) + REFERENCES DM_DEVICE (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE_POLICY ( + ID INT(11) NOT NULL , + DEVICE_TYPE VARCHAR(300) NOT NULL , + POLICY_ID INT(11) NOT NULL , + PRIMARY KEY (ID) , + CONSTRAINT FK_DEVICE_TYPE_POLICY + FOREIGN KEY (POLICY_ID ) + REFERENCES DM_POLICY (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_PROFILE_FEATURES ( + ID INT(11) NOT NULL AUTO_INCREMENT, + PROFILE_ID INT(11) NOT NULL, + FEATURE_CODE VARCHAR(100) NOT NULL, + DEVICE_TYPE VARCHAR(300) NOT NULL, + TENANT_ID INT(11) NOT NULL , + CONTENT BLOB NULL DEFAULT NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_DM_PROFILE_DM_POLICY_FEATURES + FOREIGN KEY (PROFILE_ID) + REFERENCES DM_PROFILE (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_CORRECTIVE_ACTION ( + ID INT(11) NOT NULL AUTO_INCREMENT, + ACTION_TYPE VARCHAR(45) NOT NULL, + CORRECTIVE_POLICY_ID INT(11) DEFAULT NULL, + POLICY_ID INT(11) NOT NULL, + FEATURE_ID INT(11) DEFAULT NULL, + IS_REACTIVE BOOLEAN NOT NULL DEFAULT FALSE, + PRIMARY KEY (ID), + CONSTRAINT FK_DM_POLICY_DM_POLICY_CORRECTIVE_ACTION + FOREIGN KEY (POLICY_ID) + REFERENCES DM_POLICY (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_ROLE_POLICY ( + ID INT(11) NOT NULL AUTO_INCREMENT , + ROLE_NAME VARCHAR(45) NOT NULL , + POLICY_ID INT(11) NOT NULL , + PRIMARY KEY (ID) , + CONSTRAINT FK_ROLE_POLICY_POLICY + FOREIGN KEY (POLICY_ID ) + REFERENCES DM_POLICY (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_USER_POLICY ( + ID INT NOT NULL AUTO_INCREMENT , + POLICY_ID INT NOT NULL , + USERNAME VARCHAR(45) NOT NULL , + PRIMARY KEY (ID) , + CONSTRAINT DM_POLICY_USER_POLICY + FOREIGN KEY (POLICY_ID ) + REFERENCES DM_POLICY (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED ( + ID INT NOT NULL AUTO_INCREMENT , + DEVICE_ID INT NOT NULL , + ENROLMENT_ID INT(11) NOT NULL, + POLICY_ID INT NOT NULL , + POLICY_CONTENT BLOB NULL , + TENANT_ID INT NOT NULL, + APPLIED TINYINT(1) NULL , + CREATED_TIME TIMESTAMP NULL , + UPDATED_TIME TIMESTAMP NULL , + APPLIED_TIME TIMESTAMP NULL , + PRIMARY KEY (ID) , + CONSTRAINT FK_DM_POLICY_DEVCIE_APPLIED + FOREIGN KEY (DEVICE_ID ) + REFERENCES DM_DEVICE (ID ) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_CRITERIA ( + ID INT NOT NULL AUTO_INCREMENT, + TENANT_ID INT NOT NULL, + NAME VARCHAR(50) NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA ( + ID INT NOT NULL AUTO_INCREMENT, + CRITERIA_ID INT NOT NULL, + POLICY_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_CRITERIA_POLICY_CRITERIA + FOREIGN KEY (CRITERIA_ID) + REFERENCES DM_CRITERIA (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT FK_POLICY_POLICY_CRITERIA + FOREIGN KEY (POLICY_ID) + REFERENCES DM_POLICY (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA_PROPERTIES ( + ID INT NOT NULL AUTO_INCREMENT, + POLICY_CRITERION_ID INT NOT NULL, + PROP_KEY VARCHAR(45) NULL, + PROP_VALUE VARCHAR(100) NULL, + CONTENT BLOB NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_POLICY_CRITERIA_PROPERTIES + FOREIGN KEY (POLICY_CRITERION_ID) + REFERENCES DM_POLICY_CRITERIA (ID) + ON DELETE CASCADE + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_STATUS ( + ID INT NOT NULL AUTO_INCREMENT, + DEVICE_ID INT NOT NULL, + ENROLMENT_ID INT(11) NOT NULL, + POLICY_ID INT NOT NULL, + TENANT_ID INT NOT NULL, + STATUS INT NULL, + LAST_SUCCESS_TIME TIMESTAMP NULL, + LAST_REQUESTED_TIME TIMESTAMP NULL, + LAST_FAILED_TIME TIMESTAMP NULL, + ATTEMPTS INT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_CHANGE_MGT ( + ID INT NOT NULL AUTO_INCREMENT, + POLICY_ID INT NOT NULL, + DEVICE_TYPE VARCHAR(300) NOT NULL , + TENANT_ID INT(11) NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_FEATURES ( + ID INT NOT NULL AUTO_INCREMENT, + COMPLIANCE_STATUS_ID INT NOT NULL, + TENANT_ID INT NOT NULL, + FEATURE_CODE VARCHAR(100) NOT NULL, + STATUS INT NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_COMPLIANCE_FEATURES_STATUS + FOREIGN KEY (COMPLIANCE_STATUS_ID) + REFERENCES DM_POLICY_COMPLIANCE_STATUS (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE TABLE IF NOT EXISTS DM_APPLICATION ( + ID INTEGER AUTO_INCREMENT NOT NULL, + NAME VARCHAR(150) NOT NULL, + APP_IDENTIFIER VARCHAR(150) NOT NULL, + PLATFORM VARCHAR(50) DEFAULT NULL, + CATEGORY VARCHAR(50) NULL, + VERSION VARCHAR(50) NULL, + TYPE VARCHAR(50) NULL, + LOCATION_URL VARCHAR(100) DEFAULT NULL, + IMAGE_URL VARCHAR(100) DEFAULT NULL, + APP_PROPERTIES BLOB NULL, + MEMORY_USAGE INTEGER(10) NULL, + IS_ACTIVE BOOLEAN NOT NULL DEFAULT FALSE, + DEVICE_ID INTEGER NOT NULL, + ENROLMENT_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_device + FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT fk_dm_enrolement + FOREIGN KEY (ENROLMENT_ID) + REFERENCES DM_ENROLMENT (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +-- POLICY RELATED TABLES FINISHED -- + +-- NOTIFICATION TABLE -- +CREATE TABLE IF NOT EXISTS DM_NOTIFICATION ( + NOTIFICATION_ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INTEGER NOT NULL, + OPERATION_ID INTEGER NULL, + TENANT_ID INTEGER NOT NULL, + STATUS VARCHAR(10) NULL, + DESCRIPTION VARCHAR(1000) NULL, + LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL, + PRIMARY KEY (NOTIFICATION_ID), + CONSTRAINT fk_dm_device_notification FOREIGN KEY (DEVICE_ID) REFERENCES + DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); +-- NOTIFICATION TABLE END -- + +CREATE TABLE IF NOT EXISTS DM_DEVICE_INFO ( + ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INT NULL, + ENROLMENT_ID INT NOT NULL, + KEY_FIELD VARCHAR(45) NULL, + VALUE_FIELD VARCHAR(1000) NULL, + PRIMARY KEY (ID), + CONSTRAINT DM_DEVICE_INFO_DEVICE + FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT DM_DEVICE_INFO_DEVICE_ENROLLMENT + FOREIGN KEY (ENROLMENT_ID) + REFERENCES DM_ENROLMENT (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE INDEX IDX_DM_DEVICE_INFO_DID_EID_KFIELD ON DM_DEVICE_INFO(DEVICE_ID, ENROLMENT_ID, KEY_FIELD); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_LOCATION ( + ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INT NULL, + ENROLMENT_ID INT NOT NULL, + LATITUDE DOUBLE NULL, + LONGITUDE DOUBLE NULL, + STREET1 VARCHAR(255) NULL, + STREET2 VARCHAR(45) NULL, + CITY VARCHAR(45) NULL, + ZIP VARCHAR(10) NULL, + STATE VARCHAR(45) NULL, + COUNTRY VARCHAR(45) NULL, + GEO_HASH VARCHAR(45) NULL, + UPDATE_TIMESTAMP BIGINT(15) NOT NULL, + ALTITUDE DOUBLE NULL, + SPEED FLOAT NULL, + BEARING FLOAT NULL, + DISTANCE DOUBLE NULL, + PRIMARY KEY (ID), + CONSTRAINT DM_DEVICE_LOCATION_DEVICE + FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT DM_DEVICE_LOCATION_DM_ENROLLMENT + FOREIGN KEY (ENROLMENT_ID) + REFERENCES DM_ENROLMENT (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); +CREATE INDEX DM_DEVICE_LOCATION_GEO_hashx ON DM_DEVICE_LOCATION(GEO_HASH ASC); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_DETAIL ( + ID INT NOT NULL AUTO_INCREMENT, + DEVICE_ID INT NOT NULL, + ENROLMENT_ID INT NOT NULL, + DEVICE_MODEL VARCHAR(45) NULL, + VENDOR VARCHAR(45) NULL, + OS_VERSION VARCHAR(45) NULL, + OS_BUILD_DATE VARCHAR(100) NULL, + BATTERY_LEVEL DECIMAL(4) NULL, + INTERNAL_TOTAL_MEMORY DECIMAL(30,3) NULL, + INTERNAL_AVAILABLE_MEMORY DECIMAL(30,3) NULL, + EXTERNAL_TOTAL_MEMORY DECIMAL(30,3) NULL, + EXTERNAL_AVAILABLE_MEMORY DECIMAL(30,3) NULL, + CONNECTION_TYPE VARCHAR(50) NULL, + SSID VARCHAR(45) NULL, + CPU_USAGE DECIMAL(5) NULL, + TOTAL_RAM_MEMORY DECIMAL(30,3) NULL, + AVAILABLE_RAM_MEMORY DECIMAL(30,3) NULL, + PLUGGED_IN INT(1) NULL, + UPDATE_TIMESTAMP BIGINT(15) NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_DM_DEVICE_DETAILS_DEVICE + FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT FK_DM_ENROLMENT_DEVICE_DETAILS + FOREIGN KEY (ENROLMENT_ID) + REFERENCES DM_ENROLMENT (ID) + ON DELETE NO ACTION + ON UPDATE NO ACTION +); + +CREATE INDEX IDX_DM_DEVICE_DETAIL_DID_EID ON DM_DEVICE_DETAIL(DEVICE_ID, ENROLMENT_ID); + +CREATE TABLE IF NOT EXISTS DM_DEVICE_HISTORY_LAST_SEVEN_DAYS +( + ID INTEGER AUTO_INCREMENT NOT NULL, + DEVICE_ID INT NOT NULL, + DEVICE_ID_NAME VARCHAR(255) NOT NULL, + TENANT_ID INT NOT NULL, + DEVICE_TYPE_NAME VARCHAR(45) NOT NULL, + LATITUDE DOUBLE NULL, + LONGITUDE DOUBLE NULL, + SPEED FLOAT NULL, + HEADING FLOAT NULL, + TIMESTAMP BIGINT(15) NOT NULL, + GEO_HASH VARCHAR(45) NULL, + DEVICE_OWNER VARCHAR(45) NULL, + DEVICE_ALTITUDE DOUBLE NULL, + DISTANCE DOUBLE NULL, + PRIMARY KEY (ID) +); + +-- POLICY AND DEVICE GROUP MAPPING -- +CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_POLICY ( + ID INT NOT NULL AUTO_INCREMENT, + DEVICE_GROUP_ID INT NOT NULL, + POLICY_ID INT NOT NULL, + TENANT_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT FK_DM_DEVICE_GROUP_POLICY + FOREIGN KEY (DEVICE_GROUP_ID) + REFERENCES DM_GROUP (ID) + ON DELETE CASCADE + ON UPDATE CASCADE , + CONSTRAINT FK_DM_DEVICE_GROUP_DM_POLICY + FOREIGN KEY (POLICY_ID) + REFERENCES DM_POLICY (ID) + ON DELETE CASCADE + ON UPDATE CASCADE +); +-- END OF POLICY AND DEVICE GROUP MAPPING -- + + +CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE_PLATFORM ( + ID INT NOT NULL AUTO_INCREMENT, + DEVICE_TYPE_ID INT NULL DEFAULT 0, + VERSION_NAME VARCHAR(100) NULL, + VERSION_STATUS VARCHAR(100) NULL DEFAULT 'ACTIVE', + PRIMARY KEY (ID), + CONSTRAINT DM_DEVICE_TYPE_DM_DEVICE_TYPE_PLATFORM_MAPPING + FOREIGN KEY (DEVICE_TYPE_ID) + REFERENCES DM_DEVICE_TYPE (ID) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT device_type_version_uk + UNIQUE ( + DEVICE_TYPE_ID, + VERSION_NAME + ) +); + +-- METADATA TABLE -- +CREATE TABLE IF NOT EXISTS DM_METADATA ( + METADATA_ID INT AUTO_INCREMENT NOT NULL, + DATA_TYPE VARCHAR(16) NOT NULL, + METADATA_KEY VARCHAR(128) NOT NULL, + METADATA_VALUE VARCHAR(8000) NOT NULL, + TENANT_ID INTEGER NOT NULL, + PRIMARY KEY (METADATA_ID), + CONSTRAINT METADATA_KEY_TENANT_ID UNIQUE (METADATA_KEY, TENANT_ID) +); +-- END OF METADATA TABLE -- + +-- DM_OTP_DATA TABLE -- +CREATE TABLE IF NOT EXISTS DM_OTP_DATA ( + ID INT AUTO_INCREMENT NOT NULL, + OTP_TOKEN VARCHAR(100) NOT NULL, + TENANT_ID INT NOT NULL, + USERNAME VARCHAR(500) DEFAULT NOT NULL, + EMAIL VARCHAR(100) NOT NULL, + EMAIL_TYPE VARCHAR(20) NOT NULL, + META_INFO VARCHAR(20000) NOT NULL, + CREATED_AT TIMESTAMP NOT NULL, + EXPIRY_TIME INT NOT NULL DEFAULT 3600, + IS_EXPIRED BOOLEAN DEFAULT false, + PRIMARY KEY (ID), + CONSTRAINT email_type_uk UNIQUE (EMAIL, EMAIL_TYPE) +); +-- END OF DM_OTP_DATA TABLE -- + +-- DASHBOARD RELATED VIEWS -- +CREATE VIEW POLICY_COMPLIANCE_INFO AS +SELECT +DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.DEVICE_IDENTIFICATION, +DEVICE_INFO.PLATFORM, +DEVICE_INFO.OWNERSHIP, +DEVICE_INFO.CONNECTIVITY_STATUS, +IFNULL(DEVICE_WITH_POLICY_INFO.POLICY_ID, -1) AS POLICY_ID, +IFNULL(DEVICE_WITH_POLICY_INFO.IS_COMPLIANT, -1) AS IS_COMPLIANT, +DEVICE_INFO.TENANT_ID +FROM +(SELECT +DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, +DM_DEVICE_TYPE.NAME AS PLATFORM, +DM_ENROLMENT.OWNERSHIP, +DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, +DM_DEVICE.TENANT_ID +FROM DM_DEVICE, DM_DEVICE_TYPE, DM_ENROLMENT +WHERE DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND DM_DEVICE.ID = DM_ENROLMENT.DEVICE_ID) DEVICE_INFO +LEFT JOIN +(SELECT +DEVICE_ID, +POLICY_ID, +STATUS AS IS_COMPLIANT +FROM DM_POLICY_COMPLIANCE_STATUS) DEVICE_WITH_POLICY_INFO +ON DEVICE_INFO.DEVICE_ID = DEVICE_WITH_POLICY_INFO.DEVICE_ID +ORDER BY DEVICE_INFO.DEVICE_ID; + +CREATE VIEW FEATURE_NON_COMPLIANCE_INFO AS +SELECT +DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, +DM_DEVICE_DETAIL.DEVICE_MODEL, +DM_DEVICE_DETAIL.VENDOR, +DM_DEVICE_DETAIL.OS_VERSION, +DM_ENROLMENT.OWNERSHIP, +DM_ENROLMENT.OWNER, +DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, +DM_POLICY_COMPLIANCE_STATUS.POLICY_ID, +DM_DEVICE_TYPE.NAME AS PLATFORM, +DM_POLICY_COMPLIANCE_FEATURES.FEATURE_CODE, +DM_POLICY_COMPLIANCE_FEATURES.STATUS AS IS_COMPLAINT, +DM_DEVICE.TENANT_ID +FROM +DM_POLICY_COMPLIANCE_FEATURES, DM_POLICY_COMPLIANCE_STATUS, DM_ENROLMENT, DM_DEVICE, DM_DEVICE_TYPE, DM_DEVICE_DETAIL +WHERE +DM_POLICY_COMPLIANCE_FEATURES.COMPLIANCE_STATUS_ID = DM_POLICY_COMPLIANCE_STATUS.ID AND +DM_POLICY_COMPLIANCE_STATUS.ENROLMENT_ID = DM_ENROLMENT.ID AND +DM_POLICY_COMPLIANCE_STATUS.DEVICE_ID = DM_DEVICE.ID AND +DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND +DM_DEVICE.ID = DM_DEVICE_DETAIL.DEVICE_ID +ORDER BY TENANT_ID, DEVICE_ID; + +-- END OF DASHBOARD RELATED VIEWS -- + +-- DM_GEOFENCE TABLE-- + +CREATE TABLE IF NOT EXISTS DM_GEOFENCE ( + ID INT NOT NULL AUTO_INCREMENT, + FENCE_NAME VARCHAR(255) NOT NULL, + DESCRIPTION TEXT DEFAULT NULL, + LATITUDE DOUBLE DEFAULT NULL, + LONGITUDE DOUBLE DEFAULT NULL, + RADIUS DOUBLE DEFAULT NULL, + GEO_JSON TEXT DEFAULT NULL, + FENCE_SHAPE VARCHAR(100) DEFAULT NULL, + CREATED_TIMESTAMP TIMESTAMP NOT NULL, + OWNER VARCHAR(255) NOT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID) +); + +-- END OF DM_GEOFENCE TABLE-- + +-- DM_GEOFENCE_GROUP_MAPPING TABLE-- +CREATE TABLE IF NOT EXISTS DM_GEOFENCE_GROUP_MAPPING ( + ID INT NOT NULL AUTO_INCREMENT, + FENCE_ID INT NOT NULL, + GROUP_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_geofence_group_mapping_geofence FOREIGN KEY (FENCE_ID) REFERENCES + DM_GEOFENCE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_geofence_group_mapping_group FOREIGN KEY (GROUP_ID) REFERENCES + DM_GROUP (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + +-- END OF DM_GEOFENCE_GROUP_MAPPING TABLE-- + +-- DM_DEVICE_EVENT TABLE -- + +CREATE TABLE IF NOT EXISTS DM_DEVICE_EVENT ( + ID INT NOT NULL AUTO_INCREMENT, + EVENT_SOURCE VARCHAR(100) NOT NULL, + EVENT_LOGIC VARCHAR(100) NOT NULL, + ACTIONS TEXT DEFAULT NULL, + CREATED_TIMESTAMP TIMESTAMP NOT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID) +); + +-- END OF DM_DEVICE_EVENT TABLE -- + +-- DM_DEVICE_EVENT_GROUP_MAPPING TABLE-- +CREATE TABLE IF NOT EXISTS DM_DEVICE_EVENT_GROUP_MAPPING ( + ID INT NOT NULL AUTO_INCREMENT, + EVENT_ID INT NOT NULL, + GROUP_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_event_group_mapping_event FOREIGN KEY (EVENT_ID) REFERENCES + DM_DEVICE_EVENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_event_group_mapping_group FOREIGN KEY (GROUP_ID) REFERENCES + DM_GROUP (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + +-- END OF DM_DEVICE_EVENT_GROUP_MAPPING TABLE-- + +-- DM_GEOFENCE_GROUP_MAPPING TABLE-- +CREATE TABLE IF NOT EXISTS DM_GEOFENCE_EVENT_MAPPING ( + ID INT NOT NULL AUTO_INCREMENT, + FENCE_ID INT NOT NULL, + EVENT_ID INT NOT NULL, + PRIMARY KEY (ID), + CONSTRAINT fk_dm_geofence_event_mapping_geofence FOREIGN KEY (FENCE_ID) REFERENCES + DM_GEOFENCE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_dm_geofence_event_mapping_event FOREIGN KEY (EVENT_ID) REFERENCES + DM_DEVICE_EVENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + +-- END OF DM_GEOFENCE_GROUP_MAPPING TABLE-- + +-- DM_DEVICE_SUB_TYPE TABLE-- +CREATE TABLE IF NOT EXISTS DM_DEVICE_SUB_TYPE ( + TENANT_ID INT DEFAULT 0, + SUB_TYPE_ID INT NOT NULL, + DEVICE_TYPE VARCHAR(25) NOT NULL, + SUB_TYPE_NAME VARCHAR(45) NOT NULL, + TYPE_DEFINITION TEXT NOT NULL, + PRIMARY KEY (SUB_TYPE_ID,DEVICE_TYPE) +); + +-- END OF DM_DEVICE_SUB_TYPE TABLE-- \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/h2.sql b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/h2.sql new file mode 100644 index 0000000000..7d6443ce0e --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/dbscripts/h2.sql @@ -0,0 +1,425 @@ +-- ----------------------------------------------------- +-- Table `POWER_METER_DEVICE` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `POWER_METER_DEVICE` ( + `ID` INTEGER AUTO_INCREMENT NOT NULL, + `SERIAL` VARCHAR(45) NOT NULL, + `IP_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, + `SIM_NUMBER` VARCHAR(45) NULL DEFAULT NULL, + `SUB_TYPE_ID` INT NOT NULL, + `CUSTOMER_REF` VARCHAR(45) NULL DEFAULT NULL, + `NODE_TYPE` VARCHAR(45) NULL DEFAULT NULL, + `CATEGORY` VARCHAR(45) NULL DEFAULT NULL, + `BRANCH` VARCHAR(45) NULL DEFAULT NULL, + `DEPOT` VARCHAR(45) NULL DEFAULT NULL, + `SUBSTATION_ID` VARCHAR(45) NULL DEFAULT NULL, + `HAS_EXPORT` VARCHAR(5) NULL DEFAULT NULL, + `COM_MODULE_IMEI` VARCHAR(45) NULL DEFAULT NULL, + `HAS_E_BILLING` VARCHAR(5) NULL DEFAULT NULL, + `IS_FEEDER_END` VARCHAR(5) NULL DEFAULT NULL, + `POLE_ID` VARCHAR(45) NULL DEFAULT NULL, + `METER_FW_VER` VARCHAR(45) NULL DEFAULT NULL, + `ASSIGNED_ON` TIMESTAMP NULL DEFAULT NULL, + PRIMARY KEY (`ID`, `SERIAL`)); + +-- ----------------------------------------------------- +-- Table `COMMUNICATION_MODULE` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `COMMUNICATION_MODULE` ( + `IMEI` VARCHAR(45) NOT NULL, + `SIM_IMSI` VARCHAR(45) NULL DEFAULT NULL, + `FW_VERSION` INT NULL DEFAULT 0, + `SUB_TYPE_ID` INT NOT NULL, + `SMS_PIN` VARCHAR(45) NULL DEFAULT NULL, + `BRANCH` VARCHAR(45) NULL DEFAULT NULL, + PRIMARY KEY (`IMEI`)); + +-- ----------------------------------------------------- +-- Table `METER_AUTHENTICATION_INFO` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `METER_AUTHENTICATION_INFO` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `CLIENT_ADDRESS` INT NOT NULL, + `AUTHENTICATION` VARCHAR(100) NOT NULL, + `USER_ID` INT NOT NULL, + `PASSWORD` VARCHAR(100) NOT NULL, + `METER_SERIAL_ID` VARCHAR(45) NOT NULL, + PRIMARY KEY (`ID`)); + +CREATE INDEX IDX_METER_AUTHENTICATION_INFO +ON METER_AUTHENTICATION_INFO(CLIENT_ADDRESS, METER_SERIAL_ID); + +-- ----------------------------------------------------- +-- Table `METER_READINGS` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `METER_READINGS` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `OPERATION_ID` INT NOT NULL, + `OPERATION_CODE` VARCHAR(45) NOT NULL, + `SUB_TYPE_ID` INT NOT NULL, + `NODE_TYPE` VARCHAR(45) NULL DEFAULT NULL, + `CATEGORY` VARCHAR(45) NULL DEFAULT NULL, + `HAS_EXPORT` BOOLEAN NULL DEFAULT NULL, + `HAS_E_BILLING` BOOLEAN NULL DEFAULT NULL, + `BRANCH` VARCHAR(45) NULL DEFAULT NULL, + `DEPOT` VARCHAR(45) NULL DEFAULT NULL, + `SUBSTATION_ID` VARCHAR(45) NULL DEFAULT NULL, + `SERIAL` VARCHAR(45) NOT NULL, + `CUSTOMER_REF` VARCHAR(45) NULL DEFAULT NULL, + `RESPONSE` BLOB NOT NULL, + `TIMESTAMP` BIGINT(15) NOT NULL, + `IS_PARTIAL_RESULT` BOOLEAN NOT NULL DEFAULT FALSE, + PRIMARY KEY (`ID`)); + +-- +-- Table structure for table `LAST_METER_READING` +-- +CREATE TABLE IF NOT EXISTS LAST_METER_READING ( + SERIAL VARCHAR(45) NOT NULL, + OPERATION_ID INTEGER NOT NULL, + SUB_TYPE_ID INT NOT NULL DEFAULT 0, + NODE_TYPE VARCHAR(45) NULL DEFAULT NULL, + CATEGORY VARCHAR(45) NULL DEFAULT NULL, + HAS_EXPORT BOOLEAN NULL DEFAULT NULL, + HAS_E_BILLING BOOLEAN NULL DEFAULT NULL, + BRANCH VARCHAR(45) NULL DEFAULT NULL, + DEPOT VARCHAR(45) NULL DEFAULT NULL, + SUBSTATION_ID VARCHAR(45) NULL DEFAULT NULL, + CUSTOMER_REF VARCHAR(45) NULL DEFAULT NULL, + RESPONSE LONGBLOB NOT NULL, + LAST_READING_TIMESTAMP BIGINT NOT NULL, + PRIMARY KEY (SERIAL) +); + +-- ----------------------------------------------------- +-- Table `PROFILE_READINGS` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `PROFILE_READINGS` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `OPERATION_ID` INT NOT NULL, + `OBIS` VARCHAR(45) NULL DEFAULT NULL, + `SUB_TYPE_ID` INT NOT NULL, + `NODE_TYPE` VARCHAR(45) NULL DEFAULT NULL, + `CATEGORY` VARCHAR(45) NULL DEFAULT NULL, + `HAS_EXPORT` BOOLEAN NULL DEFAULT NULL, + `HAS_E_BILLING` BOOLEAN NULL DEFAULT NULL, + `BRANCH` VARCHAR(45) NULL DEFAULT NULL, + `DEPOT` VARCHAR(45) NULL DEFAULT NULL, + `SUBSTATION_ID` VARCHAR(45) NULL DEFAULT NULL, + `SERIAL` VARCHAR(45) NOT NULL, + `CUSTOMER_REF` VARCHAR(45) NULL DEFAULT NULL, + `PROFILE_DATA` BLOB NOT NULL, + `TIMESTAMP` BIGINT(15) NOT NULL, + PRIMARY KEY (`ID`)); + +-- ----------------------------------------------------- +-- Table `METER_INSTALL` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `METER_INSTALL` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `SERIAL` VARCHAR(45) NOT NULL, + `USERNAME` VARCHAR(45) NULL DEFAULT NULL, + `JOB_ID` VARCHAR(45) NULL DEFAULT NULL, + `LAB_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `COM_MODULE_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `TERMINAL_COVER_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `METER_ENCLOSURE_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `PRINTED_SERIAL` VARCHAR(45) NULL DEFAULT NULL, + `CUSTOMER_REF` VARCHAR(45) NULL DEFAULT NULL, + `IMPORT_READING` DOUBLE DEFAULT 0, + `EXPORT_READING` DOUBLE DEFAULT 0, + `READING_TIMESTAMP` BIGINT(15) DEFAULT 0, + `TIMESTAMP` TIMESTAMP NOT NULL, + PRIMARY KEY (`ID`)); + +-- ----------------------------------------------------- +-- Table `METER_UNINSTALL` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `METER_UNINSTALL` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `SERIAL` VARCHAR(45) NOT NULL, + `USERNAME` VARCHAR(45) NULL DEFAULT NULL, + `JOB_ID` VARCHAR(45) NULL DEFAULT NULL, + `LAB_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `COM_MODULE_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `TERMINAL_COVER_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `METER_ENCLOSURE_SEAL` VARCHAR(45) NULL DEFAULT NULL, + `PRINTED_SERIAL` VARCHAR(45) NULL DEFAULT NULL, + `CUSTOMER_REF` VARCHAR(45) NULL DEFAULT NULL, + `IMPORT_READING` DOUBLE DEFAULT 0, + `EXPORT_READING` DOUBLE DEFAULT 0, + `READING_TIMESTAMP` BIGINT(15) DEFAULT 0, + `TIMESTAMP` TIMESTAMP NOT NULL, + PRIMARY KEY (`ID`)); + +-- ----------------------------------------------------- +-- Table `RSSI_LEVEL` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `RSSI_LEVEL` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `IMEI` VARCHAR(45) NOT NULL, + `SIM_IMSI` VARCHAR(45) NULL DEFAULT NULL, + `FW_VERSION` INT NULL DEFAULT 0, + `COM_TYPE_ID` INT NOT NULL, + `RSSI` INT NULL DEFAULT 0, + `NETWORK` VARCHAR(45) NULL DEFAULT NULL, + `CELL_ID` VARCHAR(45) NULL DEFAULT NULL, + `LAC` VARCHAR(45) NULL DEFAULT NULL, + `RSRP` DECIMAL (5, 2) NULL DEFAULT 0, + `RSRQ` DECIMAL (5, 2) NULL DEFAULT 0, + `SNR` DECIMAL (5, 2) NULL DEFAULT 0, + `PCI` INT NULL DEFAULT 0, + `TRANSPORT` VARCHAR(45) NULL DEFAULT NULL, + `TIMESTAMP` BIGINT(15) NOT NULL, + PRIMARY KEY (`ID`)); + +-- ----------------------------------------------------- +-- Table `REQUEST` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `REQUEST` ( + `ID` int NOT NULL AUTO_INCREMENT, + `DUE_DATE` bigint DEFAULT '0', + `REQUESTED_BY` varchar(100) NOT NULL, + `REQUESTED_DATE` bigint DEFAULT '0', + `STATUS` varchar(45) NOT NULL, + `BRANCH` varchar(45) DEFAULT NULL, + `REMARKS` varchar(255) NOT NULL, + `REQUEST_TYPE` int NOT NULL, + PRIMARY KEY (`ID`) +) ; + +-- ----------------------------------------------------- +-- Table `METER_ASSIGNMENT_REQUEST` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `METER_ASSIGNMENT_REQUEST` ( + `ID` int NOT NULL, + `SUB_TYPE_ID` int NOT NULL, + `PRIMARY_CT_RATIO` float DEFAULT '0', + `SECONDARY_CT_RATIO` float DEFAULT '0', + `PRIMARY_PT_RATIO` float DEFAULT '0', + `SECONDARY_PT_RATIO` float DEFAULT '0', + `NODE_TYPE` varchar(45) DEFAULT NULL, + `REQUESTED_COUNT` int NOT NULL, + `ACCEPTED_COUNT` int DEFAULT NULL, + `ASSIGNED_COUNT` int DEFAULT NULL, + `SUBSTATION_ID` varchar(45) DEFAULT NULL, + `CUSTOMER_REF` varchar(45) DEFAULT NULL, + `DEPOT` VARCHAR(45) DEFAULT NULL, + `PURPOSE` VARCHAR(50) DEFAULT NULL, + `ADDRESS` VARCHAR(255) DEFAULT NULL, + `DESCRIPTION` VARCHAR(100) DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_ASSIGNMENT_REQUEST_REQUEST` FOREIGN KEY (`ID`) REFERENCES `REQUEST` (`ID`) +) ; + +-- ----------------------------------------------------- +-- Table `DISCONNECTION_REQUEST` +-- ------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `DISCONNECTION_REQUEST` ( + `ID` int NOT NULL, + `ACTIVITY_ID` VARCHAR(45) DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_DISCONNECTION_REQUEST_REQUEST` FOREIGN KEY (`ID`) REFERENCES `REQUEST` (`ID`) +) ; + +-- ----------------------------------------------------- +-- Table `FIELD_TEST_REQUEST` +-- ------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `FIELD_TEST_REQUEST` ( + `ID` int NOT NULL, + `TEAM` varchar(255) DEFAULT NULL, + `SCHEDULED_DATE` bigint DEFAULT '0', + `RESULT` varchar(50) DEFAULT NULL, + `ATTACHMENT` blob, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_ASSIGNMENT_FIELD_TEST_REQUEST_REQUEST` FOREIGN KEY (`ID`) REFERENCES `REQUEST` (`ID`) +); + +-- ----------------------------------------------------- +-- Table `LOAD_PROFILE_REQUEST` +-- ------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `LOAD_PROFILE_REQUEST` ( + `ID` int NOT NULL, + `ACTIVITY_ID` VARCHAR(45) DEFAULT NULL, + `START_DATE` bigint DEFAULT '0', + `END_DATE` bigint DEFAULT '0', + PRIMARY KEY (`ID`), + CONSTRAINT `fk_LOAD_PROFILE_REQUEST_REQUEST_REQUEST` FOREIGN KEY (`ID`) REFERENCES `REQUEST` (`ID`) +); + +-- ----------------------------------------------------- +-- Table `READOUT_REQUEST` +-- ------------------------------------------------------- + +CREATE TABLE `READOUT_REQUEST` ( + `ID` int NOT NULL, + `ACTIVITY_ID` VARCHAR(45) DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_READUOT_REQUEST_REQUEST_REQUEST` FOREIGN KEY (`ID`) REFERENCES `REQUEST` (`ID`) +); + +-- ----------------------------------------------------- +-- Table `COM_MODULE_REQUEST` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `COM_MODULE_REQUEST` ( + `ID` INT NOT NULL, + `MODULE_TYPE` VARCHAR(45) NOT NULL, + `REQUESTED_COUNT` INT NOT NULL, + `ACCEPTED_COUNT` INT DEFAULT NULL, + `ASSIGNED_COUNT` INT DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_COM_MODULE_REQUEST_REQUEST` FOREIGN KEY (`ID`) + REFERENCES `REQUEST` (`ID`) +); + +-- ----------------------------------------------------- +-- Table `RECONNECTION_REQUEST` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `RECONNECTION_REQUEST` ( + `ID` int NOT NULL, + `ACTIVITY_ID` VARCHAR(45) DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_RECONNECTION_REQUEST_REQUEST` FOREIGN KEY (`ID`) + REFERENCES `REQUEST` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION +); + + +----------------------------------------------------- +-- Table `REQUEST_LIFECYCLE_EVENT` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `REQUEST_LIFECYCLE_EVENT` ( + `ID` int NOT NULL AUTO_INCREMENT, + `REQUEST_ID` int NOT NULL, + `UPDATED_BY` varchar(100) NOT NULL, + `UPDATED_DATE` bigint DEFAULT '0', + `STATUS` varchar(45) NOT NULL, + `REMARKS` varchar(200) DEFAULT NULL, + PRIMARY KEY (`ID`), + CONSTRAINT `fk_REQUEST_LIFECYCLE_EVENT_REQUEST` FOREIGN KEY (`REQUEST_ID`) REFERENCES `REQUEST` (`ID`) +) ; + + +-- ----------------------------------------------------- +-- Table `DEVICE_EVENTS` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `PROCESSED_DEVICE_EVENTS` ( + `ID` INT NOT NULL AUTO_INCREMENT, + `METER_SERIAL` VARCHAR(45), + `IP_ADDRESS` VARCHAR(45), + `NUMBER` VARCHAR(45), + `TYPE` VARCHAR(45) NOT NULL, + `KEY` VARCHAR(100) NOT NULL, + `VALUE` VARCHAR(100) NOT NULL, + `EVENT` VARCHAR(45) NOT NULL, + `TIMESTAMP` BIGINT(15) DEFAULT 0, + PRIMARY KEY (`ID`)); + + -- ----------------------------------------------------- + -- Table `DM_DEVICE_SUB_TYPE` + -- ----------------------------------------------------- + + CREATE TABLE IF NOT EXISTS `DM_DEVICE_SUB_TYPE` ( + `TENANT_ID` INT DEFAULT 0, + `SUB_TYPE_ID` INT NOT NULL, + `DEVICE_TYPE` VARCHAR(25) NOT NULL, + `SUB_TYPE_NAME` VARCHAR(45) NOT NULL, + `TYPE_DEFINITION` TEXT NOT NULL, + PRIMARY KEY (`SUB_TYPE_ID`,`DEVICE_TYPE`) + ); + + -- ----------------------------------------------------- +-- Table `OPERATION_TEMPLATE` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `OPERATION_TEMPLATE`( + `TEMPLATE_ID` INT NOT NULL AUTO_INCREMENT, + `SUB_TYPE_ID` INT NOT NULL, + `OPERATION_CODE` VARCHAR(100) NOT NULL, + `OPERATION_DEFINITION` TEXT DEFAULT NULL, + PRIMARY KEY (`TEMPLATE_ID`) +); + +-- ----------------------------------------------------- +-- Table `GENERIC_METER_REGISTER` +-- ----------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `GENERIC_METER_REGISTER`( + `RRPK_ID` VARCHAR(100) NOT NULL, + `DESCRIPTION` VARCHAR(100) NOT NULL, + `UNIT` VARCHAR(45) NULL DEFAULT NULL, + `ORDER` INT NOT NULL, + PRIMARY KEY (`RRPK_ID`) +); + +CREATE TABLE SUB_OPERATION_TEMPLATE ( + SUB_OPERATION_TEMPLATE_ID int NOT NULL AUTO_INCREMENT, + OPERATION_DEFINITION TEXT NOT NULL, + OPERATION_CODE varchar(100) NOT NULL, + SUB_TYPE_ID int NOT NULL, + DEVICE_TYPE VARCHAR(25) NOT NULL, + CREATE_TIMESTAMP timestamp NULL DEFAULT NULL, + UPDATE_TIMESTAMP timestamp NULL DEFAULT NULL, + PRIMARY KEY (SUB_OPERATION_TEMPLATE_ID), + UNIQUE KEY SUB_OPERATION_TEMPLATE (SUB_TYPE_ID,OPERATION_CODE, DEVICE_TYPE), + CONSTRAINT fk_SUB_OPERATION_TEMPLATE_DM_DEVICE_SUB_TYPE FOREIGN KEY (SUB_TYPE_ID, DEVICE_TYPE) REFERENCES DM_DEVICE_SUB_TYPE (SUB_TYPE_ID, DEVICE_TYPE) +); + +-- ----------------------------------------------------- +-- Sample data for DAO test cases +-- ----------------------------------------------------- +INSERT INTO DM_DEVICE_TYPE(NAME, DEVICE_TYPE_META, LAST_UPDATED_TIMESTAMP, PROVIDER_TENANT_ID, SHARED_WITH_ALL_TENANTS) VALUES +('android','NULL','2020-10-14 16:05:15',-1234,1),('power-meter','NULL','2020-10-14 16:05:15',-1234,1), +('communication-module','NULL','2020-10-14 16:05:15',-1234,1),('sim','NULL','2020-10-14 16:05:15',-1234,1); +INSERT INTO DM_DEVICE(DESCRIPTION, NAME, DEVICE_TYPE_ID, DEVICE_IDENTIFICATION, LAST_UPDATED_TIMESTAMP, TENANT_ID) VALUES +('+94713192111', '192.168.118.111', 4, '413012689159555', '2022-04-04 16:55:52', '-1234'), +('NULL', '864495036647555', 3, '864495036647555', '2022-04-04 16:56:52', '-1234'), +('NULL', '000019729555', 2, '000019729555', '2022-04-04 16:56:52', '-1234'); + +INSERT INTO DM_ENROLMENT(DEVICE_ID,OWNER,OWNERSHIP,STATUS,IS_TRANSFERRED,DATE_OF_ENROLMENT,DATE_OF_LAST_UPDATE,TENANT_ID) VALUES +(1,'admin','COPE','ACTIVE',0,'2022-04-11 15:41:30','2022-04-11 15:41:30',-1234), +(2,'admin','COPE','ACTIVE',0,'2022-04-11 15:41:30','2022-04-11 15:41:30',-1234), +(3,'admin','COPE','ACTIVE',0,'2022-04-11 15:41:30','2022-04-11 15:41:30',-1234); +INSERT INTO DM_DEVICE_PROPERTIES (DEVICE_TYPE_NAME,DEVICE_IDENTIFICATION,PROPERTY_NAME,PROPERTY_VALUE,TENANT_ID) VALUES +('sim','413012689159555','APN','LECOSMSTC',-1234), +('sim','413012689159555','IP_ADDRESS','192.168.118.111',-1234), +('sim','413012689159555','MOBILE_NO','+94713192111',-1234), +('sim','413012689159555','SUB_TYPE_ID','1',-1234), +('sim','413012689159555','token',NULL,-1234), +('communication-module','864495036647555','BRANCH','KOTTE',-1234), +('communication-module','864495036647555','FW_VERSION','6',-1234), +('communication-module','864495036647555','SIM_IMSI','413012689159555',-1234), +('communication-module','864495036647555','SIM_PIN','1234',-1234), +('communication-module','864495036647555','SUB_TYPE_ID','1',-1234), +('communication-module','864495036647555','token',NULL,-1234), +('power-meter','000019729555','BRANCH','KOTTE',-1234), +('power-meter','000019729555','CATEGORY','BILLING_BULK',-1234), +('power-meter','000019729555','COM_MODULE_IMEI','864495036647555',-1234), +('power-meter','000019729555','CUSTOMER_REF','0602297555',-1234), +('power-meter','000019729555','DEPOT','PITA-KOTTE',-1234), +('power-meter','000019729555','HAS_EXPORT','false',-1234), +('power-meter','000019729555','HAS_E_BILLING','false',-1234), +('power-meter','000019729555','IP_ADDRESS','192.168.118.111',-1234), +('power-meter','000019729555','IS_FEEDER_END','false',-1234), +('power-meter','000019729555','NODE_TYPE','BILLING',-1234), +('power-meter','000019729555','POLE_ID','NW55/5/15C',-1234), +('power-meter','000019729555','SIM_NUMBER','+94713192111',-1234), +('power-meter','000019729555','SUBSTATION_ID','AZ8555',-1234), +('power-meter','000019729555','SUB_TYPE_ID','1',-1234), +('power-meter','000019729555','token',NULL,-1234); + + +-- INSERT INTO SIM_DEVICE (IMSI,IP_ADDRESS,MOBILE_NO,SUB_TYPE_ID,APN) VALUES ('413012689159555','10.217.55.155','+94713192111',1,'LECOSMSTC'); +INSERT INTO COMMUNICATION_MODULE(IMEI,SIM_IMSI,FW_VERSION,SUB_TYPE_ID,BRANCH,SMS_PIN) VALUES ('864495036647555','413012689159555',6,1,'KOTTE','1234'); +INSERT INTO POWER_METER_DEVICE (SERIAL,IP_ADDRESS,SIM_NUMBER,COM_MODULE_IMEI,SUB_TYPE_ID,CUSTOMER_REF,NODE_TYPE,CATEGORY,BRANCH,DEPOT,SUBSTATION_ID,HAS_EXPORT,HAS_E_BILLING,IS_FEEDER_END,POLE_ID,ASSIGNED_ON) +VALUES ('000019729555','192.168.118.111','+94713192111','864495036647555',1,'0602297555','BILLING','BILLING_BULK','KOTTE','PITA-KOTTE','AZ82555','false','false','false','NW55/5/15C',NULL); + +INSERT INTO DM_DEVICE_SUB_TYPE (SUB_TYPE_ID, TENANT_ID, DEVICE_TYPE, SUB_TYPE_NAME, TYPE_DEFINITION) VALUES +(3,-1234,'METER','TestSubType','{"make": "TestSubType", "model": "ATx-Mega SIM800", "subTypeId": 3, "hasSMSSupport": true, "hasICMPSupport": true, "socketServerPort": 8071}'), +(4,-1234,'METER','TestSubType','{"make": "TestSubType", "model": "ATx-Mega SIM800", "subTypeId": 4, "hasSMSSupport": true, "hasICMPSupport": true, "socketServerPort": 8071}'); diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml new file mode 100644 index 0000000000..6043bbcf91 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml @@ -0,0 +1,727 @@ + + + + + + + + + + + + + ${hotdeployment} + ${hotupdate} + optional + true + work/mtom + 4000 + + ${childfirstCL} + + + true + + + true + + + + false + + inmemory + + + + + + + services + + + axis2services + + + axis2modules + + + @product.name@-@product.version@ + + + @product.name@-@product.version@ + + + + + + + false + + + + + + false + + + true + + + repository/deployment/server/synapse-configs + + + + . + + + . + + + WSO2 Carbon Server + + + + + + + ${jaxwsparam} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9763 + + + + + + + + + + + + 9443 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HTTP/1.1 + chunked + + true + + + HTTP/1.1 + chunked + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + multicast + + + + + wso2.carbon.domain + + + + + + 45564 + + 100 + + 60 + + + + + + 127.0.0.1 + + + + + + 4000 + + + + + + + + + + + + + + + + + + 127.0.0.1 + 4000 + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml new file mode 100644 index 0000000000..6757e67de3 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml @@ -0,0 +1,303 @@ + + + + + + + true + false + false + + + 500 + + 15000 + + + false + + + + true + + + + + + false + + + admin + axis2 + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6071 + + + + + + + + + + + + + + + + + + + + + + HTTP/1.1 + chunked + 60000 + 60000 + + + HTTP/1.1 + chunked + 60000 + 60000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml new file mode 100644 index 0000000000..e54e1107bb --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml @@ -0,0 +1,288 @@ + + + + + + + + + true + true + optional + + + true + + + false + + + + true + + + + + + false + + + false + + + axis2services + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/carbon.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/carbon.xml new file mode 100644 index 0000000000..fbc7e4b021 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/carbon.xml @@ -0,0 +1,660 @@ + + + + + + + + + ${product.name} + + + ${product.key} + + + ${product.version} + + + + + + + + + local:/${carbon.context}/services/ + + + + + + + ${default.server.role} + + + + + + + org.wso2.carbon + + + / + + + + + + + + + 15 + + + + + + + + + 0 + + + + + 9999 + + 11111 + + + + + + 10389 + + 8000 + + + + + + 10500 + + + + + + + org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory + + + + + + + + + + java + + + + + + + + + + false + + + false + + + 600 + + + + false + + + + + + + + 30 + + + + + + + + + 15 + + + + + + ${carbon.home}/repository/deployment/server/ + + + 15 + + + ${carbon.home}/repository/conf/axis2/axis2.xml + + + 30000 + + + ${carbon.home}/repository/deployment/client/ + + ${carbon.home}/repository/conf/axis2/axis2_client.xml + + true + + + + + + + + + + admin + Default Administrator Role + + + user + Default User Role + + + + + + + + + + + + ${carbon.home}/repository/resources/security/wso2carbon.jks + + JKS + + wso2carbon + + wso2carbon + + wso2carbon + + + + + + ${carbon.home}/repository/resources/security/client-truststore.jks + + JKS + + wso2carbon + + + + + + + + + + + + + + + + + + + UserManager + + + false + + + + + + + ${carbon.home}/tmp/work + + + + + + true + + + 10 + + + 30 + + + + + + 100 + + + + keystore + certificate + * + + org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor + + + + + jarZip + + org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor + + + + dbs + + org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor + + + + tools + + org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor + + + + toolsAny + + org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor + + + + + + + info + org.wso2.carbon.core.transports.util.InfoProcessor + + + wsdl + org.wso2.carbon.core.transports.util.Wsdl11Processor + + + wsdl2 + org.wso2.carbon.core.transports.util.Wsdl20Processor + + + xsd + org.wso2.carbon.core.transports.util.XsdProcessor + + + + + + false + false + true + svn + http://svnrepo.example.com/repos/ + username + password + true + + + + + + + + + + + + + + + ${require.carbon.servlet} + + + + + true + + + + + + + default repository + ${p2.repo.url} + + + + + + + + true + + + + + + true + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/cdm-config.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/cdm-config.xml new file mode 100644 index 0000000000..0e53e2b7d6 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/cdm-config.xml @@ -0,0 +1,172 @@ + + + + + + + + jdbc/DM_DS + + + + + 1000 + 60000 + 60000 + true + + + org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.FCMBasedPushNotificationProvider + + + org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.MQTTBasedPushNotificationProvider + + + org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.HTTPBasedPushNotificationProvider + + + org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.XMPPBasedPushNotificationProvider + + + + + false + + + https://localhost:9443 + admin + admin + + + https://localhost:9443 + admin + admin + + + org.wso2.carbon.policy.mgt + true + 60000 + 5 + 8 + 20 + + + + Simple + true + + + + 20 + 20 + 20 + 20 + 20 + 20 + 20 + + + + true + + + + false + 600 + + 10000 + + + false + 600 + + 10000 + + + true + + + false + 86400 + + + + + jdbc/DM_ARCHIVAL_DS + + + + false + org.wso2.carbon.device.mgt.core.task.impl.ArchivalTask + + 0 0 0 1/1 * ? * + + 30 + 1000 + + false + org.wso2.carbon.device.mgt.core.task.impl.ArchivedDataDeletionTask + + 0 0 3 1/1 * ? * + + 365 + + + + + false + + + false + false + + false + + + + + * + + + + + + true + wss://localhost:9443 + 2 + 100 + 20 + 15 + 640 + + BYOD,COPE + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml new file mode 100644 index 0000000000..b2f8c12a6f --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml @@ -0,0 +1,26 @@ + + + + + jdbc:h2:mem:smart-meter-test-db;DB_CLOSE_ON_EXIT=FALSE;MVCC=true + org.h2.Driver + wso2carbon + wso2carbon + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt new file mode 100644 index 0000000000..ffa7c79264 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt @@ -0,0 +1,12 @@ +This directory supports adding third-pary config files to specific bundles during runtime. + +Explanation: Each OSGi bundle has its own classLoader. Some thirdpary libs read configs from classPath. This scenario fails in OSGi runtime, since OSGi runtime does not share a common classPath for individual bundles. Bundling config files during the bundle creation process itself will solve the issue. However it limits the ability to edit the configs during restarts. + +Here we are providing a workaround for such scenarios. The given config file will get resolved to a fragment bundle and will get attached to the specified host bundle. The host bundle name(symbolic name) is resolved by looking at the directory structure. Hence host bundle name should be directory name of the config file directory. + + +Example: The bundle with symbolic name, 'org.foo.bar' expects a config file named 'foobar.properties' from its classPath. + +create a directory named 'org.foo.bar' inside 'repository/conf/etc/bundle-config' - (this directory) and place the foobar.properties file. + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties new file mode 100644 index 0000000000..eb0f2e8493 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties @@ -0,0 +1,22 @@ +# +# Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. +# +# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. +# +# Licensed under the Entgra Commercial License, Version 1.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://entgra.io/licenses/entgra-commercial/1.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. +# + +#osgi.service.1 = org.wso2.carbon.client.configcontext.provider.Axis2ClientConfigContextProvider +#osgi.service.2 = org.wso2.carbon.user.core.UserManager +#osgi.service.3 = org.wso2.carbon.user.api.UserRealmService \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml new file mode 100644 index 0000000000..5cb755588f --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml @@ -0,0 +1,56 @@ + + + + + + + + 800 + 2047 + 2047 + 1024 + 4096 + 02:FB:AA:5F:20:64:49:4A:27:29:55:71:83:F7:46:CD + + + 256 + 512 + 256 + + + carbon.home + carbon.config.dir.path + axis2.home + + + Linux + Unix + Mac OS + Windows Server 2003 + Windows XP + Windows Vista + Windows 7 + Mac OS X + Windows Server 2008 + Windows Server 2008 R2 + AIX + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/jmx.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/jmx.xml new file mode 100644 index 0000000000..b9f2bed216 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/jmx.xml @@ -0,0 +1,35 @@ + + + + + true + + + localhost + + + ${Ports.JMX.RMIRegistryPort} + + + ${Ports.JMX.RMIServerPort} + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/launch.ini b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/launch.ini new file mode 100644 index 0000000000..8b9f5ad190 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/launch.ini @@ -0,0 +1,258 @@ +# Eclipse Runtime Configuration Overrides +# These properties are loaded prior to starting the framework and can also be used to override System Properties +# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework +# "*" can be used together with @null to clear System Properties that match a prefix name. + +osgi.*=@null +org.osgi.*=@null +eclipse.*=@null + +osgi.parentClassloader=app +osgi.contextClassLoaderParent=app + +# When osgi.clean is set to "true", any cached data used by the OSGi framework +# will be wiped clean. This will clean the caches used to store bundle +# dependency resolution and eclipse extension registry data. Using this +# option will force OSGi framework to reinitialize these caches. +# The following setting is put in place to get rid of the problems +# faced when re-starting the system. Please note that, when this setting is +# true, if you manually start a bundle, it would not be available when +# you re-start the system. To avid this, copy the bundle jar to the plugins +# folder, before you re-start the system. +osgi.clean=true + +# Uncomment the following line to turn on Eclipse Equinox debugging. +# You may also edit the osgi-debug.options file and fine tune the debugging +# options to suite your needs. +#osgi.debug=./repository/conf/osgi-debug.options + +# Following system property allows us to control the public JDK packages exported through the system bundle. +org.osgi.framework.system.packages=javax.accessibility,\ +javax.activity,\ +javax.crypto,\ +javax.crypto.interfaces,\ +javax.crypto.spec,\ +javax.imageio,\ +javax.imageio.event,\ +javax.imageio.metadata,\ +javax.imageio.plugins.bmp,\ +javax.imageio.plugins.jpeg,\ +javax.imageio.spi,\ +javax.imageio.stream,\ +javax.jms,\ +javax.management,\ +javax.management.loading,\ +javax.management.modelmbean,\ +javax.management.monitor,\ +javax.management.openmbean,\ +javax.management.relation,\ +javax.management.remote,\ +javax.management.remote.rmi,\ +javax.management.timer,\ +javax.naming,\ +javax.naming.directory,\ +javax.naming.event,\ +javax.naming.ldap,\ +javax.naming.spi,\ +javax.net,\ +javax.net.ssl,\ +javax.print,\ +javax.print.attribute,\ +javax.print.attribute.standard,\ +javax.print.event,\ +javax.rmi,\ +javax.rmi.CORBA,\ +javax.rmi.ssl,\ +javax.script,\ +javax.security.auth,\ +javax.security.auth.callback,\ +javax.security.auth.kerberos,\ +javax.security.auth.login,\ +javax.security.auth.spi,\ +javax.security.auth.x500,\ +javax.security.cert,\ +javax.security.sasl,\ +javax.sound.midi,\ +javax.sound.midi.spi,\ +javax.sound.sampled,\ +javax.sound.sampled.spi,\ +javax.sql,\ +javax.sql.rowset,\ +javax.sql.rowset.serial,\ +javax.sql.rowset.spi,\ +javax.swing,\ +javax.swing.border,\ +javax.swing.colorchooser,\ +javax.swing.event,\ +javax.swing.filechooser,\ +javax.swing.plaf,\ +javax.swing.plaf.basic,\ +javax.swing.plaf.metal,\ +javax.swing.plaf.multi,\ +javax.swing.plaf.synth,\ +javax.swing.table,\ +javax.swing.text,\ +javax.swing.text.html,\ +javax.swing.text.html.parser,\ +javax.swing.text.rtf,\ +javax.swing.tree,\ +javax.swing.undo,\ +javax.transaction,\ +javax.transaction.xa,\ +javax.xml.namespace,\ +javax.xml.parsers,\ +javax.xml.stream,\ +javax.xml.stream.events,\ +javax.xml.stream.util,\ +javax.xml.transform,\ +javax.xml.transform.stream,\ +javax.xml.transform.dom,\ +javax.xml.transform.sax,\ +javax.xml,\ +javax.xml.validation,\ +javax.xml.datatype,\ +javax.xml.xpath,\ +javax.activation,\ +com.sun.activation.registries,\ +com.sun.activation.viewers,\ +org.ietf.jgss,\ +org.omg.CORBA,\ +org.omg.CORBA_2_3,\ +org.omg.CORBA_2_3.portable,\ +org.omg.CORBA.DynAnyPackage,\ +org.omg.CORBA.ORBPackage,\ +org.omg.CORBA.portable,\ +org.omg.CORBA.TypeCodePackage,\ +org.omg.CosNaming,\ +org.omg.CosNaming.NamingContextExtPackage,\ +org.omg.CosNaming.NamingContextPackage,\ +org.omg.Dynamic,\ +org.omg.DynamicAny,\ +org.omg.DynamicAny.DynAnyFactoryPackage,\ +org.omg.DynamicAny.DynAnyPackage,\ +org.omg.IOP,\ +org.omg.IOP.CodecFactoryPackage,\ +org.omg.IOP.CodecPackage,\ +org.omg.Messaging,\ +org.omg.PortableInterceptor,\ +org.omg.PortableInterceptor.ORBInitInfoPackage,\ +org.omg.PortableServer,\ +org.omg.PortableServer.CurrentPackage,\ +org.omg.PortableServer.POAManagerPackage,\ +org.omg.PortableServer.POAPackage,\ +org.omg.PortableServer.portable,\ +org.omg.PortableServer.ServantLocatorPackage,\ +org.omg.SendingContext,\ +org.omg.stub.java.rmi,\ +org.w3c.dom,\ +org.w3c.dom.bootstrap,\ +org.w3c.dom.css,\ +org.w3c.dom.events,\ +org.w3c.dom.html,\ +org.w3c.dom.ls,\ +org.w3c.dom.ranges,\ +org.w3c.dom.stylesheets,\ +org.w3c.dom.traversal,\ +org.w3c.dom.views ,\ +org.xml.sax,\ +org.xml.sax.ext,\ +org.xml.sax.helpers,\ +org.apache.xerces.xpointer,\ +org.apache.xerces.xni.grammars,\ +org.apache.xerces.impl.xs.util,\ +org.apache.xerces.jaxp.validation,\ +org.apache.xerces.impl.dtd.models,\ +org.apache.xerces.impl.xpath,\ +org.apache.xerces.dom3.as,\ +org.apache.xerces.impl.dv.xs,\ +org.apache.xerces.util,\ +org.apache.xerces.impl.xs.identity,\ +org.apache.xerces.impl.xs.opti,\ +org.apache.xerces.jaxp,\ +org.apache.xerces.impl.dv,\ +org.apache.xerces.xs.datatypes,\ +org.apache.xerces.dom.events,\ +org.apache.xerces.impl.msg,\ +org.apache.xerces.xni,\ +org.apache.xerces.impl.xs,\ +org.apache.xerces.impl,\ +org.apache.xerces.impl.io,\ +org.apache.xerces.xinclude,\ +org.apache.xerces.jaxp.datatype,\ +org.apache.xerces.parsers,\ +org.apache.xerces.impl.dv.util,\ +org.apache.xerces.xni.parser,\ +org.apache.xerces.impl.xs.traversers,\ +org.apache.xerces.impl.dv.dtd,\ +org.apache.xerces.xs,\ +org.apache.xerces.impl.dtd,\ +org.apache.xerces.impl.validation,\ +org.apache.xerces.impl.xs.models,\ +org.apache.xerces.impl.xpath.regex,\ +org.apache.xml.serialize,\ +org.apache.xerces.dom,\ +org.apache.xalan,\ +org.apache.xalan.xslt,\ +org.apache.xalan.templates,\ +org.apache.xalan.xsltc,\ +org.apache.xalan.xsltc.cmdline,\ +org.apache.xalan.xsltc.cmdline.getopt,\ +org.apache.xalan.xsltc.trax,\ +org.apache.xalan.xsltc.dom,\ +org.apache.xalan.xsltc.runtime,\ +org.apache.xalan.xsltc.runtime.output,\ +org.apache.xalan.xsltc.util,\ +org.apache.xalan.xsltc.compiler,\ +org.apache.xalan.xsltc.compiler.util,\ +org.apache.xalan.serialize,\ +org.apache.xalan.client,\ +org.apache.xalan.res,\ +org.apache.xalan.transformer,\ +org.apache.xalan.extensions,\ +org.apache.xalan.lib,\ +org.apache.xalan.lib.sql,\ +org.apache.xalan.processor,\ +org.apache.xalan.trace,\ +org.apache.xml.dtm,\ +org.apache.xml.dtm.ref,\ +org.apache.xml.dtm.ref.sax2dtm,\ +org.apache.xml.dtm.ref.dom2dtm,\ +org.apache.xml.utils,\ +org.apache.xml.utils.res,\ +org.apache.xml.res,\ +org.apache.xml.serializer,\ +org.apache.xml.serializer.utils,\ +org.apache.xpath,\ +org.apache.xpath.domapi,\ +org.apache.xpath.objects,\ +org.apache.xpath.patterns,\ +org.apache.xpath.jaxp,\ +org.apache.xpath.res,\ +org.apache.xpath.operations,\ +org.apache.xpath.functions,\ +org.apache.xpath.axes,\ +org.apache.xpath.compiler,\ +org.apache.xml.resolver,\ +org.apache.xml.resolver.tools,\ +org.apache.xml.resolver.helpers,\ +org.apache.xml.resolver.readers,\ +org.apache.xml.resolver.etc,\ +org.apache.xml.resolver.apps,\ +javax.xml.ws,\ +javax.xml.ws.handler,\ +javax.xml.ws.handler.soap,\ +javax.xml.ws.http,\ +javax.xml.ws.soap,\ +javax.xml.ws.spi,\ +javax.xml.ws.spi.http,\ +javax.xml.ws.wsaddressing,\ +javax.xml.bind,\ +javax.xml.bind.annotation,\ +javax.xml.bind.annotation.adapters,\ +javax.annotation,\ +javax.jws,\ +javax.jws.soap,\ +com.sun.xml.internal.messaging.saaj.soap.ver1_1,\ +com.sun.xml.internal.messaging.saaj.soap,\ +com.sun.tools.internal.ws.spi,\ +org.wso2.carbon.bootstrap diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties new file mode 100644 index 0000000000..8385072039 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties @@ -0,0 +1,73 @@ +# +# Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. +# +# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. +# +# Licensed under the Entgra Commercial License, Version 1.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://entgra.io/licenses/entgra-commercial/1.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. +# + +############################################################ +# Default Logging Configuration File +# +# You can use a different file by specifying a filename +# with the java.util.logging.config.file system property. +# For example java -Djava.util.logging.config.file=myfile +############################################################ +############################################################ +# Global properties +# NOTE: this configuration file use to get the handler list, +# Properties(except level property) define for each handler +# may be not available because LogRecords handover to log4j +# appenders in runtime. +############################################################ +# "handlers" specifies a comma separated list of log Handler +# classes. These handlers will be installed during VM startup. +# Note that these classes must be on the system classpath. +# By default we only configure a ConsoleHandler, which will only +# show messages at the INFO and above levels. +#handlers= java.util.logging.ConsoleHandler +# To also add the FileHandler, use the following line instead. +#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler +# Add org.wso2.carbon.bootstrap.logging.handlers.LogEventHandler to handlers if you need to push java logs to LOGEVENT appender +handlers=org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler, org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler +# Default global logging level. +# This specifies which kinds of events are logged across +# all loggers. For any given facility this global level +# can be overriden by a facility specific level +# Note that the ConsoleHandler also has a separate level +# setting to limit messages printed to the console. +.level=INFO +############################################################ +# Handler specific properties. +# Describes specific configuration info for Handlers. +# +############################################################ +# This FileHandler pushed LogRecords to a log4j FileAppander in runtime +org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler.level=INFO +#org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler.formatter = java.util.logging.SimpleFormatter +# This ConsoleHandler pushed LogRecords to q log4j ConsoleAppander in runtime +org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler.level=INFO +#org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler.formatter = java.util.logging.SimpleFormatter +############################################################ +# Facility specific properties. +# Provides extra control for each logger. +############################################################ +# For example, set the com.xyz.foo logger to only log SEVERE +# messages: +#com.xyz.foo.level = SEVERE +org.apache.coyote.level=SEVERE +org.apache.catalina.level=SEVERE +com.hazelcast.level=SEVERE + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.mappings b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.mappings new file mode 100644 index 0000000000..97a5c5a5fc --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.mappings @@ -0,0 +1,27 @@ +# +# Copyright 2005-2011 WSO2, Inc. (http://wso2.com) +# +# Licensed 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. +# + +# This file is to define the human readable media type for a mime type. +# Eg:- +# text/plain txt text +application/wsdl+xml WSDL +application/x-xsd+xml Schema +application/policy+xml Policy +application/vnd.wso2-service+xml Service +application/vnd.wso2-hyperlink Hyperlink +application/vnd.wso2.endpoint Endpoint +application/vnd.wso2-api+xml API +application/vnd.wso2-uri+xml URI diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.types b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.types new file mode 100644 index 0000000000..21c386da00 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/mime.types @@ -0,0 +1,734 @@ +# +# Copyright 2005-2009 WSO2, Inc. (http://wso2.com) +# +# Licensed 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. +# + +# Media type for wsdl files. This is not defined in the original mime.types file. +chemical/x-alchemy alc +application/andrew-inset ez +application/wsdl+xml wsdl +application/vnd.sun.wadl+xml wadl +application/activemessage +application/applefile +application/atomicmail +application/batch-SMTP +application/beep+xml +application/cals-1840 +application/commonground +application/cu-seeme cu +application/cybercash +application/dca-rft +application/dec-dx +application/docbook+xml +application/dsptype tsp +application/dvcs +application/edi-consent +application/edi-x12 +application/edifact +application/eshop +application/font-tdpfr +application/futuresplash spl +application/ghostview +application/hta hta +application/http +application/hyperstudio +application/iges +application/index +application/index.cmd +application/index.obj +application/index.response +application/index.vnd +application/iotp +application/ipp +application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/mac-binhex40 hqx +application/mac-compactpro cpt +application/macwriteii +application/marc +application/mathematica nb +application/mathematica-old +application/msaccess mdb +application/msword doc dot +application/news-message-id +application/news-transmission +application/ocsp-request +application/ocsp-response +application/octet-stream bin +application/oda oda +application/ogg ogg +application/parityfec +application/pdf pdf +application/pgp-encrypted +application/pgp-keys key +application/pgp-signature pgp +application/pics-rules prf +application/pkcs10 +application/pkcs7-mime +application/pkcs7-signature +application/pkix-cert +application/pkix-crl +application/pkixcmp +application/policy+xml +application/postscript ps ai eps +application/prs.alvestrand.titrax-sheet +application/prs.cww +application/prs.nprend +application/qsig +application/rar rar +application/rdf+xml rdf +application/remote-printing +application/riscos +application/rss+xml rss +application/rtf +application/sdp +application/set-payment +application/set-payment-initiation +application/set-registration +application/set-registration-initiation +application/sgml +application/sgml-open-catalog +application/sieve +application/slate +application/smil smi smil +application/timestamp-query +application/timestamp-reply +application/vemmi +application/whoispp-query +application/whoispp-response +application/wita +application/wordperfect wpd +application/wordperfect5.1 wp5 +application/x400-bp +application/xhtml+xml xhtml xht +application/xml xml xsl xslt jrxml +application/xml-dtd +application/xml-external-parsed-entity +application/zip zip +application/vnd.3M.Post-it-Notes +application/vnd.accpac.simply.aso +application/vnd.accpac.simply.imp +application/vnd.acucobol +application/vnd.aether.imp +application/vnd.anser-web-certificate-issue-initiation +application/vnd.anser-web-funds-transfer-initiation +application/vnd.audiograph +application/vnd.bmi +application/vnd.businessobjects +application/vnd.canon-cpdl +application/vnd.canon-lips +application/vnd.cinderella cdy +application/vnd.claymore +application/vnd.commerce-battelle +application/vnd.commonspace +application/vnd.comsocaller +application/vnd.contact.cmsg +application/vnd.cosmocaller +application/vnd.ctc-posml +application/vnd.cups-postscript +application/vnd.cups-raster +application/vnd.cups-raw +application/vnd.cybank +application/vnd.dna +application/vnd.dpgraph +application/vnd.dxr +application/vnd.ecdis-update +application/vnd.ecowin.chart +application/vnd.ecowin.filerequest +application/vnd.ecowin.fileupdate +application/vnd.ecowin.series +application/vnd.ecowin.seriesrequest +application/vnd.ecowin.seriesupdate +application/vnd.enliven +application/vnd.epson.esf +application/vnd.epson.msf +application/vnd.epson.quickanime +application/vnd.epson.salt +application/vnd.epson.ssf +application/vnd.ericsson.quickcall +application/vnd.eudora.data +application/vnd.fdf +application/vnd.ffsns +application/vnd.flographit +application/vnd.framemaker +application/vnd.fsc.weblaunch +application/vnd.fujitsu.oasys +application/vnd.fujitsu.oasys2 +application/vnd.fujitsu.oasys3 +application/vnd.fujitsu.oasysgp +application/vnd.fujitsu.oasysprs +application/vnd.fujixerox.ddd +application/vnd.fujixerox.docuworks +application/vnd.fujixerox.docuworks.binder +application/vnd.fut-misnet +application/vnd.grafeq +application/vnd.groove-account +application/vnd.groove-identity-message +application/vnd.groove-injector +application/vnd.groove-tool-message +application/vnd.groove-tool-template +application/vnd.groove-vcard +application/vnd.hhe.lesson-player +application/vnd.hp-HPGL +application/vnd.hp-PCL +application/vnd.hp-PCLXL +application/vnd.hp-hpid +application/vnd.hp-hps +application/vnd.httphone +application/vnd.hzn-3d-crossword +application/vnd.ibm.MiniPay +application/vnd.ibm.afplinedata +application/vnd.ibm.modcap +application/vnd.informix-visionary +application/vnd.intercon.formnet +application/vnd.intertrust.digibox +application/vnd.intertrust.nncp +application/vnd.intu.qbo +application/vnd.intu.qfx +application/vnd.irepository.package+xml +application/vnd.is-xpr +application/vnd.japannet-directory-service +application/vnd.japannet-jpnstore-wakeup +application/vnd.japannet-payment-wakeup +application/vnd.japannet-registration +application/vnd.japannet-registration-wakeup +application/vnd.japannet-setstore-wakeup +application/vnd.japannet-verification +application/vnd.japannet-verification-wakeup +application/vnd.koan +application/vnd.lotus-1-2-3 +application/vnd.lotus-approach +application/vnd.lotus-freelance +application/vnd.lotus-notes +application/vnd.lotus-organizer +application/vnd.lotus-screencam +application/vnd.lotus-wordpro +application/vnd.mcd +application/vnd.mediastation.cdkey +application/vnd.meridian-slingshot +application/vnd.mif +application/vnd.minisoft-hp3000-save +application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf +application/vnd.mobius.dis +application/vnd.mobius.msl +application/vnd.mobius.plc +application/vnd.mobius.txf +application/vnd.motorola.flexsuite +application/vnd.motorola.flexsuite.adsi +application/vnd.motorola.flexsuite.fis +application/vnd.motorola.flexsuite.gotap +application/vnd.motorola.flexsuite.kmr +application/vnd.motorola.flexsuite.ttc +application/vnd.motorola.flexsuite.wem +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry +application/vnd.ms-asf +application/vnd.ms-excel xls xlb xlt +application/vnd.ms-lrm +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +application/vnd.ms-powerpoint ppt pps +application/vnd.ms-project +application/vnd.ms-tnef +application/vnd.ms-works +application/vnd.mseq +application/vnd.msign +application/vnd.music-niff +application/vnd.musician +application/vnd.netfpx +application/vnd.noblenet-directory +application/vnd.noblenet-sealer +application/vnd.noblenet-web +application/vnd.novadigm.EDM +application/vnd.novadigm.EDX +application/vnd.novadigm.EXT +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +application/vnd.osa.netdeploy +application/vnd.palm +application/vnd.pg.format +application/vnd.pg.osasli +application/vnd.powerbuilder6 +application/vnd.powerbuilder6-s +application/vnd.powerbuilder7 +application/vnd.powerbuilder7-s +application/vnd.powerbuilder75 +application/vnd.powerbuilder75-s +application/vnd.previewsystems.box +application/vnd.publishare-delta-tree +application/vnd.pvi.ptid1 +application/vnd.pwg-xhtml-print+xml +application/vnd.rapid +application/vnd.rim.cod cod +application/vnd.s3sms +application/vnd.seemail +application/vnd.shana.informed.formdata +application/vnd.shana.informed.formtemplate +application/vnd.shana.informed.interchange +application/vnd.shana.informed.package +application/vnd.smaf mmf +application/vnd.sss-cod +application/vnd.sss-dtf +application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd sdp +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +application/vnd.svd +application/vnd.swiftview-ics +application/vnd.symbian.install sis +application/vnd.triscape.mxs +application/vnd.trueapp +application/vnd.truedoc +application/vnd.tve-trigger +application/vnd.ufdl +application/vnd.uplanet.alert +application/vnd.uplanet.alert-wbxml +application/vnd.uplanet.bearer-choice +application/vnd.uplanet.bearer-choice-wbxml +application/vnd.uplanet.cacheop +application/vnd.uplanet.cacheop-wbxml +application/vnd.uplanet.channel +application/vnd.uplanet.channel-wbxml +application/vnd.uplanet.list +application/vnd.uplanet.list-wbxml +application/vnd.uplanet.listcmd +application/vnd.uplanet.listcmd-wbxml +application/vnd.uplanet.signal +application/vnd.vcx +application/vnd.vectorworks +application/vnd.vidsoft.vidconference +application/vnd.visio vsd +application/vnd.vividence.scriptfile +application/vnd.wap.sic +application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo +application/vnd.wrq-hp3000-labelled +application/vnd.wso2.bpel+xml bpel +application/vnd.wso2.bpmn+xml bpmn +application/vnd.wso2.endpoint +application/vnd.wso2.governance-archive gar +application/vnd.wso2-hyperlink +application/vnd.wso2.registry-ext-type+xml rxt +application/vnd.wso2-service+xml +application/vnd.wso2.xpdl+xml xpdl +application/vnd.wt.stf +application/vnd.xara +application/vnd.xfdl +application/vnd.yellowriver-custom-menu +application/x-123 wk +application/x-abiword abw +application/x-apple-diskimage dmg +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-cdf cdf +application/x-cdlink vcd +application/x-chess-pgn pgn +application/x-core +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-director dcr dir dxr +application/x-dms dms +application/x-doom wad +application/x-dvi dvi +application/x-executable +application/x-flac flac +application/x-font pfa pfb gsf pcf pcf.Z +application/x-freemind mm +application/x-futuresplash spl +application/x-gnumeric gnumeric +application/x-go-sgf sgf +application/x-graphing-calculator gcf +application/x-gtar gtar tgz taz +application/x-hdf hdf +application/x-httpd-php phtml pht php +application/x-httpd-php-source phps +application/x-httpd-php3 php3 +application/x-httpd-php3-preprocessed php3p +application/x-httpd-php4 php4 +application/x-httpd-eruby rhtml +application/x-ica ica +application/x-internet-signup ins isp +application/x-iphone iii +application/x-iso9660-image iso +application/x-java-applet +application/x-java-bean +application/x-java-jnlp-file jnlp +application/x-javascript js +application/x-jmol jmz +application/x-kchart chrt +application/x-kdelnk +application/x-killustrator kil +application/x-koan skp skd skt skm +application/x-kpresenter kpr kpt +application/x-kspread ksp +application/x-kword kwd kwt +application/x-latex latex +application/x-lha lha +application/x-lzh lzh +application/x-lzx lzx +application/x-maker frm maker frame fm fb book fbdoc +application/x-mif mif +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-msdos-program com exe bat dll +application/x-msi msi +application/x-netcdf nc +application/x-ns-proxy-autoconfig pac +application/x-nwc nwc +application/x-object o +application/x-oz-application oza +application/x-pkcs7-certreqresp p7r +application/x-pkcs7-crl crl +application/x-python-code pyc pyo +application/x-quicktimeplayer qtl +application/x-redhat-package-manager rpm +application/x-rx +application/x-sh sh +application/x-shar shar +application/x-shellscript +application/x-shockwave-flash swf swfl +application/x-stuffit sit +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-tar tar +application/x-tcl tcl +application/x-tex-gf gf +application/x-tex-pk pk +application/x-texinfo texinfo texi +application/x-trash ~ % bak old sik +application/x-troff t tr roff +application/x-troff-man man +application/x-troff-me me +application/x-troff-ms ms +application/x-ustar ustar +application/x-videolan +application/x-wais-source src +application/x-wingz wz +application/x-x509-ca-cert crt +application/x-xcf xcf +application/x-xfig fig +application/x-xpinstall xpi +application/x-xsd+xml xsd + +audio/32kadpcm +audio/basic au snd +audio/g.722.1 +audio/l16 +audio/midi mid midi kar +audio/mp4a-latm +audio/mpa-robust +audio/mpeg mpga mpega mp2 mp3 m4a +audio/mpegurl m3u +audio/parityfec +audio/prs.sid sid +audio/telephone-event +audio/tone +audio/vnd.cisco.nse +audio/vnd.cns.anp1 +audio/vnd.cns.inf1 +audio/vnd.digital-winds +audio/vnd.everad.plj +audio/vnd.lucent.voice +audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 +audio/vnd.nuera.ecelp7470 +audio/vnd.nuera.ecelp9600 +audio/vnd.octel.sbc +audio/vnd.qcelp +audio/vnd.rhetorex.32kadpcm +audio/vnd.vmx.cvsd +audio/x-aiff aif aiff aifc +audio/x-gsm gsm +audio/x-mpegurl m3u +audio/x-ms-wma wma +audio/x-ms-wax wax +audio/x-pn-realaudio-plugin +audio/x-pn-realaudio ra rm ram +audio/x-realaudio ra +audio/x-scpls pls +audio/x-sd2 sd2 +audio/x-wav wav + +chemical/x-alchemy alc +chemical/x-cache cac cache +chemical/x-cache-csf csf +chemical/x-cactvs-binary cbin cascii ctab +chemical/x-cdx cdx +chemical/x-cerius cer +chemical/x-chem3d c3d +chemical/x-chemdraw chm +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-compass cpa +chemical/x-crossfire bsd +chemical/x-csml csml csm +chemical/x-ctx ctx +chemical/x-cxf cxf cef +#chemical/x-daylight-smiles smi +chemical/x-embl-dl-nucleotide emb embl +chemical/x-galactic-spc spc +chemical/x-gamess-input inp gam gamin +chemical/x-gaussian-checkpoint fch fchk +chemical/x-gaussian-cube cub +chemical/x-gaussian-input gau gjc gjf +chemical/x-gaussian-log gal +chemical/x-gcg8-sequence gcg +chemical/x-genbank gen +chemical/x-hin hin +chemical/x-isostar istr ist +chemical/x-jcamp-dx jdx dx +chemical/x-kinemage kin +chemical/x-macmolecule mcm +chemical/x-macromodel-input mmd mmod +chemical/x-mdl-molfile mol +chemical/x-mdl-rdfile rd +chemical/x-mdl-rxnfile rxn +chemical/x-mdl-sdfile sd sdf +chemical/x-mdl-tgf tgf +#chemical/x-mif mif +chemical/x-mmcif mcif +chemical/x-mol2 mol2 +chemical/x-molconn-Z b +chemical/x-mopac-graph gpt +chemical/x-mopac-input mop mopcrt mpc dat zmt +chemical/x-mopac-out moo +chemical/x-mopac-vib mvb +chemical/x-ncbi-asn1 asn +chemical/x-ncbi-asn1-ascii prt ent +chemical/x-ncbi-asn1-binary val aso +chemical/x-ncbi-asn1-spec asn +chemical/x-pdb pdb ent +chemical/x-rosdal ros +chemical/x-swissprot sw +chemical/x-vamas-iso14976 vms +chemical/x-vmd vmd +chemical/x-xtel xtel +chemical/x-xyz xyz + +image/cgm +image/g3fax +image/gif gif +image/ief ief +image/jpeg jpeg jpg jpe +image/naplps +image/pcx pcx +image/png png +image/prs.btif +image/prs.pti +image/svg+xml svg svgz +image/tiff tiff tif +image/vnd.cns.inf2 +image/vnd.djvu djvu djv +image/vnd.dwg +image/vnd.dxf +image/vnd.fastbidsheet +image/vnd.fpx +image/vnd.fst +image/vnd.fujixerox.edmics-mmr +image/vnd.fujixerox.edmics-rlc +image/vnd.mix +image/vnd.net-fpx +image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff +image/x-cmu-raster ras +image/x-coreldraw cdr +image/x-coreldrawpattern pat +image/x-coreldrawtemplate cdt +image/x-corelphotopaint cpt +image/x-icon ico +image/x-jg art +image/x-jng jng +image/x-ms-bmp bmp +image/x-photoshop psd +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd + +inode/chardevice +inode/blockdevice +inode/directory-locked +inode/directory +inode/fifo +inode/socket + +message/delivery-status +message/disposition-notification +message/external-body +message/http +message/s-http +message/news +message/partial +message/rfc822 + +model/iges igs iges +model/mesh msh mesh silo +model/vnd.dwf +model/vnd.flatland.3dml +model/vnd.gdl +model/vnd.gs-gdl +model/vnd.gtw +model/vnd.mts +model/vnd.vtu +model/vrml wrl vrml + +multipart/alternative +multipart/appledouble +multipart/byteranges +multipart/digest +multipart/encrypted +multipart/form-data +multipart/header-set +multipart/mixed +multipart/parallel +multipart/related +multipart/report +multipart/signed +multipart/voice-message + +text/calendar ics icz +text/comma-separated-values csv +text/css css +text/directory +text/english +text/enriched +text/h323 323 +text/html html htm shtml +text/iuls uls +text/mathml mml +text/parityfec +text/plain asc txt text diff pot sql +text/prs.lines.tag +text/rfc822-headers +text/richtext rtx +text/rtf rtf +text/scriptlet sct wsc +text/t140 +text/texmacs tm ts +text/tab-separated-values tsv +text/uri-list +text/vnd.abc +text/vnd.curl +text/vnd.DMClientScript +text/vnd.flatland.3dml +text/vnd.fly +text/vnd.fmi.flexstor +text/vnd.in3d.3dml +text/vnd.in3d.spot +text/vnd.IPTC.NewsML +text/vnd.IPTC.NITF +text/vnd.latex-z +text/vnd.motorola.reflex +text/vnd.ms-mediapackage +text/vnd.sun.j2me.app-descriptor jad +text/vnd.wap.si +text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-bibtex bib +text/x-boo boo +text/x-c++hdr h++ hpp hxx hh +text/x-c++src c++ cpp cxx cc +text/x-chdr h +text/x-component htc +text/x-crontab +text/x-csh csh +text/x-csrc c +text/x-dsrc d +text/x-haskell hs +text/x-java java +text/x-literate-haskell lhs +text/x-makefile +text/x-moc moc +text/x-pascal p pas +text/x-pcs-gcd gcd +text/x-perl pl pm +text/x-python py +text/x-server-parsed-html +text/x-setext etx +text/x-sh sh +text/x-tcl tcl tk +text/x-tex tex ltx sty cls +text/x-vcalendar vcs +text/x-vcard vcf + +video/dl dl +video/dv dif dv +video/fli fli +video/gl gl +video/mpeg mpeg mpg mpe +video/mp4 mp4 +video/quicktime qt mov +video/mp4v-es +video/parityfec +video/pointer +video/vnd.fvt +video/vnd.motorola.video +video/vnd.motorola.videop +video/vnd.mpegurl mxu +video/vnd.mts +video/vnd.nokia.interleaved-multimedia +video/vnd.vivo +video/x-la-asf lsf lsx +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie + +x-conference/x-cooltalk ice + +x-world/x-vrml vrm vrml wrl diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options new file mode 100644 index 0000000000..32ffd87393 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options @@ -0,0 +1,95 @@ +#### Debugging options for org.eclipse.osgi + +# Turn on general debugging for org.eclipse.osgi +org.eclipse.osgi/debug=true +# Prints out class loading debug information +org.eclipse.osgi/debug/loader=false +# Prints out event (FrameworkEvent/BundleEvent/ServiceEvent) and listener debug information +org.eclipse.osgi/debug/events=false +# Prints out OSGi service debug information (registration/getting/ungetting etc.) +org.eclipse.osgi/debug/services=false +# Prints out bundle manifest parsing debug information +org.eclipse.osgi/debug/manifest=false +# Prints out LDAP filter debug information +org.eclipse.osgi/debug/filter=false +# Prints out security (PermissionAdmin service) debug information +org.eclipse.osgi/debug/security=false +# Prints out start level service debug information +org.eclipse.osgi/debug/startlevel=true +# Prints out package admin service debug information +org.eclipse.osgi/debug/packageadmin=false +# Prints out timing information for bundle activation +org.eclipse.osgi/debug/bundleTime=false +# Debug the loading of message bundles +org.eclipse.osgi/debug/messageBundles=false + +# Eclipse adaptor options +org.eclipse.osgi/eclipseadaptor/debug = false +org.eclipse.osgi/eclipseadaptor/debug/location = false +org.eclipse.osgi/eclipseadaptor/debug/platformadmin=false +org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver=false +org.eclipse.osgi/eclipseadaptor/converter/debug = false + +### OSGi resolver options +# Turns on debugging for the resolver +org.eclipse.osgi/resolver/debug = false +# Prints out wiring information after the resolver has completed the resolve process +org.eclipse.osgi/resolver/wiring = false +# Prints out Import-Package information +org.eclipse.osgi/resolver/imports = false +# Prints out Require-Bundle information +org.eclipse.osgi/resolver/requires = false +# Prints out package grouping information form the "uses" clause +org.eclipse.osgi/resolver/grouping = false +# Prints out cycle information +org.eclipse.osgi/resolver/cycles = false +# Prints out Eclipse-GenericRequire information +org.eclipse.osgi/resolver/generics = false + +#### Profile settings +org.eclipse.osgi/profile/startup = false +org.eclipse.osgi/profile/benchmark = false +org.eclipse.osgi/profile/debug = true + +# Override the default implemenation +org.eclipse.osgi/profile/impl = org.eclipse.osgi.internal.profile.DefaultProfileLogger + +# Append all profile messages to the filename specified +org.eclipse.osgi/defaultprofile/logfilename = + +# Output all profile log messages synchronously to the jvm console. +# By default, all log messages are cached until the log buffer is +# requested. +org.eclipse.osgi/defaultprofile/logsynchronously = false + +# Specify the size of the default profile implementation log buffer. +org.eclipse.osgi/defaultprofile/buffersize = 256 + +#### Monitoring settings +# monitor class loading +org.eclipse.osgi/monitor/classes=false + +# monitor bundle activation +org.eclipse.osgi/monitor/activation=false + +# monitor resource bundle (*.properties) loading +org.eclipse.osgi/monitor/resources=false + + +#### Trace settings +# trace class loading - snapshot the execution stack when a class is loaded +org.eclipse.osgi/trace/classLoading=false + +# trace location - file in which execution traces are written +org.eclipse.osgi/trace/filename=runtime.traces + +# trace filters - Java properties file defining which classes should +# be traced (if trace/classLoading is true) +# File format: +# plugins= +# packages= +# Note that there may be many 'plugins' and 'packages' lines in one file. +org.eclipse.osgi/trace/filters=trace.properties + +# trace bundle activation - snapshot the execution stack when a bundle is activated +org.eclipse.osgi/trace/activation=false diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml new file mode 100644 index 0000000000..9793d0b47d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml @@ -0,0 +1,70 @@ + + + + + + STANDALONE + + + 2 + + + + org.wso2.carbon.ntask.core.impl.RoundRobinTaskLocationResolver + + + + + + + https://localhost:9448 + + + https://localhost:9443 + + + admin + + + admin + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/log4j.properties b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/log4j.properties new file mode 100644 index 0000000000..957603a504 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/log4j.properties @@ -0,0 +1,33 @@ +# +# Copyright (C) 2018 - 2023 Entgra (Pvt) Ltd, Inc - All Rights Reserved. +# +# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited. +# +# Licensed under the Entgra Commercial License, Version 1.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://entgra.io/licenses/entgra-commercial/1.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. +# +log4j.rootLogger=DEBUG, console, Default +#Automation file appender +log4j.appender.Default=org.apache.log4j.RollingFileAppender +log4j.appender.Default.File=target/logs/automation.log +log4j.appender.Default.Append=true +log4j.appender.Default.MaxFileSize=10MB +log4j.appender.Default.MaxBackupIndex=10 +log4j.appender.Default.layout=org.apache.log4j.PatternLayout +log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] [%t] - %m%n +#Automation console appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.Target=System.out +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%c] [%t] - %m%n +log4j.logger.io.entgra=TRACE \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/registry.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/registry.xml new file mode 100644 index 0000000000..ffe6d66224 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/registry.xml @@ -0,0 +1,109 @@ + + + + + + + + wso2registry + false + true + / + + + jdbc:h2:./target/databasetest/CARBON_TEST + + org.h2.Driver + 80 + 60000 + 5 + + + + + + + + + + + + false + + + + true + true + true + true + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/security/authenticators.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/security/authenticators.xml new file mode 100644 index 0000000000..327ac142bb --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/security/authenticators.xml @@ -0,0 +1,76 @@ + + + + + + + + + + 5 + + + + + 10 + + /carbon/admin/login.jsp + carbonServer + https://localhost:9443/samlsso + urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml new file mode 100644 index 0000000000..ac237a2b3a --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml @@ -0,0 +1,36 @@ + + + + + + + WEB-INF/web.xml + + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml new file mode 100644 index 0000000000..3288cfb01c --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml @@ -0,0 +1,62 @@ + + + + + + + bridgeservlet + Carbon Bridge Servlet + Carbon Bridge Servlet + org.wso2.carbon.tomcat.ext.servlet.DelegationServlet + + 1 + + + bridgeservlet + /* + + + + bridgeservlet + *.jsp + + + + + CharsetFilter + org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter + + requestEncoding + UTF-8 + + + + + CharsetFilter + /* + + + + 15 + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml new file mode 100644 index 0000000000..5ba201f26d --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml new file mode 100644 index 0000000000..1df2d7e53a --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/web.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/web.xml new file mode 100644 index 0000000000..765febb1ad --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/tomcat/web.xml @@ -0,0 +1,1223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + org.apache.catalina.servlets.DefaultServlet + + debug + 0 + + + sendfileSize + -1 + + + listings + false + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jsp + org.apache.jasper.servlet.JspServlet + + fork + false + + + xpoweredBy + false + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jsp + *.jsp + + + + jsp + *.jspx + + + + default + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + + + + + + + abs + audio/x-mpeg + + + ai + application/postscript + + + aif + audio/x-aiff + + + aifc + audio/x-aiff + + + aiff + audio/x-aiff + + + aim + application/x-aim + + + art + image/x-jg + + + asf + video/x-ms-asf + + + asx + video/x-ms-asf + + + au + audio/basic + + + avi + video/x-msvideo + + + avx + video/x-rad-screenplay + + + bcpio + application/x-bcpio + + + bin + application/octet-stream + + + bmp + image/bmp + + + body + text/html + + + cdf + application/x-cdf + + + cer + application/x-x509-ca-cert + + + class + application/java + + + cpio + application/x-cpio + + + csh + application/x-csh + + + css + text/css + + + dib + image/bmp + + + doc + application/msword + + + dtd + application/xml-dtd + + + dv + video/x-dv + + + dvi + application/x-dvi + + + eps + application/postscript + + + etx + text/x-setext + + + exe + application/octet-stream + + + gif + image/gif + + + gtar + application/x-gtar + + + gz + application/x-gzip + + + hdf + application/x-hdf + + + hqx + application/mac-binhex40 + + + htc + text/x-component + + + htm + text/html + + + html + text/html + + + ief + image/ief + + + jad + text/vnd.sun.j2me.app-descriptor + + + jar + application/java-archive + + + java + text/plain + + + jnlp + application/x-java-jnlp-file + + + jpe + image/jpeg + + + jpeg + image/jpeg + + + jpg + image/jpeg + + + js + application/javascript + + + jsf + text/plain + + + jspf + text/plain + + + kar + audio/x-midi + + + latex + application/x-latex + + + m3u + audio/x-mpegurl + + + mac + image/x-macpaint + + + man + application/x-troff-man + + + mathml + application/mathml+xml + + + me + application/x-troff-me + + + mid + audio/x-midi + + + midi + audio/x-midi + + + mif + application/x-mif + + + mov + video/quicktime + + + movie + video/x-sgi-movie + + + mp1 + audio/x-mpeg + + + mp2 + audio/x-mpeg + + + mp3 + audio/x-mpeg + + + mp4 + video/mp4 + + + mpa + audio/x-mpeg + + + mpe + video/mpeg + + + mpeg + video/mpeg + + + mpega + audio/x-mpeg + + + mpg + video/mpeg + + + mpv2 + video/mpeg2 + + + ms + application/x-wais-source + + + nc + application/x-netcdf + + + oda + application/oda + + + + odb + application/vnd.oasis.opendocument.database + + + + odc + application/vnd.oasis.opendocument.chart + + + + odf + application/vnd.oasis.opendocument.formula + + + + odg + application/vnd.oasis.opendocument.graphics + + + + odi + application/vnd.oasis.opendocument.image + + + + odm + application/vnd.oasis.opendocument.text-master + + + + odp + application/vnd.oasis.opendocument.presentation + + + + ods + application/vnd.oasis.opendocument.spreadsheet + + + + odt + application/vnd.oasis.opendocument.text + + + + otg + application/vnd.oasis.opendocument.graphics-template + + + + oth + application/vnd.oasis.opendocument.text-web + + + + otp + application/vnd.oasis.opendocument.presentation-template + + + + ots + application/vnd.oasis.opendocument.spreadsheet-template + + + + ott + application/vnd.oasis.opendocument.text-template + + + + ogx + application/ogg + + + ogv + video/ogg + + + oga + audio/ogg + + + ogg + audio/ogg + + + spx + audio/ogg + + + flac + audio/flac + + + anx + application/annodex + + + axa + audio/annodex + + + axv + video/annodex + + + xspf + application/xspf+xml + + + pbm + image/x-portable-bitmap + + + pct + image/pict + + + pdf + application/pdf + + + pgm + image/x-portable-graymap + + + pic + image/pict + + + pict + image/pict + + + pls + audio/x-scpls + + + png + image/png + + + pnm + image/x-portable-anymap + + + pnt + image/x-macpaint + + + ppm + image/x-portable-pixmap + + + ppt + application/vnd.ms-powerpoint + + + pps + application/vnd.ms-powerpoint + + + ps + application/postscript + + + psd + image/x-photoshop + + + qt + video/quicktime + + + qti + image/x-quicktime + + + qtif + image/x-quicktime + + + ras + image/x-cmu-raster + + + rdf + application/rdf+xml + + + rgb + image/x-rgb + + + rm + application/vnd.rn-realmedia + + + roff + application/x-troff + + + rtf + application/rtf + + + rtx + text/richtext + + + sh + application/x-sh + + + shar + application/x-shar + + + + smf + audio/x-midi + + + sit + application/x-stuffit + + + snd + audio/basic + + + src + application/x-wais-source + + + sv4cpio + application/x-sv4cpio + + + sv4crc + application/x-sv4crc + + + svg + image/svg+xml + + + svgz + image/svg+xml + + + swf + application/x-shockwave-flash + + + t + application/x-troff + + + tar + application/x-tar + + + tcl + application/x-tcl + + + tex + application/x-tex + + + texi + application/x-texinfo + + + texinfo + application/x-texinfo + + + tif + image/tiff + + + tiff + image/tiff + + + tr + application/x-troff + + + tsv + text/tab-separated-values + + + txt + text/plain + + + ulw + audio/basic + + + ustar + application/x-ustar + + + vxml + application/voicexml+xml + + + xbm + image/x-xbitmap + + + xht + application/xhtml+xml + + + xhtml + application/xhtml+xml + + + xls + application/vnd.ms-excel + + + xml + application/xml + + + xpm + image/x-xpixmap + + + xsl + application/xml + + + xslt + application/xslt+xml + + + xul + application/vnd.mozilla.xul+xml + + + xwd + image/x-xwindowdump + + + vsd + application/x-visio + + + wav + audio/x-wav + + + + wbmp + image/vnd.wap.wbmp + + + + wml + text/vnd.wap.wml + + + + wmlc + application/vnd.wap.wmlc + + + + wmls + text/vnd.wap.wmlscript + + + + wmlscriptc + application/vnd.wap.wmlscriptc + + + wmv + video/x-ms-wmv + + + wrl + x-world/x-vrml + + + wspolicy + application/wspolicy+xml + + + Z + application/x-compress + + + z + application/x-compress + + + zip + application/zip + + + + + + + + + + + + + + + + + + index.html + index.htm + index.jsp + + + \ No newline at end of file diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/user-mgt.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/user-mgt.xml new file mode 100644 index 0000000000..b754597ebc --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/carbon-home/repository/conf/user-mgt.xml @@ -0,0 +1,383 @@ + + + + + + true + admin + + admin + admin + + everyone + jdbc/WSO2CarbonDB + + + + + + + org.wso2.carbon.user.core.tenant.JDBCTenantManager + false + 100 + false + default + SHA-256 + true + true + true + false + ^[\S]{5,30}$ + Password length should be between 5 to 30 characters + + ^[\S]{5,30}$ + [a-zA-Z0-9._-|//]{3,30}$ + ^[\S]{3,30}$ + ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$ + ^[\S]{3,30}$ + true + 100 + 100 + false + false + true + , + true + + + + + + + + + + + + + + + + + + + /permission + true + true + + + + + diff --git a/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/testng.xml b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/testng.xml new file mode 100644 index 0000000000..b2db379989 --- /dev/null +++ b/components/operation-template-mgt/io.entgra.device.mgt.operation.template/src/test/resources/testng.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/components/operation-template-mgt/pom.xml b/components/operation-template-mgt/pom.xml new file mode 100644 index 0000000000..f48dc96d93 --- /dev/null +++ b/components/operation-template-mgt/pom.xml @@ -0,0 +1,40 @@ + + + + + + + org.wso2.carbon.devicemgt + carbon-devicemgt + 5.0.20-SNAPSHOT + ../../pom.xml + + + 4.0.0 + operation-template-mgt + pom + Entgra IoT - Operation Template Mgt Plugin + http://entgra.io + + + io.entgra.device.mgt.operation.template + + + diff --git a/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/pom.xml b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/pom.xml new file mode 100644 index 0000000000..6150a17198 --- /dev/null +++ b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/pom.xml @@ -0,0 +1,107 @@ + + + + + + + org.wso2.carbon.devicemgt + carbon-devicemgt + 5.0.20-SNAPSHOT + ../../../pom.xml + + + 4.0.0 + io.entgra.device.mgt.operation.template.feature + pom + Entgra IoT - Operation Template Management Feature Impl + http://entgra.io + + This feature contains the core bundles required for Operation template management functionality + + + + + org.wso2.carbon.devicemgt + io.entgra.device.mgt.operation.template + + + + + + + maven-resources-plugin + 2.6 + + + copy-resources + generate-resources + + copy-resources + + + src/main/resources + + + resources + + build.properties + p2.inf + + + + + + + + + org.wso2.maven + carbon-p2-plugin + ${carbon.p2.plugin.version} + + + p2-feature-generation + package + + p2-feature-gen + + + io.entgra.device.mgt.operation.template + ../../etc/feature.properties + + + org.wso2.carbon.p2.category.type:server + + org.eclipse.equinox.p2.type.group:true + + + + + + org.wso2.carbon.devicemgt:io.entgra.device.mgt.operation.template:${carbon.device.mgt.version} + + + + + + + + + \ No newline at end of file diff --git a/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/build.properties b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/build.properties new file mode 100644 index 0000000000..93c4b10701 --- /dev/null +++ b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/build.properties @@ -0,0 +1 @@ +custom = true \ No newline at end of file diff --git a/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/p2.inf b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/p2.inf new file mode 100644 index 0000000000..a828a69832 --- /dev/null +++ b/features/operation-template-mgt-plugin-feature/io.entgra.device.mgt.operation.template.feature/src/resources/p2.inf @@ -0,0 +1 @@ +instructions.configure = \ diff --git a/features/operation-template-mgt-plugin-feature/pom.xml b/features/operation-template-mgt-plugin-feature/pom.xml new file mode 100644 index 0000000000..a41df443a7 --- /dev/null +++ b/features/operation-template-mgt-plugin-feature/pom.xml @@ -0,0 +1,41 @@ + + + + + + + carbon-devicemgt + org.wso2.carbon.devicemgt + 5.0.20-SNAPSHOT + ../../pom.xml + + + 4.0.0 + operation-template-mgt-plugin-feature + pom + Entgra IoT - Subtype Management Feature + http://entgra.io + + + io.entgra.device.mgt.operation.template.feature + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5cc6847bdb..287cd9bbe0 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ components/task-mgt components/subtype-mgt components/tenant-mgt + components/operation-template-mgt features/device-mgt features/apimgt-extensions features/application-mgt @@ -66,6 +67,8 @@ features/task-mgt features/subtype-mgt features/tenant-mgt + features/operation-template-mgt-plugin-feature + @@ -427,6 +430,19 @@ + + + org.wso2.carbon.devicemgt + io.entgra.device.mgt.operation.template + ${carbon.device.mgt.version} + + + org.wso2.carbon.devicemgt + io.entgra.device.mgt.subtype.mgt.feature + zip + ${carbon.device.mgt.version} + + org.wso2.carbon