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

org.databene.edifatto.template.JavaSourceCreator Maven / Gradle / Ivy

Go to download

'Edifatto' is an open source software library for parsing, generating and verifying EDIFACT and X12 documents written by Volker Bergmann.

There is a newer version: 3.0.1
Show newest version
/*
 * Copyright (C) 2013-2015 Volker Bergmann ([email protected]).
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.databene.edifatto.template;

import java.io.File;
import java.io.IOException;
import java.util.Locale;

import org.databene.commons.Context;
import org.databene.commons.IOUtil;
import org.databene.commons.StringUtil;
import org.databene.commons.context.DefaultContext;
import org.databene.formats.script.Script;
import org.databene.formats.script.freemarker.FreeMarkerScriptFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Creates Java source files based on FreeMarker templates.
 * Created: 25.07.2014 18:37:12
 * @since 2.0.0
 * @author Volker Bergmann
 */

public class JavaSourceCreator {

	private static final Logger LOGGER = LoggerFactory.getLogger(JavaSourceCreator.class);
	
	private String templateUri;
	private File targetFolder;
	private int tabSize;

	public JavaSourceCreator() {
		this.templateUri = "org/databene/edifatto/template/javaclass.ftl";
		this.targetFolder = new File(".");
		this.tabSize = -1;
	}

	public void setTemplateUri(String templateUri) {
		this.templateUri = templateUri;
	}

	public void setTargetFolder(File targetFolder) {
		this.targetFolder = targetFolder;
	}

	public void setTabSize(int tabSize) {
		this.tabSize = tabSize;
	}

	public File createFile(ClassInfo classInfo) throws IOException {
		LOGGER.debug("Creating Java class " + classInfo.getSimpleName());
		classInfo.normalize();
		FreeMarkerScriptFactory factory = new FreeMarkerScriptFactory(Locale.ENGLISH);
		Script script = factory.parseText(IOUtil.getContentOfURI(templateUri));
		Context context = new DefaultContext();
		context.set("classInfo", classInfo);
		// format file
		String sourceCode = String.valueOf(script.evaluate(context));
		if (tabSize >= 0)
			sourceCode = sourceCode.replace("\t", "                    ".substring(0, tabSize));
		// save file
		File folder = targetFolder;
		if (!StringUtil.isEmpty(classInfo.getJavaPackage()))
			folder = new File(folder, classInfo.getJavaPackage().replace('.', '/'));
		folder.mkdirs();
		File file = new File(folder, classInfo.getSimpleName() + ".java");
		IOUtil.writeTextFile(file.getCanonicalPath(), sourceCode);
		return file;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy