mt.com.southedge.jclockwork.plugin.codegenerator.assemblers.ClassAssembler.java Source code

Java tutorial

Introduction

Here is the source code for mt.com.southedge.jclockwork.plugin.codegenerator.assemblers.ClassAssembler.java

Source

package mt.com.southedge.jclockwork.plugin.codegenerator.assemblers;

/* ******************************************************************************
 * Copyright (c) 2011 SouthEdge Software and Consultancy.  
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Carl Frendo - initial design and implementation
 * ******************************************************************************/

import mt.com.southedge.jclockwork.commons.exceptions.io.FailedToOutputGeneratedCodeException;
import mt.com.southedge.jclockwork.commons.managers.ImportsManager;
import mt.com.southedge.jclockwork.commons.models.IGeneratorModel;

import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;

public class ClassAssembler {

    private ICompilationUnit unit;

    public ClassAssembler(ICompilationUnit unit) {
        this.unit = unit;
    }

    public String assemble(final String methods, final ImportsManager imports)
            throws FailedToOutputGeneratedCodeException {
        if (unit == null)
            throw new FailedToOutputGeneratedCodeException("Compilation unit editor is null");

        StringBuffer sb = new StringBuffer();

        try {

            getPackage(sb);
            getImports(sb, imports);

            getType(sb);
            getStaticCode(sb);

        } catch (JavaModelException e) {
            throw new FailedToOutputGeneratedCodeException("Malformed Java Class");
        }

        sb.append(methods);

        getFinal(sb);

        return indent(sb);
    }

    private StringBuffer getPackage(StringBuffer sb) throws JavaModelException {

        IPackageDeclaration[] packageDecs = unit.getPackageDeclarations();
        for (IPackageDeclaration packageDec : packageDecs) {
            sb.append(packageDec.getSource());
        }

        sb.append(IGeneratorModel.NEWLINE);
        return sb;
    }

    private StringBuffer getImports(StringBuffer sb, ImportsManager imports) throws JavaModelException {

        IImportDeclaration[] importDecs = unit.getImports();
        sb.append(IGeneratorModel.NEWLINE);

        for (IImportDeclaration importDec : importDecs) {
            String strImport = importDec.getElementName();
            if (!imports.getImports().contains(strImport)) {
                sb.append(IGeneratorModel.IMPORT).append(IGeneratorModel.WHITESPACE);
                sb.append(strImport).append(IGeneratorModel.SEMICOLON).append(IGeneratorModel.NEWLINE);
            }
        }
        sb.append(imports.generate()).append(IGeneratorModel.NEWLINE);

        return sb;
    }

    private StringBuffer getType(StringBuffer sb) throws JavaModelException {

        IType[] types = unit.getAllTypes();
        for (IType type : types) {

            sb.append(IGeneratorModel.PUBLIC).append(IGeneratorModel.WHITESPACE).append(IGeneratorModel.CLASS);
            sb.append(IGeneratorModel.WHITESPACE).append(type.getElementName());
            sb.append(IGeneratorModel.WHITESPACE);

            String superClass = type.getSuperclassName();
            if (superClass != null && !superClass.isEmpty()) {
                sb.append(IGeneratorModel.EXTENDS).append(IGeneratorModel.WHITESPACE);
                sb.append(superClass).append(IGeneratorModel.WHITESPACE);
            }

            String[] interfaces = type.getSuperInterfaceNames();
            if (interfaces.length > 0) {
                sb.append(IGeneratorModel.IMPLEMENTS).append(IGeneratorModel.WHITESPACE);
                for (int i = 0; i < interfaces.length; i++) {
                    sb.append(interfaces[i]);
                    if ((i + 1) != interfaces.length) {
                        sb.append(IGeneratorModel.COMMA);
                    }
                    sb.append(IGeneratorModel.WHITESPACE);
                }
            }
            sb.append(IGeneratorModel.OPENCURLYBRACE).append(IGeneratorModel.NEWLINE);
        }
        return sb;
    }

    private StringBuffer getStaticCode(StringBuffer sb) throws JavaModelException {
        sb.append(IGeneratorModel.NEWLINE);

        IType[] types = unit.getAllTypes();
        for (IType type : types) {

            IMethod[] methods = type.getMethods();
            for (IMethod method : methods) {

                String javadoc = method.getSource();

                if (!javadoc.contains(IGeneratorModel.GENCOMMENT)) {
                    sb.append(javadoc).append(IGeneratorModel.NEWLINE).append(IGeneratorModel.NEWLINE);
                }
            }
        }
        sb.append(IGeneratorModel.NEWLINE);

        return sb;
    }

    private StringBuffer getFinal(StringBuffer sb) {
        sb.append(IGeneratorModel.CLOSECURLYBRACE).append(IGeneratorModel.NEWLINE);
        return sb;
    }

    private String indent(StringBuffer sb) {

        return sb.toString();
    }
}