package fitnesse.revisioncontrol; import fitnesse.html.HtmlTag; import fitnesse.wiki.WikiPageAction; import java.util.HashMap; import java.util.Map; import static fitnesse.revisioncontrol.CheckinOperationHtmlBuilder.COMMIT_MESSAGE; public abstract class RevisionControlOperation<R> { public static final RevisionControlOperation<Results> ADD = new RevisionControlOperation<Results>("Add", "addToRevisionControl", "a", "Add this sub-wiki to revision control") { @Override public Results execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.add(pagePath); } }; public static final RevisionControlOperation<State> SYNC = new RevisionControlOperation<State>("Synchronize", "syncRevisionControl", "") { @Override public State execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.getState(pagePath); } }; public static final RevisionControlOperation<NewRevisionResults> UPDATE = new RevisionControlOperation<NewRevisionResults>("Update", "update", "u", "Update this sub-wiki from version control.") { @Override public NewRevisionResults execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.update(pagePath); } }; public static final RevisionControlOperation<Results> CHECKOUT = new RevisionControlOperation<Results>("Checkout", "checkout", "c", "Get updates to this page from version control.") { @Override public Results execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.checkout(pagePath); } }; public static final RevisionControlOperation<NewRevisionResults> CHECKIN = new RevisionControlOperation<NewRevisionResults>("Checkin", "checkin", "i", "Put changes to this page into version control.") { @Override public NewRevisionResults execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.checkin(pagePath, args.containsKey(COMMIT_MESSAGE) ? args.get(COMMIT_MESSAGE) : ""); } @Override public HtmlTag makeHtml(String resource) { return new CheckinOperationHtmlBuilder(this).makeHtml(resource); } }; public static final RevisionControlOperation<Results> REVERT = new RevisionControlOperation<Results>("Revert", "revert", "", "Discard local changes to this page.") { @Override public Results execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.revert(pagePath); } }; public static final RevisionControlOperation<StatusResults> STATUS = new RevisionControlOperation<StatusResults>("Status", "getStatus", "t", "Get the status of this sub-wiki from version control.") { @Override public StatusResults execute(RevisionController revisionController, String pagePath, Map<String, String> args) { return revisionController.getStatus(pagePath); } }; private final String query; private final String accessKey; private final String name; private String description; protected RevisionControlOperation(String name, String query, String accessKey) { this(name, query, accessKey, null); } public RevisionControlOperation(String name, String query, String accessKey, String description) { this.name = name; this.query = query; this.accessKey = accessKey; this.description = description; } public WikiPageAction makeAction(String pageName) { WikiPageAction action = new WikiPageAction(pageName, name); action.setQuery(query); action.setShortcutKey(accessKey); return action; } public HtmlTag makeHtml(String resource) { return new RevisionControlOperationHtmlBuilder(this).makeHtml(resource); } public String getName() { return name; } public String getQuery() { return query; } public String getAccessKey() { return accessKey; } public String getDescription() { return description; } @Override public String toString() { return name; } public R execute(RevisionController revisionController, String pagePath) { return execute(revisionController, pagePath, new HashMap<String, String>()); } public abstract R execute(RevisionController revisionController, String pagePath, Map<String, String> args); }