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