| /* |
| * Copyright 2000-2013 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.cvsSupport2.cvsoperations.cvsCheckOut; |
| |
| import com.intellij.cvsSupport2.CvsUtil; |
| import com.intellij.cvsSupport2.config.CvsConfiguration; |
| import com.intellij.cvsSupport2.connections.CvsRootProvider; |
| import com.intellij.cvsSupport2.cvsoperations.common.CvsExecutionEnvironment; |
| import com.intellij.cvsSupport2.cvsoperations.common.CvsOperationOnFiles; |
| import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.RevisionOrDate; |
| import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.RevisionOrDateImpl; |
| import com.intellij.cvsSupport2.util.CvsVfsUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import org.netbeans.lib.cvsclient.admin.Entry; |
| import org.netbeans.lib.cvsclient.command.Command; |
| import org.netbeans.lib.cvsclient.command.GlobalOptions; |
| import org.netbeans.lib.cvsclient.command.checkout.CheckoutCommand; |
| |
| import java.io.File; |
| |
| /** |
| * @author lesya |
| */ |
| public class CheckoutFileOperation extends CvsOperationOnFiles { |
| |
| private final File myFile; |
| private final boolean myIsDirectory; |
| private final String myModuleName; |
| private final RevisionOrDate myRevisionOrDate; |
| private final boolean myMakeNewFilesReadOnly; |
| |
| public CheckoutFileOperation(VirtualFile parent, |
| CvsConfiguration config, |
| String fileName, |
| Entry entry, |
| boolean makeNewFilesReadOnly, |
| final boolean isDirectory) { |
| this(parent, RevisionOrDateImpl.createOn(parent, entry, config.CHECKOUT_DATE_OR_REVISION_SETTINGS), fileName, makeNewFilesReadOnly, |
| isDirectory); |
| } |
| |
| public CheckoutFileOperation(final VirtualFile parent, |
| RevisionOrDate revisionOrDate, |
| final String fileName, |
| boolean makeNewFilesReadOnly) { |
| this(parent, revisionOrDate, fileName, makeNewFilesReadOnly, null); |
| } |
| |
| private CheckoutFileOperation(final VirtualFile parent, |
| RevisionOrDate revisionOrDate, |
| final String fileName, |
| boolean makeNewFilesReadOnly, |
| Boolean isDirectory/*null means detect*/) { |
| super(new CheckoutAdminReader()); |
| myMakeNewFilesReadOnly = makeNewFilesReadOnly; |
| myRevisionOrDate = revisionOrDate; |
| myFile = CvsVfsUtil.getFileFor(parent, fileName); |
| myIsDirectory = isDirectory == null ? myFile.isDirectory() : isDirectory; |
| myModuleName = getModuleName(parent, fileName); |
| addFile(myFile.getAbsolutePath()); |
| } |
| |
| private static String getModuleName(final VirtualFile parent, final String fileName) { |
| final String parentModule = CvsUtil.getModuleName(parent); |
| final VirtualFile file = parent.findChild(fileName); |
| if (parentModule == null && file != null) { |
| return CvsUtil.getModuleName(file); |
| } |
| else { |
| return parentModule + "/" + fileName; |
| } |
| } |
| |
| protected Command createCommand(CvsRootProvider root, CvsExecutionEnvironment cvsExecutionEnvironment) { |
| final CheckoutCommand result = new CheckoutCommand(null); |
| result.setRecursive(true); |
| result.addModule(myModuleName); |
| myRevisionOrDate.setForCommand(result); |
| if (!isRoot()) { |
| result.setAlternativeCheckoutDirectory(myIsDirectory ? myFile.getName() : "."); |
| } |
| return result; |
| } |
| |
| private boolean isRoot() { |
| return new File(myModuleName).getParentFile() == null; |
| } |
| |
| protected File getAdminRootFor(CvsRootProvider root) { |
| return getRoot(); |
| } |
| |
| private File getRoot() { |
| return myFile.getParentFile(); |
| } |
| |
| public void modifyOptions(GlobalOptions options) { |
| super.modifyOptions(options); |
| options.setCheckedOutFilesReadOnly(myMakeNewFilesReadOnly); |
| } |
| |
| protected File getLocalRootFor(CvsRootProvider root) { |
| final File result = getRoot(); |
| LOG.assertTrue(result != null); |
| return result; |
| } |
| |
| protected String getOperationName() { |
| return "checkout"; |
| } |
| } |
| |