Package com.spoledge.audao.maven

Source Code of com.spoledge.audao.maven.GeneratorMojo

/*
* Copyright 2013 Spolecne s.r.o. (www.spoledge.com)
*
* Licensed 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.
*/
package com.spoledge.audao.maven;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;

import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;

import org.apache.maven.project.MavenProject;

import java.io.File;
import java.io.InputStreamReader;
import java.io.FileInputStream;

import java.util.List;

import com.spoledge.audao.generator.*;


/**
* Goal which generates Java source files.
*/
@Mojo( name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES )
public class GeneratorMojo extends AbstractMojo {

    @Component
    private MavenProject project;

    @Parameter( required = true )
    private String dbType;

    @Parameter( defaultValue="${project.groupId}", required = true )
    private String pkg;

    @Parameter( defaultValue="${basedir}/src/main/audao/${project.artifactId}.xml", required = true )
    private File src;

    @Parameter( defaultValue = "${project.build.directory}/generated-sources/audao", required = true )
    private File dest;

    @Parameter( property = "debug" )
    private boolean debug;

    @Parameter
    private boolean generateDtoGwtSerializer;

    @Parameter( property = "generateTypes" )
    private String[] generateTypes;

    private ResourceType[] enableResources;


    ////////////////////////////////////////////////////////////////////////////
    // Public
    ////////////////////////////////////////////////////////////////////////////

    public void setGenerateTypes( String[] vals ) {
        this.generateTypes = vals;

        if (vals == null || vals.length == 0) return;

        enableResources = new ResourceType[ vals.length ];
        for (int i=0; i < vals.length; i++) {
            enableResources[i] = ResourceType.valueOf(vals[i].toUpperCase());
        }
    }


    @Override
    public void execute() throws MojoExecutionException {
        Log log = getLog();

        // Check if something was changed:
        File touch = new File( dest, "audao.txt" );

        if (!touch.exists() || touch.lastModified() < src.lastModified()) generate();
        else log.info( "Skipping AuDAO generator task - sources are up-to-date." );

        try {
            touch.delete();
            touch.createNewFile();
        }
        catch (Exception e) {}

        project.addCompileSourceRoot( dest.getAbsolutePath());
        log.info( "Added source directory: " + dest );
    }


    ////////////////////////////////////////////////////////////////////////////
    // Private
    ////////////////////////////////////////////////////////////////////////////

    private void generate() throws MojoExecutionException {
        Log log = getLog();

        String targetName = dbType.toUpperCase();

        log.info( "AuDAO Generating from '" + src + "', to '" + dest + "', target '" + targetName + "'" );

        try {
            Target target = Target.valueOf( targetName );
            InputStreamReader xmlReader = new InputStreamReader( new FileInputStream( src ), "UTF-8");

            Output output = dest.getName().endsWith(".zip") ?
                                new ZipFileOutput( dest ) : new FileOutput( dest );

            Generator g = new Generator( target );
            g.setIsDebugEnabled( debug );
            g.validate( xmlReader );

            xmlReader = new InputStreamReader( new FileInputStream( src ), "UTF-8");

            if (enableResources != null) {
                for (ResourceType res : enableResources) {
                    g.setResourceEnabled( res, true );
                }

                if (generateDtoGwtSerializer) {
                    g.setResourceEnabled( ResourceType.DTO_GWT_SERIALIZER, generateDtoGwtSerializer );
                }
            }
            else {
                g.setAllResourcesEnabled( true );
                g.setResourceEnabled( ResourceType.DTO_GWT_SERIALIZER, generateDtoGwtSerializer );
            }

            g.generate( pkg, xmlReader, output );

            output.finish();
        }
        catch (GeneratorException e) {
            if (e.isWarningOnly()) {
                log.warn( e.toString());
            }
            else {
                List<? extends Exception> exceptions = e.getExceptions();
                List<GeneratorException.Type> types = e.getTypes();

                for (int i=0; i < exceptions.size(); i++) {
                    switch (types.get(i)) {
                        case WARNING:
                            log.warn( exceptions.get(i).toString());
                            break;

                        case ERROR:
                            log.error( "Error: ", exceptions.get(i));
                            break;

                        default:
                            log.error( "Fatal error:", exceptions.get(i));
                            break;

                    }
                }

                throw new MojoExecutionException( "Error (" + exceptions.size() + " nested errors)", e );
            }
        }
        catch (Exception e) {
            throw new MojoExecutionException( "Error", e );
        }
    }

}
TOP

Related Classes of com.spoledge.audao.maven.GeneratorMojo

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.