DDUtils.java :  » IDE-Netbeans » j2ee » org » netbeans » modules » j2ee » ddloaders » web » multiview » Java Open Source

Java Open Source » IDE Netbeans » j2ee 
j2ee » org » netbeans » modules » j2ee » ddloaders » web » multiview » DDUtils.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
 * specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the
 * License Header, with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Contributor(s):
 *
 * The Original Software is NetBeans. The Initial Developer of the Original
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
 * Microsystems, Inc. All Rights Reserved.
 *
 * If you wish your version of this file to be governed by only the CDDL
 * or only the GPL Version 2, indicate your decision by adding
 * "[Contributor] elects to include this software in this distribution
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
 * single choice of license, a recipient has the option to distribute
 * your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above.
 * However, if you add GPL Version 2 code and therefore, elected the GPL
 * Version 2 license, then the option applies only if the new code is
 * made subject to such option by the copyright holder.
 */

package org.netbeans.modules.j2ee.ddloaders.web.multiview;

import org.netbeans.modules.j2ee.dd.api.web.*;
import org.netbeans.modules.j2ee.ddloaders.web.DDDataObject;
import org.netbeans.modules.web.api.webmodule.WebModule;
import org.netbeans.modules.web.api.webmodule.WebProjectConstants;
import org.netbeans.api.project.*;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.openide.loaders.DataObject;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.NbBundle;

/**
 * @author mkuchtiak
 */
public class DDUtils {
    
    public static String[] getUrlPatterns(WebApp webApp, Servlet servlet) {
        if (servlet.getServletName()==null) return new String[]{};
        ServletMapping[] mapping = webApp.getServletMapping();
        java.util.List maps = new java.util.ArrayList();
        for (int i=0;i<mapping.length;i++) {
            if (servlet.getServletName().equals(mapping[i].getServletName())) {
                String urlPattern = mapping[i].getUrlPattern();
                if (urlPattern!=null) maps.add(urlPattern);
            }
        }
        String[] urlPatterns = new String[maps.size()];
        maps.toArray(urlPatterns);
        return urlPatterns;
    }
    
    public static String[] getUrlPatterns(WebApp webApp, Filter filter) {
        if (filter.getFilterName()==null) return new String[]{};
        FilterMapping[] mapping = webApp.getFilterMapping();
        java.util.List maps = new java.util.ArrayList();
        for (int i=0;i<mapping.length;i++) {
            if (filter.getFilterName().equals(mapping[i].getFilterName())) {
                String urlPattern = mapping[i].getUrlPattern();
                if (urlPattern!=null) maps.add(urlPattern);
                else {
                    String servletName = mapping[i].getServletName();
                    if (servletName!=null) maps.add(servletName);
                }
            }
        }
        String[] urlPatterns = new String[maps.size()];
        maps.toArray(urlPatterns);
        return urlPatterns;
    }
    
    public static String[] getStringArray(String text) {
        java.util.StringTokenizer tok = new java.util.StringTokenizer(text,",");
        java.util.Set set = new java.util.HashSet();
        while (tok.hasMoreTokens()) {
            String token = tok.nextToken().trim();
            if (token.length()>0) set.add(token);
        }
        String[] stringArray = new String[set.size()];
        set.toArray(stringArray);
        return stringArray;
    }
    
    public static boolean isServletMapping(WebApp webApp, String urlPattern) {
        return webApp.findBeanByName("ServletMapping","UrlPattern",urlPattern)!=null;
    }
    
    public static boolean isServletMapping(WebApp webApp, Servlet servlet, String urlPattern) {
        ServletMapping[] maps = webApp.getServletMapping();
        String servletName = servlet.getServletName();
        if (servletName!=null) {
            for (int i=0;i<maps.length;i++) {
                if (urlPattern.equals(maps[i].getUrlPattern()) && !servletName.equals(maps[i].getServletName()) ) {
                    return true;
                }
            }
        }
        return false;
    }
    
    public static String urlPatternList(String[] urlPatterns) {
        if (urlPatterns==null) return "";
        StringBuffer buf = new StringBuffer();
        for (int i=0;i<urlPatterns.length;i++) {
            if (i>0) buf.append(", "); //NOI18N
            buf.append(urlPatterns[i]);
        }
        return buf.toString();
    }
    
    public static void addServletMappings(WebApp webApp, Servlet servlet, String[] urlPatterns) {
        String servletName = servlet.getServletName();
        try {
            for (int i=0;i<urlPatterns.length;i++) {
                ServletMapping map = (ServletMapping)webApp.createBean("ServletMapping"); //NOI18
                map.setServletName(servletName);
                map.setUrlPattern(urlPatterns[i]);
                webApp.addServletMapping(map);
            }
        } catch (ClassNotFoundException ex){}
    }
    
    public static void setServletMappings(WebApp webApp, Servlet servlet, String[] urlPatterns) {
        String servletName = servlet.getServletName();
        java.util.List oldMaps = getServletMappingList(webApp,servlet);
        java.util.List newPatterns = new java.util.ArrayList();
        // looking for old mappings
        for (int i=0;i<urlPatterns.length;i++) {
            boolean found =false;
            for (int j=0;j<oldMaps.size();j++) {
                ServletMapping oldMap = (ServletMapping)oldMaps.get(j);
                if (urlPatterns[i].equals(oldMap.getUrlPattern())) {
                    oldMaps.remove(oldMap);
                    found=true;
                    break;
                }
            }
            if (!found) newPatterns.add(urlPatterns[i]);
        }
        int min = java.lang.Math.min(oldMaps.size(),newPatterns.size());
        // replace old mappings
        for (int i=0;i<min;i++) {
            ServletMapping oldMap = (ServletMapping)oldMaps.get(i);
            oldMap.setUrlPattern((String)newPatterns.get(i));
        }
        // add new mappings
        try {
            for (int i=min;i<newPatterns.size();i++) {
                ServletMapping map = (ServletMapping)webApp.createBean("ServletMapping"); //NOI18
                map.setServletName(servletName);
                map.setUrlPattern((String)newPatterns.get(i));
                webApp.addServletMapping(map);
            }
        } catch (ClassNotFoundException ex){}
        // removing old mappings
        for (int i=min;i<oldMaps.size();i++) {
            webApp.removeServletMapping((ServletMapping)oldMaps.get(i));
        }
    }
    
    public static ServletMapping[] getServletMappings(WebApp webApp, Servlet servlet) {
        java.util.List maps = getServletMappingList(webApp,servlet);
        ServletMapping[] newMappings = new ServletMapping[maps.size()];
        maps.toArray(newMappings);
        return newMappings;
    }
    
    public static FilterMapping[] getFilterMappings(WebApp webApp, Filter filter) {
        java.util.List maps = getFilterMappingList(webApp,filter);
        FilterMapping[] newMappings = new FilterMapping[maps.size()];
        maps.toArray(newMappings);
        return newMappings;
    }
    
    /**
     * @return filter mappings that refer to given <code>servlet</code>. 
     */
    public static FilterMapping[] getFilterMappings(WebApp webApp, Servlet servlet) {
        java.util.List maps = new java.util.ArrayList();
        if (servlet == null){
            return new FilterMapping[0];
        }
        FilterMapping[] mapping = webApp.getFilterMapping();
        for (int i=0;i<mapping.length;i++) {
            FilterMapping fm = mapping[i];
            if (fm.getServletName() != null && fm.getServletName().equals(servlet.getServletName())){
                maps.add(fm);
            }
        }
        return (FilterMapping[]) maps.toArray(new FilterMapping[maps.size()]);
    }
    
    private static java.util.List getServletMappingList(WebApp webApp, Servlet servlet) {
        String servletName = servlet.getServletName();
        java.util.List maps = new java.util.ArrayList();
        if (servletName==null) return maps;
        ServletMapping[] mapping = webApp.getServletMapping();
        for (int i=0;i<mapping.length;i++) {
            if (servlet.getServletName().equals(mapping[i].getServletName())) {
                maps.add(mapping[i]);
            }
        }
        return maps;
    }
    
    private static java.util.List getFilterMappingList(WebApp webApp, Filter filter) {
        String filterName = filter.getFilterName();
        java.util.List maps = new java.util.ArrayList();
        if (filterName==null) return maps;
        FilterMapping[] mapping = webApp.getFilterMapping();
        for (int i=0;i<mapping.length;i++) {
            if (filter.getFilterName().equals(mapping[i].getFilterName())) {
                maps.add(mapping[i]);
            }
        }
        return maps;
    }
    
