You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by lt...@apache.org on 2009/06/19 16:48:55 UTC
svn commit: r786524 - in /maven/plugins/trunk/maven-pdf-plugin/src:
main/java/org/apache/maven/plugins/pdf/
test/java/org/apache/maven/plugins/pdf/
Author: ltheussl
Date: Fri Jun 19 14:48:55 2009
New Revision: 786524
URL: http://svn.apache.org/viewvc?rev=786524&view=rev
Log:
Factor out some re-usable stuff.
Added:
maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java (with props)
maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java (with props)
maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java (with props)
Modified:
maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
maven/plugins/trunk/maven-pdf-plugin/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java
Added: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java?rev=786524&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java (added)
+++ maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java Fri Jun 19 14:48:55 2009
@@ -0,0 +1,207 @@
+package org.apache.maven.plugins.pdf;
+
+/*
+ * 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 java.text.SimpleDateFormat;
+
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+
+/**
+ * Simple bean to allow date interpolation in the document descriptor, i.e.
+ * <pre>
+ * ${year} = 2009
+ * ${date} = 2009-05-17
+ * </pre>
+ * @author ltheussl
+ * @version $Id$
+ */
+public class DateBean
+{
+ private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
+
+ private static final SimpleDateFormat YEAR = new SimpleDateFormat( "yyyy", Locale.US );
+ private static final SimpleDateFormat MONTH = new SimpleDateFormat( "MM", Locale.US );
+ private static final SimpleDateFormat DAY = new SimpleDateFormat( "dd", Locale.US );
+ private static final SimpleDateFormat HOUR = new SimpleDateFormat( "HH", Locale.US );
+ private static final SimpleDateFormat MINUTE = new SimpleDateFormat( "mm", Locale.US );
+ private static final SimpleDateFormat SECOND = new SimpleDateFormat( "ss", Locale.US );
+ private static final SimpleDateFormat MILLI_SECOND = new SimpleDateFormat( "SSS", Locale.US );
+ private static final SimpleDateFormat DATE = new SimpleDateFormat( "yyyy-MM-dd", Locale.US );
+ private static final SimpleDateFormat TIME = new SimpleDateFormat( "HH:mm:ss\'Z\'", Locale.US );
+ private static final SimpleDateFormat DATE_TIME = new SimpleDateFormat( "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'", Locale.US );
+
+ static
+ {
+ YEAR.setTimeZone( UTC_TIME_ZONE );
+ MONTH.setTimeZone( UTC_TIME_ZONE );
+ DAY.setTimeZone( UTC_TIME_ZONE );
+ HOUR.setTimeZone( UTC_TIME_ZONE );
+ MINUTE.setTimeZone( UTC_TIME_ZONE );
+ SECOND.setTimeZone( UTC_TIME_ZONE );
+ MILLI_SECOND.setTimeZone( UTC_TIME_ZONE );
+ DATE.setTimeZone( UTC_TIME_ZONE );
+ TIME.setTimeZone( UTC_TIME_ZONE );
+ DATE_TIME.setTimeZone( UTC_TIME_ZONE );
+ }
+
+ private Date date;
+
+ /**
+ * Construct a new DateBean for the current Date.
+ */
+ public DateBean()
+ {
+ this( new Date() );
+ }
+
+ /**
+ * Construct a new DateBean with a given Date.
+ *
+ * @param date the date to set.
+ */
+ public DateBean( final Date date )
+ {
+ this.date = date;
+ }
+
+ /**
+ * Set the Date of this bean.
+ *
+ * @param date the date to set.
+ */
+ public void setDate( final Date date )
+ {
+ this.date = date;
+ }
+
+
+ /**
+ * @return the current year.
+ */
+ public String getYear()
+ {
+ synchronized ( this )
+ {
+ return YEAR.format( date );
+ }
+ }
+
+ /**
+ * @return the current month.
+ */
+ public String getMonth()
+ {
+ synchronized ( this )
+ {
+ return MONTH.format( date );
+ }
+ }
+
+ /**
+ * @return the current day.
+ */
+ public String getDay()
+ {
+ synchronized ( this )
+ {
+ return DAY.format( date );
+ }
+ }
+
+ /**
+ * @return the current hour.
+ */
+ public String getHour()
+ {
+ synchronized ( this )
+ {
+ return HOUR.format( date );
+ }
+ }
+
+ /**
+ * @return the current minute.
+ */
+ public String getMinute()
+ {
+ synchronized ( this )
+ {
+ return MINUTE.format( date );
+ }
+ }
+
+ /**
+ * @return the current second.
+ */
+ public String getSecond()
+ {
+ synchronized ( this )
+ {
+ return SECOND.format( date );
+ }
+ }
+
+ /**
+ * @return the current millisecond.
+ */
+ public String getMillisecond()
+ {
+ synchronized ( this )
+ {
+ return MILLI_SECOND.format( date );
+ }
+ }
+
+ /**
+ * @return the current date using the ISO 8601 format, i.e. <code>yyyy-MM-dd</code>.
+ */
+ public String getDate()
+ {
+ synchronized ( this )
+ {
+ return DATE.format( date );
+ }
+ }
+
+ /**
+ * @return the current time using the ISO 8601 format and UTC time zone, i.e. <code>HH:mm:ss'Z'</code>.
+ */
+ public String getTime()
+ {
+ synchronized ( this )
+ {
+ return TIME.format( date );
+ }
+ }
+
+ /**
+ * @return the current datetime using the ISO 8601 format, i.e. <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code>.
+ */
+ public String getDateTime()
+ {
+ synchronized ( this )
+ {
+ return DATE_TIME.format( date );
+ }
+ }
+}
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DateBean.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java?rev=786524&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java (added)
+++ maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java Fri Jun 19 14:48:55 2009
@@ -0,0 +1,157 @@
+package org.apache.maven.plugins.pdf;
+
+/*
+ * 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 java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+
+import java.util.Properties;
+
+import org.apache.maven.doxia.document.DocumentModel;
+import org.apache.maven.doxia.document.io.xpp3.DocumentXpp3Reader;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+
+import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Read and filter a DocumentModel from a document descriptor file.
+ *
+ * @author ltheussl
+ * @version $Id$
+ */
+public class DocumentDescriptorReader
+{
+ private final MavenProject project;
+ private final Log log;
+
+ /**
+ * Constructor.
+ */
+ public DocumentDescriptorReader()
+ {
+ this( null, null );
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param project may be null.
+ */
+ public DocumentDescriptorReader( final MavenProject project )
+ {
+ this( project, null );
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param project may be null.
+ * @param log may be null.
+ */
+ public DocumentDescriptorReader( final MavenProject project, final Log log )
+ {
+ this.project = project;
+ this.log = log;
+ }
+
+ /**
+ * Read and filter the <code>docDescriptor</code> file.
+ *
+ * @param docDescriptor not null.
+ * @return a DocumentModel instance.
+ * @throws XmlPullParserException if an error occurs during parsing.
+ * @throws IOException if an error occurs during reading.
+ */
+ public DocumentModel readAndFilterDocumentDescriptor( final File docDescriptor )
+ throws XmlPullParserException, IOException
+ {
+ Reader reader = null;
+ try
+ {
+ // System properties
+ final Properties filterProperties = System.getProperties();
+ // Project properties
+ if ( project != null && project.getProperties() != null )
+ {
+ filterProperties.putAll( project.getProperties() );
+ }
+
+ final Interpolator interpolator = new RegexBasedInterpolator();
+ interpolator.addValueSource( new MapBasedValueSource( filterProperties ) );
+ interpolator.addValueSource( new EnvarBasedValueSource() );
+ interpolator.addValueSource( new ObjectBasedValueSource( project )
+ {
+ /** {@inheritDoc} */
+ public Object getValue( final String expression )
+ {
+ try
+ {
+ return ReflectionValueExtractor.evaluate( expression, project );
+ }
+ catch ( Exception e )
+ {
+ addFeedback( "Failed to extract \'" + expression + "\' from: " + project, e );
+ }
+
+ return null;
+ }
+ } );
+
+ final DateBean bean = new DateBean();
+ interpolator.addValueSource( new ObjectBasedValueSource( bean ) );
+
+ reader = ReaderFactory.newXmlReader( docDescriptor );
+
+ final String interpolatedDoc = interpolator.interpolate( IOUtil.toString( reader ) );
+
+ if ( log != null && log.isDebugEnabled() )
+ {
+ log.debug( "Interpolated document descriptor ("
+ + docDescriptor.getAbsolutePath() + ")\n" + interpolatedDoc );
+ }
+
+ // No Strict
+ return new DocumentXpp3Reader().read( new StringReader( interpolatedDoc ), false );
+ }
+ catch ( InterpolationException e )
+ {
+ final IOException io = new IOException( "Error interpolating document descriptor" );
+ io.initCause( e );
+ throw io;
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+}
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java?rev=786524&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java (added)
+++ maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java Fri Jun 19 14:48:55 2009
@@ -0,0 +1,319 @@
+package org.apache.maven.plugins.pdf;
+
+/*
+ * 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 java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.doxia.document.DocumentAuthor;
+import org.apache.maven.doxia.document.DocumentCover;
+import org.apache.maven.doxia.document.DocumentMeta;
+import org.apache.maven.doxia.document.DocumentModel;
+import org.apache.maven.doxia.document.DocumentTOC;
+import org.apache.maven.doxia.document.DocumentTOCItem;
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.site.decoration.Menu;
+import org.apache.maven.doxia.site.decoration.MenuItem;
+import org.apache.maven.model.Developer;
+import org.apache.maven.project.MavenProject;
+
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Construct a DocumentModel from a MavenProject and related information.
+ *
+ * @author ltheussl
+ * @version $Id$
+ */
+public class DocumentModelBuilder
+{
+ private final MavenProject project;
+ private final DecorationModel decorationModel;
+
+ /**
+ * Constructor. Initialize a MavenProject to extract information from.
+ *
+ * @param project a MavenProject. May be null.
+ */
+ public DocumentModelBuilder( MavenProject project )
+ {
+ this( project, null );
+ }
+
+ /**
+ * Constructor. Initialize a MavenProject and a DecorationModel to extract information from.
+ *
+ * @param project a MavenProject. May be null.
+ * @param decorationModel a DecorationModel. May be null.
+ */
+ public DocumentModelBuilder( MavenProject project, DecorationModel decorationModel )
+ {
+ this.project = project;
+ this.decorationModel = decorationModel;
+ }
+
+ /**
+ * Get a DocumentModel.
+ *
+ * @return a DocumentModel. Always non-null.
+ */
+ public DocumentModel getDocumentModel()
+ {
+ return getDocumentModel( project, decorationModel, null );
+ }
+
+ /**
+ * Get a DocumentModel.
+ *
+ * @param date overrides the default date in meta- and cover information.
+ * @return a DocumentModel. Always non-null.
+ */
+ public DocumentModel getDocumentModel( Date date )
+ {
+ return getDocumentModel( project, decorationModel, date );
+ }
+
+ // ----------------------------------------------------------------------
+ // Private methods
+ // ----------------------------------------------------------------------
+
+ /**
+ * Extract a DocumentModel from a MavenProject.
+ *
+ * @param project a MavenProject. May be null.
+ * @param decorationModel a DecorationModel. May be null.
+ * @param date the date of the TOC. May be null in which case the build date will be used.
+ *
+ * @return a DocumentModel. Always non-null.
+ */
+ private static DocumentModel getDocumentModel( MavenProject project,
+ DecorationModel decorationModel, Date date )
+ {
+ final Date now = ( date == null ? new Date() : date );
+
+ final DocumentModel docModel = new DocumentModel();
+
+ docModel.setModelEncoding( getProjectModelEncoding( project ) );
+ docModel.setOutputName( project == null ? null : project.getArtifactId() );
+ docModel.setMeta( getDocumentMeta( project, now ) );
+ docModel.setCover( getDocumentCover( project, now ) );
+ docModel.setToc( getDocumentTOC( decorationModel ) );
+
+ return docModel;
+ }
+
+ /**
+ * Extract a DocumentTOC from a DecorationModel.
+ *
+ * @param decorationModel a DecorationModel. May be null.
+ * @return a DocumentTOC, always non-null.
+ */
+ private static DocumentTOC getDocumentTOC( DecorationModel decorationModel )
+ {
+ final DocumentTOC toc = new DocumentTOC();
+
+ if ( decorationModel != null && decorationModel.getMenus() != null )
+ {
+ for ( final Iterator it = decorationModel.getMenus().iterator(); it.hasNext(); )
+ {
+ final Menu menu = (Menu) it.next();
+
+ for ( final Iterator it2 = menu.getItems().iterator(); it2.hasNext(); )
+ {
+ final MenuItem item = (MenuItem) it2.next();
+
+ final DocumentTOCItem documentTOCItem = new DocumentTOCItem();
+ documentTOCItem.setName( item.getName() );
+ documentTOCItem.setRef( item.getHref() );
+ toc.addItem( documentTOCItem );
+ }
+ }
+ }
+
+ return toc;
+ }
+
+ /**
+ * Extract meta information from a MavenProject.
+ *
+ * @param project a MavenProject. May be null.
+ * @param date the date to use in meta. May be null.
+ *
+ * @return a DocumentMeta object. Always non-null.
+ */
+ private static DocumentMeta getDocumentMeta( MavenProject project, Date date )
+ {
+ final DocumentMeta meta = new DocumentMeta();
+
+ meta.setAuthors( getAuthors( project ) );
+ meta.setCreationDate( date );
+ meta.setCreator( System.getProperty( "user.name" ) );
+ meta.setDate( date );
+ meta.setDescription( project == null ? null : project.getDescription() );
+ //meta.setGenerator( generator );
+ meta.setInitialCreator( System.getProperty( "user.name" ) );
+ //meta.setLanguage( locale == null ? null : locale.getLanguage() );
+ //meta.setPageSize( pageSize );
+ meta.setSubject( getProjectName( project ) );
+ meta.setTitle( getProjectName( project ) );
+
+ return meta;
+ }
+
+ /**
+ * Extract information for a DocumentCover from a MavenProject.
+ *
+ * @param project a MavenProject. May be null.
+ * @param date the cover date. May be null.
+ *
+ * @return a DocumentCover object. Always non-null.
+ */
+ private static DocumentCover getDocumentCover( MavenProject project, Date date )
+ {
+ final DocumentCover cover = new DocumentCover();
+
+ cover.setAuthors( getAuthors( project ) );
+ //cover.setCompanyLogo( companyLogo );
+ cover.setCompanyName( getProjectOrganizationName( project ) );
+ cover.setCoverDate( date );
+ cover.setCoverSubTitle( project == null ? null : "v. " + project.getVersion() );
+ cover.setCoverTitle( getProjectName( project ) );
+ //cover.setCoverType( type );
+ cover.setCoverVersion( project == null ? null : project.getVersion() );
+ //cover.setProjectLogo( projectLogo );
+ cover.setProjectName( getProjectName( project ) );
+
+ return cover;
+ }
+
+ /**
+ * Wrap the list of project {@link Developer} to a list of {@link DocumentAuthor}.
+ *
+ * @param project the MavenProject to extract the authors from.
+ * @return a list of DocumentAuthors from the project developers.
+ * Returns null if project is null or contains no developers.
+ */
+ private static List getAuthors( MavenProject project )
+ {
+ if ( project == null || project.getDevelopers() == null )
+ {
+ return null;
+ }
+
+ final List ret = new ArrayList();
+
+ for ( final Iterator it = project.getDevelopers().iterator(); it.hasNext(); )
+ {
+ final Developer developer = (Developer) it.next();
+
+ final DocumentAuthor author = new DocumentAuthor();
+ author.setName( developer.getName() );
+ author.setEmail( developer.getEmail() );
+ author.setCompanyName( developer.getOrganization() );
+ StringBuffer roles = null;
+
+ for ( final Iterator it2 = developer.getRoles().iterator(); it2.hasNext(); )
+ {
+ final String role = (String) it2.next();
+
+ if ( roles == null )
+ {
+ roles = new StringBuffer();
+ }
+
+ roles.append( role );
+
+ if ( it2.hasNext() )
+ {
+ roles.append( ',' );
+ }
+ }
+ if ( roles != null )
+ {
+ author.setPosition( roles.toString() );
+ }
+
+ ret.add( author );
+ }
+
+ return ret;
+ }
+
+ /**
+ * @param project the MavenProject to extract the project organization name from.
+ * @return the project organization name if not empty, or the current System user name otherwise.
+ */
+ private static String getProjectOrganizationName( MavenProject project )
+ {
+ if ( project != null && project.getOrganization() != null
+ && StringUtils.isNotEmpty( project.getOrganization().getName() ) )
+ {
+ return project.getOrganization().getName();
+ }
+
+ return System.getProperty( "user.name" );
+ }
+
+ /**
+ * Extract the name of the project.
+ *
+ * @param project the MavenProject to extract the project name from.
+ * @return the project name, or the project groupId and artifactId if
+ * the project name is empty, or null if project is null.
+ */
+ private static String getProjectName( MavenProject project )
+ {
+ if ( project == null )
+ {
+ return null;
+ }
+
+ if ( StringUtils.isEmpty( project.getName() ) )
+ {
+ return project.getGroupId() + ":" + project.getArtifactId();
+ }
+
+ return project.getName();
+ }
+
+ /**
+ * Extract the encoding.
+ *
+ * @param project the MavenProject to extract the encoding name from.
+ * @return the project encoding if defined, or UTF-8 otherwise, or null if project is null.
+ */
+ private static String getProjectModelEncoding( MavenProject project )
+ {
+ if ( project == null )
+ {
+ return null;
+ }
+
+ if ( StringUtils.isEmpty( project.getModel().getModelEncoding() ) )
+ {
+ return "UTF-8";
+ }
+
+ return project.getModel().getModelEncoding();
+ }
+}
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/DocumentModelBuilder.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java?rev=786524&r1=786523&r2=786524&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java (original)
+++ maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java Fri Jun 19 14:48:55 2009
@@ -21,62 +21,39 @@
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TimeZone;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.doxia.docrenderer.DocumentRenderer;
import org.apache.maven.doxia.docrenderer.DocumentRendererException;
import org.apache.maven.doxia.docrenderer.pdf.PdfRenderer;
-import org.apache.maven.doxia.document.DocumentAuthor;
-import org.apache.maven.doxia.document.DocumentCover;
-import org.apache.maven.doxia.document.DocumentMeta;
import org.apache.maven.doxia.document.DocumentModel;
-import org.apache.maven.doxia.document.DocumentTOC;
-import org.apache.maven.doxia.document.DocumentTOCItem;
-import org.apache.maven.doxia.document.io.xpp3.DocumentXpp3Reader;
import org.apache.maven.doxia.document.io.xpp3.DocumentXpp3Writer;
import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.site.decoration.Menu;
-import org.apache.maven.doxia.site.decoration.MenuItem;
import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
import org.apache.maven.doxia.tools.SiteTool;
import org.apache.maven.doxia.tools.SiteToolException;
-import org.apache.maven.model.Developer;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
+//TODO: replace with something equivalent in plexus.util
import org.apache.maven.wagon.PathUtils;
+
import org.codehaus.plexus.i18n.I18N;
-import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
-import org.codehaus.plexus.interpolation.InterpolationException;
-import org.codehaus.plexus.interpolation.Interpolator;
-import org.codehaus.plexus.interpolation.MapBasedValueSource;
-import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
-import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.WriterFactory;
-import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
import org.codehaus.plexus.util.xml.XmlStreamReader;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -220,11 +197,21 @@
*/
private DecorationModel defaultDecorationModel;
+ /**
+ * @parameter expression="${plugin.version}"
+ */
+ private String pluginVersion;
+
// ----------------------------------------------------------------------
// Public methods
// ----------------------------------------------------------------------
- /** {@inheritDoc} */
+ /**
+ * {@inheritDoc}
+ *
+ * @throws MojoExecutionException if an exception ocurred during mojo execution.
+ * @throws MojoFailureException if the mojo could not be executed.
+ */
public void execute()
throws MojoExecutionException, MojoFailureException
{
@@ -243,17 +230,17 @@
try
{
- List localesList = siteTool.getAvailableLocales( locales );
+ final List localesList = siteTool.getAvailableLocales( locales );
// Default is first in the list
- Locale defaultLocale = (Locale) localesList.get( 0 );
+ this.defaultLocale = (Locale) localesList.get( 0 );
Locale.setDefault( defaultLocale );
- for ( Iterator iterator = localesList.iterator(); iterator.hasNext(); )
+ for ( final Iterator iterator = localesList.iterator(); iterator.hasNext(); )
{
- Locale locale = (Locale) iterator.next();
+ final Locale locale = (Locale) iterator.next();
- File workingDir = getWorkingDirectory( locale, defaultLocale );
+ final File workingDir = getWorkingDirectory( locale, defaultLocale );
File siteDirectoryFile = siteDirectory;
if ( !locale.getLanguage().equals( defaultLocale.getLanguage() ) )
@@ -264,32 +251,36 @@
// Copy extra-resources
copyResources( locale );
- if ( aggregate )
+ try
{
- docRenderer.render( siteDirectoryFile, workingDir, getDocumentModel( locale ) );
+ if ( aggregate )
+ {
+ docRenderer.render( siteDirectoryFile, workingDir, getDocumentModel( locale ) );
+ }
+ else
+ {
+ docRenderer.render( siteDirectoryFile, workingDir, null );
+ }
}
- else
+ catch ( DocumentRendererException e )
{
- docRenderer.render( siteDirectoryFile, workingDir, null );
+ throw new MojoExecutionException( "Error during document generation", e );
}
}
if ( !outputDirectory.getCanonicalPath().equals( workingDirectory.getCanonicalPath() ) )
{
- List pdfs = FileUtils.getFiles( workingDirectory, "**/*.pdf", null );
- for ( Iterator it = pdfs.iterator(); it.hasNext(); )
+ final List pdfs = FileUtils.getFiles( workingDirectory, "**/*.pdf", null );
+
+ for ( final Iterator it = pdfs.iterator(); it.hasNext(); )
{
- File pdf = (File) it.next();
+ final File pdf = (File) it.next();
FileUtils.copyFile( pdf, new File( outputDirectory, pdf.getName() ) );
pdf.delete();
}
}
}
- catch ( DocumentRendererException e )
- {
- throw new MojoExecutionException( "Error during document generation", e );
- }
catch ( IOException e )
{
throw new MojoExecutionException( "Error during document generation", e );
@@ -312,23 +303,49 @@
* @see #readAndFilterDocumentDescriptor(MavenProject, File, Log)
*/
private DocumentModel getDocumentModel( Locale locale )
- throws DocumentRendererException, IOException, MojoExecutionException
+ throws MojoExecutionException
{
if ( docDescriptor.exists() )
{
- DocumentModel doc = readAndFilterDocumentDescriptor( project, docDescriptor, getLog() );
+ DocumentModel doc = null;
+
+ try
+ {
+ doc = new DocumentDescriptorReader( project, getLog() )
+ .readAndFilterDocumentDescriptor( docDescriptor );
+ }
+ catch ( XmlPullParserException ex )
+ {
+ throw new MojoExecutionException( "Error reading DocumentDescriptor!", ex );
+ }
+ catch ( IOException io )
+ {
+ throw new MojoExecutionException( "Error opening DocumentDescriptor!", io );
+ }
+
if ( StringUtils.isEmpty( doc.getMeta().getLanguage() ) )
{
doc.getMeta().setLanguage( locale.getLanguage() );
}
+
if ( StringUtils.isEmpty( doc.getMeta().getGenerator() ) )
{
doc.getMeta().setGenerator( getDefaultGenerator() );
}
+
return doc;
}
- return generateDefaultDocDescriptor( locale );
+ DocumentModel model = new DocumentModelBuilder( project, getDefaultDecorationModel() ).getDocumentModel();
+
+ model.getMeta().setGenerator( getDefaultGenerator() );
+ model.getMeta().setLanguage( locale.getLanguage() );
+ model.getCover().setCoverType( i18n.getString( "pdf-plugin", defaultLocale, "toc.type" ) );
+ model.getToc().setName( i18n.getString( "pdf-plugin", defaultLocale, "toc.title" ) );
+
+ debugLogGeneratedModel( project, model );
+
+ return model;
}
/**
@@ -349,199 +366,13 @@
}
/**
- * @param locale not null
- * @return Generate a default document descriptor from the Maven project
- * @throws IOException if any
- * @throws MojoExecutionException if any
- */
- private DocumentModel generateDefaultDocDescriptor( Locale locale )
- throws IOException, MojoExecutionException
- {
- DocumentMeta meta = new DocumentMeta();
- meta.setAuthors( getAuthors() );
- meta.setCreationDate( new Date() );
- meta.setCreator( System.getProperty( "user.name" ) );
- meta.setDate( new Date() );
- meta.setDescription( project.getDescription() );
- meta.setGenerator( getDefaultGenerator() );
- meta.setInitialCreator( System.getProperty( "user.name" ) );
- meta.setLanguage( locale.getLanguage() );
- //meta.setPageSize( pageSize );
- meta.setSubject( getProjectName() );
- meta.setTitle( getProjectName() );
-
- DocumentCover cover = new DocumentCover();
- cover.setAuthors( getAuthors() );
- //cover.setCompanyLogo( companyLogo );
- cover.setCompanyName( getProjectOrganizationName() );
- cover.setCoverDate( new Date() );
- cover.setCoverSubTitle( "v. " + project.getVersion() );
- cover.setCoverTitle( getProjectName() );
- cover.setCoverType( i18n.getString( "pdf-plugin", getDefaultLocale(), "toc.type" ) );
- cover.setCoverVersion( project.getVersion() );
- //cover.setProjectLogo( projectLogo );
- cover.setProjectName( getProjectName() );
-
- DocumentModel docModel = new DocumentModel();
- docModel.setModelEncoding( getProjectModelEncoding() );
- docModel.setOutputName( project.getArtifactId() );
- docModel.setMeta( meta );
- docModel.setCover( cover );
-
- // Populate docModel from defaultDecorationModel
- DecorationModel decorationModel = getDefaultDecorationModel();
- if ( decorationModel != null )
- {
- DocumentTOC toc = new DocumentTOC();
-
- toc.setName( i18n.getString( "pdf-plugin", getDefaultLocale(), "toc.title" ) );
-
- for ( Iterator it = decorationModel.getMenus().iterator(); it.hasNext(); )
- {
- Menu menu = (Menu) it.next();
-
- for ( Iterator it2 = menu.getItems().iterator(); it2.hasNext(); )
- {
- MenuItem item = (MenuItem) it2.next();
-
- DocumentTOCItem documentTOCItem = new DocumentTOCItem();
- documentTOCItem.setName( item.getName() );
- documentTOCItem.setRef( item.getHref() );
- toc.addItem( documentTOCItem );
- }
- }
-
- docModel.setToc( toc );
- }
-
- if ( getLog().isDebugEnabled() )
- {
- File outputDir = new File( project.getBuild().getDirectory(), "pdf" );
-
- if ( outputDir.isFile() )
- {
- throw new IOException( outputDir + " is not a directory!" );
- }
-
- if ( !outputDir.exists() )
- {
- outputDir.mkdirs();
- }
-
- File doc = FileUtils.createTempFile( "pdf", ".xml", outputDir );
-
- getLog().debug( "Generated a default document model: " + doc.getAbsolutePath() );
-
- DocumentXpp3Writer xpp3 = new DocumentXpp3Writer();
- Writer w = null;
- try
- {
- w = WriterFactory.newXmlWriter( doc );
- xpp3.write( w, docModel );
- }
- finally
- {
- IOUtil.close( w );
- }
- }
-
- return docModel;
- }
-
- /**
- * @return the project organization name if not empty, or the current System user name otherwise.
- */
- private String getProjectOrganizationName()
- {
- if ( project.getOrganization() != null && StringUtils.isNotEmpty( project.getOrganization().getName() ) )
- {
- return project.getOrganization().getName();
- }
-
- return System.getProperty( "user.name" );
- }
-
- /**
- * @return the project name if not empty, or the project groupId and artifactId.
- */
- private String getProjectName()
- {
- if ( StringUtils.isEmpty( project.getName() ) )
- {
- return project.getGroupId() + ":" + project.getArtifactId();
- }
-
- return project.getName();
- }
-
- /**
- * @return the project encoding if defined, or UTF-8 otherwise.
- */
- private String getProjectModelEncoding()
- {
- if ( StringUtils.isEmpty( project.getModel().getModelEncoding() ) )
- {
- return "UTF-8";
- }
-
- return project.getModel().getModelEncoding();
- }
-
- /**
- * Wrap the list of project {@link Developer} to a list of {@link DocumentAuthor}.
- *
- * @return a list of authors from the project developers.
- */
- private List getAuthors()
- {
- if ( project.getDevelopers() == null )
- {
- return null;
- }
-
- List ret = new ArrayList();
- for ( Iterator it = project.getDevelopers().iterator(); it.hasNext(); )
- {
- Developer developer = (Developer) it.next();
-
- DocumentAuthor author = new DocumentAuthor();
- author.setName( developer.getName() );
- author.setEmail( developer.getEmail() );
- author.setCompanyName( developer.getOrganization() );
- StringBuffer roles = null;
- for ( Iterator it2 = developer.getRoles().iterator(); it2.hasNext(); )
- {
- String role = (String) it2.next();
-
- if ( roles == null )
- {
- roles = new StringBuffer();
- }
- roles.append( role );
- if ( it2.hasNext() )
- {
- roles.append( "," );
- }
- }
- if ( roles != null )
- {
- author.setPosition( roles.toString() );
- }
-
- ret.add( author );
- }
-
- return ret;
- }
-
- /**
* @return the default locale from <code>siteTool</code>.
*/
private Locale getDefaultLocale()
{
if ( this.defaultLocale == null )
{
- List localesList = siteTool.getAvailableLocales( locales );
+ final List localesList = siteTool.getAvailableLocales( locales );
this.defaultLocale = (Locale) localesList.get( 0 );
}
@@ -557,17 +388,15 @@
{
if ( this.defaultDecorationModel == null )
{
- Locale locale = getDefaultLocale();
+ final Locale locale = getDefaultLocale();
- File descriptorFile =
+ final File descriptorFile =
siteTool.getSiteDescriptorFromBasedir( PathUtils.toRelative( project.getBasedir(),
siteDirectory.getAbsolutePath() ),
project.getBasedir(), locale );
DecorationModel decoration = null;
if ( descriptorFile.exists() )
{
- Map props = new HashMap();
-
XmlStreamReader reader = null;
try
{
@@ -575,7 +404,7 @@
String siteDescriptorContent = IOUtil.toString( reader );
siteDescriptorContent =
- siteTool.getInterpolatedSiteDescriptorContent( props, project, siteDescriptorContent,
+ siteTool.getInterpolatedSiteDescriptorContent( new HashMap(), project, siteDescriptorContent,
reader.getEncoding(), reader.getEncoding() );
decoration = new DecorationXpp3Reader().read( new StringReader( siteDescriptorContent ) );
@@ -614,7 +443,7 @@
private void copyResources( Locale locale )
throws MojoExecutionException
{
- DecorationModel decorationModel = getDefaultDecorationModel();
+ final DecorationModel decorationModel = getDefaultDecorationModel();
if ( decorationModel == null )
{
@@ -622,6 +451,7 @@
}
File skinFile;
+
try
{
skinFile =
@@ -645,14 +475,14 @@
try
{
- SiteRenderingContext context =
+ final SiteRenderingContext context =
siteRenderer.createContextForSkin( skinFile, new HashMap(), decorationModel, project.getName(),
locale );
context.addSiteDirectory( new File( siteDirectory, locale.getLanguage() ) );
- for ( Iterator i = context.getSiteDirectories().iterator(); i.hasNext(); )
+ for ( final Iterator i = context.getSiteDirectories().iterator(); i.hasNext(); )
{
- File siteDirectoryFile = (File) i.next();
+ final File siteDirectoryFile = (File) i.next();
siteRenderer.copyResources( context, new File( siteDirectoryFile, "resources" ), workingDirectory );
}
@@ -664,201 +494,47 @@
}
/**
- * Read and filter the <code>docDescriptor</code> file.
+ * Construct a default producer.
*
- * @param project not null
- * @param docDescriptor not null
- * @param log not null
- * @return a DocumentModel instance
- * @throws DocumentRendererException if any
- * @throws IOException if any
+ * @param version the current plugin version. May be null.
+ * @param implementation the pdf implementation. May be null.
+ * @return A String in the form <code>Maven PDF Plugin v. 1.1.1, 'fo' implementation</code>.
*/
- private DocumentModel readAndFilterDocumentDescriptor( final MavenProject project, File docDescriptor, Log log )
- throws DocumentRendererException, IOException
+ private String getDefaultGenerator()
{
- Reader reader = null;
- try
- {
- // System properties
- Properties filterProperties = System.getProperties();
- // Project properties
- if ( project != null && project.getProperties() != null )
- {
- filterProperties.putAll( project.getProperties() );
- }
-
- Interpolator interpolator = new RegexBasedInterpolator();
- interpolator.addValueSource( new MapBasedValueSource( filterProperties ) );
- interpolator.addValueSource( new EnvarBasedValueSource() );
- interpolator.addValueSource( new ObjectBasedValueSource( project )
- {
- /** {@inheritDoc} */
- public Object getValue( String expression )
- {
- try
- {
- return ReflectionValueExtractor.evaluate( expression, project );
- }
- catch ( Exception e )
- {
- addFeedback( "Failed to extract \'" + expression + "\' from: " + project, e );
- }
-
- return null;
- }
- } );
- final DateBean bean = new DateBean();
- interpolator.addValueSource( new ObjectBasedValueSource( bean ) );
-
- reader = ReaderFactory.newXmlReader( docDescriptor );
-
- String interpolatedDoc = interpolator.interpolate( IOUtil.toString( reader ) );
-
- if ( getLog().isDebugEnabled() )
- {
- getLog().debug(
- "Interpolated document descriptor (" + docDescriptor.getAbsolutePath() + ")\n"
- + interpolatedDoc );
- }
-
- // No Strict
- return new DocumentXpp3Reader().read( new StringReader( interpolatedDoc ), false );
- }
- catch ( XmlPullParserException e )
- {
- throw new DocumentRendererException( "Error parsing document descriptor", e );
- }
- catch ( InterpolationException e )
- {
- throw new DocumentRendererException( "Error interpolating document descriptor", e );
- }
- finally
- {
- IOUtil.close( reader );
- }
+ return "Maven PDF Plugin v. " + pluginVersion + ", '" + implementation + "' implementation.";
}
- /**
- * @return the PDF producer ie <code>Apache Doxia 1.1.1, 'fo' implementation</code>
- */
- private String getDefaultGenerator()
+ private void debugLogGeneratedModel( MavenProject project, final DocumentModel docModel )
{
- String doxiaVersion = "unknown";
- InputStream resourceAsStream;
- try
+ if ( getLog().isDebugEnabled() && project != null )
{
- Properties properties = new Properties();
- resourceAsStream = getClass().getClassLoader()
- .getResourceAsStream( "META-INF/maven/org.apache.maven.doxia/doxia-core/pom.properties" );
+ final File outputDir = new File( project.getBuild().getDirectory(), "pdf" );
- if ( resourceAsStream != null )
+ if ( !outputDir.exists() )
{
- properties.load( resourceAsStream );
-
- doxiaVersion = properties.getProperty( "version", doxiaVersion );
+ outputDir.mkdirs();
}
- }
- catch ( IOException e )
- {
- getLog().error( "Unable to determine version from JAR file: " + e.getMessage() );
- }
-
- return "Apache Doxia " + doxiaVersion + ", '" + implementation + "' implementation.";
- }
-
- /**
- * Simple bean to allow date interpolation in the document descriptor, i.e.
- * <pre>
- * ${year} = 2009
- * ${date} = 2009-05-17
- * </pre>
- */
- public static class DateBean
- {
- private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
- /**
- * @return the current year.
- */
- public String getYear()
- {
- return new SimpleDateFormat( "yyyy", Locale.US ).format( new Date() );
- }
+ final File doc = FileUtils.createTempFile( "pdf", ".xml", outputDir );
+ final DocumentXpp3Writer xpp3 = new DocumentXpp3Writer();
- /**
- * @return the current month.
- */
- public String getMonth()
- {
- return new SimpleDateFormat( "MM", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current day.
- */
- public String getDay()
- {
- return new SimpleDateFormat( "dd", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current hour.
- */
- public String getHour()
- {
- return new SimpleDateFormat( "HH", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current minute.
- */
- public String getMinute()
- {
- return new SimpleDateFormat( "mm", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current second.
- */
- public String getSecond()
- {
- return new SimpleDateFormat( "ss", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current millisecond.
- */
- public String getMillisecond()
- {
- return new SimpleDateFormat( "SSS", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current date using the ISO 8601 format, i.e. <code>yyyy-MM-dd</code>.
- */
- public String getDate()
- {
- return new SimpleDateFormat( "yyyy-MM-dd", Locale.US ).format( new Date() );
- }
-
- /**
- * @return the current time using the ISO 8601 format and UTC time zone, i.e. <code>HH:mm:ss'Z'</code>.
- */
- public String getTime()
- {
- SimpleDateFormat sdf = new SimpleDateFormat( "HH:mm:ss'Z'", Locale.US );
- sdf.setTimeZone( UTC_TIME_ZONE );
- return sdf.format( new Date() );
- }
+ Writer w = null;
- /**
- * @return the current datetime using the ISO 8601 format, i.e. <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code>.
- */
- public String getDateTime()
- {
- SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US );
- sdf.setTimeZone( UTC_TIME_ZONE );
- return sdf.format( new Date() );
+ try
+ {
+ w = WriterFactory.newXmlWriter( doc );
+ xpp3.write( w, docModel );
+ getLog().debug( "Generated a default document model: " + doc.getAbsolutePath() );
+ }
+ catch ( IOException io )
+ {
+ getLog().debug( "Failed to write document model: " + doc.getAbsolutePath(), io );
+ }
+ finally
+ {
+ IOUtil.close( w );
+ }
}
}
}
Modified: maven/plugins/trunk/maven-pdf-plugin/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java?rev=786524&r1=786523&r2=786524&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java (original)
+++ maven/plugins/trunk/maven-pdf-plugin/src/test/java/org/apache/maven/plugins/pdf/PdfMojoTest.java Fri Jun 19 14:48:55 2009
@@ -141,7 +141,7 @@
// ${project.developers[0].email}
assertTrue( foContent.indexOf( "vsiveton@apache.org ltheussl@apache.org" ) > 0 );
// ${date}
- assertTrue( foContent.indexOf( new PdfMojo.DateBean().getDate() ) > 0 );
+ // TODO: this might fail on NewYear's eve! :)
+ assertTrue( foContent.indexOf( new DateBean().getDate() ) > 0 );
}
-
}
\ No newline at end of file