simplify GTDUCollector a bit more
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / classpath / ClasspathTableItem.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.roots.ui.configuration.classpath;
17
18 import com.intellij.openapi.roots.*;
19 import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
20 import com.intellij.openapi.util.Comparing;
21 import com.intellij.openapi.util.NlsContexts;
22 import org.jetbrains.annotations.Nullable;
23
24 class ClasspathTableItem<T extends OrderEntry> {
25   @Nullable protected final T myEntry;
26   private final boolean myRemovable;
27
28   @Nullable
29   public static ClasspathTableItem<?> createItem(OrderEntry orderEntry, StructureConfigurableContext context) {
30     if (orderEntry instanceof JdkOrderEntry) {
31       return new ClasspathTableItem<>(orderEntry, false);
32     }
33     else if (orderEntry instanceof LibraryOrderEntry) {
34       return createLibItem((LibraryOrderEntry)orderEntry, context);
35     }
36     else if (orderEntry instanceof ModuleOrderEntry) {
37       return new ClasspathTableItem<>(orderEntry, true);
38     }
39     else if (orderEntry instanceof ModuleSourceOrderEntry) {
40       return new ClasspathTableItem<>(orderEntry, false);
41     }
42     return null;
43   }
44
45   public static ClasspathTableItem<LibraryOrderEntry> createLibItem(final LibraryOrderEntry orderEntry, final StructureConfigurableContext context) {
46     return new LibraryItem(orderEntry, context);
47   }
48
49   protected ClasspathTableItem(@Nullable T entry, boolean removable) {
50     myEntry = entry;
51     myRemovable = removable;
52   }
53
54   public final boolean isExportable() {
55     return myEntry instanceof ExportableOrderEntry;
56   }
57
58   public final boolean isExported() {
59     return myEntry instanceof ExportableOrderEntry && ((ExportableOrderEntry)myEntry).isExported();
60   }
61
62   public final void setExported(boolean isExported) {
63     if (myEntry instanceof ExportableOrderEntry) {
64       ((ExportableOrderEntry)myEntry).setExported(isExported);
65     }
66   }
67
68   @Nullable
69   public final DependencyScope getScope() {
70     return myEntry instanceof ExportableOrderEntry ? ((ExportableOrderEntry) myEntry).getScope() : null;
71   }
72
73   public final void setScope(DependencyScope scope) {
74     if (myEntry instanceof ExportableOrderEntry) {
75       ((ExportableOrderEntry) myEntry).setScope(scope);
76     }
77   }
78
79   @Nullable
80   public final T getEntry() {
81     return myEntry;
82   }
83
84   public boolean isRemovable() {
85     return myRemovable;
86   }
87
88   public boolean isEditable() {
89     return false;
90   }
91
92   @Nullable
93   public @NlsContexts.Tooltip String getTooltipText() {
94     return null;
95   }
96
97   @Override
98   public boolean equals(Object o) {
99     if (this == o) return true;
100     if (o == null || getClass() != o.getClass()) return false;
101
102     ClasspathTableItem item = (ClasspathTableItem)o;
103     return Comparing.equal(myEntry, item.myEntry);
104   }
105
106   @Override
107   public int hashCode() {
108     return myEntry != null ? myEntry.hashCode() : 0;
109   }
110 }