001: package com.calipso.xmleditor;
002:
003: import javax.swing.*;
004: import javax.swing.event.MenuListener;
005: import javax.swing.event.MenuEvent;
006: import java.awt.event.ActionListener;
007: import java.awt.event.ActionEvent;
008: import java.awt.*;
009: import java.util.LinkedList;
010: import java.util.Iterator;
011:
012: /**
013: *
014: * User: jbassino
015: * Date: 25/06/2004
016: * Time: 14:08:17
017: *
018: */
019: public class XmlEditorMenu extends JMenuBar implements ActionListener,
020: MenuListener {
021:
022: private static final int LIMIT = 20;
023: private static final String defaultEmpty = "empty...";
024:
025: private JMenuItem mnuItemNewFromXSD;
026: private JMenuItem mnuItemLoadFromXSD;
027: private JMenuItem mnuItemLoadJustXML;
028: private JMenuItem mnuItemLoadXSD;
029: private JMenuItem mnuUnloadXSD;
030: private JMenuItem mnuItemGenerateReportFromSQL;
031: private JMenuItem mnuItemGenerateReportLayout;
032: private JMenu mnuRecentXml;
033: private JMenu mnuRecentXsd;
034: private LinkedList listRecentXml = new LinkedList();
035: private LinkedList listRecentXsd = new LinkedList();
036: private XmlEditorUI xmlEditorUI;
037: private JMenuItem mnuItemSave;
038: private JMenuItem mnuItemSaveAs;
039: private JMenuItem mnuItemGenerateReportView;
040:
041: /**
042: * Crea el menu superior de la aplicacion.
043: * @param ui
044: */
045: public XmlEditorMenu(XmlEditorUI ui) {
046: xmlEditorUI = ui;
047: JMenu mnuFile = new JMenu("Archivo");
048: JMenu mnuNew = new JMenu("Nuevo");
049: JMenu mnuLoad = new JMenu("Cargar");
050: JMenu mnuLoadXml = new JMenu("XML");
051: JMenu mnuCreateXml = new JMenu("Generar XML");
052: JMenu mnuRecent = new JMenu("Recientes");
053: mnuRecentXml = new JMenu("Recientes XML");
054: mnuRecentXsd = new JMenu("Recientes XSD");
055: mnuRecent.add(mnuRecentXml);
056: mnuRecent.add(mnuRecentXsd);
057: mnuRecentXml.addMenuListener(this );
058: mnuRecentXsd.addMenuListener(this );
059:
060: mnuItemNewFromXSD = new JMenuItem("Nuevo desde actual XSD");
061: mnuItemNewFromXSD.addActionListener(this );
062: mnuNew.add(mnuItemNewFromXSD);
063:
064: mnuItemLoadFromXSD = new JMenuItem("Usar xsd");
065: mnuItemLoadFromXSD.addActionListener(this );
066: mnuLoadXml.add(mnuItemLoadFromXSD);
067:
068: mnuItemLoadJustXML = new JMenuItem("No usar xsd");
069: mnuItemLoadJustXML.addActionListener(this );
070: mnuLoadXml.add(mnuItemLoadJustXML);
071:
072: mnuLoad.add(mnuLoadXml);
073:
074: mnuItemLoadXSD = new JMenuItem("XSD");
075: mnuItemLoadXSD.addActionListener(this );
076: mnuLoad.add(mnuItemLoadXSD);
077:
078: mnuLoad.add(mnuRecent);
079:
080: mnuItemGenerateReportFromSQL = new JMenuItem(
081: "Crear Reporte desde SQL");
082: mnuItemGenerateReportFromSQL.addActionListener(this );
083: mnuCreateXml.add(mnuItemGenerateReportFromSQL);
084:
085: mnuItemGenerateReportView = new JMenuItem(
086: "Crear ReportView de ReportDefinition");
087: mnuItemGenerateReportView.addActionListener(this );
088: mnuCreateXml.add(mnuItemGenerateReportView);
089:
090: mnuItemGenerateReportLayout = new JMenuItem(
091: "Generar ReportLayout");
092: mnuItemGenerateReportLayout.addActionListener(this );
093: mnuCreateXml.add(mnuItemGenerateReportLayout);
094: mnuCreateXml.setMnemonic("g".charAt(0));
095:
096: mnuItemSave = new JMenuItem("Guardar XML");
097: mnuItemSave.addActionListener(this );
098:
099: mnuItemSaveAs = new JMenuItem("Guardar como XML");
100: mnuItemSaveAs.addActionListener(this );
101:
102: mnuUnloadXSD = new JMenuItem("Descargar xsd");
103: mnuUnloadXSD.addActionListener(this );
104:
105: mnuFile.add(mnuNew);
106: mnuFile.add(mnuLoad);
107: mnuFile.add(mnuUnloadXSD);
108: mnuFile.add(mnuItemSave);
109: mnuFile.add(mnuItemSaveAs);
110: mnuFile.setMnemonic("a".charAt(0));
111:
112: add(mnuFile);
113: add(mnuCreateXml);
114: }
115:
116: public void actionPerformed(ActionEvent e) {
117: if (e.getSource() == mnuItemLoadFromXSD) {
118: getXmlEditorUI().loadFromXml(false, "");
119: } else if (e.getSource() == mnuItemLoadJustXML) {
120: getXmlEditorUI().loadFromXml(true, "");
121: } else if (e.getSource() == mnuItemLoadXSD) {
122: getXmlEditorUI().loadFromXsd();
123: } else if (e.getSource() == mnuItemGenerateReportFromSQL) {
124: getXmlEditorUI().getParametersFromPane();
125: } else if (e.getSource() == mnuItemGenerateReportView) {
126: getXmlEditorUI().generateReportView();
127: } else if (e.getSource() == mnuItemGenerateReportLayout) {
128: getXmlEditorUI().generateReportLayout();
129: } else if (e.getSource() == mnuItemSave) {
130: getXmlEditorUI().save(true);
131: } else if (e.getSource() == mnuUnloadXSD) {
132: getXmlEditorUI().unLoadxsd();
133: } else if (e.getSource() == mnuItemSaveAs) {
134: getXmlEditorUI().save(false);
135: } else if (isRecentMenu(e.getSource())) {
136: getXmlEditorUI().openRecent(
137: ((JMenuItem) e.getSource()).getName());
138: }
139: }
140:
141: public XmlEditorUI getXmlEditorUI() {
142: return xmlEditorUI;
143: }
144:
145: public void setXmlEditorUI(XmlEditorUI xmlEditorUI) {
146: this .xmlEditorUI = xmlEditorUI;
147: }
148:
149: public void menuSelected(MenuEvent e) {
150: if (e.getSource() == mnuRecentXml) {
151: addMenuItems(mnuRecentXml, listRecentXml);
152: listRecentXml = new LinkedList();
153: } else if (e.getSource() == mnuRecentXsd) {
154: addMenuItems(mnuRecentXsd, listRecentXsd);
155: listRecentXsd = new LinkedList();
156: }
157: }
158:
159: /**
160: * Agrega los items de la lista al menu
161: * @param menu
162: * @param list
163: */
164: private void addMenuItems(JMenu menu, LinkedList list) {
165: if (list.isEmpty() && menu.getMenuComponents().length == 0) {
166: JMenuItem empty = new JMenuItem(defaultEmpty);
167: empty.setName(defaultEmpty);
168: menu.add(empty);
169: } else {
170: if (!list.isEmpty()) {
171: for (Iterator iterator = list.iterator(); iterator
172: .hasNext();) {
173: String s = (String) iterator.next();
174: if (!hasItem(menu, s)) {
175: JMenuItem item = new JMenuItem(getNameFor(s));
176: item.setName(s);
177: item.addActionListener(this );
178: menu.add(item);
179: }
180: }
181: }
182: if (menu.getMenuComponents().length > 1
183: && menu.getMenuComponents()[0].getName()
184: .equalsIgnoreCase(defaultEmpty)) {
185: menu.remove(0);
186: }
187: }
188: }
189:
190: /**
191: * Verifica si el menu contiene algun item con nombre igual al parametro s.
192: * @param menu
193: * @param s
194: * @return
195: */
196: private boolean hasItem(JMenu menu, String s) {
197: Component[] components = menu.getMenuComponents();
198: for (int i = 0; i < components.length; i++) {
199: if (components[i].getName() == s) {
200: return true;
201: }
202: }
203: return false;
204: }
205:
206: /**
207: * Verifica si el source de una accion pertenece a alguno de los menus de objetos utilizados recientemente
208: * @param source
209: * @return
210: */
211: private boolean isRecentMenu(Object source) {
212: if (!doIsRecentMenu(mnuRecentXml, source)) {
213: return doIsRecentMenu(mnuRecentXsd, source);
214: }
215: return true;
216: }
217:
218: /**
219: * Verifica si el source de un evento pertenece al menu especificado
220: * @param menu
221: * @param source
222: * @return
223: */
224: private boolean doIsRecentMenu(JMenu menu, Object source) {
225: Component[] array = menu.getMenuComponents();
226: String name = ((JMenuItem) source).getName();
227: for (int i = 0; i < array.length; i++) {
228: if (array[i].getName().equalsIgnoreCase(name)) {
229: return true;
230: }
231: }
232: return false;
233: }
234:
235: /**
236: * Obtiene un nombre para menu a partir de un path
237: * @param s
238: * @return
239: */
240: private String getNameFor(String s) {
241: int index = Math.max(s.lastIndexOf("\\"), s.lastIndexOf("/"));
242: return s.substring(index + 1).trim();
243: }
244:
245: public void menuDeselected(MenuEvent e) {
246: }
247:
248: public void menuCanceled(MenuEvent e) {
249: }
250:
251: /**
252: * Agrega el parametro a la lista de XSDs seleccionados recientemente
253: * @param file
254: */
255: public void addXsdRecentItem(String file) {
256: addItem(listRecentXsd, file);
257: }
258:
259: /**
260: * Agrega el parametro a la lista de XMLs seleccionados recientemente
261: * @param file
262: */
263: public void addXmlRecentItem(String file) {
264: addItem(listRecentXml, file);
265: }
266:
267: /**
268: * Agrega el objeto a la lista verificando que no halla llegado al tope de items y que no sea un item repetido
269: * @param list
270: * @param path
271: */
272: private void addItem(LinkedList list, String path) {
273: if (!list.contains(path)) {
274: if (list.size() < LIMIT) {
275: list.addLast(path);
276: }
277: }
278: }
279:
280: }
|