forked from community/device-mgt-core
commit
663df92b42
@ -1,15 +0,0 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 10
|
||||
# Don't close isssues or pulls
|
||||
daysUntilClose: false
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- Resolution/Postponed
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: Resolution/Stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
@ -1,28 +0,0 @@
|
||||
image: charithag/docker-mvn-jdk8:latest
|
||||
|
||||
variables:
|
||||
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
|
||||
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- .m2/repository/
|
||||
- target/
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- mvn $MAVEN_CLI_OPTS clean install -Dmaven.test.skip=true
|
||||
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- mvn $MAVEN_CLI_OPTS test
|
||||
|
||||
deploy:
|
||||
stage: deploy
|
||||
script:
|
||||
- mvn $MAVEN_CLI_OPTS deploy -Dmaven.test.skip=true
|
||||
only:
|
||||
- master@entgra/carbon-device-mgt
|
||||
- kernel-4.6.x@entgra/carbon-device-mgt
|
@ -1,8 +0,0 @@
|
||||
language: java
|
||||
jdk:
|
||||
- oraclejdk8
|
||||
cache:
|
||||
directories:
|
||||
- .autoconf
|
||||
- $HOME/.m2
|
||||
script: mvn clean install
|
@ -0,0 +1,127 @@
|
||||
pipeline {
|
||||
agent {
|
||||
label 'node-agent'
|
||||
}
|
||||
environment {
|
||||
def isPendingUpstreamDependenciesExists = false
|
||||
def triggeredViaPush = false
|
||||
JAVA_HOME = '/usr/lib/jvm/java-11-openjdk'
|
||||
PATH = "${JAVA_HOME}/bin:${env.PATH}"
|
||||
}
|
||||
stages {
|
||||
stage('Initialize Variables') {
|
||||
steps {
|
||||
script {
|
||||
// Define swaggerEndPoint as a global variable
|
||||
swaggerEndPoint = {
|
||||
def matcher = (env.CHANGE_URL =~ /^(?<host>https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b)(?<path>[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/)
|
||||
matcher.find()
|
||||
return matcher.group('host') + '/api/v1/repos' + matcher.group('path')
|
||||
}
|
||||
|
||||
echo "Swagger Endpoint: ${swaggerEndPoint.call()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Tool Versioning') {
|
||||
steps {
|
||||
script {
|
||||
sh 'java -version'
|
||||
sh 'node --version'
|
||||
sh 'npm --version'
|
||||
sh 'jq --version'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Check Environment Variables') {
|
||||
steps {
|
||||
script {
|
||||
echo "CHANGE_ID: ${env.CHANGE_ID}"
|
||||
echo "CHANGE_URL: ${env.CHANGE_URL}"
|
||||
echo "CHANGE_AUTHOR: ${env.CHANGE_AUTHOR}"
|
||||
echo "CHANGE_BRANCH: ${env.CHANGE_BRANCH}"
|
||||
echo "JAVA_HOME: ${JAVA_HOME}"
|
||||
echo "PATH: ${PATH}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Fetch Pending Upstream Dependencies') {
|
||||
steps {
|
||||
script {
|
||||
if (env.CHANGE_ID) {
|
||||
def url = swaggerEndPoint.call()
|
||||
echo "Fetching from URL: ${url}"
|
||||
withCredentials([usernamePassword(credentialsId: 'entgra-gitea-credentials', passwordVariable: 'password', usernameVariable: 'username')]) {
|
||||
def response = sh(script: """curl -X GET "${url}" -H 'accept: application/json' -u \$username:\$password""", returnStdout: true).trim()
|
||||
echo "API Response: ${response}"
|
||||
isPendingUpstreamDependenciesExists = sh(script: "echo '${response}' | jq 'contains({\"labels\": [{ \"name\": \"pending upstream\"}]})'", returnStdout: true).trim().toBoolean()
|
||||
}
|
||||
} else {
|
||||
echo '[Jenkinsfile] Triggered via a push request.'
|
||||
echo '[Jenkinsfile] Skipping dependency checking.'
|
||||
triggeredViaPush = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Execute Test Suites') {
|
||||
steps {
|
||||
script {
|
||||
if (!isPendingUpstreamDependenciesExists) {
|
||||
echo '[Jenkinsfile] Pending upstream dependencies do not exist.'
|
||||
echo '[Jenkinsfile] Entering testing phase.'
|
||||
try {
|
||||
checkout scm
|
||||
withCredentials([usernamePassword(credentialsId: 'builder2-deployer-nexus', passwordVariable: 'password', usernameVariable: 'username')]) {
|
||||
sh """/opt/scripts/run-test.sh -u \$username -p \$password"""
|
||||
}
|
||||
currentBuild.result = 'SUCCESS'
|
||||
message = 'Tests approved'
|
||||
} catch (error) {
|
||||
currentBuild.result = 'FAILURE'
|
||||
message = 'Tests cannot be approved'
|
||||
}
|
||||
} else {
|
||||
echo '[Jenkinsfile] Pending upstream dependencies exist.'
|
||||
echo '[Jenkinsfile] Entering waiting phase.'
|
||||
currentBuild.result = 'NOT_BUILT'
|
||||
message = 'PR waiting due to pending upstream dependencies'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Report Job Status') {
|
||||
steps {
|
||||
script {
|
||||
if (true) {
|
||||
withCredentials([usernamePassword(credentialsId: 'entgra-gitea-credentials', passwordVariable: 'password', usernameVariable: 'username')]) {
|
||||
def url = swaggerEndPoint.call() + '/reviews'
|
||||
echo "[Jenkinsfile] Notifying pull request build status to ${url}"
|
||||
def response = sh(script: """curl -X POST "${url}" -H 'accept: application/json' -H 'Content-Type: application/json' -u \$username:\$password -d '{ "body": "${message}" }'""", returnStdout: true).trim()
|
||||
echo "API Response: ${response}"
|
||||
}
|
||||
}
|
||||
|
||||
def committerEmail = sh(
|
||||
script: 'git --no-pager show -s --format=\'%ae\'',
|
||||
returnStdout: true
|
||||
).trim()
|
||||
|
||||
if (currentBuild.result == 'FAILURE') {
|
||||
emailext(
|
||||
subject: "${currentBuild.result}: Job ${env.JOB_NAME} [${env.BUILD_NUMBER}]",
|
||||
body: 'Hi, Please find below.\n<pre>${BUILD_LOG_REGEX, regex="BUILD FAILURE", linesAfter=30, showTruncatedLines=false, escapeHtml=true}</pre>' + "Find more at : ${env.BUILD_URL}",
|
||||
to: triggeredViaPush ? '$DEFAULT_RECIPIENTS' : committerEmail
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.documentation;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "DocConfiguration")
|
||||
public class DocConfiguration {
|
||||
private String docUrl;
|
||||
|
||||
@XmlElement(name = "DocUrl", required = true)
|
||||
public String getDocUrl() {
|
||||
return docUrl;
|
||||
}
|
||||
|
||||
public void setDocUrl(String docUrl) {
|
||||
this.docUrl = docUrl;
|
||||
}
|
||||
}
|
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.internal;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.TransactionManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.DeviceManagementConstants;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.dto.OperationConfig;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationDAO;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.core.ServerStartupObserver;
|
||||
import org.wso2.carbon.user.api.AuthorizationManager;
|
||||
import org.wso2.carbon.user.api.Permission;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.api.UserStoreManager;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
|
||||
public class DeviceManagementStartupHandler implements ServerStartupObserver {
|
||||
private static final Log log = LogFactory.getLog(DeviceManagementStartupHandler.class);
|
||||
private static final Gson gson = new Gson();
|
||||
private static final String OPERATION_CONFIG = "OPERATION_CONFIG";
|
||||
private static final String tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME;
|
||||
|
||||
@Override
|
||||
public void completingServerStartup() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void completedServerStartup() {
|
||||
userRoleCreateObserver();
|
||||
operationStatusChangeObserver();
|
||||
}
|
||||
|
||||
private void userRoleCreateObserver() {
|
||||
try {
|
||||
UserStoreManager userStoreManager =
|
||||
DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm(
|
||||
MultitenantConstants.SUPER_TENANT_ID).getUserStoreManager();
|
||||
String tenantAdminName =
|
||||
DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm(
|
||||
MultitenantConstants.SUPER_TENANT_ID).getRealmConfiguration().getAdminUserName();
|
||||
AuthorizationManager authorizationManager = DeviceManagementDataHolder.getInstance().getRealmService()
|
||||
.getTenantUserRealm(MultitenantConstants.SUPER_TENANT_ID).getAuthorizationManager();
|
||||
|
||||
if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN)) {
|
||||
userStoreManager.addRole(
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
null,
|
||||
DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN);
|
||||
} else {
|
||||
for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN) {
|
||||
authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
permission.getResourceId(), permission.getAction());
|
||||
}
|
||||
}
|
||||
if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER)) {
|
||||
userStoreManager.addRole(
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_USER,
|
||||
null,
|
||||
DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER);
|
||||
} else {
|
||||
for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER) {
|
||||
authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER,
|
||||
permission.getResourceId(), permission.getAction());
|
||||
}
|
||||
}
|
||||
userStoreManager.updateRoleListOfUser(tenantAdminName, null,
|
||||
new String[]{DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_USER});
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device management roles: " + DeviceManagementConstants.User.DEFAULT_DEVICE_USER + ", " +
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + " created for the tenant:" + tenantDomain + "."
|
||||
);
|
||||
log.debug("Tenant administrator: " + tenantAdminName + "@" + tenantDomain +
|
||||
" is assigned to the role:" + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + "."
|
||||
);
|
||||
}
|
||||
} catch (UserStoreException e) {
|
||||
log.error("Error occurred while creating roles for the tenant: " + tenantDomain + ".");
|
||||
}
|
||||
}
|
||||
|
||||
private void operationStatusChangeObserver () {
|
||||
MetadataManagementService metadataManagementService = DeviceManagementDataHolder
|
||||
.getInstance().getMetadataManagementService();
|
||||
OperationDAO operationDAO = OperationManagementDAOFactory.getOperationDAO();
|
||||
Metadata metadata;
|
||||
int numOfRecordsUpdated;
|
||||
try {
|
||||
metadata = metadataManagementService.retrieveMetadata(OPERATION_CONFIG);
|
||||
if (metadata != null) {
|
||||
OperationConfig operationConfiguration = gson.fromJson(metadata.getMetaValue(), OperationConfig.class);
|
||||
String[] deviceTypes = operationConfiguration.getDeviceTypes();
|
||||
String initialOperationStatus = operationConfiguration.getInitialOperationStatus();
|
||||
String requiredStatusChange = operationConfiguration.getRequiredStatusChange();
|
||||
|
||||
for (String deviceType : deviceTypes) {
|
||||
try {
|
||||
OperationManagementDAOFactory.beginTransaction();
|
||||
try {
|
||||
numOfRecordsUpdated = operationDAO.updateOperationByDeviceTypeAndInitialStatus(deviceType,
|
||||
initialOperationStatus, requiredStatusChange);
|
||||
log.info(numOfRecordsUpdated + " operations updated successfully for the" + deviceType);
|
||||
OperationManagementDAOFactory.commitTransaction();
|
||||
} catch (OperationManagementDAOException e) {
|
||||
OperationManagementDAOFactory.rollbackTransaction();
|
||||
String msg = "Error occurred while updating operation status. DeviceType : " + deviceType + ", " +
|
||||
"Initial operation status: " + initialOperationStatus + ", Required status:" + requiredStatusChange;
|
||||
log.error(msg, e);
|
||||
}
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Transactional error occurred while updating the operation status";
|
||||
log.error(msg, e);
|
||||
} finally {
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.info("Operation configuration not provided");
|
||||
}
|
||||
} catch (MetadataManagementException e) {
|
||||
String msg = "Error occurred while retrieving the operation configuration";
|
||||
log.error(msg, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.internal;
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.core.DeviceManagementConstants;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.core.ServerStartupObserver;
|
||||
import org.wso2.carbon.user.api.AuthorizationManager;
|
||||
import org.wso2.carbon.user.api.Permission;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.api.UserStoreManager;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
|
||||
public class UserRoleCreateObserver implements ServerStartupObserver {
|
||||
private static final Log log = LogFactory.getLog(UserRoleCreateObserver.class);
|
||||
@Override
|
||||
public void completingServerStartup() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void completedServerStartup() {
|
||||
String tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME;
|
||||
|
||||
try {
|
||||
UserStoreManager userStoreManager =
|
||||
DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm(
|
||||
MultitenantConstants.SUPER_TENANT_ID).getUserStoreManager();
|
||||
String tenantAdminName =
|
||||
DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm(
|
||||
MultitenantConstants.SUPER_TENANT_ID).getRealmConfiguration().getAdminUserName();
|
||||
AuthorizationManager authorizationManager = DeviceManagementDataHolder.getInstance().getRealmService()
|
||||
.getTenantUserRealm(MultitenantConstants.SUPER_TENANT_ID).getAuthorizationManager();
|
||||
|
||||
if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN)) {
|
||||
userStoreManager.addRole(
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
null,
|
||||
DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN);
|
||||
} else {
|
||||
for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN) {
|
||||
authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
permission.getResourceId(), permission.getAction());
|
||||
}
|
||||
}
|
||||
if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER)) {
|
||||
userStoreManager.addRole(
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_USER,
|
||||
null,
|
||||
DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER);
|
||||
} else {
|
||||
for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER) {
|
||||
authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER,
|
||||
permission.getResourceId(), permission.getAction());
|
||||
}
|
||||
}
|
||||
userStoreManager.updateRoleListOfUser(tenantAdminName, null,
|
||||
new String[] {DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN,
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_USER});
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device management roles: " + DeviceManagementConstants.User.DEFAULT_DEVICE_USER + ", " +
|
||||
DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + " created for the tenant:" + tenantDomain + "."
|
||||
);
|
||||
log.debug("Tenant administrator: " + tenantAdminName + "@" + tenantDomain +
|
||||
" is assigned to the role:" + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + "."
|
||||
);
|
||||
}
|
||||
} catch (UserStoreException e) {
|
||||
log.error("Error occurred while creating roles for the tenant: " + tenantDomain + ".");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataKeyAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataKeyNotFoundException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.dto.OperationConfig;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions.OperationConfigAlreadyExistsException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions.OperationConfigException;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions.OperationConfigNotFoundException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class OperationConfigurationService {
|
||||
|
||||
private static final Log log = LogFactory.getLog(OperationConfigurationService.class);
|
||||
private static final Gson gson = new Gson();
|
||||
private static final String STRING = "STRING";
|
||||
private static final String OPERATION_CONFIG = "OPERATION_CONFIG";
|
||||
static MetadataManagementService metadataManagementService = DeviceManagementDataHolder.getInstance().getMetadataManagementService();
|
||||
|
||||
|
||||
public static OperationConfig getOperationConfig() throws OperationConfigException {
|
||||
|
||||
Metadata metadata;
|
||||
try {
|
||||
metadata = metadataManagementService.retrieveMetadata(OPERATION_CONFIG);
|
||||
} catch (MetadataManagementException e) {
|
||||
String msg = "Error occurred while retrieving operation configuration";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigException(msg, e);
|
||||
}
|
||||
if (metadata != null) {
|
||||
return gson.fromJson(metadata.getMetaValue(), OperationConfig.class);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void addOperationConfiguration(OperationConfig config) throws OperationConfigException,
|
||||
OperationConfigAlreadyExistsException {
|
||||
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setDataType(STRING);
|
||||
metadata.setMetaKey(OPERATION_CONFIG);
|
||||
metadata.setMetaValue(gson.toJson(config));
|
||||
|
||||
try {
|
||||
metadataManagementService.createMetadata(metadata);
|
||||
} catch (MetadataKeyAlreadyExistsException e) {
|
||||
String msg = "Operation configuration already exists";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigAlreadyExistsException(msg, e);
|
||||
} catch (MetadataManagementException e) {
|
||||
String msg = "Error occurred while adding operation configuration";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void updateOperationConfiguration(OperationConfig config) throws OperationConfigException {
|
||||
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setDataType(STRING);
|
||||
metadata.setMetaKey(OPERATION_CONFIG);
|
||||
metadata.setMetaValue(gson.toJson(config));
|
||||
|
||||
try {
|
||||
metadataManagementService.updateMetadata(metadata);
|
||||
} catch (MetadataManagementException e) {
|
||||
String msg = "Error occurred while updating operation configuration";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteOperationConfiguration() throws OperationConfigException, OperationConfigNotFoundException {
|
||||
|
||||
try {
|
||||
metadataManagementService.deleteMetadata(OPERATION_CONFIG);
|
||||
} catch (MetadataKeyNotFoundException e) {
|
||||
String msg = "Operation configuration already exists";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigNotFoundException(msg, e);
|
||||
} catch (MetadataManagementException e) {
|
||||
String msg = "Error occurred while deleting operation configuration";
|
||||
log.error(msg, e);
|
||||
throw new OperationConfigException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.dto;
|
||||
|
||||
/**
|
||||
* DTO for Operation configuration.
|
||||
*/
|
||||
|
||||
public class OperationConfig {
|
||||
|
||||
private String[] deviceTypes;
|
||||
private String initialOperationStatus;
|
||||
private String requiredStatusChange;
|
||||
|
||||
public String[] getDeviceTypes() {
|
||||
return deviceTypes;
|
||||
}
|
||||
|
||||
public void setDeviceTypes(String[] deviceTypes) {
|
||||
this.deviceTypes = deviceTypes;
|
||||
}
|
||||
|
||||
public String getInitialOperationStatus() {
|
||||
return initialOperationStatus;
|
||||
}
|
||||
|
||||
public void setInitialOperationStatus(String initialOperationStatus) {
|
||||
this.initialOperationStatus = initialOperationStatus;
|
||||
}
|
||||
|
||||
public String getRequiredStatusChange() {
|
||||
return requiredStatusChange;
|
||||
}
|
||||
|
||||
public void setRequiredStatusChange(String requiredStatusChange) {
|
||||
this.requiredStatusChange = requiredStatusChange;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions;
|
||||
|
||||
/**
|
||||
* Custom exception class to be used in operation configuration service related functionalities.
|
||||
*/
|
||||
public class OperationConfigAlreadyExistsException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -1814347544027733436L;
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public OperationConfigAlreadyExistsException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigAlreadyExistsException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public OperationConfigAlreadyExistsException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigAlreadyExistsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public OperationConfigAlreadyExistsException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions;
|
||||
|
||||
/**
|
||||
* Custom exception class to be used in operation configuration related functionalities.
|
||||
*/
|
||||
public class OperationConfigException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -8933146283800122661L;
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public OperationConfigException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public OperationConfigException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public OperationConfigException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.exceptions;
|
||||
|
||||
/**
|
||||
* Custom exception class to be used in Operation configuration related functionalities.
|
||||
*/
|
||||
public class OperationConfigNotFoundException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 5260831982626354815L;
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public OperationConfigNotFoundException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigNotFoundException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public OperationConfigNotFoundException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public OperationConfigNotFoundException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public OperationConfigNotFoundException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue