package org.community.intellij.plugins.communitycase.edit; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.FilePathImpl; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import org.community.intellij.plugins.communitycase.Util; import org.community.intellij.plugins.communitycase.commands.Command; import org.community.intellij.plugins.communitycase.commands.LineHandler; import org.community.intellij.plugins.communitycase.config.VcsSettings; import org.jetbrains.annotations.NotNull; import java.util.Arrays; /** * Handler for checking out files. * * @author worsecodes <worsecodes@gmail.com> * @since 12/14/10 */ public class EditFileProvider implements com.intellij.openapi.vcs.EditFileProvider { private final Project myProject; public EditFileProvider(@NotNull Project project) { myProject=project; } @Override public void editFiles(VirtualFile[] virtualFiles) throws VcsException { //just use the first file's parent as execution dir (other files will be relative to this one) VirtualFile execDir=Util.getRoot(virtualFiles[0]).getParent(); //todo wc when converting Commands to Handlers, include file.refresh(false, false) (see VcsHandleType.java:50) // also check for and report errors such as when file is checked out reserved by another user LineHandler handler=new LineHandler(myProject, execDir, Command.CHECKOUT); handler.setSilent(false); handler.setStdoutSuppressed(false); VcsSettings settings=VcsSettings.getInstance(myProject); if(settings!=null && settings.isUseReservedCheckoutForFiles()) handler.addParameters("-res");//reserved else handler.addParameters("–unr");//unreserved handler.addParameters("-nc");//no comment //todo wc optionally prompt for this handler.addParameters("-use");//use hijack - force this so that we can clear the read-only flag ahead of command execution handler.endOptions(); for(VirtualFile file:virtualFiles) { handler.addParameters(Util.getRelativeFilePath(file, execDir)); //make all other files relative to the exec dir we chose new FilePathImpl(file).getIOFile().setWritable(true); } handler.start(); Util.refreshFiles(myProject,Arrays.asList(virtualFiles)); } @Override public String getRequestText() { return "Clear read-only status by checking out file in ClearCase"; } }