forked from community/device-mgt-core
parent
b25f14668e
commit
41def8fe76
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
public class PlatformManagementException extends ApplicationManagementException {
|
||||||
|
|
||||||
|
public PlatformManagementException(String message, Throwable ex) {
|
||||||
|
super(message, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlatformManagementException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,295 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.dao.impl;
|
||||||
|
|
||||||
|
|
||||||
|
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.exception.PlatformManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PlatformDAOImpl implements PlatformDAO {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(String tenantDomain, Platform platform) throws PlatformManagementDAOException {
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.beginTransaction();
|
||||||
|
if (getPlatformId(tenantDomain, platform.getCode()) == -1) {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
|
||||||
|
String insertToPlatform = "INSERT INTO APPM_PLATFORM (CODE, TENANT_DOMAIN, NAME, DESCRIPTION, IS_SHARED, ICON_NAME)" +
|
||||||
|
" VALUES (?, ?, ?, ?, ?, ?)";
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(insertToPlatform);
|
||||||
|
preparedStatement.setString(1, platform.getCode());
|
||||||
|
preparedStatement.setString(2, tenantDomain);
|
||||||
|
preparedStatement.setString(3, platform.getName());
|
||||||
|
preparedStatement.setString(4, platform.getDescription());
|
||||||
|
preparedStatement.setBoolean(5, platform.isShared());
|
||||||
|
preparedStatement.setString(6, platform.getIconName());
|
||||||
|
preparedStatement.execute();
|
||||||
|
|
||||||
|
int platformID = getPlatformId(tenantDomain, platform.getCode());
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
ConnectionManagerUtil.commitTransaction();
|
||||||
|
} else {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Platform - " + platform.getCode()
|
||||||
|
+ " is already registered for tenant - " + tenantDomain);
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Unable to start the transaction while trying to register the platform - "
|
||||||
|
+ platform.getCode() + " for tenant - " + tenantDomain, e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Unable to obtain the connection while trying to register the platform - "
|
||||||
|
+ platform.getCode() + " for tenant - " + tenantDomain, 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.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getPlatformId(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
String query = "SELECT ID FROM APPM_PLATFORM WHERE (TENANT_DOMAIN=? AND CODE=?) OR (IS_SHARED = TRUE AND CODE=?)";
|
||||||
|
try {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(query);
|
||||||
|
preparedStatement.setString(1, tenantDomain);
|
||||||
|
preparedStatement.setString(2, platformCode);
|
||||||
|
preparedStatement.setString(3, platformCode);
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
if (resultSet.next()) {
|
||||||
|
return resultSet.getInt("ID");
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error when trying to obtaining the database connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error in executing the query - " + query, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unregister(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.beginTransaction();
|
||||||
|
int platformId = getPlatformId(tenantDomain, platformCode);
|
||||||
|
if (platformId != -1) {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
|
||||||
|
String deletePlatform = "DELETE FROM APPM_PLATFORM WHERE ID = ?";
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(deletePlatform);
|
||||||
|
preparedStatement.setInt(1, platformId);
|
||||||
|
preparedStatement.execute();
|
||||||
|
|
||||||
|
ConnectionManagerUtil.commitTransaction();
|
||||||
|
} else {
|
||||||
|
throw new PlatformManagementDAOException("Platform - " + platformCode
|
||||||
|
+ " is already unregistered registered for tenant - " + tenantDomain);
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Unable to start the transaction while trying to register the platform - "
|
||||||
|
+ platformCode + " for tenant - " + tenantDomain, e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Unable to obtain the connection while trying to register the platform - "
|
||||||
|
+ platformCode + " for tenant - " + tenantDomain, 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.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMapping(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
String insertMapping = "INSERT INTO APPM_PLATFORM_TENANT_MAPPING(TENANT_DOMAIN, PLATFORM_CODE) VALUES (?, ?)";
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.beginTransaction();
|
||||||
|
if (getTenantPlatformMapping(tenantDomain, platformCode) != -1) {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(insertMapping);
|
||||||
|
preparedStatement.execute();
|
||||||
|
ConnectionManagerUtil.commitTransaction();
|
||||||
|
} else {
|
||||||
|
throw new PlatformManagementDAOException("Platform - " + platformCode + " is already assigned to tenant domain - " + tenantDomain);
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Error occured while trying to add the mapping of platform - "
|
||||||
|
+ platformCode + " for tenant - " + tenantDomain, 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.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getTenantPlatformMapping(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
String getMapping = "SELECT ID FROM APPM_PLATFORM_TENANT_MAPPING WHERE TENANT_DOMAIN=? AND PLATFORM_CODE=?";
|
||||||
|
try {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(getMapping);
|
||||||
|
preparedStatement.setString(1, tenantDomain);
|
||||||
|
preparedStatement.setString(2, platformCode);
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
if (resultSet.next()) {
|
||||||
|
return resultSet.getInt("ID");
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error occured while obtaining the connection to get the existing " +
|
||||||
|
"Tenant - Platform Mapping.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error occured while executing the SQL query - " + getMapping, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeMapping(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
String deleteMapping = "DELETE FROM APPM_PLATFORM_TENANT_MAPPING WHERE ID = ?";
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.beginTransaction();
|
||||||
|
int mappingId = getTenantPlatformMapping(tenantDomain, platformCode);
|
||||||
|
if (mappingId != -1) {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(deleteMapping);
|
||||||
|
preparedStatement.setInt(1, mappingId);
|
||||||
|
preparedStatement.execute();
|
||||||
|
|
||||||
|
ConnectionManagerUtil.commitTransaction();
|
||||||
|
} else {
|
||||||
|
throw new PlatformManagementDAOException("Platform - " + platformCode
|
||||||
|
+ " is already unassigned for tenant - " + tenantDomain);
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException | DBConnectionException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Error occurred while unassigning the platform - " + platformCode
|
||||||
|
+ " for tenant - " + tenantDomain);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw new PlatformManagementDAOException("Error occured while executing the query - " + deleteMapping);
|
||||||
|
} catch (PlatformManagementDAOException ex) {
|
||||||
|
ConnectionManagerUtil.rollbackTransaction();
|
||||||
|
throw ex;
|
||||||
|
} finally {
|
||||||
|
ConnectionManagerUtil.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Platform> getPlatforms(String tenantDomain) throws PlatformManagementDAOException {
|
||||||
|
String selectQuery = "SELECT PLATFORM_CODE FROM APPM_PLATFORM_TENANT_MAPPING WHERE TENANT_DOMAIN=?";
|
||||||
|
try {
|
||||||
|
Connection connection = ConnectionManagerUtil.openConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(selectQuery);
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
List<Platform> platforms = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
String platformCode = resultSet.getString(1);
|
||||||
|
platforms.add(getPlatform(tenantDomain, platformCode));
|
||||||
|
}
|
||||||
|
return platforms;
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error occured when loading the platforms for tenant - " + tenantDomain, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error occured when executing query - " + selectQuery, e);
|
||||||
|
} finally {
|
||||||
|
ConnectionManagerUtil.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Platform getPlatform(String tenantDomain, String platformCode) throws PlatformManagementDAOException {
|
||||||
|
String platformQuery = "SELECT * FROM (SELECT * FROM APPM_PLATFORM WHERE (TENANT_DOMAIN=? AND CODE=?) PLATFORM " +
|
||||||
|
"LEFT JOIN APPM_PLATFORM_PROPERTIES PROPS ON PLATFORM.ID = PROPS.PLATFORM_ID ORDER BY PLATFORM.CODE DESC";
|
||||||
|
try {
|
||||||
|
Connection connection = ConnectionManagerUtil.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(platformQuery);
|
||||||
|
preparedStatement.setString(1, tenantDomain);
|
||||||
|
preparedStatement.setString(2, platformCode);
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
Platform platform = new Platform();
|
||||||
|
if (resultSet.next()) {
|
||||||
|
platform.setId(resultSet.getInt("PLATFORM.ID"));
|
||||||
|
platform.setCode(platformCode);
|
||||||
|
platform.setName(resultSet.getString("PLATFORM.NAME"));
|
||||||
|
platform.setIconName(resultSet.getString("PLATFORM.DESCRIPTION"));
|
||||||
|
platform.setIconName(resultSet.getString("PLATFORM.ICON_NAME"));
|
||||||
|
platform.setShared(resultSet.getBoolean("PLATFORM.IS_SHARED"));
|
||||||
|
platform.setFileBased(false);
|
||||||
|
List<Platform.Property> properties = new ArrayList<>();
|
||||||
|
do {
|
||||||
|
if (resultSet.getString("PROPS.PROP_NAME") != null) {
|
||||||
|
Platform.Property property = new Platform.Property();
|
||||||
|
property.setName(resultSet.getString("PROPS.PROP_NAME"));
|
||||||
|
property.setOptional(resultSet.getBoolean("PROPS.OPTIONAL"));
|
||||||
|
property.setDefaultValue(resultSet.getString("PROPS.DEFAUL_VALUE"));
|
||||||
|
properties.add(property);
|
||||||
|
}
|
||||||
|
} while (resultSet.next());
|
||||||
|
platform.setProperties(properties);
|
||||||
|
} else {
|
||||||
|
platform.setCode(platformCode);
|
||||||
|
platform.setFileBased(true);
|
||||||
|
}
|
||||||
|
return platform;
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error when loading the platform - " + platformCode, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformManagementDAOException("Error in executing the query - " + platformQuery, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.deployer;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "Platform")
|
||||||
|
public class Platform {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private String icon;
|
||||||
|
private boolean shared;
|
||||||
|
private List<Property> properties;
|
||||||
|
|
||||||
|
@XmlAttribute(name = "id")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlAttribute(name = "name")
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "Property")
|
||||||
|
public List<Property> getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProperties(List<Property> properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlAttribute(name = "icon")
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIcon(String icon) {
|
||||||
|
this.icon = icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlAttribute(name = "isShared")
|
||||||
|
public boolean isShared() {
|
||||||
|
return shared;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShared(boolean shared) {
|
||||||
|
this.shared = shared;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.deployer;
|
||||||
|
|
||||||
|
import org.apache.axis2.context.ConfigurationContext;
|
||||||
|
import org.apache.axis2.deployment.AbstractDeployer;
|
||||||
|
import org.apache.axis2.deployment.DeploymentException;
|
||||||
|
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.context.CarbonContext;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.internal.DataHolder;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||||
|
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBContext;
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
import javax.xml.bind.Unmarshaller;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PlatformDeployer extends AbstractDeployer {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(PlatformDeployer.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(ConfigurationContext configurationContext) {
|
||||||
|
File deployementDir = new File(MultitenantUtils.getAxis2RepositoryPath(CarbonContext.getThreadLocalCarbonContext().
|
||||||
|
getTenantId()) + Constants.PLATFORMS_DEPLOYMENT_DIR_NAME);
|
||||||
|
if (!deployementDir.exists()) {
|
||||||
|
if (!deployementDir.mkdir()) {
|
||||||
|
log.warn("Unable to create the deployment dir at: " + deployementDir.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
|
||||||
|
File deploymentFile = new File(deploymentFileData.getAbsolutePath());
|
||||||
|
try {
|
||||||
|
JAXBContext jaxbContext = JAXBContext.newInstance(Platform.class);
|
||||||
|
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
|
||||||
|
Platform platformConf = (Platform) unmarshaller.unmarshal(deploymentFile);
|
||||||
|
if (platformConf.getName().contentEquals(getPlatformID(deploymentFile.getName()))) {
|
||||||
|
org.wso2.carbon.device.application.mgt.common.Platform platform = convert(platformConf);
|
||||||
|
DataHolder.getInstance().getPlatformManager().register(CarbonContext.getThreadLocalCarbonContext().getTenantDomain(), platform);
|
||||||
|
} else {
|
||||||
|
log.error("Unable to deploy the platform - " + deploymentFile.getAbsolutePath() + "!. Platform config file name - "
|
||||||
|
+ deploymentFile.getName() + " should match with the 'id' provided within the platform configuration!");
|
||||||
|
}
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
log.error("Platform configuration file - " + deploymentFile.getAbsolutePath() + " is invalid!", e);
|
||||||
|
} catch (PlatformManagementException e) {
|
||||||
|
log.error("Unable to deploy the platform - " + deploymentFile.getAbsolutePath(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void undeploy(String fileName) throws DeploymentException {
|
||||||
|
String platformId = getPlatformID(fileName);
|
||||||
|
try {
|
||||||
|
DataHolder.getInstance().getPlatformManager().unregister(CarbonContext.getThreadLocalCarbonContext().getTenantDomain(), platformId, true);
|
||||||
|
} catch (PlatformManagementException e) {
|
||||||
|
log.error("Error occurred while undeploying the platform - " + fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getPlatformID(String deploymentFileName) {
|
||||||
|
if (deploymentFileName.contains(Constants.PLATFORM_DEPLOYMENT_EXT)) {
|
||||||
|
return deploymentFileName.substring(0, deploymentFileName.length() -
|
||||||
|
Constants.PLATFORM_DEPLOYMENT_EXT.length());
|
||||||
|
}
|
||||||
|
return deploymentFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private org.wso2.carbon.device.application.mgt.common.Platform convert(Platform platformConfig) {
|
||||||
|
org.wso2.carbon.device.application.mgt.common.Platform platform = new org.wso2.carbon.device.application.mgt.common.Platform();
|
||||||
|
platform.setCode(platformConfig.getId());
|
||||||
|
platform.setName(platformConfig.getName());
|
||||||
|
platform.setDescription(platformConfig.getDescription());
|
||||||
|
platform.setIconName(platformConfig.getIcon());
|
||||||
|
platform.setFileBased(true);
|
||||||
|
platform.setShared(platformConfig.isShared());
|
||||||
|
List<org.wso2.carbon.device.application.mgt.common.Platform.Property> properties = new ArrayList<>();
|
||||||
|
for (Property propertyConfig : platformConfig.getProperties()) {
|
||||||
|
org.wso2.carbon.device.application.mgt.common.Platform.Property property = new org.wso2.carbon.device.application.mgt.common.Platform.Property();
|
||||||
|
property.setName(propertyConfig.getName());
|
||||||
|
property.setDefaultValue(propertyConfig.getDefaultValue());
|
||||||
|
property.setOptional(propertyConfig.isOptional());
|
||||||
|
properties.add(property);
|
||||||
|
}
|
||||||
|
platform.setProperties(properties);
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDirectory(String s) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setExtension(String s) {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.deployer;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
import javax.xml.bind.annotation.XmlValue;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "Property")
|
||||||
|
public class Property {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private boolean optional;
|
||||||
|
private String defaultValue;
|
||||||
|
|
||||||
|
@XmlValue
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlAttribute(name = "optional")
|
||||||
|
public boolean isOptional() {
|
||||||
|
return optional;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOptional(boolean optional) {
|
||||||
|
this.optional = optional;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlAttribute(name = "default")
|
||||||
|
public String getDefaultValue() {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultValue(String defaultValue) {
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.exception;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
|
||||||
|
|
||||||
|
public class PlatformManagementDAOException extends PlatformManagementException {
|
||||||
|
|
||||||
|
public PlatformManagementDAOException(String message, Throwable ex) {
|
||||||
|
super(message, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlatformManagementDAOException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<component xmlns="http://products.wso2.org/carbon">
|
||||||
|
<deployers>
|
||||||
|
<deployer>
|
||||||
|
<directory>platforms</directory>
|
||||||
|
<extension>xml</extension>
|
||||||
|
<class>org.wso2.carbon.device.application.mgt.core.deployer.PlatformDeployer</class>
|
||||||
|
</deployer>
|
||||||
|
</deployers>
|
||||||
|
</component>
|
@ -0,0 +1,6 @@
|
|||||||
|
<Platforms>
|
||||||
|
<Platform id="android" name="Android" description="something...." icon="" isShared="true">
|
||||||
|
<Property optional="true">test</Property>
|
||||||
|
<Property optional="false" default="xxxxx">number</Property>
|
||||||
|
</Platform>
|
||||||
|
</Platforms>
|
@ -0,0 +1,29 @@
|
|||||||
|
CREATE TABLE APPM_PLATFORM (
|
||||||
|
ID INT NOT NULL AUTO_INCREMENT,
|
||||||
|
CODE VARCHAR (100) NOT NULL,
|
||||||
|
TENANT_DOMAIN VARCHAR (100) NOT NULL ,
|
||||||
|
NAME VARCHAR (255) NOT NULL,
|
||||||
|
DESCRIPTION LONGVARCHAR,
|
||||||
|
IS_SHARED BOOLEAN,
|
||||||
|
ICON_NAME VARCHAR (100),
|
||||||
|
PRIMARY KEY (ID, CODE, TENANT_DOMAIN)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE APPM_PLATFORM_PROPERTIES (
|
||||||
|
ID INT NOT NULL AUTO_INCREMENT,
|
||||||
|
PLATFORM_ID INTEGER NOT NULL,
|
||||||
|
PROP_NAME VARCHAR (100) NOT NULL,
|
||||||
|
OPTIONAL BOOLEAN,
|
||||||
|
DEFAUL_VALUE VARCHAR (255),
|
||||||
|
FOREIGN KEY(PLATFORM_ID) REFERENCES APPM_PLATFORM(ID) ON DELETE CASCADE,
|
||||||
|
PRIMARY KEY (ID, PLATFORM_ID, PROP_NAME)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE APPM_PLATFORM_TENANT_MAPPING (
|
||||||
|
ID INT NOT NULL AUTO_INCREMENT,
|
||||||
|
TENANT_DOMAIN VARCHAR (100) NOT NULL ,
|
||||||
|
PLATFORM_CODE VARCHAR (100) NOT NULL
|
||||||
|
FOREIGN KEY(PLATFORM_CODE) REFERENCES APPM_PLATFORM(CODE) ON DELETE CASCADE,
|
||||||
|
PRIMARY KEY (ID, TENANT_DOMAIN, PLATFORM_CODE)
|
||||||
|
)
|
||||||
|
|
@ -1,141 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
~
|
|
||||||
~ WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
~ Version 2.0 (the "License"); you may not use this file except
|
|
||||||
~ in compliance with the License.
|
|
||||||
~ You may obtain a copy of the License at
|
|
||||||
~
|
|
||||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
~
|
|
||||||
~ Unless required by applicable law or agreed to in writing,
|
|
||||||
~ software distributed under the License is distributed on an
|
|
||||||
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
~ KIND, either express or implied. See the License for the
|
|
||||||
~ specific language governing permissions and limitations
|
|
||||||
~ under the License.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>application-mgt</artifactId>
|
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
|
||||||
<relativePath>../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.extensions</artifactId>
|
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
|
||||||
<packaging>bundle</packaging>
|
|
||||||
<name>WSO2 Carbon - Application Management Extensions</name>
|
|
||||||
<description>WSO2 Carbon - Application Management Extensions</description>
|
|
||||||
<url>http://wso2.org</url>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-scr-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-bundle-plugin</artifactId>
|
|
||||||
<version>1.4.0</version>
|
|
||||||
<extensions>true</extensions>
|
|
||||||
<configuration>
|
|
||||||
<instructions>
|
|
||||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
|
||||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
|
||||||
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
|
||||||
<Bundle-Description>Application Management Extensions Bundle</Bundle-Description>
|
|
||||||
<Import-Package>
|
|
||||||
org.osgi.framework,
|
|
||||||
org.osgi.service.component,
|
|
||||||
org.apache.commons.logging,
|
|
||||||
javax.xml.*,
|
|
||||||
javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional,
|
|
||||||
org.wso2.carbon.context.*,
|
|
||||||
org.wso2.carbon.utils.*,
|
|
||||||
org.w3c.dom,
|
|
||||||
org.json,
|
|
||||||
javax.sql,
|
|
||||||
com.google.gson,
|
|
||||||
javax.naming,
|
|
||||||
javax.xml.bind.annotation,
|
|
||||||
javax.xml.bind,
|
|
||||||
org.wso2.carbon.device.application.mgt.common.*,
|
|
||||||
org.wso2.carbon.device.mgt.core.*,
|
|
||||||
org.wso2.carbon.device.mgt.common.*,
|
|
||||||
</Import-Package>
|
|
||||||
<Export-Package>
|
|
||||||
org.wso2.carbon.device.application.mgt.extensions.*
|
|
||||||
</Export-Package>
|
|
||||||
</instructions>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.osgi</groupId>
|
|
||||||
<artifactId>org.eclipse.osgi</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.osgi</groupId>
|
|
||||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.equinox</groupId>
|
|
||||||
<artifactId>org.eclipse.equinox.common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testng</groupId>
|
|
||||||
<artifactId>testng</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.logging</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-codec.wso2</groupId>
|
|
||||||
<artifactId>commons-codec</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-io.wso2</groupId>
|
|
||||||
<artifactId>commons-io</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-simple</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.json.wso2</groupId>
|
|
||||||
<artifactId>json</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.google.code.gson</groupId>
|
|
||||||
<artifactId>gson</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
|
|
Loading…
Reference in new issue