Add lifecycle retrieving API

feature/appm-store/pbac
lasanthaDLPDS 5 years ago
parent f95f872732
commit 1100db4d67

@ -81,4 +81,32 @@ public interface ConfigRetrieveAPI {
})
Response getUiConfig();
@GET
@Path("/lifecycle-config")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "get application management UI configuration",
notes = "This will get all UI configuration of application management"
)
@ApiResponses(
value = {
@ApiResponse(
code = 200,
message = "OK. \n Successfully got Lifecycle Config.",
response = ApplicationList.class),
@ApiResponse(
code = 404,
message = "Not Found. There doesn't have an defined <LifecycleStates> in app management "
+ "configuration file." +
"query."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Error occurred while getting the lifecycle config.",
response = ErrorResponse.class)
})
Response getLifecycleConfig();
}

@ -20,7 +20,9 @@ package org.wso2.carbon.device.application.mgt.api.services.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.application.mgt.api.services.ConfigRetrieveAPI;
import org.wso2.carbon.device.application.mgt.common.config.LifecycleStateVertex;
import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration;
import org.wso2.carbon.device.application.mgt.common.exception.LifecycleManagementException;
import org.wso2.carbon.device.application.mgt.common.services.AppmDataHandler;
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
@ -29,6 +31,9 @@ import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Implementation of ApplicationDTO Management related APIs.
@ -49,4 +54,24 @@ public class ConfigRetrieveAPIImpl implements ConfigRetrieveAPI {
return Response.status(Response.Status.OK).entity(uiConfiguration).build();
}
@GET
@Override
@Consumes("application/json")
@Path("/lifecycle-config")
public Response getLifecycleConfig() {
AppmDataHandler dataHandler = APIUtil.getDataHandler();
Map<String, List<LifecycleStateVertex>> verticesObject = new HashMap<>();
Map<LifecycleStateVertex, List<LifecycleStateVertex>> vertices = null;
try {
vertices = dataHandler.getLifecycleConfiguration().getAdjVertices();
for (LifecycleStateVertex vt : vertices.keySet()) {
verticesObject.put(vt.getLabel(), vertices.get(vt));
}
return Response.status(Response.Status.OK).entity(verticesObject).build();
} catch (LifecycleManagementException e) {
String msg = "Error Occurred while accessing lifecycle manager.";
log.error(msg);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
}

@ -0,0 +1,70 @@
package org.wso2.carbon.device.application.mgt.common.config;/* Copyright (c) 2019, 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.
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LifecycleGraph {
private Map<LifecycleStateVertex, List<LifecycleStateVertex>> adjVertices;
public LifecycleGraph() {
this.adjVertices = new HashMap<>() ;
}
public void addVertex(String label) {
adjVertices.putIfAbsent(new LifecycleStateVertex(label), new ArrayList<>());
}
public void addVertex(LifecycleStateVertex vertext) {
adjVertices.putIfAbsent(vertext, new ArrayList<>());
}
void removeVertex(String label) {
LifecycleStateVertex v = new LifecycleStateVertex(label);
adjVertices.values()
.stream()
.map(e -> e.remove(v))
.collect(Collectors.toList());
adjVertices.remove(new LifecycleStateVertex(label));
}
public void addEdge(String label1, String label2) {
LifecycleStateVertex v1 = new LifecycleStateVertex(label1);
LifecycleStateVertex v2 = new LifecycleStateVertex(label2);
adjVertices.get(v1).add(v2);
// adjVertices.get(v2).add(v1);
}
public void removeEdge(String label1, String label2) {
LifecycleStateVertex v1 = new LifecycleStateVertex(label1);
LifecycleStateVertex v2 = new LifecycleStateVertex(label2);
List<LifecycleStateVertex> eV1 = adjVertices.get(v1);
List<LifecycleStateVertex> eV2 = adjVertices.get(v2);
if (eV1 != null)
eV1.remove(v2);
if (eV2 != null)
eV2.remove(v1);
}
public Map<LifecycleStateVertex, List<LifecycleStateVertex>> getAdjVertices() {
return adjVertices;
}
}

@ -0,0 +1,91 @@
package org.wso2.carbon.device.application.mgt.common.config;/* Copyright (c) 2019, 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.
*/
public class LifecycleStateVertex {
private String label;
private boolean isAppUpdatable;
private boolean isAppInstallable;
private boolean isInitialState;
private boolean isEndState;
public LifecycleStateVertex(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public boolean isAppUpdatable() {
return isAppUpdatable;
}
public void setAppUpdatable(boolean appUpdatable) {
isAppUpdatable = appUpdatable;
}
public boolean isAppInstallable() {
return isAppInstallable;
}
public void setAppInstallable(boolean appInstallable) {
isAppInstallable = appInstallable;
}
public boolean isInitialState() {
return isInitialState;
}
public void setInitialState(boolean initialState) {
isInitialState = initialState;
}
public boolean isEndState() {
return isEndState;
}
public void setEndState(boolean endState) {
isEndState = endState;
}
@Override
public int hashCode(){
return label == null ? 0 : label.hashCode();
}
// Overriding equals() to compare two LifecycleStateVertex objects
@Override
public boolean equals(Object o) {
// If the object is compared with itself then return true
if (o == this) {
return true;
}
/* Check if o is an instance of LifecycleStateVertex or not
"null instanceof [type]" also returns false */
if (!(o instanceof LifecycleStateVertex)) {
return false;
}
// typecast o to Complex so that we can compare data members
LifecycleStateVertex c = (LifecycleStateVertex) o;
// Compare the equality of label name and return accordingly
return label.equals(c.label);
}
}

@ -17,8 +17,10 @@
package org.wso2.carbon.device.application.mgt.common.services;
import org.wso2.carbon.device.application.mgt.common.config.LifecycleGraph;
import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration;
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
import org.wso2.carbon.device.application.mgt.common.exception.LifecycleManagementException;
import java.io.InputStream;
@ -30,5 +32,7 @@ public interface AppmDataHandler {
*/
UIConfiguration getUIConfiguration();
LifecycleGraph getLifecycleConfiguration() throws LifecycleManagementException;
InputStream getArtifactStream(String uuid, String artifactName) throws ApplicationManagementException;
}

@ -20,8 +20,10 @@ package org.wso2.carbon.device.application.mgt.core.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.application.mgt.common.config.LifecycleGraph;
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
import org.wso2.carbon.device.application.mgt.common.exception.LifecycleManagementException;
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
import org.wso2.carbon.device.application.mgt.common.services.AppmDataHandler;
import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration;
@ -30,6 +32,8 @@ import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagem
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
import org.wso2.carbon.device.application.mgt.core.internal.DataHolder;
import org.wso2.carbon.device.application.mgt.core.lifecycle.LifecycleStateManager;
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
import org.wso2.carbon.device.application.mgt.core.util.Constants;
@ -37,12 +41,16 @@ import java.io.InputStream;
public class AppmDataHandlerImpl implements AppmDataHandler {
private UIConfiguration uiConfiguration;
private static final Log log = LogFactory.getLog(AppmDataHandlerImpl.class);
private UIConfiguration uiConfiguration;
private LifecycleStateManager lifecycleStateManager;
public AppmDataHandlerImpl(UIConfiguration config) {
this.uiConfiguration = config;
lifecycleStateManager = DataHolder.getInstance().getLifecycleStateManager();
}
@Override
@ -50,6 +58,11 @@ public class AppmDataHandlerImpl implements AppmDataHandler {
return this.uiConfiguration;
}
@Override
public LifecycleGraph getLifecycleConfiguration() throws LifecycleManagementException {
return lifecycleStateManager.getLifecyccleStateGraph();
}
@Override
public InputStream getArtifactStream(String uuid, String artifactName) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);

@ -19,6 +19,8 @@ package org.wso2.carbon.device.application.mgt.core.lifecycle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.application.mgt.common.config.LifecycleGraph;
import org.wso2.carbon.device.application.mgt.common.config.LifecycleStateVertex;
import org.wso2.carbon.device.application.mgt.common.exception.LifecycleManagementException;
import org.wso2.carbon.device.application.mgt.core.internal.DataHolder;
import org.wso2.carbon.device.application.mgt.core.lifecycle.config.LifecycleState;
@ -62,6 +64,37 @@ public class LifecycleStateManager {
}
}
public LifecycleGraph getLifecyccleStateGraph() throws LifecycleManagementException {
LifecycleGraph lifecycleGraph = new LifecycleGraph();
Map<String, State> lifecycleStatesDup = lifecycleStates;
for (State state : lifecycleStatesDup.values()) {
Set<String> proceedingStateNames = state.getProceedingStates();
String stateName = state.getState();
LifecycleStateVertex lifecycleStateVertex = new LifecycleStateVertex(stateName);
if (isInitialState(stateName)) {
lifecycleStateVertex.setInitialState(true);
}
if (isUpdatableState(stateName)) {
lifecycleStateVertex.setAppUpdatable(true);
}
if (isEndState(stateName)) {
lifecycleStateVertex.setEndState(true);
}
if (isInstallableState(stateName)) {
lifecycleStateVertex.setAppInstallable(true);
}
lifecycleGraph.addVertex(lifecycleStateVertex);
if (proceedingStateNames != null) {
proceedingStateNames.forEach(proceedingStateName -> {
lifecycleGraph.addVertex(proceedingStateName);
lifecycleGraph.addEdge(stateName, proceedingStateName);
});
}
}
return lifecycleGraph;
}
public Set<String> getNextLifecycleStates(String currentLifecycleState) {
return lifecycleStates.get(currentLifecycleState.toUpperCase()).getProceedingStates();

Loading…
Cancel
Save