View Javadoc

1   /*
2    *  Copyright (C) 2003-2005 SINTEF
3    *  Author:  Fredrik Vraalsen (fredrik dot vraalsen at sintef dot no)
4    *  Webpage: http://coras.sourceforge.net/
5    *
6    *  This program is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public License
8    *  as published by the Free Software Foundation; either version 2.1
9    *  of the License, or (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this program; if not, write to the Free
18   *  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19   *  02111-1307 USA
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 }