|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2002 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.struts; // AWT import java.awt.BorderLayout; // Beans import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; // I/O import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; // Swing import javax.swing.JEditorPane; import javax.swing.JPanel; import javax.swing.text.StyledDocument; // Struts Console import org.apache.struts.console.EditorPanel; import org.apache.struts.console.jdom.ElementObserver; import org.apache.struts.console.jdom.JDOMUtil; import org.apache.struts.console.jdom.ObservableElement; // JDOM import org.jdom.Document; import org.jdom.JDOMException; // NetBeans import org.openide.TopManager; import org.openide.NotifyDescriptor; import org.openide.cookies.EditorCookie; import org.openide.cookies.SaveCookie; import org.openide.filesystems.FileObject; import org.openide.text.NbDocument; import org.openide.windows.CloneableTopComponent; import org.openide.windows.Mode; import org.openide.windows.Workspace; // XML import org.xml.sax.SAXParseException; public class StrutsConfigPanel extends CloneableTopComponent implements ElementObserver, PropertyChangeListener/*, SaveCookie*/ { private static final String ICON_BASE = "/org/netbeans/modules/struts/resources/EditIcon.gif"; private static final String CARD_EDITOR = "EDITOR"; private static final String CARD_ERROR = "ERROR"; private static final String STRUTS_CONSOLE_MODE = "STRUTS_CONSOLE_MODE"; private EditorPanel editorPanel; private StrutsConfigDataObject dataObject; private Document document; // for externalization only public StrutsConfigPanel() { } public java.awt.Image getIcon() { javax.swing.ImageIcon icon = new javax.swing.ImageIcon(this.getClass().getResource(ICON_BASE)); return icon.getImage(); } public StrutsConfigPanel(StrutsConfigDataObject dataObject) { super(dataObject); this.dataObject = dataObject; init(); } public void writeExternal(ObjectOutput oo) throws IOException { super.writeExternal(oo); oo.writeObject(dataObject); } public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException { super.readExternal(oi); dataObject = (StrutsConfigDataObject) oi.readObject(); init(); } public void open() { Workspace ws = TopManager.getDefault().getWindowManager().getCurrentWorkspace(); Mode mode = ws.findMode(org.openide.text.CloneableEditorSupport.EDITOR_MODE); if (mode == null) { mode = ws.createMode(STRUTS_CONSOLE_MODE, "Struts Console", null); } mode.dockInto(this); super.open(); } protected boolean closeLast() { if (dataObject.isModified()) { NotifyDescriptor nd = new StrutsEditorSupport.ConfirmDialog(dataObject); Object ret = TopManager.getDefault().notify(nd); if (ret == NotifyDescriptor.CANCEL_OPTION || ret == NotifyDescriptor.CLOSED_OPTION) { return (false); } else if (ret == StrutsEditorSupport.ConfirmDialog.SAVE_OPTION) { // save changes to data object's underlying file try { ((SaveCookie)dataObject.getCookie(SaveCookie.class)).save(); } catch (Exception e) { e.printStackTrace(System.out); } } else { // unset modified flag on data object // since user has requested not to save // the underlying file dataObject.discardDocumentChanges(); dataObject.setModified(false); } } // remove save cookie so that save // button is no longer enabled //dataObject.removeSaveCookie(this); return (true); } public void elementChanged(ObservableElement e) { // mark data object as being modified so that // the IDE knows to prompt to save changes // when the IDE is shutdown, etc. dataObject.setModified(true); dataObject.setPanelChanged(true); dataObject.replaceDocument(document); } public void updateDocument(Document doc) { document=doc; if (!dataObject.getPrimaryFile().isReadOnly()) { JDOMUtil.registerElementObservers(document, this); } editorPanel.setDocument(doc); } private void init() { // setup panel super.setLayout(new BorderLayout()); editorPanel = new EditorPanel(); super.add(editorPanel, BorderLayout.CENTER); // register to receive data object's property changes dataObject.addPropertyChangeListener(this); FileObject fo = dataObject.getPrimaryFile(); try { document = dataObject.getJdomDocument(); if (document==null) { document = JDOMUtil.loadDocument(fo.getInputStream(), true); dataObject.setJdomDocument(document); } // register to be notified of any changes // to the document's elements if the buffer // for this file is not read only if (!fo.isReadOnly()) { JDOMUtil.registerElementObservers(document, this); } editorPanel.setDocument(document); // return to preserved state if available // if (lastSelectedNodePath != null) // { // editorPanel.selectNode(lastSelectedNodePath); // } //cardLayout.show(cardPanel, CARD_EDITOR); } catch (Exception e) { // set the line number that the error occured on // so that we can display a button to go right // to the error in the source file int lineNumber = -1; if (e instanceof JDOMException) { dataObject.setDocumentValid(false); dataObject.setJdomException((JDOMException)e); dataObject.displayErrorMessage(); /* if (((JDOMException) e).getCause() instanceof SAXParseException) { lineNumber = ((SAXParseException) ((JDOMException) e).getCause()).getLineNumber(); } dataObject.displayErrorMessage(lineNumber, (JDOMException) e); */ } } } // update name of compenent based off of // whether or not data object has been modified private void updateName() { String name = dataObject.getNodeDelegate().getDisplayName(); if (dataObject.isModified()) { // indicate that contents have been modified by // placing an asterik next to the component's name setName(name + '*'); } else { setName(name); } } // watch for property changes on data object so that // the name for this component can be updated when // the underlying file is saved, etc. public void propertyChange(PropertyChangeEvent e) { if (org.openide.loaders.DataObject.PROP_MODIFIED.equals(e.getPropertyName())) updateName(); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.