org.ranji.longan.skeleton.ParentSkeleton.java Source code

Java tutorial

Introduction

Here is the source code for org.ranji.longan.skeleton.ParentSkeleton.java

Source

package org.ranji.longan.skeleton;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 
 * @author RanJi
 */
public class ParentSkeleton {
    /**
     * ?
     * @param projectName ????com.company.projectname?
     * @param targetDir ??
     */
    public static void createParentSkeleton(String projectName, String targetDir) {
        //-- 1. ??
        if (projectName == null || "".equals(projectName) || targetDir == null || "".equals(targetDir))
            return;
        String[] s = projectName.trim().split("\\.");
        if (s == null || s.length != 3)
            return;

        //-- 2. targetDir,?
        File parentDir = new File(targetDir);
        File projectDir = new File(parentDir, s[2]);
        projectDir.mkdirs();

        //-- 3. .config?
        createConfigFile(projectName, projectDir);

        //-- 4. .gitignore
        createGitIgnoreFile(projectDir);

        //-- 5. LICENSE.txt
        createLicenseFile(projectDir);

        //-- 6. README.md
        createReadMeFile(projectDir);

        //-- 7. pom.xml
        createPomXmlFile(projectName, s[2], projectDir);
    }

    /**
     * ?.config
     * @param projectName   ??
     * @param targetDir 
     */
    private static void createConfigFile(String projectName, File projectDir) {
        File f = new File(projectDir, ".config");
        try {
            //-- ??projectname=xxx.xxx.xxx
            FileUtils.writeStringToFile(f, "projectname=" + projectName.trim());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * ?.gitignore
     * @param projectDir 
     */
    private static void createGitIgnoreFile(File projectDir) {
        File gitignoreFile = new File(projectDir, ".gitignore");
        createFileByTemplate("parent/gitignore.rj", gitignoreFile);
    }

    private static void createLicenseFile(File projectDir) {
        File licenseFile = new File(projectDir, "LICENSE.txt");
        createFileByTemplate("parent/license.rj", licenseFile);
    }

    private static void createReadMeFile(File projectDir) {
        File readmeFile = new File(projectDir, "README.md");
        createFileByTemplate("parent/readme.rj", readmeFile);
    }

    private static void createPomXmlFile(String projectName, String projectSimpleName, File projectDir) {
        File pomFile = new File(projectDir, "pom.xml");
        URL url = ParentSkeleton.class.getClassLoader().getResource("parent/pom.rj");
        SAXReader reader = new SAXReader();
        try {
            Document doc = reader.read(url);
            Element rootElm = doc.getRootElement();
            //-- 1. groupId
            Element groupIdElm = rootElm.element("groupId");
            groupIdElm.setText(projectName.trim());
            //-- 2. artifactId
            Element artifactIdElm = rootElm.element("artifactId");
            artifactIdElm.setText(projectSimpleName);
            //-- 3. name
            Element nameElm = rootElm.element("name");
            nameElm.setText(projectSimpleName);

            //-- 4. ?
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
            try {
                XMLWriter writer = new XMLWriter(new FileWriter(pomFile), format);
                writer.write(doc);
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    /**
     * ??()
     * @param templateFilePath ???
     * @param destFilePath
     */
    private static void createFileByTemplate(String templateFilePath, File destFile) {
        URL url = ParentSkeleton.class.getClassLoader().getResource(templateFilePath);
        try {
            FileUtils.copyURLToFile(url, destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}