Code Search for Developers
 
 
  

TeamCreator.java from Compiere Monitor at Krugle


Show TeamCreator.java syntax highlighted

package builder;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;

import de.edu.tuberlin.compiereMonitor.aspect.AspectBuilder;
import de.edu.tuberlin.compiereMonitor.exception.CMException;
import de.edu.tuberlin.compiereMonitor.exception.CMExceptionAspectBuildFailed;
import de.edu.tuberlin.compiereMonitor.exception.CMExceptionCreationFailed;
import de.edu.tuberlin.compiereMonitor.model.MAspectTeamClass;
import de.edu.tuberlin.compiereMonitor.model.TableAspectAttribute;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleBindMapping;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleBinding;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleClass;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleClassImpl;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleMethod;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleMethodParameter;
import de.edu.tuberlin.compiereMonitor.model.TableAspectRoleVarAccess;
import de.edu.tuberlin.compiereMonitor.model.TableAspectTeamClass;
import de.edu.tuberlin.compiereMonitor.model.TableAspectTeamMethod;
import de.edu.tuberlin.compiereMonitor.model.TableAspectTeamMethodParameter;
import de.edu.tuberlin.compiereMonitor.model.TableConfigAttritbuteVisibility;
import de.edu.tuberlin.compiereMonitor.model.TableConfigBindingType;
import de.edu.tuberlin.compiereMonitor.model.TableConfigDatatype;
import de.edu.tuberlin.compiereMonitor.model.TableConfigJarArchives;
import de.edu.tuberlin.compiereMonitor.model.TableConfigMethodVisibility;
import de.edu.tuberlin.compiereMonitor.model.Table.Row;
import de.edu.tuberlin.compiereMonitor.tools.GUITools;
import de.edu.tuberlin.compiereMonitor.tools.LocalCache;
import de.edu.tuberlin.compiereMonitor.tools.SystemTools;

public class TeamCreator {

	private static String otHome = System.getProperty("OT_DIR");

	private static String builderHome = System.getProperty("OT_BUILDER");

	private static String srcHome = builderHome + "/src/";

	private static String classpath = System.getProperty("java.class.path");

	// the list of already compiled classes, stored as: Integer(teamclassPKey)
	private static ArrayList compiled = new ArrayList();

	/**
	 * Creates the teamclass-files
	 */
	private static void createTeamclasses() {
		System.out.println("Creating teamclasses...");

		// check if builder- and src-folder exists
		File builderDir = new File(builderHome);
		if (!builderDir.exists())
			builderDir.mkdir();

		File srcDir = new File(srcHome);
		if (!srcDir.exists())
			srcDir.mkdir();

		compiled.clear();

		// clean up source-folder
		String[] subElements = srcDir.list();
		File tmp;
		for (int i = 0; i < subElements.length; i++) {
			tmp = new File(srcDir.getPath() + File.separator + subElements[i]);
			if (tmp.exists())
				tmp.delete();
		}

		Row[] teamRows = MAspectTeamClass.getTable().getAllRows();
		String configTeams = "";
		for (int i = 0; i < teamRows.length; i++) {
			try {

				// creating & compiling
				compile(teamRows[i].getPrimaryKey());

				try {
					// append the team to the config-list of teams if its not
					// abstract
					if (!MAspectTeamClass.isAbstract(teamRows[i])) {
						String teamName = MAspectTeamClass.getName(teamRows[i]);
						if (!configTeams.equals(""))
							configTeams += "\n";
						configTeams += teamName;
					}

				} catch (CMException e) {
					e.addContextInfo("Unable to build aspectteams.");
					GUITools.showException(e);
				}

			} catch (CMExceptionAspectBuildFailed exc) {
				exc.addContextInfo("Unable to compile teamclass of teamrow <"
						+ teamRows[i].getPrimaryKey() + ">.");
				GUITools.showException(exc);
			}
		}

		// write config-file
		System.out.println("Writing configfile: " + otHome + "/OT-Teams.cfg");

		try {
			SystemTools.saveFile(new File(otHome + "/OT-Teams.cfg"),
					configTeams);

		} catch (IOException e2) {
			GUITools.showException(new CMExceptionAspectBuildFailed(
					"Unable to create aspect-config-file."));
		}
	}

