simplify GTDUCollector a bit more
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / libraryEditor / LibraryPropertiesEditorBase.java
1 /*
2  * Copyright 2000-2011 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.libraryEditor;
17
18 import com.intellij.openapi.roots.libraries.LibraryProperties;
19 import com.intellij.openapi.roots.libraries.LibraryType;
20 import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent;
21 import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor;
22 import com.intellij.util.ui.JBUI;
23 import com.intellij.util.ui.UIUtil;
24 import org.jetbrains.annotations.Nls;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import javax.swing.*;
29 import java.awt.event.ActionEvent;
30 import java.awt.event.ActionListener;
31
32 public abstract class LibraryPropertiesEditorBase<P extends LibraryProperties, T extends LibraryType<P>> extends LibraryPropertiesEditor {
33   private JPanel myMainPanel;
34   private JLabel myDescriptionLabel;
35   private JButton myEditButton;
36   private boolean myModified;
37   protected final LibraryEditorComponent<P> myEditorComponent;
38   protected final T myLibraryType;
39
40   protected LibraryPropertiesEditorBase(final LibraryEditorComponent<P> editorComponent,
41                                         T libraryType, @Nullable @Nls String editButtonText) {
42     myEditorComponent = editorComponent;
43     myLibraryType = libraryType;
44     updateDescription();
45     if (editButtonText != null) {
46       myEditButton.setText(UIUtil.replaceMnemonicAmpersand(editButtonText));
47     }
48     myEditButton.setVisible(!myEditorComponent.isNewLibrary());
49     myEditButton.addActionListener(new ActionListener() {
50       @Override
51       public void actionPerformed(ActionEvent e) {
52         edit();
53       }
54     });
55     myMainPanel.setBorder(JBUI.Borders.empty(0, 10, 5, 10));
56   }
57
58   protected JPanel getMainPanel() {
59     return myMainPanel;
60   }
61
62   protected void updateDescription() {
63     myDescriptionLabel.setText(myLibraryType.getDescription(myEditorComponent.getProperties()));
64   }
65
66   protected abstract void edit();
67
68   protected void setModified() {
69     myModified = true;
70     updateDescription();
71   }
72
73   @NotNull
74   @Override
75   public JComponent createComponent() {
76     return myMainPanel;
77   }
78
79   @Override
80   public boolean isModified() {
81     return myModified;
82   }
83
84   @Override
85   public void reset() {
86     updateDescription();
87   }
88 }