package org.codehaus.mojo.openjpa;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. 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.
*/
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.codehaus.plexus.util.FileUtils;
import org.apache.openjpa.enhance.PCEnhancer;
import org.apache.openjpa.lib.util.Options;
import java.util.List;
/**
* The base class for all enhancement mojos.
* @author <a href='mailto:struberg@yahoo.de'>Mark Struberg</a>
* @version $Id: AbstractOpenJpaTestEnhancerMojo.java 9137 2009-02-28 21:55:03Z struberg $
* @since 1.1
*/
public abstract class AbstractOpenJpaEnhancerMojo
extends AbstractOpenJpaMojo
{
/**
* The JPA spec requires that all persistent classes define a no-arg constructor.
* This flag tells the enhancer whether to add a protected no-arg constructor
* to any persistent classes that don't already have one.
*
* @parameter default-value="true"
*/
protected boolean addDefaultConstructor;
/** used for passing the addDefaultConstructor parameter to the enhnacer tool */
private static final String OPTION_ADD_DEFAULT_CONSTRUCTOR = "addDefaultConstructor";
/**
* Whether to throw an exception when it appears that a property access entity
* is not obeying the restrictions placed on property access.
*
* @parameter default-value="false"
*/
protected boolean enforcePropertyRestrictions;
/** used for passing the enforcePropertyRestrictions parameter to the enhnacer tool */
private static final String OPTION_ENFORCE_PROPERTY_RESTRICTION = "enforcePropertyRestrictions";
/**
* Tell the PCEnhancer to use a temporary classloader for enhancement.
* If you enable this feature, then no depending artifacts from the classpath will be used!
* Please note that you have to disable the tmpClassLoader for some cases in OpenJPA-1.2.1
* due to an extended parsing strategy.
*
* @parameter default-value="false"
*/
protected boolean tmpClassLoader;
/** used for passing the tmpClassLoader parameter to the enhnacer tool */
private static final String OPTION_USE_TEMP_CLASSLOADER = "tcl";
/**
* {@inheritDoc}
*
* @see org.apache.maven.plugin.Mojo#execute()
*/
public void execute()
throws MojoExecutionException, MojoFailureException
{
if ( skipMojo() )
{
return;
}
if ( !getEntityClasses().exists() )
{
FileUtils.mkdir( getEntityClasses().getAbsolutePath() );
}
List entities = findEntityClassFiles();
enhance( entities );
}
/**
* Get the options for the OpenJPA enhancer tool.
* @return populated Options
*/
protected Options getOptions()
{
// options
Options opts = createOptions();
// put the standard options into the list also
opts.put( OPTION_ADD_DEFAULT_CONSTRUCTOR , Boolean.toString( addDefaultConstructor ) );
opts.put( OPTION_ENFORCE_PROPERTY_RESTRICTION, Boolean.toString( enforcePropertyRestrictions ) );
opts.put( OPTION_USE_TEMP_CLASSLOADER , Boolean.toString( tmpClassLoader ) );
return opts;
}
/**
* Processes a list of class file resources that are to be enhanced.
*
* @param files class file resources to enhance.
* @throws MojoExecutionException if the enhancer encountered a failure
*/
private void enhance( List files )
throws MojoExecutionException
{
Options opts = getOptions();
// list of input files
String[] args = getFilePaths( files );
boolean ok = false;
if ( !tmpClassLoader )
{
extendRealmClasspath();
}
ok = PCEnhancer.run( args, opts );
if ( !ok )
{
throw new MojoExecutionException( "The OpenJPA Enhancer tool detected an error!" );
}
}
}