|
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; import java.util.ResourceBundle; import org.openide.actions.*; import org.openide.cookies.*; import org.openide.filesystems.*; import org.openide.loaders.*; import org.openide.nodes.*; import org.openide.TopManager; import org.openide.util.HelpCtx; import org.openide.util.RequestProcessor; import org.openide.util.NbBundle; import org.netbeans.modules.xml.catalog.settings.CatalogSettings; import org.openide.text.Annotation; import org.openide.text.Line; import org.openide.util.NbBundle; import org.openide.windows.InputOutput; import org.openide.windows.OutputWriter; // JDOM import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.output.XMLOutputter; // XML import org.xml.sax.SAXParseException; // Struts Console import org.apache.struts.console.jdom.JDOMUtil; import org.netbeans.modules.struts.nodes.ElementChildren; /** Represents a StrutsConfig object in the Repository. * * @author mk115033 */ public class StrutsConfigDataObject extends MultiDataObject implements ChangableDocument{ private static StrutsCatalog strutsCatalog; private Document jdomDocument,nodeStructure; private StrutsEditorSupport editorSupport; private StrutsConfigOpenSupport openSupport; private RequestProcessor.Task parsingDocumentTask; private boolean documentValid=true; private boolean panelChanged=false; private Annotation errorAnnotation; private InputOutput inOut; private ResourceBundle nodeStructureBundle; private JDOMException jdomException; public StrutsConfigDataObject(FileObject pf, StrutsConfigDataLoader loader) throws DataObjectExistsException { super(pf, loader); init(); } private void init() { CookieSet cookies = getCookieSet(); // Add whatever capabilities you need, e.g.: cookies.add(getOpenSupport()); cookies.add(getEditorSupport()); /* cookies.add (new ExecSupport (getPrimaryEntry ())); // See Editor Support template in Editor API: cookies.add (new CompilerSupport.Compile (getPrimaryEntry ())); cookies.add (new CompilerSupport.Build (getPrimaryEntry ())); cookies.add (new CompilerSupport.Clean (getPrimaryEntry ())); cookies.add (new OpenCookie () { public void open () { // do something...but usually you want to use OpenSupport instead } }); */ if (strutsCatalog==null) { strutsCatalog = new StrutsCatalog(); CatalogSettings.getDefault().addCatalog(strutsCatalog); } } public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; // If you add context help, change to: // return new HelpCtx (StrutsConfigDataObject.class); } protected Node createNodeDelegate() { return new StrutsConfigDataNode(this,getNodeStructure(),createJdomDocument()); } ResourceBundle getNodeStructureBundle() { return nodeStructureBundle; } /* If you made an Editor Support you will want to add these methods: */ final void addSaveCookie (SaveCookie save) { getCookieSet ().add (save); } final void removeSaveCookie (SaveCookie save) { getCookieSet ().remove (save); } public void setJdomDocument(Document jdomDocument) { this.jdomDocument = jdomDocument; } public Document getJdomDocument() { return (jdomDocument); } public Document createJdomDocument() { if (jdomDocument==null) { try { jdomDocument = JDOMUtil.loadDocument(getPrimaryFile().getInputStream(), true); } catch (Exception e) { if (e instanceof JDOMException) { jdomException = (JDOMException)e; setDocumentValid(false); } } } return (jdomDocument); } private void updateTextDocument(Document document) { EditorCookie editorCookie = (EditorCookie) getCookie(EditorCookie.class); try { javax.swing.text.StyledDocument doc = editorCookie.openDocument(); XMLOutputter outputter = new XMLOutputter(); doc.remove(0,doc.getLength()); doc.insertString(0,outputter.outputString(document),null); jdomDocument=document; setDocumentValid(true); ((ElementChildren)getNodeDelegate().getChildren()).updateChildren(jdomDocument.getRootElement()); } catch (Exception e) { e.printStackTrace(System.out); } panelChanged=false; } private void updateEditorPanel() { EditorCookie editorCookie = (EditorCookie) getCookie(EditorCookie.class); try { javax.swing.text.StyledDocument doc = editorCookie.openDocument(); java.io.InputStream is = new java.io.StringBufferInputStream(doc.getText(0,doc.getLength())); Document newDoc = JDOMUtil.loadDocument(is, true); if (newDoc!=null) { jdomDocument=newDoc; getOpenSupport().update(jdomDocument); setDocumentValid(true); ((ElementChildren)getNodeDelegate().getChildren()).updateChildren(jdomDocument.getRootElement()); } } catch (Exception e) { if (e instanceof org.jdom.JDOMException) { jdomException = (JDOMException)e; setDocumentValid(false); } } } public synchronized void replaceDocument(final Document doc) { if (parsingDocumentTask==null || parsingDocumentTask.isFinished() || parsingDocumentTask.cancel()) { parsingDocumentTask = RequestProcessor.postRequest(new Runnable(){ public void run(){ updateTextDocument(doc); } },100); } else { parsingDocumentTask = RequestProcessor.postRequest(new Runnable(){ public void run(){ updateTextDocument(doc); } },2000); } } public void fireDocumentChange() { panelChanged=false; replaceDocument(jdomDocument); } public synchronized void updatePanel() { //System.out.println("XMLJ2eeEditorSupport:restartTimer "+this.hashCode()); //dataObject.setDocumentDirty(true); if (parsingDocumentTask==null || parsingDocumentTask.isFinished() || parsingDocumentTask.cancel()) { parsingDocumentTask = RequestProcessor.postRequest(new Runnable(){ public void run(){ updateEditorPanel(); } },100); } else { parsingDocumentTask = RequestProcessor.postRequest(new Runnable(){ public void run(){ updateEditorPanel(); } },2000); } } synchronized StrutsConfigOpenSupport getOpenSupport() { if (openSupport==null) { openSupport = new StrutsConfigOpenSupport(this); } return openSupport; } synchronized StrutsEditorSupport getEditorSupport() { if (editorSupport==null) { editorSupport = new StrutsEditorSupport(this); } return editorSupport; } synchronized void discardDocumentChanges() { try { jdomDocument = JDOMUtil.loadDocument(getPrimaryFile().getInputStream(), true); updateTextDocument(jdomDocument); } 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 = 0; if (e instanceof JDOMException) { setDocumentValid(false); jdomException = (JDOMException)e; } /* errorPanel.setLineNumber(lineNumber); // show error panel if unable to load document // which occurs when the underlying XML file // is invalid errorPanel.setMessage(e.getMessage()); cardLayout.show(cardPanel, CARD_ERROR); */ } } public boolean isDocumentValid(){ return documentValid; } public void setDocumentValid(boolean valid){ if (documentValid!=valid) { DataNode node = (DataNode)getNodeDelegate(); if (valid) { jdomException=null; if (inOut!=null) { inOut.closeInputOutput(); this.errorAnnotation.detach(); } node.setIconBase ("/org/netbeans/modules/struts/resources/StrutsConfigIcon"); } else { node.setIconBase ("/org/netbeans/modules/struts/resources/xmlError"); } } this.documentValid=valid; } public void setPanelChanged(boolean changed){ panelChanged=changed; } public boolean isPanelChanged(){ return panelChanged; } public static StrutsCatalog getStrutsCatalog() { return strutsCatalog; } public synchronized Document getNodeStructure() { if (nodeStructure==null) { FileSystem fs= TopManager.getDefault().getRepository().getDefaultFileSystem(); FileObject fo = fs.find("Web.Struts","node-structure","xml"); if (fo!=null) try { nodeStructureBundle = NbBundle.getBundle((String)fo.getAttribute("SystemFileSystem.localizingBundle")); nodeStructure = JDOMUtil.loadDocument(fo.getInputStream(), false); } catch (Exception e) { System.out.println("Node Structure parsing error : "+e); } } return nodeStructure; } public void displayErrorMessage() { if (jdomException!=null) { if (((JDOMException) jdomException).getCause() instanceof SAXParseException) { int lineNumber = ((SAXParseException) ((JDOMException) jdomException).getCause()).getLineNumber(); displayErrorMessage(lineNumber,jdomException); } else { displayErrorMessage(-1,jdomException); } } } public JDOMException getJdomException() { return jdomException; } public void setJdomException(JDOMException ex) { jdomException=ex; } private void displayErrorMessage(int lineNumber, JDOMException exception) { if (errorAnnotation==null) errorAnnotation = new Annotation() { public String getAnnotationType() { return "org-netbeans-modules-struts-annotation"; // NOI18N } public String getShortDescription() { return NbBundle.getMessage(StrutsConfigDataObject.class, "DESC_StrutsAnnotation"); } }; LineCookie cookie = (LineCookie)getCookie(LineCookie.class); // getting Line object Line xLine = cookie.getLineSet ().getOriginal (lineNumber-1); errorAnnotation.attach(xLine); if (inOut==null) inOut=TopManager.getDefault().getIO(NbBundle.getMessage(StrutsConfigDataObject.class, "TXT_parser")); OutputWriter outputWriter = inOut.getOut(); try { IOCtl outList= new IOCtl(xLine); outputWriter.reset(); outputWriter.println(exception.getMessage(),outList); //inOut.setFocusTaken (true); inOut.select(); } catch (java.io.IOException ex){System.out.println("ex="+ex);} } private final class IOCtl implements org.openide.windows.OutputListener { /** line we check */ Line xline; public IOCtl (Line xline) { this.xline=xline; } public void outputLineSelected (org.openide.windows.OutputEvent ev) { EditorCookie editorCookie = (EditorCookie) StrutsConfigDataObject.this.getCookie(EditorCookie.class); try { editorCookie.openDocument(); } catch (java.io.IOException ex){} errorAnnotation.attach(xline); xline.show(Line.SHOW_TRY_SHOW); } public void outputLineAction (org.openide.windows.OutputEvent ev) { errorAnnotation.attach(xline); xline.show(Line.SHOW_TRY_SHOW); } public void outputLineCleared (org.openide.windows.OutputEvent ev) { errorAnnotation.detach(); } } } |
... 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.