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

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

/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2012 Oracle and/or its affiliates. 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_1_1.html
* or packager/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 packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [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.
*/

/*
* AbstractMethodHelper.java
*
* Created on December 20, 2001, 5:30 PM
*/

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

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.sun.enterprise.deployment.MethodDescriptor;
import org.glassfish.ejb.deployment.descriptor.EjbCMPEntityDescriptor;
import org.glassfish.ejb.deployment.descriptor.PersistenceDescriptor;
import org.glassfish.ejb.deployment.descriptor.QueryDescriptor;

/** This is a helper class which extracts the information needed for method
* code generation of the concrete bean class.
*
* @author Rochelle Raccah
*/
abstract public class AbstractMethodHelper
{
  /** Constant representing a local interface return type. */
  public static final int LOCAL_RETURN = 0;

  /** Constant representing a remote interface return type. */
  public static final int REMOTE_RETURN = 1;

  /** Constant representing no return type. */
  public static final int NO_RETURN = 2;

  private EjbCMPEntityDescriptor _cmpDescriptor;
  private List finders = new ArrayList();
  private List selectors = new ArrayList();
  //private ArrayList otherMethods = new ArrayList();
  private List createMethods = new ArrayList();
  private Map methodNames = new HashMap();

  /** Creates a new instance of AbstractMethodHelper
   * @param descriptor the EjbCMPEntityDescriptor which defines the
   * information for this bean.
   */
  public AbstractMethodHelper (EjbCMPEntityDescriptor descriptor)
  {
    _cmpDescriptor = descriptor;
    categorizeMethods()// Separate methods into categories.
  }

  /** Gets the EjbCMPEntityDescriptor which defines the
   * information for this bean.
   * @return the EjbCMPEntityDescriptor for the bean specified in the
   * constructor.
   */
  protected EjbCMPEntityDescriptor getDescriptor() { return _cmpDescriptor; }

  /**
   * Reads all known methods and sorts them by name into specific
   * Collections for further processing.
   */
  protected void categorizeMethods ()
  {
    EjbCMPEntityDescriptor descriptor = getDescriptor();
    Iterator iterator = descriptor.getMethodDescriptors().iterator();

    while (iterator.hasNext())
    {
      MethodDescriptor methodDescriptor =
        (MethodDescriptor)iterator.next();
      Method method = methodDescriptor.getMethod(descriptor);
      String methodName = methodDescriptor.getName();

      //if (DEBUG)
      //  System.out.println("Method: " + methodName); // NOI18N

      if (methodName.startsWith(CMPTemplateFormatter.find_))
        finders.add(method);
      else if (methodName.startsWith(CMPTemplateFormatter.ejbSelect_))
        selectors.add(method);
      else if (methodName.startsWith(CMPTemplateFormatter.create_))
        createMethods.add(method);
      else if (methodName.startsWith(CMPTemplateFormatter.get_) ||
        methodName.startsWith(CMPTemplateFormatter.set_))
      {
        ;// skip
      }
      //else
      //  otherMethods.add(method);

      // It is OK to use HashMap here as we won't use it for possible
      // overloaded methods.
      methodNames.put(methodName, method);
    }
  }

  /** Gets the list of finder methods for this bean.
   * @return a list of java.lang.reflect.Method objects which represent
   * the finders for this bean
   */
  public List getFinders () { return finders; }

  // give subclasses a chance to replace the list
  protected void setFinders (List finderList)
  {
    finders = finderList;
  }

  /** Gets the list of selector methods for this bean.
   * @return a list of java.lang.reflect.Method objects which represent
   * the selectors for this bean
   */
  public List getSelectors () { return selectors; }

  // give subclasses a chance to replace the list
  protected void setSelectors (List selectorList)
  {
    selectors = selectorList;
  }

  /** Gets the list of ejb create methods for this bean.
   * @return a list of java.lang.reflect.Method objects which represent
   * the ejb create methods for this bean
   */
  public List getCreateMethods () { return createMethods; }

  // might need this later
  //public List getOtherMethods () { return otherMethods; }

  /** Gets a map of the method names for this bean.  The keys are the
   * method names and the values are the java.lang.reflect.Method objects.
   * These should represent all methods of this bean.
   * @return a map of the method names to java.lang.reflect.Method objects
   * for this bean
   */
  public Map getMethodNames () { return methodNames; }

  /** Gets the name of the local home which corresponds to this bean.
   * @return the name of the local home class
   */
  public String getLocalHome ()
  {
    return getDescriptor().getLocalHomeClassName();
  }
 
  /** Gets the name of the remote home which corresponds to this bean.
   * @return the name of the remote home class
   */
  public String getRemoteHome ()
  {
    return getDescriptor().getHomeClassName();
  }

  /** Gets the query descriptor associated with the specified method if it
   * exists.
   * @param method the java.lang.reflect.Method object used to find the
   * query string
   * @return a query descriptor for the specified method. Returns
   * <code>null</code> for CMP 1.1 queries.
   */
  protected QueryDescriptor getQueryDescriptor (Method method)
  {
    PersistenceDescriptor persistenceDescriptor =
      getDescriptor().getPersistenceDescriptor();
    return persistenceDescriptor.getQueryFor(method);
  }

  /** Gets the query string associated with the specified method if it
   * exists.
   * @param method the java.lang.reflect.Method object used to find the
   * query string
   * @return a query string for the specified method
   */
  public String getQueryString (Method method)
  {
    QueryDescriptor queryDescriptor = getQueryDescriptor(method);

    return ((queryDescriptor != null) ? queryDescriptor.getQuery() : null);
  }

  /** Gets the return type associated with the specified method if it
   * exists.  If no corresponding query descriptor is found, the value
   * <code>NO_RETURN</code> is returned.
   * @param method the java.lang.reflect.Method object used to find the
   * query return type
   * @return the return type for the specified method, one of
   * {@link #LOCAL_RETURN}, {@link #REMOTE_RETURN}, or {@link #NO_RETURN}
   */
  public int getQueryReturnType (Method method)
  {
    QueryDescriptor queryDescriptor = getQueryDescriptor(method);

    if (queryDescriptor != null)
    {
      if (queryDescriptor.getHasLocalReturnTypeMapping())
        return LOCAL_RETURN;
      if (queryDescriptor.getHasRemoteReturnTypeMapping())
        return REMOTE_RETURN;
    }

    return NO_RETURN;
  }

  /** Returns <code>true</code> if prefetch is enabled for the specified
   * method, <code>false</code> otherwise. Prefetch is enabled by default.
   * @param method the java.lang.reflect.Method object used to find the
   * prefetch setting.
   * @return a boolean representing the prefetch setting
   */
  abstract public boolean isQueryPrefetchEnabled (Method method);

  /** Gets the jdo filter expression associated with the specified method
   * if it exists.  Note that this method should only be used for CMP 1.1 -
   * use {@link #getQueryString} for CMP 2.0.
   * @param method the java.lang.reflect.Method object used to find the
   * query filter
   * @return the jdo filter expression
   */
  abstract public String getJDOFilterExpression (Method method);

  /** Gets the jdo parameter declaration associated with the specified
   * method if it exists.  Note that this method should only be used for
   * CMP 1.1 - use {@link #getQueryString} for CMP 2.0.
   * @param method the java.lang.reflect.Method object used to find the
   * parameter declaration
   * @return the jdo parameter declaration
   */
  abstract public String getJDOParameterDeclaration (Method method);

  /** Gets the jdo variables declaration associated with the specified
   * method if it exists.  Note that this method should only be used for
   * CMP 1.1 - use {@link #getQueryString} for CMP 2.0.
   * @param method the java.lang.reflect.Method object used to find the
   * parameter declaration
   * @return the jdo variables declaration
   */
  abstract public String getJDOVariableDeclaration (Method method);

  /** Gets the jdo ordering specification associated with the specified
   * method if it exists.  Note that this method should only be used for
   * CMP 1.1 - use {@link #getQueryString} for CMP 2.0.
   * @param method the java.lang.reflect.Method object used to find the
   * parameter declaration
   * @return the jdo ordering specification
   */
  abstract public String getJDOOrderingSpecification (Method method);
}
TOP

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

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.