blob: 916ffc7d153f872f12917ea99c98358ec39e34aa [file] [log] [blame]
package org.eclipse.team.internal.ccvs.core.commands;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.team.internal.ccvs.core.util.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.Client;
import org.eclipse.team.internal.ccvs.core.requests.RequestSender;
import org.eclipse.team.internal.ccvs.core.resources.api.FolderProperties;
import org.eclipse.team.internal.ccvs.core.resources.api.IManagedFolder;
import org.eclipse.team.internal.ccvs.core.resources.api.IManagedResource;
import org.eclipse.team.internal.ccvs.core.resources.api.IManagedVisitor;
import org.eclipse.team.internal.ccvs.core.response.ResponseDispatcher;
class Add extends Command {
/**
* Constructor for Add.
* @param responseDispatcher
* @param requestSender
*/
public Add(ResponseDispatcher responseContainer, RequestSender requestSender) {
super(responseContainer, requestSender);
}
/**
* @see ICommand#getName()
*/
public String getName() {
return RequestSender.ADD;
}
/**
* @see ICommand#getRequestName()
*/
public String getRequestName() {
return RequestSender.ADD;
}
/**
* Checks wether all the arguments (that are meand as Files/Folders)
* to add, can give a remoteLocation (that is needed to add them)
*/
protected boolean canTraverse() {
IManagedResource[] mWorkResources;
try {
mWorkResources = getWorkResources();
for (int i=0; i<mWorkResources.length; i++) {
Assert.isNotNull(mWorkResources[i].getRemoteLocation(getRoot()));
}
} catch (CVSException e) {
Assert.isTrue(false);
}
return true;
}
/**
* @see Command#sendRequestsToServer(IProgressMonitor)
*/
protected void sendRequestsToServer(IProgressMonitor monitor) throws CVSException {
IManagedResource[] mWorkResources;
IManagedVisitor vistor;
Assert.isTrue(getArguments().length != 0);
// Check that all the arguments can give you an
// repo that you will need while traversing the
// file-structure
Assert.isTrue(canTraverse());
// Get a vistor and use it on every resource we should
// work on
vistor = new AddStructureVisitor(requestSender,getRoot(),monitor);
mWorkResources = getWorkResources();
for (int i = 0; i < mWorkResources.length; i++) {
mWorkResources[i].accept(vistor);
}
sendHomeFolder();
}
/**
* If we were successful in adding, then acctually managed
* the folders on disk
*/
protected void finished(boolean succsess) throws CVSException {
IManagedFolder mFolder;
IManagedResource[] mWorkResources;
FolderProperties folderInfo;
mWorkResources = getWorkResources();
if (!succsess) {
return;
}
for (int i=0; i<mWorkResources.length; i++) {
if (mWorkResources[i].isFolder()) {
mFolder = (IManagedFolder) mWorkResources[i];
folderInfo = mFolder.getParent().getFolderInfo();
folderInfo.setRepository(folderInfo.getRepository() +
Client.SERVER_SEPARATOR + mFolder.getName());
mFolder.setFolderInfo(folderInfo);
}
}
}
}