    public static void openEditorFor(DDDataObject dObj, String className) {
        if (className==null || className.length()==0) return;
        try {
            SourceGroup[] sourceGroups =  getJavaSourceGroups(dObj);
            String resource = className.trim().replace('.','/');
            for (int i=0;i<sourceGroups.length;i++) {
                FileObject fo = sourceGroups[i].getRootFolder();
                FileObject target = fo.getFileObject(resource+".java"); //NOI18N
                if (target!=null) {
                    DataObject javaDo = DataObject.find(target);
                    org.openide.cookies.OpenCookie cookie =
                            (org.openide.cookies.OpenCookie)javaDo.getCookie(org.openide.cookies.OpenCookie.class);
                    if (cookie !=null) {
                        cookie.open();
                        return;
                    }
                }
            }
        } catch (java.io.IOException ex) {}
        org.openide.DialogDisplayer.getDefault().notify(new org.openide.NotifyDescriptor.Message(
                org.openide.util.NbBundle.getMessage(DDUtils.class,"MSG_sourceNotFound")));
    }
    
    public static void openEditorForSingleFile(DDDataObject dObj, String fileName) {
        if (fileName==null || fileName.length()==0) return;
        FileObject docBase = null;
        try {
            docBase = getDocumentBase(dObj);
        } catch (java.io.IOException ex) {return;}
        if (docBase!=null) {
            FileObject target = docBase.getFileObject(fileName.trim());
            if (target!=null) {
                try {
                    DataObject javaDo = DataObject.find(target);
                    org.openide.cookies.OpenCookie cookie =
                            (org.openide.cookies.OpenCookie)javaDo.getCookie(org.openide.cookies.OpenCookie.class);
                    if (cookie !=null) {
                        cookie.open();
                        return;
                    }
                } catch (org.openide.loaders.DataObjectNotFoundException ex) {}
            }
        }
        org.openide.DialogDisplayer.getDefault().notify(new org.openide.NotifyDescriptor.Message(
                org.openide.util.NbBundle.getMessage(DDUtils.class,"MSG_sourceNotFound")));
    }
    
    public static void openEditorForFiles(DDDataObject dObj, java.util.StringTokenizer tok) {
        FileObject docBase = null;
        try {
            docBase = getDocumentBase(dObj);
        } catch (java.io.IOException ex) {return;}
        if (!tok.hasMoreTokens()) return;
        boolean found=false;
        if (docBase!=null)
            while (tok.hasMoreTokens()) {
            String resource = tok.nextToken().trim();
            if (resource.length()>0) {
                FileObject target = docBase.getFileObject(resource);
                if (target!=null) {
                    try {
                        DataObject javaDo = DataObject.find(target);
                        org.openide.cookies.OpenCookie cookie =
                                (org.openide.cookies.OpenCookie)javaDo.getCookie(org.openide.cookies.OpenCookie.class);
                        if (cookie !=null) {
                            cookie.open();
                            found=true;
                        }
                    } catch (org.openide.loaders.DataObjectNotFoundException ex) {}
                }
            }
            }
        if (!found) {
            org.openide.DialogDisplayer.getDefault().notify(new org.openide.NotifyDescriptor.Message(
                    org.openide.util.NbBundle.getMessage(DDUtils.class,"MSG_sourcesNotFound")));
        }
    }
    
    public static SourceGroup[] getJavaSourceGroups(DDDataObject dObj) throws java.io.IOException {
        Project proj = FileOwnerQuery.getOwner(dObj.getPrimaryFile());
        if (proj==null) return new SourceGroup[]{};
        Sources sources = ProjectUtils.getSources(proj);
        return sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
    }
    
    public static SourceGroup[] getDocBaseGroups(DDDataObject dObj) throws java.io.IOException {
        Project proj = FileOwnerQuery.getOwner(dObj.getPrimaryFile());
        if (proj==null) return new SourceGroup[]{};
        Sources sources = ProjectUtils.getSources(proj);
        return sources.getSourceGroups(WebProjectConstants.TYPE_DOC_ROOT);
    }
    
    public static FileObject getDocumentBase(DDDataObject dObj) throws java.io.IOException {
        WebModule wm = WebModule.getWebModule(dObj.getPrimaryFile());
        if (wm==null) return null;
        return wm.getDocumentBase();
    }
    
    public static String getResourcePath(SourceGroup[] groups, FileObject fo) {
        return getResourcePath(groups, fo, '.', false);
    }
    
    public static String getResourcePath(SourceGroup[] groups, FileObject fo, char separator) {
        return getResourcePath(groups, fo, separator, false);
    }
    
    public static String getResourcePath(SourceGroup[] groups, FileObject fo, char separator, boolean withExt) {
        for (int i=0;i<groups.length;i++) {
            FileObject root = groups[i].getRootFolder();
            if (FileUtil.isParentOf(root,fo)) {
                String relativePath = FileUtil.getRelativePath(root,fo);
                if (relativePath!=null) {
                    if (separator!='/') relativePath = relativePath.replace('/',separator);
                    if (!withExt) {
                        int index = relativePath.lastIndexOf((int)'.');
                        if (index>0) relativePath = relativePath.substring(0,index);
                    }
                    return relativePath;
                } else {
                    return "";
                }
            }
        }
        return "";
    }
    /** removes all filter mappings for given servlet name
     */
    public static void removeServletMappings(WebApp webApp, String servletName) {
        if (servletName==null) return;
        ServletMapping[] oldMaps = webApp.getServletMapping();
        for (int i=0;i<oldMaps.length;i++) {
            if (servletName.equals(oldMaps[i].getServletName())) {
                webApp.removeServletMapping(oldMaps[i]);
            }
        }
    }
    /** removes all filter mappings for given filter name
     * @return Stack of deleted rows
     */
    public static java.util.Stack removeFilterMappings(WebApp webApp, String filterName) {
        java.util.Stack deletedRows = new java.util.Stack();
        if (filterName==null) return deletedRows;
        FilterMapping[] oldMaps = webApp.getFilterMapping();
        for (int i=0;i<oldMaps.length;i++) {
            if (filterName.equals(oldMaps[i].getFilterName())) {
                webApp.removeFilterMapping(oldMaps[i]);
                deletedRows.push(new Integer(i));
            }
        }
        return deletedRows;
    }
    
    /** removes all filter mappings for given servlet name
     */
    public static void removeFilterMappingsForServlet(WebApp webApp, String servletName) {
        java.util.Stack deletedRows = new java.util.Stack();
        if (servletName==null) return;
        FilterMapping[] oldMaps = webApp.getFilterMapping();
        for (int i=0;i<oldMaps.length;i++) {
            if (servletName.equals(oldMaps[i].getServletName())) {
                webApp.removeFilterMapping(oldMaps[i]);
            }
        }
    }
    
    public static String addItem(String text, String newItem, boolean asFirst) {
        String[] stringArray = getStringArray(text);
        java.util.List list = new java.util.ArrayList();
        if (asFirst) {
            list.add(newItem);
            for (int i=0;i<stringArray.length;i++) {
                if (!newItem.equals(stringArray[i])) list.add(stringArray[i]);
            }
        } else {
            for (int i=0;i<stringArray.length;i++) {
                if (!newItem.equals(stringArray[i])) list.add(stringArray[i]);
            }
            list.add(newItem);
        }
        return getAsString(list);
    }
    
    private static String getAsString(java.util.List list) {
        StringBuffer buf = new StringBuffer();
        for (int i=0;i<list.size();i++) {
            if (i>0) buf.append(", "); //NOI18N
            buf.append((String)list.get(i));
        }
        return buf.toString();
    }
    
    public static String[] getServletNames(WebApp webApp) {
        Servlet[] allServlets = webApp.getServlet();
        java.util.List list = new java.util.ArrayList();
        for (int i=0;i<allServlets.length;i++) {
            String servletName = allServlets[i].getServletName();
            if (servletName!=null && !list.contains(allServlets[i])) list.add(servletName);
        }
        String[] names = new String[list.size()];
        list.toArray(names);
        return names;
    }
    
    public static String[] getFilterNames(WebApp webApp) {
        Filter[] filters = webApp.getFilter();
        java.util.List list = new java.util.ArrayList();
        for (int i=0;i<filters.length;i++) {
            String filterName = filters[i].getFilterName();
            if (filterName!=null && !list.contains(filters[i])) list.add(filterName);
        }
        String[] names = new String[list.size()];
        list.toArray(names);
        return names;
    }
    
    public static String checkServletMappig(String uri) {
        if (!uri.matches("[\\*/].*")) { //NOI18N
            return NbBundle.getMessage(DDUtils.class,"MSG_WrongUriStart");
        } else if (uri.length()>1  && uri.endsWith("/")) {
            return NbBundle.getMessage(DDUtils.class,"MSG_WrongUriEnd");
        } else if (uri.matches(".*\\*.*\\*.*")) { //NOI18N
            return NbBundle.getMessage(DDUtils.class,"MSG_TwoAsterisks");
        } else if (uri.matches("..*\\*..*")) { //NOI18N
            return NbBundle.getMessage(DDUtils.class,"MSG_AsteriskInTheMiddle");
        }
        return null;
    }
    
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.