/* * Copyright 2000-2012 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.openapi.diff.impl.external; import com.intellij.ide.diff.DirDiffSettings; import com.intellij.ide.diff.JarFileDiffElement; import com.intellij.ide.highlighter.ArchiveFileType; import com.intellij.openapi.Disposable; import com.intellij.openapi.diff.*; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import org.jetbrains.annotations.NotNull; import java.awt.*; /** * @author Konstantin Bulenkov */ public class ArchiveDiffTool implements DiffTool { public static final ArchiveDiffTool INSTANCE = new ArchiveDiffTool(); private ArchiveDiffTool(){} @Override public void show(DiffRequest request) { final DiffContent[] contents = request.getContents(); final VirtualFile file1 = contents[0].getFile(); final VirtualFile file2 = contents[1].getFile(); assert file1 != null && file2 != null; final JarFileDiffElement element = new JarFileDiffElement(file1); final JarFileDiffElement element1 = new JarFileDiffElement(file2); final DirDiffSettings settings = new DirDiffSettings(); settings.showInFrame = false; settings.enableChoosers = false; DirDiffManager.getInstance(request.getProject()).showDiff(element, element1, settings); } @Override public boolean canShow(DiffRequest request) { final DiffContent[] contents = request.getContents(); final DialogWrapper instance = DialogWrapper.findInstance(IdeFocusManager.getInstance(request.getProject()).getFocusOwner()); if (instance != null && instance.isModal()) return false; if (contents.length == 2) { final VirtualFile file1 = contents[0].getFile(); final VirtualFile file2 = contents[1].getFile(); if (file1 != null && file2 != null) { final FileType type1 = contents[0].getContentType(); final FileType type2 = contents[1].getContentType(); return type1 == type2 && type1 instanceof ArchiveFileType; } } return false; } @Override public DiffViewer createComponent(String title, DiffRequest request, Window window, @NotNull Disposable parentDisposable) { return null; } }