deva@1755
|
1 |
/*
|
deva@1755
|
2 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
jglick@2926
|
3 |
*
|
jglick@2926
|
4 |
* Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
|
jglick@2926
|
5 |
*
|
jglick@2926
|
6 |
* Oracle and Java are registered trademarks of Oracle and/or its affiliates.
|
jglick@2926
|
7 |
* Other names may be trademarks of their respective owners.
|
jglick@2926
|
8 |
*
|
deva@1755
|
9 |
* The contents of this file are subject to the terms of either the GNU
|
deva@1755
|
10 |
* General Public License Version 2 only ("GPL") or the Common
|
deva@1755
|
11 |
* Development and Distribution License("CDDL") (collectively, the
|
deva@1755
|
12 |
* "License"). You may not use this file except in compliance with the
|
deva@1755
|
13 |
* License. You can obtain a copy of the License at
|
deva@1755
|
14 |
* http://www.netbeans.org/cddl-gplv2.html
|
deva@1755
|
15 |
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
|
deva@1755
|
16 |
* specific language governing permissions and limitations under the
|
deva@1755
|
17 |
* License. When distributing the software, include this License Header
|
deva@1755
|
18 |
* Notice in each file and include the License file at
|
jglick@2926
|
19 |
* nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
|
deva@1755
|
20 |
* particular file as subject to the "Classpath" exception as provided
|
jglick@2926
|
21 |
* by Oracle in the GPL Version 2 section of the License file that
|
deva@1755
|
22 |
* accompanied this code. If applicable, add the following below the
|
deva@1755
|
23 |
* License Header, with the fields enclosed by brackets [] replaced by
|
deva@1755
|
24 |
* your own identifying information:
|
deva@1755
|
25 |
* "Portions Copyrighted [year] [name of copyright owner]"
|
deva@1755
|
26 |
*
|
deva@1755
|
27 |
* Contributor(s):
|
deva@1755
|
28 |
*
|
deva@1755
|
29 |
* Portions Copyrighted 2007 Sun Microsystems, Inc.
|
deva@1755
|
30 |
*/
|
deva@1755
|
31 |
package org.netbeans.modules.visualweb.insync;
|
deva@1755
|
32 |
|
deva@1889
|
33 |
import com.sun.rave.designtime.Constants;
|
deva@1889
|
34 |
import java.beans.BeanInfo;
|
deva@1755
|
35 |
import java.io.File;
|
deva@1755
|
36 |
import java.io.IOException;
|
deva@1889
|
37 |
import java.lang.reflect.Constructor;
|
deva@1866
|
38 |
import java.net.URL;
|
deva@1866
|
39 |
import java.net.URLStreamHandlerFactory;
|
deva@1889
|
40 |
import java.util.ArrayList;
|
deva@1889
|
41 |
import java.util.List;
|
deva@1866
|
42 |
import java.util.regex.Pattern;
|
deva@1755
|
43 |
import org.netbeans.api.project.Project;
|
deva@1866
|
44 |
import org.netbeans.api.project.libraries.LibraryManager;
|
jglick@3213
|
45 |
import org.netbeans.junit.MockServices;
|
deva@1755
|
46 |
import org.netbeans.junit.NbTestCase;
|
deva@1889
|
47 |
import org.netbeans.modules.visualweb.insync.beans.Bean;
|
deva@1889
|
48 |
import org.netbeans.modules.visualweb.insync.beans.BeansUnit;
|
deva@1889
|
49 |
import org.netbeans.modules.visualweb.insync.models.FacesModel;
|
deva@1866
|
50 |
import org.netbeans.modules.visualweb.insync.models.FacesModelSet;
|
deva@1877
|
51 |
import org.netbeans.modules.web.project.WebProject;
|
deva@1755
|
52 |
import org.openide.filesystems.FileObject;
|
deva@1866
|
53 |
import org.openide.util.Exceptions;
|
jglick@3213
|
54 |
import org.openide.util.Lookup;
|
deva@1755
|
55 |
|
deva@1755
|
56 |
/**
|
deva@1755
|
57 |
*
|
deva@1755
|
58 |
* @author sc32560, jdeva
|
deva@1755
|
59 |
*
|
deva@1755
|
60 |
*/
|
deva@1755
|
61 |
public class InsyncTestBase extends NbTestCase {
|
deva@1755
|
62 |
public InsyncTestBase(String name) {
|
deva@1755
|
63 |
super(name);
|
deva@1866
|
64 |
_setUp();
|
deva@1755
|
65 |
}
|
deva@1755
|
66 |
|
deva@1866
|
67 |
String[] pageBeans, requestBeans, sessionBeans, applicationBeans, facesConfigs;
|
deva@1866
|
68 |
Project project;
|
deva@1755
|
69 |
|
deva@1866
|
70 |
static {
|
deva@1866
|
71 |
setupServices();
|
deva@1866
|
72 |
}
|
deva@1755
|
73 |
|
deva@1755
|
74 |
@Override
|
deva@1755
|
75 |
protected void setUp() throws Exception {
|
deva@1755
|
76 |
super.setUp();
|
deva@1866
|
77 |
//_setUp();
|
deva@1866
|
78 |
}
|
deva@1866
|
79 |
|
deva@1866
|
80 |
private void _setUp() {
|
deva@1866
|
81 |
//Set up the system properties
|
deva@1866
|
82 |
System.setProperty("jdk.home", System.getProperty("java.home"));
|
deva@1866
|
83 |
try {
|
deva@1755
|
84 |
|
deva@1866
|
85 |
System.setProperty("netbeans.user", new File(getWorkDir().getParentFile(), "user").getAbsolutePath());
|
deva@1866
|
86 |
} catch (IOException ex) {
|
deva@1866
|
87 |
Exceptions.printStackTrace(ex);
|
deva@1866
|
88 |
}
|
deva@1866
|
89 |
//Load the required libraries. This allows evaluation of project properties
|
deva@1866
|
90 |
//ex:- ${libs.jsf12-support.classpath}
|
deva@1866
|
91 |
LibraryManager.getDefault().getLibraries();
|
deva@1755
|
92 |
openProject();
|
deva@1866
|
93 |
pageBeans = System.getProperty(
|
deva@1866
|
94 |
"visualweb.project.pagebeans").split(Pattern.quote(System.getProperty("path.separator")));
|
deva@1866
|
95 |
requestBeans = System.getProperty(
|
deva@1866
|
96 |
"visualweb.project.requestbeans").split(Pattern.quote(System.getProperty("path.separator")));
|
deva@1866
|
97 |
sessionBeans = System.getProperty(
|
deva@1866
|
98 |
"visualweb.project.sessionbeans").split(Pattern.quote(System.getProperty("path.separator")));
|
deva@1866
|
99 |
applicationBeans = System.getProperty(
|
deva@1866
|
100 |
"visualweb.project.applicationbeans").split(Pattern.quote(System.getProperty("path.separator")));
|
deva@1866
|
101 |
facesConfigs = System.getProperty(
|
deva@1866
|
102 |
"visualweb.project.facesconfig").split(Pattern.quote(System.getProperty("path.separator")));
|
deva@1866
|
103 |
|
deva@1755
|
104 |
}
|
deva@1755
|
105 |
|
deva@1755
|
106 |
@Override
|
deva@1755
|
107 |
protected void tearDown() throws Exception {
|
deva@1755
|
108 |
super.tearDown();
|
deva@1866
|
109 |
clearWorkDir();
|
deva@1877
|
110 |
}
|
deva@1877
|
111 |
|
deva@1877
|
112 |
public FacesModelSet createFacesModelSet() {
|
deva@1877
|
113 |
FileObject file = getProject().getProjectDirectory();
|
deva@1877
|
114 |
FacesModelSet set = FacesModelSet.getInstance(file);
|
deva@1877
|
115 |
return set;
|
deva@1755
|
116 |
}
|
deva@1755
|
117 |
|
deva@1877
|
118 |
protected int getBeansCount() {
|
deva@1877
|
119 |
return getPageBeans().length + getNonPageBeansCount();
|
deva@1755
|
120 |
}
|
deva@1755
|
121 |
|
deva@1877
|
122 |
protected int getNonPageBeansCount() {
|
deva@1877
|
123 |
return getRequestBeans().length +
|
deva@1877
|
124 |
getSessionBeans().length +
|
deva@1877
|
125 |
getApplicationBeans().length;
|
deva@1877
|
126 |
}
|
deva@1877
|
127 |
|
deva@1877
|
128 |
protected String[] getBeanNames() {
|
deva@1877
|
129 |
String[] str = new String[getBeansCount()];
|
deva@1877
|
130 |
int i = 0;
|
deva@1877
|
131 |
for(String s : getPageBeans()) {
|
deva@1877
|
132 |
str[i++] = s;
|
deva@1877
|
133 |
}
|
deva@1877
|
134 |
for (String s : getRequestBeans()) {
|
deva@1877
|
135 |
str[i++] = s;
|
deva@1877
|
136 |
}
|
deva@1877
|
137 |
for (String s : getSessionBeans()) {
|
deva@1877
|
138 |
str[i++] = s;
|
deva@1877
|
139 |
}
|
deva@1877
|
140 |
for (String s : getApplicationBeans()) {
|
deva@1877
|
141 |
str[i++] = s;
|
deva@1877
|
142 |
}
|
deva@1877
|
143 |
return str;
|
deva@1877
|
144 |
}
|
deva@1877
|
145 |
|
deva@1889
|
146 |
protected List<Bean> createBeans(String[] types) {
|
deva@1889
|
147 |
FacesModelSet modelSet = createFacesModelSet();
|
deva@1889
|
148 |
FacesModel model = modelSet.getFacesModel(getJavaFile(getPageBeans()[0]));
|
deva@1889
|
149 |
model.sync();
|
deva@1889
|
150 |
BeansUnit bu = model.getBeansUnit();
|
deva@1889
|
151 |
List<Bean> beans = new ArrayList<Bean>();
|
deva@1889
|
152 |
for(String type : types) {
|
deva@1889
|
153 |
beans.add(createBean(bu, type));
|
deva@1889
|
154 |
}
|
deva@1889
|
155 |
return beans;
|
deva@1889
|
156 |
}
|
deva@1889
|
157 |
|
deva@1889
|
158 |
private Bean createBean(BeansUnit bu, String type) {
|
deva@1889
|
159 |
Constructor ctor = null;
|
deva@1889
|
160 |
java.lang.reflect.Method m = null;
|
deva@1889
|
161 |
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
|
deva@1889
|
162 |
try {
|
deva@1889
|
163 |
Class clazz = Class.forName("org.netbeans.modules.visualweb.insync.beans.Bean");
|
deva@1889
|
164 |
ctor = clazz.getDeclaredConstructor(BeansUnit.class, BeanInfo.class, String.class);
|
deva@1889
|
165 |
ctor.setAccessible(true);
|
deva@1889
|
166 |
clazz = Class.forName("org.netbeans.modules.visualweb.insync.beans.BeansUnit");
|
deva@1889
|
167 |
m = clazz.getDeclaredMethod("nextNameForType", String.class);
|
deva@1889
|
168 |
m.setAccessible(true);
|
deva@1889
|
169 |
} catch (Exception ex) {
|
deva@1889
|
170 |
Exceptions.printStackTrace(ex);
|
deva@1889
|
171 |
}
|
deva@1889
|
172 |
try {
|
deva@1889
|
173 |
Thread.currentThread().setContextClassLoader(bu.getClassLoader());
|
deva@1889
|
174 |
Class beanClass = bu.getBeanClass(type);
|
deva@1889
|
175 |
if (beanClass != null) {
|
deva@1889
|
176 |
BeanInfo beanInfo = BeansUnit.getBeanInfo(beanClass, bu.getClassLoader());
|
deva@1889
|
177 |
String name = (String) beanInfo.getBeanDescriptor().getValue(Constants.BeanDescriptor.INSTANCE_NAME);
|
deva@1889
|
178 |
if(name == null) {
|
deva@1889
|
179 |
name = (String)m.invoke(bu, type);
|
deva@1889
|
180 |
}
|
deva@1889
|
181 |
return (Bean) ctor.newInstance(bu, beanInfo, name);
|
deva@1889
|
182 |
}
|
deva@1889
|
183 |
} catch (Exception ex) {
|
deva@1889
|
184 |
Exceptions.printStackTrace(ex);
|
deva@1889
|
185 |
} finally {
|
deva@1889
|
186 |
Thread.currentThread().setContextClassLoader(oldContextClassLoader);
|
deva@1889
|
187 |
}
|
deva@1889
|
188 |
return null;
|
deva@1889
|
189 |
}
|
deva@1889
|
190 |
|
deva@1877
|
191 |
protected FileObject getJavaFile(String name) {
|
deva@1877
|
192 |
FileObject[] roots = ((WebProject)getProject()).getSourceRoots().getRoots();
|
deva@1877
|
193 |
for(FileObject f : roots) {
|
deva@1877
|
194 |
FileObject result = findFileObject(f, name);
|
deva@1877
|
195 |
if(result != null) {
|
deva@1877
|
196 |
return result;
|
deva@1877
|
197 |
}
|
deva@1877
|
198 |
}
|
deva@1877
|
199 |
return null;
|
deva@1877
|
200 |
}
|
deva@1877
|
201 |
|
deva@1877
|
202 |
protected FileObject findFileObject(FileObject f, String name) {
|
deva@1877
|
203 |
FileObject result = null;
|
deva@1877
|
204 |
if(f.isFolder()) {
|
deva@1877
|
205 |
for(FileObject child : f.getChildren()) {
|
deva@1877
|
206 |
result = findFileObject(child, name);
|
deva@1877
|
207 |
if(result != null) {
|
deva@1877
|
208 |
return result;
|
deva@1877
|
209 |
}
|
deva@1877
|
210 |
}
|
deva@1877
|
211 |
}else {
|
deva@1877
|
212 |
if(name.equals(f.getName())) {
|
deva@1877
|
213 |
result = f;
|
deva@1877
|
214 |
}
|
deva@1877
|
215 |
}
|
deva@1877
|
216 |
return result;
|
deva@1877
|
217 |
}
|
deva@1877
|
218 |
|
deva@1877
|
219 |
protected String getFQN(String className) {
|
deva@1877
|
220 |
FileObject[] roots = ((WebProject)getProject()).getSourceRoots().getRoots();
|
deva@1877
|
221 |
for(FileObject f : roots) {
|
deva@1877
|
222 |
FileObject result = findFileObject(f, className);
|
deva@1877
|
223 |
if(result != null) {
|
deva@1877
|
224 |
String filePath = result.getPath().substring(0, result.getPath().lastIndexOf("."));
|
deva@1877
|
225 |
String relativePath = filePath.replace(f.getPath(), "");
|
deva@1877
|
226 |
return relativePath.replace('/', '.').substring(1);
|
deva@1877
|
227 |
}
|
deva@1877
|
228 |
}
|
deva@1877
|
229 |
return null;
|
deva@1877
|
230 |
}
|
deva@1877
|
231 |
|
deva@1877
|
232 |
protected String getPackageName(String className) {
|
deva@1877
|
233 |
String relativePath = getFQN(className);
|
deva@1877
|
234 |
int lastDotIndex = relativePath.lastIndexOf('.');
|
deva@1877
|
235 |
return relativePath.substring(0, lastDotIndex);
|
deva@1866
|
236 |
}
|
deva@1755
|
237 |
|
deva@1866
|
238 |
public Project openProject() {
|
deva@1866
|
239 |
String projectName = System.getProperty("visualweb.project.name");
|
deva@1866
|
240 |
String relativeProjectPath = "projects" + File.separator + projectName;
|
deva@1866
|
241 |
//Check for a directory and then a zip file by project name
|
deva@1866
|
242 |
File f = new File(getDataDir().getAbsolutePath(), relativeProjectPath);
|
deva@1866
|
243 |
if (!f.exists()) {
|
deva@1866
|
244 |
f = new File(getDataDir().getAbsolutePath(), relativeProjectPath + ".zip");
|
deva@1866
|
245 |
}
|
deva@1866
|
246 |
try {
|
deva@1866
|
247 |
project = ProjectUtils.openProject(getWorkDir(), f.getAbsolutePath(), projectName);
|
deva@1866
|
248 |
//Necessary for FacesConfigModel
|
deva@1866
|
249 |
JSFConfigUtils.setUp(project);
|
deva@1866
|
250 |
} catch (IOException ex) {
|
deva@1866
|
251 |
Exceptions.printStackTrace(ex);
|
deva@1866
|
252 |
}
|
deva@1755
|
253 |
return project;
|
deva@1755
|
254 |
}
|
deva@1755
|
255 |
|
deva@1755
|
256 |
public Project getProject() {
|
deva@1755
|
257 |
return project;
|
deva@1755
|
258 |
}
|
deva@1755
|
259 |
|
deva@1755
|
260 |
public void destroyProject() throws IOException {
|
deva@1866
|
261 |
ProjectUtils.destroyProject(project);
|
deva@1866
|
262 |
}
|
deva@1866
|
263 |
|
deva@1866
|
264 |
public String[] getApplicationBeans() {
|
deva@1866
|
265 |
return applicationBeans;
|
deva@1866
|
266 |
}
|
deva@1866
|
267 |
|
deva@1866
|
268 |
public String[] getPageBeans() {
|
deva@1866
|
269 |
return pageBeans;
|
deva@1866
|
270 |
}
|
deva@1866
|
271 |
|
deva@1866
|
272 |
public String[] getRequestBeans() {
|
deva@1866
|
273 |
return requestBeans;
|
deva@1866
|
274 |
}
|
deva@1866
|
275 |
|
deva@1866
|
276 |
public String[] getSessionBeans() {
|
deva@1866
|
277 |
return sessionBeans;
|
deva@1866
|
278 |
}
|
deva@1866
|
279 |
|
deva@1866
|
280 |
public String[] getFacesConfigs() {
|
deva@1866
|
281 |
return facesConfigs;
|
deva@1755
|
282 |
}
|
deva@1755
|
283 |
|
deva@1866
|
284 |
private static void setupServices() {
|
jglick@3213
|
285 |
URL.setURLStreamHandlerFactory(Lookup.getDefault().lookup(URLStreamHandlerFactory.class));
|
jglick@3213
|
286 |
MockServices.setServices(RepositoryImpl.class, InsyncMimeResolver.class);
|
deva@1755
|
287 |
}
|
deva@1755
|
288 |
}
|