org.openehealth.ipf.labs.maven.dsldoc.descriptor.AbstractDslRenderer.java Source code

Java tutorial

Introduction

Here is the source code for org.openehealth.ipf.labs.maven.dsldoc.descriptor.AbstractDslRenderer.java

Source

/*
 * Copyright 2010 the original author or authors.
 *
 * 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.openehealth.ipf.labs.maven.dsldoc.descriptor;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.maven.plugin.logging.Log;
import org.openehealth.ipf.labs.maven.dsldoc.domain.Documentation;
import org.openehealth.ipf.labs.maven.dsldoc.domain.MethodInfo;
import org.openehealth.ipf.labs.maven.dsldoc.domain.ModuleInfo;
import org.openehealth.ipf.labs.maven.dsldoc.domain.SectionInfo;

import com.thoughtworks.qdox.model.JavaClass;

/**
 * Abstract class for {@link DslRenderer}
 * 
 * @author Mitko Kolev
 */
public abstract class AbstractDslRenderer implements DslRenderer {

    abstract File getTargetFile(File parent, JavaClass cls);

    abstract String buildMethodDescriptor(MethodInfo info);

    abstract String buildSectionDescriptor(SectionInfo sectionEntry);

    @Override
    public String render(Documentation documentation) {
        StringBuilder builder = new StringBuilder();
        for (ModuleInfo module : documentation.getModules()) {
            builder.append(this.buildModuleDescriptor(module));
        }
        return builder.toString();
    }

    public String buildModuleDescriptor(ModuleInfo module) {
        StringBuilder str = new StringBuilder();
        for (SectionInfo sectionEntry : module.getSections()) {
            str.append(buildSectionDescriptor(sectionEntry));
            str.append(NEWLINE);
        }
        return str.toString();
    }

    protected String escape(String key, String value) {
        //escaped the contained " and '
        String valueEscaped = value.replaceAll("\'", "\"").replaceAll("\"", "\\'");
        return keyValue(key, "\'" + valueEscaped + "\'");
    }

    protected String keyValue(String key, String value) {
        StringBuilder str = new StringBuilder();
        str.append(key);
        str.append(" : ");
        str.append(value);
        return str.toString();
    }

    protected void writeFile(File output, String content) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter(output));
        try {
            writer.write(content);
        } finally {
            writer.close();
        }
    }

    protected File createTargetDescriptorFile(JavaClass cls, File outputDirectory, Log log) {
        File target = getTargetFile(outputDirectory, cls);
        if (!target.getParentFile().exists()) {
            boolean created = target.getParentFile().mkdirs();
            if (!created) {
                log.error("Unable to create the directory structure for DSL metadata "
                        + target.getParentFile().getAbsolutePath());
            }
        }
        return target;
    }

    public void writeToFile(Documentation doc, JavaClass cls, File outputDirectory, Log log) throws IOException {
        File file = createTargetDescriptorFile(cls, outputDirectory, log);
        log.info("Writing " + this.toString() + " (" + file.getAbsolutePath() + ")");
        String descriptorContent = render(doc);
        writeFile(file, descriptorContent);
    }
}