KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > bluej > BluejProjectFactory


1 package org.netbeans.bluej;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.File JavaDoc;
5 import java.io.IOException JavaDoc;
6 import java.io.InputStream JavaDoc;
7 import java.io.InputStreamReader JavaDoc;
8 import java.io.OutputStream JavaDoc;
9 import java.io.OutputStreamWriter JavaDoc;
10 import java.io.Writer JavaDoc;
11 import java.util.Iterator JavaDoc;
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 /**
23  * factory of bluej projects, only applied when netbeans related files are not created..
24  * @author Milos Kleint (mkleint@netbeans.org)
25  */

26 public class BluejProjectFactory implements ProjectFactory {
27     /** Creates a new instance of BluejProjectFactory */
28     public BluejProjectFactory() {
29     }
30     
31     public boolean isProject(FileObject fileObject) {
32         File JavaDoc projectDir = FileUtil.toFile(fileObject);
33         if (projectDir == null) {
34             return false;
35         }
36         if (fileObject.getFileObject("nbproject") != null && fileObject.getFileObject("build.xml") != null) { // NOI18N
37
return false;
38         }
39         File JavaDoc project = new File JavaDoc(projectDir, "bluej.pkg"); // NOI18N
40
File JavaDoc parentProject = new File JavaDoc(projectDir.getParentFile(), "bluej.pkg"); // NOI18N
41
return project.exists() && project.isFile() &&
42                 (!parentProject.exists()) && !"nbproject".equalsIgnoreCase(projectDir.getName()); // NOI18N
43
}
44     
45     public Project loadProject(FileObject fileObject, ProjectState projectState) throws IOException JavaDoc {
46         if (FileUtil.toFile(fileObject) == null) {
47             return null;
48         }
49         if ("nbproject".equalsIgnoreCase(fileObject.getName())) { //NOI18N
50
return null;
51         }
52         FileObject projectFile = fileObject.getFileObject("bluej.pkg"); // NOI18N
53
if (projectFile == null || !projectFile.isData()) {
54             return null;
55         }
56         File JavaDoc projectDiskFile = FileUtil.toFile(projectFile);
57         if (projectDiskFile == null) {
58             return null;
59         }
60         if (fileObject.getParent().getFileObject("bluej.pkg") != null) { // NOI18N
61
return null;
62         }
63         
64         String JavaDoc projectName = removeSpaces(fileObject.getName());
65         
66         if (fileObject.getFileObject("nbproject") == null) { // NOI18N
67
String JavaDoc specVersion = JavaPlatformManager.getDefault().getDefaultPlatform().getSpecification().getVersion().toString();
68             FileObject nbfolder = fileObject.createFolder("nbproject"); // NOI18N
69
InputStream JavaDoc str = BluejProjectFactory.class.getResourceAsStream("resources/build.xml"); // NOI18N
70
FileObject buildxml = fileObject.createData("build.xml"); // NOI18N
71
FileLock lock = buildxml.lock();
72             OutputStream JavaDoc out = buildxml.getOutputStream(lock);
73             copyAndReplaceInStream(str, out, "@PROJECTNAME@", projectName); // NOI18N
74
out.close();
75             lock.releaseLock();
76             str = BluejProjectFactory.class.getResourceAsStream("resources/build-impl.xml"); // NOI18N
77
FileObject buildimplxml = nbfolder.createData("build-impl.xml"); // NOI18N
78
lock = buildimplxml.lock();
79             out = buildimplxml.getOutputStream(lock);
80             copyAndReplaceInStream(str, out, "@PROJECTNAME@", projectName); // NOI18N
81
out.close();
82             lock.releaseLock();
83             str = BluejProjectFactory.class.getResourceAsStream("resources/project.properties"); // NOI18N
84
FileObject props = nbfolder.createData("project.properties"); // NOI18N
85
lock = props.lock();
86             out = props.getOutputStream(lock);
87             copyAndReplaceInStream(str, out,
88                 new String JavaDoc[] { "@PROJECTNAME@", "@JAVAVERSION@" },
89                 new String JavaDoc[] { PropertyUtils.getUsablePropertyName(projectName), specVersion} ); // NOI18N
90
out.close();
91             lock.releaseLock();
92             str = BluejProjectFactory.class.getResourceAsStream("resources/project.xml"); // NOI18N
93
FileObject projxml = nbfolder.createData("project.xml"); // NOI18N
94
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 JavaDoc it = res.allInstances().iterator();
101             try {
102                 Thread.sleep(1000);
103             } catch (InterruptedException JavaDoc ex) {
104                 ex.printStackTrace();
105             }
106             while (it.hasNext()) {
107                 ProjectFactory elem = (ProjectFactory) it.next();
108                 if (elem.getClass().getName().indexOf("AntBasedProjectFactorySingleton") != -1) { // NOI18N
109
return elem.loadProject(fileObject, projectState);
110                 }
111             }
112         }
113         return null;
114     }
115     
116     public void saveProject(Project project) throws IOException JavaDoc {
117         // when creating a project through this factory, route the saving to the ant based factory.
118
Lookup.Result res = Lookup.getDefault().lookup(new Lookup.Template(ProjectFactory.class));
119         Iterator JavaDoc it = res.allInstances().iterator();
120         while (it.hasNext()) {
121             ProjectFactory elem = (ProjectFactory) it.next();
122             if (elem.getClass().getName().indexOf("AntBasedProjectFactorySingleton") != -1) { // NOI18N
123
elem.saveProject(project);
124             }
125         }
126     }
127     private void copyAndReplaceInStream(InputStream JavaDoc is, OutputStream JavaDoc os,
128             String JavaDoc ptrn, String JavaDoc rpl) throws IOException JavaDoc {
129         copyAndReplaceInStream(is, os, new String JavaDoc[] {ptrn}, new String JavaDoc[] {rpl});
130     }
131     
132     private void copyAndReplaceInStream(InputStream JavaDoc is, OutputStream JavaDoc os,
133             String JavaDoc[] ptrn, String JavaDoc[] rpl) throws IOException JavaDoc {
134         String JavaDoc sep = System.getProperty("line.separator"); // NOI18N
135
BufferedReader JavaDoc br = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(is, "UTF-8"));
136         Writer JavaDoc writer = new OutputStreamWriter JavaDoc(os, "UTF-8");
137         String JavaDoc 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 JavaDoc removeSpaces(String JavaDoc s) {
151         int si = s.indexOf(" "); // NOI18N
152
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