Package org.digitalsoul.loom.core

Source Code of org.digitalsoul.loom.core.TemplateBuilder

package org.digitalsoul.loom.core;

import org.eclipse.core.resources.IFile;

import org.digitalsoul.loom.core.prefs.Preferences;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;

/**
* Class TemplateBuilder
*/
public class TemplateBuilder {

    /**
     * @param unit
     * @return
     */
    public IFile createTemplate(ICompilationUnit unit) {
        IFile fileToCreate = null;
        IFolder packageFolder = null;
        if (Preferences.isCreateTemplateInJavaFolder()) {
            packageFolder = (IFolder) unit.getParent().getResource();
        }
        else {
            IProject project = unit.getJavaProject().getProject();
            IFolder templateFolder = getTemplateFragmentRoot(project);
            packageFolder = createTemplatePackage(unit, templateFolder);
        }
        String filename = constructTemplateFilename(unit);
        String content = Preferences.getTemplateMarkup();
        try {
            fileToCreate = packageFolder.getFile(filename);
            if (!fileToCreate.exists()) {
                fileToCreate.create(new ByteArrayInputStream(content.getBytes()), true, null);
            }
        }
        catch (CoreException e) {
            e.printStackTrace();
        }
        return fileToCreate;
    }
   
    /**
     * @param unit
     * @return
     */
    protected String constructTemplateFilename(ICompilationUnit unit) {
        return unit.getElementName().replace(".java", Preferences.getTemplateFileExtension());
    }

    /**
     * @param project
     * @return
     */
    protected IFolder getTemplateFragmentRoot(IProject project) {
        return project.getFolder(Preferences.getTemplateFragmentRootPath());
    }

    /**
     * @param unit
     * @return
     */
    protected String[] getPackageNames(ICompilationUnit unit) {

        List<String> packageNames = new ArrayList<String>();
        IJavaElement parent = unit.getParent();
        while (parent != null && parent.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
            String elementName = parent.getElementName();
            for (String packageName : elementName.split("\\.")) {
                packageNames.add(packageName);
            }
            parent = parent.getParent();
        }
        return packageNames.toArray(new String[packageNames.size()]);
    }

    /**
     * @param unit
     * @param templateFolder
     * @return
     */
    protected IFolder createTemplatePackage(ICompilationUnit unit, IFolder templateFolder) {

        String[] packageNames = getPackageNames(unit);
        IFolder folder = templateFolder;
        for (String packageName : packageNames) {
            folder = folder.getFolder(new Path(packageName));
            try {
                if (!folder.exists()) {
                    folder.create(true, true, null);
                }
            }
            catch (CoreException e) {
                e.printStackTrace();
            }
        }
        return folder;
    }
}
TOP

Related Classes of org.digitalsoul.loom.core.TemplateBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.