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