1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package coras.client.ui;
22
23 import java.awt.event.ActionListener;
24 import java.beans.PropertyChangeEvent;
25 import java.beans.PropertyChangeListener;
26 import java.util.Observable;
27 import java.util.Observer;
28
29 import javax.swing.JButton;
30 import javax.swing.JInternalFrame;
31 import javax.swing.JPanel;
32
33 import coras.common.CorasPackage;
34 /***
35 * @author fvr
36 *
37 * TODO To change the template for this generated type comment go to
38 * Window - Preferences - Java - Code Style - Code Templates
39 */
40 public class PackageFrame extends JInternalFrame {
41
42 private CorasPackage thePackage = null;
43 private boolean editing = false;
44
45 private javax.swing.JPanel jContentPane = null;
46
47 private PackageDetailsPanel packageDetailsPanel = null;
48
49 private JPanel buttonsPanel = null;
50 private JButton closeButton = null;
51 private JButton saveButton = null;
52
53 /***
54 * This is the default constructor
55 */
56 public PackageFrame() {
57 super();
58 initialize();
59 }
60
61 public PackageFrame(CorasPackage _package) {
62 this();
63 this.thePackage = _package;
64 getPackageDetailsPanel().setPackage(_package);
65 getPackageDetailsPanel().addPropertyChangeListener(new PropertyChangeListener() {
66 public void propertyChange(PropertyChangeEvent evt) {
67 updateSaveButton();
68 }
69 });
70 thePackage.addObserver(new Observer() {
71 public void update(Observable o, Object arg) {
72 if (o == thePackage) {
73 updateSaveButton();
74 }
75 }
76 });
77 updateSaveButton();
78 }
79
80
81
82 public String getDomain() {
83 return packageDetailsPanel.getDomain();
84 }
85 public String getFullDescription() {
86 return packageDetailsPanel.getFullDescription();
87 }
88 public String getPackageName() {
89 return packageDetailsPanel.getPackageName();
90 }
91 public String getShortDescription() {
92 return packageDetailsPanel.getShortDescription();
93 }
94
95 public boolean isCategoryEnabled() {
96 return getPackageDetailsPanel().isCategoryEnabled();
97 }
98
99 public void setCategoryEnabled(boolean enabled) {
100 getPackageDetailsPanel().setCategoryEnabled(enabled);
101 }
102
103 public boolean isDomainEnabled() {
104 return packageDetailsPanel.isDomainEnabled();
105 }
106
107 public void setDomainEnabled(boolean enabled) {
108 packageDetailsPanel.setDomainEnabled(enabled);
109 }
110
111 /***
112 * @return
113 */
114 public boolean isEditing() {
115 return editing;
116 }
117
118 public boolean isDirty() {
119 boolean dirty = packageDetailsPanel.isDirty();
120 dirty |= thePackage != null && thePackage.isDirty();
121 return dirty;
122 }
123
124 public void setEditing(boolean editing) {
125 this.editing = editing;
126 updateSaveButton();
127 getPackageDetailsPanel().setEditable(editing);
128 }
129
130 /***
131 * @param listener
132 */
133 public void addSaveActionListener(ActionListener listener) {
134 getSaveButton().addActionListener(listener);
135 }
136
137 public void addDiscardActionListener(ActionListener listener) {
138 getCloseButton().addActionListener(listener);
139 }
140
141 private void updateSaveButton() {
142 getSaveButton().setEnabled(editing && isDirty());
143 saveButton.setVisible(editing);
144 }
145
146 /***
147 * This method initializes this
148 *
149 * @return void
150 */
151 private void initialize() {
152 this.setBounds(0, 0, 400, 300);
153 this.setClosable(true);
154 this.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
155 this.setIconifiable(true);
156 this.setMaximizable(true);
157 this.setResizable(true);
158 this.setContentPane(getJContentPane());
159 }
160 /***
161 * This method initializes jContentPane
162 *
163 * @return javax.swing.JPanel
164 */
165 private javax.swing.JPanel getJContentPane() {
166 if(jContentPane == null) {
167 jContentPane = new javax.swing.JPanel();
168 jContentPane.setLayout(new java.awt.BorderLayout());
169 jContentPane.add(getPackageDetailsPanel(), java.awt.BorderLayout.CENTER);
170 jContentPane.add(getButtonsPanel(), java.awt.BorderLayout.SOUTH);
171 }
172 return jContentPane;
173 }
174 /***
175 * This method initializes packageDetailsPanel
176 *
177 * @return coras.client.ui.PackageDetailsPanel
178 */
179 private PackageDetailsPanel getPackageDetailsPanel() {
180 if (packageDetailsPanel == null) {
181 packageDetailsPanel = new PackageDetailsPanel();
182 packageDetailsPanel.setEditable(editing);
183 packageDetailsPanel.setCategoryEditable(false);
184 }
185 return packageDetailsPanel;
186 }
187 /***
188 * This method initializes jPanel
189 *
190 * @return javax.swing.JPanel
191 */
192 private JPanel getButtonsPanel() {
193 if (buttonsPanel == null) {
194 buttonsPanel = new JPanel();
195 buttonsPanel.add(getSaveButton(), null);
196 buttonsPanel.add(getCloseButton(), null);
197 }
198 return buttonsPanel;
199 }
200 /***
201 * This method initializes jButton
202 *
203 * @return javax.swing.JButton
204 */
205 private JButton getSaveButton() {
206 if (saveButton == null) {
207 saveButton = new JButton();
208 saveButton.setText("Save");
209 saveButton.setMnemonic(java.awt.event.KeyEvent.VK_S);
210 updateSaveButton();
211 }
212 return saveButton;
213 }
214 /***
215 * This method initializes jButton
216 *
217 * @return javax.swing.JButton
218 */
219 private JButton getCloseButton() {
220 if (closeButton == null) {
221 closeButton = new JButton();
222 closeButton.setText("Close");
223 closeButton.setMnemonic(java.awt.event.KeyEvent.VK_E);
224 closeButton.addActionListener(new java.awt.event.ActionListener() {
225 public void actionPerformed(java.awt.event.ActionEvent e) {
226 doDefaultCloseAction();
227 }
228 });
229 }
230 return closeButton;
231 }
232
233 }