http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java b/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java deleted file mode 100644 index 62158bb..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java +++ /dev/null @@ -1,604 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest; - -import static org.taverna.server.master.common.Namespaces.SERVER; -import static org.taverna.server.master.common.Roles.USER; -import static org.taverna.server.master.rest.ContentTypes.JSON; -import static org.taverna.server.master.rest.ContentTypes.URI_LIST; -import static org.taverna.server.master.rest.ContentTypes.XML; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_CAPABILITIES; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_NOTIFIERS; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_OP_LIMIT; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_PERM_LIST; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_PERM_WF; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.POL_RUN_LIMIT; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.ROOT; -import static org.taverna.server.master.rest.TavernaServerREST.PathNames.RUNS; -import static org.taverna.server.master.rest.handler.Scufl2DocumentHandler.SCUFL2; -import static org.taverna.server.master.rest.handler.T2FlowDocumentHandler.T2FLOW; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; -import javax.annotation.security.RolesAllowed; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.OPTIONS; -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.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - -import org.apache.abdera.model.Entry; -import org.apache.abdera.model.Feed; -import org.apache.cxf.jaxrs.model.wadl.Description; -import org.taverna.server.master.common.Capability; -import org.taverna.server.master.common.RunReference; -import org.taverna.server.master.common.Uri; -import org.taverna.server.master.common.VersionedElement; -import org.taverna.server.master.common.Workflow; -import org.taverna.server.master.common.version.Version; -import org.taverna.server.master.exceptions.NoCreateException; -import org.taverna.server.master.exceptions.NoUpdateException; -import org.taverna.server.master.exceptions.UnknownRunException; -import org.taverna.server.master.interfaces.TavernaRun; -import org.taverna.server.master.soap.TavernaServerSOAP; - -/** - * The REST service interface to Taverna 3 Server. - * - * @author Donal Fellows - * @see TavernaServerSOAP - */ -@RolesAllowed(USER) -@Description("This is REST service interface to Taverna " + Version.JAVA - + " Server.") -public interface TavernaServerREST { - /** - * Produces the description of the service. - * - * @param ui - * About the URI being accessed. - * @return The description. - */ - @GET - @Path(ROOT) - @Produces({ XML, JSON }) - @Description("Produces the description of the service.") - @Nonnull - ServerDescription describeService(@Nonnull @Context UriInfo ui); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ROOT) - @Description("Produces the description of the service.") - Response serviceOptions(); - - /** - * Produces a description of the list of runs. - * - * @param ui - * About the URI being accessed. - * @return A description of the list of runs that are available. - */ - @GET - @Path(RUNS) - @Produces({ XML, JSON }) - @RolesAllowed(USER) - @Description("Produces a list of all runs visible to the user.") - @Nonnull - RunList listUsersRuns(@Nonnull @Context UriInfo ui); - - /** - * Accepts (or not) a request to create a new run executing the given - * workflow. - * - * @param workflow - * The workflow document to execute. - * @param ui - * About the URI being accessed. - * @return A response to the POST describing what was created. - * @throws NoUpdateException - * If the POST failed. - */ - @POST - @Path(RUNS) - @Consumes({ T2FLOW, SCUFL2, XML }) - @RolesAllowed(USER) - @Description("Accepts (or not) a request to create a new run executing " - + "the given workflow.") - @Nonnull - Response submitWorkflow(@Nonnull Workflow workflow, - @Nonnull @Context UriInfo ui) throws NoUpdateException; - - /** - * Accepts (or not) a request to create a new run executing the workflow at - * the given location. - * - * @param workflowReference - * The wrapped URI to workflow document to execute. - * @param ui - * About the URI being POSTed to. - * @return A response to the POST describing what was created. - * @throws NoUpdateException - * If the POST failed. - * @throw NoCreateException If the workflow couldn't be read into the server - * or the engine rejects it. - */ - @POST - @Path(RUNS) - @Consumes(URI_LIST) - @RolesAllowed(USER) - @Description("Accepts a URL to a workflow to download and run. The URL " - + "must be hosted on a publicly-accessible service.") - @Nonnull - Response submitWorkflowByURL(@Nonnull List<URI> referenceList, - @Nonnull @Context UriInfo ui) throws NoCreateException, - NoUpdateException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(RUNS) - @Description("Produces the description of the operations on the " - + "collection of runs.") - Response runsOptions(); - - /** - * @return A description of the policies supported by this server. - */ - @Path(POL) - @Description("The policies supported by this server.") - @Nonnull - PolicyView getPolicyDescription(); - - /** - * Get a particular named run resource. - * - * @param runName - * The name of the run. - * @param uriInfo - * About the URI used to access this run. - * @return A RESTful delegate for the run. - * @throws UnknownRunException - * If the run handle is unknown to the current user. - */ - @Path(RUNS + "/{runName}") - @RolesAllowed(USER) - @Description("Get a particular named run resource to dispatch to.") - @Nonnull - TavernaServerRunREST getRunResource( - @Nonnull @PathParam("runName") String runName, - @Nonnull @Context UriInfo uriInfo) throws UnknownRunException; - - /** - * Factored out path names used in the {@link TavernaServerREST} interface - * and related places. - * - * @author Donal Fellows - */ - interface PathNames { - public static final String ROOT = "/"; - public static final String RUNS = "runs"; - public static final String POL = "policy"; - public static final String POL_CAPABILITIES = "capabilities"; - public static final String POL_RUN_LIMIT = "runLimit"; - public static final String POL_OP_LIMIT = "operatingLimit"; - public static final String POL_PERM_WF = "permittedWorkflows"; - public static final String POL_PERM_LIST = "permittedListenerTypes"; - public static final String POL_NOTIFIERS = "enabledNotificationFabrics"; - } - - /** - * Helper class for describing the server's user-facing management API via - * JAXB. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class ServerDescription extends VersionedElement { - /** - * References to the collection of runs (known about by the current - * user) in this server. - */ - public Uri runs; - /** - * Reference to the policy description part of this server. - */ - public Uri policy; - /** - * Reference to the Atom event feed produced by this server. - */ - public Uri feed; - /** - * Reference to the interaction feed for this server. - */ - public Uri interactionFeed; - - /** Make a blank server description. */ - public ServerDescription() { - } - - /** - * Make a description of the server. - * - * @param ui - * The factory for URIs. - */ - public ServerDescription(UriInfo ui, String interactionFeed) { - super(true); - String base = ui.getBaseUri().toString(); - runs = new Uri(ui, RUNS); - policy = new Uri(ui, false, POL); - feed = new Uri(java.net.URI.create(base.replaceFirst("/rest$", - "/feed"))); - if (interactionFeed != null && !interactionFeed.isEmpty()) - this.interactionFeed = new Uri( - java.net.URI.create(interactionFeed)); - } - } - - /** - * How to discover the publicly-visible policies supported by this server. - * - * @author Donal Fellows - */ - public interface PolicyView { - /** - * Describe the URIs in this view of the server's policies. - * - * @param ui - * About the URI used to retrieve the description. - * @return The description, which may be serialised as XML or JSON. - */ - @GET - @Path(ROOT) - @Produces({ XML, JSON }) - @Description("Describe the parts of this policy.") - @Nonnull - public PolicyDescription getDescription(@Nonnull @Context UriInfo ui); - - /** - * Gets the maximum number of simultaneous runs that the user may - * create. The <i>actual</i> number they can create may be lower than - * this. If this number is lower than the number they currently have, - * they will be unable to create any runs at all. - * - * @return The maximum number of existing runs. - */ - @GET - @Path(POL_RUN_LIMIT) - @Produces("text/plain") - @RolesAllowed(USER) - @Description("Gets the maximum number of simultaneous runs in any " - + "state that the user may create.") - @Nonnull - public int getMaxSimultaneousRuns(); - - /** - * Gets the maximum number of simultaneous - * {@linkplain org.taverna.server.master.common.Status.Operating - * operating} runs that the user may create. The <i>actual</i> number - * they can start may be lower than this. If this number is lower than - * the number they currently have, they will be unable to start any runs - * at all. - * - * @return The maximum number of operating runs. - */ - @GET - @Path(POL_OP_LIMIT) - @Produces("text/plain") - @RolesAllowed(USER) - @Description("Gets the maximum number of simultaneously operating " - + "runs that the user may have. Note that this is often a " - + "global limit; it does not represent a promise that a " - + "particular user may be able to have that many operating " - + "runs at once.") - public int getMaxOperatingRuns(); - - /** - * Gets the list of permitted workflows. Any workflow may be submitted - * if the list is empty, otherwise it must be one of the workflows on - * this list. - * - * @return The list of workflow documents. - */ - @GET - @Path(POL_PERM_WF) - @Produces({ XML, JSON }) - @RolesAllowed(USER) - @Description("Gets the list of permitted workflows.") - @Nonnull - public PermittedWorkflows getPermittedWorkflows(); - - /** - * Gets the list of permitted event listener types. All event listeners - * must be of a type described on this list. - * - * @return The types of event listeners allowed. - */ - @GET - @Path(POL_PERM_LIST) - @Produces({ XML, JSON }) - @RolesAllowed(USER) - @Description("Gets the list of permitted event listener types.") - @Nonnull - public PermittedListeners getPermittedListeners(); - - /** - * Gets the list of supported, enabled notification fabrics. Each - * corresponds (approximately) to a protocol, e.g., email. - * - * @return List of notifier names; each is the scheme of a notification - * destination URI. - */ - @GET - @Path(POL_NOTIFIERS) - @Produces({ XML, JSON }) - @RolesAllowed(USER) - @Description("Gets the list of supported, enabled notification " - + "fabrics. Each corresponds (approximately) to a protocol, " - + "e.g., email.") - @Nonnull - public EnabledNotificationFabrics getEnabledNotifiers(); - - @GET - @Path(POL_CAPABILITIES) - @Produces({ XML, JSON }) - @RolesAllowed(USER) - @Description("Gets a description of the capabilities supported by " - + "this installation of Taverna Server.") - @Nonnull - public CapabilityList getCapabilities(); - - /** - * A description of the parts of a server policy. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class PolicyDescription extends VersionedElement { - /** - * Where to go to find out about the maximum number of runs. - */ - public Uri runLimit; - /** - * Where to go to find out about the maximum number of operating - * runs. - */ - public Uri operatingLimit; - /** - * Where to go to find out about what workflows are allowed. - */ - public Uri permittedWorkflows; - /** - * Where to go to find out about what listeners are allowed. - */ - public Uri permittedListenerTypes; - /** - * How notifications may be sent. - */ - public Uri enabledNotificationFabrics; - - public Uri capabilities; - - /** Make a blank server description. */ - public PolicyDescription() { - } - - /** - * Make a server description. - * - * @param ui - * About the URI used to access this description. - */ - public PolicyDescription(UriInfo ui) { - super(true); - runLimit = new Uri(ui, false, POL_RUN_LIMIT); - operatingLimit = new Uri(ui, false, POL_OP_LIMIT); - permittedWorkflows = new Uri(ui, false, POL_PERM_WF); - permittedListenerTypes = new Uri(ui, false, POL_PERM_LIST); - enabledNotificationFabrics = new Uri(ui, false, POL_NOTIFIERS); - capabilities = new Uri(ui, false, POL_CAPABILITIES); - } - } - - /** - * A list of Taverna Server capabilities. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "capabilities") - @XmlType(name = "") - public static class CapabilityList { - @XmlElement(name = "capability", namespace = SERVER) - public List<Capability> capability = new ArrayList<>(); - } - } - - /** - * Helper class for describing the workflows that are allowed via JAXB. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class PermittedWorkflows { - /** The workflows that are permitted. */ - @XmlElement - public List<URI> workflow; - - /** - * Make an empty list of permitted workflows. - */ - public PermittedWorkflows() { - workflow = new ArrayList<>(); - } - - /** - * Make a list of permitted workflows. - * - * @param permitted - */ - public PermittedWorkflows(List<URI> permitted) { - if (permitted == null) - workflow = new ArrayList<>(); - else - workflow = new ArrayList<>(permitted); - } - } - - /** - * Helper class for describing the listener types that are allowed via JAXB. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class PermittedListeners { - /** The listener types that are permitted. */ - @XmlElement - public List<String> type; - - /** - * Make an empty list of permitted listener types. - */ - public PermittedListeners() { - type = new ArrayList<>(); - } - - /** - * Make a list of permitted listener types. - * - * @param listenerTypes - */ - public PermittedListeners(List<String> listenerTypes) { - type = listenerTypes; - } - } - - /** - * Helper class for describing the workflow runs. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class RunList { - /** The references to the workflow runs. */ - @XmlElement - public List<RunReference> run; - - /** - * Make an empty list of run references. - */ - public RunList() { - run = new ArrayList<>(); - } - - /** - * Make a list of references to workflow runs. - * - * @param runs - * The mapping of runs to describe. - * @param ub - * How to construct URIs to the runs. Must have already been - * secured as it needs to have its pattern applied. - */ - public RunList(Map<String, TavernaRun> runs, UriBuilder ub) { - run = new ArrayList<>(runs.size()); - for (String name : runs.keySet()) - run.add(new RunReference(name, ub)); - } - } - - /** - * Helper class for describing the listener types that are allowed via JAXB. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class EnabledNotificationFabrics { - /** The notification fabrics that are enabled. */ - @XmlElement - public List<String> notifier; - - /** - * Make an empty list of enabled notifiers. - */ - public EnabledNotificationFabrics() { - notifier = new ArrayList<>(); - } - - /** - * Make a list of enabled notifiers. - * - * @param enabledNodifiers - */ - public EnabledNotificationFabrics(List<String> enabledNodifiers) { - notifier = enabledNodifiers; - } - } - - /** - * The interface exposed by the Atom feed of events. - * - * @author Donal Fellows - */ - @RolesAllowed(USER) - public interface EventFeed { - /** - * @return the feed of events for the current user. - */ - @GET - @Path("/") - @Produces("application/atom+xml;type=feed") - @Description("Get an Atom feed for the user's events.") - @Nonnull - Feed getFeed(@Context UriInfo ui); - - /** - * @param id - * The identifier for a particular event. - * @return the details about the given event. - */ - @GET - @Path("{id}") - @Produces("application/atom+xml;type=entry") - @Description("Get a particular Atom event.") - @Nonnull - Entry getEvent(@Nonnull @PathParam("id") String id); - } - - /** - * A reference to a workflow hosted on some public HTTP server. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "workflowurl") - @XmlType(name = "WorkflowReference") - public static class WorkflowReference { - @XmlValue - @XmlSchemaType(name = "anyURI") - public URI url; - } -}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java b/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java deleted file mode 100644 index 2b328fd..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java +++ /dev/null @@ -1,797 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest; - -import static javax.ws.rs.core.UriBuilder.fromUri; -import static org.joda.time.format.ISODateTimeFormat.basicDateTime; -import static org.taverna.server.master.common.Roles.USER; -import static org.taverna.server.master.rest.handler.Scufl2DocumentHandler.SCUFL2; -import static org.taverna.server.master.interaction.InteractionFeedSupport.FEED_URL_DIR; -import static org.taverna.server.master.rest.ContentTypes.JSON; -import static org.taverna.server.master.rest.ContentTypes.ROBUNDLE; -import static org.taverna.server.master.rest.ContentTypes.TEXT; -import static org.taverna.server.master.rest.ContentTypes.XML; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.DIR; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.GENERATE_PROVENANCE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.IN; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.LISTEN; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.LOG; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.NAME; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.OUT; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.PROFILE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.ROOT; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.RUNBUNDLE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.SEC; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.STATUS; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.STDERR; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.STDOUT; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.T_CREATE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.T_EXPIRE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.T_FINISH; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.T_START; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.USAGE; -import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.WF; -import static org.taverna.server.master.rest.handler.T2FlowDocumentHandler.T2FLOW; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.security.RolesAllowed; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - -import org.apache.cxf.jaxrs.model.wadl.Description; -import org.joda.time.format.DateTimeFormatter; -import org.taverna.server.master.common.Namespaces; -import org.taverna.server.master.common.ProfileList; -import org.taverna.server.master.common.Status; -import org.taverna.server.master.common.Uri; -import org.taverna.server.master.common.VersionedElement; -import org.taverna.server.master.common.Workflow; -import org.taverna.server.master.exceptions.BadStateChangeException; -import org.taverna.server.master.exceptions.FilesystemAccessException; -import org.taverna.server.master.exceptions.NoDirectoryEntryException; -import org.taverna.server.master.exceptions.NoListenerException; -import org.taverna.server.master.exceptions.NoUpdateException; -import org.taverna.server.master.exceptions.NotOwnerException; -import org.taverna.server.master.interfaces.Listener; -import org.taverna.server.master.interfaces.TavernaRun; -import org.taverna.server.port_description.OutputDescription; - -/** - * This represents how a Taverna Server workflow run looks to a RESTful API. - * - * @author Donal Fellows. - */ -@Description("This represents how a Taverna Server workflow run looks to a " - + "RESTful API.") -@RolesAllowed(USER) -public interface TavernaServerRunREST { - /** - * Describes a workflow run. - * - * @param ui - * About the URI used to access this resource. - * @return The description. - */ - @GET - @Path(ROOT) - @Description("Describes a workflow run.") - @Produces({ XML, JSON }) - @Nonnull - public RunDescription getDescription(@Nonnull @Context UriInfo ui); - - /** - * Deletes a workflow run. - * - * @return An HTTP response to the deletion. - * @throws NoUpdateException - * If the user may see the handle but may not delete it. - */ - @DELETE - @Path(ROOT) - @Description("Deletes a workflow run.") - @Nonnull - public Response destroy() throws NoUpdateException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ROOT) - @Description("Produces the description of the run.") - Response runOptions(); - - /** - * Returns the workflow document used to create the workflow run. - * - * @return The workflow document. - */ - @GET - @Path(WF) - @Produces({ T2FLOW, SCUFL2, XML, JSON }) - @Description("Gives the workflow document used to create the workflow run.") - @Nonnull - public Workflow getWorkflow(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(WF) - @Description("Produces the description of the run workflow.") - Response workflowOptions(); - - /** Get the workflow name. */ - @GET - @Path(NAME) - @Produces(TEXT) - @Description("Gives the descriptive name of the workflow run.") - @Nonnull - public String getName(); - - /** - * Set the workflow name. - * - * @throws NoUpdateException - * If the user is not permitted to change the workflow. - */ - @PUT - @Path(NAME) - @Consumes(TEXT) - @Produces(TEXT) - @Description("Set the descriptive name of the workflow run. Note that " - + "this value may be arbitrarily truncated by the implementation.") - @Nonnull - public String setName(String name) throws NoUpdateException; - - /** Produce the workflow name HTTP operations. */ - @OPTIONS - @Path(NAME) - @Description("Produces the description of the operations on the run's " - + "descriptive name.") - @Nonnull - Response nameOptions(); - - /** - * Produces the name of the workflow's main profile. - * - * @return The main profile name, or the empty string if there is no such - * profile. - */ - @GET - @Path(PROFILE) - @Produces(TEXT) - @Description("Gives the name of the workflow's main profile, or the empty string if none is defined.") - @Nonnull - String getMainProfileName(); - - /** - * Get a description of the profiles supported by the workflow document used - * to create this run. - * - * @return A description of the supported profiles. - */ - @GET - @Path(PROFILE) - @Produces({ XML, JSON }) - @Description("Describes what profiles exist on the workflow.") - @Nonnull - ProfileList getProfiles(); - - /** Produce the workflow profile HTTP operations. */ - @OPTIONS - @Path(PROFILE) - @Description("Produces the description of the operations on the run's " - + "profile.") - @Nonnull - Response profileOptions(); - - /** - * Returns a resource that represents the workflow run's security - * properties. These may only be accessed by the owner. - * - * @return The security resource. - * @throws NotOwnerException - * If the accessing principal isn't the owning principal. - */ - @Path(SEC) - @Description("Access the workflow run's security.") - @Nonnull - public TavernaServerSecurityREST getSecurity() throws NotOwnerException; - - /** - * Returns the time when the workflow run becomes eligible for automatic - * deletion. - * - * @return When the run expires. - */ - @GET - @Path(T_EXPIRE) - @Produces(TEXT) - @Description("Gives the time when the workflow run becomes eligible for " - + "automatic deletion.") - @Nonnull - public String getExpiryTime(); - - /** - * Sets the time when the workflow run becomes eligible for automatic - * deletion. - * - * @param expiry - * When the run will expire. - * @return When the run will actually expire. - * @throws NoUpdateException - * If the current user is not permitted to manage the lifetime - * of the run. - */ - @PUT - @Path(T_EXPIRE) - @Consumes(TEXT) - @Produces(TEXT) - @Description("Sets the time when the workflow run becomes eligible for " - + "automatic deletion.") - @Nonnull - public String setExpiryTime(@Nonnull String expiry) - throws NoUpdateException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(T_EXPIRE) - @Description("Produces the description of the run expiry.") - Response expiryOptions(); - - /** - * Returns the time when the workflow run was created. - * - * @return When the run was first submitted to the server. - */ - @GET - @Path(T_CREATE) - @Produces(TEXT) - @Description("Gives the time when the workflow run was first submitted " - + "to the server.") - @Nonnull - public String getCreateTime(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(T_CREATE) - @Description("Produces the description of the run create time.") - Response createTimeOptions(); - - /** - * Returns the time when the workflow run was started (through a user-driven - * state change). - * - * @return When the run was started, or <tt>null</tt>. - */ - @GET - @Path(T_START) - @Produces(TEXT) - @Description("Gives the time when the workflow run was started, or an " - + "empty string if the run has not yet started.") - @Nonnull - public String getStartTime(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(T_START) - @Description("Produces the description of the run start time.") - Response startTimeOptions(); - - /** - * Returns the time when the workflow run was detected to have finished. - * - * @return When the run finished, or <tt>null</tt>. - */ - @GET - @Path(T_FINISH) - @Produces(TEXT) - @Description("Gives the time when the workflow run was first detected as " - + "finished, or an empty string if it has not yet finished " - + "(including if it has never started).") - @Nonnull - public String getFinishTime(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(T_FINISH) - @Description("Produces the description of the run finish time.") - Response finishTimeOptions(); - - /** - * Gets the current status of the workflow run. - * - * @return The status code. - */ - @GET - @Path(STATUS) - @Produces(TEXT) - @Description("Gives the current status of the workflow run.") - @Nonnull - public String getStatus(); - - /** - * Sets the status of the workflow run. This does nothing if the status code - * is the same as the run's current state. - * - * @param status - * The new status code. - * @return Description of what status the run is actually in, or a 202 to - * indicate that things are still changing. - * @throws NoUpdateException - * If the current user is not permitted to update the run. - * @throws BadStateChangeException - * If the state cannot be modified in the manner requested. - */ - @PUT - @Path(STATUS) - @Consumes(TEXT) - @Produces(TEXT) - @Description("Attempts to update the status of the workflow run.") - @Nonnull - public Response setStatus(@Nonnull String status) throws NoUpdateException, - BadStateChangeException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(STATUS) - @Description("Produces the description of the run status.") - Response statusOptions(); - - /** - * Get the working directory of this workflow run. - * - * @return A RESTful delegate for the working directory. - */ - @Path(DIR) - @Description("Get the working directory of this workflow run.") - @Nonnull - public TavernaServerDirectoryREST getWorkingDirectory(); - - /** - * Get the event listeners attached to this workflow run. - * - * @return A RESTful delegate for the list of listeners. - */ - @Path(LISTEN) - @Description("Get the event listeners attached to this workflow run.") - @Nonnull - public TavernaServerListenersREST getListeners(); - - /** - * Get a delegate for working with the inputs to this workflow run. - * - * @param ui - * About the URI used to access this resource. - * @return A RESTful delegate for the inputs. - */ - @Path(IN) - @Description("Get the inputs to this workflow run.") - @Nonnull - public TavernaServerInputREST getInputs(@Nonnull @Context UriInfo ui); - - /** - * Get the output Baclava file for this workflow run. - * - * @return The filename, or empty string to indicate that the outputs will - * be written to the <tt>out</tt> directory. - */ - @GET - @Path(OUT) - @Produces(TEXT) - @Description("Gives the Baclava file where output will be written; empty " - + "means use multiple simple files in the out directory.") - @Nonnull - public String getOutputFile(); - - /** - * Get a description of the outputs. - * - * @param ui - * About the URI used to access this operation. - * @return A description of the outputs (higher level than the filesystem). - * @throws BadStateChangeException - * If the run is in the {@link Status#Initialized Initialized} - * state. - * @throws FilesystemAccessException - * If problems occur when accessing the filesystem. - * @throws NoDirectoryEntryException - * If things are odd in the filesystem. - */ - @GET - @Path(OUT) - @Produces({ XML, JSON }) - @Description("Gives a description of the outputs, as currently understood") - @Nonnull - public OutputDescription getOutputDescription(@Nonnull @Context UriInfo ui) - throws BadStateChangeException, FilesystemAccessException, - NoDirectoryEntryException; - - /** - * Set the output Baclava file for this workflow run. - * - * @param filename - * The Baclava file to use, or empty to make the outputs be - * written to individual files in the <tt>out</tt> subdirectory - * of the working directory. - * @return The Baclava file as actually set. - * @throws NoUpdateException - * If the current user is not permitted to update the run. - * @throws FilesystemAccessException - * If the filename is invalid (starts with <tt>/</tt> or - * contains a <tt>..</tt> segment). - * @throws BadStateChangeException - * If the workflow is not in the Initialized state. - */ - @PUT - @Path(OUT) - @Consumes(TEXT) - @Produces(TEXT) - @Description("Sets the Baclava file where output will be written; empty " - + "means use multiple simple files in the out directory.") - @Nonnull - public String setOutputFile(@Nonnull String filename) - throws NoUpdateException, FilesystemAccessException, - BadStateChangeException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(OUT) - @Description("Produces the description of the run output.") - Response outputOptions(); - - /** - * Get a handle to the interaction feed. - * - * @return - */ - @Path(FEED_URL_DIR) - @Description("Access the interaction feed for the workflow run.") - @Nonnull - InteractionFeedREST getInteractionFeed(); - - /** - * @return The stdout for the workflow run, or empty string if the run has - * not yet started. - * @throws NoListenerException - */ - @GET - @Path(STDOUT) - @Description("Return the stdout for the workflow run.") - @Produces(TEXT) - @Nonnull - String getStdout() throws NoListenerException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(STDOUT) - @Description("Return the stdout for the workflow run.") - Response stdoutOptions(); - - /** - * @return The stderr for the workflow run, or empty string if the run has - * not yet started. - * @throws NoListenerException - */ - @GET - @Path(STDERR) - @Description("Return the stderr for the workflow run.") - @Produces(TEXT) - @Nonnull - String getStderr() throws NoListenerException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(STDERR) - @Description("Return the stderr for the workflow run.") - Response stderrOptions(); - - /** - * @return The usage record for the workflow run, wrapped in a Response, or - * "empty content" if the run has not yet finished. - * @throws NoListenerException - * @throws JAXBException - */ - @GET - @Path(USAGE) - @Description("Return the usage record for the workflow run.") - @Produces(XML) - @Nonnull - Response getUsage() throws NoListenerException, JAXBException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(USAGE) - @Description("Return the usage record for the workflow run.") - Response usageOptions(); - - /** - * @return The log for the workflow run, or empty string if the run has not - * yet started. - */ - @GET - @Path(LOG) - @Description("Return the log for the workflow run.") - @Produces(TEXT) - @Nonnull - Response getLogContents(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(LOG) - @Description("Return the log for the workflow run.") - Response logOptions(); - - /** - * @return The log for the workflow run, or empty string if the run has not - * yet started. - */ - @GET - @Path(RUNBUNDLE) - @Description("Return the run bundle for the workflow run.") - @Produces(ROBUNDLE) - @Nonnull - Response getRunBundle(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(RUNBUNDLE) - @Description("Return the run bundle for the workflow run.") - Response runBundleOptions(); - - /** - * @return Whether to create the run bundle for the workflow run. Only - * usefully set-able before the start of the run. - */ - @GET - @Path(GENERATE_PROVENANCE) - @Description("Whether to create the run bundle for the workflow run.") - @Produces(TEXT) - @Nonnull - boolean getGenerateProvenance(); - - /** - * @param provenanceFlag - * Whether to create the run bundle for the workflow run. Only - * usefully set-able before the start of the run. - * @return What it was actually set to. - * @throws NoUpdateException - */ - @PUT - @Path(GENERATE_PROVENANCE) - @Description("Whether to create the run bundle for the workflow run.") - @Consumes(TEXT) - @Produces(TEXT) - @Nonnull - boolean setGenerateProvenance(boolean provenanceFlag) throws NoUpdateException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(GENERATE_PROVENANCE) - @Description("Whether to create the run bundle for the workflow run.") - Response generateProvenanceOptions(); - - /** - * Factored out path names used in the {@link TavernaServerRunREST} - * interface and related places. - * - * @author Donal Fellows - */ - interface PathNames { - public static final String ROOT = "/"; - public static final String WF = "workflow"; - public static final String DIR = "wd"; - public static final String NAME = "name"; - public static final String T_EXPIRE = "expiry"; - public static final String T_CREATE = "createTime"; - public static final String T_START = "startTime"; - public static final String T_FINISH = "finishTime"; - public static final String STATUS = "status"; - public static final String IN = "input"; - public static final String OUT = "output"; - public static final String PROFILE = "profile"; - public static final String LISTEN = "listeners"; - public static final String SEC = "security"; - public static final String STDOUT = "stdout"; - public static final String STDERR = "stderr"; - public static final String USAGE = "usage"; - public static final String LOG = "log"; - public static final String RUNBUNDLE = "run-bundle"; - public static final String GENERATE_PROVENANCE = "generate-provenance"; - } - - /** - * The description of where everything is in a RESTful view of a workflow - * run. Done with JAXB. - * - * @author Donal Fellows - */ - @XmlRootElement - @XmlType(name = "") - public static class RunDescription extends VersionedElement { - /** The identity of the owner of the workflow run. */ - @XmlAttribute(namespace = Namespaces.SERVER_REST) - public String owner; - /** The description of the expiry. */ - public Expiry expiry; - /** The location of the creation workflow description. */ - public Uri creationWorkflow; - /** The location of the creation time property. */ - public Uri createTime; - /** The location of the start time property. */ - public Uri startTime; - /** The location of the finish time property. */ - public Uri finishTime; - /** The location of the status description. */ - public Uri status; - /** The location of the working directory. */ - public Uri workingDirectory; - /** The location of the inputs. */ - public Uri inputs; - /** The location of the Baclava output. */ - public Uri output; - /** The location of the security context. */ - public Uri securityContext; - /** The list of listeners. */ - public ListenerList listeners; - /** The location of the interaction feed. */ - public Uri interaction; - /** The name of the run. */ - public Uri name; - /** The stdout of the run. */ - public Uri stdout; - /** The stderr of the run. */ - public Uri stderr; - /** The usage record for the run. */ - public Uri usage; - /** The log from the run. */ - public Uri log; - /** The bundle describing the run. */ - @XmlElement(name = RUNBUNDLE) - public Uri runBundle; - /** Whether to generate a bundle describing the run. */ - @XmlElement(name = GENERATE_PROVENANCE) - public Uri generateProvenance; - - /** - * How to describe a run's expiry. - * - * @author Donal Fellows - */ - @XmlType(name = "") - public static class Expiry { - /** - * Where to go to read the exiry - */ - @XmlAttribute(name = "href", namespace = Namespaces.XLINK) - @XmlSchemaType(name = "anyURI") - public URI ref; - /** - * What the expiry currently is. - */ - @XmlValue - public String timeOfDeath; - - /** - * Make a blank expiry description. - */ - public Expiry() { - } - - private static DateTimeFormatter dtf; - - Expiry(TavernaRun r, UriInfo ui, String path, String... parts) { - ref = fromUri(new Uri(ui, true, path, parts).ref).build(); - if (dtf == null) - dtf = basicDateTime(); - timeOfDeath = dtf.print(r.getExpiry().getTime()); - } - } - - /** - * The description of a list of listeners attached to a run. - * - * @author Donal Fellows - */ - @XmlType(name = "") - public static class ListenerList extends Uri { - /** - * The references to the individual listeners. - */ - public List<Uri> listener; - - /** - * An empty description of listeners. - */ - public ListenerList() { - listener = new ArrayList<>(); - } - - /** - * @param r - * The run whose listeners we're talking about. - * @param ub - * Uri factory; must've been secured - */ - private ListenerList(TavernaRun r, UriBuilder ub) { - super(ub); - listener = new ArrayList<>(r.getListeners().size()); - UriBuilder pathUB = ub.clone().path("{name}"); - for (Listener l : r.getListeners()) - listener.add(new Uri(pathUB.build(l.getName()))); - } - - /** - * @param run - * The run whose listeners we're talking about. - * @param ui - * The source of information about URIs. - * @param path - * Where we are relative to the URI source. - * @param parts - * Anything required to fill out the path. - */ - ListenerList(TavernaRun run, UriInfo ui, String path, - String... parts) { - this(run, secure(fromUri(new Uri(ui, path, parts).ref))); - } - } - - /** - * An empty description of a run. - */ - public RunDescription() { - } - - /** - * A description of a particular run. - * - * @param run - * The run to describe. - * @param ui - * The factory for URIs. - */ - public RunDescription(TavernaRun run, UriInfo ui) { - super(true); - creationWorkflow = new Uri(ui, WF); - expiry = new Expiry(run, ui, T_EXPIRE); - status = new Uri(ui, STATUS); - workingDirectory = new Uri(ui, DIR); - listeners = new ListenerList(run, ui, LISTEN); - securityContext = new Uri(ui, SEC); - inputs = new Uri(ui, IN); - output = new Uri(ui, OUT); - createTime = new Uri(ui, T_CREATE); - startTime = new Uri(ui, T_START); - finishTime = new Uri(ui, T_FINISH); - interaction = new Uri(ui, FEED_URL_DIR); - name = new Uri(ui, NAME); - owner = run.getSecurityContext().getOwner().getName(); - stdout = new Uri(ui, STDOUT); - stderr = new Uri(ui, STDERR); - usage = new Uri(ui, USAGE); - log = new Uri(ui, LOG); - runBundle = new Uri(ui, RUNBUNDLE); - generateProvenance = new Uri(ui, GENERATE_PROVENANCE); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java b/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java deleted file mode 100644 index 73000e8..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java +++ /dev/null @@ -1,775 +0,0 @@ -/* - * Copyright (C) 2010-2012 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest; - -import static java.util.Collections.emptyList; -import static org.taverna.server.master.common.Namespaces.SERVER; -import static org.taverna.server.master.common.Namespaces.XLINK; -import static org.taverna.server.master.common.Roles.USER; -import static org.taverna.server.master.rest.ContentTypes.JSON; -import static org.taverna.server.master.rest.ContentTypes.TEXT; -import static org.taverna.server.master.rest.ContentTypes.XML; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.CREDS; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.ONE_CRED; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.ONE_PERM; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.ONE_TRUST; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.OWNER; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.PERMS; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.ROOT; -import static org.taverna.server.master.rest.TavernaServerSecurityREST.PathNames.TRUSTS; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; -import javax.annotation.security.RolesAllowed; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElements; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.XmlType; - -import org.apache.cxf.jaxrs.model.wadl.Description; -import org.taverna.server.master.common.Credential; -import org.taverna.server.master.common.Permission; -import org.taverna.server.master.common.Trust; -import org.taverna.server.master.common.Uri; -import org.taverna.server.master.common.VersionedElement; -import org.taverna.server.master.exceptions.BadStateChangeException; -import org.taverna.server.master.exceptions.InvalidCredentialException; -import org.taverna.server.master.exceptions.NoCredentialException; - -/** - * Manages the security of the workflow run. In general, only the owner of a run - * may access this resource. Many of these security-related resources may only - * be changed before the run is set to operating. - * - * @author Donal Fellows - */ -@RolesAllowed(USER) -@Description("Manages the security of the workflow run. In general, only the " - + "owner of a run may access this resource.") -public interface TavernaServerSecurityREST { - interface PathNames { - final String ROOT = "/"; - final String OWNER = "owner"; - final String CREDS = "credentials"; - final String ONE_CRED = CREDS + "/{id}"; - final String TRUSTS = "trusts"; - final String ONE_TRUST = TRUSTS + "/{id}"; - final String PERMS = "permissions"; - final String ONE_PERM = PERMS + "/{id}"; - } - - /** - * Gets a description of the security information supported by the workflow - * run. - * - * @param ui - * About the URI used to access this resource. - * @return A description of the security information. - */ - @GET - @Path(ROOT) - @Produces({ XML, JSON }) - @Description("Gives a description of the security information supported " - + "by the workflow run.") - @Nonnull - Descriptor describe(@Nonnull @Context UriInfo ui); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ROOT) - @Description("Produces the description of the run security.") - Response descriptionOptions(); - - /** - * Gets the identity of who owns the workflow run. - * - * @return The name of the owner of the run. - */ - @GET - @Path(OWNER) - @Produces(TEXT) - @Description("Gives the identity of who owns the workflow run.") - @Nonnull - String getOwner(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(OWNER) - @Description("Produces the description of the run owner.") - Response ownerOptions(); - - /* - * @PUT @Path("/") @Consumes(ContentTypes.BYTES) @CallCounted @Nonnull - * public void set(@Nonnull InputStream contents, @Nonnull @Context UriInfo - * ui); - */ - - /** - * @return A list of credentials supplied to this workflow run. - */ - @GET - @Path(CREDS) - @Produces({ XML, JSON }) - @Description("Gives a list of credentials supplied to this workflow run.") - @Nonnull - CredentialList listCredentials(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(CREDS) - @Description("Produces the description of the run credentials' operations.") - Response credentialsOptions(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ONE_CRED) - @Description("Produces the description of one run credential's operations.") - Response credentialOptions(@PathParam("id") String id); - - /** - * Describe a particular credential. - * - * @param id - * The id of the credential to fetch. - * @return The description of the credential. - * @throws NoCredentialException - * If the credential doesn't exist. - */ - @GET - @Path(ONE_CRED) - @Produces({ XML, JSON }) - @Description("Describes a particular credential.") - @Nonnull - CredentialHolder getParticularCredential(@Nonnull @PathParam("id") String id) - throws NoCredentialException; - - /** - * Update a particular credential. - * - * @param id - * The id of the credential to update. - * @param c - * The details of the credential to use in the update. - * @param ui - * Information about the URI used to access this resource. - * @return Description of the updated credential. - * @throws InvalidCredentialException - * If the credential description isn't valid. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @PUT - @Path(ONE_CRED) - @Consumes({ XML, JSON }) - @Produces({ XML, JSON }) - @Description("Updates a particular credential.") - @Nonnull - CredentialHolder setParticularCredential( - @Nonnull @PathParam("id") String id, @Nonnull CredentialHolder c, - @Nonnull @Context UriInfo ui) throws InvalidCredentialException, - BadStateChangeException; - - /** - * Adds a new credential. - * - * @param c - * The details of the credential to create. - * @param ui - * Information about the URI used to access this resource. - * @return Description of the created credential. - * @throws InvalidCredentialException - * If the credential description isn't valid. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @POST - @Path(CREDS) - @Consumes({ XML, JSON }) - @Description("Creates a new credential.") - @Nonnull - Response addCredential(@Nonnull CredentialHolder c, - @Nonnull @Context UriInfo ui) throws InvalidCredentialException, - BadStateChangeException; - - /** - * Deletes all credentials associated with a run. - * - * @param ui - * Information about the URI used to access this resource. - * @return A characterisation of a successful delete. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @DELETE - @Path(CREDS) - @Description("Deletes all credentials.") - @Nonnull - Response deleteAllCredentials(@Nonnull @Context UriInfo ui) - throws BadStateChangeException; - - /** - * Deletes one credential associated with a run. - * - * @param id - * The identity of the credential to delete. - * @param ui - * Information about the URI used to access this resource. - * @return A characterisation of a successful delete. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @DELETE - @Path(ONE_CRED) - @Description("Deletes a particular credential.") - @Nonnull - Response deleteCredential(@Nonnull @PathParam("id") String id, - @Nonnull @Context UriInfo ui) throws BadStateChangeException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(TRUSTS) - @Description("Produces the description of the run trusted certificates' " - + "operations.") - Response trustsOptions(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ONE_TRUST) - @Description("Produces the description of one run trusted certificate's " - + "operations.") - Response trustOptions(@PathParam("id") String id); - - /** - * @return A list of trusted identities supplied to this workflow run. - */ - @GET - @Path(TRUSTS) - @Produces({ XML, JSON }) - @Description("Gives a list of trusted identities supplied to this " - + "workflow run.") - @Nonnull - TrustList listTrusted(); - - /** - * Describe a particular trusted identity. - * - * @param id - * The id of the trusted identity to fetch. - * @return The description of the trusted identity. - * @throws NoCredentialException - * If the trusted identity doesn't exist. - */ - @GET - @Path(ONE_TRUST) - @Produces({ XML, JSON }) - @Description("Describes a particular trusted identity.") - @Nonnull - Trust getParticularTrust(@Nonnull @PathParam("id") String id) - throws NoCredentialException; - - /** - * Update a particular trusted identity. - * - * @param id - * The id of the trusted identity to update. - * @param t - * The details of the trusted identity to use in the update. - * @param ui - * Information about the URI used to access this resource. - * @return Description of the updated trusted identity. - * @throws InvalidCredentialException - * If the trusted identity description isn't valid. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @PUT - @Path(ONE_TRUST) - @Consumes({ XML, JSON }) - @Produces({ XML, JSON }) - @Description("Updates a particular trusted identity.") - @Nonnull - Trust setParticularTrust(@Nonnull @PathParam("id") String id, - @Nonnull Trust t, @Nonnull @Context UriInfo ui) - throws InvalidCredentialException, BadStateChangeException; - - /** - * Adds a new trusted identity. - * - * @param t - * The details of the trusted identity to create. - * @param ui - * Information about the URI used to access this resource. - * @return Description of the created trusted identity. - * @throws InvalidCredentialException - * If the trusted identity description isn't valid. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @POST - @Path(TRUSTS) - @Consumes({ XML, JSON }) - @Description("Adds a new trusted identity.") - @Nonnull - Response addTrust(@Nonnull Trust t, @Nonnull @Context UriInfo ui) - throws InvalidCredentialException, BadStateChangeException; - - /** - * Deletes all trusted identities associated with a run. - * - * @param ui - * Information about the URI used to access this resource. - * @return A characterisation of a successful delete. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @DELETE - @Path(TRUSTS) - @Description("Deletes all trusted identities.") - @Nonnull - Response deleteAllTrusts(@Nonnull @Context UriInfo ui) - throws BadStateChangeException; - - /** - * Deletes one trusted identity associated with a run. - * - * @param id - * The identity of the trusted identity to delete. - * @param ui - * Information about the URI used to access this resource. - * @return A characterisation of a successful delete. - * @throws BadStateChangeException - * If the workflow run is not in the initialising state. - */ - @DELETE - @Path(ONE_TRUST) - @Description("Deletes a particular trusted identity.") - @Nonnull - Response deleteTrust(@Nonnull @PathParam("id") String id, - @Nonnull @Context UriInfo ui) throws BadStateChangeException; - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(PERMS) - @Description("Produces the description of the run permissions' operations.") - Response permissionsOptions(); - - /** Get an outline of the operations supported. */ - @OPTIONS - @Path(ONE_PERM) - @Description("Produces the description of one run permission's operations.") - Response permissionOptions(@PathParam("id") String id); - - /** - * @return A list of (non-default) permissions associated with this workflow - * run. - * @param ui - * Information about the URI used to access this resource. - */ - @GET - @Path(PERMS) - @Produces({ XML, JSON }) - @Description("Gives a list of all non-default permissions associated with " - + "the enclosing workflow run. By default, nobody has any access " - + "at all except for the owner of the run.") - @Nonnull - PermissionsDescription describePermissions(@Nonnull @Context UriInfo ui); - - /** - * Describe the particular permission granted to a user. - * - * @param id - * The name of the user whose permissions are to be described. - * @return The permission they are granted. - */ - @GET - @Path(ONE_PERM) - @Produces(TEXT) - @Description("Describes the permission granted to a particular user.") - @Nonnull - Permission describePermission(@Nonnull @PathParam("id") String id); - - /** - * Update the permission granted to a user. - * - * @param id - * The name of the user whose permissions are to be updated. Note - * that the owner always has full permissions. - * @param perm - * The permission level to set. - * @return The permission level that has actually been set. - */ - @PUT - @Consumes(TEXT) - @Produces(TEXT) - @Path(ONE_PERM) - @Description("Updates the permissions granted to a particular user.") - @Nonnull - Permission setPermission(@Nonnull @PathParam("id") String id, - @Nonnull Permission perm); - - /** - * Delete the permissions associated with a user, which restores them to the - * default (no access unless they are the owner or have admin privileges). - * - * @param id - * The name of the user whose permissions are to be revoked. - * @param ui - * Information about the URI used to access this resource. - * @return An indication that the delete has been successful (or not). - */ - @DELETE - @Path(ONE_PERM) - @Description("Deletes (by resetting to default) the permissions " - + "associated with a particular user.") - @Nonnull - Response deletePermission(@Nonnull @PathParam("id") String id, - @Nonnull @Context UriInfo ui); - - /** - * Manufacture a permission setting for a previously-unknown user. - * - * @param desc - * A description of the name of the user and the permission level - * to grant them. - * @param ui - * Information about the URI used to access this resource. - * @return An indication that the create has been successful (or not). - */ - @POST - @Path(PERMS) - @Consumes({ XML, JSON }) - @Description("Creates a new assignment of permissions to a particular user.") - @Nonnull - Response makePermission(@Nonnull PermissionDescription desc, - @Nonnull @Context UriInfo ui); - - /** - * A description of the security resources associated with a workflow run. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "securityDescriptor") - @XmlType(name = "SecurityDescriptor") - public static final class Descriptor extends VersionedElement { - /** The identity of the owner of the enclosing workflow run. */ - @XmlElement - public String owner; - /** Where to get the permissions on the run. */ - @XmlElement - public Uri permissions; - - /** Characterisation of the credentials attached to the run. */ - @XmlElement - public Credentials credentials; - /** Characterisation of the trusted certificates attached to the run. */ - @XmlElement - public Trusts trusts; - - public Descriptor() { - } - - /** - * Initialise a description of the security context. - * - * @param ub - * How to build URIs. - * @param owner - * Who owns the context. - * @param credential - * The credentials associated with the context. - * @param trust - * The trusted certificates associated with the context. - */ - public Descriptor(@Nonnull UriBuilder ub, @Nonnull String owner, - @Nonnull Credential[] credential, @Nonnull Trust[] trust) { - super(true); - this.owner = owner; - this.permissions = new Uri(ub, PERMS); - this.credentials = new Credentials(new Uri(ub, CREDS).ref, - credential); - this.trusts = new Trusts(new Uri(ub, TRUSTS).ref, trust); - } - - /** - * A description of credentials associated with a workflow run. - * - * @author Donal Fellows - */ - @XmlType(name = "CredentialCollection") - public static final class Credentials { - /** Reference to the collection of credentials */ - @XmlAttribute(name = "href", namespace = XLINK) - @XmlSchemaType(name = "anyURI") - public URI href; - /** Descriptions of the credentials themselves. */ - @XmlElement - public List<CredentialHolder> credential = new ArrayList<>(); - - public Credentials() { - } - - /** - * Initialise a description of the credentials. - * - * @param uri - * the URI of the collection. - * @param credential - * The credentials in the collection. - */ - public Credentials(@Nonnull URI uri, - @Nonnull Credential[] credential) { - this.href = uri; - for (Credential c : credential) - this.credential.add(new CredentialHolder(c)); - } - } - - /** - * A description of trusted certificates associated with a workflow run. - * - * @author Donal Fellows - */ - @XmlType(name = "TrustCollection") - public static final class Trusts { - /** Reference to the collection of trusted certs */ - @XmlAttribute(name = "href", namespace = XLINK) - @XmlSchemaType(name = "anyURI") - public URI href; - /** Descriptions of the trusted certs themselves. */ - @XmlElement - public Trust[] trust; - - public Trusts() { - } - - /** - * Initialise a description of the trusted certificates. - * - * @param uri - * the URI of the collection. - * @param trust - * The trusted certificates in the collection. - */ - public Trusts(@Nonnull URI uri, @Nonnull Trust[] trust) { - this.href = uri; - this.trust = trust.clone(); - } - } - } - - /** - * A container for a credential, used to work around issues with type - * inference in CXF's REST service handling and JAXB. - * - * @see Credential.KeyPair - * @see Credential.Password - * @author Donal Fellows - */ - @XmlRootElement(name = "credential") - @XmlType(name = "Credential") - public static final class CredentialHolder { - /** - * The credential inside this holder. - */ - @XmlElements({ - @XmlElement(name = "keypair", namespace = SERVER, type = Credential.KeyPair.class, required = true), - @XmlElement(name = "userpass", namespace = SERVER, type = Credential.Password.class, required = true) }) - public Credential credential; - - public CredentialHolder() { - } - - public CredentialHolder(Credential credential) { - this.credential = credential; - } - - /** - * Convenience accessor function. - * - * @return The keypair credential held in this holder. - */ - @XmlTransient - public Credential.KeyPair getKeypair() { - return (Credential.KeyPair) this.credential; - } - - /** - * Convenience accessor function. - * - * @return The userpass credential held in this holder. - */ - @XmlTransient - public Credential.Password getUserpass() { - return (Credential.Password) this.credential; - } - } - - /** - * A simple list of credential descriptions. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "credentials") - public static final class CredentialList extends VersionedElement { - /** The descriptions of the credentials */ - @XmlElement - @Nonnull - public List<CredentialHolder> credential = new ArrayList<>(); - - public CredentialList() { - } - - /** - * Initialise the list of credentials. - * - * @param credential - * The descriptions of individual credentials. - */ - public CredentialList(@Nonnull Credential[] credential) { - super(true); - for (Credential c : credential) - this.credential.add(new CredentialHolder(c)); - } - } - - /** - * A simple list of trusted certificate descriptions. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "trustedIdentities") - public static final class TrustList extends VersionedElement { - /** The descriptions of the trusted certificates */ - @XmlElement - public Trust[] trust; - - public TrustList() { - } - - /** - * Initialise the list of trusted certificates. - * - * @param trust - * The descriptions of individual certificates. - */ - public TrustList(@Nonnull Trust[] trust) { - super(true); - this.trust = trust.clone(); - } - } - - /** - * A description of the permissions granted to others by the owner of a - * workflow run. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "permissionsDescriptor") - public static class PermissionsDescription extends VersionedElement { - /** - * A description of the permissions granted to one user by the owner of - * a workflow run. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "userPermission") - public static class LinkedPermissionDescription extends Uri { - /** Who is this granted to? */ - @XmlElement - public String userName; - /** What are they granted? */ - @XmlElement - public Permission permission; - - public LinkedPermissionDescription() { - } - - /** - * Initialise a description of one user's permissions. - * - * @param ub - * How to build the URI to this permission. Already - * secured. - * @param userName - * Who this relates to. - * @param permission - * What permission is granted. - * @param strings - * Parameters to the URI builder. - */ - LinkedPermissionDescription(@Nonnull UriBuilder ub, - @Nonnull String userName, @Nonnull Permission permission, - String... strings) { - super(ub, strings); - this.userName = userName; - this.permission = permission; - } - } - - /** List of descriptions of permissions. */ - @XmlElement - public List<LinkedPermissionDescription> permission; - - public PermissionsDescription() { - permission = emptyList(); - } - - /** - * Initialise the description of a collection of permissions. - * - * @param ub - * How to build URIs to this collection. Must have already - * been secured. - * @param permissionMap - * The permissions to describe. - */ - public PermissionsDescription(@Nonnull UriBuilder ub, - @Nonnull Map<String, Permission> permissionMap) { - permission = new ArrayList<>(); - List<String> userNames = new ArrayList<>(permissionMap.keySet()); - Collections.sort(userNames); - for (String user : userNames) - permission.add(new LinkedPermissionDescription(ub, user, - permissionMap.get(user), user)); - } - } - - /** - * An instruction to update the permissions for a user. - * - * @author Donal Fellows - */ - @XmlRootElement(name = "permissionUpdate") - public static class PermissionDescription { - /** Who to set the permission for? */ - @XmlElement - public String userName; - /** What permission to grant them? */ - @XmlElement - public Permission permission; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java deleted file mode 100644 index 8b9c75f..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest.handler; - -import static javax.ws.rs.core.Response.Status.FORBIDDEN; - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; - -import org.springframework.security.access.AccessDeniedException; - -public class AccessDeniedHandler extends HandlerCore implements - ExceptionMapper<AccessDeniedException> { - @Override - public Response toResponse(AccessDeniedException exception) { - return respond(FORBIDDEN, exception); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadInputPortNameHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadInputPortNameHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadInputPortNameHandler.java deleted file mode 100644 index 254382b..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadInputPortNameHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest.handler; - -import static javax.ws.rs.core.Response.Status.NOT_FOUND; - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -import org.taverna.server.master.exceptions.BadInputPortNameException; - -@Provider -public class BadInputPortNameHandler extends HandlerCore implements - ExceptionMapper<BadInputPortNameException> { - @Override - public Response toResponse(BadInputPortNameException exn) { - return respond(NOT_FOUND, exn); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadPropertyValueHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadPropertyValueHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadPropertyValueHandler.java deleted file mode 100644 index 6ded568..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadPropertyValueHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest.handler; - -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -import org.taverna.server.master.exceptions.BadPropertyValueException; - -@Provider -public class BadPropertyValueHandler extends HandlerCore implements - ExceptionMapper<BadPropertyValueException> { - @Override - public Response toResponse(BadPropertyValueException exn) { - return respond(BAD_REQUEST, exn); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadStateChangeHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadStateChangeHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadStateChangeHandler.java deleted file mode 100644 index 9501923..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/BadStateChangeHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest.handler; - -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -import org.taverna.server.master.exceptions.BadStateChangeException; - -@Provider -public class BadStateChangeHandler extends HandlerCore implements - ExceptionMapper<BadStateChangeException> { - @Override - public Response toResponse(BadStateChangeException exn) { - return respond(BAD_REQUEST, exn); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/EntryHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/EntryHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/EntryHandler.java deleted file mode 100644 index 20d9f56..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/EntryHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.taverna.server.master.rest.handler; - -import static java.util.Arrays.asList; -import static java.util.Collections.singletonMap; -import static javax.ws.rs.core.Response.notAcceptable; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.nio.charset.Charset; -import java.nio.charset.IllegalCharsetNameException; -import java.nio.charset.UnsupportedCharsetException; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Variant; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import org.apache.abdera.Abdera; -import org.apache.abdera.model.Document; -import org.apache.abdera.model.Entry; -import org.apache.abdera.parser.Parser; -import org.apache.abdera.writer.Writer; -import org.springframework.beans.factory.annotation.Required; - -@Provider -@Produces({ "application/atom+xml", "application/atom+xml;type=entry" }) -@Consumes({ "application/atom+xml", "application/atom+xml;type=entry" }) -public class EntryHandler implements MessageBodyWriter<Entry>, - MessageBodyReader<Entry> { - private static final String ENC = "UTF-8"; - private static final MediaType ENTRY = new MediaType("application", - "atom+xml", singletonMap("type", "entry")); - private static final Variant VARIANT = new Variant(ENTRY, (String) null, - ENC); - private static final Charset UTF8 = Charset.forName(ENC); - - @Required - public void setAbdera(Abdera abdera) { - parser = abdera.getParser(); - writer = abdera.getWriterFactory().getWriter("prettyxml"); - } - - private Parser parser; - private Writer writer; - - @Override - public boolean isReadable(Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - if (!Entry.class.isAssignableFrom(type)) - return false; - if (!ENTRY.isCompatible(mediaType)) - return false; - if (mediaType.getParameters().containsKey("type")) - return "entry".equalsIgnoreCase(mediaType.getParameters().get( - "type")); - return true; - } - - @Override - public Entry readFrom(Class<Entry> type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap<String, String> httpHeaders, InputStream entityStream) - throws IOException, WebApplicationException { - Charset cs = UTF8; - try { - String charset = mediaType.getParameters().get("charset"); - if (charset != null) - cs = Charset.forName(charset); - } catch (IllegalCharsetNameException e) { - throw new WebApplicationException(notAcceptable(asList(VARIANT)) - .entity("bad charset name").build()); - } catch (UnsupportedCharsetException e) { - throw new WebApplicationException(notAcceptable(asList(VARIANT)) - .entity("unsupportd charset name").build()); - } - try { - Document<Entry> doc = parser.parse(new InputStreamReader( - entityStream, cs)); - if (!Entry.class.isAssignableFrom(doc.getRoot().getClass())) { - throw new WebApplicationException( - notAcceptable(asList(VARIANT)).entity( - "not really a feed entry").build()); - } - return doc.getRoot(); - } catch (ClassCastException e) { - throw new WebApplicationException(notAcceptable(asList(VARIANT)) - .entity("not really a feed entry").build()); - - } - } - - @Override - public boolean isWriteable(Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - if (!Entry.class.isAssignableFrom(type)) - return false; - if (!ENTRY.isCompatible(mediaType)) - return false; - if (mediaType.getParameters().containsKey("type")) - return "entry".equalsIgnoreCase(mediaType.getParameters().get( - "type")); - return true; - } - - @Override - public long getSize(Entry t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - public void writeTo(Entry t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap<String, Object> httpHeaders, - OutputStream entityStream) throws IOException, - WebApplicationException { - httpHeaders.putSingle("Content-Type", ENTRY.toString() + ";charset=" - + ENC); - writer.writeTo(t, new OutputStreamWriter(entityStream, UTF8)); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FeedHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FeedHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FeedHandler.java deleted file mode 100644 index 7c17f5c..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FeedHandler.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.taverna.server.master.rest.handler; - -import static java.util.Collections.singletonMap; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import org.apache.abdera.Abdera; -import org.apache.abdera.model.Feed; -import org.apache.abdera.writer.Writer; -import org.springframework.beans.factory.annotation.Required; - -@Provider -@Produces({ "application/atom+xml", "application/atom+xml;type=feed" }) -public class FeedHandler implements MessageBodyWriter<Feed> { - private static final MediaType FEED = new MediaType("application", - "atom+xml", singletonMap("type", "feed")); - private static final String ENC = "UTF-8"; - - @Required - public void setAbdera(Abdera abdera) { - writer = abdera.getWriterFactory().getWriter("prettyxml"); - } - - private Writer writer; - - @Override - public boolean isWriteable(Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - if (!Feed.class.isAssignableFrom(type)) - return false; - if (!FEED.isCompatible(mediaType)) - return false; - if (mediaType.getParameters().containsKey("type")) - return "feed".equalsIgnoreCase(mediaType.getParameters() - .get("type")); - return true; - } - - @Override - public long getSize(Feed t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - public void writeTo(Feed t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap<String, Object> httpHeaders, - OutputStream entityStream) throws IOException, - WebApplicationException { - httpHeaders.putSingle("Content-Type", FEED.toString() + ";charset=" - + ENC); - writer.writeTo(t, new OutputStreamWriter(entityStream, ENC)); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileConcatenationHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileConcatenationHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileConcatenationHandler.java deleted file mode 100644 index ab18d73..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileConcatenationHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.taverna.server.master.rest.handler; - -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; - -import org.springframework.beans.factory.annotation.Required; -import org.taverna.server.master.FileConcatenation; -import org.taverna.server.master.exceptions.FilesystemAccessException; -import org.taverna.server.master.interfaces.File; - -public class FileConcatenationHandler implements - MessageBodyWriter<FileConcatenation> { - /** How much to pull from the worker in one read. */ - private int maxChunkSize; - - /** - * @param maxChunkSize - * How much to pull from the worker in one read. - */ - @Required - public void setMaxChunkSize(int maxChunkSize) { - this.maxChunkSize = maxChunkSize; - } - - @Override - public boolean isWriteable(Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return type.isAssignableFrom(FileConcatenation.class); - } - - @Override - public long getSize(FileConcatenation fc, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return fc.size(); - } - - @Override - public void writeTo(FileConcatenation fc, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap<String, Object> httpHeaders, - OutputStream entityStream) throws IOException { - for (File f : fc) - try { - byte[] buffer; - for (int off = 0; true ; off += buffer.length) { - buffer = f.getContents(off, maxChunkSize); - if (buffer == null || buffer.length == 0) - break; - entityStream.write(buffer); - } - } catch (FilesystemAccessException e) { - // Ignore/skip to next file - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileMessageHandler.java ---------------------------------------------------------------------- diff --git a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileMessageHandler.java b/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileMessageHandler.java deleted file mode 100644 index 0aeb816..0000000 --- a/server-webapp/src/main/java/org/taverna/server/master/rest/handler/FileMessageHandler.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2010-2011 The University of Manchester - * - * See the file "LICENSE" for license terms. - */ -package org.taverna.server.master.rest.handler; - -import static org.apache.commons.logging.LogFactory.getLog; - -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import org.apache.commons.logging.Log; -import org.taverna.server.master.exceptions.FilesystemAccessException; -import org.taverna.server.master.interfaces.File; - -/** - * How to write out a File object with JAX-RS. - * - * @author Donal Fellows - */ -@Provider -public class FileMessageHandler implements MessageBodyWriter<File> { - private Log log = getLog("Taverna.Server.Webapp"); - /** How much to pull from the worker in one read. */ - private int maxChunkSize; - - /** - * @param maxChunkSize - * How much to pull from the worker in one read. - */ - public void setMaxChunkSize(int maxChunkSize) { - this.maxChunkSize = maxChunkSize; - } - - @Override - public boolean isWriteable(Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return File.class.isAssignableFrom(type); - } - - @Override - public long getSize(File t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - try { - return t.getSize(); // Is it really raw bytes? - } catch (FilesystemAccessException e) { - log.info("failed to get file length", e); - return -1; - } - } - - @Override - public void writeTo(File t, Class<?> type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap<String, Object> httpHeaders, - OutputStream entityStream) throws IOException, - WebApplicationException { - try { - int off = 0; - while (true) { - byte[] buffer = t.getContents(off, maxChunkSize); - if (buffer == null || buffer.length == 0) - break; - entityStream.write(buffer); - off += buffer.length; - } - } catch (FilesystemAccessException e) { - throw new IOException("problem when reading file", e); - } - } -}
