/***************************************************************************** * Sun Public License Notice * * The contents of this file are subject to the Sun Public License Version * 1.0 (the "License"). You may not use this file except in compliance with * the License. A copy of the License is available at http://www.sun.com/ * * The Original Code is the CVS Client Library. * The Initial Developer of the Original Code is Thomas Singer. * Portions created by Robert Greig are Copyright (C) 2001. * All Rights Reserved. * * Contributor(s): Thomas Singer. *****************************************************************************/ package org.netbeans.lib.cvsclient.command.tag; import org.netbeans.lib.cvsclient.IClientEnvironment; import org.netbeans.lib.cvsclient.IRequestProcessor; import org.netbeans.lib.cvsclient.connection.AuthenticationException; import org.netbeans.lib.cvsclient.command.AbstractCommand; import org.netbeans.lib.cvsclient.command.CommandException; import org.netbeans.lib.cvsclient.command.ICvsFiles; import org.netbeans.lib.cvsclient.command.IOCommandException; import org.netbeans.lib.cvsclient.event.DualListener; import org.netbeans.lib.cvsclient.event.ICvsListener; import org.netbeans.lib.cvsclient.event.ICvsListenerRegistry; import org.netbeans.lib.cvsclient.event.IEventSender; import org.netbeans.lib.cvsclient.progress.IProgressViewer; import org.netbeans.lib.cvsclient.progress.RangeProgressViewer; import org.netbeans.lib.cvsclient.progress.receiving.FileInfoAndMessageResponseProgressHandler; import org.netbeans.lib.cvsclient.progress.sending.FileStateRequestsProgressHandler; import org.netbeans.lib.cvsclient.progress.sending.IRequestsProgressHandler; import org.netbeans.lib.cvsclient.request.CommandRequest; import org.netbeans.lib.cvsclient.request.Requests; import org.jetbrains.annotations.NonNls; import java.io.IOException; /** * The tag command adds or deleted a tag to the specified files/directories. * * @author Thomas Singer */ public final class TagCommand extends AbstractCommand { // Constants ============================================================== @NonNls public static final String EXAM_DIR_TAG = "server: Tagging "; @NonNls public static final String EXAM_DIR_UNTAG = "server: Untagging "; // Fields ================================================================= private String tag; private boolean checkThatUnmodified; private boolean deleteTag; private boolean allowMoveDeleteBranchTag; private boolean makeBranchTag; private boolean overrideExistingTag; // Setup ================================================================== public TagCommand() { } // Implemented ============================================================ /** * Execute the command. * * @param requestProcessor the client services object that provides any necessary * services to this command, including the ability to actually * process all the requests. */ public boolean execute(IRequestProcessor requestProcessor, IEventSender eventManager, ICvsListenerRegistry listenerRegistry, IClientEnvironment clientEnvironment, IProgressViewer progressViewer) throws CommandException, AuthenticationException { final ICvsFiles cvsFiles; try { cvsFiles = scanFileSystem(clientEnvironment); } catch (IOException ex) { throw new IOCommandException(ex); } final Requests requests = new Requests(CommandRequest.TAG, clientEnvironment); addFileRequests(cvsFiles, requests, clientEnvironment); requests.addArgumentRequest(isDeleteTag(), "-d"); requests.addArgumentRequest(isMakeBranchTag(), "-b"); requests.addArgumentRequest(isCheckThatUnmodified(), "-c"); requests.addArgumentRequest(isOverrideExistingTag(), "-F"); requests.addArgumentRequest(isAllowMoveDeleteBranchTag(), "-B"); requests.addArgumentRequest(true, getTag()); requests.addLocalPathDirectoryRequest(); addArgumentRequests(requests); final IRequestsProgressHandler requestsProgressHandler = new FileStateRequestsProgressHandler(new RangeProgressViewer(progressViewer, 0.0, 0.5), cvsFiles); final ICvsListener responseProgressHandler = new FileInfoAndMessageResponseProgressHandler(new RangeProgressViewer(progressViewer, 0.5, 1.0), cvsFiles, isDeleteTag() ? EXAM_DIR_UNTAG : EXAM_DIR_TAG); final ICvsListener tagParser = new TagParser(eventManager, clientEnvironment.getCvsFileSystem()); final ICvsListener listener = new DualListener(tagParser, responseProgressHandler); listener.registerListeners(listenerRegistry); try { return requestProcessor.processRequests(requests, requestsProgressHandler); } finally { listener.unregisterListeners(listenerRegistry); } } /** * This method returns how the tag command would looklike when typed on the * command line. */ public String getCvsCommandLine() { @NonNls final StringBuffer cvsCommandLine = new StringBuffer("tag "); cvsCommandLine.append(getCvsArguments()); if (getTag() != null) { cvsCommandLine.append(getTag()); cvsCommandLine.append(" "); } appendFileArguments(cvsCommandLine); return cvsCommandLine.toString(); } /** * Resets all switches in the command. * After calling this method, the command should have no switches defined * and should behave defaultly. */ public void resetCvsCommand() { super.resetCvsCommand(); setRecursive(true); setCheckThatUnmodified(false); setDeleteTag(false); setAllowMoveDeleteBranchTag(false); setMakeBranchTag(false); setOverrideExistingTag(false); } // Accessing ============================================================== public String getTag() { return tag; } public void setTag(String tag) { this.tag = tag; } private boolean isCheckThatUnmodified() { return checkThatUnmodified; } public void setCheckThatUnmodified(boolean checkThatUnmodified) { this.checkThatUnmodified = checkThatUnmodified; } private boolean isDeleteTag() { return deleteTag; } public void setDeleteTag(boolean deleteTag) { this.deleteTag = deleteTag; } public boolean isAllowMoveDeleteBranchTag() { return allowMoveDeleteBranchTag; } public void setAllowMoveDeleteBranchTag(boolean allowMoveDeleteBranchTag) { this.allowMoveDeleteBranchTag = allowMoveDeleteBranchTag; } private boolean isMakeBranchTag() { return makeBranchTag; } public void setMakeBranchTag(boolean makeBranchTag) { this.makeBranchTag = makeBranchTag; } private boolean isOverrideExistingTag() { return overrideExistingTag; } public void setOverrideExistingTag(boolean overrideExistingTag) { this.overrideExistingTag = overrideExistingTag; } // Utils ================================================================== private String getCvsArguments() { @NonNls final StringBuilder arguments = new StringBuilder(); if (!isRecursive()) { arguments.append("-l "); } if (isDeleteTag()) { arguments.append("-d "); } if (isMakeBranchTag()) { arguments.append("-b "); } if (isCheckThatUnmodified()) { arguments.append("-c "); } if (isOverrideExistingTag()) { arguments.append("-F "); } if (isAllowMoveDeleteBranchTag()) { arguments.append("-B "); } return arguments.toString(); } }