svn: Fixed "TreeConflictRefreshablePanel" disposing
[idea/community.git] / plugins / svn4idea / src / org / jetbrains / idea / svn / difftool / SvnPhantomChangeDiffRequestProvider.java
1 package org.jetbrains.idea.svn.difftool;
2
3 import com.intellij.openapi.progress.ProcessCanceledException;
4 import com.intellij.openapi.progress.ProgressIndicator;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.util.UserDataHolder;
7 import com.intellij.diff.DiffContext;
8 import com.intellij.diff.FrameDiffTool;
9 import com.intellij.diff.chains.DiffRequestProducerException;
10 import com.intellij.diff.requests.DiffRequest;
11 import com.intellij.openapi.vcs.changes.Change;
12 import com.intellij.openapi.vcs.changes.actions.diff.ChangeDiffRequestProducer;
13 import com.intellij.openapi.vcs.changes.actions.diff.ChangeDiffRequestProvider;
14 import com.intellij.util.ThreeState;
15 import com.intellij.vcsUtil.UIVcsUtil;
16 import org.jetbrains.annotations.NotNull;
17 import org.jetbrains.annotations.Nullable;
18
19 import javax.swing.*;
20
21 public class SvnPhantomChangeDiffRequestProvider implements ChangeDiffRequestProvider {
22   @NotNull
23   @Override
24   public ThreeState isEquals(@NotNull Change change1, @NotNull Change change2) {
25     return ThreeState.UNSURE;
26   }
27
28   @Override
29   public boolean canCreate(@Nullable Project project, @NotNull Change change) {
30     return change.isPhantom();
31   }
32
33   @NotNull
34   @Override
35   public DiffRequest process(@NotNull ChangeDiffRequestProducer presentable,
36                              @NotNull UserDataHolder context,
37                              @NotNull ProgressIndicator indicator) throws DiffRequestProducerException, ProcessCanceledException {
38     indicator.checkCanceled();
39     return new SvnPhantomDiffRequest(presentable.getChange());
40   }
41
42   public static class SvnPhantomDiffRequest extends DiffRequest {
43     @NotNull private final Change myChange;
44
45     public SvnPhantomDiffRequest(@NotNull Change change) {
46       myChange = change;
47     }
48
49     @Nullable
50     @Override
51     public String getTitle() {
52       return ChangeDiffRequestProducer.getRequestTitle(myChange);
53     }
54   }
55
56   public static class SvnPhantomDiffTool implements FrameDiffTool {
57     @NotNull
58     @Override
59     public String getName() {
60       return "SVN phantom changes viewer";
61     }
62
63     @Override
64     public boolean canShow(@NotNull DiffContext context, @NotNull DiffRequest request) {
65       return request instanceof SvnPhantomDiffRequest;
66     }
67
68     @NotNull
69     @Override
70     public DiffViewer createComponent(@NotNull DiffContext context, @NotNull DiffRequest request) {
71       return new DiffViewer() {
72         @NotNull
73         @Override
74         public JComponent getComponent() {
75           return UIVcsUtil.infoPanel("Technical record",
76                                      "This change is recorded because its target file was deleted,\nand some parent directory was copied (or moved) into the new place.");
77         }
78
79         @Nullable
80         @Override
81         public JComponent getPreferredFocusedComponent() {
82           return null;
83         }
84
85         @NotNull
86         @Override
87         public ToolbarComponents init() {
88           return new ToolbarComponents();
89         }
90
91         @Override
92         public void dispose() {
93         }
94       };
95     }
96   }
97 }