com.iggroup.oss.restdoclet.plugin.util.ServiceUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.iggroup.oss.restdoclet.plugin.util.ServiceUtils.java

Source

/*
 * #%L
 * restdoc-plugin
 * %%
 * Copyright (C) 2012 IG Group
 * %%
 * 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.
 * #L%
 */
package com.iggroup.oss.restdoclet.plugin.util;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.iggroup.oss.restdoclet.doclet.type.Controller;
import com.iggroup.oss.restdoclet.plugin.io.ControllerJavadocFilenameFilter;
import com.iggroup.oss.restdoclet.plugin.io.DirectoryBuilder;
import com.iggroup.oss.restdoclet.plugin.io.MavenDirectoryFilter;

/**
 * This class contains utility methods for generating services.
 */
public final class ServiceUtils {

    /**
     * The prefix of the file containing the services.
     */
    public static final String SERVICES_FILE_PREFIX = "restdoc";

    /**
     * The suffix of the file containing the services.
     */
    public static final String SERVICES_FILE_SUFFIX = "-services.xml";

    /**
     * The prefix of the file containing the service.
     */
    public static final String SERVICE_FILE_PREFIX = "-service-";

    /**
     * The suffix of the file containing the service.
     */
    public static final String SERVICE_FILE_SUFFIX = ".xml";

    private static final Logger LOG = Logger.getLogger(ServiceUtils.class);

    /**
     * Private constructor to "silence" PMD.
     */
    private ServiceUtils() {
        super();
    }

    /**
     * Collects documentation of controllers created by XmlDoclet. It collects
     * documentation from the current directory and all its sub-directories
     * recursively.
     * 
     * @param start the directory to start looking for documentation.
     * @param javadocs the collection to which documentation files are added.
     */
    private static void collectControllerJavadocs(final File start, final Collection<File> javadocs) {
        final ControllerJavadocFilenameFilter jfilter = new ControllerJavadocFilenameFilter();
        for (File javadoc : start.listFiles(jfilter)) {
            javadocs.add(javadoc);
            LOG.info(javadoc.getAbsolutePath());
        }
        final MavenDirectoryFilter dfilter = new MavenDirectoryFilter(true, false);
        for (File dir : start.listFiles(dfilter)) {
            collectControllerJavadocs(dir, javadocs);
        }
    }

    /**
     * This method collects documentation of controllers created by XmlDoclet.
     * It collects documentation from the current directory and all its
     * sub-directories.
     * 
     * @param start the directory to start looking for documentation.
     * @return the collection to which documentation files are added.
     */
    public static Collection<File> collectControllerJavadocs(final File start) {
        final Collection<File> javadocs = new ArrayList<File>();
        LOG.info("Controllers: " + start);
        collectControllerJavadocs(start, javadocs);
        return javadocs;
    }

    /**
     * Searches a list of controllers for a particular Java type.
     * 
     * @param type the Java type of the controller to search for.
     * @param controllers the list of controllers.
     * @return the controller of the Java type searched for.
     * @throws JavadocNotFoundException if the controller of the Java type can't
     *            be found.
     */
    public static Controller controller(final String type, final Collection<Controller> controllers)
            throws JavadocNotFoundException {
        for (Controller controller : controllers) {
            if (StringUtils.equals(type, controller.getType())) {
                return controller;
            }
        }
        throw new JavadocNotFoundException(type);
    }

    /**
     * Returns a file containing the service corresponding to an identifier.
     * 
     * @param dirs the directories containing all the services.
     * @param identifier the identifier of the service.
     * @return the service file.
     * @throws IOException if the properties of <code>web</code> module can't be
     *            read.
     */
    public static File serviceFile(final DirectoryBuilder dirs, final int identifier) throws IOException {
        return new File(dirs.getClassesDirectory(),
                SERVICES_FILE_PREFIX + SERVICE_FILE_PREFIX + identifier + SERVICE_FILE_SUFFIX);
    }

    /**
     * Returns the file containing the listing of services.
     * 
     * @param dirs the directories containing all the services.
     * @return the file containing the listing of services.
     * @throws IOException if the properties of <code>web</code> module can't be
     *            read.
     */
    public static File servicesFile(final DirectoryBuilder dirs) throws IOException {
        return new File(dirs.getClassesDirectory(), SERVICES_FILE_PREFIX + SERVICES_FILE_SUFFIX);
    }

}