mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #1182 from lasanthaDLPDS/application-mgt-new
Adding New Application Management Component
This commit is contained in:
commit
8403455f4b
1
.gitignore
vendored
1
.gitignore
vendored
@ -13,6 +13,7 @@ target
|
||||
|
||||
|
||||
*.class
|
||||
*.swp
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
# carbon-device-mgt
|
||||
|
||||
<a href='https://opensource.org/licenses/Apache-2.0'><img src='https://img.shields.io/badge/License-Apache%202.0-blue.svg'></a><br/>
|
||||
<a href='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt/'><img src='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt/badge/icon'></a> - Java7<br/>
|
||||
<a href='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt__java8/'><img src='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt__java8/badge/icon'></a> - Java8
|
||||
<a href='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt/'><img src='https://wso2.org/jenkins/job/platform-builds/job/carbon-device-mgt/badge/icon'></a> - Java8<br/>
|
||||
|
||||
WSO2 CONNECTED DEVICE MANAGEMENT COMPONENTS
|
||||
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Annotations</name>
|
||||
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
||||
|
||||
@ -21,12 +21,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - API Application Management API</name>
|
||||
@ -197,6 +197,32 @@
|
||||
<warName>${project.artifactId}</warName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
@ -44,6 +44,9 @@ public class APIUtil {
|
||||
private static final String DEFAULT_CDMF_API_TAG = "device_management";
|
||||
private static final String DEFAULT_AGENT_API_TAG = "device_agent";
|
||||
private static final String DEFAULT_CERT_API_TAG = "scep_management";
|
||||
private static final String DEFAULT_APP_MGT_TAG = "application_management";
|
||||
private static final String DEFAULT_APP_MGT_LCYCLE_MGT_TAG = "lifecycle_management";
|
||||
private static final String DEFAULT_APP_MGT_SUB_MGT_TAG = "subscription_management";
|
||||
public static final String PERMISSION_PROPERTY_NAME = "name";
|
||||
|
||||
public static String getAuthenticatedUser() {
|
||||
@ -108,6 +111,9 @@ public class APIUtil {
|
||||
allowedApisTags.add(DEFAULT_CDMF_API_TAG);
|
||||
allowedApisTags.add(DEFAULT_CERT_API_TAG);
|
||||
allowedApisTags.add(DEFAULT_AGENT_API_TAG);
|
||||
allowedApisTags.add(DEFAULT_APP_MGT_TAG);
|
||||
allowedApisTags.add(DEFAULT_APP_MGT_LCYCLE_MGT_TAG);
|
||||
allowedApisTags.add(DEFAULT_APP_MGT_SUB_MGT_TAG);
|
||||
return allowedApisTags;
|
||||
}
|
||||
|
||||
|
||||
@ -22,12 +22,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Application Management</name>
|
||||
@ -119,6 +119,32 @@
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Security Handler Component</name>
|
||||
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
||||
@ -55,6 +55,11 @@
|
||||
<groupId>org.json.wso2</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
@ -97,6 +102,41 @@
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<suiteXmlFiles>
|
||||
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||
</suiteXmlFiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
@ -26,37 +26,8 @@ public class APIMCertificateMGTException extends Exception{
|
||||
|
||||
private static final long serialVersionUID = -37676242646464497L;
|
||||
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public APIMCertificateMGTException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIMCertificateMGTException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public APIMCertificateMGTException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIMCertificateMGTException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public APIMCertificateMGTException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,7 +19,6 @@ package org.wso2.carbon.apimgt.handlers;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.axis2.context.MessageContext;
|
||||
import org.apache.axis2.description.HandlerDescription;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.synapse.core.axis2.Axis2MessageContext;
|
||||
@ -51,8 +50,6 @@ import java.util.StringTokenizer;
|
||||
*/
|
||||
public class AuthenticationHandler extends AbstractHandler {
|
||||
private static final Log log = LogFactory.getLog(AuthenticationHandler.class);
|
||||
private static HandlerDescription EMPTY_HANDLER_METADATA = new HandlerDescription("API Security Handler");
|
||||
private HandlerDescription handlerDesc;
|
||||
private RESTInvoker restInvoker;
|
||||
|
||||
private static final String X_JWT_ASSERTION = "X-JWT-Assertion";
|
||||
@ -69,15 +66,14 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
public AuthenticationHandler() {
|
||||
log.info("Engaging API Security Handler..........");
|
||||
restInvoker = new RESTInvoker();
|
||||
this.handlerDesc = EMPTY_HANDLER_METADATA;
|
||||
this.iotServerConfiguration = Utils.initConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handling the message and checking the security.
|
||||
*
|
||||
* @param messageContext
|
||||
* @return
|
||||
* @param messageContext Request message context.
|
||||
* @return Boolean value of the result of the processing the request.
|
||||
*/
|
||||
@Override
|
||||
public boolean handleRequest(org.apache.synapse.MessageContext messageContext) {
|
||||
@ -91,16 +87,19 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
Map<String, String> headers = (Map<String, String>) axisMC.getProperty(MessageContext.TRANSPORT_HEADERS);
|
||||
try {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
RESTResponse response;
|
||||
RESTResponse response = null;
|
||||
if (headers.containsKey(AuthConstants.MDM_SIGNATURE)) {
|
||||
|
||||
String mdmSignature = headers.get(AuthConstants.MDM_SIGNATURE).toString();
|
||||
String mdmSignature = headers.get(AuthConstants.MDM_SIGNATURE);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Verify Cert:\n" + mdmSignature);
|
||||
}
|
||||
String deviceType = this.getDeviceType(messageContext.getTo().getAddress().trim());
|
||||
if (deviceType == null) {
|
||||
return false;
|
||||
}
|
||||
URI certVerifyUrl = new URI(iotServerConfiguration.getVerificationEndpoint() + deviceType);
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders();
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders(this.restInvoker);
|
||||
|
||||
Certificate certificate = new Certificate();
|
||||
certificate.setPem(mdmSignature);
|
||||
@ -109,8 +108,7 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
|
||||
Gson gson = new Gson();
|
||||
String certVerifyContent = gson.toJson(certificate);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
|
||||
null, certVerifyContent);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
|
||||
|
||||
String str = response.getContent();
|
||||
if (log.isDebugEnabled()) {
|
||||
@ -125,7 +123,7 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
}
|
||||
|
||||
} else if (headers.containsKey(AuthConstants.PROXY_MUTUAL_AUTH_HEADER)) {
|
||||
String subjectDN = headers.get(AuthConstants.PROXY_MUTUAL_AUTH_HEADER).toString();
|
||||
String subjectDN = headers.get(AuthConstants.PROXY_MUTUAL_AUTH_HEADER);
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Verify subject DN: " + subjectDN);
|
||||
@ -133,7 +131,7 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
|
||||
String deviceType = this.getDeviceType(messageContext.getTo().getAddress().trim());
|
||||
URI certVerifyUrl = new URI(iotServerConfiguration.getVerificationEndpoint() + deviceType);
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders();
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders(this.restInvoker);
|
||||
Certificate certificate = new Certificate();
|
||||
certificate.setPem(subjectDN);
|
||||
certificate.setTenantId(tenantId);
|
||||
@ -141,8 +139,7 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
|
||||
Gson gson = new Gson();
|
||||
String certVerifyContent = gson.toJson(certificate);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
|
||||
null, certVerifyContent);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Verify response:" + response.getContent());
|
||||
}
|
||||
@ -152,23 +149,19 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
CertificateFactory cf = CertificateFactory.getInstance("X.509");
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(certs[0].getEncoded());
|
||||
X509Certificate x509 = (X509Certificate) cf.generateCertificate(bais);
|
||||
if (bais != null) {
|
||||
bais.close();
|
||||
}
|
||||
if (x509 != null) {
|
||||
headers.put(AuthConstants.PROXY_MUTUAL_AUTH_HEADER, CertificateGenerator.getCommonName(x509));
|
||||
return true;
|
||||
} else {
|
||||
response = null;
|
||||
}
|
||||
} else if (headers.containsKey(AuthConstants.ENCODED_PEM)) {
|
||||
String encodedPem = headers.get(AuthConstants.ENCODED_PEM).toString();
|
||||
String encodedPem = headers.get(AuthConstants.ENCODED_PEM);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Verify Cert:\n" + encodedPem);
|
||||
}
|
||||
String deviceType = this.getDeviceType(messageContext.getTo().getAddress().trim());
|
||||
URI certVerifyUrl = new URI(iotServerConfiguration.getVerificationEndpoint() + deviceType);
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders();
|
||||
Map<String, String> certVerifyHeaders = this.setHeaders(this.restInvoker);
|
||||
|
||||
Certificate certificate = new Certificate();
|
||||
certificate.setPem(encodedPem);
|
||||
@ -176,8 +169,7 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
certificate.setSerial("");
|
||||
Gson gson = new Gson();
|
||||
String certVerifyContent = gson.toJson(certificate);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
|
||||
null, certVerifyContent);
|
||||
response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Verify response:" + response.getContent());
|
||||
}
|
||||
@ -224,9 +216,9 @@ public class AuthenticationHandler extends AbstractHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
private Map<String, String> setHeaders() throws APIMCertificateMGTException {
|
||||
private Map<String, String> setHeaders(RESTInvoker restInvoker) throws APIMCertificateMGTException {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
String accessToken = Utils.getAccessToken(iotServerConfiguration);
|
||||
String accessToken = Utils.getAccessToken(iotServerConfiguration, restInvoker);
|
||||
map.put(AUTHORIZATION, BEARER + accessToken);
|
||||
map.put(CONTENT_TYPE, "application/json");
|
||||
return map;
|
||||
|
||||
@ -17,11 +17,9 @@
|
||||
*/
|
||||
package org.wso2.carbon.apimgt.handlers.invoker;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.methods.*;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
@ -32,41 +30,36 @@ import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class RESTInvoker {
|
||||
|
||||
private static final Log log = LogFactory.getLog(RESTInvoker.class);
|
||||
|
||||
private int maxTotalConnections = 100;
|
||||
private int maxTotalConnectionsPerRoute = 100;
|
||||
private int connectionTimeout = 120000;
|
||||
private int socketTimeout = 120000;
|
||||
|
||||
private CloseableHttpClient client = null;
|
||||
private PoolingHttpClientConnectionManager connectionManager = null;
|
||||
|
||||
public RESTInvoker() {
|
||||
configureHttpClient();
|
||||
}
|
||||
|
||||
private void configureHttpClient() {
|
||||
|
||||
int connectionTimeout = 120000;
|
||||
int socketTimeout = 120000;
|
||||
int maxTotalConnectionsPerRoute = 100;
|
||||
int maxTotalConnections = 100;
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom()
|
||||
.setExpectContinueEnabled(true)
|
||||
.setConnectTimeout(connectionTimeout)
|
||||
.setSocketTimeout(socketTimeout)
|
||||
.build();
|
||||
|
||||
connectionManager = new PoolingHttpClientConnectionManager();
|
||||
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
|
||||
connectionManager.setDefaultMaxPerRoute(maxTotalConnectionsPerRoute);
|
||||
connectionManager.setMaxTotal(maxTotalConnections);
|
||||
client = HttpClients.custom()
|
||||
.setConnectionManager(connectionManager)
|
||||
.setDefaultRequestConfig(defaultRequestConfig)
|
||||
.build();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("REST client initialized with " +
|
||||
"maxTotalConnection = " + maxTotalConnections +
|
||||
@ -76,81 +69,24 @@ public class RESTInvoker {
|
||||
|
||||
}
|
||||
|
||||
public void closeHttpClient() {
|
||||
IOUtils.closeQuietly(client);
|
||||
IOUtils.closeQuietly(connectionManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes the http GET method
|
||||
*
|
||||
* @param uri endpoint/service url
|
||||
* @param requestHeaders header list
|
||||
* @param username username for authentication
|
||||
* @param password password for authentication
|
||||
* @return RESTResponse of the GET request (can be the response body or the response status code)
|
||||
* @throws Exception
|
||||
*/
|
||||
public RESTResponse invokeGET(URI uri, Map<String, String> requestHeaders, String username, String password) throws IOException {
|
||||
|
||||
HttpGet httpGet = null;
|
||||
CloseableHttpResponse response = null;
|
||||
Header[] headers;
|
||||
int httpStatus;
|
||||
String contentType;
|
||||
String output;
|
||||
try {
|
||||
httpGet = new HttpGet(uri);
|
||||
if (requestHeaders != null && !requestHeaders.isEmpty()) {
|
||||
Object keys[] = requestHeaders.keySet().toArray();
|
||||
for (Object header : keys) {
|
||||
httpGet.setHeader(header.toString(), requestHeaders.get(header).toString());
|
||||
}
|
||||
}
|
||||
response = sendReceiveRequest(httpGet, username, password);
|
||||
output = IOUtils.toString(response.getEntity().getContent());
|
||||
headers = response.getAllHeaders();
|
||||
httpStatus = response.getStatusLine().getStatusCode();
|
||||
contentType = response.getEntity().getContentType().getValue();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoked GET " + uri.toString() + " - Response message: " + output);
|
||||
}
|
||||
EntityUtils.consume(response.getEntity());
|
||||
} finally {
|
||||
if (response != null) {
|
||||
IOUtils.closeQuietly(response);
|
||||
}
|
||||
if (httpGet != null) {
|
||||
httpGet.releaseConnection();
|
||||
}
|
||||
}
|
||||
return new RESTResponse(contentType, output, headers, httpStatus);
|
||||
}
|
||||
|
||||
|
||||
public RESTResponse invokePOST(URI uri, Map<String, String> requestHeaders, String username,
|
||||
String password, String payload) throws IOException {
|
||||
public RESTResponse invokePOST(URI uri, Map<String, String> requestHeaders, String payload) throws IOException {
|
||||
|
||||
HttpPost httpPost = null;
|
||||
CloseableHttpResponse response = null;
|
||||
Header[] headers;
|
||||
int httpStatus;
|
||||
String contentType;
|
||||
String output;
|
||||
try {
|
||||
httpPost = new HttpPost(uri);
|
||||
httpPost.setEntity(new StringEntity(payload));
|
||||
if (requestHeaders != null && !requestHeaders.isEmpty()) {
|
||||
Object keys[] = requestHeaders.keySet().toArray();
|
||||
for (Object header : keys) {
|
||||
httpPost.setHeader(header.toString(), requestHeaders.get(header).toString());
|
||||
Set<String> keys = requestHeaders.keySet();
|
||||
for (String header : keys) {
|
||||
httpPost.setHeader(header, requestHeaders.get(header));
|
||||
}
|
||||
}
|
||||
response = sendReceiveRequest(httpPost, username, password);
|
||||
response = sendReceiveRequest(httpPost);
|
||||
output = IOUtils.toString(response.getEntity().getContent());
|
||||
headers = response.getAllHeaders();
|
||||
httpStatus = response.getStatusLine().getStatusCode();
|
||||
contentType = response.getEntity().getContentType().getValue();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoked POST " + uri.toString() +
|
||||
" - Input payload: " + payload + " - Response message: " + output);
|
||||
@ -164,116 +100,11 @@ public class RESTInvoker {
|
||||
httpPost.releaseConnection();
|
||||
}
|
||||
}
|
||||
return new RESTResponse(contentType, output, headers, httpStatus);
|
||||
return new RESTResponse(output, httpStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes the http PUT method
|
||||
*
|
||||
* @param uri endpoint/service url
|
||||
* @param requestHeaders header list
|
||||
* @param username username for authentication
|
||||
* @param password password for authentication
|
||||
* @param payload payload body passed
|
||||
* @return RESTResponse of the PUT request (can be the response body or the response status code)
|
||||
* @throws Exception
|
||||
*/
|
||||
public RESTResponse invokePUT(URI uri, Map<String, String> requestHeaders, String username, String password,
|
||||
String payload) throws IOException {
|
||||
|
||||
HttpPut httpPut = null;
|
||||
CloseableHttpResponse response = null;
|
||||
Header[] headers;
|
||||
int httpStatus;
|
||||
String contentType;
|
||||
String output;
|
||||
try {
|
||||
httpPut = new HttpPut(uri);
|
||||
httpPut.setEntity(new StringEntity(payload));
|
||||
if (requestHeaders != null && !requestHeaders.isEmpty()) {
|
||||
Object keys[] = requestHeaders.keySet().toArray();
|
||||
for (Object header : keys) {
|
||||
httpPut.setHeader(header.toString(), requestHeaders.get(header).toString());
|
||||
}
|
||||
}
|
||||
response = sendReceiveRequest(httpPut, username, password);
|
||||
output = IOUtils.toString(response.getEntity().getContent());
|
||||
headers = response.getAllHeaders();
|
||||
httpStatus = response.getStatusLine().getStatusCode();
|
||||
contentType = response.getEntity().getContentType().getValue();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoked PUT " + uri.toString() + " - Response message: " + output);
|
||||
}
|
||||
EntityUtils.consume(response.getEntity());
|
||||
} finally {
|
||||
if (response != null) {
|
||||
IOUtils.closeQuietly(response);
|
||||
}
|
||||
if (httpPut != null) {
|
||||
httpPut.releaseConnection();
|
||||
}
|
||||
}
|
||||
return new RESTResponse(contentType, output, headers, httpStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes the http DELETE method
|
||||
*
|
||||
* @param uri endpoint/service url
|
||||
* @param requestHeaders header list
|
||||
* @param username username for authentication
|
||||
* @param password password for authentication
|
||||
* @return RESTResponse of the DELETE (can be the response status code or the response body)
|
||||
* @throws Exception
|
||||
*/
|
||||
public RESTResponse invokeDELETE(URI uri, Map<String, String> requestHeaders, String username, String password) throws IOException {
|
||||
|
||||
HttpDelete httpDelete = null;
|
||||
CloseableHttpResponse response = null;
|
||||
Header[] headers;
|
||||
int httpStatus;
|
||||
String contentType;
|
||||
String output;
|
||||
try {
|
||||
httpDelete = new HttpDelete(uri);
|
||||
if (requestHeaders != null && !requestHeaders.isEmpty()) {
|
||||
Object keys[] = requestHeaders.keySet().toArray();
|
||||
for (Object header : keys) {
|
||||
httpDelete.setHeader(header.toString(), requestHeaders.get(header).toString());
|
||||
}
|
||||
}
|
||||
response = sendReceiveRequest(httpDelete, username, password);
|
||||
output = IOUtils.toString(response.getEntity().getContent());
|
||||
headers = response.getAllHeaders();
|
||||
httpStatus = response.getStatusLine().getStatusCode();
|
||||
contentType = response.getEntity().getContentType().getValue();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoked DELETE " + uri.toString() + " - Response message: " + output);
|
||||
}
|
||||
EntityUtils.consume(response.getEntity());
|
||||
} finally {
|
||||
if (response != null) {
|
||||
IOUtils.closeQuietly(response);
|
||||
}
|
||||
if (httpDelete != null) {
|
||||
httpDelete.releaseConnection();
|
||||
}
|
||||
}
|
||||
return new RESTResponse(contentType, output, headers, httpStatus);
|
||||
}
|
||||
|
||||
private CloseableHttpResponse sendReceiveRequest(HttpRequestBase requestBase, String username, String password)
|
||||
private CloseableHttpResponse sendReceiveRequest(HttpRequestBase requestBase)
|
||||
throws IOException {
|
||||
CloseableHttpResponse response;
|
||||
if (username != null && !username.equals("") && password != null) {
|
||||
String combinedCredentials = username + ":" + password;
|
||||
byte[] encodedCredentials = Base64.encodeBase64(combinedCredentials.getBytes(StandardCharsets.UTF_8));
|
||||
requestBase.addHeader("Authorization", "Basic " + new String(encodedCredentials));
|
||||
|
||||
response = client.execute(requestBase);
|
||||
} else {
|
||||
response = client.execute(requestBase);
|
||||
}
|
||||
return response;
|
||||
return client.execute(requestBase);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,40 +17,25 @@
|
||||
*/
|
||||
package org.wso2.carbon.apimgt.handlers.invoker;
|
||||
|
||||
import org.apache.http.Header;
|
||||
|
||||
/**
|
||||
* RESTResponse class holds the data retrieved from the HTTP invoke response.
|
||||
*/
|
||||
public class RESTResponse {
|
||||
private String contentType;
|
||||
private String content;
|
||||
private Header[] headers;
|
||||
private int httpStatus;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param contentType from the REST invoke response
|
||||
* @param content from the REST invoke response
|
||||
* @param headers from the REST invoke response
|
||||
* @param httpStatus from the REST invoke response
|
||||
*/
|
||||
public RESTResponse(String contentType, String content, Header[] headers, int httpStatus) {
|
||||
this.contentType = contentType;
|
||||
RESTResponse(String content, int httpStatus) {
|
||||
this.content = content;
|
||||
this.headers = headers;
|
||||
this.httpStatus = httpStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content type of the EST invoke response
|
||||
*
|
||||
* @return String content type of the response
|
||||
*/
|
||||
public String getContentType() {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get contents of the REST invoke response
|
||||
@ -61,15 +46,6 @@ public class RESTResponse {
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get headers of the REST invoke response
|
||||
*
|
||||
* @return headers of the REST invoke response
|
||||
*/
|
||||
public Header[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTTP Status code from REST invoke response
|
||||
*
|
||||
|
||||
@ -21,18 +21,6 @@ package org.wso2.carbon.apimgt.handlers.utils;
|
||||
* This initializes the constance.
|
||||
*/
|
||||
public class AuthConstants {
|
||||
// public static final String SEC_FAULT = "SECURITY_VALIDATION_FAILURE";
|
||||
// public static final String HTTPS = "https";
|
||||
// public static final String WSSE = "wsse";
|
||||
// public static final String AUTH_CONFIGURATION_FILE_NAME = "api-filter-config.xml";
|
||||
// public static final String API_FILTER_CONFIG_ELEMENT = "apiFilterConfig";
|
||||
// public static final String API_LIST_PROPERTY = "apiList";
|
||||
// public static final String HOST = "host";
|
||||
// public static final String HTTPS_PORT = "httpsPort";
|
||||
// public static final String USERNAME = "username";
|
||||
// public static final String PASSWORD = "password";
|
||||
// public static final String IOS_VERIFY_ENDPOINT = "ios-verify-endpoint";
|
||||
// public static final String ANDROID_VERIFY_ENDPOINT = "android-verify-endpoint";
|
||||
public static final String MDM_SIGNATURE = "mdm-signature";
|
||||
public static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header";
|
||||
public static final String MUTUAL_AUTH_HEADER = "mutual-auth-header";
|
||||
|
||||
@ -59,14 +59,22 @@ public class Utils {
|
||||
|
||||
/**
|
||||
* This method initializes the iot-api-config.xml file.
|
||||
* @return
|
||||
*
|
||||
* @return IoTServerConfiguration Object based on the configuration file.
|
||||
*/
|
||||
public static IOTServerConfiguration initConfig() {
|
||||
try {
|
||||
return initConfig(CarbonUtils.getCarbonConfigDirPath() + File.separator + IOT_APIS_CONFIG_FILE);
|
||||
}
|
||||
|
||||
String IOTServerAPIConfigurationPath = CarbonUtils.getCarbonConfigDirPath() + File.separator
|
||||
+ IOT_APIS_CONFIG_FILE;
|
||||
File file = new File(IOTServerAPIConfigurationPath);
|
||||
/**
|
||||
* This methods initialized the iot-api-config.xml from provided path.
|
||||
*
|
||||
* @param path The actual file path of iot-api-config.xml
|
||||
* @return The instance of the IOTServerConfiguration based on the configuration.
|
||||
*/
|
||||
public static IOTServerConfiguration initConfig(String path) {
|
||||
try {
|
||||
File file = new File(path);
|
||||
Document doc = Utils.convertToDocument(file);
|
||||
|
||||
JAXBContext fileContext = JAXBContext.newInstance(IOTServerConfiguration.class);
|
||||
@ -91,7 +99,7 @@ public class Utils {
|
||||
/**
|
||||
* This method gets the values from system variables and sets to xml.
|
||||
*/
|
||||
public static String replaceProperties(String text) {
|
||||
private static String replaceProperties(String text) {
|
||||
String regex = "\\$\\{(.*?)\\}";
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matchPattern = pattern.matcher(text);
|
||||
@ -107,16 +115,18 @@ public class Utils {
|
||||
|
||||
/**
|
||||
* This class build the iot-api-config.xml file.
|
||||
* @param file
|
||||
* @return
|
||||
*
|
||||
* @param file The file object of iot-api-config.xml.
|
||||
* @return Document instance of the file
|
||||
* @throws APIMCertificateMGTException
|
||||
*/
|
||||
public static Document convertToDocument(File file) throws APIMCertificateMGTException {
|
||||
private static Document convertToDocument(File file) throws APIMCertificateMGTException {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
factory.setNamespaceAware(true);
|
||||
try {
|
||||
DocumentBuilder docBuilder = factory.newDocumentBuilder();
|
||||
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 APIMCertificateMGTException("Error occurred while parsing file, while converting " +
|
||||
@ -126,48 +136,46 @@ public class Utils {
|
||||
|
||||
/**
|
||||
* This class get the access token from the key manager.
|
||||
* @param iotServerConfiguration
|
||||
* @return
|
||||
*
|
||||
* @param iotServerConfiguration Instance of the IoTsererConfiguration.
|
||||
* @return Access token will be returned.
|
||||
* @throws APIMCertificateMGTException
|
||||
*/
|
||||
public static String getAccessToken(IOTServerConfiguration iotServerConfiguration)
|
||||
public static String getAccessToken(IOTServerConfiguration iotServerConfiguration, RESTInvoker restInvoker)
|
||||
throws APIMCertificateMGTException {
|
||||
try {
|
||||
if (clientId == null || clientSecret == null) {
|
||||
getClientSecretes(iotServerConfiguration);
|
||||
getClientSecretes(iotServerConfiguration, restInvoker);
|
||||
}
|
||||
URI tokenUrl = new URI(iotServerConfiguration.getOauthTokenEndpoint());
|
||||
String tokenContent = "grant_type=password&username=" + iotServerConfiguration.getUsername() + "&password=" +
|
||||
iotServerConfiguration.getPassword() + "&scope=activity-view";
|
||||
String tokenBasicAuth = "Basic " + Base64.encode((clientId + ":" + clientSecret).getBytes());
|
||||
Map<String, String> tokenHeaders = new HashMap<String, String>();
|
||||
Map<String, String> tokenHeaders = new HashMap<>();
|
||||
tokenHeaders.put("Authorization", tokenBasicAuth);
|
||||
tokenHeaders.put("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
RESTInvoker restInvoker = new RESTInvoker();
|
||||
RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, null, null, tokenContent);
|
||||
RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, tokenContent);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Token response:" + response.getContent());
|
||||
}
|
||||
JSONObject jsonResponse = new JSONObject(response.getContent());
|
||||
String accessToken = jsonResponse.getString("access_token");
|
||||
return accessToken;
|
||||
return jsonResponse.getString("access_token");
|
||||
|
||||
} catch (URISyntaxException e) {
|
||||
} catch (URISyntaxException | IOException e) {
|
||||
throw new APIMCertificateMGTException("Error occurred while trying to call oauth token endpoint", e);
|
||||
} catch (JSONException e) {
|
||||
throw new APIMCertificateMGTException("Error occurred while converting the json to object", e);
|
||||
} catch (IOException e) {
|
||||
throw new APIMCertificateMGTException("Error occurred while trying to call oauth token endpoint", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method register an application to get the client key and secret.
|
||||
* @param iotServerConfiguration
|
||||
*
|
||||
* @param iotServerConfiguration Instance of the IoTServerConfiguration.
|
||||
* @throws APIMCertificateMGTException
|
||||
*/
|
||||
private static void getClientSecretes(IOTServerConfiguration iotServerConfiguration)
|
||||
private static void getClientSecretes(IOTServerConfiguration iotServerConfiguration, RESTInvoker restInvoker)
|
||||
throws APIMCertificateMGTException {
|
||||
try {
|
||||
String username = iotServerConfiguration.getUsername();
|
||||
@ -180,13 +188,12 @@ public class Utils {
|
||||
dcr.setCallbackUrl(AuthConstants.CALLBACK_URL);
|
||||
dcr.setIsSaasApp(true);
|
||||
String dcrContent = dcr.toJSON();
|
||||
Map<String, String> dcrHeaders = new HashMap<String, String>();
|
||||
Map<String, String> dcrHeaders = new HashMap<>();
|
||||
String basicAuth = Base64.encode((username + ":" + password).getBytes());
|
||||
dcrHeaders.put(AuthConstants.CONTENT_TYPE_HEADER, AuthConstants.CONTENT_TYPE);
|
||||
dcrHeaders.put(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BASIC_AUTH_PREFIX + basicAuth);
|
||||
URI dcrUrl = new URI(iotServerConfiguration.getDynamicClientRegistrationEndpoint());
|
||||
RESTInvoker restInvoker = new RESTInvoker();
|
||||
RESTResponse response = restInvoker.invokePOST(dcrUrl, dcrHeaders, null, null, dcrContent);
|
||||
RESTResponse response = restInvoker.invokePOST(dcrUrl, dcrHeaders, dcrContent);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("DCR response :" + response.getContent());
|
||||
}
|
||||
|
||||
@ -0,0 +1,316 @@
|
||||
/*
|
||||
* 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.apimgt.handlers;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import junit.framework.Assert;
|
||||
import org.apache.axiom.om.OMAbstractFactory;
|
||||
import org.apache.axiom.om.OMDocument;
|
||||
import org.apache.axiom.soap.SOAPEnvelope;
|
||||
import org.apache.axis2.addressing.EndpointReference;
|
||||
import org.apache.axis2.context.ConfigurationContext;
|
||||
import org.apache.axis2.engine.AxisConfiguration;
|
||||
import org.apache.http.ProtocolVersion;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.entity.BasicHttpEntity;
|
||||
import org.apache.http.message.BasicStatusLine;
|
||||
import org.apache.synapse.MessageContext;
|
||||
import org.apache.synapse.config.SynapseConfigUtils;
|
||||
import org.apache.synapse.config.SynapseConfiguration;
|
||||
import org.apache.synapse.core.SynapseEnvironment;
|
||||
import org.apache.synapse.core.axis2.Axis2MessageContext;
|
||||
import org.apache.synapse.core.axis2.Axis2SynapseEnvironment;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.apimgt.handlers.beans.ValidationResponce;
|
||||
import org.wso2.carbon.apimgt.handlers.invoker.RESTInvoker;
|
||||
import org.wso2.carbon.apimgt.handlers.mock.MockClient;
|
||||
import org.wso2.carbon.apimgt.handlers.mock.MockHttpResponse;
|
||||
import org.wso2.carbon.apimgt.handlers.utils.AuthConstants;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import javax.security.cert.X509Certificate;
|
||||
|
||||
/**
|
||||
* This testcase will focus on covering the methods of {@link AuthenticationHandler}
|
||||
*/
|
||||
public class AuthenticationHandlerTest extends BaseAPIHandlerTest {
|
||||
|
||||
private AuthenticationHandler handler;
|
||||
private SynapseConfiguration synapseConfiguration;
|
||||
private MockClient mockClient;
|
||||
|
||||
@BeforeClass
|
||||
public void initTest() {
|
||||
TestUtils.setSystemProperties();
|
||||
this.handler = new AuthenticationHandler();
|
||||
this.synapseConfiguration = new SynapseConfiguration();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with empty transport headers")
|
||||
public void testHandleRequestWithEmptyTransportHeader() throws Exception {
|
||||
boolean response = this.handler.handleRequest(createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
new HashMap<>(), "https://test.com/testservice"));
|
||||
Assert.assertFalse(response);
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with without device type",
|
||||
dependsOnMethods = "testHandleRequestWithEmptyTransportHeader")
|
||||
public void testHandleRequestWithoutDeviceType() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
|
||||
boolean response = this.handler.handleRequest(createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice"));
|
||||
Assert.assertFalse(response);
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with device type URI with MDM ceritificate",
|
||||
dependsOnMethods = "testHandleRequestWithoutDeviceType")
|
||||
public void testHandleSuccessfulRequestMDMCertificate() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getDCRResponse());
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(getValidationResponse());
|
||||
boolean response = this.handler.handleRequest(createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice"));
|
||||
Assert.assertTrue(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with device type URI with Proxy Mutual Auth Header",
|
||||
dependsOnMethods = "testHandleSuccessfulRequestMDMCertificate")
|
||||
public void testHandleSuccessRequestProxyMutualAuthHeader() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.PROXY_MUTUAL_AUTH_HEADER, "Test Header");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(getValidationResponse());
|
||||
boolean response = this.handler.handleRequest(createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice"));
|
||||
Assert.assertTrue(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with device type URI with Mutual Auth Header",
|
||||
dependsOnMethods = "testHandleSuccessRequestProxyMutualAuthHeader")
|
||||
public void testHandleSuccessRequestMutualAuthHeader() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.MUTUAL_AUTH_HEADER, "Test Header");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(getValidationResponse());
|
||||
MessageContext messageContext = createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice");
|
||||
org.apache.axis2.context.MessageContext axisMC = ((Axis2MessageContext) messageContext).getAxis2MessageContext();
|
||||
String certStr = getContent(TestUtils.getAbsolutePathOfConfig("ra_cert.pem"));
|
||||
X509Certificate cert = X509Certificate.getInstance(new ByteArrayInputStream(certStr.
|
||||
getBytes(StandardCharsets.UTF_8.name())));
|
||||
axisMC.setProperty(AuthConstants.CLIENT_CERTIFICATE, new X509Certificate[]{cert});
|
||||
boolean response = this.handler.handleRequest(messageContext);
|
||||
Assert.assertTrue(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with device type URI with Encoded Pem",
|
||||
dependsOnMethods = "testHandleSuccessRequestMutualAuthHeader")
|
||||
public void testHandleSuccessRequestEncodedPem() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(getValidationResponse());
|
||||
MessageContext messageContext = createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice");
|
||||
boolean response = this.handler.handleRequest(messageContext);
|
||||
Assert.assertTrue(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with device type URI with Encoded Pem with invalid response",
|
||||
dependsOnMethods = "testHandleSuccessRequestEncodedPem")
|
||||
public void testHandleSuccessRequestEncodedPemInvalidResponse() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(getInvalidResponse());
|
||||
MessageContext messageContext = createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice");
|
||||
boolean response = this.handler.handleRequest(messageContext);
|
||||
Assert.assertFalse(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with cert management exception ",
|
||||
dependsOnMethods = "testHandleSuccessRequestEncodedPem")
|
||||
public void testHandleRequestWithCertMgmtException() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(null);
|
||||
MessageContext messageContext = createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice");
|
||||
boolean response = this.handler.handleRequest(messageContext);
|
||||
Assert.assertFalse(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with IO exception",
|
||||
dependsOnMethods = "testHandleRequestWithCertMgmtException")
|
||||
public void testHandleRequestWithIOException() throws Exception {
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
|
||||
setMockClient();
|
||||
this.mockClient.setResponse(getAccessTokenReponse());
|
||||
this.mockClient.setResponse(null);
|
||||
MessageContext messageContext = createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice");
|
||||
boolean response = this.handler.handleRequest(messageContext);
|
||||
Assert.assertFalse(response);
|
||||
this.mockClient.reset();
|
||||
}
|
||||
|
||||
@Test(description = "Handle request with URI exception",
|
||||
dependsOnMethods = "testHandleRequestWithIOException")
|
||||
public void testHandleRequestWithURIException() throws Exception {
|
||||
TestUtils.resetSystemProperties();
|
||||
HashMap<String, String> transportHeaders = new HashMap<>();
|
||||
transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
|
||||
AuthenticationHandler handler = new AuthenticationHandler();
|
||||
boolean response = handler.handleRequest(createSynapseMessageContext("<empty/>", this.synapseConfiguration,
|
||||
transportHeaders, "https://test.com/testservice/api/testdevice"));
|
||||
Assert.assertFalse(response);
|
||||
TestUtils.setSystemProperties();
|
||||
}
|
||||
|
||||
@Test(description = "Handle response")
|
||||
public void testHandleResponse() throws Exception {
|
||||
boolean response = this.handler.handleResponse(null);
|
||||
Assert.assertTrue(response);
|
||||
}
|
||||
|
||||
|
||||
private static MessageContext createSynapseMessageContext(
|
||||
String payload, SynapseConfiguration config, HashMap<String, String> transportHeaders,
|
||||
String address) throws Exception {
|
||||
org.apache.axis2.context.MessageContext mc =
|
||||
new org.apache.axis2.context.MessageContext();
|
||||
AxisConfiguration axisConfig = config.getAxisConfiguration();
|
||||
if (axisConfig == null) {
|
||||
axisConfig = new AxisConfiguration();
|
||||
config.setAxisConfiguration(axisConfig);
|
||||
}
|
||||
ConfigurationContext cfgCtx = new ConfigurationContext(axisConfig);
|
||||
SynapseEnvironment env = new Axis2SynapseEnvironment(cfgCtx, config);
|
||||
MessageContext synMc = new Axis2MessageContext(mc, config, env);
|
||||
SOAPEnvelope envelope =
|
||||
OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
|
||||
OMDocument omDoc =
|
||||
OMAbstractFactory.getSOAP11Factory().createOMDocument();
|
||||
omDoc.addChild(envelope);
|
||||
envelope.getBody().addChild(SynapseConfigUtils.stringToOM(payload));
|
||||
synMc.setEnvelope(envelope);
|
||||
synMc.setTo(new EndpointReference(address));
|
||||
org.apache.axis2.context.MessageContext axis2MessageContext =
|
||||
((Axis2MessageContext) synMc).getAxis2MessageContext();
|
||||
axis2MessageContext.setProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS, transportHeaders);
|
||||
return synMc;
|
||||
}
|
||||
|
||||
private void setMockClient() throws NoSuchFieldException, IllegalAccessException {
|
||||
Field restInvokerField = this.handler.getClass().getDeclaredField("restInvoker");
|
||||
restInvokerField.setAccessible(true);
|
||||
RESTInvoker restInvoker = (RESTInvoker) restInvokerField.get(this.handler);
|
||||
Field clientField = restInvoker.getClass().getDeclaredField("client");
|
||||
clientField.setAccessible(true);
|
||||
this.mockClient = new MockClient();
|
||||
clientField.set(restInvoker, this.mockClient);
|
||||
}
|
||||
|
||||
private CloseableHttpResponse getDCRResponse() throws IOException {
|
||||
CloseableHttpResponse mockDCRResponse = new MockHttpResponse();
|
||||
String dcrResponseFile = TestUtils.getAbsolutePathOfConfig("dcr-response.json");
|
||||
BasicHttpEntity responseEntity = new BasicHttpEntity();
|
||||
responseEntity.setContent(new ByteArrayInputStream(getContent(dcrResponseFile).
|
||||
getBytes(StandardCharsets.UTF_8.name())));
|
||||
responseEntity.setContentType(TestUtils.CONTENT_TYPE);
|
||||
mockDCRResponse.setEntity(responseEntity);
|
||||
mockDCRResponse.setStatusLine(new BasicStatusLine(new ProtocolVersion("http", 1, 0), 200, "OK"));
|
||||
return mockDCRResponse;
|
||||
}
|
||||
|
||||
private CloseableHttpResponse getAccessTokenReponse() throws IOException {
|
||||
CloseableHttpResponse mockDCRResponse = new MockHttpResponse();
|
||||
String dcrResponseFile = TestUtils.getAbsolutePathOfConfig("accesstoken-response.json");
|
||||
BasicHttpEntity responseEntity = new BasicHttpEntity();
|
||||
responseEntity.setContent(new ByteArrayInputStream(getContent(dcrResponseFile).
|
||||
getBytes(StandardCharsets.UTF_8.name())));
|
||||
responseEntity.setContentType(TestUtils.CONTENT_TYPE);
|
||||
mockDCRResponse.setEntity(responseEntity);
|
||||
mockDCRResponse.setStatusLine(new BasicStatusLine(new ProtocolVersion("http", 1, 0), 200, "OK"));
|
||||
return mockDCRResponse;
|
||||
}
|
||||
|
||||
private CloseableHttpResponse getValidationResponse() throws UnsupportedEncodingException {
|
||||
ValidationResponce response = new ValidationResponce();
|
||||
response.setDeviceId("1234");
|
||||
response.setDeviceType("testdevice");
|
||||
response.setJWTToken("1234567788888888");
|
||||
response.setTenantId(-1234);
|
||||
Gson gson = new Gson();
|
||||
String jsonReponse = gson.toJson(response);
|
||||
CloseableHttpResponse mockDCRResponse = new MockHttpResponse();
|
||||
BasicHttpEntity responseEntity = new BasicHttpEntity();
|
||||
responseEntity.setContent(new ByteArrayInputStream(jsonReponse.getBytes(StandardCharsets.UTF_8.name())));
|
||||
responseEntity.setContentType(TestUtils.CONTENT_TYPE);
|
||||
mockDCRResponse.setEntity(responseEntity);
|
||||
mockDCRResponse.setStatusLine(new BasicStatusLine(new ProtocolVersion("http", 1, 0), 200, "OK"));
|
||||
return mockDCRResponse;
|
||||
}
|
||||
|
||||
private CloseableHttpResponse getInvalidResponse() throws UnsupportedEncodingException {
|
||||
CloseableHttpResponse mockDCRResponse = new MockHttpResponse();
|
||||
BasicHttpEntity responseEntity = new BasicHttpEntity();
|
||||
responseEntity.setContent(new ByteArrayInputStream("invalid response".getBytes(StandardCharsets.UTF_8.name())));
|
||||
responseEntity.setContentType(TestUtils.CONTENT_TYPE);
|
||||
mockDCRResponse.setEntity(responseEntity);
|
||||
mockDCRResponse.setStatusLine(new BasicStatusLine(new ProtocolVersion("http", 1, 0), 400, "Bad Request"));
|
||||
return mockDCRResponse;
|
||||
}
|
||||
|
||||
private String getContent(String filePath) throws IOException {
|
||||
FileReader fileReader = new FileReader(filePath);
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||
String content = "";
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
content += line + "\n";
|
||||
}
|
||||
bufferedReader.close();
|
||||
return content;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* 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.apimgt.handlers;
|
||||
|
||||
import org.testng.annotations.BeforeSuite;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* This is the base test case for API Handler tests.
|
||||
*/
|
||||
public class BaseAPIHandlerTest {
|
||||
|
||||
@BeforeSuite
|
||||
public void init() {
|
||||
setUpCarbonHome();
|
||||
}
|
||||
|
||||
private void setUpCarbonHome() {
|
||||
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("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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* 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.apimgt.handlers;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.apimgt.handlers.config.IOTServerConfiguration;
|
||||
import org.wso2.carbon.apimgt.handlers.utils.Utils;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* This class validates the behaviour of {@link IOTServerConfiguration}
|
||||
*/
|
||||
public class IOTServerConfigurationTest extends BaseAPIHandlerTest {
|
||||
private static final String CONFIG_DIR = "carbon-home" + File.separator + "repository" + File.separator +
|
||||
"conf" + File.separator;
|
||||
|
||||
@BeforeClass
|
||||
public void initTest(){
|
||||
TestUtils.resetSystemProperties();
|
||||
}
|
||||
|
||||
@Test(description = "Validating the IoT Server configuration initialization without system properties")
|
||||
public void initConfigWithoutSystemProps() {
|
||||
IOTServerConfiguration serverConfiguration = Utils.initConfig();
|
||||
Assert.assertTrue(serverConfiguration != null);
|
||||
Assert.assertEquals(serverConfiguration.getHostname(), "https://${iot.core.host}:${iot.core.https.port}/");
|
||||
Assert.assertEquals(serverConfiguration.getVerificationEndpoint(),
|
||||
"https://${iot.core.host}:${iot.core.https.port}/api/certificate-mgt/v1.0/admin/certificates/verify/");
|
||||
Assert.assertEquals(serverConfiguration.getUsername(), "testuser");
|
||||
Assert.assertEquals(serverConfiguration.getPassword(), "testuserpwd");
|
||||
Assert.assertEquals(serverConfiguration.getDynamicClientRegistrationEndpoint(),
|
||||
"https://${iot.keymanager.host}:${iot.keymanager.https.port}/client-registration/v0.11/register");
|
||||
Assert.assertEquals(serverConfiguration.getOauthTokenEndpoint(),
|
||||
"https://${iot.keymanager.host}:${iot.keymanager.https.port}/oauth2/token");
|
||||
Assert.assertEquals(serverConfiguration.getApis().size(), 1);
|
||||
Assert.assertEquals(serverConfiguration.getApis().get(0).getContextPath(), "/services");
|
||||
}
|
||||
|
||||
@Test(description = "Initializing IoT server config with invalid configuration",
|
||||
dependsOnMethods = "initConfigWithoutSystemProps")
|
||||
public void initConfigWithInvalidConfig() {
|
||||
IOTServerConfiguration serverConfig = Utils.initConfig(TestUtils.getAbsolutePathOfConfig(CONFIG_DIR
|
||||
+ "iot-api-config-invalid.xml"));
|
||||
Assert.assertEquals(serverConfig, null);
|
||||
}
|
||||
|
||||
@Test(description = "Initializing IoT server config with invalid xml",
|
||||
dependsOnMethods = "initConfigWithInvalidConfig")
|
||||
public void initConfigWithInvalidXMLConfig() {
|
||||
IOTServerConfiguration serverConfig = Utils.initConfig(TestUtils.getAbsolutePathOfConfig(CONFIG_DIR +
|
||||
"iot-api-config-invalid-xml.xml"));
|
||||
Assert.assertEquals(serverConfig, null);
|
||||
}
|
||||
|
||||
@Test(description = "Initializing IoT server config with system configs",
|
||||
dependsOnMethods = "initConfigWithInvalidXMLConfig")
|
||||
public void initConfigWithSystemProps() {
|
||||
TestUtils.setSystemProperties();
|
||||
IOTServerConfiguration serverConfiguration = Utils.initConfig();
|
||||
Assert.assertTrue(serverConfiguration != null);
|
||||
Assert.assertEquals(serverConfiguration.getHostname(), "https://" + TestUtils.IOT_CORE_HOST + ":"
|
||||
+ TestUtils.IOT_CORE_HTTPS_PORT
|
||||
+ "/");
|
||||
Assert.assertEquals(serverConfiguration.getVerificationEndpoint(),
|
||||
"https://" + TestUtils.IOT_CORE_HOST + ":" + TestUtils.IOT_CORE_HTTPS_PORT +
|
||||
"/api/certificate-mgt/v1.0/admin/certificates/" +
|
||||
"verify/");
|
||||
Assert.assertEquals(serverConfiguration.getUsername(), "testuser");
|
||||
Assert.assertEquals(serverConfiguration.getPassword(), "testuserpwd");
|
||||
Assert.assertEquals(serverConfiguration.getDynamicClientRegistrationEndpoint(),
|
||||
"https://" + TestUtils.IOT_KEYMANAGER_HOST + ":" + TestUtils.IOT_KEYMANAGER_PORT
|
||||
+ "/client-registration/v0.11/register");
|
||||
Assert.assertEquals(serverConfiguration.getOauthTokenEndpoint(),
|
||||
"https://" + TestUtils.IOT_KEYMANAGER_HOST + ":" + TestUtils.IOT_KEYMANAGER_PORT
|
||||
+ "/oauth2/token");
|
||||
Assert.assertEquals(serverConfiguration.getApis().size(), 1);
|
||||
Assert.assertEquals(serverConfiguration.getApis().get(0).getContextPath(), "/services");
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* 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.apimgt.handlers;
|
||||
|
||||
import org.testng.Assert;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Utils class which provides utility methods for other testcases.
|
||||
*/
|
||||
public class TestUtils {
|
||||
static final String IOT_CORE_HOST = "iot.core.wso2.com";
|
||||
static final String IOT_CORE_HTTPS_PORT = "9443";
|
||||
static final String IOT_KEYMANAGER_HOST = "iot.keymanager.wso2.com";
|
||||
static final String IOT_KEYMANAGER_PORT = "9443";
|
||||
static final String CONTENT_TYPE = "application/json";
|
||||
|
||||
private static final String IOT_HOST_PROPERTY = "iot.core.host";
|
||||
private static final String IOT_PORT_PROPERTY = "iot.core.https.port";
|
||||
private static final String IOT_KEY_MANAGER_HOST_PROPERTY = "iot.keymanager.host";
|
||||
private static final String IOT_KEY_MANAGER_PORT_PROPERTY = "iot.keymanager.https.port";
|
||||
|
||||
static String getAbsolutePathOfConfig(String configFilePath) {
|
||||
ClassLoader classLoader = TestUtils.class.getClassLoader();
|
||||
URL invalidConfig = classLoader.getResource(configFilePath);
|
||||
Assert.assertTrue(invalidConfig != null);
|
||||
File file = new File(invalidConfig.getFile());
|
||||
return file.getAbsolutePath();
|
||||
}
|
||||
|
||||
static void setSystemProperties() {
|
||||
System.setProperty(IOT_HOST_PROPERTY, IOT_CORE_HOST);
|
||||
System.setProperty(IOT_PORT_PROPERTY, IOT_CORE_HTTPS_PORT);
|
||||
System.setProperty(IOT_KEY_MANAGER_HOST_PROPERTY, IOT_KEYMANAGER_HOST);
|
||||
System.setProperty(IOT_KEY_MANAGER_PORT_PROPERTY, IOT_KEYMANAGER_PORT);
|
||||
}
|
||||
|
||||
static void resetSystemProperties() {
|
||||
System.clearProperty(IOT_HOST_PROPERTY);
|
||||
System.clearProperty(IOT_PORT_PROPERTY);
|
||||
System.clearProperty(IOT_KEY_MANAGER_HOST_PROPERTY);
|
||||
System.clearProperty(IOT_KEY_MANAGER_PORT_PROPERTY);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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.apimgt.handlers.mock;
|
||||
|
||||
import org.apache.http.HttpHost;
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.conn.ClientConnectionManager;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Mock implementation for CloseableHttpClient to be used in test cases.
|
||||
*/
|
||||
public class MockClient extends CloseableHttpClient {
|
||||
private List<CloseableHttpResponse> responses = new ArrayList<>();
|
||||
private int responseCount = 0;
|
||||
|
||||
@Override
|
||||
protected CloseableHttpResponse doExecute(HttpHost httpHost, HttpRequest httpRequest, HttpContext httpContext)
|
||||
throws IOException {
|
||||
if (this.responseCount < this.responses.size()) {
|
||||
this.responseCount++;
|
||||
CloseableHttpResponse response = this.responses.get(this.responseCount - 1);
|
||||
if (response == null) {
|
||||
throw new IOException("test exception");
|
||||
}
|
||||
return response;
|
||||
} else {
|
||||
return new MockHttpResponse();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpParams getParams() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientConnectionManager getConnectionManager() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setResponse(CloseableHttpResponse reponse) {
|
||||
this.responses.add(reponse);
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
this.responses.clear();
|
||||
this.responseCount = 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,178 @@
|
||||
/*
|
||||
* 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.apimgt.handlers.mock;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HeaderIterator;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.ProtocolVersion;
|
||||
import org.apache.http.StatusLine;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.params.HttpParams;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Mock http response to be used in the test cases.
|
||||
*
|
||||
*/
|
||||
public class MockHttpResponse implements CloseableHttpResponse {
|
||||
private HttpEntity httpEntity;
|
||||
private StatusLine statusLine;
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatusLine getStatusLine() {
|
||||
return this.statusLine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatusLine(StatusLine statusLine) {
|
||||
this.statusLine = statusLine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatusLine(ProtocolVersion protocolVersion, int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatusLine(ProtocolVersion protocolVersion, int i, String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatusCode(int i) throws IllegalStateException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReasonPhrase(String s) throws IllegalStateException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpEntity getEntity() {
|
||||
return this.httpEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEntity(HttpEntity httpEntity) {
|
||||
this.httpEntity = httpEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Locale getLocale() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocale(Locale locale) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProtocolVersion getProtocolVersion() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsHeader(String s) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header[] getHeaders(String s) {
|
||||
return new Header[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header getFirstHeader(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header getLastHeader(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header[] getAllHeaders() {
|
||||
return new Header[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addHeader(Header header) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addHeader(String s, String s1) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeader(Header header) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeader(String s, String s1) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeaders(Header[] headers) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeHeader(Header header) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeHeaders(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public HeaderIterator headerIterator() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HeaderIterator headerIterator(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpParams getParams() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParams(HttpParams httpParams) {
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
{
|
||||
"scope": "API_SUBSCRIBER_SCOPE",
|
||||
"token_type": "Bearer",
|
||||
"expires_in": 3600,
|
||||
"refresh_token": "33c3be152ebf0030b3fb76f2c1f80bf8",
|
||||
"access_token": "292ff0fd256814536baca0926f483c8d"
|
||||
}
|
||||
@ -0,0 +1,656 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2017 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 is the main server configuration file
|
||||
|
||||
${carbon.home} represents the carbon.home system property.
|
||||
Other system properties can be specified in a similar manner.
|
||||
-->
|
||||
<Server xmlns="http://wso2.org/projects/carbon/carbon.xml">
|
||||
|
||||
<!--
|
||||
Product Name
|
||||
-->
|
||||
<Name>${product.name}</Name>
|
||||
|
||||
<!--
|
||||
machine readable unique key to identify each product
|
||||
-->
|
||||
<ServerKey>${product.key}</ServerKey>
|
||||
|
||||
<!--
|
||||
Product Version
|
||||
-->
|
||||
<Version>${product.version}</Version>
|
||||
|
||||
<!--
|
||||
Host name or IP address of the machine hosting this server
|
||||
e.g. www.wso2.org, 192.168.1.10
|
||||
This is will become part of the End Point Reference of the
|
||||
services deployed on this server instance.
|
||||
-->
|
||||
<!--HostName>www.wso2.org</HostName-->
|
||||
|
||||
<!--
|
||||
Host name to be used for the Carbon management console
|
||||
-->
|
||||
<!--MgtHostName>mgt.wso2.org</MgtHostName-->
|
||||
|
||||
<!--
|
||||
The URL of the back end server. This is where the admin services are hosted and
|
||||
will be used by the clients in the front end server.
|
||||
This is required only for the Front-end server. This is used when seperating BE server from FE server
|
||||
-->
|
||||
<ServerURL>local:/${carbon.context}/services/</ServerURL>
|
||||
<!--
|
||||
<ServerURL>https://${carbon.local.ip}:${carbon.management.port}${carbon.context}/services/</ServerURL>
|
||||
-->
|
||||
<!--
|
||||
The URL of the index page. This is where the user will be redirected after signing in to the
|
||||
carbon server.
|
||||
-->
|
||||
<!-- IndexPageURL>/carbon/admin/index.jsp</IndexPageURL-->
|
||||
|
||||
<!--
|
||||
For cApp deployment, we have to identify the roles that can be acted by the current server.
|
||||
The following property is used for that purpose. Any number of roles can be defined here.
|
||||
Regular expressions can be used in the role.
|
||||
Ex : <Role>.*</Role> means this server can act any role
|
||||
-->
|
||||
<ServerRoles>
|
||||
<Role>${default.server.role}</Role>
|
||||
</ServerRoles>
|
||||
|
||||
<!-- uncommnet this line to subscribe to a bam instance automatically -->
|
||||
<!--<BamServerURL>https://bamhost:bamport/services/</BamServerURL>-->
|
||||
|
||||
<!--
|
||||
The fully qualified name of the server
|
||||
-->
|
||||
<Package>org.wso2.carbon</Package>
|
||||
|
||||
<!--
|
||||
Webapp context root of WSO2 Carbon management console.
|
||||
-->
|
||||
<WebContextRoot>/</WebContextRoot>
|
||||
|
||||
<!--
|
||||
Proxy context path is a useful parameter to add a proxy path when a Carbon server is fronted by reverse proxy. In addtion
|
||||
to the proxy host and proxy port this parameter allows you add a path component to external URLs. e.g.
|
||||
URL of the Carbon server -> https://10.100.1.1:9443/carbon
|
||||
URL of the reverse proxy -> https://prod.abc.com/appserver/carbon
|
||||
|
||||
appserver - proxy context path. This specially required whenever you are generating URLs to displace in
|
||||
Carbon UI components.
|
||||
-->
|
||||
<!--
|
||||
<MgtProxyContextPath></MgtProxyContextPath>
|
||||
<ProxyContextPath></ProxyContextPath>
|
||||
-->
|
||||
|
||||
<!-- In-order to get the registry http Port from the back-end when the default http transport is not the same-->
|
||||
<!--RegistryHttpPort>9763</RegistryHttpPort-->
|
||||
|
||||
<!--
|
||||
Number of items to be displayed on a management console page. This is used at the
|
||||
backend server for pagination of various items.
|
||||
-->
|
||||
<ItemsPerPage>15</ItemsPerPage>
|
||||
|
||||
<!-- The endpoint URL of the cloud instance management Web service -->
|
||||
<!--<InstanceMgtWSEndpoint>https://ec2.amazonaws.com/</InstanceMgtWSEndpoint>-->
|
||||
|
||||
<!--
|
||||
Ports used by this server
|
||||
-->
|
||||
<Ports>
|
||||
|
||||
<!-- Ports offset. This entry will set the value of the ports defined below to
|
||||
the define value + Offset.
|
||||
e.g. Offset=2 and HTTPS port=9443 will set the effective HTTPS port to 9445
|
||||
-->
|
||||
<Offset>0</Offset>
|
||||
|
||||
<!-- The JMX Ports -->
|
||||
<JMX>
|
||||
<!--The port RMI registry is exposed-->
|
||||
<RMIRegistryPort>9999</RMIRegistryPort>
|
||||
<!--The port RMI server should be exposed-->
|
||||
<RMIServerPort>11111</RMIServerPort>
|
||||
</JMX>
|
||||
|
||||
<!-- Embedded LDAP server specific ports -->
|
||||
<EmbeddedLDAP>
|
||||
<!-- Port which embedded LDAP server runs -->
|
||||
<LDAPServerPort>10389</LDAPServerPort>
|
||||
<!-- Port which KDC (Kerberos Key Distribution Center) server runs -->
|
||||
<KDCServerPort>8000</KDCServerPort>
|
||||
</EmbeddedLDAP>
|
||||
|
||||
<!--
|
||||
Override datasources JNDIproviderPort defined in bps.xml and datasources.properties files
|
||||
-->
|
||||
<!--<JNDIProviderPort>2199</JNDIProviderPort>-->
|
||||
<!--Override receive port of thrift based entitlement service.-->
|
||||
<ThriftEntitlementReceivePort>10500</ThriftEntitlementReceivePort>
|
||||
|
||||
</Ports>
|
||||
|
||||
<!--
|
||||
JNDI Configuration
|
||||
-->
|
||||
<JNDI>
|
||||
<!--
|
||||
The fully qualified name of the default initial context factory
|
||||
-->
|
||||
<DefaultInitialContextFactory>org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory</DefaultInitialContextFactory>
|
||||
<!--
|
||||
The restrictions that are done to various JNDI Contexts in a Multi-tenant environment
|
||||
-->
|
||||
<Restrictions>
|
||||
<!--
|
||||
Contexts that will be available only to the super-tenant
|
||||
-->
|
||||
<!-- <SuperTenantOnly>
|
||||
<UrlContexts>
|
||||
<UrlContext>
|
||||
<Scheme>foo</Scheme>
|
||||
</UrlContext>
|
||||
<UrlContext>
|
||||
<Scheme>bar</Scheme>
|
||||
</UrlContext>
|
||||
</UrlContexts>
|
||||
</SuperTenantOnly> -->
|
||||
<!--
|
||||
Contexts that are common to all tenants
|
||||
-->
|
||||
<AllTenants>
|
||||
<UrlContexts>
|
||||
<UrlContext>
|
||||
<Scheme>java</Scheme>
|
||||
</UrlContext>
|
||||
<!-- <UrlContext>
|
||||
<Scheme>foo</Scheme>
|
||||
</UrlContext> -->
|
||||
</UrlContexts>
|
||||
</AllTenants>
|
||||
<!--
|
||||
All other contexts not mentioned above will be available on a per-tenant basis
|
||||
(i.e. will not be shared among tenants)
|
||||
-->
|
||||
</Restrictions>
|
||||
</JNDI>
|
||||
|
||||
<!--
|
||||
Property to determine if the server is running an a cloud deployment environment.
|
||||
This property should only be used to determine deployment specific details that are
|
||||
applicable only in a cloud deployment, i.e when the server deployed *-as-a-service.
|
||||
-->
|
||||
<IsCloudDeployment>false</IsCloudDeployment>
|
||||
|
||||
<!--
|
||||
Property to determine whether usage data should be collected for metering purposes
|
||||
-->
|
||||
<EnableMetering>false</EnableMetering>
|
||||
|
||||
<!-- The Max time a thread should take for execution in seconds -->
|
||||
<MaxThreadExecutionTime>600</MaxThreadExecutionTime>
|
||||
|
||||
<!--
|
||||
A flag to enable or disable Ghost Deployer. By default this is set to false. That is
|
||||
because the Ghost Deployer works only with the HTTP/S transports. If you are using
|
||||
other transports, don't enable Ghost Deployer.
|
||||
-->
|
||||
<GhostDeployment>
|
||||
<Enabled>false</Enabled>
|
||||
</GhostDeployment>
|
||||
|
||||
|
||||
<!--
|
||||
Eager loading or lazy loading is a design pattern commonly used in computer programming which
|
||||
will initialize an object upon creation or load on-demand. In carbon, lazy loading is used to
|
||||
load tenant when a request is received only. Similarly Eager loading is used to enable load
|
||||
existing tenants after carbon server starts up. Using this feature, you will be able to include
|
||||
or exclude tenants which are to be loaded when server startup.
|
||||
|
||||
We can enable only one LoadingPolicy at a given time.
|
||||
|
||||
1. Tenant Lazy Loading
|
||||
This is the default behaviour and enabled by default. With this policy, tenants are not loaded at
|
||||
server startup, but loaded based on-demand (i.e when a request is received for a tenant).
|
||||
The default tenant idle time is 30 minutes.
|
||||
|
||||
2. Tenant Eager Loading
|
||||
This is by default not enabled. It can be be enabled by un-commenting the <EagerLoading> section.
|
||||
The eager loading configurations supported are as below. These configurations can be given as the
|
||||
value for <Include> element with eager loading.
|
||||
(i)Load all tenants when server startup - *
|
||||
(ii)Load all tenants except foo.com & bar.com - *,!foo.com,!bar.com
|
||||
(iii)Load only foo.com & bar.com to be included - foo.com,bar.com
|
||||
-->
|
||||
<Tenant>
|
||||
<LoadingPolicy>
|
||||
<LazyLoading>
|
||||
<IdleTime>30</IdleTime>
|
||||
</LazyLoading>
|
||||
<!-- <EagerLoading>
|
||||
<Include>*,!foo.com,!bar.com</Include>
|
||||
</EagerLoading>-->
|
||||
</LoadingPolicy>
|
||||
</Tenant>
|
||||
|
||||
<!--
|
||||
Caching related configurations
|
||||
-->
|
||||
<Cache>
|
||||
<!-- Default cache timeout in minutes -->
|
||||
<DefaultCacheTimeout>15</DefaultCacheTimeout>
|
||||
</Cache>
|
||||
|
||||
<!--
|
||||
Axis2 related configurations
|
||||
-->
|
||||
<Axis2Config>
|
||||
<!--
|
||||
Location of the Axis2 Services & Modules repository
|
||||
|
||||
This can be a directory in the local file system, or a URL.
|
||||
|
||||
e.g.
|
||||
1. /home/wso2wsas/repository/ - An absolute path
|
||||
2. repository - In this case, the path is relative to CARBON_HOME
|
||||
3. file:///home/wso2wsas/repository/
|
||||
4. http://wso2wsas/repository/
|
||||
-->
|
||||
<RepositoryLocation>${carbon.home}/repository/deployment/server/</RepositoryLocation>
|
||||
|
||||
<!--
|
||||
Deployment update interval in seconds. This is the interval between repository listener
|
||||
executions.
|
||||
-->
|
||||
<DeploymentUpdateInterval>15</DeploymentUpdateInterval>
|
||||
|
||||
<!--
|
||||
Location of the main Axis2 configuration descriptor file, a.k.a. axis2.xml file
|
||||
|
||||
This can be a file on the local file system, or a URL
|
||||
|
||||
e.g.
|
||||
1. /home/repository/axis2.xml - An absolute path
|
||||
2. conf/axis2.xml - In this case, the path is relative to CARBON_HOME
|
||||
3. file:///home/carbon/repository/axis2.xml
|
||||
4. http://repository/conf/axis2.xml
|
||||
-->
|
||||
<ConfigurationFile>${carbon.home}/repository/conf/axis2/axis2.xml</ConfigurationFile>
|
||||
|
||||
<!--
|
||||
ServiceGroupContextIdleTime, which will be set in ConfigurationContex
|
||||
for multiple clients which are going to access the same ServiceGroupContext
|
||||
Default Value is 30 Sec.
|
||||
-->
|
||||
<ServiceGroupContextIdleTime>30000</ServiceGroupContextIdleTime>
|
||||
|
||||
<!--
|
||||
This repository location is used to crete the client side configuration
|
||||
context used by the server when calling admin services.
|
||||
-->
|
||||
<ClientRepositoryLocation>${carbon.home}/repository/deployment/client/</ClientRepositoryLocation>
|
||||
<!-- This axis2 xml is used in createing the configuration context by the FE server
|
||||
calling to BE server -->
|
||||
<clientAxis2XmlLocation>${carbon.home}/repository/conf/axis2/axis2_client.xml</clientAxis2XmlLocation>
|
||||
<!-- If this parameter is set, the ?wsdl on an admin service will not give the admin service wsdl. -->
|
||||
<HideAdminServiceWSDLs>true</HideAdminServiceWSDLs>
|
||||
|
||||
<!--WARNING-Use With Care! Uncommenting bellow parameter would expose all AdminServices in HTTP transport.
|
||||
With HTTP transport your credentials and data routed in public channels are vulnerable for sniffing attacks.
|
||||
Use bellow parameter ONLY if your communication channels are confirmed to be secured by other means -->
|
||||
<!--HttpAdminServices>*</HttpAdminServices-->
|
||||
|
||||
</Axis2Config>
|
||||
|
||||
<!--
|
||||
The default user roles which will be created when the server
|
||||
is started up for the first time.
|
||||
-->
|
||||
<ServiceUserRoles>
|
||||
<Role>
|
||||
<Name>admin</Name>
|
||||
<Description>Default Administrator Role</Description>
|
||||
</Role>
|
||||
<Role>
|
||||
<Name>user</Name>
|
||||
<Description>Default User Role</Description>
|
||||
</Role>
|
||||
</ServiceUserRoles>
|
||||
|
||||
<!--
|
||||
Enable following config to allow Emails as usernames.
|
||||
-->
|
||||
<!--EnableEmailUserName>true</EnableEmailUserName-->
|
||||
|
||||
<!--
|
||||
Security configurations
|
||||
-->
|
||||
<Security>
|
||||
<!--
|
||||
KeyStore which will be used for encrypting/decrypting passwords
|
||||
and other sensitive information.
|
||||
-->
|
||||
<KeyStore>
|
||||
<!-- Keystore file location-->
|
||||
<Location>${carbon.home}/repository/resources/security/wso2carbon.jks</Location>
|
||||
<!-- Keystore type (JKS/PKCS12 etc.)-->
|
||||
<Type>JKS</Type>
|
||||
<!-- Keystore password-->
|
||||
<Password>wso2carbon</Password>
|
||||
<!-- Private Key alias-->
|
||||
<KeyAlias>wso2carbon</KeyAlias>
|
||||
<!-- Private Key password-->
|
||||
<KeyPassword>wso2carbon</KeyPassword>
|
||||
</KeyStore>
|
||||
|
||||
<!--
|
||||
System wide trust-store which is used to maintain the certificates of all
|
||||
the trusted parties.
|
||||
-->
|
||||
<TrustStore>
|
||||
<!-- trust-store file location -->
|
||||
<Location>${carbon.home}/repository/resources/security/client-truststore.jks</Location>
|
||||
<!-- trust-store type (JKS/PKCS12 etc.) -->
|
||||
<Type>JKS</Type>
|
||||
<!-- trust-store password -->
|
||||
<Password>wso2carbon</Password>
|
||||
</TrustStore>
|
||||
|
||||
<!--
|
||||
The Authenticator configuration to be used at the JVM level. We extend the
|
||||
java.net.Authenticator to make it possible to authenticate to given servers and
|
||||
proxies.
|
||||
-->
|
||||
<NetworkAuthenticatorConfig>
|
||||
<!--
|
||||
Below is a sample configuration for a single authenticator. Please note that
|
||||
all child elements are mandatory. Not having some child elements would lead to
|
||||
exceptions at runtime.
|
||||
-->
|
||||
<!-- <Credential> -->
|
||||
<!--
|
||||
the pattern that would match a subset of URLs for which this authenticator
|
||||
would be used
|
||||
-->
|
||||
<!-- <Pattern>regularExpression</Pattern> -->
|
||||
<!--
|
||||
the type of this authenticator. Allowed values are:
|
||||
1. server
|
||||
2. proxy
|
||||
-->
|
||||
<!-- <Type>proxy</Type> -->
|
||||
<!-- the username used to log in to server/proxy -->
|
||||
<!-- <Username>username</Username> -->
|
||||
<!-- the password used to log in to server/proxy -->
|
||||
<!-- <Password>password</Password> -->
|
||||
<!-- </Credential> -->
|
||||
</NetworkAuthenticatorConfig>
|
||||
|
||||
<!--
|
||||
The Tomcat realm to be used for hosted Web applications. Allowed values are;
|
||||
1. UserManager
|
||||
2. Memory
|
||||
|
||||
If this is set to 'UserManager', the realm will pick users & roles from the system's
|
||||
WSO2 User Manager. If it is set to 'memory', the realm will pick users & roles from
|
||||
CARBON_HOME/repository/conf/tomcat/tomcat-users.xml
|
||||
-->
|
||||
<TomcatRealm>UserManager</TomcatRealm>
|
||||
|
||||
<!--Option to disable storing of tokens issued by STS-->
|
||||
<DisableTokenStore>false</DisableTokenStore>
|
||||
|
||||
<!--
|
||||
Security token store class name. If this is not set, default class will be
|
||||
org.wso2.carbon.security.util.SecurityTokenStore
|
||||
-->
|
||||
<!--TokenStoreClassName>org.wso2.carbon.identity.sts.store.DBTokenStore</TokenStoreClassName-->
|
||||
</Security>
|
||||
|
||||
<!--
|
||||
The temporary work directory
|
||||
-->
|
||||
<WorkDirectory>${carbon.home}/tmp/work</WorkDirectory>
|
||||
|
||||
<!--
|
||||
House-keeping configuration
|
||||
-->
|
||||
<HouseKeeping>
|
||||
|
||||
<!--
|
||||
true - Start House-keeping thread on server startup
|
||||
false - Do not start House-keeping thread on server startup.
|
||||
The user will run it manually as and when he wishes.
|
||||
-->
|
||||
<AutoStart>true</AutoStart>
|
||||
|
||||
<!--
|
||||
The interval in *minutes*, between house-keeping runs
|
||||
-->
|
||||
<Interval>10</Interval>
|
||||
|
||||
<!--
|
||||
The maximum time in *minutes*, temp files are allowed to live
|
||||
in the system. Files/directories which were modified more than
|
||||
"MaxTempFileLifetime" minutes ago will be removed by the
|
||||
house-keeping task
|
||||
-->
|
||||
<MaxTempFileLifetime>30</MaxTempFileLifetime>
|
||||
</HouseKeeping>
|
||||
|
||||
<!--
|
||||
Configuration for handling different types of file upload & other file uploading related
|
||||
config parameters.
|
||||
To map all actions to a particular FileUploadExecutor, use
|
||||
<Action>*</Action>
|
||||
-->
|
||||
<FileUploadConfig>
|
||||
<!--
|
||||
The total file upload size limit in MB
|
||||
-->
|
||||
<TotalFileSizeLimit>100</TotalFileSizeLimit>
|
||||
|
||||
<Mapping>
|
||||
<Actions>
|
||||
<Action>keystore</Action>
|
||||
<Action>certificate</Action>
|
||||
<Action>*</Action>
|
||||
</Actions>
|
||||
<Class>org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor</Class>
|
||||
</Mapping>
|
||||
|
||||
<Mapping>
|
||||
<Actions>
|
||||
<Action>jarZip</Action>
|
||||
</Actions>
|
||||
<Class>org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor</Class>
|
||||
</Mapping>
|
||||
<Mapping>
|
||||
<Actions>
|
||||
<Action>dbs</Action>
|
||||
</Actions>
|
||||
<Class>org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor</Class>
|
||||
</Mapping>
|
||||
<Mapping>
|
||||
<Actions>
|
||||
<Action>tools</Action>
|
||||
</Actions>
|
||||
<Class>org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor</Class>
|
||||
</Mapping>
|
||||
<Mapping>
|
||||
<Actions>
|
||||
<Action>toolsAny</Action>
|
||||
</Actions>
|
||||
<Class>org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor</Class>
|
||||
</Mapping>
|
||||
</FileUploadConfig>
|
||||
|
||||
<!--
|
||||
Processors which process special HTTP GET requests such as ?wsdl, ?policy etc.
|
||||
|
||||
In order to plug in a processor to handle a special request, simply add an entry to this
|
||||
section.
|
||||
|
||||
The value of the Item element is the first parameter in the query string(e.g. ?wsdl)
|
||||
which needs special processing
|
||||
|
||||
The value of the Class element is a class which implements
|
||||
org.wso2.carbon.transport.HttpGetRequestProcessor
|
||||
-->
|
||||
<HttpGetRequestProcessors>
|
||||
<Processor>
|
||||
<Item>info</Item>
|
||||
<Class>org.wso2.carbon.core.transports.util.InfoProcessor</Class>
|
||||
</Processor>
|
||||
<Processor>
|
||||
<Item>wsdl</Item>
|
||||
<Class>org.wso2.carbon.core.transports.util.Wsdl11Processor</Class>
|
||||
</Processor>
|
||||
<Processor>
|
||||
<Item>wsdl2</Item>
|
||||
<Class>org.wso2.carbon.core.transports.util.Wsdl20Processor</Class>
|
||||
</Processor>
|
||||
<Processor>
|
||||
<Item>xsd</Item>
|
||||
<Class>org.wso2.carbon.core.transports.util.XsdProcessor</Class>
|
||||
</Processor>
|
||||
</HttpGetRequestProcessors>
|
||||
|
||||
<!-- Deployment Synchronizer Configuration. t Enabled value to true when running with "svn based" dep sync.
|
||||
In master nodes you need to set both AutoCommit and AutoCheckout to true
|
||||
and in worker nodes set only AutoCheckout to true.
|
||||
-->
|
||||
<DeploymentSynchronizer>
|
||||
<Enabled>false</Enabled>
|
||||
<AutoCommit>false</AutoCommit>
|
||||
<AutoCheckout>true</AutoCheckout>
|
||||
<RepositoryType>svn</RepositoryType>
|
||||
<SvnUrl>http://svnrepo.example.com/repos/</SvnUrl>
|
||||
<SvnUser>username</SvnUser>
|
||||
<SvnPassword>password</SvnPassword>
|
||||
<SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
|
||||
</DeploymentSynchronizer>
|
||||
|
||||
<!-- Deployment Synchronizer Configuration. Uncomment the following section when running with "registry based" dep sync.
|
||||
In master nodes you need to set both AutoCommit and AutoCheckout to true
|
||||
and in worker nodes set only AutoCheckout to true.
|
||||
-->
|
||||
<!--<DeploymentSynchronizer>
|
||||
<Enabled>true</Enabled>
|
||||
<AutoCommit>false</AutoCommit>
|
||||
<AutoCheckout>true</AutoCheckout>
|
||||
</DeploymentSynchronizer>-->
|
||||
|
||||
<!-- Mediation persistence configurations. Only valid if mediation features are available i.e. ESB -->
|
||||
<!--<MediationConfig>
|
||||
<LoadFromRegistry>false</LoadFromRegistry>
|
||||
<SaveToFile>false</SaveToFile>
|
||||
<Persistence>enabled</Persistence>
|
||||
<RegistryPersistence>enabled</RegistryPersistence>
|
||||
</MediationConfig>-->
|
||||
|
||||
<!--
|
||||
Server intializing code, specified as implementation classes of org.wso2.carbon.core.ServerInitializer.
|
||||
This code will be run when the Carbon server is initialized
|
||||
-->
|
||||
<ServerInitializers>
|
||||
<!--<Initializer></Initializer>-->
|
||||
</ServerInitializers>
|
||||
|
||||
<!--
|
||||
Indicates whether the Carbon Servlet is required by the system, and whether it should be
|
||||
registered
|
||||
-->
|
||||
<RequireCarbonServlet>${require.carbon.servlet}</RequireCarbonServlet>
|
||||
|
||||
<!--
|
||||
Carbon H2 OSGI Configuration
|
||||
By default non of the servers start.
|
||||
name="web" - Start the web server with the H2 Console
|
||||
name="webPort" - The port (default: 8082)
|
||||
name="webAllowOthers" - Allow other computers to connect
|
||||
name="webSSL" - Use encrypted (HTTPS) connections
|
||||
name="tcp" - Start the TCP server
|
||||
name="tcpPort" - The port (default: 9092)
|
||||
name="tcpAllowOthers" - Allow other computers to connect
|
||||
name="tcpSSL" - Use encrypted (SSL) connections
|
||||
name="pg" - Start the PG server
|
||||
name="pgPort" - The port (default: 5435)
|
||||
name="pgAllowOthers" - Allow other computers to connect
|
||||
name="trace" - Print additional trace information; for all servers
|
||||
name="baseDir" - The base directory for H2 databases; for all servers
|
||||
-->
|
||||
<!--H2DatabaseConfiguration>
|
||||
<property name="web" />
|
||||
<property name="webPort">8082</property>
|
||||
<property name="webAllowOthers" />
|
||||
<property name="webSSL" />
|
||||
<property name="tcp" />
|
||||
<property name="tcpPort">9092</property>
|
||||
<property name="tcpAllowOthers" />
|
||||
<property name="tcpSSL" />
|
||||
<property name="pg" />
|
||||
<property name="pgPort">5435</property>
|
||||
<property name="pgAllowOthers" />
|
||||
<property name="trace" />
|
||||
<property name="baseDir">${carbon.home}</property>
|
||||
</H2DatabaseConfiguration-->
|
||||
<!--Disabling statistics reporter by default-->
|
||||
<StatisticsReporterDisabled>true</StatisticsReporterDisabled>
|
||||
|
||||
<!-- Enable accessing Admin Console via HTTP -->
|
||||
<!-- EnableHTTPAdminConsole>true</EnableHTTPAdminConsole -->
|
||||
|
||||
<!--
|
||||
Default Feature Repository of WSO2 Carbon.
|
||||
-->
|
||||
<FeatureRepository>
|
||||
<RepositoryName>default repository</RepositoryName>
|
||||
<RepositoryURL>${p2.repo.url}</RepositoryURL>
|
||||
</FeatureRepository>
|
||||
|
||||
<!--
|
||||
Configure API Management
|
||||
-->
|
||||
<APIManagement>
|
||||
|
||||
<!--Uses the embedded API Manager by default. If you want to use an external
|
||||
API Manager instance to manage APIs, configure below externalAPIManager-->
|
||||
|
||||
<Enabled>true</Enabled>
|
||||
|
||||
<!--Uncomment and configure API Gateway and
|
||||
Publisher URLs to use external API Manager instance-->
|
||||
|
||||
<!--ExternalAPIManager>
|
||||
|
||||
<APIGatewayURL>http://localhost:8281</APIGatewayURL>
|
||||
<APIPublisherURL>http://localhost:8281/publisher</APIPublisherURL>
|
||||
|
||||
</ExternalAPIManager-->
|
||||
|
||||
<LoadAPIContextsInServerStartup>true</LoadAPIContextsInServerStartup>
|
||||
</APIManagement>
|
||||
</Server>
|
||||
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<ServerConfig>
|
||||
<!-- IoT server host name, this is referred from APIM gateway to call to IoT server for certificate validation-->
|
||||
<Hostname>https://${iot.core.host}:${iot.core.https.port}/</Hostname>
|
||||
|
||||
<!--End point to verify the certificate-->
|
||||
<VerificationEndpoint>https://${iot.core.host}:${iot.core.https.port}/api/certificate-mgt/v1.0/admin/certificates/verify/</VerificationEndpoint>
|
||||
|
||||
<!--Admin username/password - this is to use for oauth token generation-->
|
||||
<Username>testuser</Username>
|
||||
<Password>testuserpwd</Password>
|
||||
|
||||
<!--Dynamic client registration endpoint-->
|
||||
<DynamicClientRegistrationEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/client-registration/v0.11/register</DynamicClientRegistrationEndpoint>
|
||||
|
||||
<!--Oauth token endpoint-->
|
||||
<OauthTokenEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/oauth2/token</OauthTokenEndpoint>
|
||||
|
||||
<APIS>
|
||||
<ContextPath>/services</ContextPath>
|
||||
</APIS>
|
||||
</ServerConfig
|
||||
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<ServerConfig>
|
||||
<!-- IoT server host name, this is referred from APIM gateway to call to IoT server for certificate validation-->
|
||||
<Hostname>https://${iot.core.host}:${iot.core.https.port}/</Hostname>
|
||||
|
||||
<!--End point to verify the certificate-->
|
||||
<VerificationEndpoint>https://${iot.core.host}:${iot.core.https.port}/api/certificate-mgt/v1.0/admin/certificates/verify/</VerificationEndpoint>
|
||||
|
||||
<!--Admin username/password - this is to use for oauth token generation-->
|
||||
<Username>testuser</Username>
|
||||
<Password>testuserpwd</Password>
|
||||
|
||||
<!--Dynamic client registration endpoint-->
|
||||
<DynamicClientRegistrationEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/client-registration/v0.11/register</DynamicClientRegistrationEndpoint>
|
||||
|
||||
<!--Oauth token endpoint-->
|
||||
<OauthTokenEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/oauth2/token</OauthTokenEndpoint>
|
||||
|
||||
<APIS>
|
||||
<ContextPath>/services</ContextPath>
|
||||
</APIS>
|
||||
</ServerConfig>
|
||||
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<ServerConfiguration>
|
||||
<!-- IoT server host name, this is referred from APIM gateway to call to IoT server for certificate validation-->
|
||||
<Hostname>https://${iot.core.host}:${iot.core.https.port}/</Hostname>
|
||||
|
||||
<!--End point to verify the certificate-->
|
||||
<VerificationEndpoint>https://${iot.core.host}:${iot.core.https.port}/api/certificate-mgt/v1.0/admin/certificates/verify/</VerificationEndpoint>
|
||||
|
||||
<!--Admin username/password - this is to use for oauth token generation-->
|
||||
<Username>testuser</Username>
|
||||
<Password>testuserpwd</Password>
|
||||
|
||||
<!--Dynamic client registration endpoint-->
|
||||
<DynamicClientRegistrationEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/client-registration/v0.11/register</DynamicClientRegistrationEndpoint>
|
||||
|
||||
<!--Oauth token endpoint-->
|
||||
<OauthTokenEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/oauth2/token</OauthTokenEndpoint>
|
||||
|
||||
<APIS>
|
||||
<ContextPath>/services</ContextPath>
|
||||
</APIS>
|
||||
</ServerConfiguration>
|
||||
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2017 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.
|
||||
-->
|
||||
<wso2registry>
|
||||
|
||||
<!--
|
||||
For details on configuring different config & governance registries see;
|
||||
http://wso2.org/library/tutorials/2010/04/sharing-registry-space-across-multiple-product-instances
|
||||
-->
|
||||
|
||||
<currentDBConfig>wso2registry</currentDBConfig>
|
||||
<readOnly>false</readOnly>
|
||||
<enableCache>true</enableCache>
|
||||
<registryRoot>/</registryRoot>
|
||||
|
||||
<dbConfig name="wso2registry">
|
||||
<url>jdbc:h2:./target/databasetest/CARBON_TEST</url>
|
||||
<!--userName>sa</userName>
|
||||
<password>sa</password-->
|
||||
<driverName>org.h2.Driver</driverName>
|
||||
<maxActive>80</maxActive>
|
||||
<maxWait>60000</maxWait>
|
||||
<minIdle>5</minIdle>
|
||||
</dbConfig>
|
||||
|
||||
<versionResourcesOnChange>false</versionResourcesOnChange>
|
||||
|
||||
<!-- NOTE: You can edit the options under "StaticConfiguration" only before the
|
||||
startup. -->
|
||||
<staticConfiguration>
|
||||
<versioningProperties>true</versioningProperties>
|
||||
<versioningComments>true</versioningComments>
|
||||
<versioningTags>true</versioningTags>
|
||||
<versioningRatings>true</versioningRatings>
|
||||
</staticConfiguration>
|
||||
</wso2registry>
|
||||
@ -0,0 +1,6 @@
|
||||
{
|
||||
"callBackURL": "www.google.lk",
|
||||
"clientName": null,
|
||||
"clientId": "HfEl1jJPdg5tbtrxhAwybN05QGoa",
|
||||
"clientSecret": "l6c0aoLcWR3fwezHhc7XoGOht5Aa"
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFqDCCA5CgAwIBAgIBAjANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMCVVMx
|
||||
DTALBgNVBAgTBFRlc3QxDTALBgNVBAcTBFRlc3QxETAPBgNVBAoTCFRlc3QgT3Jn
|
||||
MRYwFAYDVQQLEw1UZXN0IG9yZyB1bml0MRUwEwYDVQQDEwxXU08yIFJvb3QgQ0Ex
|
||||
HDAaBgkqhkiG9w0BCQEWDXJvb3RAd3NvMi5jb20wHhcNMTUwMTI3MTI1MzAxWhcN
|
||||
MTcxMDIzMTI1MzAxWjCBgzELMAkGA1UEBhMCVVMxGTAXBgNVBAgTEFRlc3QgUkEg
|
||||
UHJvdmluY2UxFTATBgNVBAcTDFRlc3QgUkEgQ2l0eTEUMBIGA1UEChMLVGVzdCBS
|
||||
QSBPcmcxGTAXBgNVBAsTEFRlc3QgUkEgb3JnIHVuaXQxETAPBgNVBAMTCFdTTzIg
|
||||
UkEgMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtUMgUlYYU3/TPfEe
|
||||
zNAvBaiOi/jUjfZ9IbxvMl7obDT17/5vU68TCGkZRjyfYUEiGNBisUEFWjSk/sGL
|
||||
/ofYKUAxw33cd456FLMjaJX/4Zk4y8eYB1m1GGlHejoDyjPhq8S6GDmy+PXbJr8n
|
||||
lSTROR2mQHkGwYrCreWeU4AYWzdctIFk7U2DKeIvZYSidIIjfSpDXURxrt9LPvig
|
||||
fMzr5l/WkZfjvk5S+W7rgMtpllxlEPgyDc07pNAdNSq5FB990oaUsVX8o6l6wdCw
|
||||
grYz83edPOKwZa04fsVztz2oF3ZYSGGjD3lwh0KS/jUL+awRyhMx5p/O1hySg6PP
|
||||
pJjeqRuobNTuwSAXxp3nsNSY0DkGW04pSxWoDQqhnpaqBbAf71l6ya2e3so1SHm/
|
||||
jouWSYTHncq5bmGE4AN7ZGVGZvfx84+UR8fNxJxxLo+DFFE0oJNzpPGNxILpHxgT
|
||||
V7IOII6mhfkrQk+AFQiW2Y5FXLVYv8r+SPXW8pYsjaWl971XZeM/HC3L9IZkCrrr
|
||||
a0ID5oT6vt+xTmdo4yiBqIP5TBYm+1a9YzMAy7XGtPih9k6cufMLcfzvUZdOXw9x
|
||||
3T05nM5ZtcDq0gHvUzQ7sfHTguWVnuHVEdb2ox4x2L5NzEA475fbSdXpMok9z/z7
|
||||
Xa71vIZi28InDAFBQehUlJnFtf0CAwEAAaMdMBswDAYDVR0TBAUwAwEB/zALBgNV
|
||||
HQ8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggIBAAO0TwnQBMJvL8wbfsnTqAGCCHM4
|
||||
x1cpW+KgTmflPEliYGOn/dJYDz/dUowCgoj5mrSxjQ3G1/qL+9Y7E33h0tyw37vH
|
||||
YDL1p2Tn+fwmXRHrk+CHoPHNcImEfSIDWbbG7ehBR6erVfbQSZjmj4fwPkItp8rP
|
||||
nyUtXHOLpfFYoAxYkNP9+C8vpC9W/H1pj3rzmQFA1z+EZAKVV7vDAxbe6sun84nf
|
||||
YAaMSIzHx1B+XLHokgChmnZr3wV7EypBEmmKp4ITvJqK7WsIG9t1M6hI7OTPCURR
|
||||
mdy+DJtIoIUbZxHyIyC9nPcVJFkdBusnfXq4uMb0KMaWYCU8ESqZPySukF2qZ5KA
|
||||
acB+0ZhY+EGQ6QF/hB6iiUj96BlQ7XAPXFU6xUt6nRjDiJmb3vW1IEv0hpbs7PRl
|
||||
UMlbOwQk37rXpFqQc6ZW7lsxI2RmfkD4DOkQIGH3q5foVr+PEp0uSPWrFX62eBet
|
||||
1S4c/opVv6BcuUgilYABHTYxb45GfYwJAI9Qw2uQWT8DmhtVbcYu6GLYGlnRyaOC
|
||||
EPzc0z0KQTjhsgHWzi60IYBBh+fy+Z7w5X1rTTvhFOoU5J7kedGEqiBatIZmhF5t
|
||||
UFbT0u350ET5a0Kg83gu5aLwXdoIP9o7bp3XzLBMVNny2RX3tOHUA2HBe/p0h0OU
|
||||
Ggt3G6oD0gBe9pZI
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,30 @@
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||
|
||||
<suite name="DeviceManagementExtensions">
|
||||
<parameter name="useDefaultListeners" value="false"/>
|
||||
|
||||
<test name="API Management Auth Handlers" preserve-order="true">
|
||||
<classes>
|
||||
<class name="org.wso2.carbon.apimgt.handlers.IOTServerConfigurationTest"/>
|
||||
<class name="org.wso2.carbon.apimgt.handlers.AuthenticationHandlerTest"/>
|
||||
</classes>
|
||||
</test>
|
||||
</suite>
|
||||
@ -13,13 +13,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Integration Client</name>
|
||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||
@ -80,6 +80,32 @@
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
@ -25,14 +25,32 @@ import org.wso2.carbon.apimgt.integration.client.store.StoreClient;
|
||||
|
||||
public class IntegrationClientServiceImpl implements IntegrationClientService {
|
||||
|
||||
private static StoreClient storeClient;
|
||||
private static PublisherClient publisherClient;
|
||||
private static IntegrationClientServiceImpl instance;
|
||||
private StoreClient storeClient;
|
||||
private PublisherClient publisherClient;
|
||||
private OAuthRequestInterceptor oAuthRequestInterceptor;
|
||||
|
||||
public IntegrationClientServiceImpl() {
|
||||
RequestInterceptor oAuthRequestInterceptor = new OAuthRequestInterceptor();
|
||||
private IntegrationClientServiceImpl() {
|
||||
oAuthRequestInterceptor = new OAuthRequestInterceptor();
|
||||
storeClient = new StoreClient(oAuthRequestInterceptor);
|
||||
publisherClient = new PublisherClient(oAuthRequestInterceptor);
|
||||
}
|
||||
|
||||
public static IntegrationClientServiceImpl getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (IntegrationClientService.class) {
|
||||
if (instance == null) {
|
||||
instance = new IntegrationClientServiceImpl();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public void resetUserInfo(String userName, String tenantDomain) {
|
||||
oAuthRequestInterceptor.removeToken(userName, tenantDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreClient getStoreClient() {
|
||||
return storeClient;
|
||||
|
||||
@ -40,6 +40,7 @@ import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientExceptio
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* This is a request interceptor to add oauth token header.
|
||||
@ -55,7 +56,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
|
||||
private static final long DEFAULT_REFRESH_TIME_OFFSET_IN_MILLIS = 100000;
|
||||
private DCRClient dcrClient;
|
||||
private static OAuthApplication oAuthApplication;
|
||||
private static Map<String, AccessTokenInfo> tenantUserTokenMap = new HashMap<>();
|
||||
private static Map<String, AccessTokenInfo> tenantUserTokenMap = new ConcurrentHashMap<>();
|
||||
private static final Log log = LogFactory.getLog(OAuthRequestInterceptor.class);
|
||||
|
||||
/**
|
||||
@ -101,6 +102,10 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
|
||||
REQUIRED_SCOPE);
|
||||
tenantBasedAccessTokenInfo.setExpiresIn(
|
||||
System.currentTimeMillis() + (tenantBasedAccessTokenInfo.getExpiresIn() * 1000));
|
||||
if (tenantBasedAccessTokenInfo.getScopes() == null) {
|
||||
throw new APIMClientOAuthException("Failed to retrieve scopes from access token");
|
||||
}
|
||||
|
||||
if (tenantBasedAccessTokenInfo.getScopes().contains(APIM_SUBSCRIBE_SCOPE)) {
|
||||
tenantUserTokenMap.put(username, tenantBasedAccessTokenInfo);
|
||||
}
|
||||
@ -115,4 +120,11 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
|
||||
}
|
||||
}
|
||||
|
||||
public void removeToken(String username, String tenantDomain) {
|
||||
if (!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
|
||||
username = username + "@" + tenantDomain;
|
||||
}
|
||||
tenantUserTokenMap.remove(username);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -79,6 +79,7 @@ public class APIMConfigReader {
|
||||
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);
|
||||
|
||||
@ -35,7 +35,7 @@ public class APIMClientOAuthException extends RuntimeException {
|
||||
this.responseStatus = status;
|
||||
}
|
||||
|
||||
APIMClientOAuthException(String message) {
|
||||
public APIMClientOAuthException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
|
||||
@ -49,7 +49,7 @@ public class APIIntegrationClientServiceComponent {
|
||||
/* Initializing webapp publisher configuration */
|
||||
APIMConfigReader.init();
|
||||
BundleContext bundleContext = componentContext.getBundleContext();
|
||||
bundleContext.registerService(IntegrationClientService.class.getName(), new IntegrationClientServiceImpl(), null);
|
||||
bundleContext.registerService(IntegrationClientService.class.getName(), IntegrationClientServiceImpl.getInstance(), null);
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("apimgt client bundle has been successfully initialized");
|
||||
|
||||
@ -26,6 +26,9 @@ import org.wso2.carbon.apimgt.integration.client.store.StoreClient;
|
||||
*/
|
||||
public interface IntegrationClientService {
|
||||
|
||||
|
||||
void resetUserInfo(String username, String tenantDomain);
|
||||
|
||||
/**
|
||||
*
|
||||
* @return API Store Client.
|
||||
|
||||
@ -13,13 +13,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||
|
||||
@ -22,19 +22,24 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
||||
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-api-mockito</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi</artifactId>
|
||||
@ -107,6 +112,11 @@
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.h2database.wso2</groupId>
|
||||
<artifactId>h2-database-engine</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@ -172,7 +182,32 @@
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
||||
@ -57,6 +57,7 @@ public class APIConfig {
|
||||
private String tenantDomain;
|
||||
private String[] tags;
|
||||
private Set<ApiScope> scopes;
|
||||
private boolean isDefault = true;
|
||||
|
||||
@XmlElement(name = "Policy", required = true)
|
||||
public String getPolicy() {
|
||||
@ -184,4 +185,13 @@ public class APIConfig {
|
||||
public void setScopes(Set<ApiScope> scopes) {
|
||||
this.scopes = scopes;
|
||||
}
|
||||
|
||||
@XmlElement(name = "isDefault")
|
||||
public boolean isDefault() {
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
public void setDefault(boolean aDefault) {
|
||||
isDefault = aDefault;
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ public class APIPublisherServiceImpl implements APIPublisherService {
|
||||
for (APIInfo apiInfo : apiList.getList()) {
|
||||
if (api.getName().equals(apiInfo.getName()) && api.getVersion().equals(apiInfo.getVersion())) {
|
||||
api = publisherClient.getApi().apisApiIdPut(apiInfo.getId(), api, CONTENT_TYPE, null, null);
|
||||
if (CREATED_STATUS.equals(api.getStatus())) {
|
||||
if (api != null && CREATED_STATUS.equals(api.getStatus())) {
|
||||
publisherClient.getApi().apisChangeLifecyclePost(PUBLISH_ACTION, api.getId(), null, null,
|
||||
null);
|
||||
}
|
||||
@ -83,7 +83,9 @@ public class APIPublisherServiceImpl implements APIPublisherService {
|
||||
return false;
|
||||
}
|
||||
for (APIInfo existingApi : apiList.getList()) {
|
||||
if (existingApi.getName().equals(api.getName()) && existingApi.getVersion().equals(api.getVersion())) {
|
||||
if (existingApi.getName() != null && existingApi.getName().equals(api.
|
||||
getName()) && existingApi.getVersion() != null &&
|
||||
existingApi.getVersion().equals(api.getVersion())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -106,7 +108,7 @@ public class APIPublisherServiceImpl implements APIPublisherService {
|
||||
api.setStatus(PUBLISHED_STATUS);
|
||||
api.setResponseCaching("DISABLED");
|
||||
api.setDestinationStatsEnabled("false");
|
||||
api.isDefaultVersion(true);
|
||||
api.isDefaultVersion(config.isDefault());
|
||||
List<String> transport = new ArrayList<>();
|
||||
transport.add("https");
|
||||
transport.add("http");
|
||||
|
||||
@ -55,6 +55,7 @@ public class APIPublisherUtil {
|
||||
|
||||
private static final String NON_SECURED_RESOURCES = "nonSecuredEndPoints";
|
||||
private static final String AUTH_TYPE_NON_SECURED = "None";
|
||||
private static final String PARAM_IS_DEFAULT = "isDefault";
|
||||
|
||||
public static String getServerBaseUrl() {
|
||||
WebappPublisherConfig webappPublisherConfig = WebappPublisherConfig.getInstance();
|
||||
@ -143,6 +144,13 @@ public class APIPublisherUtil {
|
||||
|
||||
apiConfig.setSecured(false);
|
||||
|
||||
boolean isDefault = true;
|
||||
String isDefaultParam = servletContext.getInitParameter(PARAM_IS_DEFAULT);
|
||||
if (isDefaultParam != null && !isDefaultParam.isEmpty()) {
|
||||
isDefault = Boolean.parseBoolean(isDefaultParam);
|
||||
}
|
||||
apiConfig.setDefault(isDefault);
|
||||
|
||||
String transports = servletContext.getInitParameter(PARAM_MANAGED_API_TRANSPORTS);
|
||||
if (transports == null || transports.isEmpty()) {
|
||||
if (log.isDebugEnabled()) {
|
||||
@ -276,7 +284,7 @@ public class APIPublisherUtil {
|
||||
if(null != resourcesList) {
|
||||
for (ApiUriTemplate template : templates) {
|
||||
String fullPaath = "";
|
||||
if( template.getUriTemplate() != AnnotationProcessor.WILD_CARD ) {
|
||||
if (!template.getUriTemplate().equals(AnnotationProcessor.WILD_CARD)) {
|
||||
fullPaath = apiConfig.getContext() + template.getUriTemplate();
|
||||
}
|
||||
else{
|
||||
|
||||
@ -23,53 +23,7 @@ public class InvalidConfigurationStateException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = -3151279311329070397L;
|
||||
|
||||
private String errorMessage;
|
||||
private int errorCode;
|
||||
|
||||
public InvalidConfigurationStateException(int errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException(int errorCode, String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public int getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public InvalidConfigurationStateException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -25,20 +25,4 @@ public class WebappPublisherConfigurationFailedException extends Exception {
|
||||
public WebappPublisherConfigurationFailedException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
}
|
||||
|
||||
public WebappPublisherConfigurationFailedException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public WebappPublisherConfigurationFailedException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public WebappPublisherConfigurationFailedException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public WebappPublisherConfigurationFailedException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,6 +35,7 @@ public class WebappPublisherUtil {
|
||||
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);
|
||||
|
||||
@ -3,36 +3,8 @@ package org.wso2.carbon.apimgt.webapp.publisher.config;
|
||||
public class APIResourceManagementException extends Exception {
|
||||
private static final long serialVersionUID = -3151279311929070297L;
|
||||
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public APIResourceManagementException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIResourceManagementException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public APIResourceManagementException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIResourceManagementException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public APIResourceManagementException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,24 +25,7 @@ public class APIManagerPublisherException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -8933142342423122660L;
|
||||
|
||||
public APIManagerPublisherException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
}
|
||||
|
||||
public APIManagerPublisherException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public APIManagerPublisherException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public APIManagerPublisherException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public APIManagerPublisherException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,193 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.mockito.Mockito;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.apimgt.integration.client.IntegrationClientServiceImpl;
|
||||
import org.wso2.carbon.apimgt.integration.client.OAuthRequestInterceptor;
|
||||
import org.wso2.carbon.apimgt.integration.client.model.OAuthApplication;
|
||||
import org.wso2.carbon.apimgt.integration.client.publisher.PublisherClient;
|
||||
import org.wso2.carbon.apimgt.integration.client.service.IntegrationClientService;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.api.APIsApi;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.API;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIInfo;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIList;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.config.WebappPublisherConfig;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.exception.APIManagerPublisherException;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.utils.MockApi;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.utils.TestUtils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
||||
/**
|
||||
* This is the test class for {@link APIPublisherServiceImpl}
|
||||
*/
|
||||
public class APIPublisherServiceTest extends BaseAPIPublisherTest {
|
||||
private static final Log log = LogFactory.getLog(APIPublisherServiceTest.class);
|
||||
private APIPublisherServiceImpl apiPublisherService = new APIPublisherServiceImpl();
|
||||
|
||||
@BeforeTest
|
||||
public void initialConfigs() throws Exception {
|
||||
initializeOAuthApplication();
|
||||
WebappPublisherConfig.init();
|
||||
}
|
||||
|
||||
@Test(description = "Publishes an API | will fail if there are any exceptions")
|
||||
public void publishAPI() throws NoSuchFieldException, IllegalAccessException,
|
||||
APIManagerPublisherException {
|
||||
APIConfig apiConfig = new APIConfig();
|
||||
setApiConfigs(apiConfig, "testAPI-0");
|
||||
apiPublisherService.publishAPI(apiConfig);
|
||||
}
|
||||
|
||||
@Test(description = "Testing for API status CREATED | will fail if there are any exceptions")
|
||||
public void publishCreatedAPI() throws APIManagerPublisherException, NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
APIConfig apiConfig = new APIConfig();
|
||||
setApiConfigs(apiConfig, "testAPI-1");
|
||||
APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
|
||||
getClass(), Mockito.CALLS_REAL_METHODS);
|
||||
IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
|
||||
class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
|
||||
PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
|
||||
getPublisherClient();
|
||||
doReturn(publisherClient).when(integrationClientService).getPublisherClient();
|
||||
APIsApi apIsApi = Mockito.mock(MockApi.class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(apIsApi).when(publisherClient).getApi();
|
||||
API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
|
||||
api.setStatus("CREATED");
|
||||
doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
|
||||
apiPublisherService.publishAPI(apiConfig);
|
||||
}
|
||||
|
||||
@Test(description = "createAPIListWithNoApi | will fail if there are any exceptions")
|
||||
public void publishWithNoAPIListCreated() throws APIManagerPublisherException {
|
||||
APIConfig apiConfig = new APIConfig();
|
||||
setApiConfigs(apiConfig, "testAPI-2");
|
||||
APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
|
||||
getClass(), Mockito.CALLS_REAL_METHODS);
|
||||
IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
|
||||
class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
|
||||
PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
|
||||
getPublisherClient();
|
||||
doReturn(publisherClient).when(integrationClientService).getPublisherClient();
|
||||
APIsApi apIsApi = Mockito.mock(MockApi.class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(apIsApi).when(publisherClient).getApi();
|
||||
API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
|
||||
api.setStatus("CREATED");
|
||||
doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
|
||||
APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS);
|
||||
APIInfo apiInfo = new APIInfo();
|
||||
List<APIInfo> apiInfoList = new ArrayList<>();
|
||||
apiInfoList.add(apiInfo);
|
||||
apiList.list(apiInfoList);
|
||||
doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(),
|
||||
Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(),
|
||||
Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
apiPublisherService.publishAPI(apiConfig);
|
||||
}
|
||||
|
||||
@Test(description = "createAPIList | will fail if there are any exceptions")
|
||||
public void publishWithAPIListCreated() throws APIManagerPublisherException {
|
||||
APIConfig apiConfig = new APIConfig();
|
||||
setApiConfigs(apiConfig, "testAPI-3");
|
||||
APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
|
||||
getClass(), Mockito.CALLS_REAL_METHODS);
|
||||
IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
|
||||
class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
|
||||
PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
|
||||
getPublisherClient();
|
||||
doReturn(publisherClient).when(integrationClientService).getPublisherClient();
|
||||
APIsApi apIsApi = Mockito.mock(MockApi.class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(apIsApi).when(publisherClient).getApi();
|
||||
API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
|
||||
api.setStatus("CREATED");
|
||||
doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
|
||||
APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS);
|
||||
APIInfo apiInfo = new APIInfo();
|
||||
apiInfo.setName("testAPI-3");
|
||||
apiInfo.setVersion("1.0.0");
|
||||
apiInfo.setId("test-one");
|
||||
List<APIInfo> apiInfoList = new ArrayList<>();
|
||||
apiInfoList.add(apiInfo);
|
||||
apiList.list(apiInfoList);
|
||||
doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(),
|
||||
Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(),
|
||||
Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
apiConfig.setSharedWithAllTenants(false);
|
||||
apiPublisherService.publishAPI(apiConfig);
|
||||
}
|
||||
|
||||
@Test(description = "publish API with scope added | will fail if there are any exceptions")
|
||||
public void publishWithAPIScope() throws APIManagerPublisherException {
|
||||
APIConfig apiConfig = new APIConfig();
|
||||
setApiConfigs(apiConfig, "testAPI-4");
|
||||
Set<ApiScope> scopes = new HashSet<>();
|
||||
ApiScope apiScope = new ApiScope();
|
||||
apiScope.setDescription("testing");
|
||||
scopes.add(apiScope);
|
||||
apiConfig.setScopes(scopes);
|
||||
apiPublisherService.publishAPI(apiConfig);
|
||||
}
|
||||
|
||||
private void setApiConfigs(APIConfig apiConfig, String name) {
|
||||
apiConfig.setName(name);
|
||||
apiConfig.setContext("api/device-mgt/windows/v1.g0/admin/devices");
|
||||
apiConfig.setOwner("admin");
|
||||
apiConfig.setEndpoint("https://localhost:9443/api/device-mgt/windows/v1.0/admin/devices");
|
||||
apiConfig.setVersion("1.0.0");
|
||||
apiConfig.setTransports("http,https");
|
||||
apiConfig.setPolicy(null);
|
||||
apiConfig.setSharedWithAllTenants(true);
|
||||
apiConfig.setTags(new String[]{"windows", "device_management"});
|
||||
apiConfig.setTenantDomain("carbon.super");
|
||||
apiConfig.setSecured(false);
|
||||
Map<String, ApiScope> apiScopes = new HashMap<>();
|
||||
Set<ApiScope> scopes = new HashSet<>(apiScopes.values());
|
||||
apiConfig.setScopes(scopes);
|
||||
TestUtils util = new TestUtils();
|
||||
util.setAPIURITemplates(apiConfig, "/reboot");
|
||||
}
|
||||
|
||||
private void initializeOAuthApplication() throws NoSuchFieldException, IllegalAccessException {
|
||||
OAuthApplication oAuthApplication = new OAuthApplication();
|
||||
oAuthApplication.setClientName("admin_api_integration_client");
|
||||
oAuthApplication.setIsSaasApplication("true");
|
||||
oAuthApplication.setClientId("random");
|
||||
oAuthApplication.setClientSecret("random=");
|
||||
Field oAuth = OAuthRequestInterceptor.class.getDeclaredField("oAuthApplication");
|
||||
oAuth.setAccessible(true);
|
||||
oAuth.set(null, oAuthApplication);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,163 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.config.APIResource;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.config.APIResourceConfiguration;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.config.WebappPublisherConfig;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiUriTemplate;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.exception.APIManagerPublisherException;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.utils.MockServletContext;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.utils.TestUtils;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.registry.core.exceptions.RegistryException;
|
||||
import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
|
||||
import org.wso2.carbon.user.api.RealmConfiguration;
|
||||
import org.wso2.carbon.user.api.UserRealm;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.wso2.carbon.apimgt.webapp.publisher.APIPublisherUtil.buildApiConfig;
|
||||
import static org.wso2.carbon.apimgt.webapp.publisher.APIPublisherUtil.getApiEndpointUrl;
|
||||
import static org.wso2.carbon.apimgt.webapp.publisher.APIPublisherUtil.setResourceAuthTypes;
|
||||
|
||||
/**
|
||||
* This is the test class for {@link APIPublisherUtil}
|
||||
*/
|
||||
public class APIPublisherUtilTest extends BaseAPIPublisherTest {
|
||||
|
||||
private static final String AUTH_TYPE_NON_SECURED = "None";
|
||||
|
||||
@BeforeTest
|
||||
public void initialConfigs() throws WebappPublisherConfigurationFailedException,
|
||||
org.wso2.carbon.user.core.UserStoreException, RegistryException {
|
||||
WebappPublisherConfig.init();
|
||||
setUserRealm();
|
||||
}
|
||||
|
||||
@Test(description = "test buildAPIConfig method and ensures an APIConfig is created")
|
||||
public void buildApiConfigTest() throws UserStoreException, RegistryException {
|
||||
try {
|
||||
startTenantFlowAsTestTenant();
|
||||
ServletContext servletContext = new MockServletContext();
|
||||
APIResourceConfiguration apiDef = new APIResourceConfiguration();
|
||||
List<APIResource> resources = new ArrayList<>();
|
||||
apiDef.setResources(resources);
|
||||
APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
|
||||
Assert.assertNotNull(apiConfig, "API configuration is null.");
|
||||
} finally {
|
||||
PrivilegedCarbonContext.endTenantFlow();
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "test buildAPIConfig method as SuperTenant and ensures" +
|
||||
" an APIConfig is created")
|
||||
public void buildApiConfigAsSuperTenant() throws UserStoreException {
|
||||
ServletContext servletContext = new MockServletContext();
|
||||
APIResourceConfiguration apiDef = new APIResourceConfiguration();
|
||||
List<APIResource> resources = new ArrayList<>();
|
||||
apiDef.setResources(resources);
|
||||
APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
|
||||
Assert.assertNotNull(apiConfig, "API configuration is null.");
|
||||
}
|
||||
|
||||
@Test(description = "test buildAPIConfig with API tags specified and ensures " +
|
||||
"an APIConfig is created")
|
||||
public void buildApiConfigTestWithTags() throws UserStoreException {
|
||||
ServletContext servletContext = new MockServletContext();
|
||||
APIResourceConfiguration apiDef = new APIResourceConfiguration();
|
||||
List<APIResource> resources = new ArrayList<>();
|
||||
APIResource apiResource = new APIResource();
|
||||
resources.add(apiResource);
|
||||
apiDef.setResources(resources);
|
||||
apiDef.setTags(new String[]{"windows", "device_management"});
|
||||
APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
|
||||
Assert.assertNotNull(apiConfig, "API configuration is null.");
|
||||
}
|
||||
|
||||
@Test(description = "test buildAPIConfig method with API scopes specified and " +
|
||||
"ensures an APIConfig is created")
|
||||
public void buildApiConfigTestWithScope() throws UserStoreException, APIManagerPublisherException {
|
||||
ServletContext servletContext = new MockServletContext();
|
||||
APIResourceConfiguration apiDef = new APIResourceConfiguration();
|
||||
List<APIResource> resources = new ArrayList<>();
|
||||
APIResource apiResource = new APIResource();
|
||||
ApiScope apiScope = new ApiScope();
|
||||
apiScope.setDescription("testing");
|
||||
apiResource.setScope(apiScope);
|
||||
resources.add(apiResource);
|
||||
apiDef.setResources(resources);
|
||||
apiDef.setTags(new String[]{"windows", "device_management"});
|
||||
APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
|
||||
Assert.assertNotNull(apiConfig, "API configuration is null.");
|
||||
}
|
||||
|
||||
@Test(description = "test method for setResourceAuthTypes")
|
||||
public void testSetResourceAuthTypes() throws UserStoreException {
|
||||
ServletContext servletContext = new MockServletContext();
|
||||
APIResourceConfiguration apiDef = new APIResourceConfiguration();
|
||||
List<APIResource> resources = new ArrayList<>();
|
||||
apiDef.setResources(resources);
|
||||
APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
|
||||
apiConfig.setContext("/*");
|
||||
TestUtils util = new TestUtils();
|
||||
util.setAPIURITemplates(apiConfig, "/*");
|
||||
Assert.assertNotNull(apiConfig, "API configuration is null.");
|
||||
setResourceAuthTypes(servletContext, apiConfig);
|
||||
Set<ApiUriTemplate> templates = apiConfig.getUriTemplates();
|
||||
Assert.assertEquals(templates.iterator().next().getAuthType(), AUTH_TYPE_NON_SECURED, "Resource " +
|
||||
"auth type is not properly set");
|
||||
}
|
||||
|
||||
@Test(description = "test the method getApiEndpointUrl")
|
||||
public void testGetApiEndpointUrl() {
|
||||
String context = "/reboot";
|
||||
String url = getApiEndpointUrl(context);
|
||||
Assert.assertEquals(url, "https://localhost:9445/reboot", "Expected url " +
|
||||
"is not same as actual url");
|
||||
}
|
||||
|
||||
@Test(expectedExceptions = WebappPublisherConfigurationFailedException.class, description =
|
||||
"this tests the method convertToDocument with a undefined file name and ensures an " +
|
||||
"exception occurs ")
|
||||
public void testConvertToDocumentForException() throws WebappPublisherConfigurationFailedException {
|
||||
WebappPublisherUtil.convertToDocument(null);
|
||||
}
|
||||
|
||||
private void setUserRealm() throws RegistryException, org.wso2.carbon.user.core.UserStoreException {
|
||||
RealmConfiguration configuration = new RealmConfiguration();
|
||||
UserRealm userRealm = new InMemoryRealmService().getUserRealm(configuration);
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setUserRealm(userRealm);
|
||||
}
|
||||
|
||||
private void startTenantFlowAsTestTenant() throws org.wso2.carbon.user.core.UserStoreException, RegistryException {
|
||||
PrivilegedCarbonContext.startTenantFlow();
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(1212);
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain("test.com");
|
||||
setUserRealm();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.mockito.Mockito;
|
||||
import org.testng.annotations.BeforeSuite;
|
||||
import org.wso2.carbon.apimgt.integration.client.IntegrationClientServiceImpl;
|
||||
import org.wso2.carbon.apimgt.integration.client.internal.APIIntegrationClientDataHolder;
|
||||
import org.wso2.carbon.apimgt.integration.client.publisher.PublisherClient;
|
||||
import org.wso2.carbon.apimgt.integration.client.service.IntegrationClientService;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.api.APIsApi;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.utils.MockApi;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.context.internal.OSGiDataHolder;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.internal.JWTClientExtensionDataHolder;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
|
||||
import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerServiceImpl;
|
||||
import org.wso2.carbon.registry.core.config.RegistryContext;
|
||||
import org.wso2.carbon.registry.core.exceptions.RegistryException;
|
||||
import org.wso2.carbon.registry.core.internal.RegistryDataHolder;
|
||||
import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
|
||||
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URL;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
||||
/**
|
||||
* Base class which initializes carbonContext and needed services.
|
||||
*/
|
||||
public abstract class BaseAPIPublisherTest {
|
||||
|
||||
private static final Log log = LogFactory.getLog(BaseAPIPublisherTest.class);
|
||||
|
||||
@BeforeSuite
|
||||
public void initialize() throws Exception {
|
||||
this.initializeCarbonContext();
|
||||
this.initServices();
|
||||
}
|
||||
|
||||
private void initializeCarbonContext() throws RegistryException {
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
URL resourceUrl = classLoader.getResource("carbon-home");
|
||||
if (resourceUrl != null) {
|
||||
File carbonHome = new File(resourceUrl.getFile());
|
||||
System.setProperty("carbon.home", carbonHome.getAbsolutePath());
|
||||
}
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants.
|
||||
SUPER_TENANT_DOMAIN_NAME);
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID);
|
||||
}
|
||||
|
||||
private void initServices() throws NoSuchFieldException, IllegalAccessException,
|
||||
JWTClientException, UserStoreException, RegistryException {
|
||||
|
||||
IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.class,
|
||||
Mockito.CALLS_REAL_METHODS);
|
||||
APIPublisherDataHolder.getInstance().setIntegrationClientService(integrationClientService);
|
||||
PublisherClient publisherClient = Mockito.mock(PublisherClient.class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(publisherClient).when(integrationClientService).getPublisherClient();
|
||||
|
||||
APIsApi api = new MockApi();
|
||||
Field field = PublisherClient.class.getDeclaredField("api");
|
||||
field.setAccessible(true);
|
||||
field.set(publisherClient, api);
|
||||
|
||||
AccessTokenInfo accessTokenInfo = new AccessTokenInfo();
|
||||
final String REQUIRED_SCOPE =
|
||||
"apim:api_create apim:api_view apim:api_publish apim:subscribe apim:tier_view apim:tier_manage " +
|
||||
"apim:subscription_view apim:subscription_block";
|
||||
accessTokenInfo.setScopes(REQUIRED_SCOPE);
|
||||
|
||||
JWTClientManagerService jwtClientManagerService = Mockito.mock(JWTClientManagerServiceImpl.class,
|
||||
Mockito.CALLS_REAL_METHODS);
|
||||
JWTClient jwtClient = Mockito.mock(JWTClient.class, Mockito.CALLS_REAL_METHODS);
|
||||
doReturn(accessTokenInfo).when(jwtClient).getAccessToken(Mockito.anyString(), Mockito.anyString(),
|
||||
Mockito.anyString(), Mockito.anyString());
|
||||
doReturn(jwtClient).when(jwtClientManagerService).getJWTClient();
|
||||
|
||||
APIIntegrationClientDataHolder.getInstance().setJwtClientManagerService(jwtClientManagerService);
|
||||
RegistryService registryService = this.getRegistryService();
|
||||
OSGiDataHolder.getInstance().setRegistryService(registryService);
|
||||
JWTClientExtensionDataHolder.getInstance().setRegistryService(registryService);
|
||||
}
|
||||
|
||||
private RegistryService getRegistryService() throws RegistryException, UserStoreException {
|
||||
RealmService realmService = new InMemoryRealmService();
|
||||
APIPublisherDataHolder.getInstance().setRealmService(realmService);
|
||||
RegistryDataHolder.getInstance().setRealmService(realmService);
|
||||
JWTClientExtensionDataHolder.getInstance().setRealmService(realmService);
|
||||
InputStream is = this.getClass().getClassLoader().getResourceAsStream("carbon-home/repository/" +
|
||||
"conf/registry.xml");
|
||||
RegistryContext context = RegistryContext.getBaseInstance(is, realmService);
|
||||
context.setSetup(true);
|
||||
return context.getEmbeddedRegistryService();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher.utils;
|
||||
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.api.APIsApi;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.API;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIList;
|
||||
import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.FileInfo;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Class to create MockApi for testing.
|
||||
*/
|
||||
public class MockApi implements APIsApi {
|
||||
|
||||
@Override
|
||||
public void apisApiIdDelete(String apiId, String ifMatch, String ifUnmodifiedSince) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public API apisApiIdGet(String apiId, String accept, String ifNoneMatch, String ifModifiedSince) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public API apisApiIdPut(String apiId, API body, String contentType, String ifMatch, String ifUnmodifiedSince) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apisApiIdSwaggerGet(String apiId, String accept, String ifNoneMatch, String ifModifiedSince) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apisApiIdSwaggerPut(String apiId, String apiDefinition, String contentType, String ifMatch, String ifUnmodifiedSince) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apisApiIdThumbnailGet(String apiId, String accept, String ifNoneMatch, String ifModifiedSince) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileInfo apisApiIdThumbnailPost(String apiId, File file, String contentType, String ifMatch, String ifUnmodifiedSince) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apisChangeLifecyclePost(String action, String apiId, String lifecycleChecklist, String ifMatch, String ifUnmodifiedSince) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apisCopyApiPost(String newVersion, String apiId) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public APIList apisGet(Integer limit, Integer offset, String query, String accept, String ifNoneMatch) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public API apisPost(API body, String contentType) {
|
||||
return new API();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,285 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher.utils;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.descriptor.JspConfigDescriptor;
|
||||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Enumeration;
|
||||
import java.util.EventListener;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class MockServletContext implements ServletContext {
|
||||
@Override
|
||||
public ServletContext getContext(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContextPath() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMajorVersion() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMinorVersion() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEffectiveMajorVersion() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEffectiveMinorVersion() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMimeType(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getResourcePaths(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URL getResource(String s) throws MalformedURLException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getResourceAsStream(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestDispatcher getRequestDispatcher(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestDispatcher getNamedDispatcher(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Servlet getServlet(String s) throws ServletException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<Servlet> getServlets() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<String> getServletNames() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Exception e, String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(String s, Throwable throwable) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRealPath(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInitParameter(String s) {
|
||||
return "/*";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<String> getInitParameterNames() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setInitParameter(String s, String s1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getAttribute(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<String> getAttributeNames() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAttribute(String s, Object o) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAttribute(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServletContextName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletRegistration.Dynamic addServlet(String s, String s1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletRegistration.Dynamic addServlet(String s, Class<? extends Servlet> aClass) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Servlet> T createServlet(Class<T> aClass) throws ServletException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletRegistration getServletRegistration(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ? extends ServletRegistration> getServletRegistrations() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilterRegistration.Dynamic addFilter(String s, String s1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilterRegistration.Dynamic addFilter(String s, Filter filter) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilterRegistration.Dynamic addFilter(String s, Class<? extends Filter> aClass) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Filter> T createFilter(Class<T> aClass) throws ServletException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilterRegistration getFilterRegistration(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionCookieConfig getSessionCookieConfig() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSessionTrackingModes(Set<SessionTrackingMode> set) throws IllegalStateException, IllegalArgumentException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends EventListener> void addListener(T t) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(Class<? extends EventListener> aClass) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends EventListener> T createListener(Class<T> aClass) throws ServletException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void declareRoles(String... strings) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassLoader getClassLoader() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JspConfigDescriptor getJspConfigDescriptor() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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.apimgt.webapp.publisher.utils;
|
||||
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.APIConfig;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiUriTemplate;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Contains util methods for webAppPublisher tests.
|
||||
*/
|
||||
public class TestUtils {
|
||||
|
||||
public void setAPIURITemplates(APIConfig apiConfig, String uriTemplate) {
|
||||
Set<ApiUriTemplate> uriTemplates = new LinkedHashSet<>();
|
||||
ApiUriTemplate template = new ApiUriTemplate();
|
||||
template.setAuthType("Application & Application User");
|
||||
template.setHttpVerb("POST");
|
||||
template.setResourceURI("https://localhost:9443/api/device-mgt/windows/v1.0/admin/devices/reboot");
|
||||
template.setUriTemplate(uriTemplate);
|
||||
ApiScope scope = new ApiScope();
|
||||
scope.setKey("perm:windows:reboot");
|
||||
scope.setName("Reboot");
|
||||
scope.setRoles("/permission/admin/device-mgt/devices/owning-device/operations/windows/reboot");
|
||||
scope.setDescription("Lock reset on Windows devices");
|
||||
template.setScope(scope);
|
||||
uriTemplates.add(template);
|
||||
apiConfig.setUriTemplates(uriTemplates);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,429 @@
|
||||
CREATE TABLE IF NOT EXISTS REG_CLUSTER_LOCK (
|
||||
REG_LOCK_NAME VARCHAR (20),
|
||||
REG_LOCK_STATUS VARCHAR (20),
|
||||
REG_LOCKED_TIME TIMESTAMP,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (REG_LOCK_NAME)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_LOG (
|
||||
REG_LOG_ID INTEGER AUTO_INCREMENT,
|
||||
REG_PATH VARCHAR (2000),
|
||||
REG_USER_ID VARCHAR (31) NOT NULL,
|
||||
REG_LOGGED_TIME TIMESTAMP NOT NULL,
|
||||
REG_ACTION INTEGER NOT NULL,
|
||||
REG_ACTION_DATA VARCHAR (500),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (REG_LOG_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS REG_LOG_IND_BY_REG_LOGTIME ON REG_LOG(REG_LOGGED_TIME, REG_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_PATH(
|
||||
REG_PATH_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_PATH_VALUE VARCHAR(2000) NOT NULL,
|
||||
REG_PATH_PARENT_ID INT,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_PATH PRIMARY KEY(REG_PATH_ID, REG_TENANT_ID)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_NAME ON REG_PATH(REG_PATH_VALUE, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_PARENT_ID ON REG_PATH(REG_PATH_PARENT_ID, REG_TENANT_ID);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_CONTENT (
|
||||
REG_CONTENT_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_CONTENT_DATA LONGBLOB,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_CONTENT PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_CONTENT_HISTORY (
|
||||
REG_CONTENT_ID INTEGER NOT NULL,
|
||||
REG_CONTENT_DATA LONGBLOB,
|
||||
REG_DELETED SMALLINT,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_CONTENT_HISTORY PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE (
|
||||
REG_PATH_ID INTEGER NOT NULL,
|
||||
REG_NAME VARCHAR(256),
|
||||
REG_VERSION INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_MEDIA_TYPE VARCHAR(500),
|
||||
REG_CREATOR VARCHAR(31) NOT NULL,
|
||||
REG_CREATED_TIME TIMESTAMP NOT NULL,
|
||||
REG_LAST_UPDATOR VARCHAR(31),
|
||||
REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
|
||||
REG_DESCRIPTION VARCHAR(1000),
|
||||
REG_CONTENT_ID INTEGER,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
REG_UUID VARCHAR(100) NOT NULL,
|
||||
CONSTRAINT PK_REG_RESOURCE PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT (REG_CONTENT_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_NAME ON REG_RESOURCE(REG_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_UUID ON REG_RESOURCE(REG_UUID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TENANT ON REG_RESOURCE(REG_TENANT_ID, REG_UUID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TYPE ON REG_RESOURCE(REG_TENANT_ID, REG_MEDIA_TYPE);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE_HISTORY (
|
||||
REG_PATH_ID INTEGER NOT NULL,
|
||||
REG_NAME VARCHAR(256),
|
||||
REG_VERSION INTEGER NOT NULL,
|
||||
REG_MEDIA_TYPE VARCHAR(500),
|
||||
REG_CREATOR VARCHAR(31) NOT NULL,
|
||||
REG_CREATED_TIME TIMESTAMP NOT NULL,
|
||||
REG_LAST_UPDATOR VARCHAR(31),
|
||||
REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
|
||||
REG_DESCRIPTION VARCHAR(1000),
|
||||
REG_CONTENT_ID INTEGER,
|
||||
REG_DELETED SMALLINT,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
REG_UUID VARCHAR(100) NOT NULL,
|
||||
CONSTRAINT PK_REG_RESOURCE_HISTORY PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_PATHID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT_HISTORY (REG_CONTENT_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_NAME ON REG_RESOURCE_HISTORY(REG_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_COMMENT (
|
||||
REG_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_COMMENT_TEXT VARCHAR(500) NOT NULL,
|
||||
REG_USER_ID VARCHAR(31) NOT NULL,
|
||||
REG_COMMENTED_TIME TIMESTAMP NOT NULL,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_COMMENT PRIMARY KEY(REG_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE_COMMENT (
|
||||
REG_COMMENT_ID INTEGER NOT NULL,
|
||||
REG_VERSION INTEGER,
|
||||
REG_PATH_ID INTEGER,
|
||||
REG_RESOURCE_NAME VARCHAR(256),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_COMMENT_ID FOREIGN KEY (REG_COMMENT_ID, REG_TENANT_ID) REFERENCES REG_COMMENT (REG_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_COMMENT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_VERSION ON REG_RESOURCE_COMMENT(REG_VERSION, REG_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RATING (
|
||||
REG_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_RATING INTEGER NOT NULL,
|
||||
REG_USER_ID VARCHAR(31) NOT NULL,
|
||||
REG_RATED_TIME TIMESTAMP NOT NULL,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_RATING PRIMARY KEY(REG_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE_RATING (
|
||||
REG_RATING_ID INTEGER NOT NULL,
|
||||
REG_VERSION INTEGER,
|
||||
REG_PATH_ID INTEGER,
|
||||
REG_RESOURCE_NAME VARCHAR(256),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_RATING_ID FOREIGN KEY (REG_RATING_ID, REG_TENANT_ID) REFERENCES REG_RATING (REG_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_RATING(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_VERSION ON REG_RESOURCE_RATING(REG_VERSION, REG_TENANT_ID);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_TAG (
|
||||
REG_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_TAG_NAME VARCHAR(500) NOT NULL,
|
||||
REG_USER_ID VARCHAR(31) NOT NULL,
|
||||
REG_TAGGED_TIME TIMESTAMP NOT NULL,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_TAG PRIMARY KEY(REG_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE_TAG (
|
||||
REG_TAG_ID INTEGER NOT NULL,
|
||||
REG_VERSION INTEGER,
|
||||
REG_PATH_ID INTEGER,
|
||||
REG_RESOURCE_NAME VARCHAR(256),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_TAG_ID FOREIGN KEY (REG_TAG_ID, REG_TENANT_ID) REFERENCES REG_TAG (REG_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_TAG(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_VERSION ON REG_RESOURCE_TAG(REG_VERSION, REG_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_PROPERTY (
|
||||
REG_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_NAME VARCHAR(100) NOT NULL,
|
||||
REG_VALUE VARCHAR(1000),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_PROPERTY PRIMARY KEY(REG_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_RESOURCE_PROPERTY (
|
||||
REG_PROPERTY_ID INTEGER NOT NULL,
|
||||
REG_VERSION INTEGER,
|
||||
REG_PATH_ID INTEGER,
|
||||
REG_RESOURCE_NAME VARCHAR(256),
|
||||
REG_TENANT_ID INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_TAG_ID FOREIGN KEY (REG_PROPERTY_ID, REG_TENANT_ID) REFERENCES REG_PROPERTY (REG_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_PROPERTY(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_VERSION ON REG_RESOURCE_PROPERTY(REG_VERSION, REG_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_ASSOCIATION (
|
||||
REG_ASSOCIATION_ID INTEGER AUTO_INCREMENT,
|
||||
REG_SOURCEPATH VARCHAR (2000) NOT NULL,
|
||||
REG_TARGETPATH VARCHAR (2000) NOT NULL,
|
||||
REG_ASSOCIATION_TYPE VARCHAR (2000) NOT NULL,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (REG_ASSOCIATION_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS REG_SNAPSHOT (
|
||||
REG_SNAPSHOT_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
REG_PATH_ID INTEGER NOT NULL,
|
||||
REG_RESOURCE_NAME VARCHAR (256),
|
||||
REG_RESOURCE_VIDS LONGBLOB NOT NULL,
|
||||
REG_TENANT_ID INTEGER DEFAULT 0,
|
||||
CONSTRAINT PK_REG_SNAPSHOT PRIMARY KEY(REG_SNAPSHOT_ID, REG_TENANT_ID)
|
||||
);
|
||||
|
||||
ALTER TABLE REG_SNAPSHOT ADD CONSTRAINT IF NOT EXISTS REG_SNAPSHOT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
|
||||
CREATE INDEX IF NOT EXISTS REG_SNAPSHOT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_SNAPSHOT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
|
||||
|
||||
-- ################################
|
||||
-- USER MANAGER TABLES
|
||||
-- ################################
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_TENANT (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_DOMAIN_NAME VARCHAR(255) NOT NULL,
|
||||
UM_EMAIL VARCHAR(255),
|
||||
UM_ACTIVE BOOLEAN DEFAULT FALSE,
|
||||
UM_CREATED_DATE TIMESTAMP NOT NULL,
|
||||
UM_USER_CONFIG LONGBLOB NOT NULL,
|
||||
PRIMARY KEY (UM_ID),
|
||||
UNIQUE(UM_DOMAIN_NAME));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_DOMAIN(
|
||||
UM_DOMAIN_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_DOMAIN_NAME VARCHAR(255),
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_DOMAIN_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS INDEX_UM_TENANT_UM_DOMAIN_NAME ON UM_TENANT (UM_DOMAIN_NAME);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_USER (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255) NOT NULL,
|
||||
UM_USER_PASSWORD VARCHAR(255) NOT NULL,
|
||||
UM_SALT_VALUE VARCHAR(31),
|
||||
UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
|
||||
UM_CHANGED_TIME TIMESTAMP NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID),
|
||||
UNIQUE(UM_USER_NAME, UM_TENANT_ID));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255) NOT NULL,
|
||||
UM_USER_PASSWORD VARCHAR(255) NOT NULL,
|
||||
UM_SALT_VALUE VARCHAR(31),
|
||||
UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
|
||||
UM_CHANGED_TIME TIMESTAMP NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID),
|
||||
UNIQUE(UM_USER_NAME, UM_TENANT_ID));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_USER_ATTRIBUTE (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_ATTR_NAME VARCHAR(255) NOT NULL,
|
||||
UM_ATTR_VALUE VARCHAR(1024),
|
||||
UM_PROFILE_ID VARCHAR(255),
|
||||
UM_USER_ID INTEGER,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID),
|
||||
FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID));
|
||||
|
||||
CREATE INDEX IF NOT EXISTS UM_USER_ID_INDEX ON UM_USER_ATTRIBUTE(UM_USER_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_ROLE (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_ROLE_NAME VARCHAR(255) NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UM_SHARED_ROLE BOOLEAN DEFAULT FALSE,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID),
|
||||
UNIQUE(UM_ROLE_NAME, UM_TENANT_ID));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_MODULE(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_MODULE_NAME VARCHAR(100),
|
||||
UNIQUE(UM_MODULE_NAME),
|
||||
PRIMARY KEY(UM_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_MODULE_ACTIONS(
|
||||
UM_ACTION VARCHAR(255) NOT NULL,
|
||||
UM_MODULE_ID INTEGER NOT NULL,
|
||||
PRIMARY KEY(UM_ACTION, UM_MODULE_ID),
|
||||
FOREIGN KEY (UM_MODULE_ID) REFERENCES UM_MODULE(UM_ID) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_PERMISSION (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_RESOURCE_ID VARCHAR(255) NOT NULL,
|
||||
UM_ACTION VARCHAR(255) NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UM_MODULE_ID INTEGER DEFAULT 0,
|
||||
UNIQUE(UM_RESOURCE_ID,UM_ACTION, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID));
|
||||
|
||||
CREATE INDEX IF NOT EXISTS INDEX_UM_PERMISSION_UM_RESOURCE_ID_UM_ACTION ON UM_PERMISSION (UM_RESOURCE_ID, UM_ACTION, UM_TENANT_ID);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_ROLE_PERMISSION (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_PERMISSION_ID INTEGER NOT NULL,
|
||||
UM_ROLE_NAME VARCHAR(255) NOT NULL,
|
||||
UM_IS_ALLOWED SMALLINT NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UM_DOMAIN_ID INTEGER,
|
||||
FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
|
||||
FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_USER_PERMISSION (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_PERMISSION_ID INTEGER NOT NULL,
|
||||
UM_USER_NAME VARCHAR(255) NOT NULL,
|
||||
UM_IS_ALLOWED SMALLINT NOT NULL,
|
||||
UNIQUE (UM_PERMISSION_ID, UM_USER_NAME, UM_TENANT_ID),
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID));
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_USER_ROLE (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_ROLE_ID INTEGER NOT NULL,
|
||||
UM_USER_ID INTEGER NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UNIQUE (UM_USER_ID, UM_ROLE_ID, UM_TENANT_ID),
|
||||
FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_ROLE(UM_ID, UM_TENANT_ID),
|
||||
FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID));
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_SHARED_USER_ROLE(
|
||||
UM_ROLE_ID INTEGER NOT NULL,
|
||||
UM_USER_ID INTEGER NOT NULL,
|
||||
UM_USER_TENANT_ID INTEGER NOT NULL,
|
||||
UM_ROLE_TENANT_ID INTEGER NOT NULL,
|
||||
UNIQUE(UM_USER_ID,UM_ROLE_ID,UM_USER_TENANT_ID, UM_ROLE_TENANT_ID),
|
||||
FOREIGN KEY(UM_ROLE_ID,UM_ROLE_TENANT_ID) REFERENCES UM_ROLE(UM_ID,UM_TENANT_ID) ON DELETE CASCADE ,
|
||||
FOREIGN KEY(UM_USER_ID,UM_USER_TENANT_ID) REFERENCES UM_USER(UM_ID,UM_TENANT_ID) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_ACCOUNT_MAPPING(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255) NOT NULL,
|
||||
UM_TENANT_ID INTEGER NOT NULL,
|
||||
UM_USER_STORE_DOMAIN VARCHAR(100),
|
||||
UM_ACC_LINK_ID INTEGER NOT NULL,
|
||||
UNIQUE(UM_USER_NAME, UM_TENANT_ID, UM_USER_STORE_DOMAIN, UM_ACC_LINK_ID),
|
||||
FOREIGN KEY (UM_TENANT_ID) REFERENCES UM_TENANT(UM_ID) ON DELETE CASCADE,
|
||||
PRIMARY KEY (UM_ID)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_DIALECT(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_DIALECT_URI VARCHAR(255) NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UNIQUE(UM_DIALECT_URI, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_CLAIM(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_DIALECT_ID INTEGER NOT NULL,
|
||||
UM_CLAIM_URI VARCHAR(255) NOT NULL,
|
||||
UM_DISPLAY_TAG VARCHAR(255),
|
||||
UM_DESCRIPTION VARCHAR(255),
|
||||
UM_MAPPED_ATTRIBUTE_DOMAIN VARCHAR(255),
|
||||
UM_MAPPED_ATTRIBUTE VARCHAR(255),
|
||||
UM_REG_EX VARCHAR(255),
|
||||
UM_SUPPORTED SMALLINT,
|
||||
UM_REQUIRED SMALLINT,
|
||||
UM_DISPLAY_ORDER INTEGER,
|
||||
UM_CHECKED_ATTRIBUTE SMALLINT,
|
||||
UM_READ_ONLY SMALLINT,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UNIQUE(UM_DIALECT_ID, UM_CLAIM_URI,UM_MAPPED_ATTRIBUTE_DOMAIN, UM_TENANT_ID),
|
||||
FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_PROFILE_CONFIG(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_DIALECT_ID INTEGER,
|
||||
UM_PROFILE_NAME VARCHAR(255),
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_HYBRID_ROLE(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_ROLE_NAME VARCHAR(255),
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_HYBRID_USER_ROLE(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255),
|
||||
UM_ROLE_ID INTEGER NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UM_DOMAIN_ID INTEGER,
|
||||
UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID,UM_DOMAIN_ID),
|
||||
FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_HYBRID_ROLE(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
|
||||
FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_HYBRID_REMEMBER_ME (
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255) NOT NULL,
|
||||
UM_COOKIE_VALUE VARCHAR(1024),
|
||||
UM_CREATED_TIME TIMESTAMP,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_SYSTEM_ROLE(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_ROLE_NAME VARCHAR(255),
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER_ROLE(
|
||||
UM_ID INTEGER NOT NULL AUTO_INCREMENT,
|
||||
UM_USER_NAME VARCHAR(255),
|
||||
UM_ROLE_ID INTEGER NOT NULL,
|
||||
UM_TENANT_ID INTEGER DEFAULT 0,
|
||||
UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID),
|
||||
FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_SYSTEM_ROLE(UM_ID, UM_TENANT_ID),
|
||||
PRIMARY KEY (UM_ID, UM_TENANT_ID)
|
||||
);
|
||||
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<!--
|
||||
This configuration file represents the configuration that are needed
|
||||
when publishing APIs to API Manager
|
||||
-->
|
||||
<WebappPublisherConfigs>
|
||||
|
||||
<!-- This host is used to define the host address which is used to publish APIs -->
|
||||
<Host>https://localhost:9445</Host>
|
||||
|
||||
<!-- If it is true, the APIs of this instance will be published to the defined host -->
|
||||
<PublishAPI>true</PublishAPI>
|
||||
|
||||
<!-- If it is true, the APIs of this instance will be updated when the webapps are redeployed -->
|
||||
<EnabledUpdateApi>true</EnabledUpdateApi>
|
||||
|
||||
<!--Webapp will be published only when running below profiles-->
|
||||
<Profiles>
|
||||
<Profile>default</Profile>
|
||||
</Profiles>
|
||||
</WebappPublisherConfigs>
|
||||
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2017 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.
|
||||
-->
|
||||
<wso2registry>
|
||||
|
||||
<!--
|
||||
For details on configuring different config & governance registries see;
|
||||
http://wso2.org/library/tutorials/2010/04/sharing-registry-space-across-multiple-product-instances
|
||||
-->
|
||||
|
||||
<currentDBConfig>wso2registry</currentDBConfig>
|
||||
<readOnly>false</readOnly>
|
||||
<enableCache>true</enableCache>
|
||||
<registryRoot>/</registryRoot>
|
||||
|
||||
<dbConfig name="wso2registry">
|
||||
<url>jdbc:h2:./target/databasetest/CARBON_TEST</url>
|
||||
<!--userName>sa</userName>
|
||||
<password>sa</password-->
|
||||
<driverName>org.h2.Driver</driverName>
|
||||
<maxActive>80</maxActive>
|
||||
<maxWait>60000</maxWait>
|
||||
<minIdle>5</minIdle>
|
||||
</dbConfig>
|
||||
|
||||
<versionResourcesOnChange>false</versionResourcesOnChange>
|
||||
|
||||
<!-- NOTE: You can edit the options under "StaticConfiguration" only before the
|
||||
startup. -->
|
||||
<staticConfiguration>
|
||||
<versioningProperties>true</versioningProperties>
|
||||
<versioningComments>true</versioningComments>
|
||||
<versioningTags>true</versioningTags>
|
||||
<versioningRatings>true</versioningRatings>
|
||||
</staticConfiguration>
|
||||
</wso2registry>
|
||||
@ -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.
|
||||
-->
|
||||
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||
|
||||
<suite name="DeviceManagementExtensions">
|
||||
<parameter name="useDefaultListeners" value="false"/>
|
||||
|
||||
<test name="DeviceType Manager Service Test Cases" preserve-order="true">
|
||||
<classes>
|
||||
<class name="org.wso2.carbon.apimgt.webapp.publisher.APIPublisherServiceTest"/>
|
||||
</classes>
|
||||
</test>
|
||||
</suite>
|
||||
@ -0,0 +1,80 @@
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
<UserManager>
|
||||
<Realm>
|
||||
<Configuration>
|
||||
<AddAdmin>true</AddAdmin>
|
||||
<AdminRole>admin</AdminRole>
|
||||
<AdminUser>
|
||||
<UserName>admin</UserName>
|
||||
<Password>admin</Password>
|
||||
</AdminUser>
|
||||
<EveryOneRoleName>everyone</EveryOneRoleName>
|
||||
<ReadOnly>false</ReadOnly>
|
||||
<MaxUserNameListLength>500</MaxUserNameListLength>
|
||||
<Property name="url">jdbc:h2:target/databasetest/CARBON_TEST</Property>
|
||||
<Property name="driverName">org.h2.Driver</Property>
|
||||
<Property name="maxActive">50</Property>
|
||||
<Property name="maxWait">60000</Property>
|
||||
<Property name="minIdle">5</Property>
|
||||
</Configuration>
|
||||
<UserStoreManager class="org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager">
|
||||
<Property name="TenantManager">org.wso2.carbon.user.core.tenant.JDBCTenantManager</Property>
|
||||
<Property name="ReadOnly">false</Property>
|
||||
<Property name="MaxUserNameListLength">100</Property>
|
||||
<Property name="IsEmailUserName">false</Property>
|
||||
<Property name="DomainCalculation">default</Property>
|
||||
<Property name="PasswordDigest">SHA-256</Property>
|
||||
<Property name="StoreSaltedPassword">true</Property>
|
||||
<Property name="ReadGroups">true</Property>
|
||||
<Property name="WriteGroups">true</Property>
|
||||
<Property name="UserNameUniqueAcrossTenants">false</Property>
|
||||
<Property name="PasswordJavaRegEx">^[\S]{5,30}$</Property>
|
||||
<Property name="PasswordJavaRegExViolationErrorMsg">Password length should be between 5 to 30 characters
|
||||
</Property>
|
||||
<Property name="PasswordJavaScriptRegEx">^[\S]{5,30}$</Property>
|
||||
<Property name="UsernameJavaRegEx">[a-zA-Z0-9._-|//]{3,30}$</Property>
|
||||
<Property name="UsernameJavaScriptRegEx">^[\S]{3,30}$</Property>
|
||||
<Property name="RolenameJavaRegEx">^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$</Property>
|
||||
<Property name="RolenameJavaScriptRegEx">^[\S]{3,30}$</Property>
|
||||
<Property name="UserRolesCacheEnabled">true</Property>
|
||||
<Property name="MaxRoleNameListLength">100</Property>
|
||||
<Property name="MaxUserNameListLength">100</Property>
|
||||
<Property name="SharedGroupEnabled">false</Property>
|
||||
<Property name="SCIMEnabled">false</Property>
|
||||
<Property name="CaseSensitiveUsername">true</Property>
|
||||
<Property name="MultiAttributeSeparator">,</Property>
|
||||
<Property name="BulkImportSupported">true</Property>
|
||||
</UserStoreManager>
|
||||
<AuthorizationManager
|
||||
class="org.wso2.carbon.user.core.authorization.JDBCAuthorizationManager">
|
||||
<Property name="AuthorizationCacheEnabled">true</Property>
|
||||
</AuthorizationManager>
|
||||
</Realm>
|
||||
<SystemPermission>
|
||||
<Permission>login</Permission>
|
||||
<Permission>manage-configuration</Permission>
|
||||
<Permission>manage-security</Permission>
|
||||
<Permission>upload-services</Permission>
|
||||
<Permission>manage-services</Permission>
|
||||
<Permission>manage-lc-configuration</Permission>
|
||||
<Permission>manage-mediation</Permission>
|
||||
<Permission>monitor-system</Permission>
|
||||
<Permission>delegate-identity</Permission>
|
||||
</SystemPermission>
|
||||
</UserManager>
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - API Management Extensions Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -1,417 +0,0 @@
|
||||
/*
|
||||
* 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.api.services;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import io.swagger.annotations.ApiResponse;
|
||||
import io.swagger.annotations.ApiResponses;
|
||||
import io.swagger.annotations.Extension;
|
||||
import io.swagger.annotations.ExtensionProperty;
|
||||
import io.swagger.annotations.Info;
|
||||
import io.swagger.annotations.SwaggerDefinition;
|
||||
import io.swagger.annotations.Tag;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||
import org.wso2.carbon.device.application.mgt.api.beans.ErrorResponse;
|
||||
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;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* API for handling platform related operations in application management.
|
||||
*/
|
||||
@SwaggerDefinition(
|
||||
info = @Info(
|
||||
version = "1.0.0",
|
||||
title = "Platform Management Service",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = "name", value = "PlatformManagementService"),
|
||||
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/platforms"),
|
||||
})
|
||||
}
|
||||
),
|
||||
tags = {
|
||||
@Tag(name = "device_management, application_management", description = "Platform Management APIS "
|
||||
+ "related with Application Management")
|
||||
}
|
||||
)
|
||||
@Scopes (
|
||||
scopes = {
|
||||
@org.wso2.carbon.apimgt.annotations.api.Scope(
|
||||
name = "Get platform details",
|
||||
description = "Get platform details",
|
||||
key = "perm:platform:get",
|
||||
permissions = {"/device-mgt/platform/get"}
|
||||
),
|
||||
@org.wso2.carbon.apimgt.annotations.api.Scope(
|
||||
name = "Add a platform",
|
||||
description = "Add a platform",
|
||||
key = "perm:platform:add",
|
||||
permissions = {"/device-mgt/platform/add"}
|
||||
),
|
||||
@org.wso2.carbon.apimgt.annotations.api.Scope(
|
||||
name = "Update a platform",
|
||||
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"}
|
||||
)
|
||||
}
|
||||
)
|
||||
@Api(value = "Platform Management", description = "This API carries all platform management related operations " +
|
||||
"such as get all the available platform for a tenant, etc.")
|
||||
@Path("/platforms")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public interface PlatformManagementAPI {
|
||||
String SCOPE = "scope";
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "GET",
|
||||
value = "get all platforms",
|
||||
notes = "This will get all platforms that is visible for tenants",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:get")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully got platforms list.",
|
||||
response = Platform.class,
|
||||
responseContainer = "List"),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while getting the platform list.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response getPlatforms(
|
||||
@ApiParam(name = "status", allowableValues = "ENABLED, DISABLED, ALL", value =
|
||||
"Provide the status of platform for that tenant:\n"
|
||||
+ "- ENABLED: The platforms that are currently enabled for the tenant\n"
|
||||
+ "- DISABLED: The platforms that can be used by the tenant but disabled "
|
||||
+ "to be used for tenant\n"
|
||||
+ "- ALL: All the list of platforms that can be used by the tenant")
|
||||
@QueryParam("status")
|
||||
@Size(max = 45)
|
||||
String status,
|
||||
@ApiParam(name = "tag", defaultValue = "Tag value that we need to search the platform for")
|
||||
@QueryParam("tag") String tag
|
||||
);
|
||||
|
||||
@GET
|
||||
@Path("/{identifier}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "GET",
|
||||
value = "get platform",
|
||||
notes = "This will return the platform which is registered with {identifier}",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:get")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully got requested platform.",
|
||||
response = Platform.class),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while getting the platform.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response getPlatform(
|
||||
@ApiParam(
|
||||
name = "identifier",
|
||||
required = true)
|
||||
@PathParam("identifier")
|
||||
@Size(max = 45)
|
||||
String identifier
|
||||
);
|
||||
|
||||
@POST
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.MULTIPART_FORM_DATA)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.MULTIPART_FORM_DATA,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "POST",
|
||||
value = "Add Platform",
|
||||
notes = "This will a platform for the tenant space",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:add")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully added 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 addPlatform(
|
||||
@Multipart(value = "Platform", type = "application/json") Platform platform,
|
||||
@Multipart(value = "icon", required = false) Attachment iconFile
|
||||
);
|
||||
|
||||
@PUT
|
||||
@Path("/{identifier}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "PUT",
|
||||
value = "Update Platform",
|
||||
notes = "This will update the platform configuration for the tenant space",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:update")
|
||||
})
|
||||
}
|
||||
)
|
||||
@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 updatePlatform(
|
||||
@ApiParam(
|
||||
name = "platform",
|
||||
value = "The payload of the platform",
|
||||
required = true)
|
||||
Platform platform,
|
||||
@ApiParam(
|
||||
name = "identifier",
|
||||
required = true)
|
||||
@PathParam("identifier")
|
||||
@Size(max = 45)
|
||||
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 deleted the platform"),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while deleting the platform.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response removePlatform(
|
||||
@ApiParam(
|
||||
name = "identifier",
|
||||
required = true)
|
||||
@PathParam("identifier")
|
||||
@Size(max = 45)
|
||||
String identifier
|
||||
);
|
||||
|
||||
@PUT
|
||||
@Path("update-status/{identifier}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "PUT",
|
||||
value = "Update Platform status",
|
||||
notes = "This will update the platform status for the tenant space",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:update")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully updated the platform."),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not found. \n Non-file based platform not found to update."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while getting the platform list.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response updatePlatformStatus(
|
||||
@ApiParam(
|
||||
name = "identifier",
|
||||
required = true)
|
||||
@PathParam("identifier")
|
||||
@Size(max = 45)
|
||||
String identifier,
|
||||
@ApiParam(name = "status", allowableValues = "ENABLED, DISABLED", value =
|
||||
"Provide the status of platform for that tenant:\n"
|
||||
+ "- ENABLED: The platforms that are currently enabled for the tenant\n"
|
||||
+ "- DISABLED: The platforms that currently disabled "
|
||||
+ "to be used for tenant\n", required = true)
|
||||
@QueryParam("status")
|
||||
String status
|
||||
);
|
||||
|
||||
@GET
|
||||
@Path("tags/{name}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "GET",
|
||||
value = "get platform tags that starts with the given character sequence",
|
||||
notes = "This will get all platform tags that has the given character sequence ",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:add")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully retrieved platform tags.",
|
||||
response = Platform.class,
|
||||
responseContainer = "List"),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while getting the platform tags.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response getPlatformTags(
|
||||
@ApiParam(name = "name", value = "The initial part of the name of platform tags that we need to retrieve",
|
||||
required = true)
|
||||
@PathParam("name") @Size(min = 3) String name
|
||||
);
|
||||
|
||||
@POST
|
||||
@Path("/{identifier}/icon")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.MULTIPART_FORM_DATA)
|
||||
@ApiOperation(
|
||||
consumes = MediaType.MULTIPART_FORM_DATA,
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "POST",
|
||||
value = "Update Platform icon",
|
||||
notes = "This will update the platform icon",
|
||||
tags = "Platform Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = SCOPE, value = "perm:platform:update")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully updated the platform icon"),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request parameters passed."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while updating the platform icon.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response updatePlatformIcon(
|
||||
@ApiParam(
|
||||
name = "identifier",
|
||||
required = true)
|
||||
@PathParam("identifier")
|
||||
@Size(max = 45)
|
||||
String identifier,
|
||||
@Multipart(value = "icon") Attachment iconFile
|
||||
);
|
||||
}
|
||||
@ -1,593 +0,0 @@
|
||||
/*
|
||||
* 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.api.services.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||
import org.wso2.carbon.device.application.mgt.api.APIUtil;
|
||||
import org.wso2.carbon.device.application.mgt.api.FileStreamingOutput;
|
||||
import org.wso2.carbon.device.application.mgt.api.services.ApplicationManagementAPI;
|
||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
||||
import org.wso2.carbon.device.application.mgt.common.ImageArtifact;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationReleaseManager;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import javax.validation.Valid;
|
||||
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;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of Application Management related APIs.
|
||||
*/
|
||||
@Produces({"application/json"})
|
||||
@Path("/applications")
|
||||
public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
||||
|
||||
private static final int DEFAULT_LIMIT = 20;
|
||||
private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class);
|
||||
|
||||
@GET
|
||||
@Consumes("application/json")
|
||||
public Response getApplications(@QueryParam("offset") int offset, @QueryParam("limit") int limit,
|
||||
@QueryParam("query") String searchQuery) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
|
||||
try {
|
||||
if (limit == 0) {
|
||||
limit = DEFAULT_LIMIT;
|
||||
}
|
||||
Filter filter = new Filter();
|
||||
filter.setOffset(offset);
|
||||
filter.setLimit(limit);
|
||||
filter.setSearchQuery(searchQuery);
|
||||
|
||||
ApplicationList applications = applicationManager.getApplications(filter);
|
||||
|
||||
for (Application application : applications.getApplications()) {
|
||||
ImageArtifact imageArtifact = applicationStorageManager.getImageArtifact(application.getUuid(),
|
||||
Constants.IMAGE_ARTIFACTS[0], 0);
|
||||
application.setIcon(imageArtifact);
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(applications).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while getting the application list";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Error occurred while getting the image artifacts of the application", e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Consumes("application/json")
|
||||
@Path("/{uuid}")
|
||||
public Response getApplication(@PathParam("uuid") String uuid, @QueryParam("isWithImages") Boolean isWithImages) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
Application application = applicationManager.getApplication(uuid);
|
||||
if (application == null) {
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Application with UUID " + uuid + " not found").build();
|
||||
}
|
||||
|
||||
if (isWithImages != null && isWithImages) {
|
||||
ImageArtifact icon = applicationStorageManager.getImageArtifact(uuid, Constants.IMAGE_ARTIFACTS[0], 0);
|
||||
ImageArtifact banner = applicationStorageManager.getImageArtifact(uuid, Constants.IMAGE_ARTIFACTS[1],
|
||||
0);
|
||||
int screenShotCount = application.getScreenShotCount();
|
||||
for (int count = 1; count < screenShotCount; count++) {
|
||||
ImageArtifact screenShot = applicationStorageManager.getImageArtifact(uuid, Constants
|
||||
.IMAGE_ARTIFACTS[2], count);
|
||||
application.addScreenShot(screenShot);
|
||||
}
|
||||
application.setIcon(icon);
|
||||
application.setBanner(banner);
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(application).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Error occurred while getting application with the uuid " + uuid, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Error occurred while getting the image artifacts of the application with the uuid " + uuid, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Consumes("application/json")
|
||||
@Path("/{uuid}/lifecycle")
|
||||
public Response changeLifecycleState(@PathParam("uuid") String applicationUUID,
|
||||
@QueryParam("state") String state) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
|
||||
if (!Arrays.asList(Constants.LIFE_CYCLES).contains(state)) {
|
||||
log.warn("Provided lifecycle state " + state + " is not valid. Please select one from"
|
||||
+ Arrays.toString(Constants.LIFE_CYCLES));
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Provided lifecycle state " + state + " is not valid. Please select one from "
|
||||
+ Arrays.toString(Constants.LIFE_CYCLES)).build();
|
||||
}
|
||||
try {
|
||||
applicationManager.changeLifecycle(applicationUUID, state);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully changed the lifecycle state of the application: " + applicationUUID).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while changing the lifecycle of application: " + applicationUUID;
|
||||
log.error(msg, e);
|
||||
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/{uuid}/lifecycle")
|
||||
@Override
|
||||
public Response getNextLifeCycleStates(@PathParam("uuid") String applicationUUID) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
try {
|
||||
if (applicationManager.getApplication(applicationUUID) == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Application with the UUID '" + applicationUUID + "' is not found.");
|
||||
}
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Application with the UUID '" +
|
||||
applicationUUID + "' is not found.").build();
|
||||
}
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Application with UUID '" + applicationUUID + "' is found. Request received for getting "
|
||||
+ "next life-cycle states for the particular application.");
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(applicationManager.getLifeCycleStates(applicationUUID))
|
||||
.build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Application Management Exception while trying to get next states for the applications with "
|
||||
+ "the application ID", e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Consumes("application/json")
|
||||
public Response createApplication(@Valid Application application) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
try {
|
||||
application = applicationManager.createApplication(application);
|
||||
return Response.status(Response.Status.OK).entity(application).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while creating the application";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/upload-image-artifacts/{uuid}")
|
||||
public Response uploadApplicationArtifacts(@PathParam("uuid") String applicationUUID,
|
||||
@Multipart("icon") Attachment iconFile, @Multipart("banner") Attachment bannerFile,
|
||||
@Multipart("screenshot") List<Attachment> attachmentList) {
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
InputStream iconFileStream;
|
||||
InputStream bannerFileStream;
|
||||
List<InputStream> attachments = new ArrayList<>();
|
||||
|
||||
if (iconFile != null) {
|
||||
iconFileStream = iconFile.getDataHandler().getInputStream();
|
||||
} else {
|
||||
throw new ApplicationManagementException(
|
||||
"Icon file is not uploaded for the application " + applicationUUID);
|
||||
}
|
||||
if (bannerFile != null) {
|
||||
bannerFileStream = bannerFile.getDataHandler().getInputStream();
|
||||
} else {
|
||||
throw new ApplicationManagementException(
|
||||
"Banner file is not uploaded for the application " + applicationUUID);
|
||||
}
|
||||
if (attachmentList != null && !attachmentList.isEmpty()) {
|
||||
for (Attachment screenshot : attachmentList) {
|
||||
attachments.add(screenshot.getDataHandler().getInputStream());
|
||||
}
|
||||
} else {
|
||||
throw new ApplicationManagementException(
|
||||
"Screen-shot are not uploaded for the application " + applicationUUID);
|
||||
}
|
||||
applicationStorageManager
|
||||
.uploadImageArtifacts(applicationUUID, iconFileStream, bannerFileStream, attachments);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully uploaded artifacts for the application " + applicationUUID).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while creating the application";
|
||||
log.error(msg, e);
|
||||
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||
} catch (IOException e) {
|
||||
log.error("Exception while trying to read icon, banner files for the application " + applicationUUID);
|
||||
return APIUtil.getResponse(new ApplicationManagementException(
|
||||
"Exception while trying to read icon, " + "banner files for the application " +
|
||||
applicationUUID, e), Response.Status.BAD_REQUEST);
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Error occurred while uploading the image artifacts of the application with the uuid "
|
||||
+ applicationUUID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Path("/upload-image-artifacts/{uuid}")
|
||||
public Response updateApplicationArtifacts(@PathParam("uuid") String applicationUUID,
|
||||
@Multipart("icon") Attachment iconFile, @Multipart("banner") Attachment bannerFile,
|
||||
@Multipart("screenshot") List<Attachment> attachmentList) {
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
InputStream iconFileStream = null;
|
||||
InputStream bannerFileStream = null;
|
||||
List<InputStream> attachments = new ArrayList<>();
|
||||
|
||||
if (iconFile != null) {
|
||||
iconFileStream = iconFile.getDataHandler().getInputStream();
|
||||
}
|
||||
if (bannerFile != null) {
|
||||
bannerFileStream = bannerFile.getDataHandler().getInputStream();
|
||||
}
|
||||
if (attachmentList != null) {
|
||||
for (Attachment screenshot : attachmentList) {
|
||||
attachments.add(screenshot.getDataHandler().getInputStream());
|
||||
}
|
||||
}
|
||||
applicationStorageManager
|
||||
.uploadImageArtifacts(applicationUUID, iconFileStream, bannerFileStream, attachments);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully updated artifacts for the application " + applicationUUID).build();
|
||||
} catch (IOException e) {
|
||||
log.error("Exception while trying to read icon, banner files for the application " + applicationUUID);
|
||||
return APIUtil.getResponse(new ApplicationManagementException(
|
||||
"Exception while trying to read icon, banner files for the application " +
|
||||
applicationUUID, e), Response.Status.BAD_REQUEST);
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Error occurred while uploading the image artifacts of the application with the uuid "
|
||||
+ applicationUUID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Consumes("application/json")
|
||||
public Response editApplication(@Valid Application application) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
try {
|
||||
application = applicationManager.editApplication(application);
|
||||
} catch (NotFoundException e) {
|
||||
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while creating the application";
|
||||
log.error(msg, e);
|
||||
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(application).build();
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Path("/{appuuid}")
|
||||
public Response deleteApplication(@PathParam("appuuid") String uuid) {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
try {
|
||||
applicationReleaseManager.deleteApplicationReleases(uuid);
|
||||
applicationStorageManager.deleteApplicationArtifacts(uuid);
|
||||
applicationManager.deleteApplication(uuid);
|
||||
String responseMsg = "Successfully deleted the application: " + uuid;
|
||||
return Response.status(Response.Status.OK).entity(responseMsg).build();
|
||||
} catch (NotFoundException e) {
|
||||
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while deleting the application: " + uuid;
|
||||
log.error(msg, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Error occurred while deleteing the image artifacts of the application with the uuid " + uuid, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/release/{uuid}")
|
||||
public Response createApplicationRelease(@PathParam("uuid") String applicationUUID,
|
||||
@Multipart("applicationRelease") ApplicationRelease applicationRelease,
|
||||
@Multipart("binaryFile") Attachment binaryFile) {
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
applicationRelease = applicationReleaseManager.createRelease(applicationUUID, applicationRelease);
|
||||
|
||||
if (binaryFile != null) {
|
||||
applicationStorageManager.uploadReleaseArtifacts(applicationUUID, applicationRelease.getVersionName(),
|
||||
binaryFile.getDataHandler().getInputStream());
|
||||
}
|
||||
return Response.status(Response.Status.CREATED).entity(applicationRelease).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Error while creating an application release for the application with UUID " + applicationUUID,
|
||||
e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (IOException e) {
|
||||
String errorMessage =
|
||||
"Error while uploading binary file for the application release of the application with UUID "
|
||||
+ applicationUUID;
|
||||
log.error(errorMessage, e);
|
||||
return APIUtil.getResponse(new ApplicationManagementException(errorMessage, e),
|
||||
Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Error occurred while uploading the releases artifacts of the application with the uuid "
|
||||
+ applicationUUID + " for the release " + applicationRelease.getVersionName(), e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Path("/release/{uuid}")
|
||||
public Response updateApplicationRelease(@PathParam("uuid") String applicationUUID, @Multipart
|
||||
("applicationRelease") ApplicationRelease applicationRelease, @Multipart("binaryFile") Attachment
|
||||
binaryFile) {
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
if (applicationRelease != null) {
|
||||
applicationRelease = applicationReleaseManager.updateRelease(applicationUUID, applicationRelease);
|
||||
}
|
||||
if (binaryFile != null) {
|
||||
String version = applicationRelease == null ? null : applicationRelease.getVersionName();
|
||||
|
||||
if (version == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity("Version cannot be null. Version is a "
|
||||
+ "mandatory parameter to update the release artifacts").build();
|
||||
}
|
||||
applicationStorageManager
|
||||
.uploadReleaseArtifacts(applicationUUID, version, binaryFile.getDataHandler().getInputStream());
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(applicationRelease).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Error while updating the application release of the application with UUID " + applicationUUID);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (IOException e) {
|
||||
log.error("Error while updating the release artifacts of the application with UUID " + applicationUUID);
|
||||
return APIUtil.getResponse(new ApplicationManagementException(
|
||||
"Error while updating the release artifacts of the application with UUID "
|
||||
+ applicationUUID), Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Error occurred while updating the releases artifacts of the application with the uuid "
|
||||
+ applicationUUID + " for the release " + applicationRelease.getVersionName(), e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
@Path("/release-artifacts/{uuid}/{version}")
|
||||
public Response getApplicationReleaseArtifacts(@PathParam("uuid") String applicationUUID,
|
||||
@PathParam("version") String version) {
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
InputStream binaryFile = applicationStorageManager.getReleasedArtifacts(applicationUUID, version);
|
||||
FileStreamingOutput fileStreamingOutput = new FileStreamingOutput(binaryFile);
|
||||
Response.ResponseBuilder response = Response.status(Response.Status.OK).entity(fileStreamingOutput);
|
||||
response.header("Content-Disposition", "attachment; filename=\"" + version + "\"");
|
||||
return response.build();
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Error while retrieving the binary file of the application release for the application UUID " +
|
||||
applicationUUID + " and version " + version, e);
|
||||
if (e.getMessage().contains("Binary file does not exist")) {
|
||||
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
|
||||
} else {
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/release/{uuid}")
|
||||
@GET
|
||||
public Response getApplicationReleases(@PathParam("uuid") String applicationUUID,
|
||||
@QueryParam("version") String version) {
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
try {
|
||||
if (version == null || version.isEmpty()) {
|
||||
List<ApplicationRelease> applicationReleases = applicationReleaseManager.getReleases(applicationUUID);
|
||||
return Response.status(Response.Status.OK).entity(applicationReleases).build();
|
||||
} else {
|
||||
ApplicationRelease applicationRelease = applicationReleaseManager.getRelease(applicationUUID, version);
|
||||
return Response.status(Response.Status.OK).entity(applicationRelease).build();
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Error while getting all the application releases for the application with the UUID "
|
||||
+ applicationUUID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@DELETE
|
||||
@Path("/release/{uuid}")
|
||||
public Response deleteApplicationRelease(@PathParam("uuid") String applicationUUID,
|
||||
@QueryParam("version") String version) {
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
if (version != null && !version.isEmpty()) {
|
||||
applicationStorageManager.deleteApplicationReleaseArtifacts(applicationUUID, version);
|
||||
applicationReleaseManager.deleteApplicationRelease(applicationUUID, version);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully deleted Application release with " + "version " + version
|
||||
+ " for the application with UUID " + applicationUUID).build();
|
||||
} else {
|
||||
applicationStorageManager.deleteAllApplicationReleaseArtifacts(applicationUUID);
|
||||
applicationReleaseManager.deleteApplicationReleases(applicationUUID);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully deleted Application releases for the " + "application with UUID "
|
||||
+ applicationUUID).build();
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Error while deleting application release with the application UUID " + applicationUUID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Error occurred while deleting the releases artifacts of the application with the uuid "
|
||||
+ applicationUUID + " for the release " + version, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/image-artifacts/{uuid}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response getApplicationImageArtifacts(@PathParam("uuid") String applicationUUID,
|
||||
@QueryParam("name") String name, @QueryParam("count") int count) {
|
||||
if (name == null || name.isEmpty()) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity("Name should not be null. Name is mandatory to"
|
||||
+ " retrieve the particular image artifact of the release").build();
|
||||
}
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
ImageArtifact imageArtifact = applicationStorageManager.getImageArtifact(applicationUUID, name, count);
|
||||
Response.ResponseBuilder response = Response.status(Response.Status.OK).entity(imageArtifact);
|
||||
return response.build();
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
log.error("Application Storage Management Exception while getting the image artifact " + name + " of "
|
||||
+ "the application with UUID " + applicationUUID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Consumes("application/json")
|
||||
@Path("/{uuid}/{version}/{channel}")
|
||||
public Response updateDefaultVersion(@PathParam("uuid") String applicationUUID, @PathParam("version") String
|
||||
version, @PathParam("channel") String channel, @QueryParam("isDefault") boolean isDefault) {
|
||||
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
|
||||
try {
|
||||
applicationReleaseManager.changeDefaultRelease(applicationUUID, version, isDefault, channel);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Successfully changed the default version for the " + "release channel " + channel
|
||||
+ " for the application UUID " + applicationUUID).build();
|
||||
} catch (NotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Application Release Management Exception while changing the default release for the release "
|
||||
+ "channel " + channel + " for the application with UUID " + applicationUUID + " for the version "
|
||||
+ version);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/category")
|
||||
public Response createCategory(@Valid Category category) {
|
||||
if (category == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity("Category is null. cannot create the "
|
||||
+ "category").build();
|
||||
}
|
||||
try {
|
||||
Category createdCategory = APIUtil.getCategoryManager().createCategory(category);
|
||||
return Response.status(Response.Status.CREATED).entity(createdCategory).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Application Management Exception while trying to create the application category", e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/category")
|
||||
public Response getCategories() {
|
||||
List<Category> categories;
|
||||
try {
|
||||
categories = APIUtil.getCategoryManager().getCategories();
|
||||
return Response.status(Response.Status.OK).entity(categories).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Application Management Exception while trying to get application categories", e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@DELETE
|
||||
@Path("/category/{name}")
|
||||
public Response deleteCategory(@PathParam("name") String name) {
|
||||
if (name == null || name.isEmpty()) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity("Name cannot be null or empty.").build();
|
||||
}
|
||||
try {
|
||||
APIUtil.getCategoryManager().deleteCategory(name);
|
||||
return Response.status(Response.Status.OK).entity("Successfully deleted the category.").build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
log.error("Application Management Exception while trying to delete category", e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.api.services.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.application.mgt.api.APIUtil;
|
||||
import org.wso2.carbon.device.application.mgt.api.services.LifecycleManagementAPI;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleState;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.LifecycleManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.LifecycleStateManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* Lifecycle Management related jax-rs APIs.
|
||||
*/
|
||||
@Path("/lifecycles")
|
||||
public class LifecycleManagementAPIImpl implements LifecycleManagementAPI {
|
||||
|
||||
private static Log log = LogFactory.getLog(LifecycleManagementAPIImpl.class);
|
||||
|
||||
@GET
|
||||
public Response getLifecycleStates() {
|
||||
LifecycleStateManager lifecycleStateManager = APIUtil.getLifecycleStateManager();
|
||||
List<LifecycleState> lifecycleStates = new ArrayList<>();
|
||||
try {
|
||||
lifecycleStates = lifecycleStateManager.getLifecycleStates();
|
||||
} catch (LifecycleManagementException e) {
|
||||
String msg = "Error occurred while retrieving lifecycle states.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(lifecycleStates).build();
|
||||
}
|
||||
|
||||
@POST
|
||||
public Response addLifecycleState(LifecycleState state) {
|
||||
LifecycleStateManager lifecycleStateManager = APIUtil.getLifecycleStateManager();
|
||||
try {
|
||||
lifecycleStateManager.addLifecycleState(state);
|
||||
} catch (LifecycleManagementException e) {
|
||||
String msg = "Error occurred while adding lifecycle state.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity("Lifecycle state added successfully.").build();
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Path("/{identifier}")
|
||||
public Response deleteLifecycleState(@PathParam("identifier") String identifier) {
|
||||
LifecycleStateManager lifecycleStateManager = APIUtil.getLifecycleStateManager();
|
||||
try {
|
||||
lifecycleStateManager.deleteLifecycleState(identifier);
|
||||
} catch (LifecycleManagementException e) {
|
||||
String msg = "Error occurred while deleting lifecycle state.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity("Lifecycle state deleted successfully.").build();
|
||||
}
|
||||
}
|
||||
@ -1,284 +0,0 @@
|
||||
/*
|
||||
* 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.api.services.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.application.mgt.api.APIUtil;
|
||||
import org.wso2.carbon.device.application.mgt.api.services.PlatformManagementAPI;
|
||||
import org.wso2.carbon.device.application.mgt.common.ImageArtifact;
|
||||
import org.wso2.carbon.device.application.mgt.common.Platform;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.PlatformStorageManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.PlatformStorageManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementDAOException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
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;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* Implementation of PlatformManagement APIs.
|
||||
*/
|
||||
@Path("/platforms")
|
||||
public class PlatformManagementAPIImpl implements PlatformManagementAPI {
|
||||
|
||||
private static final String ALL_STATUS = "ALL";
|
||||
private static final String ENABLED_STATUS = "ENABLED";
|
||||
private static final String DISABLED_STATUS = "DISABLED";
|
||||
|
||||
private static Log log = LogFactory.getLog(PlatformManagementAPIImpl.class);
|
||||
|
||||
@GET
|
||||
@Override
|
||||
public Response getPlatforms(@QueryParam("status") String status, @QueryParam("tag") String tag) {
|
||||
int tenantID = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
PlatformStorageManager platformStorageManager = APIUtil.getPlatformStorageManager();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("API request received for getting the platforms with the status " + status);
|
||||
}
|
||||
try {
|
||||
List<Platform> platforms = APIUtil.getPlatformManager().getPlatforms(tenantID);
|
||||
List<Platform> results;
|
||||
List<Platform> filteredPlatforms = new ArrayList<>();
|
||||
if (status != null) {
|
||||
if (status.contentEquals(ALL_STATUS)) {
|
||||
results = platforms;
|
||||
} else if (status.contentEquals(ENABLED_STATUS)) {
|
||||
results = new ArrayList<>();
|
||||
for (Platform platform : platforms) {
|
||||
if (platform.isEnabled()) {
|
||||
results.add(platform);
|
||||
}
|
||||
}
|
||||
} else if (status.contentEquals(DISABLED_STATUS)) {
|
||||
results = new ArrayList<>();
|
||||
for (Platform platform : platforms) {
|
||||
if (!platform.isEnabled()) {
|
||||
results.add(platform);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
results = platforms;
|
||||
}
|
||||
} else {
|
||||
results = platforms;
|
||||
}
|
||||
if (results != null) {
|
||||
for (Platform platform : results) {
|
||||
if (tag == null || tag.isEmpty() || (platform.getTags() != null && platform.getTags()
|
||||
.contains(tag))) {
|
||||
platform.setIcon(platformStorageManager.getIcon(platform.getIdentifier()));
|
||||
filteredPlatforms.add(platform);
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Number of platforms with the status " + status + " : " + results.size());
|
||||
}
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(filteredPlatforms).build();
|
||||
} catch (PlatformManagementException e) {
|
||||
log.error("Error while getting the platforms for tenant - " + tenantID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (PlatformStorageManagementException e) {
|
||||
log.error("Error while getting platform icons for the tenant : " + tenantID, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Override
|
||||
@Path("/{identifier}")
|
||||
public Response getPlatform(@PathParam("identifier") String id) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
try {
|
||||
Platform platform = APIUtil.getPlatformManager().getPlatform(tenantId, id);
|
||||
|
||||
if (platform == null) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Platform not found").build();
|
||||
}
|
||||
ImageArtifact icon = APIUtil.getPlatformStorageManager().getIcon(id);
|
||||
if (icon != null) {
|
||||
platform.setIcon(icon);
|
||||
}
|
||||
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);
|
||||
} catch (PlatformStorageManagementException e) {
|
||||
log.error("Platform Storage Management Exception while trying to get the icon for the platform : " + id
|
||||
+ " for the tenant : " + tenantId, e);
|
||||
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Override
|
||||
public Response addPlatform(@Multipart("platform") Platform platform, @Multipart("icon")Attachment icon) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
try {
|
||||
if (platform != null) {
|
||||
if (platform.validate()) {
|
||||
APIUtil.getPlatformManager().register(tenantId, platform);
|
||||
|
||||
if (icon != null) {
|
||||
InputStream iconFileStream = icon.getDataHandler().getInputStream();
|
||||
APIUtil.getPlatformStorageManager().uploadIcon(platform.getIdentifier(), iconFileStream);
|
||||
}
|
||||
return Response.status(Response.Status.CREATED).build();
|
||||
} else {
|
||||
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);
|
||||
} catch (IOException e) {
|
||||
log.error("IO Exception while trying to save platform icon for the platform : " + platform.getIdentifier(),
|
||||
e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Storage Exception while trying to save platform icon for the platform : " + platform
|
||||
.getIdentifier(), e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Path("/{identifier}")
|
||||
@Override
|
||||
public Response updatePlatform(Platform platform, @PathParam("identifier") @Size(max = 45) String id) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
try {
|
||||
APIUtil.getPlatformManager().update(tenantId, id, platform);
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (PlatformManagementException e) {
|
||||
log.error("Error while updating the platform - " + id + " for tenant domain - " + tenantId, e);
|
||||
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.getPlatformStorageManager().deleteIcon(id);
|
||||
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);
|
||||
} catch (PlatformStorageManagementException e) {
|
||||
log.error("Platform Storage Management Exception while trying to delete the icon of the platform with "
|
||||
+ "identifier for the tenant :" + tenantId, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Path("update-status/{identifier}")
|
||||
@Override
|
||||
public Response updatePlatformStatus(@PathParam("identifier") @Size(max = 45) String id, @QueryParam("status")
|
||||
String status) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
try {
|
||||
APIUtil.getPlatformManager().updatePlatformStatus(tenantId, id, status);
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (PlatformManagementDAOException e) {
|
||||
log.error("Platform Management Database Exception while trying to update the status of 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("Platform Management Exception while trying to update the status of the platform with the "
|
||||
+ "identifier : " + id + " for the tenant : " + tenantId, e);
|
||||
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("tags/{name}")
|
||||
@Override
|
||||
public Response getPlatformTags(@PathParam("name") String name) {
|
||||
if (name == null || name.isEmpty() || name.length() < 3) {
|
||||
return APIUtil.getResponse("In order to get platform tags, it is required to pass the first 3 "
|
||||
+ "characters of the platform tag name", Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
try {
|
||||
List<String> platformTags = APIUtil.getPlatformManager().getPlatformTags(name);
|
||||
return Response.status(Response.Status.OK).entity(platformTags).build();
|
||||
} catch (PlatformManagementException e) {
|
||||
log.error("Platform Management Exception while trying to get the platform tags with starting character "
|
||||
+ "sequence " + name, e);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("{identifier}/icon")
|
||||
@Override
|
||||
public Response updatePlatformIcon(@PathParam("identifier") String identifier, @Multipart("icon") Attachment
|
||||
icon) {
|
||||
try {
|
||||
if (icon != null) {
|
||||
InputStream iconFileStream = icon.getDataHandler().getInputStream();
|
||||
APIUtil.getPlatformStorageManager().uploadIcon(identifier, iconFileStream);
|
||||
return Response.status(Response.Status.OK)
|
||||
.entity("Icon file is successfully updated for the platform :" + identifier).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity("Icon file is not provided to update")
|
||||
.build();
|
||||
}
|
||||
} catch (ResourceManagementException e) {
|
||||
log.error("Resource Management exception while trying to update the icon for the platform " + identifier);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
} catch (IOException e) {
|
||||
log.error("IO exception while trying to update the icon for the platform " + identifier);
|
||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -24,11 +24,11 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.authhandler</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Authentication Handler API</name>
|
||||
<description>Proxy Service for Authentication Handling in WSO2 App Manager.</description>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Common</name>
|
||||
<description>WSO2 Carbon - Application Management Common</description>
|
||||
@ -56,6 +56,8 @@
|
||||
org.apache.commons.logging,
|
||||
javax.xml.*,
|
||||
org.apache.commons.codec.binary;version="${commons-codec.wso2.osgi.version.range}",
|
||||
org.wso2.carbon.device.mgt.core.dto.*;version="${carbon.device.mgt.version}",
|
||||
org.wso2.carbon.device.mgt.core.dao.*;version="${carbon.device.mgt.version}",
|
||||
org.w3c.dom,
|
||||
org.json,
|
||||
org.xml.sax,
|
||||
@ -108,6 +110,10 @@
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
|
||||
@ -20,11 +20,8 @@ package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Application represents the an Application in Application Store.
|
||||
@ -34,184 +31,60 @@ public class Application {
|
||||
@Exclude
|
||||
private int id;
|
||||
|
||||
private String uuid;
|
||||
|
||||
private String name;
|
||||
|
||||
private String shortDescription;
|
||||
private String appCategory;
|
||||
|
||||
private String description;
|
||||
private String type;
|
||||
|
||||
private String videoName;
|
||||
private int isFree;
|
||||
|
||||
private List<String> tags;
|
||||
private String paymentCurrency;
|
||||
|
||||
private Platform platform;
|
||||
|
||||
private List<Comment> comments;
|
||||
|
||||
private Category category;
|
||||
|
||||
private Map<String, String> properties;
|
||||
|
||||
private Date createdAt;
|
||||
|
||||
private Date modifiedAt;
|
||||
|
||||
private Payment payment;
|
||||
|
||||
private Lifecycle currentLifecycle;
|
||||
|
||||
private List<ApplicationRelease> releases;
|
||||
|
||||
private Visibility visibility;
|
||||
|
||||
private int screenShotCount;
|
||||
private List<Tag> tags;
|
||||
|
||||
private User user;
|
||||
|
||||
private ImageArtifact icon;
|
||||
private List<UnrestrictedRole> unrestrictedRoles;
|
||||
|
||||
private ImageArtifact banner;
|
||||
private int isRestricted;
|
||||
|
||||
private List<ImageArtifact> screenShots = new ArrayList<>();
|
||||
private List<ApplicationRelease> applicationReleases;
|
||||
|
||||
// private ApplicationRelease releaseVersion;
|
||||
|
||||
private DeviceType devicetype;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public List<ApplicationRelease> getReleases() {
|
||||
return releases;
|
||||
}
|
||||
|
||||
public void setReleases(List<ApplicationRelease> releases) {
|
||||
this.releases = releases;
|
||||
}
|
||||
|
||||
public List<Comment> getComments() {
|
||||
return comments;
|
||||
}
|
||||
|
||||
public void setComments(List<Comment> comments) {
|
||||
this.comments = comments;
|
||||
}
|
||||
|
||||
public Payment getPayment() {
|
||||
return payment;
|
||||
}
|
||||
|
||||
public void setPayment(Payment payment) {
|
||||
this.payment = payment;
|
||||
}
|
||||
|
||||
public Lifecycle getCurrentLifecycle() {
|
||||
return currentLifecycle;
|
||||
}
|
||||
|
||||
public void setCurrentLifecycle(Lifecycle currentLifecycle) {
|
||||
this.currentLifecycle = currentLifecycle;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public void setUuid(String uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
public void setName(String name) { this.name = name; }
|
||||
|
||||
public String getAppCategory() {
|
||||
return appCategory;
|
||||
}
|
||||
|
||||
public String getShortDescription() {
|
||||
return shortDescription;
|
||||
public void setAppCategory(String appCategory) {
|
||||
this.appCategory = appCategory;
|
||||
}
|
||||
|
||||
public void setShortDescription(String shortDescription) {
|
||||
this.shortDescription = shortDescription;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getVideoName() {
|
||||
return videoName;
|
||||
}
|
||||
|
||||
public void setVideoName(String videoName) {
|
||||
this.videoName = videoName;
|
||||
}
|
||||
|
||||
public List<String> getTags() {
|
||||
public List<Tag> getTags() {
|
||||
return tags;
|
||||
}
|
||||
|
||||
public void setTags(List<String> tags) {
|
||||
public void setTags(List<Tag> tags) {
|
||||
this.tags = tags;
|
||||
}
|
||||
|
||||
public Platform getPlatform() {
|
||||
return platform;
|
||||
}
|
||||
|
||||
public void setPlatform(Platform platform) {
|
||||
this.platform = platform;
|
||||
}
|
||||
|
||||
public Category getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setCategory(Category category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public Map<String, String> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(Map<String, String> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Date getModifiedAt() {
|
||||
return modifiedAt;
|
||||
}
|
||||
|
||||
public void setModifiedAt(Date modifiedAt) {
|
||||
this.modifiedAt = modifiedAt;
|
||||
}
|
||||
|
||||
public Visibility getVisibility() {
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public void setVisibility(Visibility visibility) {
|
||||
this.visibility = visibility;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
@ -220,33 +93,87 @@ public class Application {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public void setScreenShotCount(int screenShotCount) {
|
||||
this.screenShotCount = screenShotCount;
|
||||
public String uuidOfLatestRelease;
|
||||
|
||||
public ImageArtifact iconOfLatestRelease;
|
||||
|
||||
public List<UnrestrictedRole> getUnrestrictedRoles() {
|
||||
return unrestrictedRoles;
|
||||
}
|
||||
|
||||
public int getScreenShotCount() {
|
||||
return screenShotCount;
|
||||
public void setUnrestrictedRoles(List<UnrestrictedRole> unrestrictedRoles) {
|
||||
this.unrestrictedRoles = unrestrictedRoles;
|
||||
}
|
||||
|
||||
public void setIcon(ImageArtifact icon) {
|
||||
this.icon = icon;
|
||||
// public ApplicationRelease getReleaseVersion() {
|
||||
// return releaseVersion;
|
||||
// }
|
||||
//
|
||||
// public void setReleaseVersion(ApplicationRelease releaseVersion) {
|
||||
// this.releaseVersion = releaseVersion;
|
||||
// }
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setBanner(ImageArtifact banner) {
|
||||
this.banner = banner;
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void addScreenShot(ImageArtifact screenShot) {
|
||||
this.screenShots.add(screenShot);
|
||||
public int getIsFree() {
|
||||
return isFree;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String app = "UUID : " + uuid + "\tName : " + name + "\tShort Description : "
|
||||
+ shortDescription;
|
||||
if (currentLifecycle != null) {
|
||||
app += "\tLifecycle State : " + currentLifecycle.getLifecycleState();
|
||||
public void setIsFree(int isFree) {
|
||||
this.isFree = isFree;
|
||||
}
|
||||
return app;
|
||||
|
||||
public String getPaymentCurrency() {
|
||||
return paymentCurrency;
|
||||
}
|
||||
|
||||
public void setPaymentCurrency(String paymentCurrency) {
|
||||
this.paymentCurrency = paymentCurrency;
|
||||
}
|
||||
|
||||
public int getIsRestricted() {
|
||||
return isRestricted;
|
||||
}
|
||||
|
||||
public void setIsRestricted(int isRestricted) {
|
||||
this.isRestricted = isRestricted;
|
||||
}
|
||||
|
||||
public DeviceType getDevicetype() {
|
||||
return devicetype;
|
||||
}
|
||||
|
||||
public void setDevicetype(DeviceType devicetype) {
|
||||
this.devicetype = devicetype;
|
||||
}
|
||||
|
||||
public String getUuidOfLatestRelease() {
|
||||
return uuidOfLatestRelease;
|
||||
}
|
||||
|
||||
public void setUuidOfLatestRelease(String uuidOfLatestRelease) {
|
||||
this.uuidOfLatestRelease = uuidOfLatestRelease;
|
||||
}
|
||||
|
||||
public ImageArtifact getIconOfLatestRelease() {
|
||||
return iconOfLatestRelease;
|
||||
}
|
||||
|
||||
public void setIconOfLatestRelease(ImageArtifact iconOfLatestRelease) {
|
||||
this.iconOfLatestRelease = iconOfLatestRelease;
|
||||
}
|
||||
|
||||
public List<ApplicationRelease> getApplicationReleases() {
|
||||
return applicationReleases;
|
||||
}
|
||||
|
||||
public void setApplicationReleases(List<ApplicationRelease> applicationReleases) {
|
||||
this.applicationReleases = applicationReleases;
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,38 +20,65 @@ package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class holds the details when releasing an Application to application store.
|
||||
*/
|
||||
public class ApplicationRelease {
|
||||
|
||||
private enum Channel {
|
||||
PRODUCTION, ALPHA, BETA
|
||||
}
|
||||
|
||||
@Exclude
|
||||
private int id;
|
||||
|
||||
private int versionId;
|
||||
private String version;
|
||||
|
||||
private String versionName;
|
||||
private String tenantId;
|
||||
|
||||
private String resource;
|
||||
private String uuid;
|
||||
|
||||
private Channel releaseChannel;
|
||||
private String appStoredLoc;
|
||||
|
||||
private String releaseDetails;
|
||||
private String bannerLoc;
|
||||
|
||||
private Date createdAt;
|
||||
private String screenshotLoc1;
|
||||
|
||||
private Application application;
|
||||
private String screenshotLoc2;
|
||||
|
||||
private Map<String, String> properties;
|
||||
private String screenshotLoc3;
|
||||
|
||||
private boolean isDefault;
|
||||
private String applicationCreator;
|
||||
|
||||
private String releaseType;
|
||||
|
||||
private Double price;
|
||||
|
||||
private Timestamp createdAt;
|
||||
|
||||
private String publishedBy;
|
||||
|
||||
private Timestamp publishedAt;
|
||||
|
||||
private String modifiedBy;
|
||||
|
||||
private Timestamp modifiedAt;
|
||||
|
||||
private String iconLoc;
|
||||
|
||||
private String currentState;
|
||||
|
||||
private String previousState;
|
||||
|
||||
private String stateModifiedBy;
|
||||
|
||||
private Timestamp stateModifiedAt;
|
||||
|
||||
private String appHashValue;
|
||||
|
||||
private int isSharedWithAllTenants;
|
||||
|
||||
private String metaData;
|
||||
|
||||
private int noOfRatedUsers;
|
||||
|
||||
@ -73,75 +100,199 @@ public class ApplicationRelease {
|
||||
this.stars = stars;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getVersionName() {
|
||||
return versionName;
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public void setVersionName(String versionName) {
|
||||
this.versionName = versionName;
|
||||
public void setTenantId(String tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public String getResource() {
|
||||
return resource;
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public void setResource(String resource) {
|
||||
this.resource = resource;
|
||||
public void setUuid(String uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public Channel getReleaseChannel() {
|
||||
return releaseChannel;
|
||||
public String getReleaseType() {
|
||||
return releaseType;
|
||||
}
|
||||
|
||||
public void setReleaseChannel(String releaseChannel) {
|
||||
this.releaseChannel = Channel.valueOf(releaseChannel);
|
||||
public void setReleaseType(String releaseType) {
|
||||
this.releaseType = releaseType;
|
||||
}
|
||||
|
||||
public String getReleaseDetails() {
|
||||
return releaseDetails;
|
||||
public void setAppHashValue(String appHashValue) {
|
||||
this.appHashValue = appHashValue;
|
||||
}
|
||||
|
||||
public void setReleaseDetails(String releaseDetails) {
|
||||
this.releaseDetails = releaseDetails;
|
||||
public void setIsSharedWithAllTenants(int isSharedWithAllTenants) { this.isSharedWithAllTenants = isSharedWithAllTenants; }
|
||||
|
||||
public void setMetaData(String metaData) {
|
||||
this.metaData = metaData;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
public int getId() { return id; }
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public String getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public Double getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(Double price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String getCurrentState() {
|
||||
return currentState;
|
||||
}
|
||||
|
||||
public void setCurrentState(String currentState) {
|
||||
this.currentState = currentState;
|
||||
}
|
||||
|
||||
public String getPreviousState() {
|
||||
return previousState;
|
||||
}
|
||||
|
||||
public void setPreviousState(String previousState) {
|
||||
this.previousState = previousState;
|
||||
}
|
||||
|
||||
public String getStateModifiedBy() {
|
||||
return stateModifiedBy;
|
||||
}
|
||||
|
||||
public void setStateModifiedBy(String stateModifiedBy) {
|
||||
this.stateModifiedBy = stateModifiedBy;
|
||||
}
|
||||
|
||||
public Timestamp getStateModifiedAt() {
|
||||
return stateModifiedAt;
|
||||
}
|
||||
|
||||
public void setStateModifiedAt(Timestamp stateModifiedAt) {
|
||||
this.stateModifiedAt = stateModifiedAt;
|
||||
}
|
||||
|
||||
public String getAppHashValue() {
|
||||
return appHashValue;
|
||||
}
|
||||
|
||||
public int getIsSharedWithAllTenants() {
|
||||
return isSharedWithAllTenants;
|
||||
}
|
||||
|
||||
public String getMetaData() {
|
||||
return metaData;
|
||||
}
|
||||
|
||||
public String getAppStoredLoc() {
|
||||
return appStoredLoc;
|
||||
}
|
||||
|
||||
public void setAppStoredLoc(String appStoredLoc) {
|
||||
this.appStoredLoc = appStoredLoc;
|
||||
}
|
||||
|
||||
public String getBannerLoc() {
|
||||
return bannerLoc;
|
||||
}
|
||||
|
||||
public void setBannerLoc(String bannerLoc) {
|
||||
this.bannerLoc = bannerLoc;
|
||||
}
|
||||
|
||||
public String getScreenshotLoc1() {
|
||||
return screenshotLoc1;
|
||||
}
|
||||
|
||||
public void setScreenshotLoc1(String screenshotLoc1) {
|
||||
this.screenshotLoc1 = screenshotLoc1;
|
||||
}
|
||||
|
||||
public String getScreenshotLoc2() {
|
||||
return screenshotLoc2;
|
||||
}
|
||||
|
||||
public void setScreenshotLoc2(String screenshotLoc2) {
|
||||
this.screenshotLoc2 = screenshotLoc2;
|
||||
}
|
||||
|
||||
public String getScreenshotLoc3() {
|
||||
return screenshotLoc3;
|
||||
}
|
||||
|
||||
public void setScreenshotLoc3(String screenshotLoc3) {
|
||||
this.screenshotLoc3 = screenshotLoc3;
|
||||
}
|
||||
|
||||
public String getApplicationCreator() {
|
||||
return applicationCreator;
|
||||
}
|
||||
|
||||
public void setApplicationCreator(String applicationCreator) {
|
||||
this.applicationCreator = applicationCreator;
|
||||
}
|
||||
|
||||
public Timestamp getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
public void setCreatedAt(Timestamp createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Application getApplication() {
|
||||
return application;
|
||||
public String getPublishedBy() {
|
||||
return publishedBy;
|
||||
}
|
||||
|
||||
public void setApplication(Application application) {
|
||||
this.application = application;
|
||||
public void setPublishedBy(String publishedBy) {
|
||||
this.publishedBy = publishedBy;
|
||||
}
|
||||
|
||||
public Map<String, String> getProperties() {
|
||||
return properties;
|
||||
public Timestamp getPublishedAt() {
|
||||
return publishedAt;
|
||||
}
|
||||
|
||||
public void setProperties(Map<String, String> properties) {
|
||||
this.properties = properties;
|
||||
public void setPublishedAt(Timestamp publishedAt) {
|
||||
this.publishedAt = publishedAt;
|
||||
}
|
||||
|
||||
public boolean isDefault() {
|
||||
return isDefault;
|
||||
public String getModifiedBy() {
|
||||
return modifiedBy;
|
||||
}
|
||||
|
||||
public void setDefault(boolean aDefault) {
|
||||
isDefault = aDefault;
|
||||
public void setModifiedBy(String modifiedBy) {
|
||||
this.modifiedBy = modifiedBy;
|
||||
}
|
||||
|
||||
public Timestamp getModifiedAt() {
|
||||
return modifiedAt;
|
||||
}
|
||||
|
||||
public void setModifiedAt(Timestamp modifiedAt) {
|
||||
this.modifiedAt = modifiedAt;
|
||||
}
|
||||
|
||||
public String getIconLoc() {
|
||||
return iconLoc;
|
||||
}
|
||||
|
||||
public void setIconLoc(String iconLoc) {
|
||||
this.iconLoc = iconLoc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,39 +18,120 @@
|
||||
package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents an lifecycle of an {@link Application}.
|
||||
*/
|
||||
public class Lifecycle {
|
||||
|
||||
private LifecycleState lifecycleState;
|
||||
private int id;
|
||||
|
||||
private Date lifecycleStateModifiedAt;
|
||||
private Date createdAt;
|
||||
|
||||
private String getLifecycleStateModifiedBy;
|
||||
private String createdBy;
|
||||
|
||||
public LifecycleState getLifecycleState() {
|
||||
return lifecycleState;
|
||||
private int isApproved;
|
||||
|
||||
private String approvedBy;
|
||||
|
||||
private Date approvedAt;
|
||||
|
||||
private int isPublished;
|
||||
|
||||
private String publishedBy;
|
||||
|
||||
private Date publishedAt;
|
||||
|
||||
private int isRetired;
|
||||
|
||||
private List<LifecycleStateTransition> lifecycleStateTransition;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setLifecycleState(LifecycleState lifecycleState) {
|
||||
this.lifecycleState = lifecycleState;
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Date getLifecycleStateModifiedAt() {
|
||||
return lifecycleStateModifiedAt;
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setLifecycleStateModifiedAt(Date lifecycleStateModifiedAt) {
|
||||
this.lifecycleStateModifiedAt = lifecycleStateModifiedAt;
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public String getGetLifecycleStateModifiedBy() {
|
||||
return getLifecycleStateModifiedBy;
|
||||
public String getCreatedBy() {
|
||||
return createdBy;
|
||||
}
|
||||
|
||||
public void setGetLifecycleStateModifiedBy(String getLifecycleStateModifiedBy) {
|
||||
this.getLifecycleStateModifiedBy = getLifecycleStateModifiedBy;
|
||||
public void setCreatedBy(String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
}
|
||||
|
||||
public int getIsApproved() {
|
||||
return isApproved;
|
||||
}
|
||||
|
||||
public void setIsApproved(int isApproved) {
|
||||
this.isApproved = isApproved;
|
||||
}
|
||||
|
||||
public String getApprovedBy() {
|
||||
return approvedBy;
|
||||
}
|
||||
|
||||
public void setApprovedBy(String approvedBy) {
|
||||
this.approvedBy = approvedBy;
|
||||
}
|
||||
|
||||
public Date getApprovedAt() {
|
||||
return approvedAt;
|
||||
}
|
||||
|
||||
public void setApprovedAt(Date approvedAt) {
|
||||
this.approvedAt = approvedAt;
|
||||
}
|
||||
|
||||
public int getIsPublished() {
|
||||
return isPublished;
|
||||
}
|
||||
|
||||
public void setIsPublished(int isPublished) {
|
||||
this.isPublished = isPublished;
|
||||
}
|
||||
|
||||
public String getPublishedBy() {
|
||||
return publishedBy;
|
||||
}
|
||||
|
||||
public void setPublishedBy(String publishedBy) {
|
||||
this.publishedBy = publishedBy;
|
||||
}
|
||||
|
||||
public Date getPublishedAt() {
|
||||
return publishedAt;
|
||||
}
|
||||
|
||||
public void setPublishedAt(Date publishedAt) {
|
||||
this.publishedAt = publishedAt;
|
||||
}
|
||||
|
||||
public int getIsRetired() {
|
||||
return isRetired;
|
||||
}
|
||||
|
||||
public void setIsRetired(int isRetired) {
|
||||
this.isRetired = isRetired;
|
||||
}
|
||||
|
||||
public List<LifecycleStateTransition> getLifecycleStateTransition() {
|
||||
return lifecycleStateTransition;
|
||||
}
|
||||
|
||||
public void setLifecycleStateTransition(List<LifecycleStateTransition> lifecycleStateTransition) {
|
||||
this.lifecycleStateTransition = lifecycleStateTransition;
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,18 +18,25 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
/**
|
||||
* Represents a state in {@link Lifecycle}.
|
||||
*/
|
||||
import java.sql.Timestamp;
|
||||
|
||||
public class LifecycleState {
|
||||
|
||||
private int id;
|
||||
|
||||
private String name;
|
||||
private String currentState;
|
||||
|
||||
private String identifier;
|
||||
private String previousState;
|
||||
|
||||
private String description;
|
||||
private String updatedBy;
|
||||
|
||||
private Timestamp updatedAt;
|
||||
|
||||
private int tenantId;
|
||||
|
||||
private int releaseId;
|
||||
|
||||
private int appId;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
@ -39,27 +46,60 @@ public class LifecycleState {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
public String getCurrentState() {
|
||||
return currentState;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
public void setCurrentState(String currentState) {
|
||||
this.currentState = currentState;
|
||||
}
|
||||
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
public String getPreviousState() {
|
||||
return previousState;
|
||||
}
|
||||
|
||||
public void setIdentifier(String identifier) {
|
||||
this.identifier = identifier;
|
||||
public void setPreviousState(String previousState) {
|
||||
this.previousState = previousState;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
public String getUpdatedBy() {
|
||||
return updatedBy;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
public void setUpdatedBy(String updatedBy) {
|
||||
this.updatedBy = updatedBy;
|
||||
}
|
||||
|
||||
public Timestamp getUpdatedAt() {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Timestamp updatedAt) {
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public int getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(int tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public int getReleaseId() {
|
||||
return releaseId;
|
||||
}
|
||||
|
||||
public void setReleaseId(int releaseId) {
|
||||
this.releaseId = releaseId;
|
||||
}
|
||||
|
||||
public int getAppId() {
|
||||
return appId;
|
||||
}
|
||||
|
||||
public void setAppId(int appId) {
|
||||
this.appId = appId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,233 +0,0 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents the platform of an {@link Application}.
|
||||
*/
|
||||
public class Platform {
|
||||
|
||||
/**
|
||||
* Unique id reference that is used in the database.
|
||||
*/
|
||||
@Exclude
|
||||
private int id;
|
||||
|
||||
/**
|
||||
* The name of the platform. It can contain spaces,etc.
|
||||
*/
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* Unique human readable identifier used for the platform.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
private String iconName;
|
||||
|
||||
private boolean fileBased;
|
||||
|
||||
private boolean shared;
|
||||
|
||||
private List<String> tags;
|
||||
|
||||
private List<Property> properties;
|
||||
|
||||
private boolean enabled;
|
||||
|
||||
private boolean defaultTenantMapping;
|
||||
|
||||
private ImageArtifact icon;
|
||||
|
||||
public Platform(Platform platform) {
|
||||
this.id = platform.getId();
|
||||
this.name = platform.getName();
|
||||
this.description = platform.getDescription();
|
||||
this.identifier = platform.getIdentifier();
|
||||
this.iconName = platform.getIconName();
|
||||
this.fileBased = platform.isFileBased();
|
||||
this.shared = platform.isShared();
|
||||
this.enabled = platform.isEnabled();
|
||||
this.defaultTenantMapping = platform.isDefaultTenantMapping();
|
||||
if (platform.getProperties() != null) {
|
||||
this.properties = new ArrayList<>();
|
||||
for (Property property : platform.getProperties()) {
|
||||
this.properties.add(new Property(property));
|
||||
}
|
||||
}
|
||||
if (platform.getTags() != null) {
|
||||
this.tags = new ArrayList<>();
|
||||
for (String tag : platform.getTags()) {
|
||||
this.tags.add(tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Platform() {
|
||||
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public void setIdentifier(String identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
public String getIconName() {
|
||||
return iconName;
|
||||
}
|
||||
|
||||
public void setIconName(String iconName) {
|
||||
this.iconName = iconName;
|
||||
}
|
||||
|
||||
public List<Property> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(List<Property> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public List<String> getTags() {
|
||||
return tags;
|
||||
}
|
||||
|
||||
public void setTags(List<String> tags) {
|
||||
this.tags = tags;
|
||||
}
|
||||
|
||||
public boolean isFileBased() {
|
||||
return fileBased;
|
||||
}
|
||||
|
||||
public void setFileBased(boolean fileBased) {
|
||||
this.fileBased = fileBased;
|
||||
}
|
||||
|
||||
public boolean isShared() {
|
||||
return shared;
|
||||
}
|
||||
|
||||
public void setShared(boolean shared) {
|
||||
this.shared = shared;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public boolean isDefaultTenantMapping() {
|
||||
return defaultTenantMapping;
|
||||
}
|
||||
|
||||
public void setDefaultTenantMapping(boolean defaultTenantMapping) {
|
||||
this.defaultTenantMapping = defaultTenantMapping;
|
||||
}
|
||||
|
||||
public boolean validate() {
|
||||
return !(name == null || identifier == null);
|
||||
}
|
||||
|
||||
public void setIcon(ImageArtifact icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a property of a {@link Platform}.
|
||||
*/
|
||||
public static class Property implements Cloneable {
|
||||
|
||||
private String name;
|
||||
private boolean optional;
|
||||
private String defaultValue;
|
||||
|
||||
public Property(Property property) {
|
||||
this.name = property.getName();
|
||||
this.optional = property.isOptional();
|
||||
this.defaultValue = property.getDefaultValue();
|
||||
}
|
||||
|
||||
public Property() {
|
||||
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean isOptional() {
|
||||
return optional;
|
||||
}
|
||||
|
||||
public void setOptional(boolean optional) {
|
||||
this.optional = optional;
|
||||
}
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public void setDefaultValue(String defaultValue) {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,72 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) ${date}, 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;
|
||||
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Application represents the an Application in Application Store.
|
||||
*/
|
||||
public class Tag {
|
||||
|
||||
@Exclude
|
||||
private int id;
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String tagName;
|
||||
|
||||
private Application application;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(String tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public String getTagName() {
|
||||
return tagName;
|
||||
}
|
||||
|
||||
public void setTagName(String tagName) {
|
||||
this.tagName = tagName;
|
||||
}
|
||||
|
||||
public Application getApplication() {
|
||||
return application;
|
||||
}
|
||||
|
||||
public void setApplication(Application application) {
|
||||
this.application = application;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) ${date}, 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;
|
||||
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
||||
|
||||
/**
|
||||
* Application represents the an Application in Application Store.
|
||||
*/
|
||||
public class UnrestrictedRole {
|
||||
|
||||
@Exclude
|
||||
private int id;
|
||||
|
||||
private int tenantId;
|
||||
|
||||
private String role;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(int tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public String getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
public void setRole(String role) {
|
||||
this.role = role;
|
||||
}
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Exception caused during the platform management.
|
||||
*/
|
||||
public class PlatformManagementException extends ApplicationManagementException {
|
||||
|
||||
public PlatformManagementException(String message, Throwable ex) {
|
||||
super(message, ex);
|
||||
}
|
||||
|
||||
public PlatformManagementException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@ -18,11 +18,9 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.common.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleStateTransition;
|
||||
import org.wso2.carbon.device.application.mgt.common.*;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -62,6 +60,15 @@ public interface ApplicationManager {
|
||||
*/
|
||||
ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get the applications based on the search filter.
|
||||
* @param appId id of the application
|
||||
* @return Application release which is published and release of the Application(appId).
|
||||
* @throws ApplicationManagementException Application Management Exception
|
||||
*/
|
||||
String getUuidOfLatestRelease(int appId) throws ApplicationManagementException;
|
||||
|
||||
|
||||
/**
|
||||
* To change the lifecycle of the Application.
|
||||
*
|
||||
@ -85,9 +92,48 @@ public interface ApplicationManager {
|
||||
/**
|
||||
* To get Application with the given UUID.
|
||||
*
|
||||
* @param uuid UUID of the Application
|
||||
* @param appType type of the Application
|
||||
* @param appName name of the Application
|
||||
* @return the Application identified by the UUID
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Application getApplication(String uuid) throws ApplicationManagementException;
|
||||
Application getApplication(String appType, String appName) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get Application with the given UUID.
|
||||
*
|
||||
* @param applicationId Id of the Application
|
||||
* @return the Application identified by the application id
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Application getApplicationById(int applicationId) throws ApplicationManagementException;
|
||||
|
||||
|
||||
/**
|
||||
* To get Application with the given UUID.
|
||||
*
|
||||
* @param appId ID of the Application
|
||||
* @return the boolean value, whether application exist or not
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Boolean verifyApplicationExistenceById(int appId) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get Application with the given UUID.
|
||||
*
|
||||
* @return the boolean value, whether user has assigned unrestricted roles to access the application
|
||||
* * @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Boolean isUserAllowable(List<UnrestrictedRole> unrestrictedRoles, String userName) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get all the releases of a particular Application.
|
||||
*
|
||||
* @param applicationId ID of the Application to get all the releases.
|
||||
* @return the List of the Application releases related with the particular Application.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
List<ApplicationRelease> getReleases(int applicationId) throws ApplicationManagementException;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -33,11 +33,11 @@ public interface ApplicationReleaseManager {
|
||||
/**
|
||||
* To create an application release for an Application.
|
||||
*
|
||||
* @param appicationUuid UUID of the Application
|
||||
* @param applicationId ID of the Application
|
||||
* @param applicationRelease ApplicatonRelease that need to be be created.
|
||||
* @return the unique id of the application release, if the application release succeeded else -1
|
||||
*/
|
||||
ApplicationRelease createRelease(String appicationUuid, ApplicationRelease applicationRelease)
|
||||
ApplicationRelease createRelease(int applicationId, ApplicationRelease applicationRelease)
|
||||
throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
@ -45,19 +45,29 @@ public interface ApplicationReleaseManager {
|
||||
*
|
||||
* @param applicationUuid UUID of the Application.
|
||||
* @param version Version of the ApplicationRelease that need to be retrieved.
|
||||
* @param releaseType Release type of the app release. (e.g: alpha, beta, default, released)
|
||||
* @return ApplicationRelease related with particular Application UUID and version.
|
||||
* @throws ApplicationManagementException ApplicationManagementException
|
||||
*/
|
||||
ApplicationRelease getRelease(String applicationUuid, String version) throws ApplicationManagementException;
|
||||
ApplicationRelease getRelease(String applicationUuid, String version, String releaseType) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get the application release of the Application/
|
||||
*
|
||||
* @param applicationUuid UUID of the Application.
|
||||
* @return ApplicationRelease related with particular Application UUID and version.
|
||||
* @throws ApplicationManagementException ApplicationManagementException
|
||||
*/
|
||||
ApplicationRelease getReleaseByUuid(String applicationUuid) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get all the releases of a particular Application.
|
||||
*
|
||||
* @param applicationUuid UUID of the Application to get all the releases.
|
||||
* @param applicationId ID of the Application to get all the releases.
|
||||
* @return the List of the Application releases related with the particular Application.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
List<ApplicationRelease> getReleases(String applicationUuid) throws ApplicationManagementException;
|
||||
List<ApplicationRelease> getReleases(int applicationId) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To make a particular application release as the default / not default-one
|
||||
@ -74,12 +84,12 @@ public interface ApplicationReleaseManager {
|
||||
/**
|
||||
* To update with a new release for an Application.
|
||||
*
|
||||
* @param applicationUuid UUID of the Application
|
||||
* @param appId ID of the Application
|
||||
* @param applicationRelease ApplicationRelease
|
||||
* @return Updated Application Release.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
ApplicationRelease updateRelease(String applicationUuid, ApplicationRelease applicationRelease)
|
||||
ApplicationRelease updateRelease(int appId, ApplicationRelease applicationRelease)
|
||||
throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
@ -87,9 +97,10 @@ public interface ApplicationReleaseManager {
|
||||
*
|
||||
* @param applicationUuid UUID of the Application, in which the ApplicationRelease need to be deleted.
|
||||
* @param version Version of the ApplicationRelease that need to be deleted.
|
||||
* @param releaseType Release type of the application.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
void deleteApplicationRelease(String applicationUuid, String version) throws ApplicationManagementException;
|
||||
void deleteApplicationRelease(String applicationUuid, String version, String releaseType) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To delete all the application releases related with the the particular application.
|
||||
|
||||
@ -19,7 +19,9 @@
|
||||
|
||||
package org.wso2.carbon.device.application.mgt.common.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
||||
import org.wso2.carbon.device.application.mgt.common.ImageArtifact;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||
|
||||
@ -33,23 +35,47 @@ public interface ApplicationStorageManager {
|
||||
/**
|
||||
* To upload image artifacts related with an Application.
|
||||
*
|
||||
* @param applicationUUID UUID of the application
|
||||
* @param applicationRelease ApplicationRelease Object
|
||||
* @param iconFile Icon File input stream
|
||||
* @param bannerFile Banner File input stream
|
||||
* @throws ResourceManagementException Resource Management Exception.
|
||||
*/
|
||||
void uploadImageArtifacts(String applicationUUID, InputStream iconFile, InputStream bannerFile,
|
||||
List<InputStream> screenshots) throws ResourceManagementException;
|
||||
ApplicationRelease uploadImageArtifacts(ApplicationRelease applicationRelease,
|
||||
InputStream iconFile, InputStream bannerFile, List<InputStream> screenshots) throws ResourceManagementException;
|
||||
|
||||
/**
|
||||
* To upload image artifacts related with an Application.
|
||||
*
|
||||
* @param applicationId ID of the application
|
||||
* @param uuid Unique Identifier of the application
|
||||
* @param iconFile Icon File input stream
|
||||
* @param bannerFile Banner File input stream
|
||||
* @param screenshots Input Streams of screenshots
|
||||
* @throws ResourceManagementException Resource Management Exception.
|
||||
*/
|
||||
ApplicationRelease updateImageArtifacts(int applicationId, String uuid, InputStream iconFile,
|
||||
InputStream bannerFile, List<InputStream> screenshots)
|
||||
throws ResourceManagementException, ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To upload release artifacts for an Application.
|
||||
*
|
||||
* @param applicationUUID UUID of the application related with the release.
|
||||
* @param versionName Name of version of the Applcation Release.
|
||||
* @param applicationRelease Application Release Object.
|
||||
* @param binaryFile Binary File for the release.
|
||||
* @throws ResourceManagementException Resource Management Exception.
|
||||
*/
|
||||
void uploadReleaseArtifacts(String applicationUUID, String versionName, InputStream binaryFile)
|
||||
ApplicationRelease uploadReleaseArtifacts(ApplicationRelease applicationRelease, InputStream binaryFile)
|
||||
throws ResourceManagementException;
|
||||
|
||||
/**
|
||||
* To upload release artifacts for an Application.
|
||||
*
|
||||
* @param applicationId Id of the application.
|
||||
* @param applicationUuid UUID of the application related with the release.
|
||||
* @param binaryFile Binary File for the release.
|
||||
* @throws ResourceManagementException Resource Management Exception.
|
||||
*/
|
||||
ApplicationRelease updateReleaseArtifacts(int applicationId, String applicationUuid, InputStream binaryFile)
|
||||
throws ResourceManagementException;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* 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.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* CategoryManager is responsible for handling add, delete, update opertaions related with {@link Category}
|
||||
*/
|
||||
public interface CategoryManager {
|
||||
|
||||
/**
|
||||
* To create an application category.
|
||||
*
|
||||
* @param category Category that need to be created.
|
||||
* @return the created Category.
|
||||
* @throws ApplicationManagementException Application Management Exception
|
||||
*/
|
||||
Category createCategory(Category category) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get all the current categories.
|
||||
*
|
||||
* @return list of Application categories.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
List<Category> getCategories() throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get the category with the given name.
|
||||
*
|
||||
* @param name Name of the category to retrieve.
|
||||
* @return the category with the given name.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Category getCategory(String name) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To delete the category with the given name.
|
||||
*
|
||||
* @param name Name of the category to be deleted.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
void deleteCategory(String name) throws ApplicationManagementException;
|
||||
}
|
||||
@ -28,9 +28,9 @@ import java.util.List;
|
||||
*/
|
||||
public interface LifecycleStateManager {
|
||||
|
||||
List<LifecycleState> getLifecycleStates() throws LifecycleManagementException;
|
||||
List<LifecycleState> getLifecycleStates(int appReleaseId) throws LifecycleManagementException;
|
||||
|
||||
void addLifecycleState(LifecycleState state) throws LifecycleManagementException;
|
||||
|
||||
void deleteLifecycleState(String identifier) throws LifecycleManagementException;
|
||||
void deleteLifecycleState(int identifier) throws LifecycleManagementException;
|
||||
}
|
||||
|
||||
@ -1,142 +0,0 @@
|
||||
/*
|
||||
* 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.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Platform;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Platform manager is responsible for handling platforms, which will be used to as a registry of platforms.
|
||||
* And will be able to provide the platforms related information to other classes which requires.
|
||||
*/
|
||||
public interface PlatformManager {
|
||||
|
||||
/**
|
||||
* To initialize the shared platforms for the tenant during the tenant initialization time.
|
||||
*
|
||||
* @param tenantId ID of the tenant
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
void initialize(int tenantId) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To get platforms of the specific tenant.
|
||||
*
|
||||
* @param tenantId ID of the tenant
|
||||
* @return List of platforms
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
List<Platform> getPlatforms(int tenantId) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To get platform with the given platform identifier and tenant ID.
|
||||
*
|
||||
* @param tenantId ID of the tenant
|
||||
* @param platformIdentifier Unique identifier of the platform.
|
||||
* @return the Specific platform with the platform identifier and tenant
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
Platform getPlatform(int tenantId, String platformIdentifier) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To register a platform under particular tenant.
|
||||
*
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param platform Platform to be registered
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
void register(int tenantId, Platform platform) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To update a platform.
|
||||
*
|
||||
* @param tenantId ID of the tenant
|
||||
* @param oldPlatformIdentifier Old platform Identifier
|
||||
* @param platform Platform to be updated
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
void update(int tenantId, String oldPlatformIdentifier, Platform platform) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To un-register the platform.
|
||||
*
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param platformIdentifier ID of the platform
|
||||
* @param isFileBased To indicate whether a file based or not.
|
||||
* @throws PlatformManagementException Platform Management Exception.
|
||||
*/
|
||||
void unregister(int tenantId, String platformIdentifier, boolean isFileBased) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To add mapping to platform identifiers with the tenant ID.
|
||||
*
|
||||
* @param tenantId ID of the tenant
|
||||
* @param platformIdentifiers Platform Identifiers
|
||||
* @throws PlatformManagementException Platform Management Exception
|
||||
*/
|
||||
void addMapping(int tenantId, List<String> platformIdentifiers) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To add mapping to a platform for a tenant.
|
||||
*
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param platformIdentifier ID of the platform, the mapping should be added.
|
||||
* @throws PlatformManagementException Platform Management Exception.
|
||||
*/
|
||||
void addMapping(int tenantId, String platformIdentifier) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To remove a mapping of a platform to a tenant.
|
||||
*
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param platformIdentifier ID of the platform.
|
||||
* @throws PlatformManagementException Platform Management Exception.
|
||||
*/
|
||||
void removeMapping(int tenantId, String platformIdentifier) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To update the platform status(ENABLED / DISABLED).
|
||||
*
|
||||
* @param tenantId Id of the tenant
|
||||
* @param platformIdentifier ID of the platform
|
||||
* @param status Status to be updated.
|
||||
* @throws PlatformManagementException Platform Management Exception.
|
||||
*/
|
||||
void updatePlatformStatus(int tenantId, String platformIdentifier, String status)
|
||||
throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To remove platforms that belongs to particular tenant.
|
||||
*
|
||||
* @param tenantId ID of the tenant.
|
||||
* @throws PlatformManagementException Platform Management Exception.
|
||||
*/
|
||||
void removePlatforms(int tenantId) throws PlatformManagementException;
|
||||
|
||||
/**
|
||||
* To get the platform tags.
|
||||
*
|
||||
* @param name Starting character sequence of the platform name.
|
||||
* @return list of the platform tags that start with the character sequence.
|
||||
* @throws PlatformManagementException PlatformManagement Exception
|
||||
*/
|
||||
List<String> getPlatformTags(String name) throws PlatformManagementException;
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
/*
|
||||
* 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.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.ImageArtifact;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.PlatformStorageManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* This class manages all the storage related requirements of Platform.
|
||||
*/
|
||||
public interface PlatformStorageManager {
|
||||
/**
|
||||
* To upload image artifacts related with an Application.
|
||||
*
|
||||
* @param platformIdentifier Identifier of the platform
|
||||
* @param iconFile Icon File input stream
|
||||
* @throws ResourceManagementException Resource Management Exception.
|
||||
*/
|
||||
void uploadIcon(String platformIdentifier, InputStream iconFile) throws ResourceManagementException;
|
||||
|
||||
/**
|
||||
* To get the icon for a particular platform.
|
||||
*
|
||||
* @param platformIdentifier Identifier of the platform.
|
||||
* @return the icon for the given platform.
|
||||
* @throws PlatformStorageManagementException Platform Storage Management Exception.
|
||||
*/
|
||||
ImageArtifact getIcon(String platformIdentifier) throws PlatformStorageManagementException;
|
||||
|
||||
/**
|
||||
* To delete the icon of a particular platform
|
||||
*
|
||||
* @param platformIdentifier Identifier of the platform to which delete icon.
|
||||
* @throws PlatformStorageManagementException PlatformStorageManagement Exception.
|
||||
*/
|
||||
void deleteIcon(String platformIdentifier) throws PlatformStorageManagementException;
|
||||
}
|
||||
@ -18,15 +18,18 @@
|
||||
|
||||
package org.wso2.carbon.device.application.mgt.common.services;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.UnrestrictedRole;
|
||||
import org.wso2.carbon.device.application.mgt.common.Visibility;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.VisibilityManagementException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This interface manages all the operations related with Application Visibility.
|
||||
* This will be invoking the necessary backend calls for the data bases layer
|
||||
* and provide the functional implementation.
|
||||
*/
|
||||
public interface VisibilityManager {
|
||||
public interface UnrestrictedRoleManager {
|
||||
|
||||
/**
|
||||
* Add (if there is no visibility configuration for the application) or
|
||||
@ -42,9 +45,10 @@ public interface VisibilityManager {
|
||||
* Returns the Visibility configuration of the provided applicationUUID.
|
||||
*
|
||||
* @param applicationID The ID of the application
|
||||
* @param tenantId tenant Id
|
||||
* @return Visibility configuration
|
||||
*/
|
||||
Visibility get(int applicationID) throws VisibilityManagementException;
|
||||
List<UnrestrictedRole> getUnrestrictedRoles(int applicationID, int tenantId) throws VisibilityManagementException;
|
||||
|
||||
/**
|
||||
* Remove the visibility configuration mapping for the provided application.
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.core</artifactId>
|
||||
<version>3.0.46-SNAPSHOT</version>
|
||||
<version>3.0.217-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Core</name>
|
||||
<description>WSO2 Carbon - Application Management Core</description>
|
||||
@ -78,7 +78,10 @@
|
||||
org.wso2.carbon,
|
||||
org.apache.commons.io,
|
||||
org.apache.commons.codec.binary;version="${commons-codec.wso2.osgi.version.range}",
|
||||
org.wso2.carbon.base
|
||||
org.apache.commons.codec.digest;version="${commons-codec.wso2.osgi.version.range}",
|
||||
org.wso2.carbon.base,
|
||||
org.wso2.carbon.device.mgt.core.dto.*;version="${carbon.device.mgt.version}",
|
||||
org.wso2.carbon.device.mgt.core.dao.*;version="${carbon.device.mgt.version}"
|
||||
</Import-Package>
|
||||
<Export-Package>
|
||||
!org.wso2.carbon.device.application.mgt.core.internal.*,
|
||||
|
||||
@ -18,12 +18,9 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.dao;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleStateTransition;
|
||||
import org.wso2.carbon.device.application.mgt.common.*;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -38,7 +35,25 @@ public interface ApplicationDAO {
|
||||
* @return Created Application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Application createApplication(Application application) throws ApplicationManagementDAOException;
|
||||
int createApplication(Application application, int deviceId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To add tags for a particular application.
|
||||
*
|
||||
* @param tags tags that need to be added for a application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void addTags(List<Tag> tags, int applicationId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To check application existence.
|
||||
*
|
||||
* @param appName appName that need to identify application.
|
||||
* @param type type that need to identify application.
|
||||
* @param tenantId tenantId that need to identify application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
int isExistApplication(String appName, String type, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the applications that satisfy the given criteria.
|
||||
@ -50,26 +65,54 @@ public interface ApplicationDAO {
|
||||
*/
|
||||
ApplicationList getApplications(Filter filter, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the UUID of latest app release that satisfy the given criteria.
|
||||
*
|
||||
* @param appId application id
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
String getUuidOfLatestRelease(int appId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the application with the given uuid
|
||||
*
|
||||
* @param uuid UUID of the application to be retrieved.
|
||||
* @param appName name of the application to be retrieved.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param userName Name of the user.
|
||||
* @param appType Type of the application.
|
||||
* @return the application
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Application getApplication(String uuid, int tenantId, String userName) throws ApplicationManagementDAOException;
|
||||
Application getApplication(String appName, String appType, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the application with the given uuid
|
||||
*
|
||||
* @param applicationId Id of the application to be retrieved.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @return the application
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Application getApplicationById(int applicationId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the application with the given uuid
|
||||
*
|
||||
* @param appId ID of the application
|
||||
* @return the boolean value
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Boolean verifyApplicationExistenceById(int appId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the application id of the application specified by the UUID
|
||||
*
|
||||
* @param uuid UUID of the application.
|
||||
* @param appName name of the application.
|
||||
* @param appType type of the application.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @return ID of the Application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
int getApplicationId(String uuid, int tenantId) throws ApplicationManagementDAOException;
|
||||
int getApplicationId(String appName, String appType, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To edit the given application.
|
||||
@ -79,16 +122,16 @@ public interface ApplicationDAO {
|
||||
* @return Updated Application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Application editApplication(Application application, int tenantId) throws ApplicationManagementDAOException;
|
||||
Application editApplication(Application application, int tenantId) throws ApplicationManagementDAOException,
|
||||
ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To delete the application identified by the UUID
|
||||
* To delete the application
|
||||
*
|
||||
* @param uuid UUID of the application.
|
||||
* @param tenantId ID of tenant which the Application belongs to.
|
||||
* @param appId ID of the application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void deleteApplication(String uuid, int tenantId) throws ApplicationManagementDAOException;
|
||||
void deleteApplication(int appId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the application count that satisfies gives search query.
|
||||
@ -99,13 +142,6 @@ public interface ApplicationDAO {
|
||||
*/
|
||||
int getApplicationCount(Filter filter) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To delete the properties of a application.
|
||||
*
|
||||
* @param applicationId ID of the application to delete the properties.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void deleteProperties(int applicationId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To delete the tags of a application.
|
||||
@ -114,47 +150,5 @@ public interface ApplicationDAO {
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void deleteTags(int applicationId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To change the lifecycle state of the application.
|
||||
*
|
||||
* @param applicationUUID UUID of the application.
|
||||
* @param lifecycleIdentifier New lifecycle state.
|
||||
* @param username Name of the user.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void changeLifecycle(String applicationUUID, String lifecycleIdentifier, String username, int tenantId)
|
||||
throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the next possible lifecycle states for the application.
|
||||
*
|
||||
* @param applicationUUID UUID of the application.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @return Next possible lifecycle states.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId)
|
||||
throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To update the screen-shot count of a application.
|
||||
*
|
||||
* @param applicationUUID UUID of the application.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @param count New count of the screen-shots.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void updateScreenShotCount(String applicationUUID, int tenantId, int count)
|
||||
throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To check whether atleast one application exist under category.
|
||||
*
|
||||
* @param categoryName Name of the category.
|
||||
* @return true if atleast one application exist under the given category, otherwise false.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
boolean isApplicationExist(String categoryName) throws ApplicationManagementDAOException;
|
||||
}
|
||||
|
||||
|
||||
@ -35,27 +35,34 @@ public interface ApplicationReleaseDAO {
|
||||
* @return Unique ID of the relevant release.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
ApplicationRelease createRelease(ApplicationRelease applicationRelease) throws
|
||||
ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId) throws
|
||||
ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get a release details with the particular version.
|
||||
* @param applicationUuid UUID of the application to get the release.
|
||||
* @param applicationName name of the application to get the release.
|
||||
* @param versionName Name of the version
|
||||
* @param applicationType Type of the application release
|
||||
* @param releaseType type of the release
|
||||
* @param tenantId tenantId of the application
|
||||
|
||||
* @return ApplicationRelease for the particular version of the given application
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
ApplicationRelease getRelease(String applicationUuid, String versionName, int tenantId) throws
|
||||
ApplicationRelease getRelease(String applicationName,String applicationType, String versionName,
|
||||
String releaseType, int tenantId) throws
|
||||
ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get all the releases of a particular application.
|
||||
*
|
||||
* @param applicationUUID Application UUID
|
||||
* @param applicationName Name of the Application
|
||||
* @param applicationType Type of the Application
|
||||
* @param tenantId tenant id of the application
|
||||
* @return list of the application releases
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
List<ApplicationRelease> getApplicationReleases(String applicationUUID, int tenantId) throws
|
||||
List<ApplicationRelease> getApplicationReleases(String applicationName, String applicationType, int tenantId) throws
|
||||
ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
@ -66,6 +73,15 @@ public interface ApplicationReleaseDAO {
|
||||
*/
|
||||
ApplicationRelease updateRelease(ApplicationRelease applicationRelease) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To update an Application release.
|
||||
* @param id id of the ApplicationRelease that need to be updated.
|
||||
* @param stars given stars for the application.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception
|
||||
*/
|
||||
void updateStars(int id, int stars) throws ApplicationManagementDAOException;
|
||||
|
||||
|
||||
/**
|
||||
* To delete a particular release.
|
||||
*
|
||||
@ -75,23 +91,4 @@ public interface ApplicationReleaseDAO {
|
||||
*/
|
||||
void deleteRelease(int id, String version) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To delete the propertied of a particular Application Release.
|
||||
*
|
||||
* @param id ID of the ApplicationRelease in which properties need to be deleted.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void deleteReleaseProperties(int id) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To change the default version of a particular release channel.
|
||||
* @param uuid UUID of the application
|
||||
* @param version Version of the application
|
||||
* @param isDefault true if the request is to make the application as default one unless false
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void changeReleaseDefault(String uuid, String version, boolean isDefault, String releaseChannel, int tenantId)
|
||||
throws ApplicationManagementDAOException;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This is responsible for Application Category related DAO operations.
|
||||
*/
|
||||
public interface CategoryDAO {
|
||||
|
||||
/**
|
||||
* To add a new category.
|
||||
*
|
||||
* @param category Category that need to be added.
|
||||
* @return Newly added category.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Category addCategory(Category category) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the existing categories.
|
||||
*
|
||||
* @return Existing categories.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
List<Category> getCategories() throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the category with the given name.
|
||||
*
|
||||
* @param name Name of the Application category.
|
||||
* @return Application Category.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
Category getCategory(String name) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To delete a particular category.
|
||||
*
|
||||
* @param name Name of the category that need to be deleted.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
void deleteCategory(String name) throws ApplicationManagementDAOException;
|
||||
}
|
||||
@ -20,7 +20,7 @@ package org.wso2.carbon.device.application.mgt.core.dao;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleState;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.DAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.LifeCycleManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -29,12 +29,12 @@ import java.util.List;
|
||||
*/
|
||||
public interface LifecycleStateDAO {
|
||||
|
||||
LifecycleState getLifeCycleStateByIdentifier(String identifier) throws ApplicationManagementDAOException;
|
||||
LifecycleState getLatestLifeCycleStateByReleaseID(int identifier) throws ApplicationManagementDAOException;
|
||||
|
||||
List<LifecycleState> getLifecycleStates() throws DAOException;
|
||||
List<LifecycleState> getLifecycleStates(int appReleaseId) throws LifeCycleManagementDAOException;
|
||||
|
||||
void addLifecycleState(LifecycleState state) throws DAOException;
|
||||
void addLifecycleState(LifecycleState state) throws LifeCycleManagementDAOException;
|
||||
|
||||
void deleteLifecycleState(String identifier) throws DAOException;
|
||||
void deleteLifecycleState(int identifier) throws LifeCycleManagementDAOException;
|
||||
|
||||
}
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Platform;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* PlatformDAO defines set of DAO operations that are needed for Platform Management.
|
||||
*/
|
||||
public interface PlatformDAO {
|
||||
|
||||
int register(int tenantId, Platform platform) throws PlatformManagementDAOException;
|
||||
|
||||
void update(int tenantId, String oldPlatformIdentifier, Platform platform) throws PlatformManagementDAOException;
|
||||
|
||||
void unregister(int tenantId, String platformIdentifier, boolean isFileBased) throws PlatformManagementDAOException;
|
||||
|
||||
void addMapping(int tenantId, List<String> platformIdentifiers) throws PlatformManagementDAOException;
|
||||
|
||||
void removeMapping(int tenantId, String platformIdentifier) throws PlatformManagementDAOException;
|
||||
|
||||
void removeMappingTenants(String platformIdentifier) throws PlatformManagementDAOException;
|
||||
|
||||
List<Platform> getPlatforms(int tenantId) throws PlatformManagementDAOException;
|
||||
|
||||
Platform getPlatform(String tenantDomain, String platformIdentifier) throws PlatformManagementDAOException;
|
||||
|
||||
Platform getPlatform(int tenantId, String identifier) throws PlatformManagementDAOException;
|
||||
|
||||
void removePlatforms(int tenantId) throws PlatformManagementDAOException;
|
||||
|
||||
int getSuperTenantAndOwnPlatforms(String platformIdentifier, int tenantId) throws PlatformManagementDAOException;
|
||||
|
||||
Platform getTenantOwnedPlatform(int tenantId, String platformIdentifier) throws PlatformManagementDAOException;
|
||||
|
||||
int getMultiTenantPlatforms(String identifier) throws PlatformManagementDAOException;
|
||||
|
||||
List<String> getPlatformTags(String name) throws PlatformManagementDAOException;
|
||||
|
||||
}
|
||||
@ -18,7 +18,7 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.dao;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Visibility;
|
||||
import org.wso2.carbon.device.application.mgt.common.UnrestrictedRole;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.VisibilityManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
@ -30,13 +30,18 @@ import java.util.List;
|
||||
*/
|
||||
public interface VisibilityDAO {
|
||||
|
||||
int getVisibilityID(Visibility.Type visibilityType) throws VisibilityManagementDAOException;
|
||||
/**
|
||||
* To add unrestricted roles for a particular application.
|
||||
*
|
||||
* @param unrestrictedRoles unrestrictedRoles that could available the application.
|
||||
* @throws VisibilityManagementDAOException Visiblity Management DAO Exception.
|
||||
*/
|
||||
void addUnrestrictedRoles(List<UnrestrictedRole> unrestrictedRoles, int applicationId, int tenantId) throws
|
||||
VisibilityManagementDAOException;
|
||||
|
||||
void add(int applicationID, int visibilityTypeID, List<String> allowedList)
|
||||
throws VisibilityManagementDAOException;
|
||||
List<UnrestrictedRole> getUnrestrictedRoles(int applicationId, int tenantId) throws VisibilityManagementDAOException;
|
||||
|
||||
void delete(int applicationId) throws VisibilityManagementDAOException;
|
||||
|
||||
Visibility get(int applicationID) throws VisibilityManagementDAOException;
|
||||
void deleteUnrestrictedRoles(List<UnrestrictedRole> unrestrictedRoles, int applicationId, int tenantId) throws
|
||||
VisibilityManagementDAOException;
|
||||
|
||||
}
|
||||
|
||||
@ -34,16 +34,12 @@ import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManageme
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ApplicationMgtDatabaseCreator;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
|
||||
import org.wso2.carbon.device.mgt.core.dao.impl.DeviceTypeDAOImpl;
|
||||
import org.wso2.carbon.utils.dbcreator.DatabaseCreator;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import static org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil.resolveDataSource;
|
||||
|
||||
/**
|
||||
* This class intends to act as the primary entity that hides all DAO instantiation related complexities and logic so
|
||||
* that the business objection handling layer doesn't need to be aware of the same providing seamless plug-ability of
|
||||
@ -53,30 +49,12 @@ import static org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil.resolveData
|
||||
public class ApplicationManagementDAOFactory {
|
||||
|
||||
private static String databaseEngine;
|
||||
private static DataSource dataSource;
|
||||
private static final Log log = LogFactory.getLog(ApplicationManagementDAOFactory.class);
|
||||
|
||||
public static void init(String datasourceName) {
|
||||
ConnectionManagerUtil.resolveDataSource(datasourceName);
|
||||
databaseEngine = ConnectionManagerUtil.getDatabaseType();
|
||||
}
|
||||
public static void init(DataSource dtSource){
|
||||
dataSource=dtSource;
|
||||
try {
|
||||
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while retrieving config.datasource connection", e);
|
||||
}
|
||||
}
|
||||
public static void init(DataSourceConfig config) {
|
||||
dataSource = resolveDataSource(config);
|
||||
try {
|
||||
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while retrieving config.datasource connection", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static ApplicationDAO getApplicationDAO() {
|
||||
if (databaseEngine != null) {
|
||||
@ -131,7 +109,6 @@ public class ApplicationManagementDAOFactory {
|
||||
|
||||
/**
|
||||
* To get the instance of VisibilityDAOImplementation of the particular database engine.
|
||||
*
|
||||
* @return specific VisibilityDAOImplementation
|
||||
*/
|
||||
public static VisibilityDAO getVisibilityDAO() {
|
||||
@ -149,7 +126,6 @@ public class ApplicationManagementDAOFactory {
|
||||
|
||||
/**
|
||||
* To get the instance of SubscriptionDAOImplementation of the particular database engine.
|
||||
*
|
||||
* @return GenericSubscriptionDAOImpl
|
||||
*/
|
||||
public static SubscriptionDAO getSubscriptionDAO() {
|
||||
@ -168,7 +144,6 @@ public class ApplicationManagementDAOFactory {
|
||||
|
||||
/**
|
||||
* To get the instance of DeviceTypeDAOImpl of the particular database engine.
|
||||
*
|
||||
* @return DeviceTypeDAOImpl
|
||||
*/
|
||||
public static DeviceTypeDAO getDeviceTypeDAO() {
|
||||
@ -185,18 +160,13 @@ public class ApplicationManagementDAOFactory {
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* To get the instance of LifecycleDAOImplementation of the particular database engine.
|
||||
*
|
||||
* @return GenericLifecycleDAOImpl
|
||||
*/
|
||||
public static LifecycleStateDAO getLifecycleDAO() {
|
||||
public static CommentDAO getCommentDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
return new GenericLifecycleStateImpl();
|
||||
return new CommentDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
@ -235,21 +205,4 @@ public class ApplicationManagementDAOFactory {
|
||||
"Error while creating application-mgt database in the " + "startup ", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static CommentDAO getCommentDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
return new CommentDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,217 +0,0 @@
|
||||
/*
|
||||
* 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.common;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.UnsupportedDatabaseEngineException;
|
||||
import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationReleaseDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.CategoryDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.PlatformDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.SubscriptionDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.VisibilityDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.GenericApplicationDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.release.GenericApplicationReleaseDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.release.OracleApplicationDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.category.GenericCategoryDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.lifecyclestate.GenericLifecycleStateImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.GenericPlatformDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.OracleMsSQLPlatformDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.subscription.GenericSubscriptionDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.visibility.GenericVisibilityDAOImpl;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ApplicationMgtDatabaseCreator;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||
import org.wso2.carbon.utils.dbcreator.DatabaseCreator;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* This class intends to act as the primary entity that hides all DAO instantiation related complexities and logic so
|
||||
* that the business objection handling layer doesn't need to be aware of the same providing seamless plug-ability of
|
||||
* different data sources, connection acquisition mechanisms as well as different forms of DAO implementations to the
|
||||
* high-level implementations that require Application management related metadata persistence.
|
||||
*/
|
||||
public class DAOFactory {
|
||||
|
||||
private static String databaseEngine;
|
||||
private static final Log log = LogFactory.getLog(DAOFactory.class);
|
||||
|
||||
public static void init(String datasourceName) {
|
||||
ConnectionManagerUtil.resolveDataSource(datasourceName);
|
||||
databaseEngine = ConnectionManagerUtil.getDatabaseType();
|
||||
}
|
||||
|
||||
public static ApplicationDAO getApplicationDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
return new GenericApplicationDAOImpl();
|
||||
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||
return new OracleApplicationDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
public static PlatformDAO getPlatformDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
return new GenericPlatformDAOImpl();
|
||||
case Constants.DataBaseTypes.DB_TYPE_MSSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||
return new OracleMsSQLPlatformDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
public static LifecycleStateDAO getLifecycleStateDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||
return new GenericLifecycleStateImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* To get the instance of ApplicationReleaseDAOImplementation of the particular database engine.
|
||||
*
|
||||
* @return specific ApplicationReleaseDAOImplementation
|
||||
*/
|
||||
public static ApplicationReleaseDAO getApplicationReleaseDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||
return new GenericApplicationReleaseDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* To get the instance of VisibilityDAOImplementation of the particular database engine.
|
||||
*
|
||||
* @return specific VisibilityDAOImplementation
|
||||
*/
|
||||
public static VisibilityDAO getVisibilityDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
return new GenericVisibilityDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* To get the instance of SubscriptionDAOImplementation of the particular database engine.
|
||||
* @return GenericSubscriptionDAOImpl
|
||||
*/
|
||||
public static SubscriptionDAO getSubscriptionDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||
return new GenericSubscriptionDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* To get the instance of CategoryDAOImplementation of the particular database engine.
|
||||
* @return {@link org.wso2.carbon.device.application.mgt.core.dao.impl.category.GenericCategoryDAOImpl}
|
||||
*/
|
||||
public static CategoryDAO getCategoryDAO() {
|
||||
if (databaseEngine != null) {
|
||||
switch (databaseEngine) {
|
||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||
return new GenericCategoryDAOImpl();
|
||||
default:
|
||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes the databases by creating the database.
|
||||
*
|
||||
* @throws ApplicationManagementDAOException Exceptions thrown during the creation of the tables
|
||||
*/
|
||||
public static void initDatabases() throws ApplicationManagementDAOException {
|
||||
String dataSourceName = ConfigurationManager.getInstance().getConfiguration().getDatasourceName();
|
||||
String validationQuery = "SELECT * from APPM_PLATFORM";
|
||||
try {
|
||||
if (System.getProperty("setup") == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Application Management Database schema initialization check was skipped since "
|
||||
+ "\'setup\' variable was not given during startup");
|
||||
}
|
||||
} else {
|
||||
DatabaseCreator databaseCreator = new ApplicationMgtDatabaseCreator(dataSourceName);
|
||||
if (!databaseCreator.isDatabaseStructureCreated(validationQuery)) {
|
||||
databaseCreator.createRegistryDatabase();
|
||||
log.info("Application Management tables are created in the database");
|
||||
} else {
|
||||
log.info("Application Management Database structure already exists. Not creating the database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error while creating application-mgt database during the " + "startup ", e);
|
||||
} catch (Exception e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error while creating application-mgt database in the " + "startup ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -21,12 +21,8 @@ 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.JSONException;
|
||||
import org.wso2.carbon.device.application.mgt.common.*;
|
||||
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.User;
|
||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
||||
import org.wso2.carbon.device.application.mgt.common.Lifecycle;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleState;
|
||||
import org.wso2.carbon.device.application.mgt.common.PaginationRequest;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.CommentManagementException;
|
||||
@ -37,9 +33,7 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This class is responsible for handling the utils of the Application Management DAO.
|
||||
@ -52,60 +46,106 @@ public class Util {
|
||||
* To create application object from the result set retrieved from the Database.
|
||||
*
|
||||
* @param rs ResultSet
|
||||
* @param rsProperties Properties resultset.
|
||||
* @param rsTags Tags resultset
|
||||
* @return List of Applications that is retrieved from the Database.
|
||||
* @throws SQLException SQL Exception
|
||||
* @throws JSONException JSONException.
|
||||
*/
|
||||
public static List<Application> loadApplications(ResultSet rs) throws SQLException, JSONException {
|
||||
|
||||
List<Application> applications = new ArrayList<>();
|
||||
Application application = null ;
|
||||
int applicatioId = -1;
|
||||
|
||||
while (rs.next()){
|
||||
if (applicatioId != rs.getInt("APP_ID")){
|
||||
|
||||
if( application != null){
|
||||
applications.add(application);
|
||||
}
|
||||
applicatioId = rs.getInt("APP_ID");
|
||||
application = new Application();
|
||||
application.setId(applicatioId);
|
||||
application.setName(rs.getString("APP_NAME"));
|
||||
application.setType(rs.getString("APP_TYPE"));
|
||||
application.setAppCategory(rs.getString("APP_CATEGORY"));
|
||||
application.setIsFree(rs.getInt("IS_FREE"));
|
||||
application.setIsRestricted(rs.getInt("RESTRICTED"));
|
||||
|
||||
List<Tag> tags = new ArrayList<>();
|
||||
Tag tag = new Tag();
|
||||
tag.setTagName(rs.getString("APP_TAG"));
|
||||
tags.add(tag);
|
||||
application.setTags(tags);
|
||||
|
||||
List<UnrestrictedRole> unrestrictedRoles = new ArrayList<>();
|
||||
UnrestrictedRole unrestrictedRole = new UnrestrictedRole();
|
||||
unrestrictedRole.setRole(rs.getString("ROLE"));
|
||||
unrestrictedRoles.add(unrestrictedRole);
|
||||
application.setUnrestrictedRoles(unrestrictedRoles);
|
||||
}else{
|
||||
Tag tag = new Tag();
|
||||
tag.setTagName(rs.getString("APP_TAG"));
|
||||
UnrestrictedRole unrestrictedRole = new UnrestrictedRole();
|
||||
unrestrictedRole.setRole(rs.getString("ROLE"));
|
||||
if (application != null && application.getTags().contains(tag)){
|
||||
application.getTags().add(tag);
|
||||
}
|
||||
if (application != null && application.getUnrestrictedRoles().contains(unrestrictedRole)){
|
||||
application.getUnrestrictedRoles().add(unrestrictedRole);
|
||||
}
|
||||
|
||||
}
|
||||
if(rs.last()){
|
||||
applications.add(application);
|
||||
}
|
||||
}
|
||||
|
||||
return applications;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* To create application object from the result set retrieved from the Database.
|
||||
*
|
||||
* @param rs ResultSet
|
||||
* @return Application that is retrieved from the Database.
|
||||
* @throws SQLException SQL Exception
|
||||
* @throws JSONException JSONException.
|
||||
*/
|
||||
public static Application loadApplication(ResultSet rs, ResultSet rsProperties, ResultSet rsTags)
|
||||
throws SQLException, JSONException {
|
||||
Application application = new Application();
|
||||
application.setId(rs.getInt("ID"));
|
||||
application.setName(rs.getString("NAME"));
|
||||
application.setUuid(rs.getString("UUID"));
|
||||
application.setShortDescription(rs.getString("SHORT_DESCRIPTION"));
|
||||
application.setDescription(rs.getString("DESCRIPTION"));
|
||||
application.setScreenShotCount(rs.getInt("SCREEN_SHOT_COUNT"));
|
||||
application.setVideoName(rs.getString("VIDEO_NAME"));
|
||||
application.setCreatedAt(rs.getDate("CREATED_AT"));
|
||||
application.setModifiedAt(rs.getDate("MODIFIED_AT"));
|
||||
application.setUser(new User(rs.getString("CREATED_BY"), rs.getInt("TENANT_ID")));
|
||||
public static Application loadApplication(ResultSet rs) throws SQLException, JSONException {
|
||||
|
||||
Platform platform = new Platform();
|
||||
platform.setName(rs.getString("APL_NAME"));
|
||||
platform.setIdentifier(rs.getString("APL_IDENTIFIER"));
|
||||
application.setPlatform(platform);
|
||||
Application application = null;
|
||||
int applicatioId = -1;
|
||||
int iteration = 0;
|
||||
|
||||
Map<String, String> properties = new HashMap<>();
|
||||
while (rsProperties.next()) {
|
||||
properties.put(rsProperties.getString("PROP_KEY"), rsProperties.getString("PROP_VAL"));
|
||||
while (rs.next()){
|
||||
if (iteration == 0){
|
||||
application = new Application();
|
||||
applicatioId = rs.getInt("APP_ID");
|
||||
application.setId(applicatioId);
|
||||
application.setName(rs.getString("APP_NAME"));
|
||||
application.setType(rs.getString("APP_TYPE"));
|
||||
application.setAppCategory(rs.getString("APP_CATEGORY"));
|
||||
application.setIsFree(rs.getInt("IS_FREE"));
|
||||
application.setIsRestricted(rs.getInt("RESTRICTED"));
|
||||
}
|
||||
application.setProperties(properties);
|
||||
|
||||
List<String> tags = new ArrayList<>();
|
||||
while ((rsTags.next())) {
|
||||
tags.add(rsTags.getString("NAME"));
|
||||
Tag tag = new Tag();
|
||||
tag.setTagName(rs.getString("APP_TAG"));
|
||||
UnrestrictedRole unrestrictedRole = new UnrestrictedRole();
|
||||
unrestrictedRole.setRole(rs.getString("ROLE"));
|
||||
if (application.getTags().contains(tag)){
|
||||
application.getTags().add(tag);
|
||||
}
|
||||
if (application.getUnrestrictedRoles().contains(unrestrictedRole)){
|
||||
application.getUnrestrictedRoles().add(unrestrictedRole);
|
||||
}
|
||||
iteration++;
|
||||
}
|
||||
application.setTags(tags);
|
||||
|
||||
Category category = new Category();
|
||||
category.setId(rs.getInt("CAT_ID"));
|
||||
category.setName(rs.getString("CAT_NAME"));
|
||||
application.setCategory(category);
|
||||
|
||||
LifecycleState lifecycleState = new LifecycleState();
|
||||
lifecycleState.setId(rs.getInt("LIFECYCLE_STATE_ID"));
|
||||
lifecycleState.setName(rs.getString("LS_NAME"));
|
||||
lifecycleState.setIdentifier(rs.getString("LS_IDENTIFIER"));
|
||||
lifecycleState.setDescription(rs.getString("LS_DESCRIPTION"));
|
||||
|
||||
Lifecycle lifecycle = new Lifecycle();
|
||||
lifecycle.setLifecycleState(lifecycleState);
|
||||
application.setCurrentLifecycle(lifecycle);
|
||||
return application;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Cleans up the statement and resultset after executing the query
|
||||
*
|
||||
|
||||
@ -21,27 +21,16 @@ package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONException;
|
||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleStateTransition;
|
||||
import org.wso2.carbon.device.application.mgt.common.Pagination;
|
||||
import org.wso2.carbon.device.application.mgt.common.*;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
||||
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.ApplicationManagementDAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.sql.*;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This handles ApplicationDAO related operations.
|
||||
@ -50,54 +39,41 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
|
||||
private static final Log log = LogFactory.getLog(GenericApplicationDAOImpl.class);
|
||||
|
||||
public Application createApplication(Application application) throws ApplicationManagementDAOException {
|
||||
@Override
|
||||
public int createApplication(Application application, int deviceId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to create an application");
|
||||
log.debug("Application Details : ");
|
||||
log.debug("UUID : " + application.getUuid() + " Name : " + application.getName() + " User name : "
|
||||
+ application.getUser().getUserName());
|
||||
log.debug("App Name : " + application.getName() + " App Type : "
|
||||
+ application.getType() + " User Name : " + application.getUser().getUserName());
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
String generatedColumns[] = {"ID"};
|
||||
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||
int index = 0;
|
||||
int applicationId = -1;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql += "INSERT INTO APPM_APPLICATION (UUID, NAME, SHORT_DESCRIPTION, DESCRIPTION, "
|
||||
+ "VIDEO_NAME, SCREEN_SHOT_COUNT, CREATED_BY, CREATED_AT, MODIFIED_AT, "
|
||||
+ "APPLICATION_CATEGORY_ID, PLATFORM_ID, TENANT_ID, LIFECYCLE_STATE_ID, "
|
||||
+ "LIFECYCLE_STATE_MODIFIED_AT, LIFECYCLE_STATE_MODIFIED_BY) VALUES "
|
||||
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
stmt = conn.prepareStatement(sql, generatedColumns);
|
||||
stmt.setString(++index, application.getUuid());
|
||||
stmt = conn.prepareStatement("INSERT INTO AP_APP (NAME, TYPE, APP_CATEGORY, "
|
||||
+ "IS_FREE, PAYMENT_CURRENCY, RESTRICTED, TENANT_ID) VALUES "
|
||||
+ "(?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
|
||||
stmt.setString(++index, application.getName());
|
||||
stmt.setString(++index, application.getShortDescription());
|
||||
stmt.setString(++index, application.getDescription());
|
||||
stmt.setString(++index, application.getVideoName());
|
||||
stmt.setInt(++index, application.getScreenShotCount());
|
||||
stmt.setString(++index, application.getUser().getUserName());
|
||||
stmt.setDate(++index, new Date(application.getCreatedAt().getTime()));
|
||||
stmt.setDate(++index, new Date(application.getModifiedAt().getTime()));
|
||||
stmt.setInt(++index, application.getCategory().getId());
|
||||
stmt.setInt(++index, application.getPlatform().getId());
|
||||
stmt.setString(++index, application.getType());
|
||||
stmt.setString(++index, application.getAppCategory());
|
||||
stmt.setInt(++index, application.getIsFree());
|
||||
stmt.setString(++index, application.getPaymentCurrency());
|
||||
stmt.setInt(++index, application.getIsRestricted());
|
||||
stmt.setInt(++index, application.getUser().getTenantId());
|
||||
stmt.setInt(++index, application.getCurrentLifecycle().getLifecycleState().getId());
|
||||
stmt.setDate(++index, new Date(application.getCurrentLifecycle().getLifecycleStateModifiedAt().getTime()));
|
||||
stmt.setString(++index, application.getCurrentLifecycle().getGetLifecycleStateModifiedBy());
|
||||
stmt.executeUpdate();
|
||||
|
||||
rs = stmt.getGeneratedKeys();
|
||||
if (rs.next()) {
|
||||
application.setId(rs.getInt(1));
|
||||
applicationId = rs.getInt(1);
|
||||
}
|
||||
insertApplicationTagsAndProperties(application, stmt, conn, isBatchExecutionSupported);
|
||||
return application;
|
||||
return applicationId;
|
||||
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when application creation", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
||||
} finally {
|
||||
@ -105,99 +81,97 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTags(List<Tag> tags, int applicationId, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to add tags");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int index = 0;
|
||||
String sql = "INSERT INTO AP_APP_TAG (TAG, TENANT_ID, AP_APP_ID) VALUES (?, ?, ?)";
|
||||
try{
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
for (Tag tag : tags) {
|
||||
stmt.setString(++index, tag.getTagName());
|
||||
stmt.setInt(++index, tenantId);
|
||||
stmt.setInt(++index, applicationId);
|
||||
stmt.addBatch();
|
||||
}
|
||||
stmt.executeBatch();
|
||||
|
||||
}catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when adding tags", e);
|
||||
}catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while adding tags", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int isExistApplication(String appName, String type, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to verify whether the registering app is registered or not");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int isExist = 0;
|
||||
int index = 0;
|
||||
String sql = "SELECT * FROM AP_APP WHERE NAME = ? AND TYPE = ? TENANT_ID = ?";
|
||||
try{
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(++index , appName);
|
||||
stmt.setString(++index , type);
|
||||
stmt.setInt(++index, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
isExist = 1;
|
||||
}
|
||||
|
||||
return isExist;
|
||||
|
||||
}catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when verifying application existence", e);
|
||||
}catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while adding unrestricted roles", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationList getApplications(Filter filter, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting application data from the database");
|
||||
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
||||
log.debug(String.format("Filter: limit=%s, offset=%s", filter.getLimit(), filter.getOffset()));
|
||||
}
|
||||
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
ApplicationList applicationList = new ApplicationList();
|
||||
List<Application> applications = new ArrayList<>();
|
||||
Pagination pagination = new Pagination();
|
||||
int index = 0;
|
||||
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY"
|
||||
+ " AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP.RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, AP_UNRESTRICTED_ROLES.ROLE "
|
||||
+ "AS APP_UNRESTRICTED_ROLES FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
|
||||
+ "LEFT JOIN AP_UNRESTRICTED_ROLES ON AP_APP.ID = AP_UNRESTRICTED_ROLES.AP_APP_ID) "
|
||||
+ "WHERE AP_APP.TENANT_ID = ?";
|
||||
|
||||
|
||||
if (filter == null) {
|
||||
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
||||
} else {
|
||||
pagination.setLimit(filter.getLimit());
|
||||
pagination.setOffset(filter.getOffset());
|
||||
}
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
stmt = this.generateGetApplicationsStatement(filter, conn, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
int length = 0;
|
||||
|
||||
while (rs.next()) {
|
||||
//Getting properties
|
||||
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, rs.getInt("ID"));
|
||||
ResultSet rsProperties = stmt.executeQuery();
|
||||
|
||||
//Getting tags
|
||||
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, rs.getInt("ID"));
|
||||
ResultSet rsTags = stmt.executeQuery();
|
||||
|
||||
applications.add(Util.loadApplication(rs, rsProperties, rsTags));
|
||||
Util.cleanupResources(null, rsProperties);
|
||||
Util.cleanupResources(null, rsTags);
|
||||
length++;
|
||||
}
|
||||
|
||||
pagination.setSize(length);
|
||||
pagination.setCount(this.getApplicationCount(filter));
|
||||
applicationList.setApplications(applications);
|
||||
applicationList.setPagination(pagination);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant"
|
||||
+ " " + tenantId + ". While executing " + sql, e);
|
||||
} catch (JSONException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON, while getting application"
|
||||
+ " list for the tenant " + tenantId, e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection while "
|
||||
+ "getting application list for the tenant " + tenantId, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
return applicationList;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used to generate the statement that is used to get the applications with the given filter.
|
||||
*
|
||||
* @param filter Filter to filter out the applications.
|
||||
* @param conn Database Connection.
|
||||
* @param tenantId ID of the tenant to retrieve the applications.
|
||||
* @return the statement for getting applications that are belong to a particular filter.
|
||||
* @throws SQLException SQL Exception
|
||||
*/
|
||||
protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn,
|
||||
int tenantId) throws SQLException {
|
||||
int index = 0;
|
||||
String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
|
||||
+ "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
|
||||
+ "LS.DESCRIPTION AS LS_DESCRIPTION FROM APPM_APPLICATION APP INNER JOIN APPM_PLATFORM APL "
|
||||
+ "ON APP.PLATFORM_ID = APL.ID INNER JOIN APPM_APPLICATION_CATEGORY CAT "
|
||||
+ "ON APP.APPLICATION_CATEGORY_ID = CAT.ID INNER JOIN APPM_LIFECYCLE_STATE LS "
|
||||
+ "ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE APP.TENANT_ID = ? ";
|
||||
|
||||
String userName = filter.getUserName();
|
||||
if (!userName.equals("ALL")) {
|
||||
sql += " AND APP.CREATED_BY = ? ";
|
||||
}
|
||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
sql += "AND LOWER (APP.NAME) ";
|
||||
sql += " AND LOWER (AP_APP.NAME) ";
|
||||
if (filter.isFullMatch()) {
|
||||
sql += "= ?";
|
||||
} else {
|
||||
@ -205,14 +179,16 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
}
|
||||
|
||||
sql += "LIMIT ? OFFSET ?";
|
||||
sql += " LIMIT ? OFFSET ? ORDER BY DESC APP_ID";
|
||||
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
pagination.setLimit(filter.getLimit());
|
||||
pagination.setOffset(filter.getOffset());
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(++index, tenantId);
|
||||
|
||||
if (!userName.equals("ALL")) {
|
||||
stmt.setString(++index, userName);
|
||||
}
|
||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
if (filter.isFullMatch()) {
|
||||
stmt.setString(++index, filter.getSearchQuery().toLowerCase());
|
||||
@ -223,15 +199,68 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
|
||||
stmt.setInt(++index, filter.getLimit());
|
||||
stmt.setInt(++index, filter.getOffset());
|
||||
rs = stmt.executeQuery();
|
||||
applicationList.setApplications(Util.loadApplications(rs));
|
||||
pagination.setSize(filter.getOffset());
|
||||
pagination.setCount(this.getApplicationCount(filter));
|
||||
applicationList.setPagination(pagination);
|
||||
|
||||
return stmt;
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant"
|
||||
+ " " + tenantId + ". While executing " + sql, e);
|
||||
}
|
||||
catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection while "
|
||||
+ "getting application list for the tenant " + tenantId, e);
|
||||
} catch (JSONException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON ", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
return applicationList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUuidOfLatestRelease(int appId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting UUID from the latest app release");
|
||||
}
|
||||
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
int index = 0;
|
||||
String uuId = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql += "SELECT APP_RELEASE.UUID AS UUID FROM AP_APP_RELEASE AS APP_RELEASE, AP_APP_LIFECYCLE_STATE "
|
||||
+ "AS LIFECYCLE WHERE APP_RELEASE.AP_APP_ID=? AND APP_RELEASE.ID = LIFECYCLE.AP_APP_RELEASE_ID "
|
||||
+ "AND LIFECYCLE.CURRENT_STATE = ? order by APP_RELEASE.ID DESC;";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(++index, appId);
|
||||
stmt.setString(++index, "PUBLISHED");
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
uuId = rs.getString("UUID");
|
||||
}
|
||||
return uuId;
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while getting uuid of latest app release", e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection for "
|
||||
+ "getting app release id", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getApplicationCount(Filter filter) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting application count from the database");
|
||||
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
||||
log.debug(String.format("Filter: limit=%s, offset=%s", filter.getLimit(), filter.getOffset()));
|
||||
}
|
||||
|
||||
Connection conn;
|
||||
@ -246,13 +275,10 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql += "SELECT COUNT(APP.ID) AS APP_COUNT ";
|
||||
sql += "FROM APPM_APPLICATION AS APP ";
|
||||
sql += "INNER JOIN APPM_PLATFORM AS APL ON APP.PLATFORM_ID = APL.ID ";
|
||||
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
||||
sql += "SELECT count(APP.ID) AS APP_COUNT FROM AP_APP AS APP WHERE TENANT_ID = ?";
|
||||
|
||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
sql += "WHERE LOWER (APP.NAME) LIKE ? ";
|
||||
sql += " AND LOWER (APP.NAME) LIKE ? ";
|
||||
}
|
||||
sql += ";";
|
||||
|
||||
@ -276,67 +302,38 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
|
||||
@Override
|
||||
public Application getApplication(String uuid, int tenantId, String userName) throws
|
||||
public Application getApplication(String appName, String appType, int tenantId) throws
|
||||
ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()){
|
||||
log.debug("Getting application with the UUID(" + uuid + ") from the database");
|
||||
log.debug("Getting application with the type(" + appType + " and Name " + appName +
|
||||
" ) from the database");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
Application application = null;
|
||||
try {
|
||||
|
||||
conn = this.getDBConnection();
|
||||
sql += "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
|
||||
+ "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
|
||||
+ "LS.DESCRIPTION AS LS_DESCRIPTION "
|
||||
+ "FROM APPM_APPLICATION APP "
|
||||
+ "INNER JOIN APPM_PLATFORM APL "
|
||||
+ "ON APP.PLATFORM_ID = APL.ID "
|
||||
+ "INNER JOIN APPM_APPLICATION_CATEGORY CAT "
|
||||
+ "ON APP.APPLICATION_CATEGORY_ID = CAT.ID "
|
||||
+ "INNER JOIN APPM_LIFECYCLE_STATE LS "
|
||||
+ " ON APP.LIFECYCLE_STATE_ID = LS.ID "
|
||||
+ "WHERE UUID = ? AND APP.TENANT_ID = ? ";
|
||||
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY "
|
||||
+ "AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP_TAG.TAG, AP_UNRESTRICTED_ROLES.ROLE AS RELESE_ID FROM "
|
||||
+ "AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.NAME=? AND AP_APP.TYPE= ? "
|
||||
+ "AND AP_APP.TENANT_ID=?;";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, uuid);
|
||||
stmt.setInt(2, tenantId);
|
||||
|
||||
if (!userName.equals("ALL")) {
|
||||
sql += "AND APP.CREATED_BY = ?";
|
||||
stmt.setString(3, userName);
|
||||
}
|
||||
stmt.setString(1, appName);
|
||||
stmt.setString(2, appType);
|
||||
stmt.setInt(3, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully retrieved basic details of the application with the UUID " + uuid);
|
||||
log.debug("Successfully retrieved basic details of the application with the type "
|
||||
+ appType +"and app name "+ appName);
|
||||
}
|
||||
|
||||
if (rs.next()) {
|
||||
//Getting properties
|
||||
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, rs.getInt("ID"));
|
||||
ResultSet rsProperties = stmt.executeQuery();
|
||||
return Util.loadApplication(rs);
|
||||
|
||||
//Getting tags
|
||||
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, rs.getInt("ID"));
|
||||
ResultSet rsTags = stmt.executeQuery();
|
||||
|
||||
application = Util.loadApplication(rs, rsProperties, rsTags);
|
||||
Util.cleanupResources(null, rsProperties);
|
||||
Util.cleanupResources(null, rsTags);
|
||||
}
|
||||
return application;
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while getting application details with UUID " + uuid + " While executing query "
|
||||
+ sql, e);
|
||||
"Error occurred while getting application details with app name " + appName + " While executing query ", e);
|
||||
} catch (JSONException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
||||
} catch (DBConnectionException e) {
|
||||
@ -347,198 +344,136 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier, String userName, int tenantId)
|
||||
throws ApplicationManagementDAOException {
|
||||
public Application getApplicationById(int applicationId, int tenantId) throws
|
||||
ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()){
|
||||
log.debug("Change Life cycle status change " + lifecycleIdentifier + "request received to the DAO "
|
||||
+ "level for the application with " + "the UUID '" + applicationUUID + "' from the user "
|
||||
+ userName);
|
||||
log.debug("Getting application with the id (" + applicationId + ") from the database");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "UPDATE APPM_APPLICATION SET "
|
||||
+ "LIFECYCLE_STATE_ID = (SELECT ID FROM APPM_LIFECYCLE_STATE WHERE IDENTIFIER = ?), "
|
||||
+ "LIFECYCLE_STATE_MODIFIED_BY = ?, LIFECYCLE_STATE_MODIFIED_AT = ? WHERE UUID = ? AND TENANT_ID "
|
||||
+ "= ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, lifecycleIdentifier);
|
||||
stmt.setString(2, userName);
|
||||
stmt.setDate(3, new Date(System.currentTimeMillis()));
|
||||
stmt.setString(4, applicationUUID);
|
||||
stmt.setInt(5, tenantId);
|
||||
stmt.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while changing lifecycle of application: " + applicationUUID + " to: "
|
||||
+ lifecycleIdentifier + " state.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId)
|
||||
throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement preparedStatement = null;
|
||||
ResultSet resultSet = null;
|
||||
|
||||
String sql = "SELECT STATE.NAME, TRANSITION.DESCRIPTION, TRANSITION.PERMISSION FROM ( SELECT * FROM "
|
||||
+ "APPM_LIFECYCLE_STATE ) STATE RIGHT JOIN (SELECT * FROM APPM_LC_STATE_TRANSITION WHERE "
|
||||
+ "INITIAL_STATE = (SELECT LIFECYCLE_STATE_ID FROM APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?)) "
|
||||
+ "TRANSITION ON TRANSITION.NEXT_STATE = STATE.ID";
|
||||
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(sql);
|
||||
preparedStatement.setString(1, applicationUUID);
|
||||
preparedStatement.setInt(2, tenantId);
|
||||
resultSet = preparedStatement.executeQuery();
|
||||
|
||||
List<LifecycleStateTransition> lifecycleStateTransitions = new ArrayList<>();
|
||||
|
||||
while (resultSet.next()) {
|
||||
LifecycleStateTransition lifecycleStateTransition = new LifecycleStateTransition();
|
||||
lifecycleStateTransition.setDescription(resultSet.getString(2));
|
||||
lifecycleStateTransition.setNextState(resultSet.getString(1));
|
||||
lifecycleStateTransition.setPermission(resultSet.getString(3));
|
||||
lifecycleStateTransitions.add(lifecycleStateTransition);
|
||||
}
|
||||
return lifecycleStateTransitions;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error while getting the DBConnection for getting the life "
|
||||
+ "cycle states for the application with the UUID : " + applicationUUID, e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("SQL exception while executing the query '" + sql + "'.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateScreenShotCount(String applicationUUID, int tenantId, int count)
|
||||
throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "UPDATE APPM_APPLICATION SET SCREEN_SHOT_COUNT = ? where UUID = ? and TENANT_ID = ?";
|
||||
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, count);
|
||||
statement.setString(2, applicationUUID);
|
||||
statement.setInt(3, tenantId);
|
||||
statement.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database connection while trying to update the screen-shot "
|
||||
+ "count for the application with UUID " + applicationUUID + " for the tenant " + tenantId);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("SQL exception while executing the query '" + sql + "' .", e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isApplicationExist(String categoryName) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "SELECT * FROM APPM_APPLICATION WHERE APPLICATION_CATEGORY_ID = (SELECT ID FROM "
|
||||
+ "APPM_APPLICATION_CATEGORY WHERE NAME = ?)";
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY \n"
|
||||
+ "AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP_TAG.TAG, AP_UNRESTRICTED_ROLES.ROLE AS RELESE_ID FROM \n"
|
||||
+ "AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.ID=? AND AP_APP.TENANT_ID=?;";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, categoryName);
|
||||
stmt.setInt(1, applicationId);
|
||||
stmt.setInt(2, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
return rs.next();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database Connection Exception while trying to check the " + "applications for teh category "
|
||||
+ categoryName, e);
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully retrieved basic details of the application with the id "
|
||||
+ applicationId);
|
||||
}
|
||||
|
||||
return Util.loadApplication(rs);
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL Exception while trying to get the application related with categories, while executing " + sql,
|
||||
e);
|
||||
"Error occurred while getting application details with app id " + applicationId + " While executing query ", e);
|
||||
} catch (JSONException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Application editApplication(Application application, int tenantId) throws ApplicationManagementDAOException {
|
||||
public Boolean verifyApplicationExistenceById(int appId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()){
|
||||
log.debug("Getting application with the application ID(" + appId + " ) from the database");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
String sql = "";
|
||||
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||
ResultSet rs = null;
|
||||
Boolean isAppExist = false;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY "
|
||||
+ "AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP_TAG.TAG, AP_UNRESTRICTED_ROLES.ROLE AS RELESE_ID FROM "
|
||||
+ "AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.ID=?;";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, appId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully retrieved basic details of the application with the application ID " + appId);
|
||||
}
|
||||
|
||||
if (rs.next()){
|
||||
isAppExist = true;
|
||||
}
|
||||
|
||||
return isAppExist;
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while getting application details with app ID " + appId + " While executing query ", e);
|
||||
}
|
||||
catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Application editApplication(Application application, int tenantId) throws ApplicationManagementException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
Application existingApplication = this.getApplication(application.getName(), application.getType(), tenantId);
|
||||
|
||||
if (existingApplication == null){
|
||||
throw new ApplicationManagementException("There doesn't have an application for updating");
|
||||
}
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
int index = 0;
|
||||
sql += "UPDATE APPM_APPLICATION SET NAME = COALESCE (?, NAME), SHORT_DESCRIPTION = COALESCE "
|
||||
+ "(?, SHORT_DESCRIPTION), DESCRIPTION = COALESCE (?, DESCRIPTION), SCREEN_SHOT_COUNT = "
|
||||
+ "COALESCE (?, SCREEN_SHOT_COUNT), VIDEO_NAME = COALESCE (?, VIDEO_NAME), MODIFIED_AT = COALESCE "
|
||||
+ "(?, MODIFIED_AT), ";
|
||||
String sql = "UPDATE AP_APP SET ";
|
||||
|
||||
if (application.getPayment() != null) {
|
||||
sql += " IS_FREE = COALESCE (?, IS_FREE), ";
|
||||
if (application.getPayment().getPaymentCurrency() != null) {
|
||||
sql += "PAYMENT_CURRENCY = COALESCE (?, PAYMENT_CURRENCY), ";
|
||||
|
||||
if (application.getName() != null && !application.getName().equals(existingApplication.getName())) {
|
||||
sql += "NAME = ?, ";
|
||||
}
|
||||
sql += "PAYMENT_PRICE = COALESCE (?, PAYMENT_PRICE), ";
|
||||
if (application.getType() != null && !application.getType().equals(existingApplication.getType())){
|
||||
sql += "TYPE = ?, ";
|
||||
}
|
||||
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
||||
sql += "APPLICATION_CATEGORY_ID = COALESCE (?, APPLICATION_CATEGORY_ID), ";
|
||||
if (application.getAppCategory() != null && !application.getAppCategory().equals(existingApplication.getAppCategory())){
|
||||
sql += "APP_CATEGORY = ?, ";
|
||||
}
|
||||
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
||||
sql += "PLATFORM_ID = COALESCE (?, PLATFORM_ID), ";
|
||||
if (application.getIsRestricted() != existingApplication.getIsRestricted()){
|
||||
sql += "RESTRICTED = ? ";
|
||||
}
|
||||
if (application.getIsFree() != existingApplication.getIsFree()){
|
||||
sql += "IS_FREE = ? ";
|
||||
}
|
||||
|
||||
sql += "TENANT_ID = COALESCE (?, TENANT_ID) WHERE UUID = ?";
|
||||
sql += "WHERE ID = ?";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
if (application.getName() != null && !application.getName().equals(existingApplication.getName())) {
|
||||
stmt.setString(++index, application.getName());
|
||||
stmt.setString(++index, application.getShortDescription());
|
||||
stmt.setString(++index, application.getDescription());
|
||||
stmt.setInt(++index, application.getScreenShotCount());
|
||||
stmt.setString(++index, application.getVideoName());
|
||||
stmt.setDate(++index, new Date(application.getModifiedAt().getTime()));
|
||||
if (application.getPayment() != null) {
|
||||
stmt.setBoolean(++index, application.getPayment().isFreeApp());
|
||||
if (application.getPayment().getPaymentCurrency() != null) {
|
||||
stmt.setString(++index, application.getPayment().getPaymentCurrency());
|
||||
}
|
||||
stmt.setFloat(++index, application.getPayment().getPaymentPrice());
|
||||
if (application.getType() != null && !application.getType().equals(existingApplication.getType())){
|
||||
stmt.setString(++index, application.getType());
|
||||
}
|
||||
if (application.getAppCategory() != null && !application.getAppCategory().equals(existingApplication.getAppCategory())){
|
||||
stmt.setString(++index, application.getAppCategory());
|
||||
}
|
||||
if (application.getIsRestricted() != existingApplication.getIsRestricted()){
|
||||
stmt.setInt(++index, application.getIsRestricted());
|
||||
}
|
||||
if (application.getIsFree() != existingApplication.getIsFree()){
|
||||
stmt.setInt(++index, application.getIsFree());
|
||||
}
|
||||
|
||||
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
||||
stmt.setInt(++index, application.getCategory().getId());
|
||||
}
|
||||
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
||||
stmt.setInt(++index, application.getPlatform().getId());
|
||||
}
|
||||
stmt.setInt(++index, tenantId);
|
||||
stmt.setString(++index, application.getUuid());
|
||||
stmt.setInt(++index, application.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
application.setId(getApplicationId(application.getUuid(), tenantId));
|
||||
|
||||
sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, application.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
// delete existing properties and add new ones. if no properties are set, existing ones will be deleted.
|
||||
sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, application.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
insertApplicationTagsAndProperties(application, stmt, conn, isBatchExecutionSupported);
|
||||
return application;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
@ -549,90 +484,21 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To insert application properties and Tags
|
||||
*
|
||||
* @param application Application in which the properties and tags need to be inserted
|
||||
*/
|
||||
private void insertApplicationTagsAndProperties(Application application, PreparedStatement stmt, Connection
|
||||
conn, boolean isBatchExecutionSupported) throws SQLException {
|
||||
String sql;
|
||||
if (application.getTags() != null && application.getTags().size() > 0) {
|
||||
sql = "INSERT INTO APPM_APPLICATION_TAG (NAME, APPLICATION_ID) VALUES (?, ?); ";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
for (String tag : application.getTags()) {
|
||||
stmt.setString(1, tag);
|
||||
stmt.setInt(2, application.getId());
|
||||
|
||||
if (isBatchExecutionSupported) {
|
||||
stmt.addBatch();
|
||||
} else {
|
||||
stmt.execute();
|
||||
}
|
||||
}
|
||||
if (isBatchExecutionSupported) {
|
||||
stmt.executeBatch();
|
||||
}
|
||||
}
|
||||
|
||||
if (application.getProperties() != null && application.getProperties().size() > 0) {
|
||||
sql = "INSERT INTO APPM_APPLICATION_PROPERTY (PROP_KEY, PROP_VAL, APPLICATION_ID) VALUES (?, ?, ?); ";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
Iterator it = application.getProperties().entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<String, String> property = (Map.Entry) it.next();
|
||||
stmt.setString(1, property.getKey());
|
||||
stmt.setString(2, property.getValue());
|
||||
stmt.setInt(3, application.getId());
|
||||
if (isBatchExecutionSupported) {
|
||||
stmt.addBatch();
|
||||
} else {
|
||||
stmt.execute();
|
||||
}
|
||||
}
|
||||
if (isBatchExecutionSupported) {
|
||||
stmt.executeBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteApplication(String uuid, int tenantId) throws ApplicationManagementDAOException {
|
||||
public void deleteApplication(int appId) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "DELETE FROM APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?";
|
||||
String sql = "DELETE FROM AP_APP WHERE ID = ? ";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, uuid);
|
||||
stmt.setInt(2, tenantId);
|
||||
stmt.setInt(1, appId);
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while deleting the application: " + uuid, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProperties(int applicationId) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, applicationId);
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while deleting properties of application: " + applicationId, e);
|
||||
throw new ApplicationManagementDAOException("Error occurred while deleting the application: " , e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
}
|
||||
@ -644,7 +510,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
||||
String sql = "DELETE FROM AP_APP_TAG WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, applicationId);
|
||||
stmt.executeUpdate();
|
||||
@ -660,7 +526,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getApplicationId(String uuid, int tenantId) throws ApplicationManagementDAOException {
|
||||
public int getApplicationId(String appName, String appType, int tenantId) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
@ -668,10 +534,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
int id = -1;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql = "SELECT ID FROM APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?";
|
||||
sql = "SELECT ID FROM AP_APP WHERE NAME = ? AND TYPE = ? AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, uuid);
|
||||
stmt.setInt(2, tenantId);
|
||||
stmt.setString(1, appName);
|
||||
stmt.setString(2, appType);
|
||||
stmt.setInt(3, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
id = rs.getInt(1);
|
||||
@ -685,5 +552,4 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -22,206 +22,243 @@ package org.wso2.carbon.device.application.mgt.core.dao.impl.application.release
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationReleaseDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagementDAOFactory;
|
||||
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.ApplicationManagementDAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* GenericApplicationReleaseDAOImpl holds the implementation of ApplicationRelease related DAO operations.
|
||||
*/
|
||||
public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements ApplicationReleaseDAO {
|
||||
|
||||
/**
|
||||
* To insert the Application Release Details.
|
||||
*
|
||||
* @param appId Id of the application
|
||||
* @param applicationRelease Application Release the properties of which that need to be inserted.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
@Override
|
||||
public ApplicationRelease createRelease(ApplicationRelease applicationRelease) throws
|
||||
public ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId) throws
|
||||
ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
ResultSet resultSet = null;
|
||||
|
||||
if (applicationRelease.isDefault()) {
|
||||
String sql = "INSERT INTO AP_APP_RELEASE (VERSION,TENANT_ID,UUID,RELEASE_TYPE,APP_PRICE,STORED_LOCATION, "
|
||||
+ "BANNER_LOCATION, SC_1_LOCATION,SC_2_LOCATION,SC_3_LOCATION, APP_HASH_VALUE,SHARED_WITH_ALL_TENANTS, "
|
||||
+ "APP_META_INFO,CREATED_BY,AP_APP_ID) VALUES "
|
||||
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
|
||||
|
||||
}
|
||||
String sql = "insert into APPM_APPLICATION_RELEASE(VERSION_NAME, RELEASE_RESOURCE, RELEASE_CHANNEL ,"
|
||||
+ "RELEASE_DETAILS, CREATED_AT, APPM_APPLICATION_ID, IS_DEFAULT) values (?, ?, ?, ?, ?, ?, ?)";
|
||||
int index = 0;
|
||||
String generatedColumns[] = {"ID"};
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql, generatedColumns);
|
||||
statement.setString(++index, applicationRelease.getVersionName());
|
||||
statement.setString(++index, applicationRelease.getResource());
|
||||
statement.setString(++index, String.valueOf(applicationRelease.getReleaseChannel()));
|
||||
statement.setString(++index, applicationRelease.getReleaseDetails());
|
||||
statement.setDate(++index, new Date(applicationRelease.getCreatedAt().getTime()));
|
||||
statement.setInt(++index, applicationRelease.getApplication().getId());
|
||||
statement.setBoolean(++index, applicationRelease.isDefault());
|
||||
statement.setString(++index, applicationRelease.getVersion());
|
||||
statement.setString(++index, applicationRelease.getTenantId());
|
||||
statement.setString(++index, applicationRelease.getUuid());
|
||||
statement.setString(++index, String.valueOf(applicationRelease.getReleaseType()));
|
||||
statement.setDouble(++index, applicationRelease.getPrice());
|
||||
statement.setString(++index, applicationRelease.getAppStoredLoc());
|
||||
statement.setString(++index, applicationRelease.getScreenshotLoc1());
|
||||
statement.setString(++index, applicationRelease.getScreenshotLoc2());
|
||||
statement.setString(++index, applicationRelease.getScreenshotLoc3());
|
||||
statement.setString(++index, applicationRelease.getAppHashValue());
|
||||
statement.setInt(++index, applicationRelease.getIsSharedWithAllTenants());
|
||||
statement.setString(++index, applicationRelease.getMetaData());
|
||||
statement.setString(++index, applicationRelease.getApplicationCreator());
|
||||
statement.setInt(++index, appId);
|
||||
statement.executeUpdate();
|
||||
resultSet = statement.getGeneratedKeys();
|
||||
if (resultSet.next()) {
|
||||
applicationRelease.setId(resultSet.getInt(1));
|
||||
}
|
||||
insertApplicationReleaseProperties(connection, applicationRelease);
|
||||
return applicationRelease;
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL Exception while trying to release an application (UUID : " + applicationRelease
|
||||
.getApplication().getUuid() + "), by executing the query " + sql, e);
|
||||
"SQL Exception while trying to release an application by executing the query " + sql, e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database Connection Exception while trying to release the " + "applcation with UUID "
|
||||
+ applicationRelease.getApplication().getUuid(), e);
|
||||
"Database Connection Exception while trying to release a new version" , e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To get release details of a specific application.
|
||||
*
|
||||
* @param applicationName Name of the application.
|
||||
* @param applicationType Type of the application.
|
||||
* @param versionName version name of the application.
|
||||
* @param releaseType type of the application release.
|
||||
* @param tenantId Tenant Id
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
@Override
|
||||
public ApplicationRelease getRelease(String applicationUuid, String versionName, int tenantId)
|
||||
throws ApplicationManagementDAOException {
|
||||
public ApplicationRelease getRelease(String applicationName, String applicationType, String versionName,
|
||||
String releaseType, int tenantId) throws ApplicationManagementDAOException {
|
||||
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
ResultSet resultSet = null;
|
||||
String sql = "SELECT * FROM APPM_APPLICATION_RELEASE WHERE VERSION_NAME = ? AND APPM_APPLICATION_ID = "
|
||||
+ "(SELECT ID FROM APPM_APPLICATION WHERE UUID = ? and TENANT_ID = ?)";
|
||||
ApplicationRelease applicationRelease = null;
|
||||
ResultSet rsProperties = null;
|
||||
String sql = "SELECT AR.ID AS RELESE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE, AR.APP_PRICE,"
|
||||
+ " AR.STORED_LOCATION, AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, "
|
||||
+ "AR.SC_2_LOCATION AS SCREEN_SHOT_2, AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, "
|
||||
+ "AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO, AR.CREATED_BY, AR.CREATED_AT, AR.PUBLISHED_BY, "
|
||||
+ "AR.PUBLISHED_AT, AR.STARS, AL.CURRENT_STATE, AL.PREVIOUSE_STATE, AL.UPDATED_BY, AL.UPDATED_AT FROM "
|
||||
+ "AP_APP_RELEASE AS AR, AP_APP_LIFECYCLE_STATE AS AL "
|
||||
+ "WHERE AR.AP_APP_ID=(SELECT ID FROM AP_APP WHERE NAME=? AND TYPE=? AND TENANT_ID=?)"
|
||||
+ " AND AR.VERSION=? AND AR.RELEASE_TYPE=? AND AL.AP_APP_RELEASE_ID=AR.ID "
|
||||
+ "AND AL.TENANT_ID=AR.TENANT_ID ORDER BY AL.UPDATED_AT DESC;";
|
||||
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, versionName);
|
||||
statement.setString(2, applicationUuid);
|
||||
statement.setString(1, applicationName);
|
||||
statement.setString(2, applicationType);
|
||||
statement.setInt(3, tenantId);
|
||||
statement.setString(4, versionName);
|
||||
statement.setString(5, releaseType);
|
||||
resultSet = statement.executeQuery();
|
||||
|
||||
if (resultSet.next()) {
|
||||
applicationRelease = new ApplicationRelease();
|
||||
applicationRelease.setVersionName(versionName);
|
||||
applicationRelease.setDefault(resultSet.getBoolean("IS_DEFAULT"));
|
||||
applicationRelease.setCreatedAt(resultSet.getDate("CREATED_AT"));
|
||||
applicationRelease.setReleaseChannel(resultSet.getString("RELEASE_CHANNEL"));
|
||||
applicationRelease.setReleaseDetails(resultSet.getString("RELEASE_DETAILS"));
|
||||
applicationRelease.setResource(resultSet.getString("RELEASE_RESOURCE"));
|
||||
|
||||
sql = "SELECT * FROM APPM_RELEASE_PROPERTY WHERE APPLICATION_RELEASE_ID=?";
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, resultSet.getInt("ID"));
|
||||
rsProperties = statement.executeQuery();
|
||||
|
||||
Map<String, String> properties = new HashMap<>();
|
||||
while (rsProperties.next()) {
|
||||
properties.put(rsProperties.getString("PROP_KEY"),
|
||||
rsProperties.getString("PROP_VAL"));
|
||||
}
|
||||
applicationRelease.setProperties(properties);
|
||||
applicationRelease.setId(resultSet.getInt("RELEASE_ID"));
|
||||
applicationRelease.setVersion(resultSet.getString("RELEASE_VERSION"));
|
||||
applicationRelease.setUuid(resultSet.getString("UUID"));
|
||||
applicationRelease.setReleaseType(resultSet.getString("RELEASE_TYPE"));
|
||||
applicationRelease.setPrice(resultSet.getDouble("APP_PRICE"));
|
||||
applicationRelease.setAppStoredLoc(resultSet.getString("STORED_LOCATION"));
|
||||
applicationRelease.setBannerLoc(resultSet.getString("BANNER_LOCATION"));
|
||||
applicationRelease.setScreenshotLoc1(resultSet.getString("SCREEN_SHOT_1"));
|
||||
applicationRelease.setScreenshotLoc2(resultSet.getString("SCREEN_SHOT_2"));
|
||||
applicationRelease.setScreenshotLoc3(resultSet.getString("SCREEN_SHOT_3"));
|
||||
applicationRelease.setAppHashValue(resultSet.getString("HASH_VALUE"));
|
||||
applicationRelease.setIsSharedWithAllTenants(resultSet.getInt("SHARED"));
|
||||
applicationRelease.setMetaData(resultSet.getString("APP_META_INFO"));
|
||||
applicationRelease.setApplicationCreator(resultSet.getString("CREATED_BY"));
|
||||
applicationRelease.setCreatedAt(resultSet.getTimestamp("CREATED_AT"));
|
||||
applicationRelease.setPublishedBy(resultSet.getString("PUBLISHED_BY"));
|
||||
applicationRelease.setPublishedAt(resultSet.getTimestamp("PUBLISHED_AT"));
|
||||
applicationRelease.setStars(resultSet.getInt("STARS"));
|
||||
applicationRelease.setCurrentState(resultSet.getString("CURRENT_STATE"));
|
||||
applicationRelease.setPreviousState(resultSet.getString("PREVIOUSE_STATE"));
|
||||
applicationRelease.setStateModifiedBy(resultSet.getString("UPDATED_BY"));
|
||||
applicationRelease.setStateModifiedAt(resultSet.getTimestamp("UPDATED_AT"));
|
||||
}
|
||||
return applicationRelease;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database connection exception while trying to get the "
|
||||
+ "release details of the application with UUID " + applicationUuid + " and version " +
|
||||
+ "release details of the application with " + applicationName + " and version " +
|
||||
versionName, e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error while getting release details of the application " +
|
||||
applicationUuid + " and version " + versionName + " , while executing the query " + sql, e);
|
||||
applicationName + " and version " + versionName + " , while executing the query " + sql, e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, resultSet);
|
||||
Util.cleanupResources(null, rsProperties);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To insert the application release properties.
|
||||
*
|
||||
* @param applicationName Name of the application.
|
||||
* @param applicationType Type of the application.
|
||||
* @param tenantId Tenant Id
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
@Override
|
||||
public List<ApplicationRelease> getApplicationReleases(String applicationUUID, int tenantId)
|
||||
public List<ApplicationRelease> getApplicationReleases(String applicationName, String applicationType, int tenantId)
|
||||
throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
ResultSet resultSet = null;
|
||||
String sql = "SELECT * FROM APPM_APPLICATION_RELEASE WHERE APPM_APPLICATION_ID = (SELECT ID FROM "
|
||||
+ "APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?)";
|
||||
List<ApplicationRelease> applicationReleases = new ArrayList<>();
|
||||
ResultSet rsProperties = null;
|
||||
String sql = "SELECT AR.ID AS RELESE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE, AR.APP_PRICE,"
|
||||
+ " AR.STORED_LOCATION, AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, AR.SC_2_LOCATION AS "
|
||||
+ "SCREEN_SHOT_2, AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, "
|
||||
+ "AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO, AR.CREATED_BY, AR.CREATED_AT, "
|
||||
+ "AR.PUBLISHED_BY, AR.PUBLISHED_AT, AR.STARS FROM AP_APP_RELEASE AS "
|
||||
+ "AR where AR.AP_APP_ID=(SELECT ID FROM AP_APP WHERE NAME = ? AND TYPE = ? "
|
||||
+ "AND TENANT_ID = ?) AND AR.TENANT_ID = ? ;";
|
||||
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, applicationUUID);
|
||||
statement.setInt(2, tenantId);
|
||||
statement.setString(1, applicationName);
|
||||
statement.setString(2, applicationType);
|
||||
statement.setInt(3, tenantId);
|
||||
statement.setInt(4, tenantId);
|
||||
resultSet = statement.executeQuery();
|
||||
|
||||
while (resultSet.next()) {
|
||||
ApplicationRelease applicationRelease = new ApplicationRelease();
|
||||
applicationRelease.setVersionName(resultSet.getString("VERSION_NAME"));
|
||||
applicationRelease.setDefault(resultSet.getBoolean("IS_DEFAULT"));
|
||||
applicationRelease.setCreatedAt(resultSet.getDate("CREATED_AT"));
|
||||
applicationRelease.setReleaseChannel(resultSet.getString("RELEASE_CHANNEL"));
|
||||
applicationRelease.setReleaseDetails(resultSet.getString("RELEASE_DETAILS"));
|
||||
applicationRelease.setResource(resultSet.getString("RELEASE_RESOURCE"));
|
||||
|
||||
sql = "SELECT * FROM APPM_RELEASE_PROPERTY WHERE APPLICATION_RELEASE_ID= ?";
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, resultSet.getInt("ID"));
|
||||
rsProperties = statement.executeQuery();
|
||||
|
||||
Map<String, String> properties = new HashMap<>();
|
||||
while (rsProperties.next()) {
|
||||
properties.put(rsProperties.getString("PROP_KEY"), rsProperties.getString("PROP_VAL"));
|
||||
}
|
||||
applicationRelease.setProperties(properties);
|
||||
applicationRelease.setId(resultSet.getInt("RELESE_ID"));
|
||||
applicationRelease.setVersion(resultSet.getString("RELEASE_VERSION"));
|
||||
applicationRelease.setUuid(resultSet.getString("UUID"));
|
||||
applicationRelease.setReleaseType(resultSet.getString("RELEASE_TYPE"));
|
||||
applicationRelease.setPrice(resultSet.getDouble("APP_PRICE"));
|
||||
applicationRelease.setAppStoredLoc(resultSet.getString("STORED_LOCATION"));
|
||||
applicationRelease.setBannerLoc(resultSet.getString("BANNER_LOCATION"));
|
||||
applicationRelease.setScreenshotLoc1(resultSet.getString("SCREEN_SHOT_1"));
|
||||
applicationRelease.setScreenshotLoc2(resultSet.getString("SCREEN_SHOT_2"));
|
||||
applicationRelease.setScreenshotLoc3(resultSet.getString("SCREEN_SHOT_3"));
|
||||
applicationRelease.setAppHashValue(resultSet.getString("HASH_VALUE"));
|
||||
applicationRelease.setIsSharedWithAllTenants(resultSet.getInt("SHARED"));
|
||||
applicationRelease.setMetaData(resultSet.getString("APP_META_INFO"));
|
||||
applicationRelease.setApplicationCreator(resultSet.getString("CREATED_BY"));
|
||||
applicationRelease.setCreatedAt(resultSet.getTimestamp("CREATED_AT"));
|
||||
applicationRelease.setPublishedBy(resultSet.getString("PUBLISHED_BY"));
|
||||
applicationRelease.setPublishedAt(resultSet.getTimestamp("PUBLISHED_AT"));
|
||||
applicationRelease.setStars(resultSet.getInt("STARS"));
|
||||
applicationReleases.add(applicationRelease);
|
||||
|
||||
}
|
||||
return applicationReleases;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database connection exception while trying to get the "
|
||||
+ "release details of the application with UUID " + applicationUUID, e);
|
||||
+ "release details of the application with Name " + applicationName, e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error while getting all the release details of the " + "application " + applicationUUID
|
||||
"Error while getting all the release details of the " + applicationName + " application"
|
||||
+ ", while executing the query " + sql, e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, resultSet);
|
||||
Util.cleanupResources(null, rsProperties);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To Update starts of an application release.
|
||||
*
|
||||
* @param id Id of the application Release.
|
||||
* @param stars given stars for the application release.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
@Override
|
||||
public ApplicationRelease updateRelease(ApplicationRelease applicationRelease)
|
||||
throws ApplicationManagementDAOException {
|
||||
public void updateStars(int id, int stars) throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "UPDATE APPM_APPLICATION_RELEASE SET RELEASE_RESOURCE = IFNULL (?, RELEASE_RESOURCE)," +
|
||||
" RELEASE_CHANNEL = IFNULL (?, RELEASE_CHANNEL), RELEASE_DETAILS = IFNULL (?, RELEASE_DETAILS), " +
|
||||
"IS_DEFAULT = IFNULL (?, IS_DEFAULT) WHERE APPM_APPLICATION_ID = ? AND VERSION_NAME = ?";
|
||||
String sql = "UPDATE AP_APP_RELEASE SET STARS = ? WHERE ID = ?;";
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, applicationRelease.getResource());
|
||||
statement.setString(2, String.valueOf(applicationRelease.getReleaseChannel()));
|
||||
statement.setString(3, applicationRelease.getReleaseDetails());
|
||||
statement.setBoolean(4, applicationRelease.isDefault());
|
||||
statement.setInt(5, applicationRelease.getApplication().getId());
|
||||
statement.setString(6, applicationRelease.getVersionName());
|
||||
statement.setInt(1, stars);
|
||||
statement.setInt(2, id);
|
||||
statement.executeUpdate();
|
||||
|
||||
sql = "DELETE FROM APPM_RELEASE_PROPERTY WHERE APPLICATION_RELEASE_ID = ?";
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, applicationRelease.getId());
|
||||
statement.executeUpdate();
|
||||
insertApplicationReleaseProperties(connection, applicationRelease);
|
||||
return applicationRelease;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database connection exception while trying to update the "
|
||||
+ "Application release for the application with UUID " + applicationRelease.getApplication()
|
||||
.getUuid() + " for the version " + applicationRelease.getVersionName(), e);
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database connection exception while trying to update the application release", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL exception while updating the release ,while executing the query " + sql, e);
|
||||
@ -230,11 +267,34 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
// have to complete
|
||||
//Todo
|
||||
/**
|
||||
* To insert the application release properties.
|
||||
*
|
||||
* @param applicationRelease Application Release the properties of which that need to be inserted.
|
||||
* @throws SQLException SQL Exception.
|
||||
*/
|
||||
@Override
|
||||
public ApplicationRelease updateRelease(ApplicationRelease applicationRelease)
|
||||
throws ApplicationManagementDAOException {
|
||||
return applicationRelease;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/**
|
||||
* To delete an application release.
|
||||
*
|
||||
* @param id Id of the application Release.
|
||||
* @param version version name of the application release.
|
||||
* @throws ApplicationManagementDAOException Application Management DAO Exception.
|
||||
*/
|
||||
@Override
|
||||
public void deleteRelease(int id, String version) throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "DELETE FROM APPM_APPLICATION_RELEASE WHERE APPM_APPLICATION_ID = ? AND VERSION_NAME = ?";
|
||||
String sql = "DELETE FROM AP_APP_RELEASE WHERE ID = ? AND VERSION = ?";
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
@ -253,116 +313,4 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteReleaseProperties(int id) throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "DELETE FROM APPM_RELEASE_PROPERTY WHERE APPLICATION_RELEASE_ID = ?";
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setInt(1, id);
|
||||
statement.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database connection exception while trying to delete the release properties ", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL exception while deleting the properties of application release with the id " + id, e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeReleaseDefault(String uuid, String version, boolean isDefault, String releaseChannel,
|
||||
int tenantId) throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "UPDATE APPM_APPLICATION_RELEASE SET IS_DEFAULT = ? AND RELEASE_CHANNEL = ? WHERE "
|
||||
+ "APPM_APPLICATION_ID = (SELECT ID from APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?) "
|
||||
+ "AND VERSION_NAME = ?";
|
||||
|
||||
try {
|
||||
if (isDefault) {
|
||||
removeDefaultReleases(uuid, releaseChannel, tenantId);
|
||||
}
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setBoolean(1, isDefault);
|
||||
statement.setString(2, releaseChannel.toUpperCase());
|
||||
statement.setString(3, uuid);
|
||||
statement.setInt(4, tenantId);
|
||||
statement.setString(5, version);
|
||||
statement.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database Connection exception while try to change the " + "default release of the release channel "
|
||||
+ releaseChannel + " for the application " + uuid, e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL Exception while trying to change the default release of " + "the release channel "
|
||||
+ releaseChannel + " for the application " + uuid, e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To insert the application release properties.
|
||||
*
|
||||
* @param connection Database Connection
|
||||
* @param applicationRelease Application Release the properties of which that need to be inserted.
|
||||
* @throws SQLException SQL Exception.
|
||||
*/
|
||||
private void insertApplicationReleaseProperties(Connection connection, ApplicationRelease applicationRelease)
|
||||
throws SQLException {
|
||||
String sql;
|
||||
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||
|
||||
if (applicationRelease.getProperties() != null && applicationRelease.getProperties().size() != 0) {
|
||||
sql = "INSERT INTO APPM_RELEASE_PROPERTY (PROP_KEY, PROP_VALUE, APPLICATION_RELEASE_ID) VALUES (?,?,?)";
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
for (Object entry : applicationRelease.getProperties().entrySet()) {
|
||||
Map.Entry<String, String> property = (Map.Entry) entry;
|
||||
statement.setString(1, property.getKey());
|
||||
statement.setString(2, property.getValue());
|
||||
statement.setInt(3, applicationRelease.getId());
|
||||
if (isBatchExecutionSupported) {
|
||||
statement.addBatch();
|
||||
} else {
|
||||
statement.execute();
|
||||
}
|
||||
}
|
||||
if (isBatchExecutionSupported) {
|
||||
statement.executeBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To make all the releases of particular release channel as non-default ones.
|
||||
*
|
||||
* @param uuid UUID of the Application.
|
||||
* @param releaseChannel ReleaseChannel for which we need to make all the releases as non-default ones.
|
||||
* @param tenantId ID of the tenant.
|
||||
* @throws DBConnectionException Database Connection Exception.
|
||||
* @throws SQLException SQL Exception.
|
||||
*/
|
||||
private void removeDefaultReleases(String uuid, String releaseChannel, int tenantId)
|
||||
throws DBConnectionException, SQLException {
|
||||
PreparedStatement statement = null;
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
String sql = "UPDATE APPM_APPLICATION_RELEASE SET IS_DEFAULT = FALSE WHERE APPM_APPLICATION_ID = (SELECT "
|
||||
+ "ID from APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?) AND RELEASE_CHANNEL = ?";
|
||||
statement = connection.prepareStatement(sql);
|
||||
statement.setString(1, uuid);
|
||||
statement.setInt(2, tenantId);
|
||||
statement.setString(3, releaseChannel.toUpperCase());
|
||||
statement.executeUpdate();
|
||||
} finally {
|
||||
Util.cleanupResources(statement, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,46 +31,46 @@ import java.sql.SQLException;
|
||||
*/
|
||||
public class OracleApplicationDAOImpl extends GenericApplicationDAOImpl {
|
||||
|
||||
@Override
|
||||
protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn,
|
||||
int tenantId) throws SQLException {
|
||||
int index = 0;
|
||||
String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
|
||||
+ "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
|
||||
+ "LS.DESCRIPTION AS LS_DESCRIPTION " + "FROM APPM_APPLICATION APP " + "INNER JOIN APPM_PLATFORM APL "
|
||||
+ "ON APP.PLATFORM_ID = APL.ID " + "INNER JOIN APPM_APPLICATION_CATEGORY CAT "
|
||||
+ "ON APP.APPLICATION_CATEGORY_ID = CAT.ID " + "INNER JOIN APPM_LIFECYCLE_STATE LS "
|
||||
+ "ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE APP.TENANT_ID = ? ";
|
||||
|
||||
String userName = filter.getUserName();
|
||||
if (!userName.equals("ALL")) {
|
||||
sql += " AND APP.CREATED_BY = ? ";
|
||||
}
|
||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
sql += "AND LOWER (APP.NAME) ";
|
||||
if (filter.isFullMatch()) {
|
||||
sql += "= ?";
|
||||
} else {
|
||||
sql += "LIKE ?";
|
||||
}
|
||||
}
|
||||
sql += " ORDER BY APP.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(++index, tenantId);
|
||||
|
||||
if (!userName.equals("ALL")) {
|
||||
stmt.setString(++index, userName);
|
||||
}
|
||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
if (filter.isFullMatch()) {
|
||||
stmt.setString(++index, filter.getSearchQuery().toLowerCase());
|
||||
} else {
|
||||
stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%");
|
||||
}
|
||||
}
|
||||
stmt.setInt(++index, filter.getOffset());
|
||||
stmt.setInt(++index, filter.getLimit());
|
||||
return stmt;
|
||||
}
|
||||
// @Override
|
||||
// protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn,
|
||||
// int tenantId) throws SQLException {
|
||||
// int index = 0;
|
||||
// String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
|
||||
// + "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
|
||||
// + "LS.DESCRIPTION AS LS_DESCRIPTION " + "FROM APPM_APPLICATION APP " + "INNER JOIN APPM_PLATFORM APL "
|
||||
// + "ON APP.PLATFORM_ID = APL.ID " + "INNER JOIN APPM_APPLICATION_CATEGORY CAT "
|
||||
// + "ON APP.APPLICATION_CATEGORY_ID = CAT.ID " + "INNER JOIN APPM_LIFECYCLE_STATE LS "
|
||||
// + "ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE APP.TENANT_ID = ? ";
|
||||
//
|
||||
// String userName = filter.getUserName();
|
||||
// if (!userName.equals("ALL")) {
|
||||
// sql += " AND APP.CREATED_BY = ? ";
|
||||
// }
|
||||
// if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
// sql += "AND LOWER (APP.NAME) ";
|
||||
// if (filter.isFullMatch()) {
|
||||
// sql += "= ?";
|
||||
// } else {
|
||||
// sql += "LIKE ?";
|
||||
// }
|
||||
// }
|
||||
// sql += " ORDER BY APP.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||
// PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
// stmt.setInt(++index, tenantId);
|
||||
//
|
||||
// if (!userName.equals("ALL")) {
|
||||
// stmt.setString(++index, userName);
|
||||
// }
|
||||
// if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||
// if (filter.isFullMatch()) {
|
||||
// stmt.setString(++index, filter.getSearchQuery().toLowerCase());
|
||||
// } else {
|
||||
// stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%");
|
||||
// }
|
||||
// }
|
||||
// stmt.setInt(++index, filter.getOffset());
|
||||
// stmt.setInt(++index, filter.getLimit());
|
||||
// return stmt;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -1,151 +0,0 @@
|
||||
/*
|
||||
* 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.category;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.CategoryDAO;
|
||||
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.ApplicationManagementDAOException;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This is the concrete implementation of {@link CategoryDAO}.
|
||||
*/
|
||||
public class GenericCategoryDAOImpl extends AbstractDAOImpl implements CategoryDAO {
|
||||
@Override
|
||||
public Category addCategory(Category category) throws ApplicationManagementDAOException {
|
||||
Connection connection;
|
||||
PreparedStatement statement = null;
|
||||
String sql = "INSERT INTO APPM_APPLICATION_CATEGORY (NAME, DESCRIPTION) VALUES (?, ?)";
|
||||
String[] generatedColumns = { "ID" };
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
connection = this.getDBConnection();
|
||||
statement = connection.prepareStatement(sql, generatedColumns);
|
||||
statement.setString(1, category.getName());
|
||||
statement.setString(2, category.getDescription());
|
||||
statement.executeUpdate();
|
||||
rs = statement.getGeneratedKeys();
|
||||
if (rs.next()) {
|
||||
category.setId(rs.getInt(1));
|
||||
}
|
||||
return category;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database connection while trying to update the categroy " + category.getName(), e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("SQL exception while executing the query '" + sql + "' .", e);
|
||||
} finally {
|
||||
Util.cleanupResources(statement, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Category> getCategories() throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "SELECT * FROM APPM_APPLICATION_CATEGORY";
|
||||
List<Category> categories = new ArrayList<>();
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
stmt = conn.prepareStatement(sql);
|
||||
rs = stmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
Category category = new Category();
|
||||
category.setId(rs.getInt("ID"));
|
||||
category.setName(rs.getString("NAME"));
|
||||
category.setDescription(rs.getString("DESCRIPTION"));
|
||||
categories.add(category);
|
||||
}
|
||||
return categories;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database Connection Exception while trying to get the "
|
||||
+ "application categories", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("SQL Exception while trying to get the application "
|
||||
+ "categories, while executing " + sql, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Category getCategory(String name) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "SELECT * FROM APPM_APPLICATION_CATEGORY WHERE NAME = ?";
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, name);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
Category category = new Category();
|
||||
category.setId(rs.getInt("ID"));
|
||||
category.setName(rs.getString("NAME"));
|
||||
category.setDescription(rs.getString("DESCRIPTION"));
|
||||
return category;
|
||||
}
|
||||
return null;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Database Connection Exception while trying to get the "
|
||||
+ "application categories", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("SQL Exception while trying to get the application "
|
||||
+ "categories, while executing " + sql, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteCategory(String name) throws ApplicationManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
String sql = "DELETE FROM APPM_APPLICATION_CATEGORY WHERE NAME = ?";
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, name);
|
||||
stmt.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Database Connection Exception while trying to delete the category " + name, e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"SQL Exception while trying to delete the category " + name + " while executing the query " +
|
||||
sql, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -24,7 +24,7 @@ import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO;
|
||||
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.ApplicationManagementDAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.DAOException;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.LifeCycleManagementDAOException;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
@ -39,61 +39,70 @@ import java.util.List;
|
||||
public class GenericLifecycleStateImpl extends AbstractDAOImpl implements LifecycleStateDAO {
|
||||
|
||||
@Override
|
||||
public LifecycleState getLifeCycleStateByIdentifier(String identifier) throws ApplicationManagementDAOException {
|
||||
public LifecycleState getLatestLifeCycleStateByReleaseID(int identifier) throws ApplicationManagementDAOException {
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "SELECT * FROM APPM_LIFECYCLE_STATE WHERE IDENTIFIER = ? ";
|
||||
String sql = "SELECT ID, CURRENT_STATE, PREVIOUSE_STATE, TENANT_ID, UPDATED_AT, UPDATED_BY FROM "
|
||||
+ "AP_APP_LIFECYCLE_STATE WHERE AP_APP_RELEASE_ID=? ORDER BY UPDATED_AT DESC;";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, identifier);
|
||||
stmt.setInt(1, identifier);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
LifecycleState lifecycleState = null;
|
||||
|
||||
if (rs.next()) {
|
||||
lifecycleState = new LifecycleState();
|
||||
lifecycleState.setId(rs.getInt("ID"));
|
||||
lifecycleState.setName(rs.getString("NAME"));
|
||||
lifecycleState.setIdentifier(rs.getString("IDENTIFIER"));
|
||||
lifecycleState.setDescription(rs.getString("DESCRIPTION"));
|
||||
lifecycleState.setCurrentState(rs.getString("CURRENT_STATE"));
|
||||
lifecycleState.setPreviousState(rs.getString("PREVIOUSE_STATE"));
|
||||
lifecycleState.setUpdatedAt(rs.getTimestamp("UPDATED_AT"));
|
||||
lifecycleState.setUpdatedBy(rs.getString("UPDATED_BY"));
|
||||
}
|
||||
return lifecycleState;
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection to get latest"
|
||||
+ " lifecycle state for a specific application", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LifecycleState> getLifecycleStates() throws DAOException {
|
||||
public List<LifecycleState> getLifecycleStates(int appReleaseId) throws LifeCycleManagementDAOException {
|
||||
List<LifecycleState> lifecycleStates = new ArrayList<>();
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int index = 0;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "SELECT IDENTIFIER, NAME, DESCRIPTION FROM APPM_LIFECYCLE_STATE";
|
||||
String sql = "SELECT ID, CURRENT_STATE, PREVIOUSE_STATE, TENANT_ID, UPDATED_AT, UPDATED_BY FROM "
|
||||
+ "AP_APP_LIFECYCLE_STATE WHERE AP_APP_RELEASE_ID = ? ORDER BY UPDATED_AT ASC;";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(++index,appReleaseId);
|
||||
rs = stmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
LifecycleState lifecycleState = new LifecycleState();
|
||||
lifecycleState.setIdentifier(rs.getString("IDENTIFIER"));
|
||||
lifecycleState.setName(rs.getString("NAME"));
|
||||
lifecycleState.setDescription(rs.getString("DESCRIPTION"));
|
||||
lifecycleState.setId(rs.getInt("ID"));
|
||||
lifecycleState.setCurrentState(rs.getString("CURRENT_STATE"));
|
||||
lifecycleState.setPreviousState(rs.getString("PREVIOUSE_STATE"));
|
||||
lifecycleState.setTenantId(rs.getInt("TENANT_ID"));
|
||||
lifecycleState.setUpdatedAt(rs.getTimestamp("UPDATED_AT"));
|
||||
lifecycleState.setUpdatedBy(rs.getString("UPDATED_BY"));
|
||||
lifecycleStates.add(lifecycleState);
|
||||
}
|
||||
} catch (DBConnectionException e) {
|
||||
throw new DAOException("Error occurred while obtaining the DB connection.", e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection when getting "
|
||||
+ "lifecycle states for an application", e);
|
||||
} catch (SQLException e) {
|
||||
throw new DAOException("Error occurred while retrieving lifecycle states.", e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while retrieving lifecycle states.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
@ -101,44 +110,47 @@ public class GenericLifecycleStateImpl extends AbstractDAOImpl implements Lifecy
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLifecycleState(LifecycleState state) throws DAOException {
|
||||
public void addLifecycleState(LifecycleState state) throws LifeCycleManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "INSERT INTO APPM_LIFECYCLE_STATE ('NAME', 'IDENTIFIER', 'DESCRIPTION') VALUES (?, ?, ?)";
|
||||
String sql = "INSERT INTO AP_APP_LIFECYCLE_STATE (CURRENT_STATE, PREVIOUSE_STATE, TENANT_ID, UPDATED_BY, "
|
||||
+ "AP_APP_RELEASE_ID, AP_APP_ID) VALUES (?,?, ?, ?,?,?);";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, state.getName());
|
||||
stmt.setString(2, state.getIdentifier());
|
||||
stmt.setString(3, state.getDescription());
|
||||
stmt.setString(1, state.getCurrentState());
|
||||
stmt.setString(2, state.getPreviousState());
|
||||
stmt.setInt(3, state.getTenantId());
|
||||
stmt.setString(4, state.getUpdatedBy());
|
||||
stmt.setInt(5, state.getReleaseId());
|
||||
stmt.setInt(6, state.getAppId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (DBConnectionException e) {
|
||||
throw new DAOException("Error occurred while obtaining the DB connection.", e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} catch (SQLException e) {
|
||||
throw new DAOException("Error occurred while adding lifecycle: " + state.getIdentifier(), e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while adding lifecycle: " + state.getCurrentState(), e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
Util.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteLifecycleState(String identifier) throws DAOException {
|
||||
public void deleteLifecycleState(int identifier) throws LifeCycleManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
String sql = "DELETE FROM APPM_LIFECYCLE_STATE WHERE IDENTIFIER = ?";
|
||||
String sql = "DELETE FROM AP_APP_LIFECYCLE_STATE WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, identifier);
|
||||
stmt.setInt(1, identifier);
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (DBConnectionException e) {
|
||||
throw new DAOException("Error occurred while obtaining the DB connection.", e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} catch (SQLException e) {
|
||||
throw new DAOException("Error occurred while deleting lifecycle: " + identifier, e);
|
||||
throw new LifeCycleManagementDAOException("Error occurred while deleting lifecycle: " + identifier, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
|
||||
@ -1,703 +0,0 @@
|
||||
/*
|
||||
* 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.platform;
|
||||
|
||||
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.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;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Generic Implementation for handling Platform management related database operations.
|
||||
*/
|
||||
public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformDAO {
|
||||
private static Log log = LogFactory.getLog(GenericPlatformDAOImpl.class);
|
||||
|
||||
@Override
|
||||
public int register(int tenantId, Platform platform) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
try {
|
||||
int platformId = getPlatformId(tenantId, platform.getIdentifier());
|
||||
if (platformId == -1) {
|
||||
Connection connection = this.getDBConnection();
|
||||
if (!platform.isFileBased()) {
|
||||
String insertToPlatform = "INSERT INTO APPM_PLATFORM (IDENTIFIER, TENANT_ID, NAME, FILE_BASED, "
|
||||
+ "DESCRIPTION, IS_SHARED, ICON_NAME, IS_DEFAULT_TENANT_MAPPING)" + " VALUES (?, ?, ?, ?, "
|
||||
+ "?, ?, ?, ?)";
|
||||
preparedStatement = connection.prepareStatement(insertToPlatform);
|
||||
preparedStatement.setString(1, platform.getIdentifier());
|
||||
preparedStatement.setInt(2, tenantId);
|
||||
preparedStatement.setString(3, platform.getName());
|
||||
preparedStatement.setBoolean(4, false);
|
||||
preparedStatement.setString(5, platform.getDescription());
|
||||
preparedStatement.setBoolean(6, platform.isShared());
|
||||
preparedStatement.setString(7, platform.getIconName());
|
||||
preparedStatement.setBoolean(8, platform.isDefaultTenantMapping());
|
||||
preparedStatement.execute();
|
||||
|
||||
platformId = getPlatformId(tenantId, platform.getIdentifier());
|
||||
String insertPlatformProps =
|
||||
"INSERT INTO APPM_PLATFORM_PROPERTIES (PLATFORM_ID, PROP_NAME, OPTIONAL, "
|
||||
+ "DEFAULT_VALUE) VALUES ( ? , ?, ? , ?)";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
//Adding tags to the database.
|
||||
Boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||
String insertTags = "INSERT INTO APPM_PLATFORM_TAG (NAME, PLATFORM_ID) VALUES (?, ?)";
|
||||
preparedStatement = connection.prepareStatement(insertTags);
|
||||
if (platform.getTags() != null) {
|
||||
for (String tag : platform.getTags()) {
|
||||
preparedStatement.setString(1, tag);
|
||||
preparedStatement.setInt(2, platformId);
|
||||
|
||||
if (isBatchExecutionSupported) {
|
||||
preparedStatement.addBatch();
|
||||
} else {
|
||||
preparedStatement.execute();
|
||||
}
|
||||
}
|
||||
if (isBatchExecutionSupported) {
|
||||
preparedStatement.executeBatch();
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
String insertToPlatform =
|
||||
"INSERT INTO APPM_PLATFORM (IDENTIFIER, TENANT_ID, FILE_BASED, IS_SHARED, "
|
||||
+ "IS_DEFAULT_TENANT_MAPPING) VALUES (?, ?, ?, ?, ?)";
|
||||
preparedStatement = connection.prepareStatement(insertToPlatform);
|
||||
preparedStatement.setString(1, platform.getIdentifier());
|
||||
preparedStatement.setInt(2, tenantId);
|
||||
preparedStatement.setBoolean(3, true);
|
||||
preparedStatement.setBoolean(4, platform.isShared());
|
||||
preparedStatement.setBoolean(5, platform.isDefaultTenantMapping());
|
||||
preparedStatement.execute();
|
||||
}
|
||||
if (platformId == -1) {
|
||||
platformId = getPlatformId(tenantId, platform.getIdentifier());
|
||||
}
|
||||
return platformId;
|
||||
} else {
|
||||
if (!platform.isFileBased()) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Platform - " + platform.getIdentifier() + " is already registered for tenant - "
|
||||
+ tenantId);
|
||||
} else {
|
||||
return platformId;
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Unable to obtain the connection while trying to register the platform - " + platform
|
||||
.getIdentifier() + " for tenant - " + tenantId, e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int tenantId, String oldPlatformIdentifier, Platform platform)
|
||||
throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
try {
|
||||
int platformId = getPlatformId(tenantId, oldPlatformIdentifier);
|
||||
boolean isIdentifierNull = platform.getIdentifier() == null;
|
||||
boolean isNameNull = platform.getName() == null;
|
||||
|
||||
if (platformId != -1) {
|
||||
Connection connection = this.getDBConnection();
|
||||
if (!platform.isFileBased()) {
|
||||
String insertToPlatform = "UPDATE APPM_PLATFORM SET DESCRIPTION=?, IS_SHARED=?, ICON_NAME=?, "
|
||||
+ "IS_DEFAULT_TENANT_MAPPING=?";
|
||||
if (!isIdentifierNull) {
|
||||
insertToPlatform += ",IDENTIFIER = ? ";
|
||||
}
|
||||
if (!isNameNull) {
|
||||
insertToPlatform += ", NAME =?";
|
||||
}
|
||||
insertToPlatform += " WHERE ID = ?";
|
||||
preparedStatement = connection.prepareStatement(insertToPlatform);
|
||||
preparedStatement.setString(1, platform.getDescription());
|
||||
preparedStatement.setBoolean(2, platform.isShared());
|
||||
preparedStatement.setString(3, platform.getIconName());
|
||||
preparedStatement.setBoolean(4, platform.isDefaultTenantMapping());
|
||||
|
||||
if (!isIdentifierNull && !isNameNull) {
|
||||
preparedStatement.setString(5, platform.getIdentifier());
|
||||
preparedStatement.setString(6, platform.getName());
|
||||
preparedStatement.setInt(7, platformId);
|
||||
} else if (isIdentifierNull && !isNameNull) {
|
||||
preparedStatement.setString(5, platform.getName());
|
||||
preparedStatement.setInt(6, platformId);
|
||||
} else if (!isIdentifierNull) {
|
||||
preparedStatement.setString(5, platform.getIdentifier());
|
||||
preparedStatement.setInt(6, platformId);
|
||||
} else {
|
||||
preparedStatement.setInt(5, platformId);
|
||||
}
|
||||
preparedStatement.execute();
|
||||
|
||||
platformId = getPlatformId(tenantId, platform.getIdentifier());
|
||||
String deletePlatformProps = "DELETE FROM APPM_PLATFORM_PROPERTIES WHERE PLATFORM_ID=?";
|
||||
preparedStatement = connection.prepareStatement(deletePlatformProps);
|
||||
preparedStatement.setInt(1, platformId);
|
||||
preparedStatement.execute();
|
||||
|
||||
String insertPlatformProps =
|
||||
"INSERT INTO APPM_PLATFORM_PROPERTIES (PLATFORM_ID, PROP_NAME, OPTIONAL,"
|
||||
+ " DEFAULT_VALUE) VALUES ( ? , ?, ? , ?)";
|
||||
|
||||
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 if (!isIdentifierNull) {
|
||||
String insertToPlatform = "UPDATE APPM_PLATFORM SET IDENTIFIER = ? WHERE ID = ?";
|
||||
preparedStatement = connection.prepareStatement(insertToPlatform);
|
||||
preparedStatement.setString(1, platform.getIdentifier());
|
||||
preparedStatement.setInt(2, platformId);
|
||||
preparedStatement.execute();
|
||||
}
|
||||
} else {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Cannot find any platform that was registered with identifier - " + platform.getIdentifier()
|
||||
+ " for tenant - " + tenantId);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Unable to obtain the connection while trying to register the platform - " + platform
|
||||
.getIdentifier() + " for tenant - " + tenantId, e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
private int getPlatformId(int tenantId, String platformIdentifier) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
ResultSet resultSet = null;
|
||||
String query = SQLQueries.queryToGetPlatformId;
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(query);
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.setString(2, platformIdentifier);
|
||||
preparedStatement.setString(3, platformIdentifier);
|
||||
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);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregister(int tenantId, String platformIdenfier, boolean isFileBased)
|
||||
throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
String deletePlatform = null;
|
||||
try {
|
||||
Platform platform = getPlatform(tenantId, platformIdenfier);
|
||||
|
||||
if (platform != null) {
|
||||
if (isFileBased == platform.isFileBased()) {
|
||||
Connection connection = this.getDBConnection();
|
||||
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 not registered for tenant - " + tenantId);
|
||||
}
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Unable to obtain the connection while trying to register the platform - " + platformIdenfier
|
||||
+ " for tenant - " + tenantId, e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error while executing the SQL query : " + deletePlatform + " "
|
||||
+ "while trying to un-register the platform with identifier " + platformIdenfier, e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void addMapping(int tenantId, List<String> platformIdentifiers) throws PlatformManagementDAOException {
|
||||
String insertMapping = "INSERT INTO APPM_PLATFORM_TENANT_MAPPING(TENANT_ID, PLATFORM_ID) VALUES (?, ?)";
|
||||
PreparedStatement preparedStatement = null;
|
||||
try {
|
||||
for (String platformIdentifier : platformIdentifiers) {
|
||||
if (getTenantPlatformMapping(tenantId, platformIdentifier) == -1) {
|
||||
int platformId = getPlatformId(tenantId, platformIdentifier);
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(insertMapping);
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.setInt(2, platformId);
|
||||
preparedStatement.execute();
|
||||
} else {
|
||||
log.error("Platform identifier - " + platformIdentifier + " is already assigned to tenant domain"
|
||||
+ " - " + tenantId);
|
||||
}
|
||||
}
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException("Error occurred when getting the connection for the database. ",
|
||||
e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error occured while executing the SQL query - " + insertMapping,
|
||||
e);
|
||||
} finally {
|
||||
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 = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(getMapping);
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.setString(2, platformIdentifier);
|
||||
resultSet = preparedStatement.executeQuery();
|
||||
if (resultSet.next()) {
|
||||
return resultSet.getInt("ID");
|
||||
}
|
||||
return -1;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Error occurred 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);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMapping(int tenantId, String platformIdentifier) throws PlatformManagementDAOException {
|
||||
String deleteMapping = "DELETE FROM APPM_PLATFORM_TENANT_MAPPING WHERE ID = ?";
|
||||
PreparedStatement preparedStatement = null;
|
||||
try {
|
||||
int mappingId = getTenantPlatformMapping(tenantId, platformIdentifier);
|
||||
if (mappingId != -1) {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(deleteMapping);
|
||||
preparedStatement.setInt(1, mappingId);
|
||||
preparedStatement.execute();
|
||||
} else {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Platform - " + platformIdentifier + " is already unassigned for tenant - " + tenantId);
|
||||
}
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Error occurred while unassigning the platform - " + platformIdentifier + " for tenant - "
|
||||
+ tenantId);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error occurred while executing the query - " + deleteMapping);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMappingTenants(String platformIdentifier) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
int platformId = getPlatformId(MultitenantConstants.SUPER_TENANT_ID, platformIdentifier);
|
||||
String getMapping = "DELETE FROM APPM_PLATFORM_TENANT_MAPPING WHERE TENANT_ID != ? AND PLATFORM_ID=?";
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
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 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 {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Platform> getPlatforms(int tenantId) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
ResultSet resultSet = null;
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("GetPlaforms request received for the tenant ID " + tenantId);
|
||||
}
|
||||
String selectQuery = SQLQueries.queryToGetPlatforms;
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(selectQuery);
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.setInt(2, tenantId);
|
||||
resultSet = preparedStatement.executeQuery();
|
||||
List<Platform> platforms = new ArrayList<>();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Platform retrieved for the tenant Id " + tenantId);
|
||||
}
|
||||
while (resultSet.next()) {
|
||||
int mappingID = resultSet.getInt(1);
|
||||
String identifier = resultSet.getString(2);
|
||||
Platform platform = getPlatform(tenantId, identifier);
|
||||
if (mappingID != 0) {
|
||||
platform.setEnabled(true);
|
||||
} else {
|
||||
platform.setEnabled(false);
|
||||
}
|
||||
platforms.add(platform);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Platform Identifier - " + identifier + " isEnabled - " + platform.isEnabled());
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Number of platforms available for the tenant ID - " + tenantId + " :" + platforms.size());
|
||||
}
|
||||
return platforms;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Error occurred when loading the platforms for tenant - " + tenantId, e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error occurred when executing query - " + selectQuery, e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
public Platform getPlatform(String tenantDomain, String platformIdentifier) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
ResultSet resultSet = null;
|
||||
String platformQuery = "SELECT * FROM (SELECT * FROM APPM_PLATFORM WHERE (TENANT_DOMAIN=? AND IDENTIFIER=?) "
|
||||
+ "OR (IS_SHARED = TRUE AND IDENTIFIER=?) AND FILE_BASED = FALSE ) PLATFORM "
|
||||
+ "LEFT JOIN APPM_PLATFORM_PROPERTIES PROPS ON PLATFORM.ID = PROPS.PLATFORM_ID";
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(platformQuery);
|
||||
preparedStatement.setString(1, tenantDomain);
|
||||
preparedStatement.setString(2, platformIdentifier);
|
||||
preparedStatement.setString(3, platformIdentifier);
|
||||
resultSet = preparedStatement.executeQuery();
|
||||
Platform platform = new Platform();
|
||||
if (resultSet.next()) {
|
||||
platform.setId(resultSet.getInt("PLATFORM.ID"));
|
||||
platform.setIdentifier(platformIdentifier);
|
||||
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.setIdentifier(platformIdentifier);
|
||||
platform.setFileBased(true);
|
||||
}
|
||||
return platform;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException("Error when loading the platform - " + platformIdentifier, e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error in executing the query - " + platformQuery, e);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Platform getPlatform(int tenantId, String identifier) throws PlatformManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql = SQLQueries.queryToGetPlatform;
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, identifier);
|
||||
stmt.setInt(2, tenantId);
|
||||
stmt.setInt(3, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
Platform platform = null;
|
||||
|
||||
if (rs.next()) {
|
||||
platform = new Platform();
|
||||
platform.setFileBased(rs.getBoolean(3));
|
||||
platform.setIdentifier(rs.getString(2));
|
||||
platform.setShared(rs.getBoolean(8));
|
||||
platform.setDefaultTenantMapping(rs.getBoolean(9));
|
||||
platform.setId(rs.getInt(4));
|
||||
//Getting tags
|
||||
sql = "SELECT * FROM APPM_PLATFORM_TAG WHERE PLATFORM_ID=?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, rs.getInt(4));
|
||||
ResultSet rsTags = stmt.executeQuery();
|
||||
|
||||
List<String> tags = new ArrayList<>();
|
||||
while (rsTags.next()) {
|
||||
tags.add(rsTags.getString("NAME"));
|
||||
}
|
||||
platform.setTags(tags);
|
||||
|
||||
if (!platform.isFileBased()) {
|
||||
platform.setName(rs.getString(5));
|
||||
platform.setDescription(rs.getString(6));
|
||||
platform.setIconName(rs.getString(7));
|
||||
if (rs.getInt(1) != 0) {
|
||||
platform.setEnabled(true);
|
||||
} else {
|
||||
platform.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
return platform;
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Error occurred while getting platform with the identifier " + identifier + ", for the tenant : "
|
||||
+ tenantId, e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePlatforms(int tenantId) throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
String sql = "DELETE FROM APPM_PLATFORM WHERE TENANT_ID = ?";
|
||||
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(sql);
|
||||
preparedStatement.setInt(1, tenantId);
|
||||
preparedStatement.executeUpdate();
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Database connection error while removing the platforms for the " + "tenant - " + tenantId);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"SQL exception while executing the query " + sql + " for " + "the tenant : " + tenantId);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSuperTenantAndOwnPlatforms(String platformIdentifier, int tenantId)
|
||||
throws PlatformManagementDAOException {
|
||||
PreparedStatement preparedStatement = null;
|
||||
ResultSet resultSet = null;
|
||||
String sql = SQLQueries.queryToGetSupertenantAndOwnPlatforms;
|
||||
|
||||
try {
|
||||
Connection connection = this.getDBConnection();
|
||||
preparedStatement = connection.prepareStatement(sql);
|
||||
preparedStatement.setString(1, platformIdentifier);
|
||||
preparedStatement.setInt(2, tenantId);
|
||||
preparedStatement.setInt(3, MultitenantConstants.SUPER_TENANT_ID);
|
||||
resultSet = preparedStatement.executeQuery();
|
||||
|
||||
if (resultSet.next()) {
|
||||
return resultSet.getInt(1);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Database connection error while removing the platfor for the " + "tenant - " + tenantId);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"SQL exception while executing the query " + sql + " for " + "the tenant : " + tenantId);
|
||||
} finally {
|
||||
Util.cleanupResources(preparedStatement, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Platform getTenantOwnedPlatform(int tenantId, String platformIdentifier)
|
||||
throws PlatformManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql = "SELECT * from APPM_PLATFORM WHERE TENANT_ID = ? AND IDENTIFIER = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, tenantId);
|
||||
stmt.setString(2, platformIdentifier);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
Platform platform = null;
|
||||
|
||||
if (rs.next()) {
|
||||
platform = new Platform();
|
||||
platform.setFileBased(rs.getBoolean("FILE_BASED"));
|
||||
platform.setIdentifier(rs.getString("IDENTIFIER"));
|
||||
platform.setShared(rs.getBoolean("IS_SHARED"));
|
||||
platform.setDefaultTenantMapping(rs.getBoolean("IS_DEFAULT_TENANT_MAPPING"));
|
||||
if (!platform.isFileBased()) {
|
||||
platform.setId(rs.getInt("ID"));
|
||||
platform.setName(rs.getString("NAME"));
|
||||
platform.setDescription(rs.getString("DESCRIPTION"));
|
||||
platform.setIconName(rs.getString("ICON_NAME"));
|
||||
}
|
||||
}
|
||||
return platform;
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("Error occurred while executing the query : " + sql + " for "
|
||||
+ "getting platforms owned by tenant : " + tenantId, e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException(
|
||||
"Error occurred while obtaining the DB connection for getting " + "platforms owned by tenant : "
|
||||
+ tenantId, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMultiTenantPlatforms(String identifier) throws PlatformManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql = "SELECT ID from APPM_PLATFORM WHERE TENANT_ID != ? AND IDENTIFIER=?";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, MultitenantConstants.SUPER_TENANT_ID);
|
||||
stmt.setString(2, identifier);
|
||||
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if (rs.next()) {
|
||||
return rs.getInt(1);
|
||||
}
|
||||
return -1;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException("Database Connection exception while trying to get the tenants "
|
||||
+ "which has the platforms with the platform identifier : " + identifier, e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("SQL exception while executing the query " + sql + " to get the"
|
||||
+ " tenants which has the platform with the platform identifier : " + identifier, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPlatformTags(String name) throws PlatformManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
String sql = "";
|
||||
List<String> tagList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
sql = "SELECT NAME FROM APPM_PLATFORM_TAG WHERE NAME LIKE ?";
|
||||
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, name + "%");
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if (rs.next()) {
|
||||
tagList.add(rs.getString("NAME"));
|
||||
}
|
||||
return tagList;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new PlatformManagementDAOException("Database Connection exception while trying to get the platform "
|
||||
+ "tags that are starting with " + name, e);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformManagementDAOException("SQL exception while executing the query " + sql + " to get the"
|
||||
+ " platform tags that are starting with " + name, e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* 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.platform;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Platform;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.PlatformManagementDAOException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Oracle and MsSQL specific implementation for Platform DAO.
|
||||
*/
|
||||
public class OracleMsSQLPlatformDAOImpl extends GenericPlatformDAOImpl {
|
||||
|
||||
@Override
|
||||
public int getSuperTenantAndOwnPlatforms(String platformIdentifier, int tenantId)
|
||||
throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetSupertenantAndOwnPlatforms = "SELECT ID from APPM_PLATFORM where IDENTIFIER "
|
||||
+ "= ? AND (TENANT_ID = ? OR (TENANT_ID = ? AND IS_SHARED = 1))";
|
||||
return super.getSuperTenantAndOwnPlatforms(platformIdentifier, tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int register(int tenantId, Platform platform) throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatformId =
|
||||
"SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = 1 AND "
|
||||
+ "IDENTIFIER=?)";
|
||||
return super.register(tenantId, platform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Platform getPlatform(int tenantId, String identifier) throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatform =
|
||||
"SELECT MAPPING.ID, PLATFORM.IDENTIFIER, PLATFORM.FILE_BASED, PLATFORM.ID, PLATFORM.NAME, "
|
||||
+ "PLATFORM.DESCRIPTION, PLATFORM.ICON_NAME, PLATFORM.IS_SHARED, "
|
||||
+ "PLATFORM.IS_DEFAULT_TENANT_MAPPING FROM (SELECT * FROM APPM_PLATFORM WHERE IDENTIFIER= ? "
|
||||
+ "AND (TENANT_ID=? OR IS_SHARED = 1)) PLATFORM LEFT JOIN APPM_PLATFORM_TENANT_MAPPING "
|
||||
+ "MAPPING ON PLATFORM.ID = MAPPING.PLATFORM_ID AND MAPPING.TENANT_ID = ?";
|
||||
return super.getPlatform(tenantId, identifier);
|
||||
}
|
||||
|
||||
public void removeMappingTenants(String platformIdentifier) throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatformId =
|
||||
"SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = 1 AND "
|
||||
+ "IDENTIFIER=?)";
|
||||
super.removeMappingTenants(platformIdentifier);
|
||||
}
|
||||
|
||||
public void update(int tenantId, String oldPlatformIdentifier, Platform platform)
|
||||
throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatformId =
|
||||
"SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = 1 AND "
|
||||
+ "IDENTIFIER=?)";
|
||||
super.update(tenantId, oldPlatformIdentifier, platform);
|
||||
}
|
||||
|
||||
public void addMapping(int tenantId, List<String> platformIdentifiers) throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatformId =
|
||||
"SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = 1 AND "
|
||||
+ "IDENTIFIER=?)";
|
||||
super.addMapping(tenantId, platformIdentifiers);
|
||||
}
|
||||
|
||||
public List<Platform> getPlatforms(int tenantId) throws PlatformManagementDAOException {
|
||||
SQLQueries.queryToGetPlatforms = "SELECT MAPPING.ID, PLATFORM.IDENTIFIER FROM (SELECT * FROM APPM_PLATFORM "
|
||||
+ "WHERE TENANT_ID=? OR IS_SHARED = 1) PLATFORM LEFT JOIN APPM_PLATFORM_TENANT_MAPPING "
|
||||
+ "MAPPING ON PLATFORM.ID = MAPPING.PLATFORM_ID AND MAPPING.TENANT_ID = ?";
|
||||
return super.getPlatforms(tenantId);
|
||||
}
|
||||
}
|
||||
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* 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.platform;
|
||||
|
||||
/**
|
||||
* SQL Queries specific to Platform.
|
||||
*/
|
||||
public class SQLQueries {
|
||||
static String queryToGetSupertenantAndOwnPlatforms = "SELECT ID from APPM_PLATFORM where IDENTIFIER "
|
||||
+ "= ? AND (TENANT_ID = ? OR (TENANT_ID = ? AND IS_SHARED = true))";
|
||||
static String queryToGetPlatformId =
|
||||
"SELECT ID FROM APPM_PLATFORM WHERE (TENANT_ID=? AND IDENTIFIER=?) OR (IS_SHARED = TRUE AND "
|
||||
+ "IDENTIFIER=?)";
|
||||
static String queryToGetPlatform =
|
||||
"SELECT MAPPING.ID, PLATFORM.IDENTIFIER, PLATFORM.FILE_BASED, PLATFORM.ID, PLATFORM.NAME, PLATFORM"
|
||||
+ ".DESCRIPTION, PLATFORM.ICON_NAME, PLATFORM.IS_SHARED, PLATFORM.IS_DEFAULT_TENANT_MAPPING FROM "
|
||||
+ "(SELECT * FROM APPM_PLATFORM WHERE IDENTIFIER= ? AND (TENANT_ID=? OR IS_SHARED = TRUE)) "
|
||||
+ "PLATFORM LEFT JOIN APPM_PLATFORM_TENANT_MAPPING MAPPING ON PLATFORM.ID = MAPPING.PLATFORM_ID "
|
||||
+ "AND MAPPING.TENANT_ID = ?";
|
||||
static String queryToGetPlatforms = "SELECT MAPPING.ID, PLATFORM.IDENTIFIER FROM (SELECT * FROM APPM_PLATFORM "
|
||||
+ "WHERE TENANT_ID=? OR IS_SHARED = TRUE ) PLATFORM LEFT JOIN APPM_PLATFORM_TENANT_MAPPING "
|
||||
+ "MAPPING ON PLATFORM.ID = MAPPING.PLATFORM_ID AND MAPPING.TENANT_ID = ?";
|
||||
}
|
||||
@ -17,7 +17,9 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.dao.impl.visibility;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.Visibility;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.application.mgt.common.UnrestrictedRole;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.VisibilityDAO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
|
||||
@ -36,121 +38,106 @@ import java.util.List;
|
||||
*/
|
||||
public class GenericVisibilityDAOImpl extends AbstractDAOImpl implements VisibilityDAO {
|
||||
|
||||
@Override
|
||||
public int getVisibilityID(Visibility.Type visibilityType) throws VisibilityManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
Connection connection = getDBConnection();
|
||||
String sql = "SELECT ID FROM APPM_RESOURCE_TYPE WHERE NAME = ?";
|
||||
stmt = connection.prepareStatement(sql);
|
||||
stmt.setString(1, visibilityType.toString().toUpperCase());
|
||||
resultSet = stmt.executeQuery();
|
||||
if (resultSet.next()) {
|
||||
return resultSet.getInt("ID");
|
||||
}
|
||||
return -1;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the connection " +
|
||||
"for the visibility management of applications", e);
|
||||
} catch (SQLException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred when trying to get the ID of the" +
|
||||
" visibility type - " + visibilityType.toString(), e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, resultSet);
|
||||
}
|
||||
}
|
||||
private static final Log log = LogFactory.getLog(GenericVisibilityDAOImpl.class);
|
||||
|
||||
@Override
|
||||
public void add(int applicationID, int visibilityTypeID, List<String> allowedList)
|
||||
throws VisibilityManagementDAOException {
|
||||
public void addUnrestrictedRoles(List<UnrestrictedRole> unrestrictedRoles, int applicationId, int tenantId) throws
|
||||
VisibilityManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to add unrestricted roles");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int index = 0;
|
||||
String sql = "INSERT INTO AP_UNRESTRICTED_ROLES (ROLE, TENANT_ID, AP_APP_ID) VALUES (?, ?, ?)";
|
||||
try{
|
||||
Connection connection = getDBConnection();
|
||||
String sql = "INSERT INTO APPM_VISIBILITY (VALUE, RESOURCE_TYPE_ID, APPLICATION_ID) VALUES (?, ?, ?)";
|
||||
stmt = connection.prepareStatement(sql);
|
||||
if (allowedList == null) {
|
||||
stmt.setString(1, null);
|
||||
stmt.setInt(2, visibilityTypeID);
|
||||
stmt.setInt(3, applicationID);
|
||||
stmt.execute();
|
||||
} else {
|
||||
for (String allowed : allowedList) {
|
||||
stmt.setString(1, allowed);
|
||||
stmt.setInt(2, visibilityTypeID);
|
||||
stmt.setInt(3, applicationID);
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
for (UnrestrictedRole role : unrestrictedRoles) {
|
||||
stmt.setString(++index, role.getRole());
|
||||
stmt.setInt(++index, tenantId);
|
||||
stmt.setInt(++index, applicationId);
|
||||
stmt.addBatch();
|
||||
}
|
||||
stmt.executeBatch();
|
||||
}
|
||||
|
||||
}catch (DBConnectionException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the connection " +
|
||||
"for adding the visibility mapping for the application ID - " + applicationID, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the DB connection when adding roles", e);
|
||||
}catch (SQLException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while adding the visibility mapping " +
|
||||
"for the application ID - " + applicationID, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(int applicationId) throws VisibilityManagementDAOException {
|
||||
public List<UnrestrictedRole> getUnrestrictedRoles(int applicationId, int tenantId) throws VisibilityManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to get unrestricted roles");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
List<UnrestrictedRole> unrestrictedRoles = new ArrayList<>();
|
||||
UnrestrictedRole unrestrictedRole = null;
|
||||
int index = 0;
|
||||
String sql = "SELECT ID, ROLE FROM AP_UNRESTRICTED_ROLES WHERE AP_APP_ID = ? AND TENANT_ID = ?;";
|
||||
try{
|
||||
Connection connection = getDBConnection();
|
||||
String sql = "DELETE FROM APPM_VISIBILITY WHERE APPLICATION_ID = ?";
|
||||
stmt = connection.prepareStatement(sql);
|
||||
stmt.setInt(1, applicationId);
|
||||
stmt.execute();
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(++index, applicationId);
|
||||
stmt.setInt(++index, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
while (rs.next()){
|
||||
unrestrictedRole = new UnrestrictedRole();
|
||||
unrestrictedRole.setId(rs.getInt("ID"));
|
||||
unrestrictedRole.setRole(rs.getString("ROLE"));
|
||||
unrestrictedRoles.add(unrestrictedRole);
|
||||
}
|
||||
return unrestrictedRoles;
|
||||
|
||||
}catch (DBConnectionException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the connection " +
|
||||
"for deleting the visibility mapping for the application ID - " + applicationId, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the DB connection when adding roles", e);
|
||||
}catch (SQLException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while deleting the visibility mapping " +
|
||||
"for the application ID - " + applicationId, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, null);
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility get(int applicationId) throws VisibilityManagementDAOException {
|
||||
@Override
|
||||
public void deleteUnrestrictedRoles(List<UnrestrictedRole> unrestrictedRoles, int applicationId, int tenantId) throws VisibilityManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to delete unrestricted roles");
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet resultSet = null;
|
||||
final String visibilityTypeColumn = "VISIBILITY_TYPE";
|
||||
final String allowedValColumn = "ALLOWED_VAL";
|
||||
ResultSet rs = null;
|
||||
int index = 0;
|
||||
String sql = "DELETE FROM AP_UNRESTRICTED_ROLES WHERE AP_APP_ID = 1 AND ROLE = 'role1' AND TENANT_ID = -1234;";
|
||||
try{
|
||||
Connection connection = getDBConnection();
|
||||
String sql = "SELECT APPM_VISIBILITY.VALUE as " + allowedValColumn + ", APPM_RESOURCE_TYPE.NAME AS " +
|
||||
visibilityTypeColumn + " FROM APPM_VISIBILITY JOIN APPM_RESOURCE_TYPE " +
|
||||
"ON APPM_VISIBILITY.RESOURCE_TYPE_ID = APPM_RESOURCE_TYPE.ID " +
|
||||
"WHERE APPM_VISIBILITY.APPLICATION_ID = ?";
|
||||
stmt = connection.prepareStatement(sql);
|
||||
stmt.setInt(1, applicationId);
|
||||
resultSet = stmt.executeQuery();
|
||||
Visibility visibility = new Visibility();
|
||||
List<String> allowedVal = new ArrayList<>();
|
||||
while (resultSet.next()) {
|
||||
if (visibility.getType() == null) {
|
||||
visibility.setType(Visibility.Type.valueOf(resultSet.getString(visibilityTypeColumn)));
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
|
||||
for (UnrestrictedRole role : unrestrictedRoles) {
|
||||
stmt.setInt(++index, applicationId);
|
||||
stmt.setString(++index, role.getRole());
|
||||
stmt.setInt(++index, role.getTenantId());
|
||||
stmt.addBatch();
|
||||
}
|
||||
String val = resultSet.getString(allowedValColumn);
|
||||
if (val != null) {
|
||||
allowedVal.add(val);
|
||||
}
|
||||
}
|
||||
if (!allowedVal.isEmpty()) {
|
||||
visibility.setAllowedList(allowedVal);
|
||||
}
|
||||
return visibility;
|
||||
stmt.executeBatch();
|
||||
|
||||
}catch (DBConnectionException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the connection " +
|
||||
"for getting the visibility mapping for the application ID - " + applicationId, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while obtaining the DB connection when adding roles", e);
|
||||
}catch (SQLException e) {
|
||||
throw new VisibilityManagementDAOException("Error occurred while getting the visibility mapping " +
|
||||
"for the application ID - " + applicationId, e);
|
||||
throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e);
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, resultSet);
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,101 +0,0 @@
|
||||
/*
|
||||
* 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 java.util.List;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Platform represents an Application Platform such as Android, IOS, etc.
|
||||
*/
|
||||
@XmlRootElement(name = "Platform")
|
||||
public class Platform {
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
private String description;
|
||||
private String icon;
|
||||
private boolean shared;
|
||||
private boolean tenantMapping;
|
||||
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;
|
||||
}
|
||||
|
||||
@XmlAttribute(name = "tenantMapping")
|
||||
public boolean isTenantMapping() {
|
||||
return tenantMapping;
|
||||
}
|
||||
|
||||
public void setTenantMapping(boolean tenantMapping) {
|
||||
this.tenantMapping = tenantMapping;
|
||||
}
|
||||
}
|
||||
@ -1,149 +0,0 @@
|
||||
/*
|
||||
* 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.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.PlatformManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.PlatformManager;
|
||||
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 java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
|
||||
/**
|
||||
* PlatformDeployer is responsible for deploying platforms that are added in the filesystem.
|
||||
* This will deploy the platforms that are added in <IOT_HOME>/repository/deployment/server/platforms directory.
|
||||
*/
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
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.getId().contentEquals(getPlatformID(deploymentFile.getName()))) {
|
||||
org.wso2.carbon.device.application.mgt.common.Platform platform = convert(platformConf);
|
||||
PlatformManager platformManager = DataHolder.getInstance().getPlatformManager();
|
||||
int tenantID = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
|
||||
org.wso2.carbon.device.application.mgt.common.Platform existingPlatform = platformManager
|
||||
.getPlatform(tenantID, platform.getIdentifier());
|
||||
if (existingPlatform != null && existingPlatform.isFileBased()) {
|
||||
platformManager.update(tenantID, platformConf.getId(), platform);
|
||||
log.info("Platform configuration : " + deploymentFile.getName() + " updated successfully");
|
||||
} else {
|
||||
platformManager.register(CarbonContext.getThreadLocalCarbonContext().getTenantId(), platform);
|
||||
log.info("Platform configuration : " + deploymentFile.getName() + " deployed successfully");
|
||||
}
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undeploy(String fileName) throws DeploymentException {
|
||||
String platformId = getPlatformID(fileName);
|
||||
try {
|
||||
DataHolder.getInstance().getPlatformManager()
|
||||
.unregister(CarbonContext.getThreadLocalCarbonContext().getTenantId(), platformId, true);
|
||||
log.info("Platform configuration : " + fileName + " un-deployed successfully");
|
||||
} catch (PlatformManagementException e) {
|
||||
log.error("Error occurred while un-deploying the platform - " + fileName, e);
|
||||
}
|
||||
}
|
||||
|
||||
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.setIdentifier(platformConfig.getId());
|
||||
platform.setName(platformConfig.getName());
|
||||
platform.setDescription(platformConfig.getDescription());
|
||||
platform.setIconName(platformConfig.getIcon());
|
||||
platform.setFileBased(true);
|
||||
platform.setShared(platformConfig.isShared());
|
||||
platform.setDefaultTenantMapping(platformConfig.isTenantMapping());
|
||||
platform.setEnabled(false);
|
||||
List<org.wso2.carbon.device.application.mgt.common.Platform.Property> properties = new ArrayList<>();
|
||||
|
||||
if (platformConfig.getProperties() != null) {
|
||||
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) {
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user