1 package org.netbeans.bluej; 2 3 import java.io.BufferedReader ; 4 import java.io.File ; 5 import java.io.IOException ; 6 import java.io.InputStream ; 7 import java.io.InputStreamReader ; 8 import java.io.OutputStream ; 9 import java.io.OutputStreamWriter ; 10 import java.io.Writer ; 11 import java.util.Iterator ; 12 import org.netbeans.api.java.platform.JavaPlatformManager; 13 import org.netbeans.api.project.Project; 14 import org.netbeans.spi.project.ProjectFactory; 15 import org.netbeans.spi.project.ProjectState; 16 import org.netbeans.spi.project.support.ant.PropertyUtils; 17 import org.openide.filesystems.FileLock; 18 import org.openide.filesystems.FileObject; 19 import org.openide.filesystems.FileUtil; 20 import org.openide.util.Lookup; 21 22 26 public class BluejProjectFactory implements ProjectFactory { 27 28 public BluejProjectFactory() { 29 } 30 31 public boolean isProject(FileObject fileObject) { 32 File projectDir = FileUtil.toFile(fileObject); 33 if (projectDir == null) { 34 return false; 35 } 36 if (fileObject.getFileObject("nbproject") != null && fileObject.getFileObject("build.xml") != null) { return false; 38 } 39 File project = new File (projectDir, "bluej.pkg"); File parentProject = new File (projectDir.getParentFile(), "bluej.pkg"); return project.exists() && project.isFile() && 42 (!parentProject.exists()) && !"nbproject".equalsIgnoreCase(projectDir.getName()); } 44 45 public Project loadProject(FileObject fileObject, ProjectState projectState) throws IOException { 46 if (FileUtil.toFile(fileObject) == null) { 47 return null; 48 } 49 if ("nbproject".equalsIgnoreCase(fileObject.getName())) { return null; 51 } 52 FileObject projectFile = fileObject.getFileObject("bluej.pkg"); if (projectFile == null || !projectFile.isData()) { 54 return null; 55 } 56 File projectDiskFile = FileUtil.toFile(projectFile); 57 if (projectDiskFile == null) { 58 return null; 59 } 60 if (fileObject.getParent().getFileObject("bluej.pkg") != null) { return null; 62 } 63 64 String projectName = removeSpaces(fileObject.getName()); 65 66 if (fileObject.getFileObject("nbproject") == null) { String specVersion = JavaPlatformManager.getDefault().getDefaultPlatform().getSpecification().getVersion().toString(); 68 FileObject nbfolder = fileObject.createFolder("nbproject"); InputStream str = BluejProjectFactory.class.getResourceAsStream("resources/build.xml"); FileObject buildxml = fileObject.createData("build.xml"); FileLock lock = buildxml.lock(); 72 OutputStream out = buildxml.getOutputStream(lock); 73 copyAndReplaceInStream(str, out, "@PROJECTNAME@", projectName); out.close(); 75 lock.releaseLock(); 76 str = BluejProjectFactory.class.getResourceAsStream("resources/build-impl.xml"); FileObject buildimplxml = nbfolder.createData("build-impl.xml"); lock = buildimplxml.lock(); 79 out = buildimplxml.getOutputStream(lock); 80 copyAndReplaceInStream(str, out, "@PROJECTNAME@", projectName); out.close(); 82 lock.releaseLock(); 83 str = BluejProjectFactory.class.getResourceAsStream("resources/project.properties"); FileObject props = nbfolder.createData("project.properties"); lock = props.lock(); 86 out = props.getOutputStream(lock); 87 copyAndReplaceInStream(str, out, 88 new String [] { "@PROJECTNAME@", "@JAVAVERSION@" }, 89 new String [] { PropertyUtils.getUsablePropertyName(projectName), specVersion} ); out.close(); 91 lock.releaseLock(); 92 str = BluejProjectFactory.class.getResourceAsStream("resources/project.xml"); FileObject projxml = nbfolder.createData("project.xml"); lock = projxml.lock(); 95 out = projxml.getOutputStream(lock); 96 FileUtil.copy(str, out); 97 out.close(); 98 lock.releaseLock(); 99 Lookup.Result res = Lookup.getDefault().lookup(new Lookup.Template(ProjectFactory.class)); 100 Iterator it = res.allInstances().iterator(); 101 try { 102 Thread.sleep(1000); 103 } catch (InterruptedException ex) { 104 ex.printStackTrace(); 105 } 106 while (it.hasNext()) { 107 ProjectFactory elem = (ProjectFactory) it.next(); 108 if (elem.getClass().getName().indexOf("AntBasedProjectFactorySingleton") != -1) { return elem.loadProject(fileObject, projectState); 110 } 111 } 112 } 113 return null; 114 } 115 116 public void saveProject(Project project) throws IOException { 117 Lookup.Result res = Lookup.getDefault().lookup(new Lookup.Template(ProjectFactory.class)); 119 Iterator it = res.allInstances().iterator(); 120 while (it.hasNext()) { 121 ProjectFactory elem = (ProjectFactory) it.next(); 122 if (elem.getClass().getName().indexOf("AntBasedProjectFactorySingleton") != -1) { elem.saveProject(project); 124 } 125 } 126 } 127 private void copyAndReplaceInStream(InputStream is, OutputStream os, 128 String ptrn, String rpl) throws IOException { 129 copyAndReplaceInStream(is, os, new String [] {ptrn}, new String [] {rpl}); 130 } 131 132 private void copyAndReplaceInStream(InputStream is, OutputStream os, 133 String [] ptrn, String [] rpl) throws IOException { 134 String sep = System.getProperty("line.separator"); BufferedReader br = new BufferedReader (new InputStreamReader (is, "UTF-8")); 136 Writer writer = new OutputStreamWriter (os, "UTF-8"); 137 String line = br.readLine(); 138 while (line != null) { 139 if (line.indexOf('@') != -1) { 140 for (int i = 0; i < ptrn.length; i++) { 141 line = line.replaceAll(ptrn[i], rpl[i]); 142 } 143 } 144 writer.write(line + sep); 145 line = br.readLine(); 146 } 147 writer.flush(); 148 } 149 150 public static String removeSpaces(String s) { 151 int si = s.indexOf(" "); if (si != -1) { 153 return s.substring(0, si) + removeSpaces(s.substring(si + 1)); 154 } else { 155 return s; 156 } 157 } 158 159 } 160 | Popular Tags |