|
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-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.web.debug.util; import java.util.*; import java.io.*; import java.net.*; import javax.swing.*; import javax.swing.text.*; import org.openide.ErrorManager; import org.openide.nodes.*; import org.openide.filesystems.*; import org.openide.text.*; import org.openide.cookies.*; import org.openide.util.actions.SystemAction; import org.openide.util.Lookup; import org.openide.windows.TopComponent; import org.openide.filesystems.Repository; import org.netbeans.modules.web.debug.Context; import org.netbeans.modules.web.api.webmodule.*; import org.netbeans.modules.j2ee.deployment.impl.projects.*; import org.netbeans.modules.j2ee.deployment.plugins.api.*; import org.netbeans.modules.j2ee.deployment.devmodules.api.JSPServletFinder; import org.netbeans.api.project.*; import org.netbeans.api.debugger.*; import org.netbeans.api.debugger.jpda.*; /** * * @author Martin Grebac */ public class Utils { /** Logger for web.debug module. */ private static ErrorManager err = ErrorManager.getDefault().getInstance("org.netbeans.modules.web.debug"); // NOI18N public static ErrorManager getEM () { return err; } public static File getJspFileFromUrl(String url) { if (url != null) { URI uri = null; try { uri = new URI(url); } catch (Exception e) {}; if (uri != null) { try { File f = new File(uri); if (f != null) { f = FileUtil.normalizeFile(f); } return f; } catch (IllegalArgumentException ex) { ErrorManager.getDefault().log(ErrorManager.INFORMATIONAL, url); ErrorManager.getDefault().log(ErrorManager.INFORMATIONAL, ex.toString()); } } } return null; } public static FileObject getJspFileObjectFromUrl(String url) { File f = getJspFileFromUrl(url); if (f != null) { return FileUtil.toFileObject(f); } return null; } public static boolean isJsp(String url) { FileObject fo = getJspFileObjectFromUrl(url); if (fo != null) { return "text/x-jsp".equals(fo.getMIMEType()); //NOI18N } return false; } public static String getJspName(String url) { File f = getJspFileFromUrl(url); if (f != null) { return f.getName(); } return (url == null) ? null : url.toString(); } public static String getServletClass(String url) { FileObject fo = getJspFileObjectFromUrl(url); if (fo == null) { return null; } JSPServletFinder finder = JSPServletFinder.findJSPServletFinder (fo); WebModule wm = WebModule.getWebModule (fo); String jspRelativePath = FileUtil.getRelativePath(wm.getDocumentBase(), fo); String contextPath = wm.getContextPath(); String servletPath = finder.getServletResourcePath(jspRelativePath); if (servletPath == null) { // we don't have class name, so assume we are debugging tomcat or appsrv servletPath = JspNameUtil.getServletResourcePath(contextPath, jspRelativePath); } if (servletPath != null) { servletPath = servletPath.substring(0, servletPath.length()-5); // length of ".java" servletPath = servletPath.replace('/', '.'); //NOI18N } Utils.getEM().log("servlet class: " + servletPath); return servletPath; } public static String getClassFilter(String url) { String filter = getServletClass(url); if (filter != null) { // get package only filter = filter.substring(0, filter.lastIndexOf('.')) + ".*"; //NOI18N } return filter; } // public static String getCompoundClassFilter(String url) { // // FileObject wmfo = getJspFileObjectFromUrl(url); // if (wmfo == null) { // return null; // } // WebModule wm = WebModule.getWebModule(wmfo); // Enumeration files = wm.getDocumentBase().getChildren(true); // // String filter = null; //NOI18N // while (files.hasMoreElements()) { // FileObject fo = (FileObject)files.nextElement(); // if (!fo.isFolder() && "text/x-jsp".equals(fo.getMIMEType()) && (fo != null)) { // String jspRelPath = FileUtil.getRelativePath(wm.getDocumentBase(), fo); // JSPServletFinder finder = JSPServletFinder.findJSPServletFinder(fo); // String servletPath = finder.getServletResourcePath(jspRelPath); // if ((servletPath != null) && !servletPath.equals("")) { // servletPath = servletPath.substring(0, servletPath.length()-5); // length of ".java" // servletPath = servletPath.substring(0, servletPath.lastIndexOf('/')); // get package only // if (filter == null) { // filter = servletPath; // } else { // if (!(servletPath.startsWith(filter))) { // while (!servletPath.startsWith(filter)) { // filter = filter.substring(0, filter.lastIndexOf('/')); // } // } // } // } // } // } // // filter = filter.replace('/', '.') + "."; //NOI18N // Utils.getEM().log("compound filter: " + filter); // return filter; // } public static String getContextPath(String url) { FileObject wmfo = getJspFileObjectFromUrl(url); if (wmfo == null) { return null; } WebModule wm = WebModule.getWebModule(wmfo); if (wm != null) { return wm.getContextPath(); } return null; } /** * Returns current editor component instance. * * @return current editor component instance */ public static EditorCookie getCurrentEditorCookie () { Node[] nodes = TopComponent.getRegistry ().getCurrentNodes(); if ( (nodes == null) || (nodes.length != 1) ) return null; Node n = nodes [0]; return (EditorCookie) n.getCookie ( EditorCookie.class ); } public static JEditorPane getCurrentEditor () { EditorCookie e = getCurrentEditorCookie (); if (e == null) { return null; } return getCurrentEditor(e); } /** * Returns current editor component instance. * * @return current editor component instance */ public static JEditorPane getCurrentEditor (EditorCookie e) { JEditorPane[] op = e.getOpenedPanes (); if ((op == null) || (op.length < 1)) return null; return op [0]; } public static String getJavaIdentifier(StyledDocument doc, JEditorPane ep, int offset) { String t = null; if ( (ep.getSelectionStart() <= offset) && (offset <= ep.getSelectionEnd())) { t = ep.getSelectedText(); } if (t != null) { return t; } int line = NbDocument.findLineNumber(doc, offset); int col = NbDocument.findLineColumn(doc, offset); try { javax.swing.text.Element lineElem = org.openide.text.NbDocument.findLineRootElement(doc). getElement(line); if (lineElem == null) { return null; } int lineStartOffset = lineElem.getStartOffset(); int lineLen = lineElem.getEndOffset() - lineStartOffset; t = doc.getText (lineStartOffset, lineLen); int identStart = col; while (identStart > 0 && (Character.isJavaIdentifierPart ( t.charAt (identStart - 1) ) || (t.charAt (identStart - 1) == '.'))) { identStart--; } int identEnd = col; while (identEnd < lineLen && Character.isJavaIdentifierPart(t.charAt(identEnd))) { identEnd++; } if (identStart == identEnd) { return null; } return t.substring (identStart, identEnd); } catch (javax.swing.text.BadLocationException e) { return null; } } public static boolean isScriptlet(StyledDocument doc, JEditorPane ep, int offset) { String t; int line = NbDocument.findLineNumber(doc, offset); int col = NbDocument.findLineColumn(doc, offset); try { while (line > 0) { javax.swing.text.Element lineElem = org.openide.text.NbDocument.findLineRootElement(doc).getElement(line); if (lineElem == null) { continue; } int lineStartOffset = lineElem.getStartOffset(); int lineLen = lineElem.getEndOffset() - lineStartOffset; t = doc.getText (lineStartOffset, lineLen); if ((t != null) && (t.length() > 1)) { int identStart; if (line == NbDocument.findLineNumber(doc, offset)) { identStart = col; } else { identStart = lineLen-1; } while (identStart > 0) { if ((t.charAt(identStart) == '%') && (t.charAt(identStart-1) == '<')) { return true; } if ((t.charAt(identStart) == '>') && (t.charAt(identStart-1) == '%')) { return false; } identStart--; } } line--; } } catch (javax.swing.text.BadLocationException e) { } return false; } public static String getELIdentifier(StyledDocument doc, JEditorPane ep, int offset) { String t = null; if ( (ep.getSelectionStart () <= offset) && (offset <= ep.getSelectionEnd ()) ) t = ep.getSelectedText (); if (t != null) { if ((t.startsWith("$")) && (t.endsWith("}"))) { return t; } else { return null; } } int line = NbDocument.findLineNumber(doc, offset); int col = NbDocument.findLineColumn(doc, offset); try { javax.swing.text.Element lineElem = org.openide.text.NbDocument.findLineRootElement (doc). getElement (line); if (lineElem == null) { return null; } int lineStartOffset = lineElem.getStartOffset (); int lineLen = lineElem.getEndOffset() - lineStartOffset; t = doc.getText (lineStartOffset, lineLen); int identStart = col; while (identStart > 0 && (t.charAt(identStart) != '$')) { identStart--; } if ((identStart > 0) && (t.charAt(identStart) == '$') && (t.charAt(identStart-1) == '\\')) { return null; } int identEnd = col; while ((identEnd < lineLen) && identEnd > 0 && identEnd <= t.length() && (t.charAt(identEnd-1) != '}')) { identEnd++; } if (identStart == identEnd) { return null; } String outp = t.substring(identStart, identEnd); if ((outp.startsWith("$")) && (outp.endsWith("}"))) { return outp; } else { return null; } } catch (javax.swing.text.BadLocationException e) { return null; } } public static String getJavaIdentifier () { EditorCookie e = getCurrentEditorCookie (); if (e == null) { return null; } JEditorPane ep = getCurrentEditor (e); if (ep == null) { return null; } return getJavaIdentifier ( e.getDocument (), ep, ep.getCaret ().getDot () ); } // public static String getELIdentifier () { // EditorCookie e = getCurrentEditorCookie (); // if (e == null) { // return null; // } // JEditorPane ep = getCurrentEditor (e); // if (ep == null) { // return null; // } // return getELIdentifier ( // e.getDocument (), // ep, // ep.getCaret ().getDot () // ); // } public static boolean isScriptlet() { EditorCookie e = getCurrentEditorCookie (); if (e == null) { return false; } JEditorPane ep = getCurrentEditor (e); if (ep == null) { return false; } return isScriptlet( e.getDocument (), ep, ep.getCaret ().getDot () ); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 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.