/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 1997-2010 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. */ /* * CMPTemplateFormatter.java * * Created on December 03, 2001 */ package com.sun.jdo.spi.persistence.support.ejb.ejbc; import java.io.*; import java.text.MessageFormat; import java.util.HashMap; import java.util.Properties; import java.util.StringTokenizer; import com.sun.jdo.spi.persistence.utility.generator.JavaClassWriterHelper; /* * This is the helper class for JDO specific generation of * a concrete bean implementation. * * @author Marina Vatkina */ public class CMPTemplateFormatter extends JavaClassWriterHelper{ private final static String templateFile = "com/sun/jdo/spi/persistence/support/ejb/ejbc/CMPTemplates.properties"; // NOI18N // Strings for CMP code generation: public final static String ejb_ = "ejb"; // NOI18N public final static String ejbObject_ = "EJBObject"; // NOI18N public final static String ejbHome_ = "EJBHome"; // NOI18N public final static String ejbContext_ = "EJBContext"; // NOI18N public final static String context_ = "context"; // NOI18N public final static String key_ = "key"; // NOI18N public final static String keys_ = "keys"; // NOI18N public final static String oid_ = "jdoObjectId"; // NOI18N public final static String oids_ = "oids"; // NOI18N public final static String pc_ = "pc"; // NOI18N public final static String cmpImplComments_ = "cmpImplComments"; // NOI18N public final static String imports_ = "imports"; // NOI18N public final static String interfaces_ = "interfaces"; // NOI18N public final static String helperImports_ = "helperImports"; // NOI18N public final static String staticTransientPackageVariables_ = "staticTransientPackageVariables"; // NOI18N public final static String privateStaticVariables_ = "privateStaticVariables"; // NOI18N public final static String privateTransientVariables_ = "privateTransientVariables"; // NOI18N public final static String privateStaticFinalVariables_ = "privateStaticFinalVariables"; // NOI18N public final static String publicStaticFinalVariables_ = "publicStaticFinalVariables"; // NOI18N public final static String finderSelectorStaticVariables_ = "finderSelectorStaticVariables"; // NOI18N public final static String finderSelectorStaticFinalVariables_ = "finderSelectorStaticFinalVariables"; // NOI18N public final static String otherVariables_ = "otherVariables"; // NOI18N public final static String setNull_ = "setNull"; // NOI18N public final static String commonPrivateMethods_ = "commonPrivateMethods"; // NOI18N public final static String commonPublicMethods_ = "commonPublicMethods"; // NOI18N public final static String otherPublicMethods_ = "otherPublicMethods"; // NOI18N public final static String jdoLookupPersistenceManagerFactory_ = "jdoLookupPersistenceManagerFactory"; // NOI18N public final static String helperMethods_ = "helperMethods"; // NOI18N public final static String getInstance_ = "jdoGetInstance"; // NOI18N public final static String findByPrimaryKey_ = "findByPrimaryKey"; // NOI18N public final static String ejbFindByPrimaryKey_ = "ejbFindByPrimaryKey"; // NOI18N public final static String ejbFinderSelectorBody_ = "ejbFinderSelectorBody"; // NOI18N public final static String ejbQueryExecutionParamConvBody_ = "ejbQueryExecutionParamConvBody"; // NOI18N public final static String ejbQueryExecutionParamConvBodyArgument_ = "ejbQueryExecutionParamConvBodyArgument"; // NOI18N public final static String ejbQueryExecutionBody_ = "ejbQueryExecutionBody"; // NOI18N public final static String ejbAggregateQueryExecutionBody_ = "ejbAggregateQueryExecutionBody"; // NOI18N public final static String ejbAggregateQueryExecutionParamConvBody_ = "ejbAggregateQueryExecutionParamConvBody"; // NOI18N public final static String ejbMultiFinderBody_ = "ejbMultiFinderBody"; // NOI18N public final static String ejbMultiFinderBodyEnumeration_ = "ejbMultiFinderBodyEnumeration"; // NOI18N public final static String ejbSingleFinderBody_ = "ejbSingleFinderBody"; // NOI18N public final static String jdoGetJdoInstanceClass_ = "jdoGetJdoInstanceClass"; // NOI18N public final static String find_ = "find"; // NOI18N public final static String catchClause_ = "catchClause"; //NOI18N public final static String ejbSelect_ = "ejbSelect"; // NOI18N public final static String create_ = "create"; // NOI18N public final static String remove_ = "remove"; // NOI18N public final static String ejbCreate_ = "ejbCreate"; // NOI18N public final static String ejbCreateUnknownPK_ = "ejbCreateUnknownPK"; // NOI18N public final static String ejbPostCreate_ = "ejbPostCreate"; // NOI18N public final static String ejbRemove_ = "ejbRemove"; // NOI18N public final static String ejbLoad_ = "ejbLoad"; // NOI18N public final static String CreateException_ = "javax.ejb.CreateException"; // NOI18N public final static String DuplicateKeyException_ = "javax.ejb.DuplicateKeyException"; // NOI18N public final static String RemoveException_ = "javax.ejb.RemoveException"; // NOI18N public final static String ejbException_ = "EJBException"; // NOI18N public final static String finderException_ = "javax.ejb.FinderException"; // NOI18N public final static String assertInTransaction_ = "assertInTransaction"; // NOI18N public final static String assertPersistenceManagerIsNull_ = "assertPersistenceManagerIsNull"; // NOI18N public final static String assertPersistenceManagerIsNullCall_ = "assertPersistenceManagerIsNullCall"; // NOI18N public final static String setEntityContext_ = "setEntityContext"; // NOI18N public final static String EntityContext_ = "javax.ejb.EntityContext"; // NOI18N public final static String castKey_ = "castKey"; // NOI18N public final static String castOid_ = "castOid"; // NOI18N public final static String getPK_ = "getPK"; // NOI18N public final static String getPKClone_ = "getPKClone"; // NOI18N public final static String newPK_ = "newPK"; // NOI18N public final static String newOid_ = "newOid"; // NOI18N public final static String getPK1_ = "getPK1"; // NOI18N public final static String getPK1Clone_ = "getPK1Clone"; // NOI18N public final static String getPK1primitive_ = "getPK1primitive"; // NOI18N public final static String getOid_ = "getOid"; // NOI18N public final static String getOidString_ = "getOidString"; // NOI18N public final static String getOidClone_ = "getOidClone"; // NOI18N public final static String getOid1_ = "getOid1"; // NOI18N public final static String getOid1primitive_ = "getOid1primitive"; // NOI18N public final static String getOid1String_ = "getOid1String"; // NOI18N public final static String getOid1Clone_ = "getOid1Clone"; // NOI18N public final static String getObjectId_ = "jdoGetObjectId"; // NOI18N public final static String convertObjectIdToPrimaryKey_ = "convertObjectIdToPrimaryKey"; // NOI18N public final static String convertPrimaryKeyToObjectId_ = "convertPrimaryKeyToObjectId"; // NOI18N public final static String convertPCToEJBObject_ = "convertPCToEJBObject"; // NOI18N public final static String convertEJBObjectToPC_ = "convertEJBObjectToPC"; // NOI18N public final static String convertEJBLocalObjectToPC_ = "convertEJBLocalObjectToPC"; // NOI18N public final static String jdoPersistenceManager_ = "_jdoPersistenceManager"; // NOI18N public final static String jdoPersistenceManagerClass_ = "com.sun.jdo.api.persistence.support.PersistenceManager"; // NOI18N public final static String jdoGetPersistenceManager_ = "jdoGetPersistenceManager"; // NOI18N public final static String jdoGetPersistenceManager0_ = "jdoGetPersistenceManager0"; // NOI18N public final static String jdoClosePersistenceManager_= "jdoClosePersistenceManager"; // NOI18N public final static String jdoReleasePersistenceManager_ = "jdoReleasePersistenceManager"; // NOI18N public final static String jdoReleasePersistenceManager0_ = "jdoReleasePersistenceManager0"; // NOI18N public final static String jdoArrayCopy_ = "jdoArrayCopy"; // NOI18N public final static String jdoCleanAllRefs_ = "jdoCleanAllRefs"; // NOI18N public final static String returnKey_ = "return key;"; // NOI18N public final static String returnOid_ = "return jdoObjectId;"; // NOI18N // Inner helper Class strings. public final static String helperComments_ = "helperComments"; // NOI18N public final static String helperVariables_ = "helperVariables"; // NOI18N public final static String getHelperInstance_ = "getHelperInstance"; // NOI18N public final static String getPCClass_ = "getPCClass"; // NOI18N public final static String getContainer_ = "getContainer"; // NOI18N public final static String assertInstanceOfRemoteInterfaceImpl_ = "assertInstanceOfRemoteInterfaceImpl"; // NOI18N public final static String assertPKNotNull_ = "assertPKNotNull"; // NOI18N public final static String assertPKFieldNotNull_ = "assertPKFieldNotNull"; // NOI18N public final static String assertOidNotNull_ = "assertOidNotNull"; // NOI18N public final static String afterCompletion_ = "afterCompletion"; // NOI18N public final static String ejb__flush_ = "ejb__flush"; // NOI18N public final static String ejb__refresh_ = "ejb__refresh"; // NOI18N public final static String ejb__remove_ = "ejb__remove"; // NOI18N // property key for the CVS keyword substitution public final static String signature_ = "signature"; //NOI18N public final static String signatureDelimiter_ = " ## "; //NOI18N // Code generator templates. public static Properties helpers = null; // JDOHelper comments have the concrete impl name. public static MessageFormat hcomformatter = null; // variables public static MessageFormat privatetransientvformatter = null; // private transient varibales public static MessageFormat privatestaticfinalvformatter = null; // final static variables public static MessageFormat publicstaticfinalvformatter = null; // static final variables public static MessageFormat finderselectorstaticvformatter = null; // finder / selector static variables public static MessageFormat finderselectorstaticfinalvformatter = null; // finder / selector static final variables public static MessageFormat hvformatter = null; // helper class variables // methods public static MessageFormat giformatter = null; // jdoGetInstance public static MessageFormat goidformatter = null; // jdoGetObjectId public static MessageFormat intxformatter = null; // assertInTransaction public static MessageFormat jdolookuppmfformatter = null; // jdoLookupPersistenceManagerFactory public static MessageFormat jdoarraycopyformatter = null; // jdoCopyArray // finder/selector methods public static MessageFormat finderselectorformatter = null; //common body for selector and finder public static MessageFormat queryexecformatter = null; //body for queryexec without paramconversion public static MessageFormat aggqueryexecformatter = null; //body for aggqueryexec without paramconversion public static MessageFormat queryexecparamconvformatter = null; //body for queryexec with paramconversion public static MessageFormat queryexecparamconvargumentformatter = null; //body for the argument of the queryexec with paramconversion public static MessageFormat aggqueryexecparamconvformatter = null; //body for aggqueryexec with paramconversion public static MessageFormat multifinderformatter = null; // finder body for multi-value-objects public static MessageFormat multifinderenumerationformatter = null; // finder body for multi-value-objects with conversion to Enumeration (CMP11)) public static MessageFormat singlefinderformatter = null; // finder body for single-value-objects // PK and Oid handling public static MessageFormat pkcformatter = null; // cast PK statement public static MessageFormat oidcformatter = null; // cast Oid statement public static MessageFormat npkformatter = null; // new PK statement public static MessageFormat noidformatter = null; // new Oid statement public static MessageFormat pkformatter = null; public static MessageFormat oidformatter = null; public static MessageFormat oidstringformatter = null; // PK -> Oid for String PK field public static MessageFormat pkcloneformatter = null; // Oid -> PK for mutable PK field public static MessageFormat oidcloneformatter = null; // PK -> Oid for mutable PK field public static MessageFormat pk1formatter = null; public static MessageFormat oid1formatter = null; public static MessageFormat pk1pformatter = null; public static MessageFormat oid1pformatter = null; public static MessageFormat oid1stringformatter = null; // PK -> Oid for String PK class public static MessageFormat pk1cloneformatter = null; // Oid -> PK for mutable PK class public static MessageFormat oid1cloneformatter = null; // PK -> Oid for mutable PK class public static MessageFormat assertpkfieldformatter = null; // for assertPKFieldNotNull_ // Other JDOHelper methods. public static MessageFormat pcclassgetterformatter = null; // standard templates for the corresponding keys, so that a template "xxxTemplate" // corresponds to a "xxx" key. public static String cmpImplCommentsTemplate = null; public static String privateStaticVariablesTemplate = null; public static String otherVariablesTemplate = null; public static String jdoGetJdoInstanceClassTemplate = null; public static String assertPersistenceManagerIsNullTemplate = null; public static String assertInstanceOfRemoteInterfaceImplTemplate = null; public static String getHelperInstanceTemplate = null; public static String catchClauseTemplate = null; public static String signatureTemplate = null; public static String assertPKNotNullTemplate = null; public static String assertOidNotNullTemplate = null; // standard templates that had been converted to String[] to be used // in a 'for' loop. public static String[] importsArray = null; public static String[] interfacesArray = null; public static String[] helperImportsArray = null; public static String[] commonPublicMethodsArray = null; public static String[] otherPublicMethodsArray = null; public static String[] commonPrivateMethodsArray = null; // standard method bodies for the corresponding keys, so that a method body with // a name "xxxBody" corresponds to a "xxx" key. public static String[] ejbFindByPrimaryKeyBody = null; public static String[] afterCompletionBody = null; public static String[] jdoGetPersistenceManagerBody = null; public static String[] jdoGetPersistenceManager0Body = null; public static String[] assertPersistenceManagerIsNullBody = null; public static String[] jdoClosePersistenceManagerBody = null; public static String[] jdoReleasePersistenceManagerBody = null; public static String[] jdoReleasePersistenceManager0Body = null; public static String[] setEntityContextBody = null; public static String[] getContainerBody = null; /** * Constructs a new <code>CMPTemplateFormatter</code> instance. */ CMPTemplateFormatter() { } /** * Initializes templates for code generation. */ static synchronized void initHelpers() throws IOException { if (helpers == null) { helpers = new Properties(); loadProperties(helpers, templateFile); initFormatters(); initTemplates(); } } /** * Loads Properties object from the specified template file. */ static synchronized void loadProperties(Properties helpers, final String templateFile) throws IOException { BufferedInputStream bin = null; try { final ClassLoader loader = CMPTemplateFormatter.class.getClassLoader(); InputStream in = (InputStream)java.security.AccessController.doPrivileged( new java.security.PrivilegedAction() { public Object run() { if (loader != null) { return loader.getResourceAsStream(templateFile); } else { return ClassLoader.getSystemResourceAsStream(templateFile); } } } ); bin = new BufferedInputStream(in); helpers.load(bin); } finally { try { bin.close(); } catch (Exception e) { // no action } } } /** * Initializes MessageFormats for code generation. */ private static void initFormatters() { // JDOHelper comments have the concrete impl name. hcomformatter = new MessageFormat(helpers.getProperty(helperComments_)); // variables privatetransientvformatter = new MessageFormat(helpers.getProperty(privateTransientVariables_)); privatestaticfinalvformatter = new MessageFormat(helpers.getProperty(privateStaticFinalVariables_)); publicstaticfinalvformatter = new MessageFormat(helpers.getProperty(publicStaticFinalVariables_)); finderselectorstaticvformatter = new MessageFormat(helpers.getProperty(finderSelectorStaticVariables_)); finderselectorstaticfinalvformatter = new MessageFormat(helpers.getProperty(finderSelectorStaticFinalVariables_)); hvformatter = new MessageFormat(helpers.getProperty(helperVariables_)); // methods giformatter = new MessageFormat(helpers.getProperty(getInstance_)); goidformatter = new MessageFormat(helpers.getProperty(getObjectId_)); intxformatter = new MessageFormat(helpers.getProperty(assertInTransaction_)); jdolookuppmfformatter = new MessageFormat(helpers.getProperty(jdoLookupPersistenceManagerFactory_)); jdoarraycopyformatter = new MessageFormat(helpers.getProperty(jdoArrayCopy_)); // finder/selector methods finderselectorformatter = new MessageFormat(helpers.getProperty(ejbFinderSelectorBody_)); queryexecparamconvformatter = new MessageFormat(helpers.getProperty(ejbQueryExecutionParamConvBody_)); queryexecparamconvargumentformatter = new MessageFormat(helpers.getProperty(ejbQueryExecutionParamConvBodyArgument_)); queryexecformatter = new MessageFormat(helpers.getProperty(ejbQueryExecutionBody_)); aggqueryexecformatter = new MessageFormat(helpers.getProperty(ejbAggregateQueryExecutionBody_)); aggqueryexecparamconvformatter = new MessageFormat(helpers.getProperty(ejbAggregateQueryExecutionParamConvBody_)); multifinderformatter = new MessageFormat(helpers.getProperty(ejbMultiFinderBody_)); multifinderenumerationformatter = new MessageFormat(helpers.getProperty(ejbMultiFinderBodyEnumeration_)); singlefinderformatter = new MessageFormat(helpers.getProperty(ejbSingleFinderBody_)); // PK and Oid handling pkcformatter = new MessageFormat(helpers.getProperty(castKey_)); oidcformatter = new MessageFormat(helpers.getProperty(castOid_)); npkformatter = new MessageFormat(helpers.getProperty(newPK_)); noidformatter = new MessageFormat(helpers.getProperty(newOid_)); pk1formatter = new MessageFormat(helpers.getProperty(getPK1_)); pk1cloneformatter = new MessageFormat(helpers.getProperty(getPK1Clone_)); oid1formatter = new MessageFormat(helpers.getProperty(getOid1_)); pk1pformatter = new MessageFormat(helpers.getProperty(getPK1primitive_)); oid1pformatter = new MessageFormat(helpers.getProperty(getOid1primitive_)); oid1stringformatter = new MessageFormat(helpers.getProperty(getOid1String_)); oid1cloneformatter = new MessageFormat(helpers.getProperty(getOid1Clone_)); pkformatter = new MessageFormat(helpers.getProperty(getPK_)); pkcloneformatter = new MessageFormat(helpers.getProperty(getPKClone_)); oidformatter = new MessageFormat(helpers.getProperty(getOid_)); oidstringformatter = new MessageFormat(helpers.getProperty(getOidString_)); oidcloneformatter = new MessageFormat(helpers.getProperty(getOidClone_)); assertpkfieldformatter = new MessageFormat(helpers.getProperty(assertPKFieldNotNull_)); // Other JDOHelper methods. pcclassgetterformatter = new MessageFormat(helpers.getProperty(getPCClass_)); } /** * Initializes standard templates for code generation. */ private static void initTemplates() { cmpImplCommentsTemplate = helpers.getProperty(cmpImplComments_); privateStaticVariablesTemplate = helpers.getProperty(privateStaticVariables_); otherVariablesTemplate = helpers.getProperty(otherVariables_); jdoGetJdoInstanceClassTemplate = helpers.getProperty(jdoGetJdoInstanceClass_); assertPersistenceManagerIsNullTemplate = helpers.getProperty( assertPersistenceManagerIsNullCall_); assertInstanceOfRemoteInterfaceImplTemplate = helpers.getProperty( assertInstanceOfRemoteInterfaceImpl_); getHelperInstanceTemplate = helpers.getProperty(getHelperInstance_); catchClauseTemplate = helpers.getProperty(catchClause_); signatureTemplate = helpers.getProperty(signature_); assertPKNotNullTemplate = helpers.getProperty(assertPKNotNull_); assertOidNotNullTemplate = helpers.getProperty(assertOidNotNull_); importsArray = tokenize(imports_); interfacesArray = tokenize(interfaces_); helperImportsArray = tokenize(helperImports_); commonPublicMethodsArray = tokenize(commonPublicMethods_); otherPublicMethodsArray = tokenize(otherPublicMethods_); commonPrivateMethodsArray = tokenize(commonPrivateMethods_); ejbFindByPrimaryKeyBody = getBodyAsStrings(helpers.getProperty(ejbFindByPrimaryKey_)); afterCompletionBody = getBodyAsStrings(helpers.getProperty(afterCompletion_)); jdoGetPersistenceManagerBody = getBodyAsStrings(helpers.getProperty(jdoGetPersistenceManager_)); jdoGetPersistenceManager0Body = getBodyAsStrings(helpers.getProperty(jdoGetPersistenceManager0_)); jdoClosePersistenceManagerBody = getBodyAsStrings(helpers.getProperty(jdoClosePersistenceManager_)); jdoReleasePersistenceManagerBody = getBodyAsStrings(helpers.getProperty(jdoReleasePersistenceManager_)); jdoReleasePersistenceManager0Body = getBodyAsStrings(helpers.getProperty(jdoReleasePersistenceManager0_)); setEntityContextBody = getBodyAsStrings(helpers.getProperty(setEntityContext_)); getContainerBody = getBodyAsStrings(helpers.getProperty(getContainer_)); assertPersistenceManagerIsNullBody = getBodyAsStrings(helpers.getProperty(assertPersistenceManagerIsNull_)); } static String[] tokenize(String template) { StringTokenizer st = new StringTokenizer(helpers.getProperty(template), delim_); String[] rc = new String[st.countTokens()]; int i = 0; while (st.hasMoreElements()) { rc[i++] = st.nextToken(); } return rc; } }