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

org.eclipse.persistence.internal.xr.ProjectHelper Maven / Gradle / Ivy

There is a newer version: 4.0.3
Show newest version
/*******************************************************************************
 * Copyright (c) 1998, 2012 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 v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Oracle - initial API and implementation from Oracle TopLink
 ******************************************************************************/
package org.eclipse.persistence.internal.xr;

//javase imports
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

//java eXtension imports

//EclipseLink imports
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.databaseaccess.Platform;
import org.eclipse.persistence.internal.helper.ConversionManager;
import org.eclipse.persistence.internal.indirection.BasicIndirectionPolicy;
import org.eclipse.persistence.internal.xr.XRDynamicEntity;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.ForeignReferenceMapping;
import org.eclipse.persistence.sessions.Login;
import org.eclipse.persistence.sessions.Project;
import static org.eclipse.persistence.internal.xr.XRDynamicClassLoader.COLLECTION_WRAPPER_SUFFIX;

/**
 * 

* INTERNAL: Static helper methods that reads EclipseLink project deployment * XML without classes. *

* This API only supports EclipseLink 1.x format deployment XML */ @SuppressWarnings({"rawtypes"}) public class ProjectHelper { /** * INTERNAL: Fix the given EclipseLink OR and OX projects so that the * descriptors for all generated sub-classes of XRDynamicEntity have the correct * AttributeAccessors. */ public static void fixOROXAccessors(Project orProject, Project oxProject) { for (Iterator i = orProject.getDescriptors().values().iterator(); i.hasNext();) { ClassDescriptor desc = (ClassDescriptor)i.next(); Class clz = desc.getJavaClass(); if (!XRDynamicEntity.class.isAssignableFrom(clz)) { continue; } ClassDescriptor xdesc = null; if (oxProject != null) { xdesc = oxProject.getDescriptorForAlias(desc.getAlias()); } XRDynamicPropertiesManager xrDPM = null; if (!clz.getName().endsWith(COLLECTION_WRAPPER_SUFFIX)) { try { XRDynamicEntity newInstance = (XRDynamicEntity)clz.newInstance(); xrDPM = newInstance.fetchPropertiesManager(); } catch (Exception e) { e.printStackTrace(); } } Set propertiesNameSet = new HashSet(); for (Iterator j = desc.getMappings().iterator(); j.hasNext();) { DatabaseMapping dm = (DatabaseMapping)j.next(); String attributeName = dm.getAttributeName(); DatabaseMapping xdm = null; if (xdesc != null) { xdm = xdesc.getMappingForAttributeName(attributeName); } dm.setAttributeAccessor(new XRDynamicEntityAccessor(dm)); if (xdm != null) { if (dm.isForeignReferenceMapping()) { ForeignReferenceMapping frm = (ForeignReferenceMapping)dm; if (frm.usesIndirection() && frm.getIndirectionPolicy().getClass(). isAssignableFrom(BasicIndirectionPolicy.class)) { xdm.setAttributeAccessor(new XRDynamicEntityVHAccessor(dm)); } else { // no indirection or indirection that is transparent enough (!) to work xdm.setAttributeAccessor(new XRDynamicEntityAccessor(dm)); } } else { xdm.setAttributeAccessor(new XRDynamicEntityAccessor(dm)); } } propertiesNameSet.add(attributeName); } if (xrDPM != null) { xrDPM.setPropertyNames(propertiesNameSet); } } // turn-off dynamic class generation ClassLoader cl = null; Login login = orProject.getDatasourceLogin(); if (login != null) { Platform platform = login.getDatasourcePlatform(); if (platform != null) { ConversionManager conversionManager = platform.getConversionManager(); if (conversionManager != null) { cl = conversionManager.getLoader(); } } } if (cl != null && cl instanceof XRDynamicClassLoader) { XRDynamicClassLoader xrdecl = (XRDynamicClassLoader)cl; xrdecl.dontGenerateSubclasses(); } if (oxProject != null) { cl = null; login = oxProject.getDatasourceLogin(); if (login != null) { Platform platform = login.getDatasourcePlatform(); if (platform != null) { ConversionManager conversionManager = platform.getConversionManager(); if (conversionManager != null) { cl = conversionManager.getLoader(); } } } if (cl != null && cl instanceof XRDynamicClassLoader) { XRDynamicClassLoader xrdecl = (XRDynamicClassLoader)cl; xrdecl.dontGenerateSubclasses(); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy