001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * If you wish your version of this file to be governed by only the CDDL
025: * or only the GPL Version 2, indicate your decision by adding
026: * "[Contributor] elects to include this software in this distribution
027: * under the [CDDL or GPL Version 2] license." If you do not indicate a
028: * single choice of license, a recipient has the option to distribute
029: * your version of this file under either the CDDL, the GPL Version 2 or
030: * to extend the choice of license to its licensees as provided above.
031: * However, if you add GPL Version 2 code and therefore, elected the GPL
032: * Version 2 license, then the option applies only if the new code is
033: * made subject to such option by the copyright holder.
034: *
035: * Contributor(s):
036: *
037: * Portions Copyrighted 2008 Sun Microsystems, Inc.
038: */
039: package org.netbeans.modules.compapp.projects.common;
040:
041: import java.io.IOException;
042: import java.util.logging.Level;
043: import java.util.logging.Logger;
044: import org.netbeans.api.project.FileOwnerQuery;
045: import org.netbeans.api.project.Project;
046: import org.netbeans.modules.compapp.projects.common.CatalogWSDL.EntryType;
047: import org.netbeans.modules.xml.catalogsupport.DefaultProjectCatalogSupport;
048: import org.netbeans.modules.xml.retriever.catalog.ProjectCatalogSupport;
049: import org.netbeans.modules.xml.xam.locator.CatalogModelException;
050: import org.netbeans.spi.project.support.ant.AntProjectHelper;
051: import org.netbeans.spi.project.support.ant.ReferenceHelper;
052: import org.openide.filesystems.FileObject;
053: import org.openide.util.Exceptions;
054:
055: /**
056: * This class is a helper class that provide set of utility methods used for
057: * the implicit catalog support in projects.
058: * @author chikkala
059: */
060: public class Helper {
061:
062: /** logger */
063: private static final Logger sLogger = Logger.getLogger(Helper.class
064: .getName());
065:
066: /**
067: * used for creating the DefaultProjectCatalogSupport added to the project lookup.
068: * This is required for a crossproject referencing
069: * @param prj
070: * @param antHelper
071: * @param refHelper
072: * @return
073: */
074: public static ProjectCatalogSupport createDefaultProjectCatalogSupport(
075: Project prj, AntProjectHelper antHelper,
076: ReferenceHelper refHelper) {
077: return new DefaultProjectCatalogSupport(prj, antHelper,
078: refHelper);
079: }
080:
081: /**
082: * used for creating the ImplicitCatalogSupport added to the project lookup.
083: * This is required for a managing implicit namespace referencing
084: * @param prj
085: * @param antHelper
086: * @param refHelper
087: * @return
088: */
089: public static ProjectCatalogSupport createImplicitCatalogSupport(
090: Project prj, AntProjectHelper antHelper,
091: ReferenceHelper refHelper) {
092: return new ImplicitCatalogSupport(prj, antHelper, refHelper);
093: }
094:
095: /**
096: * return true if the project supports both DefaultProjectCatalogSupport and the
097: * ImplicitCatalogSupport
098: * @param prj project to check.
099: * @return true or false
100: */
101: public static boolean hasImplicitCatalogSupport(Project prj) {
102: assert prj != null;
103: DefaultProjectCatalogSupport prjCatSupport = prj.getLookup()
104: .lookup(DefaultProjectCatalogSupport.class);
105: ImplicitCatalogSupport icatSupport = prj.getLookup().lookup(
106: ImplicitCatalogSupport.class);
107: return prjCatSupport != null && icatSupport != null;
108: }
109:
110: /**
111: * returns the fileobject correpsonding to the namespace by looking up the implicit catalog.
112: * @param prj project in which to lookup for the fileobject correpsonding to the namespace.
113: * @param namespace namespace for which the fileobject to be resolved.
114: * @param type EntryType WSDL or XSD. can be null. if null, return first entry found.
115: * @return fileobject
116: */
117: public static FileObject resolveImplicitReference(Project prj,
118: String namespace, EntryType type) {
119: FileObject fo = null;
120: assert prj != null;
121: ImplicitCatalogSupport icatSupport = ImplicitCatalogSupport
122: .getInstance(prj);
123: try {
124: fo = icatSupport.resolveImplicitReference(namespace, type);
125: } catch (Exception ex) {
126: sLogger.log(Level.FINE, ex.getMessage(), ex);
127: }
128: return fo;
129: }
130:
131: /**
132: * returns the fileobject correpsonding to the namespace by looking up the implicit catalog.
133: * @param source fileobject in which the namespace is being used.
134: * @param namespace namespace for which the fileobject to be resolved.
135: * @param type EntryType WSDL or XSD. can be null. if null, return first entry found.
136: * @return fileobject
137: * @throws java.io.IOException
138: */
139: public static FileObject resolveImplicitReference(
140: FileObject source, String namespace, EntryType type)
141: throws IOException {
142: Project prj = FileOwnerQuery.getOwner(source);
143: return resolveImplicitReference(prj, namespace, type);
144: }
145: }
|