	/**
	 * creates and compiles the teamclass-source
	 * 
	 * @param teamClassPKey
	 *            The PKey of the teamclass to create
	 * @throws CMExceptionAspectBuildFailed
	 *             If the compile failed
	 */
	private static void compile(int teamClassPKey)
			throws CMExceptionAspectBuildFailed {

		// check if class was compiled before
		if (compiled.contains(new Integer(teamClassPKey))) {
			return;
		}

		try {
			String teamName = MAspectTeamClass.getName(teamClassPKey);
			String filepath = srcHome + "/" + teamName + ".java";
			String teamCode = AspectBuilder.createTeam(teamClassPKey);

			File teamFile = new File(filepath);

			System.out.println("Creating teamsource: " + teamName + ".java");

			SystemTools.saveFile(teamFile, teamCode);

			try {
				int superTeamPKey = MAspectTeamClass.getExtendsTeamClass(
						teamClassPKey).getPrimaryKey();
				// superclass set -> first compile that one
				compile(superTeamPKey);

			} catch (CMException e1) {
				// no superclass set
			}

			// the output string for error-messages
			StringWriter sWriter = new StringWriter();
			PrintWriter pOutput = new PrintWriter(sWriter);

			// compiling the classes from top to bottom
			System.out.print("Compiling...");
			boolean cOk = false;

			if (teamFile.exists()) {

				compiled.add(new Integer(teamClassPKey));

				cOk = org.eclipse.jdt.internal.compiler.batch.Main.compile("-nowarn -classpath " + srcHome + File.pathSeparator + classpath + " " + filepath, pOutput, pOutput);
				if (cOk)
					System.out.println("done");
				else {
					System.out.println("failed. (Unable to compile <" + filepath + ">. Check for Java-errors.)");

					throw new CMExceptionAspectBuildFailed(
							"Unable to compile teamclass <" + teamName
									+ "> :\n\t"
									+ sWriter.toString().replace("\n", "\n\t"));
				}
			} else {
				System.out.println("failed. (Unable to compile <" + filepath
						+ ">. The file was not found.)");
				throw new CMExceptionAspectBuildFailed(
						"Unable to compile teamclass <" + teamName
								+ ">. File dont exists.");
			}

		} catch (Exception e) {
			CMExceptionAspectBuildFailed exc = new CMExceptionAspectBuildFailed(
					"Unable to build teamclass.");
			exc.addContextInfo(e.getMessage());
			throw exc;
		}
	}

	/**
	 * Builds the jar-file
	 */
	private static void buildJar() {

		// compile java-files and build jar
		try {
			System.out.println("Building Teamclass-JAR-Archive");
			
			try {
				
				// Create the manifest.
				final Manifest man = new Manifest();
				man.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");

				final JarOutputStream jos = new JarOutputStream(new FileOutputStream(otHome + "/OT-Team.jar"), man);

				File srcFolder = new File(srcHome); 
				File[] srcFiles = srcFolder.listFiles();
				
				byte[] buf = new byte[1024];
				FileInputStream fis;
				for (int i=0; i < srcFiles.length; i++) {
					fis = new FileInputStream(srcFiles[i]);
					jos.putNextEntry(new JarEntry(srcFiles[i].getName().replace(File.separatorChar, '/')));

					int len;
					while ((len = fis.read(buf)) >= 0) {
						jos.write(buf, 0, len);
					}
					
					fis.close();
				}
				
				jos.flush();
				jos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}

		} catch (Exception exc) {
			GUITools.showException(new CMExceptionCreationFailed(
					"Unable to build jar-archive.\n" + exc.getMessage()));
		}
	}

	/**
	 * The Main-entrance to the builder
	 * 
	 * @param args
	 *            The arguments
	 */
	public static void main(String[] args) {

		System.out.println("Initialize Compiere Databasemanager...\n");

		org.compiere.Compiere.startup(true);

		System.out.print("\nLoading CompiereMonitor-tables...\n");

		// DBHelper.getAllTables();

		TableAspectTeamClass.getTable();
		TableAspectTeamMethod.getTable();
		TableAspectTeamMethodParameter.getTable();
		TableAspectRoleClass.getTable();
		TableAspectRoleClassImpl.getTable();
		TableAspectRoleBinding.getTable();
		TableAspectRoleBindMapping.getTable();
		TableAspectRoleMethod.getTable();
		TableAspectRoleMethodParameter.getTable();
		TableAspectRoleVarAccess.getTable();
		TableAspectAttribute.getTable();

		TableConfigAttritbuteVisibility.getTable();
		TableConfigBindingType.getTable();
		TableConfigDatatype.getTable();
		TableConfigMethodVisibility.getTable();
		TableConfigJarArchives.getTable();

		createTeamclasses();
		buildJar();

		//wait till local-save-procedure ended
		while(LocalCache.isSaveRunning()) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {}
		}

	}
}




See more files for this project here

Compiere Monitor

This project extends the Open-Source ERP-System Compiere(R) with aspectorientation. Its using the aspectoriented language ObjectTeams/Java and was developed within a diploma-thesis at the Technical University Berlin, Germany.

Project homepage: http://sourceforge.net/projects/compieremonitor
Programming language(s): Java
License: gpl2

  TeamCreator.java