/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* 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 com.qualogy.qafe.jaxrs.businessaction;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.qualogy.qafe.bind.business.action.BusinessAction;
import com.qualogy.qafe.bind.commons.type.Parameter;
import com.qualogy.qafe.bind.core.application.ApplicationContext;
import com.qualogy.qafe.businessaction.BusinessActionHandler;
import com.qualogy.qafe.businessaction.exception.ApplicationNotFoundException;
import com.qualogy.qafe.businessaction.exception.BusinessActionResourceException;
import com.qualogy.qafe.businessaction.impl.ApplicationBean;
import com.qualogy.qafe.businessaction.impl.BusinessActionBean;
import com.qualogy.qafe.businessaction.impl.BusinessActionParameterBean;
/**
* JAX-RS resource for accessing and invoking business actions.
*
* @author sdahlberg
*
*/
@Path("/")
public final class BusinessActionResource {
@Inject
private BusinessActionHandler handler;
@GET
@Path("applications")
@Produces(MediaType.APPLICATION_JSON)
public List<ApplicationBean> getApplications() {
final List<ApplicationBean> applications = new ArrayList<ApplicationBean>();
for (final ApplicationContext context : handler.getApplicationContexts()) {
final ApplicationBean applicationBean = new ApplicationBean();
applicationBean.setApplicationId(context.getId().toString());
applications.add(applicationBean);
}
return applications;
}
@GET
@Path("applications/{applicationId}/businessactions")
@Produces(MediaType.APPLICATION_JSON)
public List<BusinessActionBean> getBussinessActions(
// @formatter:off
@PathParam("applicationId") final String applicationId) throws ApplicationNotFoundException {
// @formatter:on
final List<BusinessActionBean> businessActions = new ArrayList<BusinessActionBean>();
final ApplicationContext context = handler.getApplicationContext(applicationId);
final List<BusinessAction> actions = handler.getBusinessActions(context);
for (final BusinessAction action : actions) {
final BusinessActionBean businessActionBean = new BusinessActionBean();
businessActionBean.setApplicationId(applicationId);
businessActionBean.setBusinessActionId(action.getId());
final List<BusinessActionParameterBean> inputParameters =
new ArrayList<BusinessActionParameterBean>();
final List<Parameter> parameters = handler.getInputParameters(action);
for (final Parameter parameter : parameters) {
final BusinessActionParameterBean inputParameterBean = new BusinessActionParameterBean();
inputParameterBean.setKey(parameter.getName());
inputParameters.add(inputParameterBean);
}
businessActionBean.setInputParameters(inputParameters);
businessActions.add(businessActionBean);
}
return businessActions;
}
@POST
@Path("applications/{applicationId}/businessactions/{businessActionId}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<BusinessActionParameterBean> invokeBusinessAction(
// @formatter:off
@PathParam("applicationId") final String applicationId,
@PathParam("businessActionId") final String businessActionId,
final List<BusinessActionParameterBean> parameters) throws BusinessActionResourceException {
// @formatter:on
final ApplicationContext context = handler.getApplicationContext(applicationId);
final BusinessAction businessAction = handler.getBusinessAction(context, businessActionId);
final Map<String, Object> result = handler.invokeBusinessAction(context, businessAction, parameters);
final List<BusinessActionParameterBean> outputParameters =
new ArrayList<BusinessActionParameterBean>();
for (final Entry<String, Object> entry : result.entrySet()) {
final BusinessActionParameterBean outputParameterBean = new BusinessActionParameterBean();
outputParameterBean.setKey(entry.getKey());
outputParameterBean.setValue(entry.getValue());
outputParameters.add(outputParameterBean);
}
return outputParameters;
}
}