All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.asg.generator.AbstractGenerator Maven / Gradle / Ivy

There is a newer version: 4.3.0
Show newest version
package net.anotheria.asg.generator;

import java.util.ArrayList;
import java.util.List;

import net.anotheria.asg.generator.meta.MetaDocument;
import net.anotheria.asg.generator.meta.MetaProperty;
import net.anotheria.asg.generator.view.meta.MetaFieldElement;
import net.anotheria.asg.generator.view.meta.MetaViewElement;
import net.anotheria.asg.generator.view.meta.MultilingualFieldElement;
import net.anotheria.util.StringUtils;


/**
 * TODO please remind another to comment this class.
 *
 * @author another
 * @version $Id: $Id
 */
public class AbstractGenerator{

	/**
	 * Quotes a string with double quotes ".
	 *
	 * @param s a {@link java.lang.String} object.
	 * @return a {@link java.lang.String} object.
	 */
	protected String quote(String s){
		return "\""+s+"\"";
	}

	/**
	 * Quotes a string with double quotes ".
	 *
	 * @param s a {@link java.lang.StringBuilder} object.
	 * @return a {@link java.lang.String} object.
	 */
	protected String quote(StringBuilder s){
		return "\""+s.toString()+"\"";
	}
	
	/**
	 * Quotes the string representation of the integer parameter with double quotes ".
	 *
	 * @param a a int.
	 * @return a {@link java.lang.String} object.
	 */
	protected String quote(int a){
		return quote(""+a);
	}

	/**
	 * Returns a line with increased ident and the parameter string.
	 *
	 * @param s a {@link java.lang.String} object.
	 * @return a {@link java.lang.String} object.
	 */
	protected String writeIncreasedString(String s){
		increaseIdent();
		String ret = writeString(s);
		decreaseIdent();
		return ret;
	}
	
	/**
	 * Adds all string parameters after each other to the current target StringBuilder with an increased ident.
	 *
	 * @param strings a {@link java.lang.String} object.
	 */
	protected void appendIncreasedString(String... strings){
		appendIncreasedString(getCurrentJobContent(), strings);
	}
		
	/**
	 * Adds all string parameters after each other to the given target StringBuilder with an increased ident.
	 *
	 * @param target a {@link java.lang.StringBuilder} object.
	 * @param strings a {@link java.lang.String} object.
	 */
	protected void appendIncreasedString(StringBuilder target, String... strings){
		increaseIdent();
		appendString(target, strings);
		decreaseIdent();
	}

