blob: 0ef5b56ab7209ab2a9c5bf591f62d47230d494da [file] [log] [blame]
/*
* Copyright 2000-2009 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.javacvsSpecificImpls;
import com.intellij.CvsBundle;
import com.intellij.cvsSupport2.application.CvsEntriesManager;
import com.intellij.cvsSupport2.config.CvsApplicationLevelConfiguration;
import com.intellij.cvsSupport2.cvsstatuses.CvsStatusProvider;
import com.intellij.cvsSupport2.util.CvsVfsUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.netbeans.lib.cvsclient.admin.AdminReader;
import org.netbeans.lib.cvsclient.admin.Entry;
import org.netbeans.lib.cvsclient.admin.IAdminReader;
import org.netbeans.lib.cvsclient.file.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
/**
* author: lesya
*/
public class AdminReaderOnCache implements IAdminReader {
private static final Logger LOG = Logger.getInstance("#com.intellij.cvsSupport2.cvsoperations.javacvsSpecificImpls.AdminReaderOnCache");
private final IAdminReader ourStandardAdminReader = new AdminReader(CvsApplicationLevelConfiguration.getCharset());
private final CvsEntriesManager myCvsEntriesManager = CvsEntriesManager.getInstance();
public Entry getEntry(final AbstractFileObject fileObject, final ICvsFileSystem cvsFileSystem) throws IOException {
ProgressManager.checkCanceled();
setProgressText(CvsBundle.message("progress.text.scanning.directory", cvsFileSystem.getLocalFileSystem().getFile(fileObject.getParent()).getAbsolutePath()));
File file = cvsFileSystem.getAdminFileSystem().getFile(fileObject);
Entry result = myCvsEntriesManager.getEntryFor(CvsVfsUtil.findFileByIoFile(file.getParentFile()), file.getName());
if (result == null) {
return null;
}
else {
try {
return (Entry)result.clone();
}
catch (CloneNotSupportedException e) {
LOG.error(e);
return null;
}
}
}
public Collection<Entry> getEntries(final DirectoryObject directoryObject, final ICvsFileSystem cvsFileSystem) throws IOException {
setProgressText(CvsBundle.message("progress.text.scanning.directory", cvsFileSystem.getLocalFileSystem().getFile(directoryObject).getAbsolutePath()));
ProgressManager.checkCanceled();
File parent = cvsFileSystem.getAdminFileSystem().getFile(directoryObject);
Collection<Entry> entries = myCvsEntriesManager.getEntriesIn(CvsVfsUtil.findFileByIoFile(parent));
ArrayList<Entry> copy = new ArrayList<Entry>();
for (final Entry entry : entries) {
try {
copy.add((Entry)entry.clone());
}
catch (CloneNotSupportedException e) {
LOG.error(e);
}
}
return copy;
}
private void setProgressText(String text) {
ProgressIndicator progressIndicator = ProgressManager.getInstance().getProgressIndicator();
if (progressIndicator == null) return;
progressIndicator.setText2(text);
}
public String getRepositoryForDirectory(DirectoryObject directoryObject, String repository, ICvsFileSystem cvsFileSystem) throws IOException {
File parent = cvsFileSystem.getAdminFileSystem().getFile(directoryObject);
VirtualFile virtualFile = CvsVfsUtil.findFileByIoFile(parent);
String repositoryDerectory = myCvsEntriesManager.getRepositoryFor(virtualFile);
if (repositoryDerectory == null) {
String parentRepository = myCvsEntriesManager.getRepositoryFor(virtualFile.getParent());
repositoryDerectory = parentRepository + "/" + virtualFile.getName();
}
if (StringUtil.startsWithChar(repositoryDerectory, '/')) {
return repositoryDerectory;
}
else {
return FileUtils.ensureTrailingSlash(repository) + repositoryDerectory;
}
}
public String getStickyTagForDirectory(DirectoryObject directoryObject, ICvsFileSystem cvsFileSystem) {
File parent = cvsFileSystem.getAdminFileSystem().getFile(directoryObject);
return myCvsEntriesManager.getStickyTagFor(CvsVfsUtil.findFileByIoFile(parent));
}
public boolean hasCvsDirectory(DirectoryObject directoryObject, ICvsFileSystem cvsFileSystem) {
return ourStandardAdminReader.hasCvsDirectory(directoryObject, cvsFileSystem);
}
public boolean isModified(FileObject fileObject, Date entryLastModified, ICvsFileSystem cvsFileSystem) {
File file = cvsFileSystem.getLocalFileSystem().getFile(fileObject);
VirtualFile virtualFile = CvsVfsUtil.findFileByIoFile(file);
if (virtualFile == null) {
return !CvsStatusProvider.timeStampsAreEqual(entryLastModified.getTime(), file.lastModified());
}
else {
return !CvsStatusProvider.timeStampsAreEqual(entryLastModified.getTime(), CvsVfsUtil.getTimeStamp(virtualFile));
}
}
public boolean isStatic(DirectoryObject directoryObject, ICvsFileSystem cvsFileSystem) {
return ourStandardAdminReader.isStatic(directoryObject, cvsFileSystem);
}
}