diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/PlatformManagementAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/PlatformManagementAPI.java
index 30679ebeb3..3721326a8d 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/PlatformManagementAPI.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/PlatformManagementAPI.java
@@ -34,6 +34,7 @@ import org.wso2.carbon.device.application.mgt.common.Platform;
import javax.validation.constraints.Size;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -82,6 +83,12 @@ import javax.ws.rs.core.Response;
description = "Update a platform",
key = "perm:platform:update",
permissions = {"/device-mgt/platform/update"}
+ ),
+ @org.wso2.carbon.apimgt.annotations.api.Scope(
+ name = "Remove a platform",
+ description = "Remove a platform",
+ key = "perm:platform:remove",
+ permissions = {"/device-mgt/platform/remove"}
)
}
)
@@ -251,4 +258,43 @@ public interface PlatformManagementAPI {
String identifier
);
+ @DELETE
+ @Path("/{identifier}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @ApiOperation(
+ consumes = MediaType.APPLICATION_JSON,
+ produces = MediaType.APPLICATION_JSON,
+ httpMethod = "DELETE",
+ value = "Remove Platform",
+ notes = "This will remove the relevant platform.",
+ tags = "Platform Management",
+ extensions = {
+ @Extension(properties = {
+ @ExtensionProperty(name = SCOPE, value = "perm:platform:remove")
+ })
+ }
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully updated the platform"),
+ @ApiResponse(
+ code = 400,
+ message = "Bad Request. \n Invalid request parameters passed."),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. \n Error occurred while getting the platform list.",
+ response = ErrorResponse.class)
+ })
+ Response removePlatform(
+ @ApiParam(
+ name = "identifier",
+ required = true)
+ @PathParam("identifier")
+ @Size(max = 45)
+ String identifier
+ );
+
}
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/impl/PlatformManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/impl/PlatformManagementAPIImpl.java
index b708b388e2..9db2273ce4 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/impl/PlatformManagementAPIImpl.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/java/org/wso2/carbon/device/application/mgt/api/services/impl/PlatformManagementAPIImpl.java
@@ -29,6 +29,7 @@ import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementD
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.Size;
+import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -102,8 +103,12 @@ public class PlatformManagementAPIImpl implements PlatformManagementAPI {
Platform platform = APIUtil.getPlatformManager().getPlatform(tenantId, id);
return Response.status(Response.Status.OK).entity(platform).build();
} catch (PlatformManagementDAOException e) {
+ log.error("Error while trying the get the platform with the identifier : " + id + " for the tenant :"
+ + tenantId, e);
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
} catch (PlatformManagementException e) {
+ log.error("Error while trying the get the platform with the identifier : " + id + " for the tenant :"
+ + tenantId, e);
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
}
}
@@ -118,14 +123,17 @@ public class PlatformManagementAPIImpl implements PlatformManagementAPI {
APIUtil.getPlatformManager().register(tenantId, platform);
return Response.status(Response.Status.CREATED).build();
} else {
- return APIUtil.getResponse("Invxalid payload! Platform ID and names are mandatory fields!",
- Response.Status.BAD_REQUEST);
+ return APIUtil
+ .getResponse("Invalid payload! Platform 'identifier' and 'name' are mandatory fields!",
+ Response.Status.BAD_REQUEST);
}
} else {
return APIUtil.getResponse("Invalid payload! Platform needs to be passed as payload!",
Response.Status.BAD_REQUEST);
}
} catch (PlatformManagementException e) {
+ log.error("Platform Management Exception while trying to add the platform with identifier : " + platform
+ .getIdentifier() + " for the tenant : " + tenantId, e);
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}
@@ -143,4 +151,19 @@ public class PlatformManagementAPIImpl implements PlatformManagementAPI {
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
}
}
+
+ @DELETE
+ @Path("/{identifier}")
+ @Override
+ public Response removePlatform(@PathParam("identifier") @Size(max = 45) String id) {
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
+ try {
+ APIUtil.getPlatformManager().unregister(tenantId, id, false);
+ return Response.status(Response.Status.OK).build();
+ } catch (PlatformManagementException e) {
+ log.error("Platform Management Exception while trying to un-register the platform with the identifier : "
+ + id + " for the tenant : " + tenantId, e);
+ return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ }
}
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/webapp/META-INF/permissions.xml b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/webapp/META-INF/permissions.xml
index 4b171e385e..0a4e39c82b 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/webapp/META-INF/permissions.xml
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.api/src/main/webapp/META-INF/permissions.xml
@@ -63,6 +63,10 @@
/application-mgt/platforms/*
PUT
-
-
+
+ Remove Platform
+ /device-mgt/platform/remove
+ /application-mgt/platforms/*
+ DELETE
+
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/PlatformDAO.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/PlatformDAO.java
index 55e95ed17e..7311d74025 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/PlatformDAO.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/PlatformDAO.java
@@ -32,7 +32,7 @@ public interface PlatformDAO {
void update(int tenantId, String oldPlatformIdentifier, Platform platform) throws PlatformManagementDAOException;
- void unregister(int tenantId, String platformIdentifier) throws PlatformManagementDAOException;
+ void unregister(int tenantId, String platformIdentifier, boolean isFileBased) throws PlatformManagementDAOException;
void addMapping(int tenantId, List platformIdentifiers) throws PlatformManagementDAOException;
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java
index f9ce7d288d..aebcd3e22c 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java
@@ -20,17 +20,19 @@ package org.wso2.carbon.device.application.mgt.core.dao.common;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.json.JSONArray;
import org.json.JSONException;
import org.wso2.carbon.device.application.mgt.common.Application;
-import org.wso2.carbon.device.application.mgt.common.Platform;
import org.wso2.carbon.device.application.mgt.common.Category;
+import org.wso2.carbon.device.application.mgt.common.Platform;
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class Util {
@@ -93,6 +95,4 @@ public class Util {
}
}
}
-
-
-}
\ No newline at end of file
+}
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/platform/GenericPlatformDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/platform/GenericPlatformDAOImpl.java
index 588b29f920..7fad43a452 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/platform/GenericPlatformDAOImpl.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/platform/GenericPlatformDAOImpl.java
@@ -24,6 +24,7 @@ import org.wso2.carbon.device.application.mgt.common.Platform;
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
import org.wso2.carbon.device.application.mgt.common.exception.TransactionManagementException;
import org.wso2.carbon.device.application.mgt.core.dao.PlatformDAO;
+import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl;
import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementDAOException;
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
@@ -44,15 +45,15 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
@Override
public int register(int tenantId, Platform platform) throws PlatformManagementDAOException {
+ PreparedStatement preparedStatement = null;
try {
- ConnectionManagerUtil.beginTransaction();
int platformId = getPlatformId(tenantId, platform.getIdentifier());
if (platformId == -1) {
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
if (!platform.isFileBased()) {
String insertToPlatform = "INSERT INTO APPM_PLATFORM (IDENTIFIER, TENANT_ID, NAME, FILE_BASED, "
+ "DESCRIPTION, IS_SHARED, ICON_NAME)" + " VALUES (?, ?, ?, ?, ?, ?, ?)";
- PreparedStatement preparedStatement = connection.prepareStatement(insertToPlatform);
+ preparedStatement = connection.prepareStatement(insertToPlatform);
preparedStatement.setString(1, platform.getIdentifier());
preparedStatement.setInt(2, tenantId);
preparedStatement.setString(3, platform.getName());
@@ -80,7 +81,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
} else {
String insertToPlatform =
"INSERT INTO APPM_PLATFORM (IDENTIFIER, TENANT_ID, FILE_BASED)" + " VALUES (?, ?, ?)";
- PreparedStatement preparedStatement = connection.prepareStatement(insertToPlatform);
+ preparedStatement = connection.prepareStatement(insertToPlatform);
preparedStatement.setString(1, platform.getIdentifier());
preparedStatement.setInt(2, tenantId);
preparedStatement.setBoolean(3, true);
@@ -89,35 +90,24 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
if (platformId == -1) {
platformId = getPlatformId(tenantId, platform.getIdentifier());
}
- ConnectionManagerUtil.commitTransaction();
return platformId;
} else {
if (!platform.isFileBased()) {
- ConnectionManagerUtil.rollbackTransaction();
- throw new PlatformManagementDAOException("Platform - " + platform.getIdentifier()
- + " is already registered for tenant - " + tenantId);
+ throw new PlatformManagementDAOException(
+ "Platform - " + platform.getIdentifier() + " is already registered for tenant - "
+ + tenantId);
} else {
return platformId;
}
}
} catch (SQLException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
- } catch (PlatformManagementDAOException ex) {
- ConnectionManagerUtil.rollbackTransaction();
- throw ex;
} catch (DBConnectionException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException(
"Unable to obtain the connection while trying to register the platform - " + platform
.getIdentifier() + " for tenant - " + tenantId, e);
- } catch (TransactionManagementException e) {
- ConnectionManagerUtil.rollbackTransaction();
- throw new PlatformManagementDAOException(
- "Error occurred while performing the transaction on the database " + "for adding the platform - "
- + platform.getIdentifier() + " , tenant domain - " + tenantId);
} finally {
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
@@ -126,19 +116,39 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
PlatformManagementDAOException {
PreparedStatement preparedStatement = null;
try {
- ConnectionManagerUtil.beginTransaction();
int platformId = getPlatformId(tenantId, oldPlatformIdentifier);
+ boolean isIdentifierNull = platform.getIdentifier() == null;
+ boolean isNameNull = platform.getName() == null;
+
if (platformId != -1) {
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
if (!platform.isFileBased()) {
- String insertToPlatform = "UPDATE APPM_PLATFORM SET IDENTIFIER = ?, NAME =?, DESCRIPTION=?, "
- + "IS_SHARED=?, ICON_NAME=? WHERE ID = ?";
+ String insertToPlatform = "UPDATE APPM_PLATFORM SET DESCRIPTION=?, IS_SHARED=?, ICON_NAME=?";
+ if (!isIdentifierNull) {
+ insertToPlatform += ",IDENTIFIER = ? ";
+ }
+ if (!isNameNull) {
+ insertToPlatform += ", NAME =?";
+ }
+ insertToPlatform += " WHERE ID = ?";
preparedStatement = connection.prepareStatement(insertToPlatform);
- preparedStatement.setString(1, platform.getIdentifier());
- preparedStatement.setString(2, platform.getName());
- preparedStatement.setString(3, platform.getDescription());
- preparedStatement.setBoolean(4, platform.isShared());
- preparedStatement.setString(5, platform.getIconName());
+ preparedStatement.setString(1, platform.getDescription());
+ preparedStatement.setBoolean(2, platform.isShared());
+ preparedStatement.setString(3, platform.getIconName());
+
+ if (!isIdentifierNull && !isNameNull) {
+ preparedStatement.setString(4, platform.getIdentifier());
+ preparedStatement.setString(5, platform.getName());
+ preparedStatement.setInt(6, platformId);
+ } else if (isIdentifierNull && !isNameNull) {
+ preparedStatement.setString(4, platform.getName());
+ preparedStatement.setInt(5, platformId);
+ } else if (!isIdentifierNull) {
+ preparedStatement.setString(4, platform.getIdentifier());
+ preparedStatement.setInt(5, platformId);
+ } else {
+ preparedStatement.setInt(4, platformId);
+ }
preparedStatement.execute();
platformId = getPlatformId(tenantId, platform.getIdentifier());
@@ -150,13 +160,16 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
String insertPlatformProps =
"INSERT INTO APPM_PLATFORM_PROPERTIES (PLATFORM_ID, PROP_NAME, OPTIONAL,"
+ " DEFAULT_VALUE) VALUES ( ? , ?, ? , ?)";
- for (Platform.Property property : platform.getProperties()) {
- preparedStatement = connection.prepareStatement(insertPlatformProps);
- preparedStatement.setInt(1, platformId);
- preparedStatement.setString(2, property.getName());
- preparedStatement.setBoolean(3, property.isOptional());
- preparedStatement.setString(4, property.getDefaultValue());
- preparedStatement.execute();
+
+ if (platform.getProperties() != null) {
+ for (Platform.Property property : platform.getProperties()) {
+ preparedStatement = connection.prepareStatement(insertPlatformProps);
+ preparedStatement.setInt(1, platformId);
+ preparedStatement.setString(2, property.getName());
+ preparedStatement.setBoolean(3, property.isOptional());
+ preparedStatement.setString(4, property.getDefaultValue());
+ preparedStatement.execute();
+ }
}
} else {
String insertToPlatform = "UPDATE APPM_PLATFORM SET IDENTIFIER = ? WHERE ID = ?";
@@ -164,31 +177,19 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
preparedStatement.setInt(1, platformId);
preparedStatement.execute();
}
- ConnectionManagerUtil.commitTransaction();
} else {
throw new PlatformManagementDAOException(
"Cannot find any platform that was registered with identifier - " + platform.getIdentifier()
+ " for tenant - " + tenantId);
}
} catch (SQLException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
- } catch (PlatformManagementDAOException ex) {
- ConnectionManagerUtil.rollbackTransaction();
- throw ex;
} catch (DBConnectionException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException(
"Unable to obtain the connection while trying to register the platform - " + platform
.getIdentifier() + " for tenant - " + tenantId, e);
- } catch (TransactionManagementException e) {
- ConnectionManagerUtil.rollbackTransaction();
- throw new PlatformManagementDAOException(
- "Error occurred while performing the transaction on the database " + "for adding the platform - "
- + platform.getIdentifier() + " , tenant domain - " + tenantId);
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, null);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
@@ -198,7 +199,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
String query = "SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = TRUE AND "
+ "IDENTIFIER=?)";
try {
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, tenantId);
preparedStatement.setString(2, platformIdentifier);
@@ -213,47 +214,46 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
} catch (SQLException e) {
throw new PlatformManagementDAOException("Error in executing the query - " + query, e);
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, resultSet);
+ Util.cleanupResources(preparedStatement, resultSet);
}
}
@Override
- public void unregister(int tenantId, String platformIdenfier) throws PlatformManagementDAOException {
+ public void unregister(int tenantId, String platformIdenfier, boolean isFileBased) throws
+ PlatformManagementDAOException {
PreparedStatement preparedStatement = null;
try {
- ConnectionManagerUtil.beginTransaction();
- int platformId = getPlatformId(tenantId, platformIdenfier);
- if (platformId != -1) {
- Connection connection = ConnectionManagerUtil.getConnection();
- String deletePlatform = "DELETE FROM APPM_PLATFORM WHERE ID = ?";
- preparedStatement = connection.prepareStatement(deletePlatform);
- preparedStatement.setInt(1, platformId);
- preparedStatement.execute();
- ConnectionManagerUtil.commitTransaction();
+ Platform platform = getPlatform(tenantId, platformIdenfier);
+
+ if (platform != null) {
+ if (isFileBased == platform.isFileBased()) {
+ Connection connection = this.getConnection();
+ String deletePlatform = "DELETE FROM APPM_PLATFORM WHERE ID = ?";
+ preparedStatement = connection.prepareStatement(deletePlatform);
+ preparedStatement.setInt(1, platform.getId());
+ preparedStatement.execute();
+ } else {
+ if (isFileBased) {
+ throw new PlatformManagementDAOException("Platform with identifier - " + platformIdenfier
+ + " is not a file based platform. Try to remove that using PlatformManagement APIs");
+ } else {
+ throw new PlatformManagementDAOException("Platform with identifier - " + platformIdenfier
+ + " is a file based platform. Try to remove that by un-deploying the relevant file.");
+ }
+ }
} else {
- throw new PlatformManagementDAOException("Platform identifier - " + platformIdenfier
- + " is already unregistered registered for tenant - " + tenantId);
+ throw new PlatformManagementDAOException(
+ "Platform identifier - " + platformIdenfier + " is not registered for tenant - " + tenantId);
}
- } catch (TransactionManagementException e) {
- ConnectionManagerUtil.rollbackTransaction();
- throw new PlatformManagementDAOException(
- "Unable to start the transaction while trying to register the platform - " + platformIdenfier
- + " for tenant - " + tenantId, e);
} catch (DBConnectionException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException(
"Unable to obtain the connection while trying to register the platform - " + platformIdenfier
+ " for tenant - " + tenantId, e);
} catch (SQLException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
- } catch (PlatformManagementDAOException ex) {
- ConnectionManagerUtil.rollbackTransaction();
- throw ex;
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, null);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
@@ -261,11 +261,10 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
String insertMapping = "INSERT INTO APPM_PLATFORM_TENANT_MAPPING(TENANT_ID, PLATFORM_ID) VALUES (?, ?)";
PreparedStatement preparedStatement = null;
try {
- ConnectionManagerUtil.beginTransaction();
for (String platformIdentifier : platformIdentifiers) {
if (getTenantPlatformMapping(tenantId, platformIdentifier) == -1) {
int platformId = getPlatformId(tenantId, platformIdentifier);
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(insertMapping);
preparedStatement.setInt(1, tenantId);
preparedStatement.setInt(2, platformId);
@@ -275,40 +274,30 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
+ " - " + tenantId);
}
}
- ConnectionManagerUtil.commitTransaction();
- } catch (TransactionManagementException e) {
- ConnectionManagerUtil.rollbackTransaction();
- throw new PlatformManagementDAOException(
- "Error occured while trying to add the mapping of platform - " + platformIdentifiers.toString()
- + " for tenant - " + tenantId, e);
} catch (DBConnectionException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error occurred when getting the connection for the database. ",
e);
} catch (SQLException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error occured while executing the SQL query - " + insertMapping,
e);
- } catch (PlatformManagementDAOException ex) {
- ConnectionManagerUtil.rollbackTransaction();
- throw ex;
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, null);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
private int getTenantPlatformMapping(int tenantId, String platformIdentifier) throws
PlatformManagementDAOException {
+ PreparedStatement preparedStatement = null;
+ ResultSet resultSet = null;
String getMapping = "SELECT MAPPING.ID as ID FROM (SELECT ID, PLATFORM_ID FROM APPM_PLATFORM_TENANT_MAPPING "
+ "WHERE TENANT_ID=?) MAPPING JOIN (SELECT ID FROM APPM_PLATFORM WHERE APPM_PLATFORM.IDENTIFIER=?) "
+ "PLATFORM ON MAPPING.PLATFORM_ID=PLATFORM.ID";
try {
- Connection connection = ConnectionManagerUtil.getConnection();
- PreparedStatement preparedStatement = connection.prepareStatement(getMapping);
+ Connection connection = this.getConnection();
+ preparedStatement = connection.prepareStatement(getMapping);
preparedStatement.setInt(1, tenantId);
preparedStatement.setString(2, platformIdentifier);
- ResultSet resultSet = preparedStatement.executeQuery();
+ resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
return resultSet.getInt("ID");
}
@@ -319,6 +308,8 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
e);
} catch (SQLException e) {
throw new PlatformManagementDAOException("Error occured while executing the SQL query - " + getMapping, e);
+ } finally {
+ Util.cleanupResources(preparedStatement, resultSet);
}
}
@@ -327,32 +318,24 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
String deleteMapping = "DELETE FROM APPM_PLATFORM_TENANT_MAPPING WHERE ID = ?";
PreparedStatement preparedStatement = null;
try {
- ConnectionManagerUtil.beginTransaction();
int mappingId = getTenantPlatformMapping(tenantId, platformIdentifier);
if (mappingId != -1) {
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(deleteMapping);
preparedStatement.setInt(1, mappingId);
preparedStatement.execute();
- ConnectionManagerUtil.commitTransaction();
} else {
throw new PlatformManagementDAOException(
"Platform - " + platformIdentifier + " is already unassigned for tenant - " + tenantId);
}
- } catch (TransactionManagementException | DBConnectionException e) {
- ConnectionManagerUtil.rollbackTransaction();
+ } catch (DBConnectionException e) {
throw new PlatformManagementDAOException(
"Error occurred while unassigning the platform - " + platformIdentifier + " for tenant - "
+ tenantId);
} catch (SQLException e) {
- ConnectionManagerUtil.rollbackTransaction();
throw new PlatformManagementDAOException("Error occurred while executing the query - " + deleteMapping);
- } catch (PlatformManagementDAOException ex) {
- ConnectionManagerUtil.rollbackTransaction();
- throw ex;
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, null);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
@@ -362,21 +345,19 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
int platformId = getPlatformId(MultitenantConstants.SUPER_TENANT_ID, platformIdentifier);
String getMapping = "DELETE FROM APPM_PLATFORM_TENANT_MAPPING WHERE TENANT_ID != ? AND PLATFORM_ID=?";
try {
- ConnectionManagerUtil.openConnection();
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(getMapping);
preparedStatement.setInt(1, MultitenantConstants.SUPER_TENANT_ID);
preparedStatement.setInt(2, platformId);
preparedStatement.execute();
} catch (DBConnectionException e) {
throw new PlatformManagementDAOException(
- "Error occurred while obtaining the connection to get the existing " + "Tenant - Platform Mapping.",
- e);
+ "Error occurred while obtaining the connection to remove existing " + "Tenant - Platform Mapping"
+ + " for the platform : " + platformIdentifier, e);
} catch (SQLException e) {
throw new PlatformManagementDAOException("Error occurred while executing the SQL query - " + getMapping, e);
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, null);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, null);
}
}
@@ -394,7 +375,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
+ "IS_SHARED = TRUE AND FILE_BASED = FALSE) PLATFORM LEFT JOIN APPM_PLATFORM_TENANT_MAPPING "
+ "MAPPING ON PLATFORM.ID = MAPPING.PLATFORM_ID";
try {
- Connection connection = ConnectionManagerUtil.openConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(selectQuery);
preparedStatement.setInt(1, tenantId);
resultSet = preparedStatement.executeQuery();
@@ -427,8 +408,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
} catch (SQLException e) {
throw new PlatformManagementDAOException("Error occurred when executing query - " + selectQuery, e);
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement,resultSet);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement,resultSet);
}
}
@@ -439,8 +419,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
"OR (IS_SHARED = TRUE AND IDENTIFIER=?) AND FILE_BASED = FALSE ) PLATFORM " +
"LEFT JOIN APPM_PLATFORM_PROPERTIES PROPS ON PLATFORM.ID = PROPS.PLATFORM_ID";
try {
- ConnectionManagerUtil.openConnection();
- Connection connection = ConnectionManagerUtil.getConnection();
+ Connection connection = this.getConnection();
preparedStatement = connection.prepareStatement(platformQuery);
preparedStatement.setString(1, tenantDomain);
preparedStatement.setString(2, platformIdentifier);
@@ -476,8 +455,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
} catch (SQLException e) {
throw new PlatformManagementDAOException("Error in executing the query - " + platformQuery, e);
} finally {
- ConnectionManagerUtil.cleanupResources(preparedStatement, resultSet);
- ConnectionManagerUtil.closeConnection();
+ Util.cleanupResources(preparedStatement, resultSet);
}
}
@@ -518,7 +496,7 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
} catch (DBConnectionException e) {
throw new PlatformManagementDAOException("Error occurred while obtaining the DB connection.", e);
} finally {
- ConnectionManagerUtil.cleanupResources(stmt, rs);
+ Util.cleanupResources(stmt, rs);
}
}
}
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/PlatformManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/PlatformManagerImpl.java
index 4b1bdb273c..2e4551eb86 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/PlatformManagerImpl.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/PlatformManagerImpl.java
@@ -20,10 +20,14 @@ package org.wso2.carbon.device.application.mgt.core.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.application.mgt.common.Platform;
+import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
+import org.wso2.carbon.device.application.mgt.common.exception.TransactionManagementException;
import org.wso2.carbon.device.application.mgt.common.services.PlatformManager;
import org.wso2.carbon.device.application.mgt.core.dao.common.DAOFactory;
+import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementDAOException;
import org.wso2.carbon.device.application.mgt.core.internal.DataHolder;
+import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
import org.wso2.carbon.user.api.Tenant;
import org.wso2.carbon.user.api.TenantManager;
import org.wso2.carbon.user.api.UserStoreException;
@@ -47,25 +51,49 @@ public class PlatformManagerImpl implements PlatformManager {
@Override
public void initialize(int tenantId) throws PlatformManagementException {
- List platforms = DAOFactory.getPlatformDAO().getPlatforms(tenantId);
- List platformIdentifiers = new ArrayList<>();
- for (Platform platform : platforms) {
- if (!platform.isEnabled() & platform.isDefaultTenantMapping()) {
- platformIdentifiers.add(platform.getIdentifier());
+ try {
+ ConnectionManagerUtil.beginTransaction();
+ List platforms = DAOFactory.getPlatformDAO().getPlatforms(tenantId);
+ List platformIdentifiers = new ArrayList<>();
+ for (Platform platform : platforms) {
+ if (!platform.isEnabled() & platform.isDefaultTenantMapping()) {
+ platformIdentifiers.add(platform.getIdentifier());
+ }
}
+ DAOFactory.getPlatformDAO().addMapping(tenantId, platformIdentifiers);
+ ConnectionManagerUtil.commitTransaction();
+ } catch (TransactionManagementException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Transaction Management Exception while initializing the " + "platforms for the tenant : "
+ + tenantId, e);
+ } catch (DBConnectionException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while initializing the " + "platforms for the tenant : " + tenantId,
+ e);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
- addMapping(tenantId, platformIdentifiers);
}
@Override
public List getPlatforms(int tenantId) throws PlatformManagementException {
+ int platformIndex = 0;
+ List platforms;
if (log.isDebugEnabled()) {
log.debug("Request for getting platforms received for the tenant ID " + tenantId + " at "
+ "PlatformManager level");
}
- List platforms = DAOFactory.getPlatformDAO().getPlatforms(tenantId);
- int platformIndex = 0;
-
+ try {
+ ConnectionManagerUtil.openConnection();
+ platforms = DAOFactory.getPlatformDAO().getPlatforms(tenantId);
+ } catch (DBConnectionException e) {
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while getting the platforms for the tenant : " + tenantId, e);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
+ }
if (log.isDebugEnabled()) {
log.debug("Number of platforms received from DAO layer is " + platforms.size() + " for the tenant "
+ tenantId);
@@ -90,8 +118,7 @@ public class PlatformManagerImpl implements PlatformManager {
platformIndex++;
}
if (log.isDebugEnabled()) {
- log.debug("Number of effective platforms for the tenant " + tenantId
- + " : " + platforms.size());
+ log.debug("Number of effective platforms for the tenant " + tenantId + " : " + platforms.size());
}
return platforms;
}
@@ -100,15 +127,24 @@ public class PlatformManagerImpl implements PlatformManager {
public Platform getPlatform(int tenantId, String identifier) throws PlatformManagementException {
Platform platform = getPlatformFromInMemory(tenantId, identifier);
if (platform == null) {
- platform = DAOFactory.getPlatformDAO().getPlatform(tenantId, identifier);
- if (platform != null) {
- return platform;
+ try {
+ ConnectionManagerUtil.openConnection();
+ platform = DAOFactory.getPlatformDAO().getPlatform(tenantId, identifier);
+ if (platform != null) {
+ return platform;
+ }
+ } catch (DBConnectionException e) {
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to get the " + "platform with the id :" + identifier
+ + " for the tenant : " + tenantId, e);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
} else {
return new Platform(platform);
}
- throw new PlatformManagementException("No platform was found for tenant - " + tenantId +
- " with Platform identifier - " + identifier);
+ throw new PlatformManagementException(
+ "No platform was found for tenant - " + tenantId + " with platform identifier - " + identifier);
}
private Platform getPlatformFromInMemory(int tenantId, String identifier) {
@@ -138,112 +174,212 @@ public class PlatformManagerImpl implements PlatformManager {
"Platform sharing is a restricted operation, therefore Platform - " + platform.getIdentifier()
+ " cannot be shared by the tenant domain - " + tenantId);
}
- int platformId = DAOFactory.getPlatformDAO().register(tenantId, platform);
- if (platform.isFileBased()) {
- platform.setId(platformId);
- Map tenantPlatforms = this.inMemoryStore.get(tenantId);
- if (tenantPlatforms == null) {
- tenantPlatforms = new HashMap<>();
- this.inMemoryStore.put(tenantId, tenantPlatforms);
- }
- if (tenantPlatforms.get(platform.getIdentifier()) == null) {
- tenantPlatforms.put(platform.getIdentifier(), platform);
- } else {
- throw new PlatformManagementException(
- "Platform - " + platform.getIdentifier() + " is already registered!");
+ try {
+ ConnectionManagerUtil.beginTransaction();
+ int platformId = DAOFactory.getPlatformDAO().register(tenantId, platform);
+ if (platform.isFileBased()) {
+ platform.setId(platformId);
+ Map tenantPlatforms = this.inMemoryStore.get(tenantId);
+ if (tenantPlatforms == null) {
+ tenantPlatforms = new HashMap<>();
+ this.inMemoryStore.put(tenantId, tenantPlatforms);
+ }
+ if (tenantPlatforms.get(platform.getIdentifier()) == null) {
+ tenantPlatforms.put(platform.getIdentifier(), platform);
+ } else {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementException(
+ "Platform - " + platform.getIdentifier() + " is already registered!");
+ }
}
- }
- if (platform.isDefaultTenantMapping()) {
- try {
- if (platform.isShared()) {
- TenantManager tenantManager = DataHolder.getInstance().getRealmService().getTenantManager();
- Tenant[] tenants = tenantManager.getAllTenants();
- for (Tenant tenant : tenants) {
- addMapping(tenant.getId(), platform.getIdentifier());
+ if (platform.isDefaultTenantMapping()) {
+ try {
+ if (platform.isShared()) {
+ TenantManager tenantManager = DataHolder.getInstance().getRealmService().getTenantManager();
+ Tenant[] tenants = tenantManager.getAllTenants();
+ for (Tenant tenant : tenants) {
+ DAOFactory.getPlatformDAO()
+ .addMapping(tenant.getId(), getListOfString(platform.getIdentifier()));
+ }
}
+ DAOFactory.getPlatformDAO().addMapping(tenantId, getListOfString(platform.getIdentifier()));
+ } catch (UserStoreException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementException("Error occurred while assigning the platforms for tenants!",
+ e);
}
- addMapping(tenantId, platform.getIdentifier());
- } catch (UserStoreException e) {
- throw new PlatformManagementException("Error occured while assigning the platforms for tenants!", e);
}
+ ConnectionManagerUtil.commitTransaction();
+ } catch (TransactionManagementException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Transaction Management Exception while trying to register a " + "platform with id " + platform
+ .getIdentifier() + " for tenant " + tenantId);
+ } catch (DBConnectionException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to register a " + "platform with id " + platform
+ .getIdentifier() + " for tenant " + tenantId);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
}
@Override
- public void update(int tenantId, String oldPlatformIdentifier, Platform platform)
- throws PlatformManagementException {
+ public void update(int tenantId, String oldPlatformIdentifier, Platform platform) throws
+ PlatformManagementException {
if (platform.isShared() && tenantId != MultitenantConstants.SUPER_TENANT_ID) {
throw new PlatformManagementException(
"Platform sharing is a restricted operation, therefore Platform - " + platform.getIdentifier()
+ " cannot be shared by the tenant domain - " + tenantId);
}
Platform oldPlatform;
- if (platform.isFileBased()) {
- Map tenantPlatforms = this.inMemoryStore.get(tenantId);
- if (tenantPlatforms == null) {
+
+ if (platform.getIdentifier() != null && !platform.getIdentifier().equals(oldPlatformIdentifier)) {
+ try {
+ ConnectionManagerUtil.openConnection();
+ Platform existingPlatform = DAOFactory.getPlatformDAO().getPlatform(tenantId, platform.getIdentifier());
+
+ if (existingPlatform != null) {
+ throw new PlatformManagementException(
+ "Cannot update the identifier of the platform from '" + oldPlatformIdentifier + "' to '"
+ + platform.getIdentifier() + "'. Another platform exists "
+ + "already with the identifier '" + platform.getIdentifier() + "' for the tenant : "
+ + tenantId);
+ }
+ } catch (DBConnectionException e) {
throw new PlatformManagementException(
- "No platforms registered for the tenant - " + tenantId + " with platform identifier - "
- + platform.getIdentifier());
+ "Database Connection Exception while trying to update the " + "platform for the tenant : "
+ + tenantId, e);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
- oldPlatform = tenantPlatforms.get(oldPlatformIdentifier);
- if (oldPlatform == null) {
- throw new PlatformManagementException(
- "No platforms registered for the tenant - " + tenantId + " with platform identifier - "
- + platform.getIdentifier());
+ }
+ try {
+ if (platform.isFileBased()) {
+ Map tenantPlatforms = this.inMemoryStore.get(tenantId);
+ if (tenantPlatforms == null) {
+ throw new PlatformManagementException(
+ "No platforms registered for the tenant - " + tenantId + " with platform identifier - "
+ + platform.getIdentifier());
+ }
+ oldPlatform = tenantPlatforms.get(oldPlatformIdentifier);
+ if (oldPlatform == null) {
+ throw new PlatformManagementException(
+ "No platforms registered for the tenant - " + tenantId + " with platform identifier - "
+ + platform.getIdentifier());
+ } else {
+ ConnectionManagerUtil.beginTransaction();
+ DAOFactory.getPlatformDAO().update(tenantId, oldPlatformIdentifier, platform);
+ platform.setId(oldPlatform.getId());
+ tenantPlatforms.put(platform.getIdentifier(), platform);
+ }
} else {
+ ConnectionManagerUtil.beginTransaction();
+ oldPlatform = DAOFactory.getPlatformDAO().getPlatform(tenantId, oldPlatformIdentifier);
DAOFactory.getPlatformDAO().update(tenantId, oldPlatformIdentifier, platform);
- platform.setId(oldPlatform.getId());
- tenantPlatforms.put(platform.getIdentifier(), platform);
}
- } else {
- oldPlatform = DAOFactory.getPlatformDAO().getPlatform(tenantId, oldPlatformIdentifier);
- DAOFactory.getPlatformDAO().update(tenantId, oldPlatformIdentifier, platform);
- }
- if (platform.isDefaultTenantMapping() && !oldPlatform.isDefaultTenantMapping()) {
- try {
- if (platform.isShared() && !oldPlatform.isShared()) {
- TenantManager tenantManager = DataHolder.getInstance().getRealmService().getTenantManager();
- Tenant[] tenants = tenantManager.getAllTenants();
- for (Tenant tenant : tenants) {
- addMapping(tenant.getId(), platform.getIdentifier());
+ if (platform.isDefaultTenantMapping() && !oldPlatform.isDefaultTenantMapping()) {
+ try {
+ if (platform.isShared() && !oldPlatform.isShared()) {
+ TenantManager tenantManager = DataHolder.getInstance().getRealmService().getTenantManager();
+ Tenant[] tenants = tenantManager.getAllTenants();
+ for (Tenant tenant : tenants) {
+ DAOFactory.getPlatformDAO()
+ .addMapping(tenant.getId(), getListOfString(platform.getIdentifier()));
+
+ }
}
+ DAOFactory.getPlatformDAO().addMapping(tenantId, getListOfString(platform.getIdentifier()));
+ } catch (UserStoreException e) {
+ throw new PlatformManagementException("Error occurred while assigning the platforms for tenants!",
+ e);
}
- addMapping(tenantId, platform.getIdentifier());
- } catch (UserStoreException e) {
- throw new PlatformManagementException("Error occurred while assigning the platforms for tenants!", e);
}
+ if (!platform.isShared() && oldPlatform.isShared()) {
+ DAOFactory.getPlatformDAO().removeMappingTenants(platform.getIdentifier());
+ }
+ ConnectionManagerUtil.commitTransaction();
+ } catch (TransactionManagementException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Transaction Management Exception while trying to update " + "platform : " + oldPlatformIdentifier
+ + " of tenant :" + tenantId);
+ } catch (DBConnectionException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to update " + "platform : " + oldPlatformIdentifier
+ + " of tenant :" + tenantId);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
- if (!platform.isShared() && oldPlatform.isShared()) {
- DAOFactory.getPlatformDAO().removeMappingTenants(platform.getIdentifier());
- }
+ }
+
+ private List getListOfString(String platformIdentifier) {
+ List identifiers = new ArrayList<>();
+ identifiers.add(platformIdentifier);
+ return identifiers;
}
@Override
- public void unregister(int tenantId, String identifier, boolean isFileBased) throws
- PlatformManagementException {
- if (isFileBased) {
- Map tenantPlatforms = this.inMemoryStore.get(tenantId);
- if (tenantPlatforms != null) {
- this.inMemoryStore.remove(identifier);
+ public void unregister(int tenantId, String identifier, boolean isFileBased) throws PlatformManagementException {
+ try {
+ ConnectionManagerUtil.beginTransaction();
+ DAOFactory.getPlatformDAO().unregister(tenantId, identifier, isFileBased);
+
+ if (isFileBased) {
+ Map tenantPlatforms = this.inMemoryStore.get(tenantId);
+ if (tenantPlatforms != null) {
+ tenantPlatforms.remove(identifier);
+ }
}
+ ConnectionManagerUtil.commitTransaction();
+ } catch (TransactionManagementException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Transaction Management Exception while trying to un-register " + "the platform with identifier : "
+ + identifier + " tenant :" + tenantId, e);
+ } catch (DBConnectionException e) {
+ ConnectionManagerUtil.rollbackTransaction();
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to un-register " + "the platform with identifier : "
+ + identifier + " tenant :" + tenantId, e);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
}
- DAOFactory.getPlatformDAO().unregister(tenantId, identifier);
}
@Override
public void addMapping(int tenantId, List platformIdentifiers) throws PlatformManagementException {
- DAOFactory.getPlatformDAO().addMapping(tenantId, platformIdentifiers);
+ try {
+ ConnectionManagerUtil.openConnection();
+ DAOFactory.getPlatformDAO().addMapping(tenantId, platformIdentifiers);
+ } catch (DBConnectionException e) {
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to add tenant " + "mapping for tenant ID : "
+ + tenantId);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
+ }
}
@Override
public void addMapping(int tenantId, String platformIdentifier) throws PlatformManagementException {
List identifiers = new ArrayList<>();
identifiers.add(platformIdentifier);
- DAOFactory.getPlatformDAO().addMapping(tenantId, identifiers);
+ addMapping(tenantId, identifiers);
}
@Override
public void removeMapping(int tenantId, String platformIdentifier) throws PlatformManagementException {
- DAOFactory.getPlatformDAO().removeMapping(tenantId, platformIdentifier);
+ try {
+ ConnectionManagerUtil.openConnection();
+ DAOFactory.getPlatformDAO().removeMapping(tenantId, platformIdentifier);
+ } catch (DBConnectionException e) {
+ throw new PlatformManagementDAOException(
+ "Database Connection Exception while trying to remove tenant mapping for tenant ID : " + tenantId);
+ } finally {
+ ConnectionManagerUtil.closeConnection();
+ }
}
}
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationMgtDatabaseCreator.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationMgtDatabaseCreator.java
index 7c40bfe00c..1fe8961a5b 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationMgtDatabaseCreator.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationMgtDatabaseCreator.java
@@ -20,11 +20,12 @@ package org.wso2.carbon.device.application.mgt.core.util;
import java.io.File;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.Log;
import org.wso2.carbon.utils.CarbonUtils;
import org.wso2.carbon.utils.dbcreator.DatabaseCreator;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+
/**
* ApplicationMgtDatabaseCreator is responsible for creating the Application Management related tables.
*/
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ConnectionManagerUtil.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ConnectionManagerUtil.java
index ae857bbb64..664e637901 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ConnectionManagerUtil.java
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ConnectionManagerUtil.java
@@ -27,8 +27,6 @@ import org.wso2.carbon.device.application.mgt.common.exception.TransactionManage
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.SQLException;
public class ConnectionManagerUtil {
@@ -187,27 +185,4 @@ public class ConnectionManagerUtil {
return null;
}
- /**
- * Cleanup resources used to transaction
- *
- * @param stmt Prepared statement used
- * @param rs Obtained results set
- */
- public static void cleanupResources(PreparedStatement 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);
- }
- }
- }
-
}
diff --git a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql
index 06c22b4750..6ff557d534 100644
--- a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql
+++ b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql
@@ -19,13 +19,12 @@ PRIMARY KEY (IDENTIFIER, TENANT_ID)
CREATE TABLE IF NOT EXISTS APPM_PLATFORM_PROPERTIES (
ID INT NOT NULL AUTO_INCREMENT,
-PLATFORM_ID VARCHAR (100) NOT NULL,
+PLATFORM_ID INT NOT NULL,
PROP_NAME VARCHAR (100) NOT NULL,
OPTIONAL BOOLEAN,
DEFAUL_VALUE VARCHAR (255),
-TENANT_ID INT NOT NULL ,
-FOREIGN KEY(PLATFORM_ID, TENANT_ID) REFERENCES APPM_PLATFORM(IDENTIFIER, TENANT_ID) ON DELETE CASCADE,
-PRIMARY KEY (ID, PLATFORM_ID, PROP_NAME, TENANT_ID)
+FOREIGN KEY(PLATFORM_ID) REFERENCES APPM_PLATFORM(ID) ON DELETE CASCADE,
+PRIMARY KEY (ID, PLATFORM_ID, PROP_NAME)
);
CREATE TABLE IF NOT EXISTS APPM_PLATFORM_TENANT_MAPPING (
diff --git a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql
index 3512f095c0..6809473a8a 100644
--- a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql
+++ b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql
@@ -20,21 +20,20 @@ IDENTIFIER VARCHAR (100) NOT NULL,
TENANT_ID INT NOT NULL ,
NAME VARCHAR (255),
FILE_BASED BOOLEAN,
-DESCRIPTION VARCHAR(2048),
+DESCRIPTION VARCHAR (2048),
IS_SHARED BOOLEAN,
ICON_NAME VARCHAR (100),
PRIMARY KEY (IDENTIFIER, TENANT_ID)
);
CREATE TABLE IF NOT EXISTS APPM_PLATFORM_PROPERTIES (
-ID INT NOT NULL AUTO_INCREMENT UNIQUE,
-PLATFORM_ID VARCHAR (100) NOT NULL,
-TENANT_ID INT NOT NULL ,
+ID INT NOT NULL AUTO_INCREMENT,
+PLATFORM_ID INT NOT NULL,
PROP_NAME VARCHAR (100) NOT NULL,
OPTIONAL BOOLEAN,
DEFAUL_VALUE VARCHAR (255),
-PRIMARY KEY (ID, PLATFORM_ID, PROP_NAME, TENANT_ID),
-FOREIGN KEY(PLATFORM_ID, TENANT_ID) REFERENCES APPM_PLATFORM(IDENTIFIER, TENANT_ID) ON DELETE CASCADE
+FOREIGN KEY(PLATFORM_ID) REFERENCES APPM_PLATFORM(ID) ON DELETE CASCADE,
+PRIMARY KEY (ID, PLATFORM_ID, PROP_NAME)
);