	/**
	 * 

writeIncreasedStatement.

* * @param s a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected String writeIncreasedStatement(String s){ return writeIncreasedString(s+";"); } /** *

appendIncreasedStatement.

* * @param strings a {@link java.lang.String} object. */ protected void appendIncreasedStatement(String... strings){ appendIncreasedStatement(getCurrentJobContent(), strings); } /** *

appendIncreasedStatement.

* * @param target a {@link java.lang.StringBuilder} object. * @param strings a {@link java.lang.String} object. */ protected void appendIncreasedStatement(StringBuilder target, String... strings){ increaseIdent(); appendStatement(target, strings); decreaseIdent(); } /** * Constant for line break. */ public static final String CRLF = "\n"; /** * Current ident. */ protected int ident = 0; /** * Writes a string in a new line with ident and linefeed. * * @param s string to write. * @deprecated use appendString instead * @return a {@link java.lang.String} object. */ protected String writeString(String s){ String ret = getIdent(); ret += s; ret += CRLF; return ret; } /** *

appendString.

* * @param strings a {@link java.lang.String} object. */ protected void appendString(String... strings){ appendString(getCurrentJobContent(), strings); } /** *

appendString.

* * @param target a {@link java.lang.StringBuilder} object. * @param strings a {@link java.lang.String} object. */ protected void appendString(StringBuilder target, String... strings){ appendIdent(target); for (String s : strings) target.append(s); target.append(CRLF); } //later replace with openTry /** *

openTry.

*/ protected void openTry(){ appendString("try {"); increaseIdent(); } /** *

appendCatch.

* * @param exceptionClazz a {@link java.lang.Class} object. */ protected void appendCatch(Class exceptionClazz){ ((GeneratedClass)getCurrentJob()).addImport(exceptionClazz); appendCatch(exceptionClazz.getName()); } /** *

appendCatch.

* * @param exceptionName a {@link java.lang.String} object. */ protected void appendCatch(String exceptionName){ decreaseIdent(); appendString("}catch(", exceptionName, " e){"); increaseIdent(); } /** *

openFun.

* * @param s a {@link java.lang.String} object. */ protected void openFun(String s){ if (!s.endsWith("{")) s+=" {"; appendString(s); increaseIdent(); } /** *

appendNullCheck.

* * @param aArgName a {@link java.lang.String} object. * @param aExceptionMessage a {@link java.lang.String} object. */ protected void appendNullCheck(String aArgName, String aExceptionMessage){ ((GeneratedClass)getCurrentJob()).addImport(IllegalArgumentException.class); appendString("if(" + aArgName + " == null)"); increaseIdent(); appendString("throw new IllegalArgumentException(\"" + aExceptionMessage + "\");"); decreaseIdent(); } /** * Writes a statement (';' at the end of the line). * * @param s statement to write. * @deprecated use appendStatement instead * @return a {@link java.lang.String} object. */ protected String writeStatement(String s){ String ret = getIdent(); ret += s; ret += ";"; ret += CRLF; return ret; } /** *

append.

* * @param strings a {@link java.lang.String} object. */ protected void append(String... strings){ StringBuilder target = getCurrentJobContent(); for (String s: strings) target.append(s); } /** *

appendStatement.

* * @param strings a {@link java.lang.String} object. */ protected void appendStatement(String... strings){ appendStatement(getCurrentJobContent(), strings); } /** *

appendStatement.

* * @param target a {@link java.lang.StringBuilder} object. * @param strings a {@link java.lang.String} object. */ protected void appendStatement(StringBuilder target, String... strings){ appendIdent(target); for (String s : strings) target.append(s); target.append(';'); target.append(CRLF); } private void appendIdent(StringBuilder target){ for (int i=0; iresetIdent.

*/ protected void resetIdent(){ ident = 0; } /** * Returns an empty line. * * @deprecated use emptyline. * @return a {@link java.lang.String} object. */ public static String writeEmptyline(){ return CRLF; } /** * Appends an empty line. */ public static void emptyline(){ getCurrentJobContent().append(CRLF); } /** *

emptyline.

* * @param b a {@link java.lang.StringBuilder} object. */ protected static void emptyline(StringBuilder b){ b.append(CRLF); } /** *

appendEmptyline.

* * @deprecated use emptyline instead */ protected static void appendEmptyline(){ emptyline(getCurrentJobContent()); } /** *

writeImport.

* * @deprecated use clazz.addImport(imp) instead * @param imp a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected String writeImport(String imp){ return writeString("import "+imp+";"); } /** *

appendImport.

* * @deprecated use clazz.addImport(imp) instead * @param imp a {@link java.lang.String} object. */ protected void appendImport(String imp){ appendString(getCurrentJobContent(), "import ", imp, ";"); } /** *

appendImport.

* * @deprecated use clazz.addImport(imp) instead * @param target a {@link java.lang.StringBuilder} object. * @param imp a {@link java.lang.String} object. */ protected void appendImport(StringBuilder target, String imp){ appendString(target, "import ", imp, ";"); } /** *

writeImport.

* * @deprecated use clazz.addImport(imp) instead * @param packagename a {@link java.lang.String} object. * @param classname a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected String writeImport(String packagename, String classname){ return writeString("import "+packagename+"."+classname+";"); } /** *

closeBlock.

* * @param b a {@link java.lang.StringBuilder} object. */ protected void closeBlock(StringBuilder b){ decreaseIdent(); b.append(writeString("}")); } /** *

closeBlock.

* * @deprecated use closeBlock(String) or closeBlockNEW instead * @return a {@link java.lang.String} object. */ @Deprecated protected String closeBlock(){ decreaseIdent(); String ret = writeString("}"); return ret; } /** *

closeBlockNEW.

*/ protected void closeBlockNEW(){ decreaseIdent(); appendString("}"); } /** * Generates ident decreasing and block closing. Appends message just after block * * @param message comment message to block closing. Usually block/method name. */ protected void closeBlock(String message){ decreaseIdent(); appendString("} //"+message); } /** *

appendMark.

* * @param markNumber a int. */ protected void appendMark(int markNumber){ // String ret = "/* ***** MARK "; // ret += markNumber; // ret += ", Generator: "+this.getClass().getName().substring(this.getClass().getName().lastIndexOf('.')+1); // ret += " ***** */"; // return emptyline()+writeString(ret)+emptyline(); } /** *

writeCommentLine.

* * @param commentline a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected String writeCommentLine(String commentline){ String[] tokens = StringUtils.tokenize(commentline, '\n'); if (tokens.length!=1) return writeComment(commentline); String ret = writeString("// "+commentline); return ret; } /** *

writeComment.

* * @param commentline a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected String writeComment(String commentline){ String[] tokens = StringUtils.tokenize(commentline, '\n'); String ret = ""; ret += writeString("/**"); for (int i=0; iappendCommentLine.

* * @param commentline a {@link java.lang.String} object. */ protected void appendCommentLine(String commentline){ appendCommentLine(getCurrentJobContent(), commentline); } /** *

appendGenerationPoint.

* * @param point a {@link java.lang.String} object. */ protected void appendGenerationPoint(String point){ appendCommentLine("Generated by: " + getClass() + "." + point); emptyline(); } /** *

appendCommentLine.

* * @param target a {@link java.lang.StringBuilder} object. * @param commentline a {@link java.lang.String} object. */ protected void appendCommentLine(StringBuilder target, String commentline){ String[] tokens = StringUtils.tokenize(commentline, '\n'); if (tokens.length!=1) appendComment(target, commentline); else appendString(target, "// ",commentline); } /** *

appendComment.

* * @param commentline a {@link java.lang.String} object. */ protected void appendComment(String commentline){ appendComment(getCurrentJobContent(), commentline); } /** *

appendComment.

* * @param target a {@link java.lang.StringBuilder} object. * @param commentline a {@link java.lang.String} object. */ protected void appendComment(StringBuilder target, String commentline){ String[] tokens = StringUtils.tokenize(commentline, '\n'); appendString(target, "/**"); for (int i=0; icreateMultilingualList.

* * @param source a {@link java.util.List} object. * @param doc a {@link net.anotheria.asg.generator.meta.MetaDocument} object. * @return a {@link java.util.List} object. */ protected static List createMultilingualList(List source, MetaDocument doc){ List ret = new ArrayList(); for (MetaViewElement e : source){ if (e instanceof MetaFieldElement){ MetaProperty p = doc.getField(e.getName()); if (p==null){ System.out.println("Can't find property for filed "+e.getName()+", skipped"); continue; } if (!p.isMultilingual() || !GeneratorDataRegistry.getInstance().getContext().areLanguagesSupported()){ ret.add(e); }else{ for (String l : GeneratorDataRegistry.getInstance().getContext().getLanguages()) ret.add(new MultilingualFieldElement(l,(MetaFieldElement)e)); } }else{ ret.add(e); } } return ret; } /** * Returns the language of the selected multilingual element or null if the element is not multilingual. * * @param element a {@link net.anotheria.asg.generator.view.meta.MetaViewElement} object. * @return a {@link java.lang.String} object. */ protected String getElementLanguage(MetaViewElement element){ return element instanceof MultilingualFieldElement ? ((MultilingualFieldElement)element).getLanguage() : null; } ///////// NEW GENERATION INTERFACE /////////// /** * Starts new job. Sets the parameter artefact as generated artefact. * * @param clazz a {@link net.anotheria.asg.generator.GeneratedArtefact} object. */ public final void startNewJob(GeneratedArtefact clazz){ GenerationJobManager.startNewJob(clazz); } /** *

getCurrentJobContent.

* * @return the content of the currently active job */ public static final StringBuilder getCurrentJobContent(){ return GenerationJobManager.getCurrentJob().getStringBuilder(); } /** *

getCurrentJob.

* * @return the artefact currently being generated */ public static final GeneratedArtefact getCurrentJob(){ return GenerationJobManager.getCurrentJob().getArtefact(); } /** * Starts the body of a class. Resets the ident. */ protected void startClassBody(){ ident = 1; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy