/*******************************************************************************
* Copyright (c) 2012, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
* Michael Fiedler - initial API and implementation for Bugzilla adapter
* Jad El-khoury - initial implementation of code generator (https://bugs.eclipse.org/bugs/show_bug.cgi?id=422448)
*
* This file is generated by org.eclipse.lyo.oslc4j.codegenerator
*******************************************************************************/
package hu.bme.mit.massif.oslc.adaptor.services;
import hu.bme.mit.massif.oslc.adaptor.SimulinkAdaptorConstants;
import hu.bme.mit.massif.oslc.adaptor.SimulinkAdaptorManager;
import hu.bme.mit.massif.oslc.adaptor.resources.TriggerResource;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.eclipse.lyo.oslc4j.core.annotation.OslcCreationFactory;
import org.eclipse.lyo.oslc4j.core.annotation.OslcDialogs;
import org.eclipse.lyo.oslc4j.core.annotation.OslcService;
import org.eclipse.lyo.oslc4j.core.model.Link;
import org.eclipse.lyo.oslc4j.core.model.OslcConstants;
import org.eclipse.lyo.oslc4j.core.model.OslcMediaType;
// Start of user code imports
// End of user code
@OslcService(SimulinkAdaptorConstants.SIMULINK_DOMAIN)
@Path("/simu/{serviceProviderId}/triggerResources")
public class TriggerResourceService {
@Context
private HttpServletRequest httpServletRequest;
@Context
private HttpServletResponse httpServletResponse;
@Context
private UriInfo uriInfo;
public TriggerResourceService() {
super();
}
/**
* RDF/XML, XML and JSON representation of a change request collection
* <p>
* TODO: add query support
*
* @param productId
* @param where
* @param pageString
* @return
* @throws IOException
* @throws ServletException
*/
@OslcDialogs({})
@GET
@Produces({ OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON })
public TriggerResource[] getTriggerResources(@PathParam("serviceProviderId") final String serviceProviderId,
@QueryParam("oslc.where") final String where, @QueryParam("page") final String pageString)
throws IOException, ServletException {
int page = 0;
int limit = 999;
// Start of user code (MUST_FILL_IN) getResourceCollection_init
// End of user code
final List<TriggerResource> resources = SimulinkAdaptorManager.getTriggerResources(httpServletRequest,
serviceProviderId, page, limit);
return resources.toArray(new TriggerResource[resources.size()]);
}
/**
* HTML representation of change request collection
* <p>
* Forwards to changerequest_collection_html.jsp to build the html page
*
* @param productId
* @param changeRequestId
* @param pageString
* @return
* @throws ServletException
* @throws IOException
*/
@GET
@Produces({ MediaType.TEXT_HTML })
public Response getTriggerResourcesAsHtml(@PathParam("serviceProviderId") final String serviceProviderId,
@QueryParam("page") final String pageString) throws ServletException, IOException {
int page = 0;
int limit = 20;
if (null != pageString) {
page = Integer.parseInt(pageString);
}
// Start of user code (MUST_FILL_IN) getResourceCollectionAsHTML_init
// End of user code
final List<TriggerResource> resources = SimulinkAdaptorManager.getTriggerResources(httpServletRequest,
serviceProviderId, page, limit);
if (resources != null) {
httpServletRequest.setAttribute("resources", resources);
// Start of user code (RECOMMENDED)
// getResourceCollectionAsHTML_setAttributes
// End of user code
httpServletRequest.setAttribute("queryUri", uriInfo.getAbsolutePath().toString() + "?oslc.paging=true");
if (resources.size() > limit) {
resources.remove(resources.size() - 1);
httpServletRequest.setAttribute("nextPageUri", uriInfo.getAbsolutePath().toString()
+ "?oslc.paging=true&page=" + (page + 1));
}
RequestDispatcher rd = httpServletRequest
.getRequestDispatcher("/hu/bme/mit/simulink/oslc/adaptor/triggerresourcecollection_html.jsp");
rd.forward(httpServletRequest, httpServletResponse);
}
throw new WebApplicationException(Status.NOT_FOUND);
}
/**
* RDF/XML, XML and JSON representation of a single change request
*
* @param productId
* @param changeRequestId
* @return
* @throws IOException
* @throws ServletException
* @throws URISyntaxException
*/
@GET
@Path("{trigger}")
@Produces({ OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON })
public TriggerResource getTriggerResource(@PathParam("serviceProviderId") final String serviceProviderId,
@PathParam("trigger") final String trigger) throws IOException, ServletException, URISyntaxException {
// Start of user code (MUST_FILL_IN) getResource_init
// End of user code
final TriggerResource aTriggerResource = SimulinkAdaptorManager.getTriggerResource(httpServletRequest,
serviceProviderId, trigger);
if (aTriggerResource != null) {
// Start of user code (RECOMMENDED) getResource_body
// End of user code
return aTriggerResource;
}
throw new WebApplicationException(Status.NOT_FOUND);
}
/**
* HTML representation for a single change request - redirect the request
* directly to Bugzilla
*
* @param productId
* @param changeRequestId
* @throws ServletException
* @throws IOException
* @throws URISyntaxException
*/
@GET
@Path("{trigger}")
@Produces({ MediaType.TEXT_HTML })
public Response getTriggerResourceAsHtml(@PathParam("serviceProviderId") final String serviceProviderId,
@PathParam("trigger") final String trigger) throws ServletException, IOException, URISyntaxException {
// Start of user code (MUST_FILL_IN) getResourceAsHTML_init
// End of user code
final TriggerResource aTriggerResource = SimulinkAdaptorManager.getTriggerResource(httpServletRequest,
serviceProviderId, trigger);
if (aTriggerResource != null) {
httpServletRequest.setAttribute("aTriggerResource", aTriggerResource);
// Start of user code getResourceAsHTML_setAttributes
// End of user code
RequestDispatcher rd = httpServletRequest
.getRequestDispatcher("/hu/bme/mit/simulink/oslc/adaptor/triggerresource_html.jsp");
rd.forward(httpServletRequest, httpServletResponse);
}
throw new WebApplicationException(Status.NOT_FOUND);
}
/**
* OSLC delegated selection dialog for change requests
* <p>
* If called without a "terms" parameter, forwards to
* changerequest_selector.jsp to build the html for the IFrame
* <p>
* If called with a "terms" parameter, sends a Bug search to Bugzilla and
* then forwards to changerequest_filtered_json.jsp to build a JSON response
*
* @param terms
* @param productId
* @throws ServletException
* @throws IOException
*/
@GET
@Consumes({ MediaType.TEXT_HTML, MediaType.WILDCARD })
public void triggerResourceSelector(@QueryParam("terms") final String terms,
@PathParam("serviceProviderId") final String serviceProviderId) throws ServletException, IOException {
try {
// Start of user code (MUST_FILL_IN) resourceSelector_init
// End of user code
httpServletRequest.setAttribute("selectionUri", uriInfo.getAbsolutePath().toString());
// Start of user code (RECOMMENDED) resourceSelector_setAttributes
// End of user code
if (terms != null) {
httpServletRequest.setAttribute("terms", terms);
final List<TriggerResource> resources = SimulinkAdaptorManager.searchTriggerResources(
httpServletRequest, serviceProviderId, terms);
if (resources != null) {
httpServletRequest.setAttribute("resources", resources);
RequestDispatcher rd = httpServletRequest
.getRequestDispatcher("/hu/bme/mit/simulink/oslc/adaptor/triggerresourcefilteredcollection_json.jsp");
rd.forward(httpServletRequest, httpServletResponse);
}
// a empty search should return an empty list and not NULL!
throw new WebApplicationException(Status.NOT_FOUND);
} else {
try {
RequestDispatcher rd = httpServletRequest
.getRequestDispatcher("/hu/bme/mit/simulink/oslc/adaptor/triggerresourceselector_html.jsp");
rd.forward(httpServletRequest, httpServletResponse);
} catch (Exception e) {
throw new ServletException(e);
}
}
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
/**
* OSLC delegated creation dialog for a single change request
* <p>
* Forwards to changerequest_creator.jsp to build the html form
*
* @param productId
* @throws IOException
* @throws ServletException
*/
@GET
@Consumes({ MediaType.WILDCARD })
public void triggerResourceCreatorAsHtml(@PathParam("serviceProviderId") final String serviceProviderId)
throws IOException, ServletException {
// Start of user code (MUST_FILL_IN) resourceCreatorAsHTML_init
// End of user code
httpServletRequest.setAttribute("serviceProviderId", serviceProviderId);
RequestDispatcher rd = httpServletRequest
.getRequestDispatcher("/hu/bme/mit/simulink/oslc/adaptor/triggerresourcecreator_html.jsp");
rd.forward(httpServletRequest, httpServletResponse);
}
/**
* Backend creator for the OSLC delegated creation dialog.
* <p>
* Accepts the input in FormParams and returns a small JSON response
*
* @param productId
* @param component
* @param version
* @param summary
* @param op_sys
* @param platform
* @param description
*/
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
public void createTriggerResourceFromHtml(@PathParam("serviceProviderId") final String serviceProviderId) {
try {
TriggerResource aTriggerResource = new TriggerResource();
String[] paramValues;
paramValues = httpServletRequest.getParameterValues("statesWhenEnabling");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setStatesWhenEnabling(paramValues[0]);
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
paramValues = httpServletRequest.getParameterValues("triggerType");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setTriggerType(paramValues[0]);
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
paramValues = httpServletRequest.getParameterValues("connections");
if (paramValues != null) {
for (int i = 0; i < paramValues.length; i++) {
aTriggerResource.addConnections(new Link(new URI(paramValues[i])));
}
}
paramValues = httpServletRequest.getParameterValues("container");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setContainer(new Link(new URI(paramValues[0])));
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
paramValues = httpServletRequest.getParameterValues("portBlock");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setPortBlock(new Link(new URI(paramValues[0])));
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
paramValues = httpServletRequest.getParameterValues("name");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setName(paramValues[0]);
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
paramValues = httpServletRequest.getParameterValues("simulinkRef");
if (paramValues != null) {
if (paramValues.length == 1) {
if (paramValues[0].length() != 0)
aTriggerResource.setSimulinkRef(paramValues[0]);
// else, there is an empty value for that parameter, and
// hence ignore since the parameter is not actually set.
}
}
final TriggerResource newTriggerResource = SimulinkAdaptorManager.createTriggerResource(httpServletRequest,
aTriggerResource, serviceProviderId);
httpServletRequest.setAttribute("newResource", newTriggerResource);
httpServletRequest.setAttribute("newResourceUri", newTriggerResource.getAbout().toString());
// Send back to the form a small JSON response
httpServletResponse.setContentType("application/json");
httpServletResponse.setStatus(Status.CREATED.getStatusCode());
httpServletResponse.addHeader("Location", newTriggerResource.getAbout().toString());
PrintWriter out = httpServletResponse.getWriter();
out.print("{" + "\"resource\" : \"" + newTriggerResource.getAbout().toString() + "\"}");
out.close();
} catch (Exception e) {
e.printStackTrace();
throw new WebApplicationException(e);
}
}
/**
* Create a single BugzillaChangeRequest via RDF/XML, XML or JSON POST
*
* @param productId
* @param changeRequest
* @return
* @throws IOException
* @throws ServletException
*/
@OslcDialogs({})
@OslcCreationFactory(title = "DO_NOT_USE", label = "DO_NOT_USE", resourceShapes = { OslcConstants.PATH_RESOURCE_SHAPES
+ "/" + SimulinkAdaptorConstants.PATH_TRIGGERRESOURCE }, resourceTypes = {
SimulinkAdaptorConstants.TYPE_BLOCKRESOURCE, SimulinkAdaptorConstants.TYPE_PORTRESOURCE,
SimulinkAdaptorConstants.TYPE_INPORTRESOURCE, SimulinkAdaptorConstants.TYPE_OUTPORTRESOURCE,
SimulinkAdaptorConstants.TYPE_TRIGGERRESOURCE, SimulinkAdaptorConstants.TYPE_ENABLERESOURCE,
SimulinkAdaptorConstants.TYPE_BUSSELECTORRESOURCE, SimulinkAdaptorConstants.TYPE_BUSCREATORRESOURCE,
SimulinkAdaptorConstants.TYPE_GOTORESOURCE, SimulinkAdaptorConstants.TYPE_FROMRESOURCE,
SimulinkAdaptorConstants.TYPE_SIMULINKMODELRESOURCE, SimulinkAdaptorConstants.TYPE_PORTBLOCKRESOURCE,
SimulinkAdaptorConstants.TYPE_OUTPORTBLOCKRESOURCE, SimulinkAdaptorConstants.TYPE_INPORTBLOCKRESOURCE,
SimulinkAdaptorConstants.TYPE_TRIGGERBLOCKRESOURCE, SimulinkAdaptorConstants.TYPE_ENABLEBLOCKRESOURCE,
SimulinkAdaptorConstants.TYPE_SUBSYSTEMRESOURCE, SimulinkAdaptorConstants.TYPE_BUSSPECIFICATIONRESOURCE,
SimulinkAdaptorConstants.TYPE_SIMULINKELEMENTRESOURCE }, usages = { OslcConstants.OSLC_USAGE_DEFAULT })
@POST
@Consumes({ OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON })
@Produces({ OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON })
public Response createTriggerResource(@PathParam("serviceProviderId") final String serviceProviderId,
final TriggerResource aTriggerResource) throws IOException, ServletException {
try {
TriggerResource newTriggerResource = SimulinkAdaptorManager.createTriggerResource(httpServletRequest,
aTriggerResource, serviceProviderId);
httpServletResponse
.setHeader("ETag", SimulinkAdaptorManager.getETagFromTriggerResource(newTriggerResource));
return Response.created(newTriggerResource.getAbout()).entity(aTriggerResource).build();
} catch (Exception e) {
e.printStackTrace();
throw new WebApplicationException(e);
}
}
// Start of user code (RECOMMENDED) functions
// End of user code
}