You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2018/01/09 23:30:27 UTC
[11/42] incubator-taverna-server git commit: package org.taverna ->
org.apache.taverna
http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/00397eff/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerListenersREST.java
----------------------------------------------------------------------
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerListenersREST.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerListenersREST.java
deleted file mode 100644
index e554997..0000000
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerListenersREST.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- */
-package org.taverna.server.master.rest;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import 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 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.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.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchemaType;
-import javax.xml.bind.annotation.XmlType;
-
-import org.apache.cxf.jaxrs.model.wadl.Description;
-import org.taverna.server.master.common.Uri;
-import org.taverna.server.master.common.VersionedElement;
-import org.taverna.server.master.exceptions.NoListenerException;
-import org.taverna.server.master.exceptions.NoUpdateException;
-import org.taverna.server.master.interfaces.Listener;
-
-/**
- * This represents <i>all</i> the event listeners attached to a workflow run.
- *
- * @author Donal Fellows
- * @see TavernaServerListenerREST
- */
-@RolesAllowed(USER)
-@Description("This represents all the event listeners attached to a workflow "
- + "run.")
-public interface TavernaServerListenersREST {
- /**
- * Get the listeners installed in the workflow run.
- *
- * @param ui
- * About how this method was called.
- * @return A list of descriptions of listeners.
- */
- @GET
- @Path("/")
- @Produces({ XML, JSON })
- @Description("Get the listeners installed in the workflow run.")
- @Nonnull
- Listeners getDescription(@Nonnull @Context UriInfo ui);
-
- /**
- * Add a new event listener to the named workflow run.
- *
- * @param typeAndConfiguration
- * What type of run should be created, and how should it be
- * configured.
- * @param ui
- * About how this method was called.
- * @return An HTTP response to the creation request.
- * @throws NoUpdateException
- * If the user is not permitted to update the run.
- * @throws NoListenerException
- * If no listener with the given type exists, or if the
- * configuration is unacceptable in some way.
- */
- @POST
- @Path("/")
- @Consumes({ XML, JSON })
- @Description("Add a new event listener to the named workflow run.")
- @Nonnull
- Response addListener(@Nonnull ListenerDefinition typeAndConfiguration,
- @Nonnull @Context UriInfo ui) throws NoUpdateException,
- NoListenerException;
-
- /** Get an outline of the operations supported. */
- @OPTIONS
- @Path("/")
- @Description("Produces the description of the run listeners' operations.")
- Response listenersOptions();
-
- /**
- * Resolve a particular listener from its name.
- *
- * @param name
- * The name of the listener to look up.
- * @return The listener's delegate in the REST world.
- * @throws NoListenerException
- * If no listener with the given name exists.
- */
- @Path("{name}")
- @Description("Resolve a particular listener from its name.")
- @Nonnull
- TavernaServerListenerREST getListener(
- @Nonnull @PathParam("name") String name) throws NoListenerException;
-
- /**
- * This represents a single event listener attached to a workflow run.
- *
- * @author Donal Fellows
- * @see TavernaServerListenersREST
- * @see Property
- */
- @RolesAllowed(USER)
- @Description("This represents a single event listener attached to a "
- + "workflow run.")
- public interface TavernaServerListenerREST {
- /**
- * Get the description of this listener.
- *
- * @param ui
- * Information about this request.
- * @return A description document.
- */
- @GET
- @Path("/")
- @Produces({ XML, JSON })
- @Description("Get the description of this listener.")
- @Nonnull
- ListenerDescription getDescription(@Nonnull @Context UriInfo ui);
-
- /** Get an outline of the operations supported. */
- @OPTIONS
- @Path("/")
- @Description("Produces the description of one run listener's operations.")
- Response listenerOptions();
-
- /**
- * Get the configuration for the given event listener that is attached
- * to a workflow run.
- *
- * @return The configuration of the listener.
- */
- @GET
- @Path("configuration")
- @Produces(TEXT)
- @Description("Get the configuration for the given event listener that "
- + "is attached to a workflow run.")
- @Nonnull
- String getConfiguration();
-
- /** Get an outline of the operations supported. */
- @OPTIONS
- @Path("configuration")
- @Description("Produces the description of one run listener's "
- + "configuration's operations.")
- Response configurationOptions();
-
- /**
- * Get the list of properties supported by a given event listener
- * attached to a workflow run.
- *
- * @param ui
- * Information about this request.
- * @return The list of property names.
- */
- @GET
- @Path("properties")
- @Produces({ XML, JSON })
- @Description("Get the list of properties supported by a given event "
- + "listener attached to a workflow run.")
- @Nonnull
- Properties getProperties(@Nonnull @Context UriInfo ui);
-
- /** Get an outline of the operations supported. */
- @OPTIONS
- @Path("properties")
- @Description("Produces the description of one run listener's "
- + "properties' operations.")
- Response propertiesOptions();
-
- /**
- * Get an object representing a particular property.
- *
- * @param propertyName
- * @return The property delegate.
- * @throws NoListenerException
- * If there is no such property.
- */
- @Path("properties/{propertyName}")
- @Description("Get an object representing a particular property.")
- @Nonnull
- Property getProperty(
- @Nonnull @PathParam("propertyName") String propertyName)
- throws NoListenerException;
- }
-
- /**
- * This represents a single property attached of an event listener.
- *
- * @author Donal Fellows
- */
- @RolesAllowed(USER)
- @Description("This represents a single property attached of an event "
- + "listener.")
- public interface Property {
- /**
- * Get the value of the particular property of an event listener
- * attached to a workflow run.
- *
- * @return The value of the property.
- */
- @GET
- @Path("/")
- @Produces(TEXT)
- @Description("Get the value of the particular property of an event "
- + "listener attached to a workflow run.")
- @Nonnull
- String getValue();
-
- /**
- * Set the value of the particular property of an event listener
- * attached to a workflow run. Changing the value of the property may
- * cause the listener to alter its behaviour significantly.
- *
- * @param value
- * The value to set the property to.
- * @return The value of the property after being set.
- * @throws NoUpdateException
- * If the user is not permitted to update the run.
- * @throws NoListenerException
- * If the property is in the wrong format.
- */
- @PUT
- @Path("/")
- @Consumes(TEXT)
- @Produces(TEXT)
- @Description("Set the value of the particular property of an event "
- + "listener attached to a workflow run.")
- @Nonnull
- String setValue(@Nonnull String value) throws NoUpdateException,
- NoListenerException;
-
- /** Get an outline of the operations supported. */
- @OPTIONS
- @Path("/")
- @Description("Produces the description of one run listener's "
- + "property's operations.")
- Response options();
- }
-
- /**
- * A description of an event listener that is attached to a workflow run.
- * Done with JAXB.
- *
- * @author Donal Fellows
- */
- @XmlRootElement
- @XmlType(name = "ListenerDescription")
- public class ListenerDescription extends VersionedElement {
- /** Where this listener is located. */
- @XmlAttribute(name = "href", namespace = XLINK)
- @XmlSchemaType(name = "anyURI")
- public URI location;
- /** The (arbitrary) name of the event listener. */
- @XmlAttribute
- public String name;
- /** The type of the event listener. */
- @XmlAttribute
- public String type;
- /**
- * The location of the configuration document for the event listener.
- */
- public Uri configuration;
- /**
- * The name and location of the properties supported by the event
- * listener.
- */
- @XmlElementWrapper(name = "properties", nillable = false)
- @XmlElement(name = "property", nillable = false)
- public List<PropertyDescription> properties;
-
- /**
- * Make a blank listener description.
- */
- public ListenerDescription() {
- }
-
- /**
- * Make a listener description that characterizes the given listener.
- *
- * @param listener
- * The listener to describe.
- * @param ub
- * The factory for URIs. Must have already been secured.
- */
- public ListenerDescription(Listener listener, UriBuilder ub) {
- super(true);
- name = listener.getName();
- type = listener.getType();
- configuration = new Uri(ub.clone().path("configuration"));
- UriBuilder ub2 = ub.clone().path("properties/{prop}");
- String[] props = listener.listProperties();
- properties = new ArrayList<>(props.length);
- for (String propName : props)
- properties.add(new PropertyDescription(propName, ub2));
- }
- }
-
- /**
- * The description of a single property, done with JAXB.
- *
- * @author Donal Fellows
- */
- @XmlType(name = "PropertyDescription")
- public static class PropertyDescription extends Uri {
- /**
- * The name of the property.
- */
- @XmlAttribute
- String name;
-
- /**
- * Make an empty description of a property.
- */
- public PropertyDescription() {
- }
-
- /**
- * Make a description of a property.
- *
- * @param listenerName
- * The name of the listener whose property this is.
- * @param propName
- * The name of the property.
- * @param ub
- * The factory for URIs. Must have already been secured.
- */
- PropertyDescription(String propName, UriBuilder ub) {
- super(ub, propName);
- this.name = propName;
- }
- }
-
- /**
- * The list of descriptions of listeners attached to a run. Done with JAXB.
- *
- * @author Donal Fellows
- */
- @XmlRootElement
- @XmlType(name = "")
- public static class Listeners extends VersionedElement {
- /**
- * The listeners for a workflow run.
- */
- @XmlElement(name = "listener")
- public List<ListenerDescription> listener;
-
- /**
- * Make a blank description of listeners.
- */
- public Listeners() {
- listener = new ArrayList<>();
- }
-
- /**
- * Make a description of the whole group out of the given list of
- * listener descriptions.
- *
- * @param listeners
- * The collection of (partial) listener descriptions.
- * @param ub
- * How to build the location of the listeners. Must have
- * already been secured.
- */
- public Listeners(List<ListenerDescription> listeners, UriBuilder ub) {
- super(true);
- listener = listeners;
- for (ListenerDescription ld : listeners)
- ld.location = ub.build(ld.name);
- }
- }
-
- /**
- * The list of properties of a listener. Done with JAXB.
- *
- * @author Donal Fellows
- */
- @XmlRootElement
- @XmlType(name = "")
- public static class Properties extends VersionedElement {
- /**
- * The references to the properties of a listener.
- */
- @XmlElement
- public List<PropertyDescription> property;
-
- /**
- * Make an empty description of the properties of a listener.
- */
- public Properties() {
- }
-
- /**
- * Make the description of the properties of a listener.
- *
- * @param ub
- * The factory for URIs, configured. Must have already been
- * secured.
- * @param properties
- * The names of the properties.
- */
- public Properties(UriBuilder ub, String[] properties) {
- super(true);
- property = new ArrayList<>(properties.length);
- for (String propName : properties)
- property.add(new PropertyDescription(propName, ub));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/00397eff/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java
----------------------------------------------------------------------
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java
deleted file mode 100644
index 161b017..0000000
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerREST.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- */
-package org.taverna.server.master.rest;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import 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/00397eff/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java
----------------------------------------------------------------------
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java
deleted file mode 100644
index ef6ddd4..0000000
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerRunREST.java
+++ /dev/null
@@ -1,810 +0,0 @@
-/*
- */
-package org.taverna.server.master.rest;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import 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/00397eff/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java
----------------------------------------------------------------------
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java
deleted file mode 100644
index f5101e7..0000000
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/TavernaServerSecurityREST.java
+++ /dev/null
@@ -1,788 +0,0 @@
-/*
- */
-package org.taverna.server.master.rest;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import 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/00397eff/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java
----------------------------------------------------------------------
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java
deleted file mode 100644
index 3418975..0000000
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/rest/handler/AccessDeniedHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- */
-package org.taverna.server.master.rest.handler;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import 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);
- }
-}