blob: e8885634aabddb76bf5f630841bc728eb1464e9e [file] [log] [blame]
/*
* Copyright 2000-2011 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.updateinfo;
import com.intellij.cvsSupport2.CvsVcs2;
import com.intellij.cvsSupport2.application.CvsEntriesManager;
import com.intellij.cvsSupport2.cvshandlers.CvsUpdatePolicy;
import com.intellij.cvsSupport2.cvsoperations.cvsMessages.CvsMessagesAdapter;
import com.intellij.cvsSupport2.cvsoperations.cvsMessages.FileMessage;
import com.intellij.cvsSupport2.history.CvsRevisionNumber;
import com.intellij.cvsSupport2.util.CvsVfsUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.vcs.update.FileGroup;
import com.intellij.openapi.vcs.update.UpdatedFiles;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.Nullable;
import org.netbeans.lib.cvsclient.admin.Entry;
import java.io.File;
public class UpdatedFilesProcessor extends CvsMessagesAdapter {
private static final Logger LOG = Logger.getInstance("#com.intellij.cvsSupport2.updateinfo.UpdatedFilesProcessor");
private final UpdatedFiles myUpdatedFiles;
public UpdatedFilesProcessor(UpdatedFiles updatedFiles) {
myUpdatedFiles = updatedFiles;
}
public void addFileMessage(FileMessage message) {
String path = message.getFileAbsolutePath();
VirtualFile virtualFile = getVirtualFileFor(path);
final int messageType = message.getType();
if (virtualFile != null && messageType == FileMessage.NOT_IN_REPOSITORY &&
FileTypeManager.getInstance().isFileIgnored(virtualFile)) {
return;
}
FileGroup collection = getCollectionFor(messageType, virtualFile);
LOG.assertTrue(collection != null, String.valueOf(messageType));
final CvsRevisionNumber revision = message.getRevision();
collection.add(path, CvsVcs2.getKey(), revision);
}
private FileGroup getCollectionFor(int messageType, @Nullable VirtualFile vFile) {
switch (messageType) {
case FileMessage.MODIFIED:
return myUpdatedFiles.getGroupById(FileGroup.MODIFIED_ID);
case FileMessage.MERGED:
return getMergedFileGroup(vFile, FileGroup.MERGED_ID);
case FileMessage.MERGED_WITH_CONFLICTS:
return getMergedFileGroup(vFile, FileGroup.MERGED_WITH_CONFLICT_ID);
case FileMessage.CREATED_BY_SECOND_PARTY:
return myUpdatedFiles.getGroupById(CvsUpdatePolicy.CREATED_BY_SECOND_PARTY_ID);
case FileMessage.NOT_IN_REPOSITORY:
return myUpdatedFiles.getGroupById(FileGroup.UNKNOWN_ID);
case FileMessage.LOCALLY_ADDED:
return myUpdatedFiles.getGroupById(FileGroup.LOCALLY_ADDED_ID);
case FileMessage.LOCALLY_REMOVED:
return myUpdatedFiles.getGroupById(FileGroup.LOCALLY_REMOVED_ID);
case FileMessage.REMOVED_FROM_REPOSITORY:
return myUpdatedFiles.getGroupById(FileGroup.REMOVED_FROM_REPOSITORY_ID);
case FileMessage.CREATED:
{
return myUpdatedFiles.getGroupById(FileGroup.CREATED_ID);
}
case FileMessage.UPDATING:
{
if (vFile == null) {
return myUpdatedFiles.getGroupById(FileGroup.RESTORED_ID);
}
else {
return myUpdatedFiles.getGroupById(FileGroup.UPDATED_ID);
}
}
case FileMessage.PATCHED:
return myUpdatedFiles.getGroupById(FileGroup.UPDATED_ID);
case FileMessage.REMOVED_FROM_SERVER_CONFLICT:
return myUpdatedFiles.getGroupById(CvsUpdatePolicy.MODIFIED_REMOVED_FROM_SERVER_ID);
case FileMessage.LOCALLY_REMOVED_CONFLICT:
return myUpdatedFiles.getGroupById(CvsUpdatePolicy.LOCALLY_REMOVED_MODIFIED_ON_SERVER_ID);
}
return myUpdatedFiles.getGroupById(FileGroup.UNKNOWN_ID);
}
private FileGroup getMergedFileGroup(final VirtualFile vFile, final String textMergedId) {
if (vFile != null) {
Entry entry = CvsEntriesManager.getInstance().getEntryFor(vFile);
if (entry != null && entry.isBinary()) {
return myUpdatedFiles.getGroupById(CvsUpdatePolicy.BINARY_MERGED_ID);
}
}
return myUpdatedFiles.getGroupById(textMergedId);
}
public static VirtualFile getVirtualFileFor(final String path) {
if (path == null) return null;
return CvsVfsUtil.findFileByPath(path.replace(File.separatorChar, '/'));
}
}