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: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.j2ee.persistence.api;
043:
044: import org.netbeans.api.java.classpath.ClassPath;
045: import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel;
046: import org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata;
047: import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeImplementation;
048: import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeProvider;
049: import org.netbeans.modules.j2ee.persistenceapi.PersistenceScopeAccessor;
050: import org.openide.filesystems.FileObject;
051: import org.openide.util.Lookup;
052: import org.openide.util.Parameters;
053:
054: /**
055: * Describes a persistence scope. A persistence scope is composed of
056: * a persistence.xml file and the classpath for this persistence.xml file (which
057: * contains all entity classes and JAR files referenced by the persistence units
058: * in the persistence.xml file).
059: *
060: * @author Andrei Badea
061: */
062: public final class PersistenceScope {
063:
064: // XXX remove getClassPath(), not needed anymore
065:
066: private static final Lookup.Result<PersistenceScopeProvider> providers = Lookup
067: .getDefault().lookupResult(PersistenceScopeProvider.class);
068:
069: private final PersistenceScopeImplementation impl;
070:
071: static {
072: PersistenceScopeAccessor.DEFAULT = new PersistenceScopeAccessor() {
073: public PersistenceScope createPersistenceScope(
074: PersistenceScopeImplementation impl) {
075: return new PersistenceScope(impl);
076: }
077: };
078: }
079:
080: /**
081: * Returns the persistence scope for the given file.
082: *
083: * @param fo the file for which to find the persistence scope; cannot be null.
084: *
085: * @return the persistence scope for the given file or null if there is no
086: * persistence scope.
087: *
088: * @throws NullPointerException if the fo parameter was null.
089: */
090: public static PersistenceScope getPersistenceScope(FileObject fo) {
091: Parameters.notNull("fo", fo); // NOI18N
092: for (PersistenceScopeProvider provider : providers
093: .allInstances()) {
094: PersistenceScope persistenceScope = provider
095: .findPersistenceScope(fo);
096: if (persistenceScope != null) {
097: return persistenceScope;
098: }
099: }
100: return null;
101: }
102:
103: private PersistenceScope(PersistenceScopeImplementation impl) {
104: this .impl = impl;
105: }
106:
107: /**
108: * Returns the persistence.xml file of this persistence scope.
109: *
110: * @return the persistence.xml file or null if it the persistence.xml file does
111: * not exist.
112: */
113: public FileObject getPersistenceXml() {
114: return impl.getPersistenceXml();
115: }
116:
117: /**
118: * Returns a model of entity classes for the specified persistence unit.
119: *
120: * @param persistenceUnitName the persistence unit name; cannot be null.
121: *
122: * @return an entity class model or null if the given persistence scope does
123: * not exist.
124: */
125: public MetadataModel<EntityMappingsMetadata> getEntityMappingsModel(
126: String persistenceUnitName) {
127: return impl.getEntityMappingsModel(persistenceUnitName);
128: }
129:
130: /**
131: * Provides the classpath of this persistence scope, which covers the sources
132: * of the entity classes referenced by the persistence.xml file, as well
133: * as the referenced JAR files.
134: *
135: * @return the persistence scope classpath; never null.
136: */
137: public ClassPath getClassPath() {
138: return impl.getClassPath();
139: }
140: }
|