package de.twenty11.skysail.server.ext.jgit; import org.restlet.data.Form; import org.restlet.representation.Representation; import org.restlet.resource.Get; import org.restlet.resource.Put; import org.restlet.resource.ResourceException; import de.twenty11.skysail.common.commands.Command; import de.twenty11.skysail.common.navigation.LinkedPage; import de.twenty11.skysail.common.responses.FailureResponse; import de.twenty11.skysail.common.responses.FormResponse; import de.twenty11.skysail.common.responses.SkysailResponse; import de.twenty11.skysail.server.core.restlet.UniqueResultServerResource2; import de.twenty11.skysail.server.ext.jgit.internal.MyApplication; public class LocalRepositoryResource extends UniqueResultServerResource2<LocalRepositoryDescriptor> { private String key; private String action; private LocalRepositoryDescriptor result; @Override protected void doInit() throws ResourceException { key = (String) getRequest().getAttributes().get("id"); Form form = new Form(getRequest().getEntity()); action = form.getFirstValue("action"); MyApplication app = (MyApplication) getApplication(); result = app.getRepository().getLocalRepositoryDescriptor(key); } @Override @Get("html|json") public SkysailResponse<LocalRepositoryDescriptor> getEntity() { return getEntity("local git repository " + key); } @Override protected LocalRepositoryDescriptor getData() { registerCommand("create", new CreateLocalRepositoryCommand(result)); CloneIntoLocalRepositoryCommand cloneCommand = new CloneIntoLocalRepositoryCommand(result, null); if (cloneCommand.applicable()) { registerLinkedPage(new ClonePage(result)); } // registerCommand("showfiles", new ShowFilesCommand()); registerLinkedPage(new LinkedPage() { @Override public boolean applicable() { return !(getReference().getRemainingPart().length() > 0); } @Override public String getHref() { return key + "/listdir/"; } @Override public String getLinkText() { return "Show Files..."; } }); return result; } /** * parameter needed for restlet! * * @param entity * @return */ @Put("html|json") public SkysailResponse<LocalRepositoryDescriptor> startOrStopBundle(Representation entity) { Command command = getCommand(action); if (command != null) { try { if (command.getName().equals("Clone")) { return new FormResponse<LocalRepositoryDescriptor>(new LocalRepositoryDescriptor(), "../repos/"); } command.execute(); } catch (Exception e) { return new FailureResponse<LocalRepositoryDescriptor>(e); } } setMessage("Success"); return new SkysailResponse<LocalRepositoryDescriptor>(getData()); } @Override public LocalRepositoryDescriptor getData(Form form) { // TODO Auto-generated method stub return null; } @Override public SkysailResponse<?> addEntity(LocalRepositoryDescriptor entity) { // TODO Auto-generated method stub return null; } }