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

com.softicar.platform.common.code.java.JavaCodePrinter Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
package com.softicar.platform.common.code.java;

import com.softicar.platform.common.core.exceptions.SofticarIOException;
import com.softicar.platform.common.core.java.classes.name.JavaClassName;
import com.softicar.platform.common.core.java.packages.name.JavaPackageName;
import com.softicar.platform.common.core.logging.Log;
import com.softicar.platform.common.string.formatting.Formatting;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Set;

/**
 * Extended version of {@link CodePrinter} for Java.
 *
 * @author Oliver Richers
 */
public class JavaCodePrinter extends CodePrinter {

	private final JavaImports imports;

	public JavaCodePrinter() {

		this(new JavaImports());
	}

	public JavaCodePrinter(JavaImports imports) {

		this.imports = imports;
	}

	public String toString(JavaPackageName packageName) {

		StringBuilder builder = new StringBuilder();
		getFileHeader(packageName).writeOut(builder);
		writeOut(builder);
		return builder.toString();
	}

	// -------------------- WRITING -------------------- //

	public void writeOutToSourceFolder(JavaClassName className) {

		writeOut(new InternalSourceFolderFinder(getClass()).findSourceFolder(), className);
	}

	public void writeOut(File outputFolder, JavaClassName className) {

		File file = new File(outputFolder, className.getCanonicalName("/") + ".java");
		Log.finfo("Writing: %s", file.getPath());
		try (FileWriter writer = new FileWriter(file)) {
			prependFileHeader(className.getPackageName());
			writeOut(writer);
		} catch (IOException exception) {
			throw new SofticarIOException(exception);
		}
	}

	// -------------------- HEADER -------------------- //

	/**
	 * Generates and returns the file header for this Java class.
	 * 

* The file header contains with the package declaration followed by the * import statements. * * @param packageName * the package name to use * @return a {@link JavaCodePrinter} containing the generated header */ public JavaCodePrinter getFileHeader(JavaPackageName packageName) { // create file header JavaCodePrinter fileHeader = new JavaCodePrinter(); // package name fileHeader.println("package %s;", packageName.getName()); fileHeader.println(); // imports if (!imports.isEmpty()) { for (JavaClassName className: imports) { if (className.getPackageName().equals(packageName) && !className.isInnerClass()) { // skip redundant import } else { fileHeader.println("import %s;", className.getCanonicalName()); } } fileHeader.println(); } return fileHeader; } public void prependFileHeader(JavaPackageName packageName) { JavaCodePrinter fileHeader = getFileHeader(packageName); prependLines(fileHeader.getCodeLines()); } // -------------------- IMPORTS -------------------- // public Set getImports() { return imports.getImports(); } public void addImport(JavaClass javaClass) { imports.addImport(javaClass); } public void addImport(Class classImport) { imports.addImport(classImport); } public void addImport(JavaClassName className) { imports.addImport(className); } public void addImports(Iterable classNames) { imports.addImports(classNames); } public void addImportsFor(Set classNames, Set simpleNames) { imports.addImportsFor(classNames, simpleNames); } // -------------------- CLASS -------------------- // public void beginClass(String format, Object...args) { beginBlock(format, args); println(); } public void endClass() { endBlock(true); } // -------------------- METHOD -------------------- // public void beginMethod(String format, Object...args) { beginBlock(format, args); println(); } public void endMethod() { endBlock(true); } // -------------------- IF -------------------- // public void beginIf(String condition, Object...args) { beginBlock("if(%s)", Formatting.format(condition, args)); } public void beginElseIf(String condition, Object...args) { decrementIndentation(); println("} else if(%s) {", Formatting.format(condition, args)); incrementIndentation(); } public void beginElse() { decrementIndentation(); println("} else {"); incrementIndentation(); } // -------------------- SWITCH -------------------- // public void beginSwitch(String text) { println("%s {", text); } public void endSwitch() { println("}"); } public void beginCase(String text, Object...args) { println(text, args); incrementIndentation(); } public void endCase() { decrementIndentation(); } // -------------------- MISC -------------------- // public void printSeparator(String text) { println("// -------------------------------- %s -------------------------------- //", text); println(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy