mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merging pull request #871 from Megala
This commit is contained in:
commit
9a54c13765
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Annotations</name>
|
<name>WSO2 Carbon - API Management Annotations</name>
|
||||||
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
||||||
|
|||||||
@ -21,12 +21,12 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<name>WSO2 Carbon - API Application Management API</name>
|
<name>WSO2 Carbon - API Application Management API</name>
|
||||||
|
|||||||
@ -42,6 +42,7 @@ public class APIUtil {
|
|||||||
|
|
||||||
private static Log log = LogFactory.getLog(APIUtil.class);
|
private static Log log = LogFactory.getLog(APIUtil.class);
|
||||||
private static final String DEFAULT_CDMF_API_TAG = "device_management";
|
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_CERT_API_TAG = "scep_management";
|
||||||
public static final String PERMISSION_PROPERTY_NAME = "name";
|
public static final String PERMISSION_PROPERTY_NAME = "name";
|
||||||
|
|
||||||
@ -106,6 +107,7 @@ public class APIUtil {
|
|||||||
List<String> allowedApisTags = getDeviceManagementProviderService().getAvailableDeviceTypes();
|
List<String> allowedApisTags = getDeviceManagementProviderService().getAvailableDeviceTypes();
|
||||||
allowedApisTags.add(DEFAULT_CDMF_API_TAG);
|
allowedApisTags.add(DEFAULT_CDMF_API_TAG);
|
||||||
allowedApisTags.add(DEFAULT_CERT_API_TAG);
|
allowedApisTags.add(DEFAULT_CERT_API_TAG);
|
||||||
|
allowedApisTags.add(DEFAULT_AGENT_API_TAG);
|
||||||
return allowedApisTags;
|
return allowedApisTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,12 +22,12 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Application Management</name>
|
<name>WSO2 Carbon - API Application Management</name>
|
||||||
|
|||||||
@ -84,109 +84,118 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe
|
|||||||
String keyType, String username,
|
String keyType, String username,
|
||||||
boolean isAllowedAllDomains, String validityTime)
|
boolean isAllowedAllDomains, String validityTime)
|
||||||
throws APIManagerException {
|
throws APIManagerException {
|
||||||
StoreClient storeClient = APIApplicationManagerExtensionDataHolder.getInstance().getIntegrationClientService()
|
StoreClient storeClient =
|
||||||
.getStoreClient();
|
APIApplicationManagerExtensionDataHolder.getInstance().getIntegrationClientService()
|
||||||
|
.getStoreClient();
|
||||||
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext()
|
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext()
|
||||||
.getTenantDomain();
|
.getTenantDomain();
|
||||||
|
try {
|
||||||
|
ApplicationList applicationList = storeClient.getApplications()
|
||||||
|
.applicationsGet("", applicationName, 1, 0, CONTENT_TYPE, null);
|
||||||
|
Application application;
|
||||||
|
if (applicationList == null || applicationList.getList() == null || applicationList.getList().size() == 0) {
|
||||||
|
//create application;
|
||||||
|
application = new Application();
|
||||||
|
application.setName(applicationName);
|
||||||
|
application.setSubscriber(username);
|
||||||
|
application.setDescription("");
|
||||||
|
application.setThrottlingTier(ApiApplicationConstants.DEFAULT_TIER);
|
||||||
|
application.setGroupId("");
|
||||||
|
application = storeClient.getIndividualApplication().applicationsPost(application, CONTENT_TYPE);
|
||||||
|
} else {
|
||||||
|
ApplicationInfo applicationInfo = applicationList.getList().get(0);
|
||||||
|
application = storeClient.getIndividualApplication()
|
||||||
|
.applicationsApplicationIdGet(applicationInfo.getApplicationId(), CONTENT_TYPE, null, null);
|
||||||
|
}
|
||||||
|
if (application == null) {
|
||||||
|
throw new APIManagerException(
|
||||||
|
"Api application creation failed for " + applicationName + " to the user " + username);
|
||||||
|
}
|
||||||
|
|
||||||
ApplicationList applicationList = storeClient.getApplications()
|
SubscriptionList subscriptionList = storeClient.getSubscriptions().subscriptionsGet
|
||||||
.applicationsGet("", applicationName, 1, 0, CONTENT_TYPE, null);
|
(null, application.getApplicationId(), "", 0, 100, CONTENT_TYPE, null);
|
||||||
Application application;
|
List<Subscription> needToSubscribe = new ArrayList<>();
|
||||||
if (applicationList == null || applicationList.getList() == null || applicationList.getList().size() == 0) {
|
// subscribe to apis.
|
||||||
//create application;
|
if (tags != null && tags.length > 0) {
|
||||||
application = new Application();
|
for (String tag : tags) {
|
||||||
application.setName(applicationName);
|
APIList apiList = storeClient.getApis().apisGet(MAX_API_PER_TAG, 0, tenantDomain, "tag:" + tag
|
||||||
application.setSubscriber(username);
|
, CONTENT_TYPE, null);
|
||||||
application.setDescription("");
|
if (apiList.getList() == null || apiList.getList().size() == 0) {
|
||||||
application.setThrottlingTier(ApiApplicationConstants.DEFAULT_TIER);
|
apiList = storeClient.getApis().apisGet(MAX_API_PER_TAG, 0
|
||||||
application.setGroupId("");
|
, MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, "tag:" + tag, CONTENT_TYPE, null);
|
||||||
application = storeClient.getIndividualApplication().applicationsPost(application, CONTENT_TYPE);
|
}
|
||||||
} else {
|
|
||||||
ApplicationInfo applicationInfo = applicationList.getList().get(0);
|
|
||||||
application = storeClient.getIndividualApplication()
|
|
||||||
.applicationsApplicationIdGet(applicationInfo.getApplicationId(), CONTENT_TYPE, null, null);
|
|
||||||
}
|
|
||||||
if (application == null) {
|
|
||||||
throw new APIManagerException (
|
|
||||||
"Api application creation failed for " + applicationName + " to the user " + username);
|
|
||||||
}
|
|
||||||
|
|
||||||
SubscriptionList subscriptionList = storeClient.getSubscriptions().subscriptionsGet
|
if (apiList.getList() != null && apiList.getList().size() > 0) {
|
||||||
(null, application.getApplicationId(), "", 0, 100, CONTENT_TYPE, null);
|
for (APIInfo apiInfo : apiList.getList()) {
|
||||||
List<Subscription> needToSubscribe = new ArrayList<>();
|
String id = apiInfo.getProvider().replace("@", "-AT-")
|
||||||
// subscribe to apis.
|
+ "-" + apiInfo.getName() + "-" + apiInfo.getVersion();
|
||||||
if (tags != null && tags.length > 0) {
|
boolean subscriptionExist = false;
|
||||||
for (String tag: tags) {
|
if (subscriptionList.getList() != null && subscriptionList.getList().size() > 0) {
|
||||||
APIList apiList = storeClient.getApis().apisGet(MAX_API_PER_TAG, 0, tenantDomain, "tag:" + tag
|
for (Subscription subs : subscriptionList.getList()) {
|
||||||
, CONTENT_TYPE, null);
|
if (subs.getApiIdentifier().equals(id)) {
|
||||||
if (apiList.getList() == null || apiList.getList().size() == 0) {
|
subscriptionExist = true;
|
||||||
apiList = storeClient.getApis().apisGet(MAX_API_PER_TAG, 0
|
break;
|
||||||
, MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, "tag:" + tag, CONTENT_TYPE, null);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (apiList.getList() != null && apiList.getList().size() > 0) {
|
|
||||||
for (APIInfo apiInfo : apiList.getList()) {
|
|
||||||
String id = apiInfo.getProvider().replace("@", "-AT-")
|
|
||||||
+ "-" + apiInfo.getName()+ "-" + apiInfo.getVersion();
|
|
||||||
boolean subscriptionExist = false;
|
|
||||||
if (subscriptionList.getList() != null && subscriptionList.getList().size() > 0) {
|
|
||||||
for (Subscription subs : subscriptionList.getList()) {
|
|
||||||
if (subs.getApiIdentifier().equals(id)) {
|
|
||||||
subscriptionExist = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (!subscriptionExist) {
|
||||||
if (!subscriptionExist) {
|
Subscription subscription = new Subscription();
|
||||||
Subscription subscription = new Subscription();
|
//fix for APIMANAGER-5566 admin-AT-tenant1.com-Tenant1API1-1.0.0
|
||||||
//fix for APIMANAGER-5566 admin-AT-tenant1.com-Tenant1API1-1.0.0
|
|
||||||
|
|
||||||
subscription.setApiIdentifier(id);
|
subscription.setApiIdentifier(id);
|
||||||
subscription.setApplicationId(application.getApplicationId());
|
subscription.setApplicationId(application.getApplicationId());
|
||||||
subscription.tier(ApiApplicationConstants.DEFAULT_TIER);
|
subscription.tier(ApiApplicationConstants.DEFAULT_TIER);
|
||||||
if (!needToSubscribe.contains(subscription)){
|
if (!needToSubscribe.contains(subscription)) {
|
||||||
needToSubscribe.add(subscription);
|
needToSubscribe.add(subscription);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (!needToSubscribe.isEmpty()) {
|
||||||
if (!needToSubscribe.isEmpty()) {
|
storeClient.getSubscriptionMultitpleApi().subscriptionsMultiplePost(needToSubscribe, CONTENT_TYPE);
|
||||||
storeClient.getSubscriptionMultitpleApi().subscriptionsMultiplePost(needToSubscribe, CONTENT_TYPE);
|
}
|
||||||
}
|
//end of subscription
|
||||||
//end of subscription
|
|
||||||
|
|
||||||
List<ApplicationKey> applicationKeys = application.getKeys();
|
List<ApplicationKey> applicationKeys = application.getKeys();
|
||||||
if (applicationKeys != null) {
|
if (applicationKeys != null) {
|
||||||
for (ApplicationKey applicationKey : applicationKeys) {
|
for (ApplicationKey applicationKey : applicationKeys) {
|
||||||
if (keyType.equals(applicationKey.getKeyType().toString())) {
|
if (keyType.equals(applicationKey.getKeyType().toString())) {
|
||||||
ApiApplicationKey apiApplicationKey = new ApiApplicationKey();
|
if (applicationKey.getConsumerKey() != null && !applicationKey.getConsumerKey().isEmpty()) {
|
||||||
apiApplicationKey.setConsumerKey(applicationKey.getConsumerKey());
|
ApiApplicationKey apiApplicationKey = new ApiApplicationKey();
|
||||||
apiApplicationKey.setConsumerSecret(applicationKey.getConsumerSecret());
|
apiApplicationKey.setConsumerKey(applicationKey.getConsumerKey());
|
||||||
return apiApplicationKey;
|
apiApplicationKey.setConsumerSecret(applicationKey.getConsumerSecret());
|
||||||
|
return apiApplicationKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ApplicationKeyGenerateRequest applicationKeyGenerateRequest = new ApplicationKeyGenerateRequest();
|
ApplicationKeyGenerateRequest applicationKeyGenerateRequest = new ApplicationKeyGenerateRequest();
|
||||||
List<String> allowedDomains = new ArrayList<>();
|
List<String> allowedDomains = new ArrayList<>();
|
||||||
if (isAllowedAllDomains) {
|
if (isAllowedAllDomains) {
|
||||||
allowedDomains.add(ApiApplicationConstants.ALLOWED_DOMAINS);
|
allowedDomains.add(ApiApplicationConstants.ALLOWED_DOMAINS);
|
||||||
} else {
|
} else {
|
||||||
allowedDomains.add(APIManagerUtil.getTenantDomain());
|
allowedDomains.add(APIManagerUtil.getTenantDomain());
|
||||||
}
|
}
|
||||||
applicationKeyGenerateRequest.setAccessAllowDomains(allowedDomains);
|
applicationKeyGenerateRequest.setAccessAllowDomains(allowedDomains);
|
||||||
applicationKeyGenerateRequest.setCallbackUrl("");
|
applicationKeyGenerateRequest.setCallbackUrl("");
|
||||||
applicationKeyGenerateRequest.setKeyType(ApplicationKeyGenerateRequest.KeyTypeEnum.PRODUCTION);
|
applicationKeyGenerateRequest.setKeyType(ApplicationKeyGenerateRequest.KeyTypeEnum.PRODUCTION);
|
||||||
applicationKeyGenerateRequest.setValidityTime(validityTime);
|
applicationKeyGenerateRequest.setValidityTime(validityTime);
|
||||||
|
|
||||||
ApplicationKey applicationKey = storeClient.getIndividualApplication().applicationsGenerateKeysPost(
|
ApplicationKey applicationKey = storeClient.getIndividualApplication().applicationsGenerateKeysPost(
|
||||||
application.getApplicationId(), applicationKeyGenerateRequest, CONTENT_TYPE, null, null);
|
application.getApplicationId(), applicationKeyGenerateRequest, CONTENT_TYPE, null, null);
|
||||||
ApiApplicationKey apiApplicationKey = new ApiApplicationKey();
|
if (applicationKey.getConsumerKey() != null && !applicationKey.getConsumerKey().isEmpty()) {
|
||||||
apiApplicationKey.setConsumerKey(applicationKey.getConsumerKey());
|
ApiApplicationKey apiApplicationKey = new ApiApplicationKey();
|
||||||
apiApplicationKey.setConsumerSecret(applicationKey.getConsumerSecret());
|
apiApplicationKey.setConsumerKey(applicationKey.getConsumerKey());
|
||||||
return apiApplicationKey;
|
apiApplicationKey.setConsumerSecret(applicationKey.getConsumerSecret());
|
||||||
|
return apiApplicationKey;
|
||||||
|
}
|
||||||
|
throw new APIManagerException("Failed to generate keys for tenant: " + tenantDomain);
|
||||||
|
} catch (FeignException e) {
|
||||||
|
throw new APIManagerException("Failed to create api application for tenant: " + tenantDomain, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Security Handler Component</name>
|
<name>WSO2 Carbon - API Security Handler Component</name>
|
||||||
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
||||||
|
|||||||
@ -44,6 +44,8 @@ import java.net.URI;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains util methods for synapse gateway authentication handler
|
* Contains util methods for synapse gateway authentication handler
|
||||||
@ -62,21 +64,47 @@ public class Utils {
|
|||||||
public static IOTServerConfiguration initConfig() {
|
public static IOTServerConfiguration initConfig() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
String IOTServerAPIConfigurationPath =
|
String IOTServerAPIConfigurationPath = CarbonUtils.getCarbonConfigDirPath() + File.separator
|
||||||
CarbonUtils.getCarbonConfigDirPath() + File.separator + IOT_APIS_CONFIG_FILE;
|
+ IOT_APIS_CONFIG_FILE;
|
||||||
File file = new File(IOTServerAPIConfigurationPath);
|
File file = new File(IOTServerAPIConfigurationPath);
|
||||||
Document doc = Utils.convertToDocument(file);
|
Document doc = Utils.convertToDocument(file);
|
||||||
|
|
||||||
JAXBContext fileContext = JAXBContext.newInstance(IOTServerConfiguration.class);
|
JAXBContext fileContext = JAXBContext.newInstance(IOTServerConfiguration.class);
|
||||||
Unmarshaller unmarshaller = fileContext.createUnmarshaller();
|
Unmarshaller unmarshaller = fileContext.createUnmarshaller();
|
||||||
return (IOTServerConfiguration) unmarshaller.unmarshal(doc);
|
|
||||||
|
|
||||||
|
IOTServerConfiguration iotServerConfiguration = (IOTServerConfiguration) unmarshaller.unmarshal(
|
||||||
|
doc);
|
||||||
|
iotServerConfiguration.setHostname(replaceProperties(iotServerConfiguration.getHostname()));
|
||||||
|
iotServerConfiguration.setVerificationEndpoint(
|
||||||
|
replaceProperties(iotServerConfiguration.getVerificationEndpoint()));
|
||||||
|
iotServerConfiguration.setDynamicClientRegistrationEndpoint(
|
||||||
|
replaceProperties(iotServerConfiguration.getDynamicClientRegistrationEndpoint()));
|
||||||
|
iotServerConfiguration.setOauthTokenEndpoint(
|
||||||
|
replaceProperties(iotServerConfiguration.getOauthTokenEndpoint()));
|
||||||
|
return iotServerConfiguration;
|
||||||
} catch (JAXBException | APIMCertificateMGTException e) {
|
} catch (JAXBException | APIMCertificateMGTException e) {
|
||||||
log.error("Error occurred while initializing Data Source config", e);
|
log.error("Error occurred while initializing Data Source config", e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method gets the values from system variables and sets to xml.
|
||||||
|
*/
|
||||||
|
public static String replaceProperties(String text) {
|
||||||
|
String regex = "\\$\\{(.*?)\\}";
|
||||||
|
Pattern pattern = Pattern.compile(regex);
|
||||||
|
Matcher matchPattern = pattern.matcher(text);
|
||||||
|
while (matchPattern.find()) {
|
||||||
|
String sysPropertyName = matchPattern.group(1);
|
||||||
|
String sysPropertyValue = System.getProperty(sysPropertyName);
|
||||||
|
if (sysPropertyValue != null && !sysPropertyName.isEmpty()) {
|
||||||
|
text = text.replaceAll("\\$\\{(" + sysPropertyName + ")\\}", sysPropertyValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class build the iot-api-config.xml file.
|
* This class build the iot-api-config.xml file.
|
||||||
* @param file
|
* @param file
|
||||||
|
|||||||
@ -19,22 +19,22 @@
|
|||||||
|
|
||||||
<ServerConfiguration>
|
<ServerConfiguration>
|
||||||
<!-- IoT server host name, this is referred from APIM gateway to call to IoT server for certificate validation-->
|
<!-- IoT server host name, this is referred from APIM gateway to call to IoT server for certificate validation-->
|
||||||
<Hostname>https://localhost:9443/</Hostname>
|
<Hostname>https://${iot.core.host}:${iot.core.https.port}/</Hostname>
|
||||||
|
|
||||||
<!--End point to verify the certificate-->
|
<!--End point to verify the certificate-->
|
||||||
<VerificationEndpoint>https://localhost:9443/api/certificate-mgt/v1.0/admin/certificates/verify/</VerificationEndpoint>
|
<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-->
|
<!--Admin username/password - this is to use for oauth token generation-->
|
||||||
<Username>admin</Username>
|
<Username>admin</Username>
|
||||||
<Password>admin</Password>
|
<Password>admin</Password>
|
||||||
|
|
||||||
<!--Dynamic client registration endpoint-->
|
<!--Dynamic client registration endpoint-->
|
||||||
<DynamicClientRegistrationEndpoint>https://localhost:9443/dynamic-client-web/register</DynamicClientRegistrationEndpoint>
|
<DynamicClientRegistrationEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/client-registration/v0.11/register</DynamicClientRegistrationEndpoint>
|
||||||
|
|
||||||
<!--Oauth token endpoint-->
|
<!--Oauth token endpoint-->
|
||||||
<OauthTokenEndpoint>https://localhost:9443/oauth2/token</OauthTokenEndpoint>
|
<OauthTokenEndpoint>https://${iot.keymanager.host}:${iot.keymanager.https.port}/oauth2/token</OauthTokenEndpoint>
|
||||||
|
|
||||||
<APIS>
|
<APIS>
|
||||||
<ContextPath>/services/echo</ContextPath>
|
<ContextPath>/services</ContextPath>
|
||||||
</APIS>
|
</APIS>
|
||||||
</ServerConfiguration>
|
</ServerConfiguration>
|
||||||
@ -13,13 +13,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Integration Client</name>
|
<name>WSO2 Carbon - API Management Integration Client</name>
|
||||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||||
|
|||||||
@ -21,24 +21,43 @@ package org.wso2.carbon.apimgt.integration.client.util;
|
|||||||
|
|
||||||
import feign.Client;
|
import feign.Client;
|
||||||
|
|
||||||
import javax.net.ssl.HostnameVerifier;
|
import javax.net.ssl.*;
|
||||||
import javax.net.ssl.SSLContext;
|
import java.io.FileInputStream;
|
||||||
import javax.net.ssl.SSLSession;
|
import java.io.FileNotFoundException;
|
||||||
import javax.net.ssl.SSLSocketFactory;
|
|
||||||
import javax.net.ssl.TrustManager;
|
|
||||||
import javax.net.ssl.X509TrustManager;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.KeyManagementException;
|
import java.io.InputStream;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.*;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import feign.Logger;
|
import feign.Logger;
|
||||||
import feign.Request;
|
import feign.Request;
|
||||||
import feign.Response;
|
import feign.Response;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.base.ServerConfiguration;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(Utils.class);
|
||||||
|
|
||||||
|
private static final String KEY_STORE_TYPE = "JKS";
|
||||||
|
/**
|
||||||
|
* Default truststore type of the client
|
||||||
|
*/
|
||||||
|
private static final String TRUST_STORE_TYPE = "JKS";
|
||||||
|
/**
|
||||||
|
* Default keymanager type of the client
|
||||||
|
*/
|
||||||
|
private static final String KEY_MANAGER_TYPE = "SunX509"; //Default Key Manager Type
|
||||||
|
/**
|
||||||
|
* Default trustmanager type of the client
|
||||||
|
*/
|
||||||
|
private static final String TRUST_MANAGER_TYPE = "SunX509"; //Default Trust Manager Type
|
||||||
|
|
||||||
|
private static final String SSLV3 = "SSLv3";
|
||||||
|
|
||||||
|
|
||||||
//This method is only used if the mb features are within DAS.
|
//This method is only used if the mb features are within DAS.
|
||||||
public static String replaceProperties(String text) {
|
public static String replaceProperties(String text) {
|
||||||
String regex = "\\$\\{(.*?)\\}";
|
String regex = "\\$\\{(.*?)\\}";
|
||||||
@ -55,15 +74,20 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Client getSSLClient() {
|
public static Client getSSLClient() {
|
||||||
return new Client.Default(getTrustedSSLSocketFactory(), new HostnameVerifier() {
|
boolean isIgnoreHostnameVerification = Boolean.parseBoolean(System.getProperty("org.wso2.ignoreHostnameVerification"));
|
||||||
@Override
|
if(isIgnoreHostnameVerification) {
|
||||||
public boolean verify(String s, SSLSession sslSession) {
|
return new Client.Default(getSimpleTrustedSSLSocketFactory(), new HostnameVerifier() {
|
||||||
return true;
|
@Override
|
||||||
}
|
public boolean verify(String s, SSLSession sslSession) {
|
||||||
});
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else {
|
||||||
|
return new Client.Default(getTrustedSSLSocketFactory(), null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SSLSocketFactory getTrustedSSLSocketFactory() {
|
private static SSLSocketFactory getSimpleTrustedSSLSocketFactory() {
|
||||||
try {
|
try {
|
||||||
TrustManager[] trustAllCerts = new TrustManager[]{
|
TrustManager[] trustAllCerts = new TrustManager[]{
|
||||||
new X509TrustManager() {
|
new X509TrustManager() {
|
||||||
@ -86,4 +110,60 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SSLSocketFactory getTrustedSSLSocketFactory() {
|
||||||
|
try {
|
||||||
|
String keyStorePassword = ServerConfiguration.getInstance().getFirstProperty("Security.KeyStore.Password");
|
||||||
|
String keyStoreLocation = ServerConfiguration.getInstance().getFirstProperty("Security.KeyStore.Location");
|
||||||
|
String trustStorePassword = ServerConfiguration.getInstance().getFirstProperty(
|
||||||
|
"Security.TrustStore.Password");
|
||||||
|
String trustStoreLocation = ServerConfiguration.getInstance().getFirstProperty(
|
||||||
|
"Security.TrustStore.Location");
|
||||||
|
KeyStore keyStore = loadKeyStore(keyStoreLocation,keyStorePassword,KEY_STORE_TYPE);
|
||||||
|
KeyStore trustStore = loadTrustStore(trustStoreLocation,trustStorePassword);
|
||||||
|
|
||||||
|
return initSSLConnection(keyStore,keyStorePassword,trustStore);
|
||||||
|
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException
|
||||||
|
|CertificateException | IOException | UnrecoverableKeyException e) {
|
||||||
|
log.error("Error while creating the SSL socket factory due to "+e.getMessage(),e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SSLSocketFactory initSSLConnection(KeyStore keyStore,String keyStorePassword,KeyStore trustStore) throws NoSuchAlgorithmException, UnrecoverableKeyException,
|
||||||
|
KeyStoreException, KeyManagementException {
|
||||||
|
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KEY_MANAGER_TYPE);
|
||||||
|
keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());
|
||||||
|
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TRUST_MANAGER_TYPE);
|
||||||
|
trustManagerFactory.init(trustStore);
|
||||||
|
|
||||||
|
// Create and initialize SSLContext for HTTPS communication
|
||||||
|
SSLContext sslContext = SSLContext.getInstance(SSLV3);
|
||||||
|
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
|
||||||
|
SSLContext.setDefault(sslContext);
|
||||||
|
return sslContext.getSocketFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static KeyStore loadKeyStore(String keyStorePath, String ksPassword,String type)
|
||||||
|
throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
|
||||||
|
InputStream fileInputStream = null;
|
||||||
|
try {
|
||||||
|
char[] keypassChar = ksPassword.toCharArray();
|
||||||
|
KeyStore keyStore = KeyStore.getInstance(type);
|
||||||
|
fileInputStream = new FileInputStream(keyStorePath);
|
||||||
|
keyStore.load(fileInputStream, keypassChar);
|
||||||
|
return keyStore;
|
||||||
|
} finally {
|
||||||
|
if (fileInputStream != null) {
|
||||||
|
fileInputStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static KeyStore loadTrustStore(String trustStorePath, String tsPassword)
|
||||||
|
throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
|
||||||
|
return loadKeyStore(trustStorePath,tsPassword,TRUST_STORE_TYPE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -13,13 +13,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
||||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
||||||
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - API Management Extensions Component</name>
|
<name>WSO2 Carbon - API Management Extensions Component</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>application-mgt</artifactId>
|
<artifactId>application-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.api</artifactId>
|
<artifactId>org.wso2.carbon.device.application.mgt.api</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<name>WSO2 Carbon - Application Management API</name>
|
<name>WSO2 Carbon - Application Management API</name>
|
||||||
<description>WSO2 Carbon - Application Management API</description>
|
<description>WSO2 Carbon - Application Management API</description>
|
||||||
@ -36,13 +36,6 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<source>1.7</source>
|
|
||||||
<target>1.7</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
@ -132,6 +125,10 @@
|
|||||||
<groupId>org.codehaus.jackson</groupId>
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
<artifactId>jackson-jaxrs</artifactId>
|
<artifactId>jackson-jaxrs</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
|
<artifactId>jackson-core-asl</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.ws.rs</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
<artifactId>jsr311-api</artifactId>
|
<artifactId>jsr311-api</artifactId>
|
||||||
@ -228,5 +225,6 @@
|
|||||||
<groupId>javax.ws.rs</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
<artifactId>javax.ws.rs-api</artifactId>
|
<artifactId>javax.ws.rs-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
@ -18,14 +18,60 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.api.services;
|
package org.wso2.carbon.device.application.mgt.api.services;
|
||||||
|
|
||||||
import io.swagger.annotations.*;
|
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.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
|
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.api.beans.ErrorResponse;
|
||||||
|
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.ApplicationList;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "Application Management Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "ApplicationManagementService"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/applications"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "application_management", description = "Application Management related APIs")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@Scope(
|
||||||
|
name = "Get Application Details",
|
||||||
|
description = "Get application details",
|
||||||
|
key = "perm:application:get",
|
||||||
|
permissions = {"/device-mgt/application/get"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Create an Application",
|
||||||
|
description = "Create an application",
|
||||||
|
key = "perm:application:create",
|
||||||
|
permissions = {"/device-mgt/application/create"}
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Path("/applications")
|
||||||
@Api(value = "Application Management", description = "This API carries all application management related operations " +
|
@Api(value = "Application Management", description = "This API carries all application management related operations " +
|
||||||
"such as get all the applications, add application, etc.")
|
"such as get all the applications, add application, etc.")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ -35,19 +81,18 @@ public interface ApplicationManagementAPI {
|
|||||||
public final static String SCOPE = "scope";
|
public final static String SCOPE = "scope";
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("applications")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "POST",
|
httpMethod = "GET",
|
||||||
value = "get all applications",
|
value = "get all applications",
|
||||||
notes = "This will get all applications",
|
notes = "This will get all applications",
|
||||||
tags = "Application Management",
|
tags = "Application Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:get-application")
|
@ExtensionProperty(name = SCOPE, value = "perm:application:get")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -73,21 +118,62 @@ public interface ApplicationManagementAPI {
|
|||||||
value = "Validates if the requested variant has not been modified since the time specified",
|
value = "Validates if the requested variant has not been modified since the time specified",
|
||||||
required = false)
|
required = false)
|
||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince,
|
@HeaderParam("If-Modified-Since") String ifModifiedSince,
|
||||||
|
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "offset",
|
name = "offset",
|
||||||
value = "Provide from which position apps should return",
|
value = "Provide from which position apps should return",
|
||||||
required = false,
|
required = false,
|
||||||
defaultValue = "20")
|
defaultValue = "20")
|
||||||
@QueryParam("offset") int offset,
|
@QueryParam("offset") int offset,
|
||||||
|
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "limit",
|
name = "limit",
|
||||||
value = "Provide how many apps it should return",
|
value = "Provide how many apps it should return",
|
||||||
required = false,
|
required = false,
|
||||||
defaultValue = "0")
|
defaultValue = "0")
|
||||||
@QueryParam("limit") int limit
|
@QueryParam("limit") int limit,
|
||||||
|
@ApiParam(
|
||||||
|
name = "searchQuery",
|
||||||
|
value = "Relevant search query to search on",
|
||||||
|
required = false,
|
||||||
|
defaultValue = "*")
|
||||||
|
@QueryParam("searchQuery") String searchQuery
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Create an application",
|
||||||
|
notes = "This will create a new application",
|
||||||
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application:create")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 201,
|
||||||
|
message = "OK. \n Successfully created an application.",
|
||||||
|
response = Application.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. \n " +
|
||||||
|
"Empty body because the client already has the latest version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting the application list.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response createApplication(
|
||||||
|
@ApiParam(
|
||||||
|
name = "application",
|
||||||
|
value = "The application that need to be created.",
|
||||||
|
required = true)
|
||||||
|
@Valid Application application);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,4 +31,16 @@
|
|||||||
<APIVersion></APIVersion>
|
<APIVersion></APIVersion>
|
||||||
<!--Permission Tree Name-->
|
<!--Permission Tree Name-->
|
||||||
<!--End of Permission Tree-->
|
<!--End of Permission Tree-->
|
||||||
|
<Permission>
|
||||||
|
<name>Get Application</name>
|
||||||
|
<path>/device-mgt/application/get</path>
|
||||||
|
<url>/application-mgt/applications</url>
|
||||||
|
<method>GET</method>
|
||||||
|
</Permission>
|
||||||
|
<Permission>
|
||||||
|
<name>Create Application</name>
|
||||||
|
<path>/device-mgt/application/create</path>
|
||||||
|
<url>/application-mgt/applications</url>
|
||||||
|
<method>POST</method>
|
||||||
|
</Permission>
|
||||||
</PermissionConfiguration>
|
</PermissionConfiguration>
|
||||||
|
|||||||
@ -33,6 +33,9 @@ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
|
|||||||
</jaxrs:server>
|
</jaxrs:server>
|
||||||
|
|
||||||
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.api.services.impl.ApplicationManagementAPIImpl"/>
|
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.api.services.impl.ApplicationManagementAPIImpl"/>
|
||||||
|
<!--<bean id="platformManagementAPIBean" class="org.wso2.carbon.device.application.mgt.api.services.impl.PlatformManagementAPIImpl" />-->
|
||||||
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.api.JSONMessageHandler"/>
|
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.api.JSONMessageHandler"/>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>application-mgt</artifactId>
|
<artifactId>application-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Application Management Common</name>
|
<name>WSO2 Carbon - Application Management Common</name>
|
||||||
<description>WSO2 Carbon - Application Management Common</description>
|
<description>WSO2 Carbon - Application Management Common</description>
|
||||||
|
|||||||
@ -25,6 +25,9 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application represents the an Application in Application Store
|
||||||
|
*/
|
||||||
public class Application {
|
public class Application {
|
||||||
|
|
||||||
@Exclude
|
@Exclude
|
||||||
|
|||||||
@ -20,6 +20,9 @@ package org.wso2.carbon.device.application.mgt.common;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a list of {@link Application}.
|
||||||
|
*/
|
||||||
public class ApplicationList {
|
public class ApplicationList {
|
||||||
|
|
||||||
private List<Application> applications;
|
private List<Application> applications;
|
||||||
|
|||||||
@ -21,6 +21,9 @@ package org.wso2.carbon.device.application.mgt.common;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class holds the details when releasing an Application to application store.
|
||||||
|
*/
|
||||||
public class ApplicationRelease {
|
public class ApplicationRelease {
|
||||||
|
|
||||||
private enum Channel {
|
private enum Channel {
|
||||||
|
|||||||
@ -18,8 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
/**
|
||||||
|
* Represents the category a particular {@link Application} belongs to.
|
||||||
|
*/
|
||||||
public class Category {
|
public class Category {
|
||||||
|
|
||||||
private int id;
|
private int id;
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a comment for an {@link Application}.
|
||||||
|
*/
|
||||||
public class Comment {
|
public class Comment {
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
|
|||||||
@ -19,10 +19,15 @@
|
|||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter represents a criteria that can be used for searching applications.
|
||||||
|
*/
|
||||||
public class Filter {
|
public class Filter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order which the search results should be shown. Ascending or Descending.
|
||||||
|
*/
|
||||||
public enum SortingOrder {
|
public enum SortingOrder {
|
||||||
ASC, DESC
|
ASC, DESC
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,8 +19,15 @@
|
|||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FilterProperty defines the property that can be used to filter the Application.
|
||||||
|
*/
|
||||||
public class FilterProperty {
|
public class FilterProperty {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operators that can be used in search.
|
||||||
|
*/
|
||||||
public enum Operator {
|
public enum Operator {
|
||||||
EQUALS ("="),
|
EQUALS ("="),
|
||||||
GRATER_THAN (">"),
|
GRATER_THAN (">"),
|
||||||
|
|||||||
@ -19,6 +19,9 @@ package org.wso2.carbon.device.application.mgt.common;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an lifecycle of an {@link Application}.
|
||||||
|
*/
|
||||||
public class Lifecycle {
|
public class Lifecycle {
|
||||||
|
|
||||||
private LifecycleState lifecycleState;
|
private LifecycleState lifecycleState;
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a state in {@link Lifecycle}.
|
||||||
|
*/
|
||||||
public class LifecycleState {
|
public class LifecycleState {
|
||||||
|
|
||||||
private int id;
|
private int id;
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the pagination details that will be used when fetching application details from database.
|
||||||
|
*/
|
||||||
public class Pagination {
|
public class Pagination {
|
||||||
|
|
||||||
private int offset;
|
private int offset;
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the payment related information for the {@link Application}.
|
||||||
|
*/
|
||||||
public class Payment {
|
public class Payment {
|
||||||
private boolean freeApp;
|
private boolean freeApp;
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,9 @@ import org.wso2.carbon.device.application.mgt.common.jaxrs.Exclude;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the platform of an {@link Application}.
|
||||||
|
*/
|
||||||
public class Platform {
|
public class Platform {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -175,6 +178,9 @@ public class Platform {
|
|||||||
return !(name == null || identifier == null);
|
return !(name == null || identifier == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a property of a {@link Platform}.
|
||||||
|
*/
|
||||||
public static class Property implements Cloneable {
|
public static class Property implements Cloneable {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
@ -20,6 +20,9 @@ package org.wso2.carbon.device.application.mgt.common;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents subscription of an {@link Application}
|
||||||
|
*/
|
||||||
public class Subscription {
|
public class Subscription {
|
||||||
|
|
||||||
private Visibility.Type type;
|
private Visibility.Type type;
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an user of {@link Application}.
|
||||||
|
*/
|
||||||
public class User {
|
public class User {
|
||||||
|
|
||||||
private String userName;
|
private String userName;
|
||||||
@ -44,4 +47,9 @@ public class User {
|
|||||||
public void setTenantId(int tenantId) {
|
public void setTenantId(int tenantId) {
|
||||||
this.tenantId = tenantId;
|
this.tenantId = tenantId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "User-name : " + userName + "\t Tenant-ID : " + tenantId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common;
|
package org.wso2.carbon.device.application.mgt.common;
|
||||||
|
|
||||||
//TODO: move to app
|
/**
|
||||||
|
* This class represents the visibility details of an Application.
|
||||||
|
*/
|
||||||
public class Visibility {
|
public class Visibility {
|
||||||
|
|
||||||
private Type type;
|
private Type type;
|
||||||
@ -61,6 +63,9 @@ public class Visibility {
|
|||||||
this.applicationRelease = applicationRelease;
|
this.applicationRelease = applicationRelease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type of the visibility of the application.
|
||||||
|
*/
|
||||||
public class Type {
|
public class Type {
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
|
|||||||
@ -18,16 +18,19 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the exception thrown during application management.
|
||||||
|
*/
|
||||||
public class ApplicationManagementException extends Exception {
|
public class ApplicationManagementException extends Exception {
|
||||||
|
|
||||||
String message;
|
String message;
|
||||||
|
|
||||||
public ApplicationManagementException(String message, Throwable throwable){
|
public ApplicationManagementException(String message, Throwable throwable) {
|
||||||
super(message, throwable);
|
super(message, throwable);
|
||||||
setMessage(message);
|
setMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicationManagementException(String message){
|
public ApplicationManagementException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
setMessage(message);
|
setMessage(message);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown due to Database Connection issues.
|
||||||
|
*/
|
||||||
public class DBConnectionException extends ApplicationManagementException {
|
public class DBConnectionException extends ApplicationManagementException {
|
||||||
|
|
||||||
private static final long serialVersionUID = -3151279331929070297L;
|
private static final long serialVersionUID = -3151279331929070297L;
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown due to an issue in database transactions.
|
||||||
|
*/
|
||||||
public class IllegalTransactionStateException extends RuntimeException {
|
public class IllegalTransactionStateException extends RuntimeException {
|
||||||
|
|
||||||
private static final long serialVersionUID = -3151279331929070297L;
|
private static final long serialVersionUID = -3151279331929070297L;
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown due to invalid configurations provided for Application Management.
|
||||||
|
*/
|
||||||
public class InvalidConfigurationException extends ApplicationManagementException {
|
public class InvalidConfigurationException extends ApplicationManagementException {
|
||||||
|
|
||||||
public InvalidConfigurationException(String message, Throwable throwable) {
|
public InvalidConfigurationException(String message, Throwable throwable) {
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception caused during the platform management.
|
||||||
|
*/
|
||||||
public class PlatformManagementException extends ApplicationManagementException {
|
public class PlatformManagementException extends ApplicationManagementException {
|
||||||
|
|
||||||
public PlatformManagementException(String message, Throwable ex) {
|
public PlatformManagementException(String message, Throwable ex) {
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.exception;
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown due to an issue in TransactionManagement of Database.
|
||||||
|
*/
|
||||||
public class TransactionManagementException extends ApplicationManagementException {
|
public class TransactionManagementException extends ApplicationManagementException {
|
||||||
|
|
||||||
private static final long serialVersionUID = -3151279321929070297L;
|
private static final long serialVersionUID = -3151279321929070297L;
|
||||||
|
|||||||
@ -21,6 +21,9 @@ package org.wso2.carbon.device.application.mgt.common.jaxrs;
|
|||||||
import com.google.gson.ExclusionStrategy;
|
import com.google.gson.ExclusionStrategy;
|
||||||
import com.google.gson.FieldAttributes;
|
import com.google.gson.FieldAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to exclude certain fields when serializing and de-serializing based on the annotation.
|
||||||
|
*/
|
||||||
public class AnnotationExclusionStrategy implements ExclusionStrategy {
|
public class AnnotationExclusionStrategy implements ExclusionStrategy {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -23,6 +23,9 @@ import java.lang.annotation.Retention;
|
|||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is the representation of custom developed Exclude annotation.
|
||||||
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target(ElementType.FIELD)
|
@Target(ElementType.FIELD)
|
||||||
public @interface Exclude {
|
public @interface Exclude {
|
||||||
|
|||||||
@ -19,17 +19,43 @@
|
|||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
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.Application;
|
||||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
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.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
|
|
||||||
public interface ApplicationManager{
|
/**
|
||||||
|
* This interface manages the application creation, deletion and editing of the application.
|
||||||
|
*/
|
||||||
|
public interface ApplicationManager {
|
||||||
|
|
||||||
public Application createApplication(Application application) throws ApplicationManagementException;
|
/**
|
||||||
|
* Creates an application.
|
||||||
|
* @param application Application that need to be created.
|
||||||
|
* @return Created application
|
||||||
|
* @throws ApplicationManagementException Application Management Exception
|
||||||
|
*/
|
||||||
|
public Application createApplication(Application application) throws ApplicationManagementException;
|
||||||
|
|
||||||
public Application editApplication(Application application) throws ApplicationManagementException;
|
/**
|
||||||
|
* Updates an already existing application.
|
||||||
|
* @param application Application that need to be updated.
|
||||||
|
* @return Updated Application
|
||||||
|
* @throws ApplicationManagementException Application Management Exception
|
||||||
|
*/
|
||||||
|
public Application editApplication(Application application) throws ApplicationManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an application identified by the unique ID.
|
||||||
|
* @param uuid Unique ID for tha application
|
||||||
|
* @throws ApplicationManagementException Application Management Exception
|
||||||
|
*/
|
||||||
public void deleteApplication(String uuid) throws ApplicationManagementException;
|
public void deleteApplication(String uuid) throws ApplicationManagementException;
|
||||||
|
|
||||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
/**
|
||||||
|
* To get the applications based on the search filter.
|
||||||
|
* @param filter Search filter
|
||||||
|
* @return Applications that matches the given filter criteria.
|
||||||
|
* @throws ApplicationManagementException Application Management Exception
|
||||||
|
*/
|
||||||
|
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,11 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
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;
|
* ApplicationReleaseManager is responsible for handling all the operations related with
|
||||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
* {@link org.wso2.carbon.device.application.mgt.common.ApplicationRelease} which involving addition, updation ,
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
* deletion and viewing.
|
||||||
|
*
|
||||||
public interface ApplicationReleaseManager{
|
*/
|
||||||
|
public interface ApplicationReleaseManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface manages all the operations related with Application Upload.
|
||||||
|
*/
|
||||||
public interface ApplicationUploadManager {
|
public interface ApplicationUploadManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,13 +18,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
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.Category;
|
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.Filter;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
|
|
||||||
public interface CategoryManager{
|
/**
|
||||||
|
* CategoryManager is responsible for handling add, delete, update opertaions related with {@link Category}
|
||||||
|
*/
|
||||||
|
public interface CategoryManager {
|
||||||
|
|
||||||
public Category createCategory(Category application) throws ApplicationManagementException;
|
public Category createCategory(Category application) throws ApplicationManagementException;
|
||||||
|
|
||||||
|
|||||||
@ -18,5 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
public interface CommentsManager{
|
/**
|
||||||
|
* CommentsManager is responsible for handling all the add/update/delete/get operations related with
|
||||||
|
* {@link org.wso2.carbon.device.application.mgt.common.Comment}.
|
||||||
|
*/
|
||||||
|
public interface CommentsManager {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface manages all the operations related with lifecycle state.
|
||||||
|
*/
|
||||||
public interface LifecycleStateManager {
|
public interface LifecycleStateManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Platform manager is responsible for handling platforms, which will be used to as a registry of platforms.
|
* 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 informations to other classes which requires.
|
* And will be able to provide the platforms related information to other classes which requires.
|
||||||
*/
|
*/
|
||||||
public interface PlatformManager {
|
public interface PlatformManager {
|
||||||
|
|
||||||
@ -37,9 +37,11 @@ public interface PlatformManager {
|
|||||||
|
|
||||||
void register(String tenantDomain, Platform platform) throws PlatformManagementException;
|
void register(String tenantDomain, Platform platform) throws PlatformManagementException;
|
||||||
|
|
||||||
void update(String tenantDomain, String oldPlatformIdentifier, Platform platform) throws PlatformManagementException;
|
void update(String tenantDomain, String oldPlatformIdentifier, Platform platform)
|
||||||
|
throws PlatformManagementException;
|
||||||
|
|
||||||
void unregister(String tenantDomain, String platformIdentifier, boolean isFileBased) throws PlatformManagementException;
|
void unregister(String tenantDomain, String platformIdentifier, boolean isFileBased)
|
||||||
|
throws PlatformManagementException;
|
||||||
|
|
||||||
void addMapping(String tenantDomain, List<String> platformIdentifiers) throws PlatformManagementException;
|
void addMapping(String tenantDomain, List<String> platformIdentifiers) throws PlatformManagementException;
|
||||||
|
|
||||||
|
|||||||
@ -18,5 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface manages all the operations related with Application Subscription.
|
||||||
|
*/
|
||||||
public interface SubscriptionManager {
|
public interface SubscriptionManager {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface manages all the operations related with Application Visibility.
|
||||||
|
*/
|
||||||
public interface VisibilityManager {
|
public interface VisibilityManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,5 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.common.services;
|
package org.wso2.carbon.device.application.mgt.common.services;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VisibilityTypeManager is responsible for handling all the operations related to VisibilityType, this includes
|
||||||
|
* creating, updating and viewing the {@link org.wso2.carbon.device.application.mgt.common.Visibility.Type}
|
||||||
|
*/
|
||||||
public interface VisibilityTypeManager {
|
public interface VisibilityTypeManager {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>application-mgt</artifactId>
|
<artifactId>application-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.core</artifactId>
|
<artifactId>org.wso2.carbon.device.application.mgt.core</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Application Management Core</name>
|
<name>WSO2 Carbon - Application Management Core</name>
|
||||||
<description>WSO2 Carbon - Application Management Core</description>
|
<description>WSO2 Carbon - Application Management Core</description>
|
||||||
|
|||||||
@ -410,7 +410,12 @@ public class MySQLApplicationDAOImpl extends AbstractApplicationDAOImpl {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Application createApplication(Application application) throws ApplicationManagementDAOException {
|
public Application createApplication(Application application) 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());
|
||||||
|
}
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
|
|||||||
@ -21,6 +21,9 @@ import javax.xml.bind.annotation.XmlAttribute;
|
|||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.bind.annotation.XmlValue;
|
import javax.xml.bind.annotation.XmlValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a property of the {@link Platform}.
|
||||||
|
*/
|
||||||
@XmlRootElement(name = "Property")
|
@XmlRootElement(name = "Property")
|
||||||
public class Property {
|
public class Property {
|
||||||
|
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>application-mgt</artifactId>
|
<artifactId>application-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.application.mgt.ui</artifactId>
|
<artifactId>org.wso2.carbon.device.application.mgt.ui</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - Application Management Base UI</name>
|
<name>WSO2 Carbon - Application Management Base UI</name>
|
||||||
<description>WSO2 Carbon - Application Management Base UI</description>
|
<description>WSO2 Carbon - Application Management Base UI</description>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -38,8 +38,6 @@
|
|||||||
<module>org.wso2.carbon.device.application.mgt.common</module>
|
<module>org.wso2.carbon.device.application.mgt.common</module>
|
||||||
<module>org.wso2.carbon.device.application.mgt.api</module>
|
<module>org.wso2.carbon.device.application.mgt.api</module>
|
||||||
<module>org.wso2.carbon.device.application.mgt.ui</module>
|
<module>org.wso2.carbon.device.application.mgt.ui</module>
|
||||||
<!--<module>org.wso2.carbon.device.application.mgt.android.platform</module>-->
|
|
||||||
|
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@ -62,4 +60,5 @@
|
|||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -38,8 +38,8 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.7</source>
|
<source>1.8</source>
|
||||||
<target>1.7</target>
|
<target>1.8</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -38,8 +38,8 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.7</source>
|
<source>1.8</source>
|
||||||
<target>1.7</target>
|
<target>1.8</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Certificate Management Core</name>
|
<name>WSO2 Carbon - Certificate Management Core</name>
|
||||||
<description>WSO2 Carbon - Certificate Management Core</description>
|
<description>WSO2 Carbon - Certificate Management Core</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Certificate Management Component</name>
|
<name>WSO2 Carbon - Certificate Management Component</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -112,7 +112,7 @@
|
|||||||
org.w3c.dom,
|
org.w3c.dom,
|
||||||
org.wso2.carbon.context,
|
org.wso2.carbon.context,
|
||||||
org.wso2.carbon.device.mgt.common.*,
|
org.wso2.carbon.device.mgt.common.*,
|
||||||
org.wso2.carbon.device.mgt.extensions.*,
|
org.wso2.carbon.device.mgt.extensions.device.type.template.*,
|
||||||
org.wso2.carbon.registry.api,
|
org.wso2.carbon.registry.api,
|
||||||
org.wso2.carbon.registry.core,
|
org.wso2.carbon.registry.core,
|
||||||
org.wso2.carbon.registry.core.*,
|
org.wso2.carbon.registry.core.*,
|
||||||
|
|||||||
@ -29,12 +29,12 @@ import org.osgi.framework.ServiceRegistration;
|
|||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.config.DeviceTypeConfiguration;
|
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.config.exception.DeviceTypeConfigurationException;
|
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.internal.DeviceTypeManagementDataHolder;
|
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.internal.DeviceTypeManagementDataHolder;
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.template.DeviceTypeConfigIdentifier;
|
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.template.DeviceTypeManagerService;
|
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.util.DeviceTypeConfigUtil;
|
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.util.DeviceTypeConfigUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.extensions.device.type.template.DeviceTypeConfigIdentifier;
|
||||||
|
import org.wso2.carbon.device.mgt.extensions.device.type.template.DeviceTypeManagerService;
|
||||||
|
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration;
|
||||||
|
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
|||||||
@ -1,123 +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.mgt.extensions.device.type.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.io.FileUtils;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.utils.CarbonUtils;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the device deployer that will read and deploy the device type ui files from
|
|
||||||
* "deployment/server/devicetypes-ui"
|
|
||||||
* directory.
|
|
||||||
*/
|
|
||||||
public class DeviceTypeUIDeployer extends AbstractDeployer {
|
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(DeviceTypeUIDeployer.class);
|
|
||||||
protected Map<String, String> deviceTypeDeployedUIMap = new ConcurrentHashMap<String, String>();
|
|
||||||
private static final String DEVICEMGT_JAGGERY_APP_PATH = CarbonUtils.getCarbonRepository() + File.separator
|
|
||||||
+ "jaggeryapps" + File.separator + "devicemgt" + File.separator + "app" + File.separator + "units"
|
|
||||||
+ File.separator;
|
|
||||||
|
|
||||||
private static final String UNIT_PREFIX = "cdmf.unit.device.type";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(ConfigurationContext configurationContext) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setDirectory(String s) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setExtension(String s) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
|
|
||||||
if (!deploymentFileData.getFile().isDirectory()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
|
|
||||||
if (tenantDomain != null && !tenantDomain.isEmpty()) {
|
|
||||||
File jaggeryAppPath = new File(
|
|
||||||
DEVICEMGT_JAGGERY_APP_PATH + tenantDomain + "." + deploymentFileData.getName());
|
|
||||||
try {
|
|
||||||
if (!jaggeryAppPath.exists()) {
|
|
||||||
FileUtils.forceMkdir(jaggeryAppPath);
|
|
||||||
FileUtils.copyDirectory(deploymentFileData.getFile(), jaggeryAppPath);
|
|
||||||
File[] listOfFiles = jaggeryAppPath.listFiles();
|
|
||||||
|
|
||||||
for (int i = 0; i < listOfFiles.length; i++) {
|
|
||||||
if (listOfFiles[i].isFile()) {
|
|
||||||
String content = FileUtils.readFileToString(listOfFiles[i]);
|
|
||||||
FileUtils.writeStringToFile(listOfFiles[i], content.replaceAll(UNIT_PREFIX
|
|
||||||
, tenantDomain + "." + UNIT_PREFIX));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.debug("units already exists " + deploymentFileData.getName());
|
|
||||||
}
|
|
||||||
this.deviceTypeDeployedUIMap.put(deploymentFileData.getAbsolutePath(),
|
|
||||||
jaggeryAppPath.getAbsolutePath());
|
|
||||||
} catch (IOException e) {
|
|
||||||
if (jaggeryAppPath.exists()) {
|
|
||||||
try {
|
|
||||||
FileUtils.deleteDirectory(jaggeryAppPath);
|
|
||||||
} catch (IOException e1) {
|
|
||||||
log.error("Failed to delete directory " + jaggeryAppPath.getAbsolutePath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.error("Cannot deploy deviceType ui : " + deploymentFileData.getName(), e);
|
|
||||||
throw new DeploymentException(
|
|
||||||
"Device type ui file " + deploymentFileData.getName() + " is not deployed ", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
log.error("Cannot deploy deviceType ui: " + deploymentFileData.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void undeploy(String filePath) throws DeploymentException {
|
|
||||||
try {
|
|
||||||
String jaggeryUnitPath = this.deviceTypeDeployedUIMap.remove(filePath);
|
|
||||||
FileUtils.deleteDirectory(new File(jaggeryUnitPath));
|
|
||||||
log.info("Device Type units un deployed successfully.");
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new DeploymentException("Failed to remove the units: " + filePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,198 +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.mgt.extensions.device.type.deployer.config;
|
|
||||||
|
|
||||||
import javax.xml.bind.JAXBElement;
|
|
||||||
import javax.xml.bind.annotation.XmlElementDecl;
|
|
||||||
import javax.xml.bind.annotation.XmlRegistry;
|
|
||||||
import javax.xml.namespace.QName;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This object contains factory methods for each
|
|
||||||
* Java content interface and Java element interface
|
|
||||||
* generated in the org.wso2.carbon package.
|
|
||||||
* <p>An ObjectFactory allows you to programatically
|
|
||||||
* construct new instances of the Java representation
|
|
||||||
* for XML content. The Java representation of XML
|
|
||||||
* content can consist of schema derived interfaces
|
|
||||||
* and classes representing the binding of schema
|
|
||||||
* type definitions, element declarations and model
|
|
||||||
* groups. Factory methods for each of these are
|
|
||||||
* provided in this class.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@XmlRegistry
|
|
||||||
public class ObjectFactory {
|
|
||||||
|
|
||||||
private final static QName _DeviceTypeConfiguration_QNAME = new QName("", "DeviceTypeConfiguration");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.wso2.carbon
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public ObjectFactory() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link DeviceTypeConfiguration }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public DeviceTypeConfiguration createDeviceTypeConfiguration() {
|
|
||||||
return new DeviceTypeConfiguration();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Operation }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Operation createOperation() {
|
|
||||||
return new Operation();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Attributes }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Attributes createAttributes() {
|
|
||||||
return new Attributes();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link ProvisioningConfig }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public ProvisioningConfig createProvisioningConfig() {
|
|
||||||
return new ProvisioningConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link TableConfig }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public TableConfig createTableConfig() {
|
|
||||||
return new TableConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Table }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Table createTable() {
|
|
||||||
return new Table();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Property }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Property createProperty() {
|
|
||||||
return new Property();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link JndiConfig }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public JndiConfig createJndiConfig() {
|
|
||||||
return new JndiConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link FormParameters }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public FormParameters createFormParameters() {
|
|
||||||
return new FormParameters();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Features }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Features createFeatures() {
|
|
||||||
return new Features();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link Feature }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Feature createFeature() {
|
|
||||||
return new Feature();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link PushNotificationProvider }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public PushNotificationProvider createPushNotificationProvider() {
|
|
||||||
return new PushNotificationProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link DataSource }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public DataSource createDataSource() {
|
|
||||||
return new DataSource();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link ConfigProperties }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public ConfigProperties createConfigProperties() {
|
|
||||||
return new ConfigProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link License }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public License createLicense() {
|
|
||||||
return new License();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link DeviceDetails }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public DeviceDetails createDeviceDetails() {
|
|
||||||
return new DeviceDetails();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link QueryParameters }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public QueryParameters createQueryParameters() {
|
|
||||||
return new QueryParameters();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of {@link JAXBElement }{@code <}{@link DeviceTypeConfiguration }{@code >}}
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@XmlElementDecl(namespace = "", name = "DeviceTypeConfiguration")
|
|
||||||
public JAXBElement<DeviceTypeConfiguration> createDeviceTypeConfiguration(DeviceTypeConfiguration value) {
|
|
||||||
return new JAXBElement<DeviceTypeConfiguration>(_DeviceTypeConfiguration_QNAME, DeviceTypeConfiguration.class, null, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -28,7 +28,7 @@ import org.wso2.carbon.registry.core.service.RegistryService;
|
|||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @scr.component name="org.wso2.carbon.device.mgt.iot.internal.DeviceTypeManagementServiceComponent"
|
* @scr.component name="org.wso2.carbon.device.mgt.iot.internal.DeviceTypeExtensionServiceComponent"
|
||||||
* immediate="true"
|
* immediate="true"
|
||||||
* @scr.reference name="config.context.service"
|
* @scr.reference name="config.context.service"
|
||||||
* interface="org.wso2.carbon.utils.ConfigurationContextService"
|
* interface="org.wso2.carbon.utils.ConfigurationContextService"
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
package org.wso2.carbon.device.mgt.extensions.device.type.deployer.util;
|
package org.wso2.carbon.device.mgt.extensions.device.type.deployer.util;
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.wso2.carbon.device.mgt.extensions.device.type.deployer.config.exception.DeviceTypeConfigurationException;
|
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException;
|
||||||
|
|
||||||
import javax.xml.XMLConstants;
|
import javax.xml.XMLConstants;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
|||||||
@ -22,9 +22,6 @@ package org.wso2.carbon.device.mgt.extensions.device.type.deployer.util;
|
|||||||
* This holds the constants used for this bundle.
|
* This holds the constants used for this bundle.
|
||||||
*/
|
*/
|
||||||
public class DeviceTypePluginConstants {
|
public class DeviceTypePluginConstants {
|
||||||
public static final String MEDIA_TYPE_XML = "application/xml";
|
|
||||||
public static final String CHARSET_UTF8 = "UTF8";
|
|
||||||
public static final String LANGUAGE_CODE_ENGLISH_US = "en_US";
|
|
||||||
|
|
||||||
public static final String CDMF_UI_TYPE = "devicetype/ui";
|
public static final String CDMF_UI_TYPE = "devicetype/ui";
|
||||||
public static final String CDMF_UI_TYPE_DIR = "devicetypes-ui";
|
public static final String CDMF_UI_TYPE_DIR = "devicetypes-ui";
|
||||||
|
|||||||
@ -1,128 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
<DeviceTypeConfiguration name="samples">
|
|
||||||
|
|
||||||
<DeviceDetails table-id="SAMPLE_DEVICE_1"/>
|
|
||||||
|
|
||||||
<Features>
|
|
||||||
<Feature code="abc">
|
|
||||||
<Name>abc</Name>
|
|
||||||
<Description>this is a feature</Description>
|
|
||||||
<Operation context="/bulb/{state}" method="PUT" type="application/json">
|
|
||||||
<QueryParameters>
|
|
||||||
<Parameter>deviceId</Parameter>
|
|
||||||
</QueryParameters>
|
|
||||||
<FormParameters>
|
|
||||||
<Parameter>test</Parameter>
|
|
||||||
</FormParameters>
|
|
||||||
</Operation>
|
|
||||||
</Feature>
|
|
||||||
</Features>
|
|
||||||
|
|
||||||
<Claimable enabled="true"/>
|
|
||||||
|
|
||||||
<Sensors table-id="SAMPLE_DEVICE_2">
|
|
||||||
<Sensor code="CPU_Temperature">
|
|
||||||
<Name>temperature sensor fitted</Name>
|
|
||||||
<StreamDefinition>org.wso2.temperature.stream</StreamDefinition>
|
|
||||||
<Description>this is a sensor</Description>
|
|
||||||
<SensorStaticProperties>
|
|
||||||
<Property name="unit">celcius</Property>
|
|
||||||
<Property name="model_number">atmeggga11234</Property>
|
|
||||||
</SensorStaticProperties>
|
|
||||||
</Sensor>
|
|
||||||
<Sensor code="DHT11_Temperature">
|
|
||||||
<Name>temperature sensor fitted</Name>
|
|
||||||
<StreamDefinition>org.wso2.temperature.stream</StreamDefinition>
|
|
||||||
<Description>this is a sensor</Description>
|
|
||||||
<SensorStaticProperties>
|
|
||||||
<Property name="unit">celcius</Property>
|
|
||||||
</SensorStaticProperties>
|
|
||||||
<SensorDynamicProperties>
|
|
||||||
<Property name="model_number"/>
|
|
||||||
</SensorDynamicProperties>
|
|
||||||
</Sensor>
|
|
||||||
</Sensors>
|
|
||||||
|
|
||||||
<ProvisioningConfig>
|
|
||||||
<SharedWithAllTenants>false</SharedWithAllTenants>
|
|
||||||
</ProvisioningConfig>
|
|
||||||
|
|
||||||
<DeviceAuthorizationConfig>
|
|
||||||
<authorizationRequired>true</authorizationRequired>
|
|
||||||
</DeviceAuthorizationConfig>
|
|
||||||
|
|
||||||
<PushNotificationProvider type="MQTT">
|
|
||||||
<FileBasedProperties>true</FileBasedProperties>
|
|
||||||
<!--if file based properties is set to false then the configuration will be picked from platform configuration-->
|
|
||||||
<ConfigProperties>
|
|
||||||
<Property Name="mqttAdapterName">sample.mqtt.adapter</Property>
|
|
||||||
<Property Name="url">tcp://localhost:1883</Property>
|
|
||||||
<Property Name="username">admin</Property>
|
|
||||||
<Property Name="password">admin</Property>
|
|
||||||
<Property Name="qos">0</Property>
|
|
||||||
<Property Name="scopes"/>
|
|
||||||
<Property Name="clearSession">true</Property>
|
|
||||||
</ConfigProperties>
|
|
||||||
</PushNotificationProvider>
|
|
||||||
|
|
||||||
<PolicyMonitoring enabled="true"/>
|
|
||||||
|
|
||||||
<License>
|
|
||||||
<Language>en_US</Language>
|
|
||||||
<Version>1.0.0</Version>
|
|
||||||
<Text>This is license text</Text>
|
|
||||||
</License>
|
|
||||||
|
|
||||||
<TaskConfiguration>
|
|
||||||
<Enable>true</Enable>
|
|
||||||
<Frequency>600000</Frequency>
|
|
||||||
<Operations>
|
|
||||||
<Operation>
|
|
||||||
<Name>DEVICE_INFO</Name>
|
|
||||||
<RecurrentTimes>1</RecurrentTimes>
|
|
||||||
</Operation>
|
|
||||||
<Operation>
|
|
||||||
<Name>APPLICATION_LIST</Name>
|
|
||||||
<RecurrentTimes>5</RecurrentTimes>
|
|
||||||
</Operation>
|
|
||||||
<Operation>
|
|
||||||
<Name>DEVICE_LOCATION</Name>
|
|
||||||
<RecurrentTimes>1</RecurrentTimes>
|
|
||||||
</Operation>
|
|
||||||
</Operations>
|
|
||||||
</TaskConfiguration>
|
|
||||||
|
|
||||||
<DataSource>
|
|
||||||
<jndiConfig>
|
|
||||||
<name>jdbc/SampleDM_DB</name>
|
|
||||||
</jndiConfig>
|
|
||||||
<tableConfig>
|
|
||||||
<Table name="SAMPLE_DEVICE_1">
|
|
||||||
<PrimaryKey>SAMPLE_DEVICE_ID</PrimaryKey>
|
|
||||||
<Attributes>
|
|
||||||
<Attribute>column1</Attribute>
|
|
||||||
<Attribute>column2</Attribute>
|
|
||||||
</Attributes>
|
|
||||||
</Table>
|
|
||||||
</tableConfig>
|
|
||||||
</DataSource>
|
|
||||||
|
|
||||||
</DeviceTypeConfiguration>
|
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.extensions.pull.notification</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
<name>WSO2 Carbon - Pull Notification Provider Implementation</name>
|
||||||
|
<description>WSO2 Carbon - Pull Notification Provider Implementation</description>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
|
<artifactId>org.eclipse.osgi</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
|
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
|
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
||||||
|
<Bundle-Description>Pull Notification Provider Bundle</Bundle-Description>
|
||||||
|
<Export-Package>
|
||||||
|
!org.wso2.carbon.device.mgt.extensions.pull.notification.internal,
|
||||||
|
org.wso2.carbon.device.mgt.extensions.pull.notification.*
|
||||||
|
</Export-Package>
|
||||||
|
<Import-Package>
|
||||||
|
org.osgi.framework,
|
||||||
|
org.osgi.service.component,
|
||||||
|
org.apache.commons.logging,
|
||||||
|
org.wso2.carbon.device.mgt.common.*,
|
||||||
|
org.wso2.carbon.device.mgt.core.service
|
||||||
|
org.wso2.carbon.policy.mgt.core.*,
|
||||||
|
org.wso2.carbon.policy.mgt.core,
|
||||||
|
com.google.gson,
|
||||||
|
org.wso2.carbon.device.mgt.core.service.*
|
||||||
|
</Import-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.extensions.pull.notification;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
|
||||||
|
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationExecutionFailedException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
|
||||||
|
import org.wso2.carbon.device.mgt.extensions.pull.notification.internal.PullNotificationDataHolder;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PullNotificationSubscriberImpl implements PullNotificationSubscriber {
|
||||||
|
|
||||||
|
public final class OperationCodes {
|
||||||
|
private OperationCodes() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
public static final String POLICY_MONITOR = "POLICY_MONITOR";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(PullNotificationSubscriberImpl.class);
|
||||||
|
|
||||||
|
public void init(Map<String, String> properties) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(DeviceIdentifier deviceIdentifier, Operation operation) throws PullNotificationExecutionFailedException {
|
||||||
|
try {
|
||||||
|
if (!Operation.Status.ERROR.equals(operation.getStatus()) && operation.getCode() != null &&
|
||||||
|
OperationCodes.POLICY_MONITOR.equals(operation.getCode())) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.info("Received compliance status from POLICY_MONITOR operation ID: " + operation.getId());
|
||||||
|
}
|
||||||
|
List<ComplianceFeature> features = getComplianceFeatures(operation.getPayLoad());
|
||||||
|
PullNotificationDataHolder.getInstance().getPolicyManagerService()
|
||||||
|
.checkCompliance(deviceIdentifier, features);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
PullNotificationDataHolder.getInstance().getDeviceManagementProviderService().updateOperation(
|
||||||
|
deviceIdentifier, operation);
|
||||||
|
}
|
||||||
|
} catch (OperationManagementException e) {
|
||||||
|
throw new PullNotificationExecutionFailedException(e);
|
||||||
|
} catch (PolicyComplianceException e) {
|
||||||
|
throw new PullNotificationExecutionFailedException("Invalid payload format compliant feature", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clean() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<ComplianceFeature> getComplianceFeatures(Object compliancePayload) throws
|
||||||
|
PolicyComplianceException {
|
||||||
|
String compliancePayloadString = new Gson().toJson(compliancePayload);
|
||||||
|
if (compliancePayload == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// Parsing json string to get compliance features.
|
||||||
|
JsonElement jsonElement = new JsonParser().parse(compliancePayloadString);
|
||||||
|
JsonArray jsonArray = jsonElement.getAsJsonArray();
|
||||||
|
Gson gson = new Gson();
|
||||||
|
ComplianceFeature complianceFeature;
|
||||||
|
List<ComplianceFeature> complianceFeatures = new ArrayList<ComplianceFeature>(jsonArray.size());
|
||||||
|
|
||||||
|
for (JsonElement element : jsonArray) {
|
||||||
|
complianceFeature = gson.fromJson(element, ComplianceFeature.class);
|
||||||
|
complianceFeatures.add(complianceFeature);
|
||||||
|
}
|
||||||
|
return complianceFeatures;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.extensions.pull.notification.internal;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||||
|
|
||||||
|
public class PullNotificationDataHolder {
|
||||||
|
|
||||||
|
private DeviceManagementProviderService deviceManagementProviderService;
|
||||||
|
private PolicyManagerService policyManagerService;
|
||||||
|
|
||||||
|
private static PullNotificationDataHolder thisInstance = new PullNotificationDataHolder();
|
||||||
|
|
||||||
|
public static PullNotificationDataHolder getInstance() {
|
||||||
|
return thisInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeviceManagementProviderService getDeviceManagementProviderService() {
|
||||||
|
return deviceManagementProviderService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||||
|
this.deviceManagementProviderService = deviceManagementProviderService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PolicyManagerService getPolicyManagerService() {
|
||||||
|
return policyManagerService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPolicyManagerService(PolicyManagerService policyManagerService) {
|
||||||
|
this.policyManagerService = policyManagerService;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.extensions.pull.notification.internal;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.device.mgt.extensions.pull.notification.internal.PullNotificationServiceComponent" immediate="true"
|
||||||
|
* @scr.reference name="carbon.device.mgt.provider"
|
||||||
|
* interface="org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService"
|
||||||
|
* cardinality="1..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setDeviceManagementProviderService"
|
||||||
|
* unbind="unsetDeviceManagementProviderService"
|
||||||
|
* @scr.reference name="org.wso2.carbon.policy.mgt.core"
|
||||||
|
* interface="org.wso2.carbon.policy.mgt.core.PolicyManagerService"
|
||||||
|
* cardinality="1..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setPolicyManagerService"
|
||||||
|
* unbind="unsetPolicyManagerService"
|
||||||
|
*/
|
||||||
|
public class PullNotificationServiceComponent {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(PullNotificationServiceComponent.class);
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
protected void activate(ComponentContext componentContext) {
|
||||||
|
try {
|
||||||
|
//Do nothing
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("pull notification provider implementation bundle has been successfully " +
|
||||||
|
"initialized");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Error occurred while initializing pull notification provider " +
|
||||||
|
"implementation bundle", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deactivate(ComponentContext componentContext) {
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||||
|
PullNotificationDataHolder.getInstance().setDeviceManagementProviderService(deviceManagementProviderService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unsetDeviceManagementProviderService(DeviceManagementProviderService deviceManagementProviderService) {
|
||||||
|
PullNotificationDataHolder.getInstance().setDeviceManagementProviderService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setPolicyManagerService(PolicyManagerService policyManagerService) {
|
||||||
|
PullNotificationDataHolder.getInstance().setPolicyManagerService(policyManagerService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unsetPolicyManagerService(PolicyManagerService policyManagerService) {
|
||||||
|
PullNotificationDataHolder.getInstance().setPolicyManagerService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -57,7 +57,7 @@ public class FCMNotificationStrategy implements NotificationStrategy {
|
|||||||
public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException {
|
public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException {
|
||||||
try {
|
try {
|
||||||
Device device =
|
Device device =
|
||||||
FCMDataHolder.getInstance().getDeviceManagementProviderService().getDevice(ctx.getDeviceId());
|
FCMDataHolder.getInstance().getDeviceManagementProviderService().getDeviceWithTypeProperties(ctx.getDeviceId());
|
||||||
this.sendWakeUpCall(ctx.getOperation().getCode(), device);
|
this.sendWakeUpCall(ctx.getOperation().getCode(), device);
|
||||||
} catch (DeviceManagementException e) {
|
} catch (DeviceManagementException e) {
|
||||||
throw new PushNotificationExecutionFailedException("Error occurred while retrieving device information", e);
|
throw new PushNotificationExecutionFailedException("Error occurred while retrieving device information", e);
|
||||||
|
|||||||
@ -1,87 +1,71 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
~
|
~
|
||||||
~ WSO2 Inc. licenses this file to you under the Apache License,
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
~ Version 2.0 (the "License"); you may not use this file except
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
~ in compliance with the License.
|
~ in compliance with the License.
|
||||||
~ you may obtain a copy of the License at
|
~ You may obtain a copy of the License at
|
||||||
~
|
~
|
||||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
~
|
~
|
||||||
~ Unless required by applicable law or agreed to in writing,
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
~ software distributed under the License is distributed on an
|
~ software distributed under the License is distributed on an
|
||||||
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
~ KIND, either express or implied. See the License for the
|
~ KIND, either express or implied. See the License for the
|
||||||
~ specific language governing permissions and limitations
|
~ specific language governing permissions and limitations
|
||||||
~ under the License.
|
~ under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>dynamic-client-registration</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.dynamic.client.web.app.registration</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.http</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Dynamic client web app registration</name>
|
<name>WSO2 Carbon - HTTP Based Push Notification Provider Implementation</name>
|
||||||
<description>WSO2 Carbon - Dynamic Client Web-app Registration Service</description>
|
<description>WSO2 Carbon - HTTP Based Push Notification Provider Implementation</description>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-scr-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-bundle-plugin</artifactId>
|
|
||||||
<version>1.4.0</version>
|
|
||||||
<extensions>true</extensions>
|
|
||||||
<configuration>
|
|
||||||
<instructions>
|
|
||||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
|
||||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
|
||||||
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
|
||||||
<Bundle-Description>Dynamic Client Web App Registration Bundle</Bundle-Description>
|
|
||||||
<Private-Package>org.wso2.carbon.dynamic.client.web.app.registration.internal</Private-Package>
|
|
||||||
<Export-Package>
|
|
||||||
!org.wso2.carbon.dynamic.client.web.app.registration.internal,
|
|
||||||
org.wso2.carbon.dynamic.client.web.app.registration.*
|
|
||||||
</Export-Package>
|
|
||||||
<Import-Package>
|
|
||||||
javax.xml.bind.*,
|
|
||||||
com.google.*,
|
|
||||||
javax.net.ssl,
|
|
||||||
javax.servlet,
|
|
||||||
org.apache.axis2.context,
|
|
||||||
org.apache.catalina,
|
|
||||||
org.apache.catalina.core,
|
|
||||||
org.apache.commons.*,
|
|
||||||
org.apache.http,
|
|
||||||
org.apache.http.*,
|
|
||||||
org.osgi.framework,
|
|
||||||
org.osgi.service.component,
|
|
||||||
org.wso2.carbon.context,
|
|
||||||
org.wso2.carbon.core,
|
|
||||||
org.wso2.carbon.core.security,
|
|
||||||
org.wso2.carbon.dynamic.client.*,
|
|
||||||
org.wso2.carbon.registry.*,
|
|
||||||
org.wso2.carbon.user.*,
|
|
||||||
org.wso2.carbon.utils
|
|
||||||
</Import-Package>
|
|
||||||
</instructions>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.governance</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.governance.api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.ws.commons.axiom.wso2</groupId>
|
||||||
|
<artifactId>axiom</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.orbit.org.scannotation</groupId>
|
||||||
|
<artifactId>scannotation</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.osgi</groupId>
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
<artifactId>org.eclipse.osgi</artifactId>
|
<artifactId>org.eclipse.osgi</artifactId>
|
||||||
@ -90,26 +74,6 @@
|
|||||||
<groupId>org.eclipse.osgi</groupId>
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.testng</groupId>
|
|
||||||
<artifactId>testng</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.identity.framework</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.identity.application.mgt</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.identity.inbound.auth.oauth2</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.identity.framework</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.identity.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.tomcat</groupId>
|
<groupId>org.wso2.tomcat</groupId>
|
||||||
<artifactId>tomcat</artifactId>
|
<artifactId>tomcat</artifactId>
|
||||||
@ -119,28 +83,65 @@
|
|||||||
<artifactId>tomcat-servlet-api</artifactId>
|
<artifactId>tomcat-servlet-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
<artifactId>org.wso2.carbon.logging</artifactId>
|
<artifactId>jsr311-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>org.apache.axis2.wso2</groupId>
|
||||||
<artifactId>org.wso2.carbon.user.core</artifactId>
|
<artifactId>axis2</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>commons-lang.wso2</groupId>
|
||||||
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
<artifactId>commons-lang</artifactId>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.dynamic.client.registration</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
|
||||||
<artifactId>httpclient</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.json.wso2</groupId>
|
||||||
|
<artifactId>json</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
||||||
|
<Bundle-Description>MQTT Based Push Notification Provider Bundle</Bundle-Description>
|
||||||
|
<Export-Package>
|
||||||
|
!org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.internal,
|
||||||
|
org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.*
|
||||||
|
</Export-Package>
|
||||||
|
<Import-Package>
|
||||||
|
org.apache.commons.logging,
|
||||||
|
org.osgi.service.component,
|
||||||
|
org.wso2.carbon.context,
|
||||||
|
org.wso2.carbon.device.mgt.common.operation.mgt,
|
||||||
|
org.wso2.carbon.device.mgt.common.push.notification,
|
||||||
|
org.wso2.carbon.device.mgt.common,
|
||||||
|
org.wso2.carbon.device.mgt.core.service,
|
||||||
|
org.osgi.framework,
|
||||||
|
org.wso2.carbon.device.mgt.core.operation.mgt,
|
||||||
|
org.wso2.carbon.core,
|
||||||
|
com.google.gson,
|
||||||
|
org.apache.commons.httpclient.*
|
||||||
|
</Import-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@ -16,24 +16,22 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.extensions.push.notification.provider.http;
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.extensions.device.type.deployer.template.dao;
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationProvider;
|
||||||
|
|
||||||
public class DeviceTypePluginDAOManager {
|
public class HTTPBasedPushNotificationProvider implements PushNotificationProvider {
|
||||||
|
|
||||||
private DeviceTypePluginDAO deviceTypePluginDAO;
|
@Override
|
||||||
private DeviceTypeDAOHandler deviceTypeDAOHandler;
|
public String getType() {
|
||||||
|
return "HTTP";
|
||||||
public DeviceTypePluginDAOManager(String datasourceName, DeviceDAODefinition deviceDAODefinition) {
|
|
||||||
deviceTypeDAOHandler = new DeviceTypeDAOHandler(datasourceName);
|
|
||||||
deviceTypePluginDAO = new DeviceTypePluginDAO(deviceDAODefinition, deviceTypeDAOHandler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeviceTypePluginDAO getDeviceDAO() {
|
@Override
|
||||||
return deviceTypePluginDAO;
|
public NotificationStrategy getNotificationStrategy(PushNotificationConfig config) {
|
||||||
|
return new HTTPNotificationStrategy(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeviceTypeDAOHandler getDeviceTypeDAOHandler() {
|
|
||||||
return deviceTypeDAOHandler;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.extensions.push.notification.provider.http;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.apache.commons.httpclient.HostConfiguration;
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
|
||||||
|
import org.apache.commons.httpclient.methods.PostMethod;
|
||||||
|
import org.apache.commons.httpclient.methods.StringRequestEntity;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.InvalidConfigurationException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
||||||
|
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
public class HTTPMessageExecutor implements Runnable {
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
private String authorizationHeader;
|
||||||
|
private String payload;
|
||||||
|
private HostConfiguration hostConfiguration;
|
||||||
|
private HttpClient httpClient;
|
||||||
|
private static final String APPLIATION_JSON = "application/json";
|
||||||
|
private static final String AUTHORIZATION_HEADER = "Authorization";
|
||||||
|
private static final Log log = LogFactory.getLog(HTTPMessageExecutor.class);
|
||||||
|
|
||||||
|
public HTTPMessageExecutor(NotificationContext notificationContext, String authorizationHeader, String url
|
||||||
|
, HostConfiguration hostConfiguration, HttpClient httpClient) {
|
||||||
|
this.url = url;
|
||||||
|
this.authorizationHeader = authorizationHeader;
|
||||||
|
Gson gson = new Gson();
|
||||||
|
this.payload = gson.toJson(notificationContext);
|
||||||
|
this.hostConfiguration = hostConfiguration;
|
||||||
|
this.httpClient = httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthorizationHeader() {
|
||||||
|
return authorizationHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthorizationHeader(String authorizationHeader) {
|
||||||
|
this.authorizationHeader = authorizationHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPayload() {
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPayload(String payload) {
|
||||||
|
this.payload = payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpClient getHttpClient() {
|
||||||
|
return httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHttpClient(HttpClient httpClient) {
|
||||||
|
this.httpClient = httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
EntityEnclosingMethod method = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
method = new PostMethod(this.getUrl());
|
||||||
|
method.setRequestEntity(new StringRequestEntity(this.getPayload(), APPLIATION_JSON, "UTF-8"));
|
||||||
|
if (authorizationHeader != null && authorizationHeader.isEmpty()) {
|
||||||
|
method.setRequestHeader(AUTHORIZATION_HEADER, authorizationHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getHttpClient().executeMethod(hostConfiguration, method);
|
||||||
|
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
log.error("Push Notification message dropped " + url, e);
|
||||||
|
throw new InvalidConfigurationException("invalid host: url", e);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Push Notification message dropped ", e);
|
||||||
|
throw new InvalidConfigurationException("Push Notification message dropped, " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
if (method != null) {
|
||||||
|
method.releaseConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.extensions.push.notification.provider.http;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.HostConfiguration;
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.InvalidConfigurationException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||||
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationExecutionFailedException;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
|
public class HTTPNotificationStrategy implements NotificationStrategy {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(HTTPNotificationStrategy.class);
|
||||||
|
private final PushNotificationConfig config;
|
||||||
|
private static final String URL_PROPERTY = "url";
|
||||||
|
private static final String AUTHORIZATION_HEADER_PROPERTY = "authorization";
|
||||||
|
private String endpoint;
|
||||||
|
private static ExecutorService executorService;
|
||||||
|
private HttpClient httpClient = null;
|
||||||
|
private HostConfiguration hostConfiguration;
|
||||||
|
private String authorizationHeaderValue;
|
||||||
|
private String uri;
|
||||||
|
|
||||||
|
public HTTPNotificationStrategy(PushNotificationConfig config) {
|
||||||
|
this.config = config;
|
||||||
|
if (this.config == null) {
|
||||||
|
throw new InvalidConfigurationException("Properties Cannot be found");
|
||||||
|
}
|
||||||
|
endpoint = config.getProperties().get(URL_PROPERTY);
|
||||||
|
if (endpoint == null || endpoint.isEmpty()) {
|
||||||
|
throw new InvalidConfigurationException("Property - 'url' cannot be found");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.uri = endpoint;
|
||||||
|
URL url = new URL(endpoint);
|
||||||
|
hostConfiguration = new HostConfiguration();
|
||||||
|
hostConfiguration.setHost(url.getHost(), url.getPort(), url.getProtocol());
|
||||||
|
this.authorizationHeaderValue = config.getProperties().get(AUTHORIZATION_HEADER_PROPERTY);
|
||||||
|
executorService = Executors.newFixedThreadPool(1);
|
||||||
|
httpClient = new HttpClient();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new InvalidConfigurationException("Property - 'url' is malformed.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException {
|
||||||
|
try {
|
||||||
|
executorService.submit(new HTTPMessageExecutor(ctx, authorizationHeaderValue, uri, hostConfiguration
|
||||||
|
, httpClient));
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
log.error("Failed to publish to external endpoint url: " + endpoint, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NotificationContext buildContext() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void undeploy() {
|
||||||
|
executorService.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PushNotificationConfig getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.extensions.push.notification.provider.http.internal;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.internal.HTTPPushNotificationServiceComponent" immediate="true"
|
||||||
|
*/
|
||||||
|
public class HTTPPushNotificationServiceComponent {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(HTTPPushNotificationServiceComponent.class);
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
protected void activate(ComponentContext componentContext) {
|
||||||
|
try {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Initializing HTTP based push notification provider implementation bundle");
|
||||||
|
}
|
||||||
|
//Do nothing
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("HTTP based push notification provider implementation bundle has been successfully " +
|
||||||
|
"initialized");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Error occurred while initializing HTTP based push notification provider " +
|
||||||
|
"implementation bundle", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -21,8 +21,8 @@ package org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt;
|
|||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
import org.wso2.carbon.device.mgt.common.InvalidConfigurationException;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Profile;
|
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||||
@ -46,36 +46,52 @@ public class MQTTNotificationStrategy implements NotificationStrategy {
|
|||||||
private String mqttAdapterName;
|
private String mqttAdapterName;
|
||||||
private static final Log log = LogFactory.getLog(MQTTNotificationStrategy.class);
|
private static final Log log = LogFactory.getLog(MQTTNotificationStrategy.class);
|
||||||
private final PushNotificationConfig config;
|
private final PushNotificationConfig config;
|
||||||
|
private final String providerTenantDomain;
|
||||||
|
private static final Object lockObj = new Object();
|
||||||
|
|
||||||
public MQTTNotificationStrategy(PushNotificationConfig config) {
|
public MQTTNotificationStrategy(PushNotificationConfig config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
OutputEventAdapterConfiguration adapterConfig = new OutputEventAdapterConfiguration();
|
OutputEventAdapterConfiguration adapterConfig = new OutputEventAdapterConfiguration();
|
||||||
adapterConfig.setType(MQTTAdapterConstants.MQTT_ADAPTER_TYPE);
|
adapterConfig.setType(MQTTAdapterConstants.MQTT_ADAPTER_TYPE);
|
||||||
mqttAdapterName = config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_NAME);
|
|
||||||
adapterConfig.setName(mqttAdapterName);
|
|
||||||
adapterConfig.setMessageFormat(MessageType.TEXT);
|
adapterConfig.setMessageFormat(MessageType.TEXT);
|
||||||
|
|
||||||
Map<String, String> configProperties = new HashMap<String, String>();
|
Map<String, String> configProperties = new HashMap<String, String>();
|
||||||
String brokerUrl = config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_BROKER_URL);
|
if (config.getProperties() != null && config.getProperties().size() > 0) {
|
||||||
if (brokerUrl != null && !brokerUrl.isEmpty()) {
|
String brokerUrl = config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_BROKER_URL);
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_BROKER_URL, brokerUrl);
|
if (brokerUrl != null && !brokerUrl.isEmpty()) {
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_BROKER_URL, brokerUrl);
|
||||||
|
}
|
||||||
|
mqttAdapterName = config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_NAME);
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_USERNAME,
|
||||||
|
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_USERNAME));
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_PASSWORD,
|
||||||
|
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_PASSWORD));
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_CLEAR_SESSION,
|
||||||
|
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_CLEAR_SESSION));
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_SCOPES,
|
||||||
|
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_SCOPES));
|
||||||
|
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_MESSAGE_QOS,
|
||||||
|
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_MESSAGE_QOS));
|
||||||
|
} else {
|
||||||
|
mqttAdapterName = "mqtt.adapter." + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain()
|
||||||
|
.toLowerCase();
|
||||||
}
|
}
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_USERNAME,
|
adapterConfig.setName(mqttAdapterName);
|
||||||
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_USERNAME));
|
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_PASSWORD,
|
|
||||||
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_PASSWORD));
|
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_CLEAR_SESSION,
|
|
||||||
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_CLEAR_SESSION));
|
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_SCOPES,
|
|
||||||
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_SCOPES));
|
|
||||||
configProperties.put(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_MESSAGE_QOS,
|
|
||||||
config.getProperty(MQTTAdapterConstants.MQTT_ADAPTER_PROPERTY_MESSAGE_QOS));
|
|
||||||
adapterConfig.setStaticProperties(configProperties);
|
adapterConfig.setStaticProperties(configProperties);
|
||||||
try {
|
try {
|
||||||
MQTTDataHolder.getInstance().getOutputEventAdapterService().create(adapterConfig);
|
synchronized (lockObj) {
|
||||||
|
try {
|
||||||
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().isPolled(mqttAdapterName);
|
||||||
|
} catch (OutputEventAdapterException e) {
|
||||||
|
//event adapter not created
|
||||||
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().create(adapterConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (OutputEventAdapterException e) {
|
} catch (OutputEventAdapterException e) {
|
||||||
throw new InvalidConfigurationException("Error occurred while initializing MQTT output event adapter", e);
|
throw new InvalidConfigurationException("Error occurred while initializing MQTT output event adapter", e);
|
||||||
}
|
}
|
||||||
|
providerTenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain()
|
||||||
|
.toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -85,42 +101,73 @@ public class MQTTNotificationStrategy implements NotificationStrategy {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException {
|
public void execute(NotificationContext ctx) throws PushNotificationExecutionFailedException {
|
||||||
|
String adapterName = mqttAdapterName;
|
||||||
|
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
|
||||||
|
if (!providerTenantDomain.equals(tenantDomain)) {
|
||||||
|
//this is to handle the device type shared with all tenant mode.
|
||||||
|
|
||||||
|
adapterName = "mqtt.adapter." + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain()
|
||||||
|
.toLowerCase();
|
||||||
|
try {
|
||||||
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().isPolled(adapterName);
|
||||||
|
} catch (OutputEventAdapterException e) {
|
||||||
|
//event adapter not created
|
||||||
|
synchronized (lockObj) {
|
||||||
|
OutputEventAdapterConfiguration adapterConfig = new OutputEventAdapterConfiguration();
|
||||||
|
adapterConfig.setType(MQTTAdapterConstants.MQTT_ADAPTER_TYPE);
|
||||||
|
adapterConfig.setMessageFormat(MessageType.TEXT);
|
||||||
|
adapterConfig.setName(adapterName);
|
||||||
|
Map<String, String> configProperties = new HashMap<String, String>();
|
||||||
|
adapterConfig.setStaticProperties(configProperties);
|
||||||
|
try {
|
||||||
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().create(adapterConfig);
|
||||||
|
} catch (OutputEventAdapterException e1) {
|
||||||
|
throw new PushNotificationExecutionFailedException
|
||||||
|
("Error occurred while initializing MQTT output event adapter for shared tenant: "
|
||||||
|
+ tenantDomain, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Operation operation = ctx.getOperation();
|
Operation operation = ctx.getOperation();
|
||||||
Properties properties = operation.getProperties();
|
Properties properties = operation.getProperties();
|
||||||
if (properties != null && properties.get(MQTT_ADAPTER_TOPIC) != null) {
|
if (properties != null && properties.get(MQTT_ADAPTER_TOPIC) != null) {
|
||||||
Map<String, String> dynamicProperties = new HashMap<>();
|
Map<String, String> dynamicProperties = new HashMap<>();
|
||||||
dynamicProperties.put("topic", (String) properties.get(MQTT_ADAPTER_TOPIC));
|
dynamicProperties.put("topic", (String) properties.get(MQTT_ADAPTER_TOPIC));
|
||||||
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(mqttAdapterName, dynamicProperties,
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(adapterName, dynamicProperties,
|
||||||
operation.getPayLoad());
|
operation.getPayLoad());
|
||||||
} else {
|
} else {
|
||||||
if (PolicyOperation.POLICY_OPERATION_CODE.equals(operation.getCode())) {
|
if (PolicyOperation.POLICY_OPERATION_CODE.equals(operation.getCode())) {
|
||||||
PolicyOperation policyOperation = (PolicyOperation) operation;
|
PolicyOperation policyOperation = (PolicyOperation) operation;
|
||||||
List<ProfileOperation> profileOperations = policyOperation.getProfileOperations();
|
List<ProfileOperation> profileOperations = policyOperation.getProfileOperations();
|
||||||
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
|
|
||||||
String deviceType = ctx.getDeviceId().getType();
|
String deviceType = ctx.getDeviceId().getType();
|
||||||
String deviceId = ctx.getDeviceId().getId();
|
String deviceId = ctx.getDeviceId().getId();
|
||||||
for (ProfileOperation profileOperation : profileOperations) {
|
for (ProfileOperation profileOperation : profileOperations) {
|
||||||
Map<String, String> dynamicProperties = new HashMap<>();
|
Map<String, String> dynamicProperties = new HashMap<>();
|
||||||
String topic = tenantDomain + "/"
|
String topic = tenantDomain + "/"
|
||||||
+ deviceType + "/" + deviceId + "/" + profileOperation.getType()
|
+ deviceType + "/" + deviceId + "/operation/" + profileOperation.getType()
|
||||||
.toString().toLowerCase() + "/" + profileOperation.getCode().toLowerCase();
|
.toString().toLowerCase() + "/" + profileOperation.getCode().toLowerCase();
|
||||||
dynamicProperties.put("topic", topic);
|
dynamicProperties.put("topic", topic);
|
||||||
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(mqttAdapterName, dynamicProperties,
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(adapterName, dynamicProperties,
|
||||||
profileOperation.getPayLoad());
|
profileOperation.getPayLoad());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Map<String, String> dynamicProperties = new HashMap<>();
|
Map<String, String> dynamicProperties = new HashMap<>();
|
||||||
String topic = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + "/"
|
String topic = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + "/"
|
||||||
+ ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/" + operation.getType()
|
+ ctx.getDeviceId().getType() + "/" + ctx.getDeviceId().getId() + "/operation/"
|
||||||
.toString().toLowerCase() + "/" + operation.getCode();
|
+ operation.getType().toString().toLowerCase() + "/" + operation.getCode() + "/" + operation.getId();
|
||||||
dynamicProperties.put("topic", topic);
|
dynamicProperties.put("topic", topic);
|
||||||
if (operation.getPayLoad() == null) {
|
Object payload;
|
||||||
operation.setPayLoad("");
|
if ("command".equals(operation.getType().toString().toLowerCase())) {
|
||||||
|
payload = operation.getCode();
|
||||||
|
} else {
|
||||||
|
payload = operation.getPayLoad();
|
||||||
}
|
}
|
||||||
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(mqttAdapterName, dynamicProperties,
|
MQTTDataHolder.getInstance().getOutputEventAdapterService().publish(adapterName, dynamicProperties,
|
||||||
operation.getPayLoad());
|
payload);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.InvalidConfigurationException;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -34,10 +34,12 @@
|
|||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.http</module>
|
||||||
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm</module>
|
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm</module>
|
||||||
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt</module>
|
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt</module>
|
||||||
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp</module>
|
<module>org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp</module>
|
||||||
<module>org.wso2.carbon.device.mgt.extensions.device.type.deployer</module>
|
<module>org.wso2.carbon.device.mgt.extensions.device.type.deployer</module>
|
||||||
|
<module>org.wso2.carbon.device.mgt.extensions.pull.notification</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -66,10 +66,6 @@
|
|||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>org.wso2.carbon</groupId>
|
||||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
<artifactId>org.wso2.carbon.databridge.agent</artifactId>
|
<artifactId>org.wso2.carbon.databridge.agent</artifactId>
|
||||||
@ -118,6 +114,7 @@
|
|||||||
org.osgi.framework,
|
org.osgi.framework,
|
||||||
org.osgi.service.component,
|
org.osgi.service.component,
|
||||||
org.apache.commons.logging.*,
|
org.apache.commons.logging.*,
|
||||||
|
org.wso2.carbon.utils.multitenancy,
|
||||||
org.wso2.carbon.context;version="${carbon.kernel.version.range}",
|
org.wso2.carbon.context;version="${carbon.kernel.version.range}",
|
||||||
org.wso2.carbon.utils;version="${carbon.kernel.version.range}",
|
org.wso2.carbon.utils;version="${carbon.kernel.version.range}",
|
||||||
org.wso2.carbon.databridge.*;version="${carbon.analytics.common.version.range}",
|
org.wso2.carbon.databridge.*;version="${carbon.analytics.common.version.range}",
|
||||||
@ -126,9 +123,10 @@
|
|||||||
org.wso2.carbon.registry.indexing.*; version="${carbon.registry.imp.pkg.version.range}",
|
org.wso2.carbon.registry.indexing.*; version="${carbon.registry.imp.pkg.version.range}",
|
||||||
org.json;version="${commons-json.version}",
|
org.json;version="${commons-json.version}",
|
||||||
javax.xml.*,
|
javax.xml.*,
|
||||||
javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional,
|
javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional,
|
||||||
org.w3c.dom,
|
org.w3c.dom,
|
||||||
org.wso2.carbon.base
|
org.wso2.carbon.base,
|
||||||
|
org.wso2.carbon.utils.multitenancy
|
||||||
</Import-Package>
|
</Import-Package>
|
||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|||||||
@ -21,10 +21,12 @@ package org.wso2.carbon.device.mgt.analytics.data.publisher.service;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
import org.wso2.carbon.databridge.agent.DataPublisher;
|
import org.wso2.carbon.databridge.agent.DataPublisher;
|
||||||
import org.wso2.carbon.databridge.commons.utils.DataBridgeCommonsUtils;
|
import org.wso2.carbon.databridge.commons.utils.DataBridgeCommonsUtils;
|
||||||
import org.wso2.carbon.device.mgt.analytics.data.publisher.DeviceDataPublisher;
|
import org.wso2.carbon.device.mgt.analytics.data.publisher.DeviceDataPublisher;
|
||||||
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
|
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
|
||||||
|
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the implementation of Osgi Service which can be used to publish and retireved
|
* This is the implementation of Osgi Service which can be used to publish and retireved
|
||||||
@ -39,23 +41,37 @@ public class EventsPublisherServiceImpl implements EventsPublisherService {
|
|||||||
* @param metaDataArray - meta data that needs to pushed
|
* @param metaDataArray - meta data that needs to pushed
|
||||||
* @param correlationDataArray - correlation data that needs to be pushed
|
* @param correlationDataArray - correlation data that needs to be pushed
|
||||||
* @param payloadDataArray - payload data that needs to be pushed
|
* @param payloadDataArray - payload data that needs to be pushed
|
||||||
* @return
|
* @return if success returns true
|
||||||
* @throws DataPublisherConfigurationException
|
* @throws DataPublisherConfigurationException
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean publishEvent(String streamName, String version, Object[] metaDataArray,
|
public boolean publishEvent(String streamName, String version, Object[] metaDataArray,
|
||||||
Object[] correlationDataArray,
|
Object[] correlationDataArray,
|
||||||
Object[] payloadDataArray) throws DataPublisherConfigurationException {
|
Object[] payloadDataArray) throws DataPublisherConfigurationException {
|
||||||
DataPublisher dataPublisher = DeviceDataPublisher.getInstance().getDataPublisher();
|
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
||||||
if (dataPublisher != null) {
|
if (!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
|
||||||
String streamId = DataBridgeCommonsUtils.generateStreamId(streamName, version);
|
if (metaDataArray == null || metaDataArray.length == 0) {
|
||||||
return dataPublisher.tryPublish(streamId, System.currentTimeMillis(), metaDataArray, correlationDataArray,
|
throw new DataPublisherConfigurationException("meta data[0] should have the device Id field");
|
||||||
payloadDataArray);
|
} else {
|
||||||
} else {
|
metaDataArray[0] = tenantDomain + "@" + metaDataArray[0];
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PrivilegedCarbonContext.startTenantFlow();
|
||||||
|
PrivilegedCarbonContext.getThreadLocalCarbonContext()
|
||||||
|
.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, true);
|
||||||
|
try {
|
||||||
|
DataPublisher dataPublisher = DeviceDataPublisher.getInstance().getDataPublisher();
|
||||||
|
if (dataPublisher != null) {
|
||||||
|
String streamId = DataBridgeCommonsUtils.generateStreamId(streamName, version);
|
||||||
|
return dataPublisher.tryPublish(streamId, System.currentTimeMillis(), metaDataArray,
|
||||||
|
correlationDataArray,
|
||||||
|
payloadDataArray);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
PrivilegedCarbonContext.endTenantFlow();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>2.0.63-SNAPSHOT</version>
|
<version>3.0.46-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -38,8 +38,8 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.7</source>
|
<source>1.8</source>
|
||||||
<target>1.7</target>
|
<target>1.8</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
@ -167,6 +167,16 @@
|
|||||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.extensions</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||||
@ -280,34 +290,78 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.ws.rs</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
<artifactId>javax.ws.rs-api</artifactId>
|
<artifactId>javax.ws.rs-api</artifactId>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.event.receiver.stub</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.event.stream.stub</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.commons</groupId>
|
<groupId>org.wso2.carbon.commons</groupId>
|
||||||
<artifactId>org.wso2.carbon.application.mgt.stub</artifactId>
|
<artifactId>org.wso2.carbon.application.mgt.stub</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.analytics.api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.analytics.datasource.commons</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
|
<artifactId>org.wso2.carbon.identity.jwt.client.extension</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.resource</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.identity.framework</groupId>
|
<groupId>org.wso2.carbon.identity.framework</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.user.store.count</artifactId>
|
<artifactId>org.wso2.carbon.identity.user.store.count</artifactId>
|
||||||
<version>${carbon.identity.framework.version}</version>
|
<version>${carbon.identity.framework.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.analytics.datasource.commons</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.analytics.api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.analytics.dataservice.commons</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.receiver.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.stream.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.publisher.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.stream.persistence.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.jaxrs.beans;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ApiModel(value = "OperationRequest", description = "Operation details together with deviceIdentifier")
|
||||||
|
public class OperationRequest {
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "deviceIdentifiers", value = "list of devices that needs to be verified against the user", required = true)
|
||||||
|
List<String> deviceIdentifiers;
|
||||||
|
@ApiModelProperty(name = "operation", value = "operation data", required = false)
|
||||||
|
Operation operation;
|
||||||
|
|
||||||
|
public List<String> getDeviceIdentifiers() {
|
||||||
|
return deviceIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceIdentifiers(List<String> deviceIdentifiers) {
|
||||||
|
this.deviceIdentifiers = deviceIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Operation getOperation() {
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperation(Operation operation) {
|
||||||
|
this.operation = operation;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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.device.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hold the attribute definition.
|
||||||
|
*/
|
||||||
|
public class Attribute {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Event Attribute Name")
|
||||||
|
@JsonProperty("name")
|
||||||
|
private String name;
|
||||||
|
@ApiModelProperty(value = "Event Attribute Type")
|
||||||
|
@JsonProperty("type")
|
||||||
|
private AttributeType type;
|
||||||
|
|
||||||
|
public Attribute() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Attribute(String name, AttributeType attributeType) {
|
||||||
|
this.name = name;
|
||||||
|
this.type = attributeType;
|
||||||
|
}
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AttributeType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(AttributeType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hold the definition of the attribute type for the attributes.
|
||||||
|
*/
|
||||||
|
public enum AttributeType {
|
||||||
|
STRING, LONG, BOOL, INT, FLOAT, DOUBLE;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString().toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hold stats data record
|
||||||
|
*/
|
||||||
|
public class DeviceTypeEvent {
|
||||||
|
|
||||||
|
private EventAttributeList eventAttributes;
|
||||||
|
private TransportType transport;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Attributes related to device type event")
|
||||||
|
@JsonProperty("eventAttributes")
|
||||||
|
public EventAttributeList getEventAttributeList() {
|
||||||
|
return eventAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventAttributeList(
|
||||||
|
EventAttributeList eventAttributes) {
|
||||||
|
this.eventAttributes = eventAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Transport to be used for device to server communication.")
|
||||||
|
@JsonProperty("transport")
|
||||||
|
public TransportType getTransportType() {
|
||||||
|
return transport;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTransportType(TransportType transport) {
|
||||||
|
this.transport = transport;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.BasePaginatedResult;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This holds event attributes
|
||||||
|
*/
|
||||||
|
public class EventAttributeList {
|
||||||
|
|
||||||
|
private List<Attribute> attributes = new ArrayList<>();
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "List of Event Attributes")
|
||||||
|
@JsonProperty("attributes")
|
||||||
|
public List<Attribute> getList() {
|
||||||
|
return attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setList(List<Attribute> attributes) {
|
||||||
|
this.attributes = attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.wso2.carbon.analytics.datasource.commons.Record;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.BasePaginatedResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hold stats data record
|
||||||
|
*/
|
||||||
|
public class EventRecords extends BasePaginatedResult {
|
||||||
|
|
||||||
|
private List<Record> records = new ArrayList<>();
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "List of records returned")
|
||||||
|
@JsonProperty("records")
|
||||||
|
public List<Record> getRecord() {
|
||||||
|
return records;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setList(List<Record> records) {
|
||||||
|
this.records = records;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("{\n");
|
||||||
|
|
||||||
|
sb.append(" count: ").append(getCount()).append(",\n");
|
||||||
|
sb.append(" records: [").append(records).append("\n");
|
||||||
|
sb.append("]}\n");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.beans.analytics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hold the default transport types support by the server.
|
||||||
|
*/
|
||||||
|
public enum TransportType {
|
||||||
|
HTTP, MQTT;
|
||||||
|
}
|
||||||
|
|
||||||
@ -140,6 +140,93 @@ public interface ActivityInfoProviderService {
|
|||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince);
|
@HeaderParam("If-Modified-Since") String ifModifiedSince);
|
||||||
|
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{id}/{devicetype}/{deviceid}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Getting Details of an Activity for a specific device",
|
||||||
|
notes = "Retrieve the details of a specific activity/operation, such as the meta information of " +
|
||||||
|
"an operation, including the responses from a given device",
|
||||||
|
tags = "Activity Info Provider",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:get-activity")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched the activity details.",
|
||||||
|
response = Activity.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. \n Empty body because the client already has the latest version of " +
|
||||||
|
"the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 401,
|
||||||
|
message = "Unauthorized. \n Unauthorized request."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No activity found with the given ID.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the activity data.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getActivityByDevice(
|
||||||
|
@ApiParam(
|
||||||
|
name = "id",
|
||||||
|
value = "Activity id of the operation/activity.",
|
||||||
|
required = true,
|
||||||
|
defaultValue = "ACTIVITY_1")
|
||||||
|
@PathParam("id")
|
||||||
|
@Size(max = 45)
|
||||||
|
String id,
|
||||||
|
@ApiParam(
|
||||||
|
name = "devicetype",
|
||||||
|
value = "The device type name, such as ios, android, windows or fire-alarm.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("devicetype")
|
||||||
|
@Size(max = 45)
|
||||||
|
String type,
|
||||||
|
@ApiParam(
|
||||||
|
name = "deviceid",
|
||||||
|
value = "The device identifier of the device you want ot get details.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("deviceid")
|
||||||
|
@Size(max = 45)
|
||||||
|
String deviceid,
|
||||||
|
@ApiParam(
|
||||||
|
name = "If-Modified-Since",
|
||||||
|
value = "Checks if the requested variant was modified, since the specified date-time\n." +
|
||||||
|
"Provide the value in the Java Date Format: EEE, d MMM yyyy HH:mm:ss Z\n." +
|
||||||
|
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
|
||||||
|
required = false)
|
||||||
|
@HeaderParam("If-Modified-Since") String ifModifiedSince);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
|||||||
@ -0,0 +1,608 @@
|
|||||||
|
/*
|
||||||
|
* 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.mgt.jaxrs.service.api;
|
||||||
|
|
||||||
|
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.ResponseHeader;
|
||||||
|
import io.swagger.annotations.SwaggerDefinition;
|
||||||
|
import io.swagger.annotations.Tag;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "DeviceAgent Service"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/device/agent"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "device_agent, device_management", description = "")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Api(value = "Device Agent", description = "Device Agent Service")
|
||||||
|
@Path("/device/agent")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@Scope(
|
||||||
|
name = "Enroll Device",
|
||||||
|
description = "Register a device",
|
||||||
|
key = "perm:device:enroll",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/add"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Modify Device",
|
||||||
|
description = "Modify a device",
|
||||||
|
key = "perm:device:modify",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/modify"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Disenroll Device",
|
||||||
|
description = "Disenroll a device",
|
||||||
|
key = "perm:device:disenroll",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/remove"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Publish Event",
|
||||||
|
description = "publish device event",
|
||||||
|
key = "perm:device:publish-event",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/event"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Getting Device Operation Details",
|
||||||
|
description = "Getting Device Operation Details",
|
||||||
|
key = "perm:device:operations",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/view"}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public interface DeviceAgentService {
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/enroll")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Create a device instance",
|
||||||
|
notes = "Create a device Instance",
|
||||||
|
tags = "Device Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:enroll")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully created a device instance.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest version" +
|
||||||
|
" of the requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n A deviceType with the specified device type was not found.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving the device details.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response enrollDevice(@ApiParam(name = "device", value = "Device object with data.", required = true)
|
||||||
|
@Valid Device device);
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("/enroll/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
httpMethod = "DELETE",
|
||||||
|
value = "Unregistering a Device",
|
||||||
|
notes = "Use this REST API to unregister a device.",
|
||||||
|
tags = "Device Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:disenroll")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully disenrolled the device."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n The specified resource does not exist."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while dis-enrolling the device.")
|
||||||
|
})
|
||||||
|
Response disEnrollDevice(
|
||||||
|
@ApiParam(name = "type", value = "The unique device identifier.") @PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The unique device identifier.") @PathParam("id") String id);
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/enroll/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "PUT",
|
||||||
|
value = "modify device",
|
||||||
|
notes = "modify device",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:modify")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully updated device instance.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest version" +
|
||||||
|
" of the requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n A deviceType with the specified device type was not found.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving the device details.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response updateDevice(@ApiParam(name = "type", value = "The device type, such as ios, android or windows....etc", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId,
|
||||||
|
@ApiParam(name = "device", value = "Device object with data.", required = true)
|
||||||
|
@Valid Device updateDevice);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/events/publish/{type}/{deviceId}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Publishing Events",
|
||||||
|
notes = "Publish events received by the device client to the WSO2 Data Analytics Server (DAS) using this API.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:publish-event")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully published the event",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests.")
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 303,
|
||||||
|
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Location",
|
||||||
|
description = "The Source URL of the document.")}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 415,
|
||||||
|
message = "Unsupported media type. \n The format of the requested entity was not supported."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while publishing events.")
|
||||||
|
})
|
||||||
|
Response publishEvents(
|
||||||
|
@ApiParam(
|
||||||
|
name = "payloadData",
|
||||||
|
value = "Information of the agent event to be published on DAS.")
|
||||||
|
@Valid
|
||||||
|
Map<String, Object> payloadData,
|
||||||
|
@ApiParam(
|
||||||
|
name = "type",
|
||||||
|
value = "name of the device type")
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(
|
||||||
|
name = "deviceId",
|
||||||
|
value = "deviceId of the device")
|
||||||
|
@PathParam("deviceId") String deviceId);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/events/publish/data/{type}/{deviceId}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Publishing Events data only",
|
||||||
|
notes = "Publish events received by the device client to the WSO2 Data Analytics Server (DAS) using this API.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:publish-event")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully published the event",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests.")
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 303,
|
||||||
|
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Location",
|
||||||
|
description = "The Source URL of the document.")}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 415,
|
||||||
|
message = "Unsupported media type. \n The format of the requested entity was not supported."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while publishing events.")
|
||||||
|
})
|
||||||
|
Response publishEvents(
|
||||||
|
@ApiParam(
|
||||||
|
name = "payloadData",
|
||||||
|
value = "Information of the agent event to be published on DAS.")
|
||||||
|
@Valid
|
||||||
|
List<Object> payloadData,
|
||||||
|
@ApiParam(
|
||||||
|
name = "type",
|
||||||
|
value = "name of the device type")
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(
|
||||||
|
name = "deviceId",
|
||||||
|
value = "deviceId of the device")
|
||||||
|
@PathParam("deviceId") String deviceId);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/pending/operations/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Get pending operation of the given device",
|
||||||
|
notes = "Returns the Operations.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:operations")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved the operations.",
|
||||||
|
response = OperationList.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getPendingOperations(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/next-pending/operation/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Get pending operation of the given device",
|
||||||
|
notes = "Returns the Operation.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:operations")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved the operation.",
|
||||||
|
response = Operation.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getNextPendingOperation(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId);
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/operations/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "PUT",
|
||||||
|
value = "Update Operation",
|
||||||
|
notes = "Update the Operations.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:operations")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully updated the operations.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response updateOperation(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId,
|
||||||
|
@ApiParam(name = "operation", value = "Operation object with data.", required = true)
|
||||||
|
@Valid Operation operation);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/status/operations/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Get pending operation of the given device",
|
||||||
|
notes = "Returns the Operations.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:operations")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved the operations.",
|
||||||
|
response = OperationList.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getOperationsByDeviceAndStatus(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId,
|
||||||
|
@ApiParam(name = "status", value = "status of the operation.", required = true)
|
||||||
|
@QueryParam("status")Operation.Status status);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,347 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.jaxrs.service.api;
|
||||||
|
|
||||||
|
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.ResponseHeader;
|
||||||
|
import io.swagger.annotations.SwaggerDefinition;
|
||||||
|
import io.swagger.annotations.Tag;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.DeviceTypeEvent;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.EventAttributeList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.EventRecords;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.TransportType;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.DELETE;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.HeaderParam;
|
||||||
|
import javax.ws.rs.POST;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "DeviceEventManagement"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/events"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "device_management", description = "")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@Scope(
|
||||||
|
name = "Add or Delete Event Definition for device type",
|
||||||
|
description = "Add or Delete Event Definition for device type",
|
||||||
|
key = "perm:device-types:events",
|
||||||
|
permissions = {"/device-mgt/device-type/add"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Get Events Details of a Device Type",
|
||||||
|
description = "Get Events Details of a Device Type",
|
||||||
|
key = "perm:device-types:events:view",
|
||||||
|
permissions = {"/device-mgt/devices/owning-device/view"}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Path("/events")
|
||||||
|
@Api(value = "Device Event Management", description = "This API corresponds to all tasks related to device " +
|
||||||
|
"event management")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
public interface DeviceEventManagementService {
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/{type}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Add Event Type Defnition",
|
||||||
|
notes = "Add the event definition for the device.",
|
||||||
|
tags = "Device Event Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:events")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully added the event defintion.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description =
|
||||||
|
"Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message =
|
||||||
|
"Bad Request. \n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the " +
|
||||||
|
"list of supported device types.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
Response deployDeviceTypeEventDefinition(@ApiParam(name = "type", value = "name of the device type", required = false)
|
||||||
|
@PathParam("type")String deviceType,
|
||||||
|
@ApiParam(name = "deviceTypeEvent", value = "DeviceTypeEvent object with data.", required = true)
|
||||||
|
@Valid DeviceTypeEvent deviceTypeEvent);
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("/{type}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "DELETE",
|
||||||
|
value = "Delete Event Type Defnition",
|
||||||
|
notes = "Delete the event definition for the device.",
|
||||||
|
tags = "Device Event Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:events")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully deleted the event definition.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description =
|
||||||
|
"Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message =
|
||||||
|
"Bad Request. \n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the " +
|
||||||
|
"list of supported device types.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
Response deleteDeviceTypeEventDefinitions(@ApiParam(name = "type", value = "name of the device type", required = false)
|
||||||
|
@PathParam("type")String deviceType);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{type}/{deviceId}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Getting Device Events",
|
||||||
|
notes = "Get the events for the device.",
|
||||||
|
tags = "Device Event Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:events:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched the event definition.",
|
||||||
|
response = EventRecords.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description =
|
||||||
|
"Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message =
|
||||||
|
"Bad Request. \n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the " +
|
||||||
|
"list of supported device types.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
Response getData(@ApiParam(name = "deviceId", value = "id of the device ", required = false)
|
||||||
|
@PathParam("deviceId") String deviceId,
|
||||||
|
@ApiParam(name = "from", value = "unix timestamp to retrieve", required = false)
|
||||||
|
@QueryParam("from") long from,
|
||||||
|
@ApiParam(name = "to", value = "unix time to retrieve", required = false)
|
||||||
|
@QueryParam("to") long to,
|
||||||
|
@ApiParam(name = "type", value = "name of the device type", required = false)
|
||||||
|
@PathParam("type") String deviceType,
|
||||||
|
@ApiParam(name = "offset", value = "offset of the records that needs to be picked up", required = false)
|
||||||
|
@QueryParam("offset") int offset,
|
||||||
|
@ApiParam(name = "limit", value = "limit of the records that needs to be picked up", required = false)
|
||||||
|
@QueryParam("limit") int limit);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("last-known/{type}/{deviceId}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Getting Last Known Device Events",
|
||||||
|
notes = "Get the Last Known events for the device.",
|
||||||
|
tags = "Device Event Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:events:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched the event.",
|
||||||
|
response = EventRecords.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description =
|
||||||
|
"Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message =
|
||||||
|
"Bad Request. \n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the " +
|
||||||
|
"list of supported device types.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
Response getLastKnownData(@ApiParam(name = "deviceId", value = "id of the device ", required = false)
|
||||||
|
@PathParam("deviceId") String deviceId,
|
||||||
|
@ApiParam(name = "type", value = "name of the device type", required = false)
|
||||||
|
@PathParam("type") String deviceType);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{type}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Getting Event Type Defnition",
|
||||||
|
notes = "Get the event definition for the device.",
|
||||||
|
tags = "Device Event Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:events:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched the event defintion.",
|
||||||
|
response = DeviceTypeEvent.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description =
|
||||||
|
"Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message =
|
||||||
|
"Bad Request. \n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the " +
|
||||||
|
"list of supported device types.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
Response getDeviceTypeEventDefinition(@ApiParam(name = "type", value = "name of the device type", required = false)
|
||||||
|
@PathParam("type")String deviceType) ;
|
||||||
|
|
||||||
|
}
|
||||||
@ -32,17 +32,22 @@ import io.swagger.annotations.Tag;
|
|||||||
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||||
import org.wso2.carbon.device.mgt.common.Feature;
|
import org.wso2.carbon.device.mgt.common.Feature;
|
||||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
|
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
|
||||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData;
|
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData;
|
||||||
import org.wso2.carbon.device.mgt.common.search.SearchContext;
|
import org.wso2.carbon.device.mgt.common.search.SearchContext;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceList;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceList;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationRequest;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
@ -56,6 +61,7 @@ import javax.ws.rs.Produces;
|
|||||||
import javax.ws.rs.QueryParam;
|
import javax.ws.rs.QueryParam;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Device related REST-API. This can be used to manipulated device related details.
|
* Device related REST-API. This can be used to manipulated device related details.
|
||||||
@ -221,6 +227,12 @@ public interface DeviceManagementService {
|
|||||||
required = false)
|
required = false)
|
||||||
@QueryParam("user")
|
@QueryParam("user")
|
||||||
String user,
|
String user,
|
||||||
|
@ApiParam(
|
||||||
|
name = "userPattern",
|
||||||
|
value = "The pattern of username of the owner of the device.",
|
||||||
|
required = false)
|
||||||
|
@QueryParam("userPattern")
|
||||||
|
String userPattern,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "role",
|
name = "role",
|
||||||
value = "A role of device owners. Ex : store-admin",
|
value = "A role of device owners. Ex : store-admin",
|
||||||
@ -267,6 +279,13 @@ public interface DeviceManagementService {
|
|||||||
required = false)
|
required = false)
|
||||||
@HeaderParam("If-Modified-Since")
|
@HeaderParam("If-Modified-Since")
|
||||||
String timestamp,
|
String timestamp,
|
||||||
|
@ApiParam(
|
||||||
|
name = "requireDeviceInfo",
|
||||||
|
value = "Boolean flag indicating whether to include device-info (location, application list etc) \n" +
|
||||||
|
" to the device object.",
|
||||||
|
required = false)
|
||||||
|
@QueryParam("requireDeviceInfo")
|
||||||
|
boolean requireDeviceInfo,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "offset",
|
name = "offset",
|
||||||
value = "The starting pagination index for the complete list of qualified items.",
|
value = "The starting pagination index for the complete list of qualified items.",
|
||||||
@ -333,6 +352,13 @@ public interface DeviceManagementService {
|
|||||||
})
|
})
|
||||||
@Path("/user-devices")
|
@Path("/user-devices")
|
||||||
Response getDeviceByUser(
|
Response getDeviceByUser(
|
||||||
|
@ApiParam(
|
||||||
|
name = "requireDeviceInfo",
|
||||||
|
value = "Boolean flag indicating whether to include device-info (location, application list etc) \n" +
|
||||||
|
" to the device object.",
|
||||||
|
required = false)
|
||||||
|
@QueryParam("requireDeviceInfo")
|
||||||
|
boolean requireDeviceInfo,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "offset",
|
name = "offset",
|
||||||
value = "The starting pagination index for the complete list of qualified items.",
|
value = "The starting pagination index for the complete list of qualified items.",
|
||||||
@ -423,6 +449,60 @@ public interface DeviceManagementService {
|
|||||||
@HeaderParam("If-Modified-Since")
|
@HeaderParam("If-Modified-Since")
|
||||||
String ifModifiedSince);
|
String ifModifiedSince);
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Get device enrollment status",
|
||||||
|
notes = "Get device enrollment status",
|
||||||
|
tags = "Device Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully created a device instance.",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest version" +
|
||||||
|
" of the requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n A deviceType with the specified device type was not found.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving the device details.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response isEnrolled(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/{type}/{id}/location")
|
@Path("/{type}/{id}/location")
|
||||||
@ -1233,4 +1313,62 @@ public interface DeviceManagementService {
|
|||||||
@QueryParam("newStatus")
|
@QueryParam("newStatus")
|
||||||
EnrolmentInfo.Status newStatus);
|
EnrolmentInfo.Status newStatus);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("/{type}/operations")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "POST",
|
||||||
|
value = "Add operation to set of devices for a given device type",
|
||||||
|
notes = "Returns the Activity Related to the operation.",
|
||||||
|
tags = "Device Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:operations")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 201,
|
||||||
|
message = "OK. \n Successfully added the operation.",
|
||||||
|
response = Activity.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response addOperation(@ApiParam(name = "type", value = "The device type, such as ios, android or windows... etc.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "deviceOperation", value = "Operation object with device ids.", required = true)
|
||||||
|
@Valid OperationRequest operationRequest);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,7 @@ import io.swagger.annotations.ApiResponses;
|
|||||||
import io.swagger.annotations.ResponseHeader;
|
import io.swagger.annotations.ResponseHeader;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
@ -206,4 +207,103 @@ public interface DeviceTypeManagementService {
|
|||||||
@HeaderParam("If-Modified-Since")
|
@HeaderParam("If-Modified-Since")
|
||||||
String ifModifiedSince);
|
String ifModifiedSince);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/all/{type}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Getting Details of a Device Type",
|
||||||
|
notes = "Get the details of a device by searching via the device type and the tenant domain.",
|
||||||
|
response = DeviceType.class,
|
||||||
|
tags = "Device Type Management Administrative Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:types")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully fetched the device type.",
|
||||||
|
response = DeviceType.class,
|
||||||
|
responseContainer = "List",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body")
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest version of the " +
|
||||||
|
"requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 401,
|
||||||
|
message = "Unauthorized.\n The unauthorized access to the requested resource.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found.\n The specified device does not exist",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the device list.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getDeviceTypeByName(
|
||||||
|
@ApiParam(
|
||||||
|
name = "type",
|
||||||
|
value = "The device type name, such as ios, android, windows or fire-alarm.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("type")
|
||||||
|
@Size(min = 2, max = 45)
|
||||||
|
String type);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/all")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Retrieve device types information",
|
||||||
|
notes = "Retrieve device types information.",
|
||||||
|
response = DeviceType.class,
|
||||||
|
tags = "Device Type Management Administrative Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device-types:types")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully fetched the device type.",
|
||||||
|
response = DeviceType.class,
|
||||||
|
responseContainer = "List",
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body")
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest version of the " +
|
||||||
|
"requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 401,
|
||||||
|
message = "Unauthorized.\n The unauthorized access to the requested resource.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found.\n The specified device does not exist",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the device list.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getDeviceTypes();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user