package org.azzyzt.jee.tools.project;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.azzyzt.jee.tools.common.Common;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
public class Project {
private String name;
protected Context context;
protected IProject p;
private boolean isNewlyCreated = false;
public Project() {
super();
}
public Project(String name, Context context)
throws CoreException
{
super();
this.context = context;
p = context.getRoot().getProject(name);
if (!p.exists()) {
isNewlyCreated = true;
IProjectDescription dsc = context.getWorkspace().newProjectDescription(name);
p.create(dsc, context.getSubMonitor());
}
p.open(context.getSubMonitor());
}
protected void addMarkerNature(String nature)
throws CoreException
{
if (p.hasNature(nature)) return;
IProjectDescription projectDescription = p.getDescription();
String[] natureIds = projectDescription.getNatureIds();
String[] newNatureIds = new String[natureIds.length + 1];
System.arraycopy(natureIds, 0, newNatureIds, 1, natureIds.length);
newNatureIds[0] = nature;
projectDescription.setNatureIds(newNatureIds);
p.setDescription(projectDescription, context.getSubMonitor());
}
protected Path createFolderPathIfNeeded(String folderName)
throws CoreException
{
Path path = new Path(folderName);
createFolderForPathIfNeeded(path);
return path;
}
protected IFolder createFolderForPathIfNeeded(Path path)
throws CoreException
{
IFolder f = p.getFolder(path);
if (!f.exists()) {
f.create(true, true, context.getSubMonitor());
}
return f;
}
protected URL copyFromUrlToFolder(IContainer folderPath, URL content, String filename)
throws IOException, CoreException
{
boolean fileExists = folderPath.exists(new Path(filename));
if (fileExists) {
// may be an old dev version
folderPath.findMember(filename).delete(true, getContext().getSubMonitor());
Common.getDefault().log("Old file "+filename+" deleted");
}
Common.getDefault().log("Copying "+content+" to "+filename);
InputStream in = content.openConnection().getInputStream();
IFile f = folderPath.getFile(new Path(filename));
f.create(in, true, getContext().getSubMonitor());
URL targetURL = f.getLocationURI().toURL();
return targetURL;
}
public void refresh()
throws CoreException
{
p.refreshLocal(IResource.DEPTH_INFINITE, context.getSubMonitor());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IProject getP() {
return p;
}
public void setP(IProject p) {
this.p = p;
}
public void setContext(Context context) {
this.context = context;
}
public Context getContext() {
return context;
}
public boolean isNewlyCreated() {
return isNewlyCreated;
}
}