use of org.wso2.carbon.governance.custom.lifecycles.checklist.util.CheckListItem in project carbon-apimgt by wso2.
the class APIPublisherImpl method updateAPIStatus.
/**
* @see org.wso2.carbon.apimgt.core.api.APIPublisher#updateAPIStatus(String, String, Map)
*/
@Override
public WorkflowResponse updateAPIStatus(String apiId, String status, Map<String, Boolean> checkListItemMap) throws APIManagementException {
WorkflowResponse workflowResponse = null;
try {
API api = getApiDAO().getAPI(apiId);
if (api != null && !APILCWorkflowStatus.PENDING.toString().equals(api.getWorkflowStatus())) {
API.APIBuilder apiBuilder = new API.APIBuilder(api);
apiBuilder.lastUpdatedTime(LocalDateTime.now());
apiBuilder.updatedBy(getUsername());
LifecycleState currentState = getApiLifecycleManager().getLifecycleDataForState(apiBuilder.getLifecycleInstanceId(), apiBuilder.getLifeCycleStatus());
apiBuilder.lifecycleState(currentState);
for (Map.Entry<String, Boolean> checkListItem : checkListItemMap.entrySet()) {
getApiLifecycleManager().checkListItemEvent(api.getLifecycleInstanceId(), api.getLifeCycleStatus(), checkListItem.getKey(), checkListItem.getValue());
}
API originalAPI = apiBuilder.build();
WorkflowExecutor executor = WorkflowExecutorFactory.getInstance().getWorkflowExecutor(WorkflowConstants.WF_TYPE_AM_API_STATE);
APIStateChangeWorkflow workflow = new APIStateChangeWorkflow(getApiDAO(), getApiSubscriptionDAO(), getWorkflowDAO(), getApiLifecycleManager(), getApiGateway(), getLabelDAO());
workflow.setApiName(originalAPI.getName());
workflow.setApiProvider(originalAPI.getProvider());
workflow.setApiVersion(originalAPI.getVersion());
workflow.setCurrentState(currentState.getState());
workflow.setTransitionState(status);
workflow.setWorkflowReference(originalAPI.getId());
workflow.setExternalWorkflowReference(UUID.randomUUID().toString());
workflow.setCreatedTime(LocalDateTime.now());
workflow.setWorkflowType(WorkflowConstants.WF_TYPE_AM_API_STATE);
workflow.setInvoker(getUsername());
// setting attributes for internal use. These are set to use from outside the executor's method
// these will be saved in the AM_WORKFLOW table so these can be retrieved later
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_CUR_STATE, currentState.getState());
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_TARGET_STATE, status);
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_LC_INVOKER, getUsername());
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_NAME, originalAPI.getId());
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_HAS_OWN_GATEWAY, String.valueOf(originalAPI.hasOwnGateway()));
if (originalAPI.hasOwnGateway()) {
List<String> gwLabels = originalAPI.getLabels();
for (String label : gwLabels) {
if (label.contains(ContainerBasedGatewayConstants.PRIVATE_JET_API_PREFIX)) {
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_AUTOGEN_LABEL, label);
break;
}
}
}
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_HAS_OWN_GATEWAY, String.valueOf(originalAPI.hasOwnGateway()));
workflow.setAttribute(WorkflowConstants.ATTRIBUTE_API_LAST_UPTIME, originalAPI.getLastUpdatedTime().toString());
String workflowDescription = "API [" + workflow.getApiName() + " - " + workflow.getApiVersion() + "] state change [" + workflow.getCurrentState() + " to " + workflow.getTransitionState() + "] request from " + getUsername();
workflow.setWorkflowDescription(workflowDescription);
workflowResponse = executor.execute(workflow);
workflow.setStatus(workflowResponse.getWorkflowStatus());
if (WorkflowStatus.CREATED != workflowResponse.getWorkflowStatus()) {
completeWorkflow(executor, workflow);
} else {
// add entry to workflow table if it is only in pending state
addWorkflowEntries(workflow);
getApiDAO().updateAPIWorkflowStatus(api.getId(), APILCWorkflowStatus.PENDING);
}
} else if (api != null && APILCWorkflowStatus.PENDING.toString().equals(api.getWorkflowStatus())) {
String message = "Pending state transition for api :" + api.getName();
log.error(message);
throw new APIManagementException(message, ExceptionCodes.WORKFLOW_PENDING);
} else {
throw new APIMgtResourceNotFoundException("Requested API " + apiId + " Not Available");
}
} catch (APIMgtDAOException e) {
String errorMsg = "Couldn't change the status of api ID " + apiId;
log.error(errorMsg, e);
throw new APIManagementException(errorMsg, e, e.getErrorHandler());
} catch (LifecycleException e) {
String errorMsg = "Couldn't change the status of api ID " + apiId;
log.error(errorMsg, e);
throw new APIManagementException(errorMsg, e, ExceptionCodes.APIMGT_LIFECYCLE_EXCEPTION);
}
return workflowResponse;
}
use of org.wso2.carbon.governance.custom.lifecycles.checklist.util.CheckListItem in project carbon-apimgt by wso2.
the class APIProviderImplTest method testGetAPILifeCycleData.
@Test
public void testGetAPILifeCycleData() throws Exception {
APIIdentifier identifier = new APIIdentifier("admin-AT-carbon.super", "API1", "1.0.0");
String path = APIConstants.API_ROOT_LOCATION + RegistryConstants.PATH_SEPARATOR + identifier.getProviderName() + RegistryConstants.PATH_SEPARATOR + identifier.getApiName() + RegistryConstants.PATH_SEPARATOR + identifier.getVersion();
APIProviderImplWrapper apiProvider = new APIProviderImplWrapper(apimgtDAO, scopesDAO);
Resource apiSourceArtifact = Mockito.mock(Resource.class);
Mockito.when(apiSourceArtifact.getUUID()).thenReturn("12640983654");
PowerMockito.when(APIUtil.getAPIPath(identifier)).thenReturn(path);
PowerMockito.when(apiProvider.registry.get(path)).thenReturn(apiSourceArtifact);
Mockito.when(artifactManager.getGenericArtifact(apiSourceArtifact.getUUID())).thenReturn(artifact);
Mockito.when(artifact.getLifecycleState()).thenReturn("Created");
LifecycleBean bean = getLCBean();
Mockito.when(LifecycleBeanPopulator.getLifecycleBean(path, (UserRegistry) apiProvider.registry, apiProvider.configRegistry)).thenReturn(bean);
Map<String, Object> lcData = apiProvider.getAPILifeCycleData(identifier);
List checkListItems = (List) lcData.get(APIConstants.LC_CHECK_ITEMS);
Assert.assertEquals(2, checkListItems.size());
if (checkListItems.get(0) instanceof CheckListItem) {
CheckListItem checkListItem = (CheckListItem) checkListItems.get(0);
Assert.assertTrue((APIConstants.RESUBSCRIBE_CHECK_LIST_ITEM).equals(checkListItem.getName()) || (APIConstants.DEPRECATE_CHECK_LIST_ITEM).equals(checkListItem.getName()));
if ((APIConstants.RESUBSCRIBE_CHECK_LIST_ITEM).equals(checkListItem.getName())) {
Assert.assertEquals("1", checkListItem.getOrder());
} else {
Assert.assertEquals("0", checkListItem.getOrder());
}
Assert.assertEquals("Created", checkListItem.getLifeCycleStatus());
}
if (checkListItems.get(1) instanceof CheckListItem) {
CheckListItem checkListItem = (CheckListItem) checkListItems.get(1);
Assert.assertTrue((APIConstants.RESUBSCRIBE_CHECK_LIST_ITEM).equals(checkListItem.getName()) || (APIConstants.DEPRECATE_CHECK_LIST_ITEM).equals(checkListItem.getName()));
if ((APIConstants.RESUBSCRIBE_CHECK_LIST_ITEM).equals(checkListItem.getName())) {
Assert.assertEquals("1", checkListItem.getOrder());
} else {
Assert.assertEquals("0", checkListItem.getOrder());
}
Assert.assertEquals("Created", checkListItem.getLifeCycleStatus());
}
}
use of org.wso2.carbon.governance.custom.lifecycles.checklist.util.CheckListItem in project carbon-apimgt by wso2.
the class APIProviderImpl method getAPILifeCycleData.
@Override
public /*
* This method returns the lifecycle data for an API including current state,next states.
*
* @param apiId APIIdentifier
* @return Map<String,Object> a map with lifecycle data
*/
Map<String, Object> getAPILifeCycleData(APIIdentifier apiId) throws APIManagementException {
String path = APIUtil.getAPIPath(apiId);
Map<String, Object> lcData = new HashMap<String, Object>();
String providerTenantMode = apiId.getProviderName();
boolean isTenantFlowStarted = false;
try {
String tenantDomain = MultitenantUtils.getTenantDomain(APIUtil.replaceEmailDomainBack(providerTenantMode));
if (tenantDomain != null && !MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) {
isTenantFlowStarted = true;
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
}
Resource apiSourceArtifact = registry.get(path);
GenericArtifactManager artifactManager = APIUtil.getArtifactManager(registry, APIConstants.API_KEY);
if (artifactManager == null) {
String errorMessage = "Failed to retrieve artifact manager when getting lifecycle data for API " + apiId;
log.error(errorMessage);
throw new APIManagementException(errorMessage);
}
GenericArtifact artifact = artifactManager.getGenericArtifact(apiSourceArtifact.getUUID());
// Get all the actions corresponding to current state of the api artifact
String[] actions = artifact.getAllLifecycleActions(APIConstants.API_LIFE_CYCLE);
// Put next states into map
lcData.put(APIConstants.LC_NEXT_STATES, actions);
String lifeCycleState = artifact.getLifecycleState();
lcData.put(APIConstants.LC_STATUS, lifeCycleState);
LifecycleBean bean;
bean = LifecycleBeanPopulator.getLifecycleBean(path, (UserRegistry) registry, configRegistry);
if (bean != null) {
ArrayList<CheckListItem> checkListItems = new ArrayList<CheckListItem>();
ArrayList<String> permissionList = new ArrayList<String>();
// Get lc properties
Property[] lifecycleProps = bean.getLifecycleProperties();
// Get roles of the current session holder
String[] roleNames = bean.getRolesOfUser();
for (Property property : lifecycleProps) {
String propName = property.getKey();
String[] propValues = property.getValues();
// Check for permission properties if any exists
if (propValues != null && propValues.length != 0) {
if (propName.startsWith(APIConstants.LC_PROPERTY_CHECKLIST_PREFIX) && propName.endsWith(APIConstants.LC_PROPERTY_PERMISSION_SUFFIX) && propName.contains(APIConstants.API_LIFE_CYCLE)) {
for (String role : roleNames) {
for (String propValue : propValues) {
String key = propName.replace(APIConstants.LC_PROPERTY_CHECKLIST_PREFIX, "").replace(APIConstants.LC_PROPERTY_PERMISSION_SUFFIX, "");
if (propValue.equals(role)) {
permissionList.add(key);
} else if (propValue.startsWith(APIConstants.LC_PROPERTY_CHECKLIST_PREFIX) && propValue.endsWith(APIConstants.LC_PROPERTY_PERMISSION_SUFFIX)) {
permissionList.add(key);
}
}
}
}
}
}
// Check for lifecycle checklist item properties defined
for (Property property : lifecycleProps) {
String propName = property.getKey();
String[] propValues = property.getValues();
if (propValues != null && propValues.length != 0) {
CheckListItem checkListItem = new CheckListItem();
checkListItem.setVisible("false");
if (propName.startsWith(APIConstants.LC_PROPERTY_CHECKLIST_PREFIX) && propName.endsWith(APIConstants.LC_PROPERTY_ITEM_SUFFIX) && propName.contains(APIConstants.API_LIFE_CYCLE)) {
if (propValues.length > 2) {
for (String param : propValues) {
if (param.startsWith(APIConstants.LC_STATUS)) {
checkListItem.setLifeCycleStatus(param.substring(7));
} else if (param.startsWith(APIConstants.LC_CHECK_ITEM_NAME)) {
checkListItem.setName(param.substring(5));
} else if (param.startsWith(APIConstants.LC_CHECK_ITEM_VALUE)) {
checkListItem.setValue(param.substring(6));
} else if (param.startsWith(APIConstants.LC_CHECK_ITEM_ORDER)) {
checkListItem.setOrder(param.substring(6));
}
}
}
String key = propName.replace(APIConstants.LC_PROPERTY_CHECKLIST_PREFIX, "").replace(APIConstants.LC_PROPERTY_ITEM_SUFFIX, "");
if (permissionList.contains(key)) {
// Set visible to true if the checklist item permits
checkListItem.setVisible("true");
}
}
if (checkListItem.matchLifeCycleStatus(lifeCycleState)) {
checkListItems.add(checkListItem);
}
}
}
lcData.put("items", checkListItems);
}
} catch (Exception e) {
handleException(e.getMessage(), e);
} finally {
if (isTenantFlowStarted) {
PrivilegedCarbonContext.endTenantFlow();
}
}
return lcData;
}
use of org.wso2.carbon.governance.custom.lifecycles.checklist.util.CheckListItem in project carbon-apimgt by wso2.
the class APIProviderImpl method getApiOrApiProductLifecycleData.
private Map<String, Object> getApiOrApiProductLifecycleData(String status) throws APIManagementException {
Map<String, Object> lcData = new HashMap<String, Object>();
List<String> actionsList;
try {
actionsList = LCManagerFactory.getInstance().getLCManager().getAllowedActionsForState(status);
if (actionsList != null) {
String[] actionsArray = new String[actionsList.size()];
actionsArray = actionsList.toArray(actionsArray);
lcData.put(APIConstants.LC_NEXT_STATES, actionsArray);
}
ArrayList<CheckListItem> checkListItems = new ArrayList<CheckListItem>();
List<String> checklistItemsList = LCManagerFactory.getInstance().getLCManager().getCheckListItemsForState(status);
if (checklistItemsList != null) {
for (String name : checklistItemsList) {
CheckListItem item = new CheckListItem();
item.setName(name);
item.setValue("false");
checkListItems.add(item);
}
}
lcData.put("items", checkListItems);
} catch (PersistenceException e) {
throw new APIManagementException("Error while parsing the lifecycle ", e);
}
// First letter capital
status = status.substring(0, 1).toUpperCase() + status.substring(1).toLowerCase();
lcData.put(APIConstants.LC_STATUS, status);
return lcData;
}
use of org.wso2.carbon.governance.custom.lifecycles.checklist.util.CheckListItem in project carbon-apimgt by wso2.
the class APIMappingUtil method fromLifecycleModelToDTO.
/**
* Return the REST API DTO representation of API Lifecycle state information.
*
* @param apiLCData API lifecycle state information
* @return REST API DTO representation of API Lifecycle state information
*/
public static LifecycleStateDTO fromLifecycleModelToDTO(Map<String, Object> apiLCData, boolean apiOlderVersionExist) {
LifecycleStateDTO lifecycleStateDTO = new LifecycleStateDTO();
String currentState = (String) apiLCData.get(APIConstants.LC_STATUS);
lifecycleStateDTO.setState(currentState);
String[] nextStates = (String[]) apiLCData.get(APIConstants.LC_NEXT_STATES);
if (nextStates != null) {
List<LifecycleStateAvailableTransitionsDTO> transitionDTOList = new ArrayList<>();
for (String state : nextStates) {
LifecycleStateAvailableTransitionsDTO transitionDTO = new LifecycleStateAvailableTransitionsDTO();
transitionDTO.setEvent(state);
// todo: Set target state properly
transitionDTO.setTargetState("");
transitionDTOList.add(transitionDTO);
}
lifecycleStateDTO.setAvailableTransitions(transitionDTOList);
}
List checkListItems = (List) apiLCData.get(APIConstants.LC_CHECK_ITEMS);
if (checkListItems != null) {
List<LifecycleStateCheckItemsDTO> checkItemsDTOList = new ArrayList<>();
for (Object checkListItemObj : checkListItems) {
CheckListItem checkListItem = (CheckListItem) checkListItemObj;
if (!apiOlderVersionExist && (checkListItem.getName().equals(APIConstants.DEPRECATE_CHECK_LIST_ITEM) || checkListItem.getName().equals(APIConstants.RESUBSCRIBE_CHECK_LIST_ITEM))) {
continue;
}
LifecycleStateCheckItemsDTO checkItemsDTO = new LifecycleStateCheckItemsDTO();
checkItemsDTO.setName(checkListItem.getName());
checkItemsDTO.setValue(Boolean.getBoolean(checkListItem.getValue()));
// todo: Set targets properly
checkItemsDTO.setRequiredStates(new ArrayList<>());
checkItemsDTOList.add(checkItemsDTO);
}
lifecycleStateDTO.setCheckItems(checkItemsDTOList);
}
return lifecycleStateDTO;
}
Aggregations