/* | |
*/ | |
package org.taverna.server.master; | |
import static org.taverna.server.master.common.Roles.SELF; | |
import static org.taverna.server.master.common.Roles.USER; | |
import static org.taverna.server.master.utils.RestUtils.opt; | |
import java.net.MalformedURLException; | |
import java.net.URI; | |
import java.net.URISyntaxException; | |
import javax.annotation.security.RolesAllowed; | |
import javax.ws.rs.core.Response; | |
import org.apache.abdera.model.Entry; | |
import org.apache.abdera.model.Feed; | |
import org.taverna.server.master.api.FeedBean; | |
import org.taverna.server.master.exceptions.FilesystemAccessException; | |
import org.taverna.server.master.exceptions.NoDirectoryEntryException; | |
import org.taverna.server.master.exceptions.NoUpdateException; | |
import org.taverna.server.master.interaction.InteractionFeedSupport; | |
import org.taverna.server.master.interfaces.TavernaRun; | |
import org.taverna.server.master.rest.InteractionFeedREST; | |
import org.taverna.server.master.utils.CallTimeLogger.PerfLogged; | |
import org.taverna.server.master.utils.InvocationCounter.CallCounted; | |
/** | |
* How to connect an interaction feed to the webapp. | |
* | |
* @author Donal Fellows | |
*/ | |
public class InteractionFeed implements InteractionFeedREST, FeedBean { | |
private InteractionFeedSupport interactionFeed; | |
private TavernaRun run; | |
@Override | |
public void setInteractionFeedSupport(InteractionFeedSupport feed) { | |
this.interactionFeed = feed; | |
} | |
InteractionFeed connect(TavernaRun run) { | |
this.run = run; | |
return this; | |
} | |
@Override | |
@CallCounted | |
@PerfLogged | |
@RolesAllowed({ USER, SELF }) | |
public Feed getFeed() throws FilesystemAccessException, | |
NoDirectoryEntryException { | |
return interactionFeed.getRunFeed(run); | |
} | |
@Override | |
@CallCounted | |
@PerfLogged | |
@RolesAllowed({ USER, SELF }) | |
public Response addEntry(Entry entry) throws MalformedURLException, | |
FilesystemAccessException, NoDirectoryEntryException, | |
NoUpdateException { | |
Entry realEntry = interactionFeed.addRunFeedEntry(run, entry); | |
URI location; | |
try { | |
location = realEntry.getSelfLink().getHref().toURI(); | |
} catch (URISyntaxException e) { | |
throw new RuntimeException("failed to make URI from link?!", e); | |
} | |
return Response.created(location).entity(realEntry) | |
.type("application/atom+xml;type=entry").build(); | |
} | |
@Override | |
@CallCounted | |
@PerfLogged | |
@RolesAllowed({ USER, SELF }) | |
public Entry getEntry(String id) throws FilesystemAccessException, | |
NoDirectoryEntryException { | |
return interactionFeed.getRunFeedEntry(run, id); | |
} | |
@Override | |
@CallCounted | |
@PerfLogged | |
@RolesAllowed({ USER, SELF }) | |
public String deleteEntry(String id) throws FilesystemAccessException, | |
NoDirectoryEntryException, NoUpdateException { | |
interactionFeed.removeRunFeedEntry(run, id); | |
return "entry successfully deleted"; | |
} | |
@Override | |
@CallCounted | |
public Response feedOptions() { | |
return opt("POST"); | |
} | |
@Override | |
@CallCounted | |
public Response entryOptions(String id) { | |
return opt("DELETE"); | |
} | |
} |