00001 00058 package com.arcle.rmt.j2se.swing.vc; 00059 00060 import javax.swing.*; 00061 import java.util.List; 00062 import java.util.Set; 00063 import java.util.HashSet; 00064 import java.util.Iterator; 00065 import java.util.Arrays; 00066 import java.util.LinkedList; 00067 import java.awt.Component; 00068 import java.awt.Container; 00069 import java.awt.BorderLayout; 00070 import java.awt.event.ActionEvent; 00071 import java.util.Iterator; 00072 import com.arcle.rmt.rqml.RQMLFirstClass; 00073 import com.arcle.rmt.j2se.swing.ui.View; 00074 import com.arcle.rmt.j2se.swing.ui.ComponentView; 00075 import com.arcle.rmt.j2se.swing.ui.MoreSwingUtilities; 00076 import com.arcle.rmt.j2se.swing.vc.rqml.ElementEditFactoryFacade; 00077 00085 public abstract class ElementEdit extends ComponentView { 00086 protected ElementEdit() { } 00087 00088 //----------------------------------------------------------------------- 00089 // Overridden Methods 00090 00095 protected void initChildren() { 00096 Iterator i; 00097 tabs = createTabbedPane(); 00098 i = createPanels().iterator(); 00099 while (i.hasNext()) { 00100 tabs.add((Component) i.next()); 00101 } 00102 } 00103 00107 protected void layoutChildren() { 00108 setLayout(new BorderLayout()); 00109 add(tabs, BorderLayout.CENTER); 00110 add(getBottomRow(), BorderLayout.SOUTH); 00111 } 00112 00113 //----------------------------------------------------------------------- 00114 // Accessor Methods 00115 00123 protected List getCommandButtons() { 00124 List buttons = createList(); // to facilitate addition by subclasses. 00125 buttons.add(getCloseEditorButton()); 00126 buttons.add(Box.createHorizontalGlue()); 00127 buttons.add(getDeleteElementButton()); 00128 return buttons; 00129 } 00130 00140 protected AbstractButton getDeleteElementButton() { 00141 if (_deleteElementButton == null) { 00142 _deleteElementButton = new JButton(getDeleteElementAction()); 00143 } 00144 return _deleteElementButton; 00145 } 00146 00150 protected AbstractButton getCloseEditorButton() { 00151 if (_closeEditorButton == null) { 00152 _closeEditorButton = new JButton(getCloseEditorAction()); 00153 } 00154 return _closeEditorButton; 00155 } 00156 00162 protected Action getDeleteElementAction() { 00163 if (_deleteElementAction == null) { 00164 _deleteElementAction = createDeleteElementAction(); 00165 } 00166 return _deleteElementAction; 00167 } 00168 00172 protected Action getCloseEditorAction() { 00173 if (_closeEditorAction == null) { 00174 _closeEditorAction = createCloseEditorAction(); 00175 } 00176 return _closeEditorAction; 00177 } 00178 00182 protected Container getBottomRow() { 00183 if (_bottomRow == null) { 00184 _bottomRow = createBottomRow(); 00185 } 00186 return _bottomRow; 00187 } 00188 00189 //----------------------------------------------------------------------- 00190 // Factory Methods 00191 00198 protected abstract List createPanels(); 00199 00204 protected JTabbedPane createTabbedPane() { 00205 return new JTabbedPane(); 00206 } 00207 00212 protected List createList() { 00213 return new LinkedList(); 00214 } 00215 00220 protected Container createBottomRow() { 00221 Container row = Box.createHorizontalBox(); 00222 Iterator iter = getCommandButtons().iterator(); 00223 while (iter.hasNext()) { 00224 row.add((Component) iter.next()); 00225 } 00226 return row; 00227 } 00228 00233 protected abstract Action createDeleteElementAction(); 00234 00238 protected Action createCloseEditorAction() { 00239 return new CloseEditorAction(); 00240 } 00241 00242 //----------------------------------------------------------------------- 00243 // Static methods 00244 00250 public static ElementEditFactory getFactory() { 00251 return ElementEditFactoryFacade.getInstance(); 00252 } 00253 00262 public static ElementEdit createElementEdit(RQMLFirstClass elem) { 00263 return getFactory().createElementEdit(elem); 00264 } 00265 00266 00267 //----------------------------------------------------------------------- 00268 // Member Variables 00269 00273 private JTabbedPane tabs; 00274 00278 private Container _bottomRow = null; 00279 00283 private AbstractButton _deleteElementButton = null; 00284 00288 private AbstractButton _closeEditorButton = null; 00289 00293 private Action _deleteElementAction = null; 00294 00298 private Action _closeEditorAction = null; 00299 00300 //----------------------------------------------------------------------- 00301 // Inner classes 00302 00306 protected class CloseEditorAction extends AbstractAction { 00307 public CloseEditorAction() { 00308 super("Close"); 00309 } 00310 00314 public void actionPerformed(ActionEvent e) { 00315 MoreSwingUtilities.disposeImmediateParent(ElementEdit.this); 00316 } 00317 } 00318 } 00319