Package com.sun.jdo.spi.persistence.support.ejb.ejbc

Source Code of com.sun.jdo.spi.persistence.support.ejb.ejbc.NameMapper

/*
* 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 https://glassfish.dev.java.net/public/CDDL+GPL.html
* or glassfish/bootstrap/legal/LICENSE.txt.  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 glassfish/bootstrap/legal/LICENSE.txt.
* 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):
*
* 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 don't 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.
*/

/*
* NameMapper.java
*
* Created on December 3, 2001, 5:09 PM
*/

package com.sun.jdo.spi.persistence.support.ejb.ejbc;

import java.util.*;

import com.sun.enterprise.deployment.*;

import com.sun.enterprise.deployment.EjbBundleDescriptor;
import com.sun.enterprise.deployment.IASEjbCMPEntityDescriptor;

import com.sun.jdo.spi.persistence.utility.StringHelper;
import com.sun.jdo.spi.persistence.utility.JavaTypeHelper;

/** This is a subclass of
* {@link com.sun.jdo.spi.persistence.support.ejb.model.util.NameMapper} (in
* the <code>com.sun.jdo.spi.persistence.support.ejb.model.util</code>
* package) which implements the abstract methods based on an IAS
* implementation.
*
* @author Rochelle Raccah
*/
public class NameMapper extends
  com.sun.jdo.spi.persistence.support.ejb.model.util.NameMapper
{
  private static String EJB_NAME = "EJB_NAME"; // NOI18N
  private static String ABSTRACT_SCHEMA_NAME = "ABSTRACT_SCHEMA_NAME"; // NOI18N
  private static String PERSISTENCE_NAME = "PERSISTENCE_NAME"; // NOI18N
  private static String LOCAL_NAME = "LOCAL_NAME"; // NOI18N
  private static String REMOTE_NAME = "REMOTE_NAME"; // NOI18N

  private final boolean _expandPCNames;
  private Map _nameTypeToNameMap;

    /**
     * Signature with CVS keyword substitution for identifying the generated code
     */
    public static final String SIGNATURE = "$RCSfile: NameMapper.java,v $ $Revision: 1.3 $"; //NOI18N        
       
  /** Creates a new instance of NameMapper
   * @param bundleDescriptor the IASEjbBundleDescriptor which defines the
   * universe of names for this application.
   */
  public NameMapper (EjbBundleDescriptor bundleDescriptor)
  {
    this(bundleDescriptor, true);
  }

  /** Creates a new instance of NameMapper
   * @param bundleDescriptor the IASEjbBundleDescriptor which defines the
   * universe of names for this application.
   * @param expandPersistenceClassNames flag to indicate whether
   * persistence class names should differ from bean names
   */
  public NameMapper (EjbBundleDescriptor bundleDescriptor,
    boolean expandPersistenceClassNames)
  {
    super(bundleDescriptor);
    _expandPCNames = expandPersistenceClassNames;
    initMap();
  }

  private void initMap ()
  {
    Iterator iterator = getBundleDescriptor().getEjbs().iterator();
    Map ejbMap = new HashMap();
    Map persistenceClassMap = new HashMap();
    Set localNames = new HashSet();
    Set remoteNames = new HashSet();
    Map abstractSchemaMap = new HashMap();

    _nameTypeToNameMap = new HashMap();

    while (iterator.hasNext())
    {
      Object next = iterator.next();

      if (next instanceof IASEjbCMPEntityDescriptor)
      {
        IASEjbCMPEntityDescriptor descriptor =
          (IASEjbCMPEntityDescriptor)next;
        String ejbName = descriptor.getName();

        ejbMap.put(ejbName, descriptor);
        safePut(persistenceClassMap,
          getPersistenceClassForDescriptor(descriptor), ejbName);
        safeAdd(localNames, descriptor.getLocalClassName());
        safeAdd(remoteNames, descriptor.getRemoteClassName());
        safePut(abstractSchemaMap,
          descriptor.getAbstractSchemaName(), ejbName);
      }
    }
    _nameTypeToNameMap.put(EJB_NAME, ejbMap);
    _nameTypeToNameMap.put(PERSISTENCE_NAME, persistenceClassMap);
    _nameTypeToNameMap.put(LOCAL_NAME, localNames);
    _nameTypeToNameMap.put(REMOTE_NAME, remoteNames);
    _nameTypeToNameMap.put(ABSTRACT_SCHEMA_NAME, abstractSchemaMap);
  }

  // puts a key-value pair in a map as long as the key is not null
  private void safePut (Map map, Object key, Object value)
  {
    if ((key != null) && (map != null))
      map.put(key, value);
  }
  // puts a value in a set as long as the object is not null
  private void safeAdd (Set set, Object value)
  {
    if ((value != null) && (set != null))
      set.add(value);
  }

  private Map getMap () { return _nameTypeToNameMap; }

  /** Determines if the specified name represents an ejb.
   * @param name the fully qualified name to be checked
   * @return <code>true</code> if this name represents an ejb;
   * <code>false</code> otherwise.
   */
  public boolean isEjbName (String name)
  {
    return mapContainsKey(EJB_NAME, name);
  }

  /** Gets the EjbCMPEntityDescriptor which represents the ejb 
   * with the specified name.
   * @param name the name of the ejb
   * @return the EjbCMPEntityDescriptor which represents the ejb.
   */
  public EjbCMPEntityDescriptor getDescriptorForEjbName (String name)
  {
    Map ejbMap = (Map)getMap().get(EJB_NAME);
    Object descriptor = ejbMap.get(name);

    return (((descriptor != null) &&
      (descriptor instanceof EjbCMPEntityDescriptor)) ?
      (EjbCMPEntityDescriptor)descriptor : null);
  }

  private IASEjbCMPEntityDescriptor getIASDescriptorForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return (((descriptor != null) &&
      (descriptor instanceof IASEjbCMPEntityDescriptor)) ?
      (IASEjbCMPEntityDescriptor)descriptor : null);
  }

  /** Gets the name of the abstract bean class which corresponds to the
   * specified ejb name.
   * @param name the name of the ejb
   * @return the name of the abstract bean for the specified ejb
   */
  public String getAbstractBeanClassForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ? descriptor.getEjbClassName() : null);
  }

  /** Gets the name of the key class which corresponds to the specified
   * ejb name.
   * @param name the name of the ejb
   * @return the name of the key class for the ejb
   */
  public String getKeyClassForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ?
      descriptor.getPrimaryKeyClassName() : null);
  }

  /** Gets the name of the ejb which corresponds to the specified abstract
   * schema name.
   * @param schemaName the name of the abstract schema
   * @return the name of the ejb for the specified abstract schema
   */
  public String getEjbNameForAbstractSchema (String schemaName)
  {
    Map abstractSchemaMap = (Map)getMap().get(ABSTRACT_SCHEMA_NAME);

    return (String)abstractSchemaMap.get(schemaName);
  }

  /** Gets the name of the abstract schema which corresponds to the
   * specified ejb.
   * @param name the name of the ejb
   * @return the name of the abstract schema for the specified ejb
   */
  public String getAbstractSchemaForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ?
      descriptor.getAbstractSchemaName() : null);
  }

  /** Gets the name of the concrete bean class which corresponds to the
   * specified ejb.
   * @param name the name of the ejb
   * @return the name of the concrete bean for the specified ejb
   */
  public String getConcreteBeanClassForEjbName (String name)
  {
    IASEjbCMPEntityDescriptor descriptor =
      getIASDescriptorForEjbName(name);

    return ((descriptor != null) ? getQualifiedName(
      getAbstractBeanClassForEjbName(name),
      descriptor.getConcreteImplClassName()) : null);
  }

  private String getQualifiedName (String classNameWithPackage,
    String classNameToQualify)
  {
    if (!StringHelper.isEmpty(classNameToQualify))
    {
      String packageName =
        JavaTypeHelper.getPackageName(classNameToQualify);
     
      if (StringHelper.isEmpty(packageName))  // not already qualified
      {
        packageName =
          JavaTypeHelper.getPackageName(classNameWithPackage);

        if (!StringHelper.isEmpty(packageName))
          return packageName + '.' + classNameToQualify;
      }
    }

    return classNameToQualify;
  }

  /** Gets the name of the ejb name which corresponds to the
   * specified persistence-capable class name.
   * @param className the name of the persistence-capable
   * @return the name of the ejb for the specified persistence-capable
   */
  public String getEjbNameForPersistenceClass (String className)
  {
    Map pcMap = (Map)getMap().get(PERSISTENCE_NAME);

    return (String)pcMap.get(className);
  }

  /** Gets the name of the persistence-capable class which corresponds to
   * the specified ejb name.
   * @param name the name of the ejb
   * @return the name of the persistence-capable for the specified ejb
   */
  public String getPersistenceClassForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ?
      getPersistenceClassForDescriptor(descriptor) : null);
  }

  private String getPersistenceClassForDescriptor (
    EjbCMPEntityDescriptor descriptor)
  {
    String pcName = ((descriptor instanceof IASEjbCMPEntityDescriptor) ?
      ((IASEjbCMPEntityDescriptor)descriptor).getPcImplClassName() :
      null);

    // use the package name, keep the ejb name
    if ((pcName != null) && !_expandPCNames)
    {
      pcName = JavaTypeHelper.getPackageName(pcName) +
        '.' + descriptor.getName();
    }

    return pcName;
  }

  private boolean mapContainsKey (String stringIndex, String name)
  {
    Object mapObject = getMap().get(stringIndex);
    Set testSet = ((mapObject instanceof Set) ? (Set)mapObject :
      ((Map)mapObject).keySet());

    return ((name != null) ? testSet.contains(name) : false);
  }

  /** Determines if the specified name represents a local interface.
   * @param name the fully qualified name to be checked
   * @return <code>true</code> if this name represents a local interface;
   * <code>false</code> otherwise.
   */
  public boolean isLocalInterface (String name)
  {
    return mapContainsKey(LOCAL_NAME, name);
  }

  /** Gets the name of the ejb which corresponds to the specified
   * local interface name.
   * @param ejbName the name of the ejb which contains fieldName
   * from which to find relationship and therefore the local interface
   * @param fieldName the name of the field in the ejb
   * @param interfaceName the name of the local interface
   * @return the name of the ejb for the specified local interface
   */
  public String getEjbNameForLocalInterface (String ejbName,
    String fieldName, String interfaceName)
  {
    EjbCMPEntityDescriptor descriptor =
      getRelatedEjbDescriptor(ejbName, fieldName);

    return (((descriptor != null) && !StringHelper.isEmpty(interfaceName)
      && interfaceName.equals(descriptor.getLocalClassName())) ?
      descriptor.getName() : null);
  }

  /** Gets the name of the local interface which corresponds to the
   * specified ejb name.
   * @param name the name of the ejb
   * @return the name of the local interface for the specified ejb
   */
  public String getLocalInterfaceForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ? descriptor.getLocalClassName() : null);
  }

  /** Determines if the specified name represents a remote interface.
   * @param name the fully qualified name to be checked
   * @return <code>true</code> if this name represents a remote interface;
   * <code>false</code> otherwise.
   */
  public boolean isRemoteInterface (String name)
  {
    return mapContainsKey(REMOTE_NAME, name);
  }

  /** Gets the name of the ejb which corresponds to the specified
   * remote interface name.
   * @param ejbName the name of the ejb which contains fieldName
   * from which to find relationship and therefore the remote interface
   * @param fieldName the name of the field in the ejb
   * @param interfaceName the name of the remote interface
   * @return the name of the ejb for the specified remote interface
   */
  public String getEjbNameForRemoteInterface (String ejbName,
    String fieldName, String interfaceName)
  {
    EjbCMPEntityDescriptor descriptor =
      getRelatedEjbDescriptor(ejbName, fieldName);

    return (((descriptor != null) && !StringHelper.isEmpty(interfaceName)
      && interfaceName.equals(descriptor.getRemoteClassName())) ?
      descriptor.getName() : null);
  }

  /** Gets the name of the remote interface which corresponds to the
   * specified ejb name.
   * @param name the name of the ejb
   * @return the name of the remote interface for the specified ejb
   */
  public String getRemoteInterfaceForEjbName (String name)
  {
    EjbCMPEntityDescriptor descriptor = getDescriptorForEjbName(name);

    return ((descriptor != null) ? descriptor.getRemoteClassName() : null);
  }

  private EjbCMPEntityDescriptor getRelatedEjbDescriptor (
    String ejbName, String ejbFieldName)
  {
    EjbCMPEntityDescriptor descriptor = ((ejbName != null) ?
      getDescriptorForEjbName(ejbName) : null);

    if (descriptor != null)
    {
      PersistenceDescriptor persistenceDescriptor =
        descriptor.getPersistenceDescriptor();
      CMRFieldInfo cmrf =
        persistenceDescriptor.getCMRFieldInfoByName(ejbFieldName);
     
      return cmrf.role.getPartner().getOwner();
    }

    return null;
  }

  /** Gets the name of the field in the ejb which corresponds to the
   * specified persistence-capable class name and field name pair.
   * @param className the name of the persistence-capable
   * @param fieldName the name of the field in the persistence-capable
   * @return the name of the field in the ejb for the specified
   * persistence-capable field
   */
  public String getEjbFieldForPersistenceField (String className,
    String fieldName)
  {
    return fieldName;
  }

  /** Gets the name of the field in the persistence-capable class which
   * corresponds to the specified ejb name and field name pair.
   * @param name the name of the ejb
   * @param fieldName the name of the field in the ejb
   * @return the name of the field in the persistence-capable for the
   * specified ejb field
   */
  public String getPersistenceFieldForEjbField (String name, String fieldName)
  {
    return fieldName;
  }
}
TOP

Related Classes of com.sun.jdo.spi.persistence.support.ejb.ejbc.NameMapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.