All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.jaxb.javamodel.reflection.JavaModelImpl Maven / Gradle / Ivy

There is a newer version: 5.0.0-B03
Show newest version
/*
 * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.jaxb.javamodel.reflection;

import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;

import org.eclipse.persistence.exceptions.JAXBException;
import org.eclipse.persistence.internal.jaxb.JaxbClassLoader;
import org.eclipse.persistence.jaxb.javamodel.JavaAnnotation;
import org.eclipse.persistence.jaxb.javamodel.JavaClass;
import org.eclipse.persistence.jaxb.javamodel.JavaModel;

/**
 * INTERNAL:
 * 

Purpose:The JavaModel is the central access point to the TopLink * JAXB 2.0 Java model implementation's source/class files. A JavaModel has * an underlying source/classpath that defines its search path. * *

Responsibilities: *

    *
  • Return a JavaClass based on a Class or Class name
  • *
  • Return a JDK Annotation for a given JavaAnnotation
  • *
* * @since Oracle TopLink 11.1.1.0.0 * @see org.eclipse.persistence.jaxb.javamodel.JavaModel */ public class JavaModelImpl implements JavaModel { protected ClassLoader classLoader; private AnnotationHelper annotationHelper; private Map metadataCompletePackages; private Map cachedJavaClasses; private boolean hasXmlBindings = false; private boolean isJaxbClassLoader = false; public JavaModelImpl(ClassLoader classLoader) { setClassLoader(classLoader); this.annotationHelper = new AnnotationHelper(); } public JavaModelImpl(ClassLoader classLoader, AnnotationHelper annotationHelper) { setClassLoader(classLoader); this.annotationHelper = annotationHelper; } private void setClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; if (classLoader instanceof JaxbClassLoader) { isJaxbClassLoader = true; } } @Override public JavaClass getClass(Class jClass) { try { if(null == jClass) { return null; } JavaClassImpl javaClass = getCachedJavaClasses().get(jClass.getName()); if(javaClass == null) { javaClass = new JavaClassImpl(jClass, this); getCachedJavaClasses().put(jClass.getName(), javaClass); } // may need to set metadata complete indicator on the class if (metadataCompletePackages != null && metadataCompletePackages.containsKey(javaClass.getPackageName())) { javaClass.setIsMetadataComplete(metadataCompletePackages.get(javaClass.getPackageName())); } if(isJaxbClassLoader) { ((JaxbClassLoader) classLoader).putClass(jClass.getCanonicalName(), jClass); } return javaClass; } catch (Exception x) { return null; } } @Override public JavaClass getClass(String className) { try { if (className.contains("[")) { Class clazz = Class.forName(className); if (clazz != null) { return getClass(clazz); } } Class clazz = this.classLoader.loadClass(className); return getClass(clazz); } catch(ClassNotFoundException e) { throw JAXBException.classNotFoundException(className); } } @Override public ClassLoader getClassLoader() { return this.classLoader; } @Override public Annotation getAnnotation(JavaAnnotation janno, Class jClass) { return ((JavaAnnotationImpl) janno).getJavaAnnotation(); } public AnnotationHelper getAnnotationHelper() { return this.annotationHelper; } /** * Set the Map of package names to metadata complete indicators for this * JavaModelInput. If a given package has no entry in this map it is * assumed to be metadata incomplete. * * @param metadataCompletePackageMap */ public void setMetadataCompletePackageMap(Map metadataCompletePackageMap) { this.metadataCompletePackages = metadataCompletePackageMap; } public Map getCachedJavaClasses() { if(this.cachedJavaClasses == null) { this.cachedJavaClasses = new HashMap(); } return this.cachedJavaClasses; } public boolean hasXmlBindings() { return hasXmlBindings; } public void setHasXmlBindings(boolean hasXmlBindings) { this.hasXmlBindings = hasXmlBindings; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy