package org.apache.maven.plugins.changes; /* * 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.FileInputStream; import java.util.Collections; import java.util.List; /* * 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.logging.Log; import org.apache.maven.plugins.changes.model.Body; import org.apache.maven.plugins.changes.model.ChangesDocument; import org.apache.maven.plugins.changes.model.Properties; import org.apache.maven.plugins.changes.model.Release; import org.apache.maven.plugins.changes.model.io.xpp3.ChangesXpp3Reader; import org.codehaus.plexus.util.IOUtil; /** * A facade for a changes.xml file. * * @version $Id$ */ public class ChangesXML { /** The list of releases in the changes.xml file. */ private List<Release> releaseList; /** The author in the changes.xml file. */ private String author; /** The title of the changes.xml file. */ private String title; /** The e-mail address of the author in the changes.xml file. */ private String authorEmail; /** The changes.xml document. */ private ChangesDocument changesDocument; /** * Constructor that sets the changes.xml file and the logger. * * @param xmlPath the changes.xml file * @param log the logger * @throws ChangesXMLRuntimeException if there was a fatal error while parsing the changes.xml file */ public ChangesXML( File xmlPath, Log log ) throws ChangesXMLRuntimeException { if ( xmlPath == null || !xmlPath.exists() ) { log.error( "changes xml file is null or not exists " ); return; } FileInputStream fileInputStream = null; try { ChangesXpp3Reader reader = new ChangesXpp3Reader(); fileInputStream = new FileInputStream( xmlPath ); changesDocument = reader.read( fileInputStream, false ); fileInputStream.close(); fileInputStream = null; if ( changesDocument == null ) { log.error( "Cannot build Changes Report from file: " + xmlPath.getPath() ); return; } Properties properties = changesDocument.getProperties(); if ( properties != null ) { if ( properties.getAuthor() != null ) { this.author = properties.getAuthor().getName(); this.authorEmail = properties.getAuthor().getName(); } this.title = properties.getTitle(); } Body body = changesDocument.getBody(); if ( body != null ) { this.releaseList = body.getReleases(); } } catch ( Throwable e ) { log.error( "An error occurred when parsing the changes.xml file: ", e ); throw new ChangesXMLRuntimeException( "An error occurred when parsing the changes.xml file", e ); } finally { IOUtil.close( fileInputStream ); } } /** * Sets the {@link ChangesXML#author} attribute. * * @param author the new value of the {@link ChangesXML#author} attribute */ public void setAuthor( String author ) { this.author = author; } /** * Returns the current value of the author attribute. * * @return the current value of the author attribute */ public String getAuthor() { return author; } /** * Sets the {@link ChangesXML#releaseList} attribute. * * @param releaseList the new value of the {@link ChangesXML#releaseList} attribute */ public void setReleaseList( List<Release> releaseList ) { this.releaseList = releaseList; } /** * Returns the current value of the {@link ChangesXML#releaseList} attribute. * * @return the current value of the {@link ChangesXML#releaseList} attribute */ public List<Release> getReleaseList() { return releaseList == null ? Collections.<Release>emptyList() : releaseList; } /** * Sets the {@link ChangesXML#title} attribute. * * @param title the new value of the {@link ChangesXML#title} attribute */ public void setTitle( String title ) { this.title = title; } /** * Returns the current value of the {@link ChangesXML#title} attribute. * * @return the current value of the {@link ChangesXML#title} attribute */ public String getTitle() { return title; } /** * Returns the current value of the {@link ChangesXML#changesDocument} attribute. * * @return the current value of the {@link ChangesXML#changesDocument} attribute */ public ChangesDocument getChangesDocument() { return changesDocument; } /** * Returns the current value of the {@link ChangesXML#authorEmail} attribute. * * @return the current value of the {@link ChangesXML#authorEmail} attribute */ public String getAuthorEmail() { return authorEmail; } /** * Sets the {@link ChangesXML#authorEmail} attribute. * * @param authorEmail the new value of the {@link ChangesXML#authorEmail} attribute */ public void setAuthorEmail( String authorEmail ) { this.authorEmail = authorEmail; } }