package org.reuseware.air.comogen.output; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.LinkedList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.reuseware.air.comogen.util.MethodStruct; public abstract class OutputGeneratorBase implements IOutputGenerator { public void setContent(String value, IFile file) throws IOException, CoreException{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); PrintWriter writer = new PrintWriter(outStream); writer.print(value); writer.flush(); writer.close(); outStream.flush(); outStream.close(); InputStream in = new ByteArrayInputStream(outStream.toByteArray()); setContent(in,file); } public static void setContent(InputStream value, IFile target) throws CoreException { if (target.exists()) { target.setContents(value, false, false, new NullProgressMonitor()); } else { LinkedList<IResource> stack = new LinkedList<IResource>(); if (!target.getParent().exists()) { stack.addFirst(target.getParent()); while (!stack.isEmpty()) { if (!stack.peek().getParent().exists()) stack.addFirst(stack.peek().getParent()); else ((IFolder) stack.removeFirst()).create(false, false, new NullProgressMonitor()); } } target.create(value, false, new NullProgressMonitor()); } } public List<String> extractSignatureStrings(List<MethodStruct> composerSignatures){ List<String> composerNames = new LinkedList<String>(); for (MethodStruct struct: composerSignatures) { composerNames.add(struct.getOrigName()); } return composerNames; } public IClasspathEntry getFirstSourceEntry(IJavaProject project) throws CoreException{ IClasspathEntry[] cpe = project.getRawClasspath(); IClasspathEntry sourcePath = null; for(int i=0;i<cpe.length;i++){ IClasspathEntry current = cpe[i]; if(current.getEntryKind()==IClasspathEntry.CPE_SOURCE){ sourcePath = cpe[i]; break; } } return sourcePath; } public IPackageFragment createBasePackage(IJavaProject project, String packageName) throws CoreException{ IClasspathEntry cpe = this.getFirstSourceEntry(project); IPackageFragmentRoot rootPackage = project.findPackageFragmentRoot(cpe.getPath()); IPackageFragment createdPackage = rootPackage.createPackageFragment(packageName,false,new NullProgressMonitor()); return createdPackage; } }