//# 0 errors, 70 messages
//#
/*
    //#JPARollerPlanetPersistenceStrategy.java:1:1: class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.planet.business.jpa;

import java.util.Enumeration;
import java.util.Properties;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
import org.apache.roller.planet.business.jpa.JPAPersistenceStrategy;
import org.apache.roller.weblogger.business.DatabaseProvider;
import org.apache.roller.weblogger.business.startup.WebloggerStartup;
import org.apache.roller.weblogger.config.WebloggerConfig;


/**
 * JPA strategy for Planet, uses WebloggerConfig to get JPA configuration.
 */
@com.google.inject.Singleton
public class JPARollerPlanetPersistenceStrategy extends JPAPersistenceStrategy {
    
    private static Log logger = 
    //#JPARollerPlanetPersistenceStrategy.java:40: method: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init
    //#JPARollerPlanetPersistenceStrategy.java:40: Warning: method not available
    //#    -- call on LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init
    //#    unanalyzed callee: LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#JPARollerPlanetPersistenceStrategy.java:40: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#output(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init): __Descendant_Table[org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy]
    //#output(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init): logger
    //#presumption(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init): org.apache.commons.logging.LogFactory:getFactory(...)@40 != null
    //#post(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init): __Descendant_Table[org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init): init'ed(logger)
    //#JPARollerPlanetPersistenceStrategy.java:40: end of method: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy__static_init
        LogFactory.getFactory().getInstance(JPARollerPlanetPersistenceStrategy.class); 
    
    
    /**
     * Construct by finding using DatabaseProvider and WebloggerConfig.
     * 
     * @throws org.apache.roller.PlanetException on any error
     */
    protected JPARollerPlanetPersistenceStrategy() throws PlanetException { 
    //#JPARollerPlanetPersistenceStrategy.java:49: method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    //#JPARollerPlanetPersistenceStrategy.java:49: Warning: method not available
    //#    -- call on void org.apache.roller.planet.business.jpa.JPAPersistenceStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    //#    unanalyzed callee: void org.apache.roller.planet.business.jpa.JPAPersistenceStrategy()
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): ": "._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): "="._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): "Fetching property ["._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): "]"._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): "java:comp.env."._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): logger
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider$ConfigurationType.JNDI_NAME
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Descendant_Table[org/apache/roller/weblogger/business/DatabaseProvider]
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Descendant_Table[others]
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getJdbcConnectionURL()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getJdbcDriverClass()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getJdbcPassword()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getJdbcUsername()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getJndiName()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/DatabaseProvider.__Dispatch_Table.getType()Lorg/apache/roller/weblogger/business/DatabaseProvider$ConfigurationType;
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.__Tag
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcConnectionURL
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcDriverClass
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcPassword
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcUsername
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jndiName
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jndiName._tainted
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.type
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/config/WebloggerConfig.config
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/config/WebloggerConfig.log
    //#input(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): this
    //#output(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): this.emf
    //#pre[2] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider != null
    //#pre[3] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.__Tag == org/apache/roller/weblogger/business/DatabaseProvider
    //#pre[10] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.type)
    //#pre[11] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org/apache/roller/weblogger/config/WebloggerConfig.config != null
    //#pre[1] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) logger != null
    //#pre[4] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcConnectionURL)
    //#pre[5] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcDriverClass)
    //#pre[6] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcPassword)
    //#pre[7] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jdbcUsername)
    //#pre[8] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) init'ed(org/apache/roller/weblogger/business/startup/WebloggerStartup.dbProvider.jndiName)
    //#pre[12] (void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): (soft) org/apache/roller/weblogger/config/WebloggerConfig.log != null
    //#presumption(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): java.util.Enumeration:nextElement(...)@60 != null
    //#presumption(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): java.util.Properties:keys(...)@205 != null
    //#presumption(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy:loadPropertiesFromResourceName(...)@54 != null
    //#post(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): init'ed(this.emf)
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.util.Properties:keys
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): Effects-of-calling:java.util.Properties:getProperty
    //#test_vector(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): java.lang.String:startsWith(...)@61: {1}, {0}
    //#test_vector(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): java.lang.String:startsWith(...)@61: {0}, {1}
    //#test_vector(void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()): java.util.Enumeration:hasMoreElements(...)@59: {0}, {1}

        DatabaseProvider dbProvider = WebloggerStartup.getDatabaseProvider();
        
        // Pull in any properties defined in JMAEMF.properties config file
        Properties emfProps = loadPropertiesFromResourceName(
    //#JPARollerPlanetPersistenceStrategy.java:54: Warning: method not available
    //#    -- call on ClassLoader org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy:getContextClassLoader()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    //#    unanalyzed callee: ClassLoader org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy:getContextClassLoader()
    //#JPARollerPlanetPersistenceStrategy.java:54: Warning: method not available
    //#    -- call on Properties org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy:loadPropertiesFromResourceName(String, ClassLoader)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    //#    unanalyzed callee: Properties org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy:loadPropertiesFromResourceName(String, ClassLoader)
           "JPAEMF.properties", getContextClassLoader());
                
        // Add all OpenJPA and Toplinks properties found in WebloggerConfig
        Enumeration keys = WebloggerConfig.keys();
        while (keys.hasMoreElements()) {
            String key = (String)keys.nextElement();
            if (key.startsWith("openjpa.") || key.startsWith("toplink.")) {
                String value = WebloggerConfig.getProperty(key);
                logger.info(key + ": " + value);
    //#JPARollerPlanetPersistenceStrategy.java:63: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
    //#    method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
                emfProps.setProperty(key, value);
            }
        }
        
        if (dbProvider.getType() == DatabaseProvider.ConfigurationType.JNDI_NAME) {
            // We're doing JNDI, so set OpenJPA JNDI name property
            String jndiName = "java:comp/env/" + dbProvider.getJndiName();
            emfProps.setProperty("openjpa.ConnectionFactoryName", jndiName);
            
        } else {
            // So set JDBD properties for OpenJPA
            emfProps.setProperty("openjpa.ConnectionDriverName",     dbProvider.getJdbcDriverClass());
            emfProps.setProperty("openjpa.ConnectionURL",            dbProvider.getJdbcConnectionURL());
            emfProps.setProperty("openjpa.ConnectionUserName",       dbProvider.getJdbcUsername());
            emfProps.setProperty("openjpa.ConnectionPassword",       dbProvider.getJdbcPassword()); 

            // And Toplink JPA
            emfProps.setProperty("toplink.jdbc.driver",              dbProvider.getJdbcDriverClass());
            emfProps.setProperty("toplink.jdbc.url",                 dbProvider.getJdbcConnectionURL());
            emfProps.setProperty("toplink.jdbc.user",                dbProvider.getJdbcUsername());
            emfProps.setProperty("toplink.jdbc.password",            dbProvider.getJdbcPassword());

            // And Hibernate JPA
            emfProps.setProperty("hibernate.connection.driver_class",dbProvider.getJdbcDriverClass());
            emfProps.setProperty("hibernate.connection.url",         dbProvider.getJdbcConnectionURL());
            emfProps.setProperty("hibernate.connection.username",    dbProvider.getJdbcUsername());
            emfProps.setProperty("hibernate.connection.password",    dbProvider.getJdbcPassword()); 
        }
        
        try {
            emf = Persistence.createEntityManagerFactory("PlanetPU", emfProps);
        } catch (PersistenceException pe) {
            logger.error("ERROR: creating entity manager", pe);
            throw new PlanetException(pe);
        }
    }
    //#JPARollerPlanetPersistenceStrategy.java:99: end of method: void org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy()
    
}
    //#JPARollerPlanetPersistenceStrategy.java:: end of class: org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy
