Lines 48-69
Link Here
|
48 |
import java.util.LinkedHashSet; |
48 |
import java.util.LinkedHashSet; |
49 |
import java.util.Set; |
49 |
import java.util.Set; |
50 |
import org.netbeans.api.progress.ProgressHandle; |
50 |
import org.netbeans.api.progress.ProgressHandle; |
51 |
import org.netbeans.api.project.FileOwnerQuery; |
51 |
import org.netbeans.api.project.Project; |
52 |
import org.netbeans.api.project.ProjectManager; |
|
|
53 |
import org.netbeans.modules.web.client.samples.wizard.WizardConstants; |
52 |
import org.netbeans.modules.web.client.samples.wizard.WizardConstants; |
54 |
import org.netbeans.modules.web.client.samples.wizard.ui.OnlineSamplePanel; |
53 |
import org.netbeans.modules.web.client.samples.wizard.ui.OnlineSamplePanel; |
55 |
import org.netbeans.modules.web.clientproject.ClientSideProject; |
54 |
import org.netbeans.modules.web.clientproject.createprojectapi.ClientSideProjectGenerator; |
56 |
import org.netbeans.modules.web.clientproject.ClientSideProjectConstants; |
55 |
import org.netbeans.modules.web.clientproject.createprojectapi.CreateProjectProperties; |
57 |
import org.netbeans.modules.web.clientproject.ClientSideProjectType; |
|
|
58 |
import org.netbeans.modules.web.clientproject.sites.OnlineSites; |
59 |
import org.netbeans.modules.web.clientproject.sites.SiteHelper; |
60 |
import org.netbeans.modules.web.clientproject.spi.ClientProjectExtender; |
61 |
import org.netbeans.modules.web.clientproject.spi.SiteTemplateImplementation; |
62 |
import org.netbeans.modules.web.clientproject.spi.SiteTemplateImplementation.ProjectProperties; |
63 |
import org.netbeans.modules.web.clientproject.util.ClientSideProjectUtilities; |
64 |
import org.netbeans.spi.project.support.ant.AntProjectHelper; |
65 |
import org.netbeans.spi.project.support.ant.EditableProperties; |
66 |
import org.netbeans.spi.project.support.ant.ProjectGenerator; |
67 |
import org.netbeans.spi.project.ui.support.ProjectChooser; |
56 |
import org.netbeans.spi.project.ui.support.ProjectChooser; |
68 |
import org.openide.DialogDisplayer; |
57 |
import org.openide.DialogDisplayer; |
69 |
import org.openide.NotifyDescriptor; |
58 |
import org.openide.NotifyDescriptor; |
Lines 71-81
Link Here
|
71 |
import org.openide.WizardDescriptor.Panel; |
60 |
import org.openide.WizardDescriptor.Panel; |
72 |
import org.openide.filesystems.FileObject; |
61 |
import org.openide.filesystems.FileObject; |
73 |
import org.openide.filesystems.FileUtil; |
62 |
import org.openide.filesystems.FileUtil; |
74 |
import org.openide.util.Lookup; |
|
|
75 |
import org.openide.util.NbBundle; |
63 |
import org.openide.util.NbBundle; |
76 |
import org.w3c.dom.Document; |
|
|
77 |
import org.w3c.dom.Element; |
78 |
import org.w3c.dom.NodeList; |
79 |
|
64 |
|
80 |
/** |
65 |
/** |
81 |
* |
66 |
* |
Lines 89-111
Link Here
|
89 |
protected OnlineSampleWizardIterator() { |
74 |
protected OnlineSampleWizardIterator() { |
90 |
} |
75 |
} |
91 |
|
76 |
|
92 |
protected abstract SiteTemplateImplementation getSiteTemplate(); |
77 |
protected abstract OnlineSiteTemplate getSiteTemplate(); |
93 |
protected abstract String getProjectName(); |
78 |
protected abstract String getProjectName(); |
94 |
protected abstract String getProjectZipURL(); |
79 |
protected abstract String getProjectZipURL(); |
95 |
|
80 |
|
96 |
|
81 |
|
97 |
public static class OnlineSiteTemplate extends OnlineSites { |
|
|
98 |
|
99 |
public OnlineSiteTemplate(String id, String name, String url, String zipName) { |
100 |
this(id, name, "", url, zipName); // NOI18N |
101 |
} |
102 |
|
103 |
public OnlineSiteTemplate(String id, String name, String description, String url, String zipName) { |
104 |
super(id, name, description, url, new File(SiteHelper.getJsLibsDirectory(), zipName)); |
105 |
} |
106 |
} |
107 |
|
108 |
|
109 |
@Override |
82 |
@Override |
110 |
protected Panel[] createPanels(WizardDescriptor wizard) { |
83 |
protected Panel[] createPanels(WizardDescriptor wizard) { |
111 |
wizard.putProperty(WizardConstants.SAMPLE_PROJECT_NAME, getProjectName()); |
84 |
wizard.putProperty(WizardConstants.SAMPLE_PROJECT_NAME, getProjectName()); |
Lines 132-138
Link Here
|
132 |
*/ |
105 |
*/ |
133 |
|
106 |
|
134 |
@NbBundle.Messages({ |
107 |
@NbBundle.Messages({ |
135 |
"OnlineSampleWizardIterator.creatingProject=Creating project..." |
108 |
"OnlineSampleWizardIterator.creatingProject=Creating project...", |
|
|
109 |
"OnlineSampleWizardIterator.applyingTemplate=Applying template..." |
136 |
}) |
110 |
}) |
137 |
@Override |
111 |
@Override |
138 |
public Set instantiate(ProgressHandle handle) throws IOException { |
112 |
public Set instantiate(ProgressHandle handle) throws IOException { |
Lines 148-170
Link Here
|
148 |
} |
122 |
} |
149 |
final FileObject projectDirFO = FileUtil.toFileObject(projectDir); |
123 |
final FileObject projectDirFO = FileUtil.toFileObject(projectDir); |
150 |
|
124 |
|
151 |
AntProjectHelper projectHelper = ProjectGenerator.createProject(projectDirFO, ClientSideProjectType.TYPE); |
125 |
CreateProjectProperties props = new CreateProjectProperties(); |
152 |
setProjectName(projectHelper, name); |
126 |
props.setProjectDir(projectDirFO); |
|
|
127 |
props.setProjectName(name); |
128 |
props.setStartFile(getStartFile()); |
129 |
|
130 |
OnlineSiteTemplate siteTemplate = getSiteTemplate(); |
131 |
if (siteTemplate != null) { |
132 |
siteTemplate.configure(props); |
133 |
} |
134 |
|
135 |
Project project = ClientSideProjectGenerator.createProject(props); |
153 |
|
136 |
|
154 |
// Always open top dir as a project: |
137 |
// Always open top dir as a project: |
155 |
files.add(projectDirFO); |
138 |
files.add(projectDirFO); |
156 |
|
139 |
|
157 |
ClientSideProject project = (ClientSideProject) FileOwnerQuery.getOwner(projectHelper.getProjectDirectory()); |
140 |
if (siteTemplate != null) { |
|
|
141 |
handle.progress(Bundle.OnlineSampleWizardIterator_applyingTemplate()); |
142 |
applySiteTemplate(project.getProjectDirectory(), props, siteTemplate, handle); |
143 |
} |
158 |
|
144 |
|
159 |
// Setting start file |
145 |
FileObject siteRoot = project.getProjectDirectory().getFileObject(props.getSiteRootFolder()); |
160 |
EditableProperties properties = projectHelper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); |
146 |
assert siteRoot != null; |
161 |
properties.put(ClientSideProjectConstants.PROJECT_START_FILE, getStartFile()); |
147 |
FileObject startFile = siteRoot.getFileObject(props.getStartFile()); // NOI18N |
162 |
projectHelper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, properties); |
|
|
163 |
|
164 |
FileObject siteRoot = instantiate(handle, descriptor, project); |
165 |
|
166 |
// start file |
167 |
FileObject startFile = siteRoot.getFileObject(getStartFile()); // NOI18N |
168 |
if (startFile != null) { |
148 |
if (startFile != null) { |
169 |
files.add(startFile); |
149 |
files.add(startFile); |
170 |
} |
150 |
} |
Lines 182-268
Link Here
|
182 |
return "index.html"; |
162 |
return "index.html"; |
183 |
} |
163 |
} |
184 |
|
164 |
|
185 |
private void setProjectName(final AntProjectHelper projectHelper, final String name) { |
|
|
186 |
ProjectManager.mutex().writeAccess(new Runnable() { |
187 |
@Override |
188 |
public void run() { |
189 |
Element data = projectHelper.getPrimaryConfigurationData(true); |
190 |
Document document = data.getOwnerDocument(); |
191 |
NodeList nameList = data.getElementsByTagNameNS(ClientSideProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N |
192 |
Element nameElement; |
193 |
if (nameList.getLength() == 1) { |
194 |
nameElement = (Element) nameList.item(0); |
195 |
NodeList deadKids = nameElement.getChildNodes(); |
196 |
while (deadKids.getLength() > 0) { |
197 |
nameElement.removeChild(deadKids.item(0)); |
198 |
} |
199 |
} else { |
200 |
nameElement = document.createElementNS(ClientSideProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N |
201 |
data.insertBefore(nameElement, data.getChildNodes().item(0)); |
202 |
} |
203 |
nameElement.appendChild(document.createTextNode(name)); |
204 |
projectHelper.putPrimaryConfigurationData(data, true); |
205 |
} |
206 |
}); |
207 |
} |
208 |
|
209 |
@NbBundle.Messages({ |
210 |
"OnlineSampleWizardIterator.applyingTemplate=Applying template..." |
211 |
}) |
212 |
private FileObject instantiate(ProgressHandle handle, WizardDescriptor wizardDescriptor, ClientSideProject project) throws IOException { |
213 |
AntProjectHelper projectHelper = project.getProjectHelper(); |
214 |
SiteTemplateImplementation siteTemplate = getSiteTemplate(); |
215 |
|
216 |
ProjectProperties projectProperties = new ProjectProperties(); |
217 |
projectProperties.setSiteRootFolder(ClientSideProjectConstants.DEFAULT_SITE_ROOT_FOLDER); |
218 |
projectProperties.setTestFolder(ClientSideProjectConstants.DEFAULT_TEST_FOLDER); |
219 |
projectProperties.setConfigFolder(ClientSideProjectConstants.DEFAULT_CONFIG_FOLDER); |
220 |
|
221 |
if (siteTemplate != null) { |
222 |
siteTemplate.configure(projectProperties); |
223 |
initProject(project, projectProperties); |
224 |
|
225 |
handle.progress(Bundle.OnlineSampleWizardIterator_applyingTemplate()); |
226 |
applySiteTemplate(projectHelper.getProjectDirectory(), projectProperties, siteTemplate, handle); |
227 |
} else { |
228 |
// init standard project |
229 |
initProject(project, projectProperties); |
230 |
} |
231 |
|
232 |
// get application dir: |
233 |
FileObject siteRootDir = project.getSiteRootFolder(); |
234 |
assert siteRootDir != null; |
235 |
|
236 |
// apply extenders |
237 |
//no extenders for online samples |
238 |
// for (ClientProjectExtender extender : Lookup.getDefault().lookupAll(ClientProjectExtender.class)) { |
239 |
// extender.apply(project.getProjectDirectory(), siteRootDir, (String) wizardDescriptor.getProperty(LIBRARIES_PATH)); |
240 |
// } |
241 |
|
242 |
return siteRootDir; |
243 |
} |
244 |
|
245 |
private void initProject(ClientSideProject project, SiteTemplateImplementation.ProjectProperties properties) throws IOException { |
246 |
ClientSideProjectUtilities.initializeProject(project, |
247 |
properties.getSiteRootFolder(), |
248 |
properties.getTestFolder(), |
249 |
properties.getConfigFolder()); |
250 |
} |
251 |
|
252 |
@NbBundle.Messages({ |
165 |
@NbBundle.Messages({ |
253 |
"# {0} - template name", |
166 |
"# {0} - template name", |
254 |
"OnlineSampleWizardIterator.error.applyingSiteTemplate=Cannot apply template \"{0}\"." |
167 |
"OnlineSampleWizardIterator.error.applyingSiteTemplate=Cannot apply template \"{0}\"." |
255 |
}) |
168 |
}) |
256 |
private void applySiteTemplate( |
169 |
private void applySiteTemplate( |
257 |
final FileObject projectDir, |
170 |
final FileObject projectDir, |
258 |
final SiteTemplateImplementation.ProjectProperties projectProperties, |
171 |
final CreateProjectProperties props, |
259 |
final SiteTemplateImplementation siteTemplate, |
172 |
final OnlineSiteTemplate siteTemplate, |
260 |
final ProgressHandle handle) { |
173 |
final ProgressHandle handle) { |
261 |
|
174 |
|
262 |
assert !EventQueue.isDispatchThread(); |
175 |
assert !EventQueue.isDispatchThread(); |
263 |
final String templateName = siteTemplate.getName(); |
176 |
final String templateName = siteTemplate.getName(); |
264 |
try { |
177 |
try { |
265 |
siteTemplate.apply(projectDir, projectProperties, handle); |
178 |
siteTemplate.apply(projectDir, props, handle); |
266 |
} catch (IOException ex) { |
179 |
} catch (IOException ex) { |
267 |
errorOccured(Bundle.OnlineSampleWizardIterator_error_applyingSiteTemplate(templateName)); |
180 |
errorOccured(Bundle.OnlineSampleWizardIterator_error_applyingSiteTemplate(templateName)); |
268 |
} |
181 |
} |