org.phpmaven.phpdoc.impl.AbstractPhpdocSupport.java Source code

Java tutorial

Introduction

Here is the source code for org.phpmaven.phpdoc.impl.AbstractPhpdocSupport.java

Source

/**
 * 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 org.phpmaven.phpdoc.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

import org.apache.maven.plugin.logging.Log;
import org.phpmaven.phpdoc.IPhpdocEntry;
import org.phpmaven.phpdoc.IPhpdocEntry.EntryType;
import org.phpmaven.phpdoc.IPhpdocRequest;
import org.phpmaven.phpdoc.IPhpdocSupport;
import org.phpmaven.phpexec.library.PhpCoreException;

/**
 * A maven 2.0 plugin for generating phpdocumentor documentations. This plugin is
 * used in the <code>site</code> phase.
 *
 * @goal phpdocumentor
 * @phase site
 * @author Christian Wiedemann
 * @author Tobias Sarnowski
 */
abstract class AbstractPhpdocSupport implements IPhpdocSupport {

    /**
     * Writes an ini log file.
     * @param log log
     * @param request request
     * @param phpDocConfigFile phpdoc config file
     * @param generatedPhpDocConfigFile 
     * @throws IOException io exception
     * @throws PhpCoreException php core exception
     */
    protected void writeIni(Log log, IPhpdocRequest request, File phpDocConfigFile, File generatedPhpDocConfigFile)
            throws IOException, PhpCoreException {
        final Properties properties = new Properties();
        if (phpDocConfigFile.isFile()) {
            log.debug("generating phpdoc using config from " + phpDocConfigFile.getAbsolutePath());
            properties.load(new FileInputStream(phpDocConfigFile));
        } else {
            log.debug("config file " + phpDocConfigFile.getAbsolutePath() + " not found. ignoring.");
        }

        final Iterator<IPhpdocEntry> iter = request.getEntries().iterator();
        final IPhpdocEntry entry = iter.next();
        if (entry.getType() == EntryType.FILE) {
            log.error("Report generation for files not supported.");
            // TODO support it
            throw new PhpCoreException("Report generation for files not supported.");
        }
        if (iter.hasNext()) {
            log.error("Report generation for multiple source folders not supported.");
            // TODO support it
            throw new PhpCoreException("Report generation for multiple folders not supported.");
        }

        properties.put("directory", entry.getFile().getAbsolutePath());
        properties.put("target", request.getReportFolder().getAbsolutePath());

        this.writePropFile(properties, "[Parse Data]", generatedPhpDocConfigFile);
    }

    /**
     * Writes a xml log file.
     * @param log log
     * @param request request
     * @param phpDocConfigFile phpdoc config file
     * @param generatedPhpDocConfigFile 
     * @throws IOException io exception
     * @throws PhpCoreException php core exception
     */
    protected void writeXml(Log log, IPhpdocRequest request, File phpDocConfigFile, File generatedPhpDocConfigFile)
            throws IOException, PhpCoreException {

        // TODO read xml input file
        //        final Properties properties = new Properties();
        //        if (phpDocConfigFile.isFile()) {
        //            log.debug("generating phpdoc using config from " + phpDocConfigFile.getAbsolutePath());
        //            properties.load(new FileInputStream(phpDocConfigFile));
        //        } else {
        //            log.debug("config file " + phpDocConfigFile.getAbsolutePath() + " not found. ignoring.");
        //        }

        final StringBuffer buffer = new StringBuffer();
        buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
        buffer.append("<phpdocumentor>\n");
        buffer.append("<transformer>\n");
        buffer.append("<target>" + request.getReportFolder().getAbsolutePath() + "</target>\n");
        buffer.append("</transformer>\n");
        final Iterator<IPhpdocEntry> iter = request.getEntries().iterator();
        final IPhpdocEntry entry = iter.next();
        if (entry.getType() == EntryType.FILE) {
            log.error("Report generation for files not supported.");
            // TODO support it
            throw new PhpCoreException("Report generation for files not supported.");
        }
        if (iter.hasNext()) {
            log.error("Report generation for multiple source folders not supported.");
            // TODO support it
            throw new PhpCoreException("Report generation for multiple folders not supported.");
        }
        buffer.append("<files>\n");
        buffer.append("<directory>" + entry.getFile().getAbsolutePath() + "</directory>\n");
        buffer.append("</files>\n");
        buffer.append("</phpdocumentor>\n");

        generatedPhpDocConfigFile.getParentFile().mkdirs();
        final FileWriter fileWriter = new FileWriter(generatedPhpDocConfigFile);
        fileWriter.append(buffer.toString());
        fileWriter.close();
    }

    /**
     * Creates a property file.
     *
     * @param properties the properties to use
     * @param preFileContent templates
     * @param generatedPhpDocConfigFile
     * @throws IOException if something goes wrong while writing
     */
    private void writePropFile(Properties properties, String preFileContent, File generatedPhpDocConfigFile)
            throws IOException {
        final String lineSeparator = System.getProperty("line.separator");
        generatedPhpDocConfigFile.getParentFile().mkdirs();
        final FileWriter fileWriter = new FileWriter(generatedPhpDocConfigFile);
        final Set<Object> keySet = properties.keySet();
        if (preFileContent != null)
            fileWriter.append(preFileContent + lineSeparator);

        final Iterator<Object> iterator = keySet.iterator();
        while (iterator.hasNext()) {
            final String key = (String) iterator.next();
            final String value = properties.getProperty(key);
            fileWriter.append(key + "=" + value + lineSeparator);
        }
        fileWriter.close();
    }

}