package org.archstudio.myxgen.jet.codegen;
import java.io.ByteArrayInputStream;
import org.archstudio.myxgen.MyxGenBrick;
import org.archstudio.myxgen.eclipse.extension.MyxGenWorkspaceExtensions;
import org.archstudio.utils.eclipse.jdt.CodeGeneration;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
public class MyxCodeGenerator {
private final IJavaProject javaProject;
public MyxCodeGenerator(IJavaProject javaProject) {
this.javaProject = javaProject;
}
public void generateCode() {
for (MyxGenBrick brick : MyxGenWorkspaceExtensions.getMyxGenBricks(javaProject.getProject())) {
try {
generateCode(brick);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
private void generateCode(MyxGenBrick brick) throws CoreException {
IFile stubFile =
javaProject.getProject().getFile("src/" + brick.getStubClassName().replace('.', '/') + ".java");
String stubSource = MyxCompStubBuilder.generate(brick);
if (stubFile.exists()) {
stubFile.setContents(new ByteArrayInputStream(stubSource.getBytes()), true, true,
new NullProgressMonitor());
}
else {
IContainer parent = stubFile.getParent();
if (!parent.exists() && parent instanceof IFolder) {
((IFolder) parent).create(true, true, new NullProgressMonitor());
}
stubFile.create(new ByteArrayInputStream(stubSource.getBytes()), true, new NullProgressMonitor());
}
CodeGeneration.formatCode(stubFile);
IFile mainFile = javaProject.getProject().getFile("src/" + brick.getClassName().replace('.', '/') + ".java");
if (!mainFile.exists()) {
String mainSource = MyxCompBuilder.generate(brick);
mainFile.create(new ByteArrayInputStream(mainSource.getBytes()), true, new NullProgressMonitor());
CodeGeneration.formatCode(mainFile);
}
}
}