Java tutorial
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(); } }