KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > metadata > view > service > impl > HibernateRepositoryTest


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21
22 package com.jaspersoft.jasperserver.api.metadata.view.service.impl;
23
24 import java.io.BufferedInputStream JavaDoc;
25 import java.io.FileInputStream JavaDoc;
26 import java.io.FileNotFoundException JavaDoc;
27 import java.io.IOException JavaDoc;
28 import java.io.InputStream JavaDoc;
29 import java.util.HashSet JavaDoc;
30 import java.util.Iterator JavaDoc;
31 import java.util.List JavaDoc;
32 import java.util.Properties JavaDoc;
33 import java.util.Set JavaDoc;
34
35 import junit.framework.TestCase;
36
37 import org.springframework.context.support.ClassPathXmlApplicationContext;
38
39 import com.jaspersoft.jasperserver.api.metadata.common.domain.DataType;
40 import com.jaspersoft.jasperserver.api.metadata.common.domain.FileResource;
41 import com.jaspersoft.jasperserver.api.metadata.common.domain.Folder;
42 import com.jaspersoft.jasperserver.api.metadata.common.domain.InputControl;
43 import com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValues;
44 import com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValuesItem;
45 import com.jaspersoft.jasperserver.api.metadata.common.domain.Resource;
46 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup;
47 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceReference;
48 import com.jaspersoft.jasperserver.api.metadata.common.domain.Query;
49 import com.jaspersoft.jasperserver.api.metadata.common.domain.client.DataTypeImpl;
50 import com.jaspersoft.jasperserver.api.metadata.common.domain.client.FolderImpl;
51 import com.jaspersoft.jasperserver.api.metadata.common.domain.client.ListOfValuesItemImpl;
52 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;
53 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.BeanReportDataSource;
54 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JdbcReportDataSource;
55 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JndiJdbcReportDataSource;
56 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource;
57 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit;
58 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria;
59 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterElementDisjunction;
60
61 /**
62  * @author Lucian Chirita (lucianc@users.sourceforge.net)
63  * @version $Id: HibernateRepositoryTest.java 4461 2006-09-07 15:42:20Z lucian $
64  */

65 public class HibernateRepositoryTest extends TestCase {
66
67     private Properties JavaDoc jdbcProps;
68     private RepositoryService repo;
69
70     public HibernateRepositoryTest(String JavaDoc name) {
71         super(name);
72     }
73
74     protected void setUp() throws Exception JavaDoc {
75         loadJdbcProps();
76         ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
77                 new String JavaDoc[] {"hibernateConfig.xml", "viewService.xml"});
78
79         repo = (RepositoryService) appContext.getBean("repoService");
80     }
81
82     protected Properties JavaDoc loadJdbcProps() throws IOException JavaDoc, FileNotFoundException JavaDoc {
83         jdbcProps = new Properties JavaDoc();
84         String JavaDoc jdbcPropFile = System.getProperty("test.hibernate.jdbc.properties");
85         BufferedInputStream JavaDoc is = new BufferedInputStream JavaDoc(new FileInputStream JavaDoc(jdbcPropFile));
86         jdbcProps.load(is);
87         is.close();
88         return jdbcProps;
89     }
90
91     // TODO disabled for now
92
public void disabled_testDeleteFolder() {
93         assertNotNull("Repo not null", repo);
94
95         Folder tmpFolder = new FolderImpl();
96         setCommon(tmpFolder, "tmp_foo");
97         repo.saveFolder(null, tmpFolder);
98
99         Folder subtmpFolder = new FolderImpl();
100         setCommon(subtmpFolder, "sub");
101         subtmpFolder.setParentFolder(tmpFolder);
102         repo.saveFolder(null, subtmpFolder);
103
104         JndiJdbcReportDataSource ds = (JndiJdbcReportDataSource) repo.newResource(null, JndiJdbcReportDataSource.class);
105         setCommon(ds, "dummyDS");
106         ds.setJndiName("foo");
107         ds.setParentFolder(tmpFolder);
108         repo.saveResource(null, ds);
109
110         JndiJdbcReportDataSource subds = (JndiJdbcReportDataSource) repo.newResource(null, JndiJdbcReportDataSource.class);
111         setCommon(subds, "subDS");
112         subds.setJndiName("subfoo");
113         subds.setParentFolder(subtmpFolder);
114         repo.saveResource(null, subds);
115
116         Resource dsResource = repo.getResource(null, "/tmp_foo/dummyDS");
117         assertNotNull(dsResource);
118         assertTrue(dsResource instanceof JndiJdbcReportDataSource);
119         ds = (JndiJdbcReportDataSource) dsResource;
120         assertEquals("foo", ds.getJndiName());
121
122         Resource subdsResource = repo.getResource(null, "/tmp_foo/sub/subDS");
123         assertNotNull(subdsResource);
124         assertTrue(subdsResource instanceof JndiJdbcReportDataSource);
125         subds = (JndiJdbcReportDataSource) subdsResource;
126         assertEquals("subfoo", subds.getJndiName());
127
128         repo.deleteFolder(null, "/tmp_foo");
129
130         List JavaDoc folders = repo.getSubFolders(null, "/");
131         for (Iterator JavaDoc it = folders.iterator(); it.hasNext();) {
132             Folder folder = (Folder) it.next();
133             assertFalse("tmp_foo".equals(folder.getName()));
134         }
135
136         dsResource = repo.getResource(null, "/tmp_foo/dummyDS");
137         assertNull(dsResource);
138
139         subdsResource = repo.getResource(null, "/tmp_foo/dummyDS");
140         assertNull(subdsResource);
141     }
142
143     // TODO disabled for now
144
public void disabled_testDeleteRollback() {
145         assertNotNull("Repo not null", repo);
146
147         Folder tmp1 = new FolderImpl();
148         setCommon(tmp1, "tmp1");
149         repo.saveFolder(null, tmp1);
150
151         Folder tmp2 = new FolderImpl();
152         setCommon(tmp2, "tmp2");
153         repo.saveFolder(null, tmp2);
154
155         tmp1 = repo.getFolder(null, "/tmp1");
156         assertNotNull(tmp1);
157         assertEquals("tmp1", tmp1.getName());
158
159         tmp2 = repo.getFolder(null, "/tmp2");
160         assertNotNull(tmp2);
161         assertEquals("tmp2", tmp2.getName());
162
163         boolean exception = false;
164         try {
165             repo.delete(null, null, new String JavaDoc[] { "/tmp1", "/tmp_zzz" });
166         } catch (Exception JavaDoc e) {
167             exception = true;
168         }
169         assertTrue(exception);
170
171
172         tmp1 = repo.getFolder(null, "/tmp1");
173         assertNotNull(tmp1);
174         assertEquals("tmp1", tmp1.getName());
175
176         repo.delete(null, null, new String JavaDoc[] { "/tmp1", "/tmp2" });
177
178         tmp1 = repo.getFolder(null, "/tmp1");
179         assertNull(tmp1);
180
181         tmp2 = repo.getFolder(null, "/tmp2");
182         assertNull(tmp2);
183     }
184
185     public void testFolderUpdate() {
186         assertNotNull("Repo not null", repo);
187
188         Folder folder = new FolderImpl();
189         setCommon(folder, "test_update");
190         repo.saveFolder(null, folder);
191
192         JndiJdbcReportDataSource ds = (JndiJdbcReportDataSource) repo.newResource(null, JndiJdbcReportDataSource.class);
193         setCommon(ds, "fooDS");
194         ds.setJndiName("foo");
195         ds.setParentFolder(folder);
196         repo.saveResource(null, ds);
197
198         folder = repo.getFolder(null, "/test_update");
199         assertNotNull(folder);
200         assertEquals("test_update", folder.getName());
201         assertEquals("test_update_label", folder.getLabel());
202
203         folder.setLabel("updated");
204         repo.saveFolder(null, folder);
205
206         folder = repo.getFolder(null, "/test_update");
207         assertNotNull(folder);
208         assertEquals("test_update", folder.getName());
209         assertEquals("updated", folder.getLabel());
210
211         Resource resource = repo.getResource(null, "/test_update/fooDS");
212         assertNotNull(resource);
213         assertTrue(resource instanceof JndiJdbcReportDataSource);
214         ds = (JndiJdbcReportDataSource) resource;
215         assertEquals("fooDS", ds.getName());
216         assertEquals("foo", ds.getJndiName());
217
218         repo.deleteFolder(null, "/test_update");
219         folder = repo.getFolder(null, "/test_update");
220         assertNull(folder);
221     }
222
223     public void testRepo() {
224         assertNotNull("Repo not null", repo);
225
226         write();
227
228         read();
229
230         readFolders();
231
232         update();
233
234         optimisticLocking();
235
236         list();
237
238         resources();
239
240         // TODO disabled to allow build to run
241
//deleteRollback();
242
}
243
244     private void deleteRollback() {
245         boolean exception = false;
246         try {
247             repo.delete(null, new String JavaDoc[]{"/datasources/JServerJdbcDS"}, null);
248         } catch (Exception JavaDoc e) {
249             exception = true;
250         }
251         assertTrue(exception);
252
253         Resource resource = repo.getResource(null, "/datasources/JServerJdbcDS");
254         assertNotNull(resource);
255         assertTrue(resource instanceof JdbcReportDataSource);
256     }
257
258     private void write() {
259         Folder dsFolder = new FolderImpl();
260         dsFolder.setName("datasources");
261         dsFolder.setLabel("Data Sources");
262         dsFolder.setDescription("Data Sources used by reports");
263         repo.saveFolder(null, dsFolder);
264
265         createJndiDS();
266         createJdbcDS();
267         createBeanDS();
268         createTableModelDS();
269
270         Folder reportsFolder = new FolderImpl();
271         reportsFolder.setName("reports");
272         reportsFolder.setLabel("Reports");
273         reportsFolder.setDescription("Reports");
274         repo.saveFolder(null, reportsFolder);
275
276         Folder samplesFolder = new FolderImpl();
277         samplesFolder.setName("samples");
278         samplesFolder.setLabel("Samples");
279         samplesFolder.setDescription("Samples");
280         samplesFolder.setParentFolder(reportsFolder);
281         repo.saveFolder(null, samplesFolder);
282
283         createAllAccounts(samplesFolder);
284         createSalesByMonth(samplesFolder);
285         createCustomDSReportFileResource(samplesFolder);
286         createCustomDSReport(samplesFolder);
287         createTableModelDSReport(samplesFolder);
288         createEmployeeAccounts(samplesFolder);
289         createEmployees(samplesFolder);
290
291         createImage();
292
293         Folder olapFolder = new FolderImpl();
294         olapFolder.setName("olap");
295         olapFolder.setLabel("OLAP Components");
296         olapFolder.setDescription("OLAP Components");
297         repo.saveFolder(null, olapFolder);
298
299         Folder connectionsFolder = new FolderImpl();
300         connectionsFolder.setName("connections");
301         connectionsFolder.setLabel("OLAP Connections");
302         connectionsFolder.setDescription("Connections used by OLAP");
303         connectionsFolder.setParentFolder(olapFolder);
304         repo.saveFolder(null, connectionsFolder);
305
306         Folder schemasFolder = new FolderImpl();
307         schemasFolder.setName("schemas");
308         schemasFolder.setLabel("OLAP Schemas");
309         schemasFolder.setDescription("Schemas used by OLAP");
310         schemasFolder.setParentFolder(olapFolder);
311         repo.saveFolder(null, schemasFolder);
312
313         Folder olapDsFolder = new FolderImpl();
314         olapDsFolder.setName("datasources");
315         olapDsFolder.setLabel("OLAP Data Sources");
316         olapDsFolder.setDescription("Data sources used by OLAP");
317         olapDsFolder.setParentFolder(olapFolder);
318         repo.saveFolder(null, olapDsFolder);
319
320         Folder olapViewsFolder = new FolderImpl();
321         olapViewsFolder.setName("views");
322         olapViewsFolder.setLabel("OLAP Views");
323         olapViewsFolder.setDescription("OLAP Views");
324         olapViewsFolder.setParentFolder(olapFolder);
325         repo.saveFolder(null, olapViewsFolder);
326     }
327
328     private void createImage() {
329         Folder folder = new FolderImpl();
330         folder.setName("images");
331         folder.setLabel("Images");
332         folder.setDescription("Folder containing reusable images");
333         repo.saveFolder(null, folder);
334
335         FileResource image = (FileResource) repo.newResource(null, FileResource.class);
336         image.setFileType(FileResource.TYPE_IMAGE);
337         image.readData(getClass().getResourceAsStream("/images/jasperreports.gif"));
338         image.setName("JRLogo");
339         image.setLabel("JR logo");
340         image.setDescription("JR logo");
341         image.setParentFolder(folder);
342
343         repo.saveResource(null, image);
344     }
345
346     private void createJndiDS() {
347         JndiJdbcReportDataSource datasource = (JndiJdbcReportDataSource) repo.newResource(null, JndiJdbcReportDataSource.class);
348         datasource.setName("JServerJNDIDS");
349         datasource.setLabel("JServer JNDI data source");
350         datasource.setDescription("JServer JNDI data source");
351         datasource.setJndiName(jdbcProps.getProperty("test.jndi"));
352         datasource.setParentFolder("/datasources");
353
354         repo.saveResource(null, datasource);
355     }
356
357     private void createJdbcDS() {
358         JdbcReportDataSource datasource = (JdbcReportDataSource) repo.newResource(null, JdbcReportDataSource.class);
359         datasource.setName("JServerJdbcDS");
360         datasource.setLabel("JServer Jdbc data source");
361         datasource.setDescription("JServer Jdbc data source");
362         datasource.setParentFolder("/datasources");
363
364         datasource.setDriverClass(jdbcProps.getProperty("test.jdbc.driverClassName"));
365         datasource.setConnectionUrl(jdbcProps.getProperty("test.jdbc.url"));
366         datasource.setUsername(jdbcProps.getProperty("test.jdbc.username"));
367         datasource.setPassword(jdbcProps.getProperty("test.jdbc.password"));
368
369         repo.saveResource(null, datasource);
370     }
371
372     private void createBeanDS() {
373         BeanReportDataSource datasource = (BeanReportDataSource) repo.newResource(null, BeanReportDataSource.class);
374         datasource.setName("CustomDSFromBean");
375         datasource.setLabel("Custom data source from a bean");
376         datasource.setDescription("A custom data source through a bean");
377         datasource.setParentFolder("/datasources");
378
379         datasource.setBeanName("customDataSourceService");
380
381         repo.saveResource(null, datasource);
382     }
383
384     private void createTableModelDS() {
385         BeanReportDataSource datasource = (BeanReportDataSource) repo.newResource(null, BeanReportDataSource.class);
386         datasource.setName("CustomTableModelDS");
387         datasource.setLabel("Custom data source from a table model");
388         datasource.setDescription("A custom data source through a table model");
389         datasource.setParentFolder("/datasources");
390
391         datasource.setBeanName("customDataSourceServiceFactory");
392         datasource.setBeanMethod("tableModelDataSource");
393
394         repo.saveResource(null, datasource);
395     }
396
397     private void createSalesByMonth(Folder folder) {
398         FileResource reportRes = (FileResource) repo.newResource(null, FileResource.class);
399         reportRes.setFileType(FileResource.TYPE_JRXML);
400         reportRes.setName("SalesByMonthReport");
401         reportRes.setLabel("Sales By Month Jasper Report");
402         reportRes.setDescription("Sales By Month Jasper Report");
403
404         InputStream JavaDoc jrxml = getClass().getResourceAsStream("/reports/jasper/SalesByMonth.jrxml");
405         reportRes.readData(jrxml);
406
407         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
408         unit.setName("SalesByMonth");
409         unit.setLabel("Sales By Month Report");
410         unit.setDescription("Sales By Month Report");
411         unit.setParentFolder(folder);
412
413         unit.setDataSourceReference("/datasources/JServerJdbcDS");
414         unit.setMainReport(reportRes);
415
416         FileResource jar = (FileResource) repo.newResource(null, FileResource.class);
417         jar.setFileType(FileResource.TYPE_JAR);
418         jar.readData(getClass().getResourceAsStream("/jars/scriptlet.jar"));
419         setCommon(jar, "Scriptlet");
420         unit.addResource(jar);
421
422         FileResource img = (FileResource) repo.newResource(null, FileResource.class);
423         img.setFileType(FileResource.TYPE_IMAGE);
424         img.readData(getClass().getResourceAsStream("/images/jasperreports.gif"));
425         setCommon(img, "Logo");
426         unit.addResource(img);
427
428         FileResource subrep = (FileResource) repo.newResource(null, FileResource.class);
429         subrep.setFileType(FileResource.TYPE_JRXML);
430         subrep.readData(getClass().getResourceAsStream("/reports/jasper/SalesByMonthDetail.jrxml"));
431         setCommon(subrep, "SalesByMonthDetail");
432         unit.addResource(subrep);
433
434         FileResource resBdl = (FileResource) repo.newResource(null, FileResource.class);
435         resBdl.setFileType(FileResource.TYPE_RESOURCE_BUNDLE);
436         resBdl.readData(getClass().getResourceAsStream("/resource_bundles/sales.properties"));
437         setCommon(resBdl, "sales.properties");
438         unit.addResource(resBdl);
439
440         FileResource resBdl_ro = (FileResource) repo.newResource(null, FileResource.class);
441         resBdl_ro.setFileType(FileResource.TYPE_RESOURCE_BUNDLE);
442         resBdl_ro.readData(getClass().getResourceAsStream("/resource_bundles/sales_ro.properties"));
443         setCommon(resBdl_ro, "sales_ro.properties");
444         unit.addResource(resBdl_ro);
445
446         InputControl textInputCtrl = (InputControl) repo.newResource(null, InputControl.class);
447         setCommon(textInputCtrl, "TextInputControl");
448         textInputCtrl.setType(InputControl.TYPE_SINGLE_VALUE);
449         textInputCtrl.setMandatory(false);
450         textInputCtrl.setReadOnly(false);
451         //FIXME textInputCtrl.setSize(new Integer(30));
452
textInputCtrl.setLabel("Text Input Control");
453         textInputCtrl.setName("TextInput");
454         DataType dataType = new DataTypeImpl();
455         dataType.setName("test");
456         dataType.setLabel("test");
457         dataType.setType(DataType.TYPE_NUMBER);
458         textInputCtrl.setDataType(dataType);
459         unit.addInputControl(textInputCtrl);
460
461         InputControl checkboxInputControl = (InputControl) repo.newResource(null, InputControl.class);
462         setCommon(checkboxInputControl, "CheckboxInputControl");
463         checkboxInputControl.setType(InputControl.TYPE_BOOLEAN);
464         checkboxInputControl.setMandatory(true);
465         checkboxInputControl.setReadOnly(false);
466         checkboxInputControl.setLabel("Checkbox Input Control");
467         checkboxInputControl.setName("CheckboxInput");
468         unit.addInputControl(checkboxInputControl);
469
470         InputControl listInputControl = (InputControl) repo.newResource(null, InputControl.class);
471         setCommon(listInputControl, "ListInputControl");
472         listInputControl.setType(InputControl.TYPE_SINGLE_SELECT_LIST_OF_VALUES);
473         listInputControl.setMandatory(true);
474         listInputControl.setReadOnly(false);
475         listInputControl.setLabel("List Input Control");
476         listInputControl.setName("ListInput");
477
478         ListOfValues values = (ListOfValues) repo.newResource(null, ListOfValues.class);
479         values.setName("Some list of values");
480         values.setLabel("Some list of values label");
481         values.setDescription("Some list of values description");
482         ListOfValuesItem item = new ListOfValuesItemImpl();
483         item.setLabel("An item");
484         item.setValue("1");
485         values.addValue(item);
486         item = new ListOfValuesItemImpl();
487         item.setLabel("Another item");
488         item.setValue("2");
489         values.addValue(item);
490         item = new ListOfValuesItemImpl();
491         item.setLabel("Yet another item");
492         item.setValue("3");
493         values.addValue(item);
494         listInputControl.setListOfValues(values);
495
496         dataType = new DataTypeImpl();
497         dataType.setName("test");
498         dataType.setLabel("test");
499         dataType.setType(DataType.TYPE_TEXT);
500         listInputControl.setDataType(dataType);
501
502         unit.addInputControl(listInputControl);
503
504         createDateDatatype();
505
506         InputControl dateInputCtrl = (InputControl) repo.newResource(null, InputControl.class);
507         setCommon(dateInputCtrl, "DateInput");
508         dateInputCtrl.setType(InputControl.TYPE_SINGLE_VALUE);
509         dateInputCtrl.setMandatory(false);
510         dateInputCtrl.setReadOnly(false);
511         dateInputCtrl.setDataTypeReference("/datatypes/date");
512         unit.addInputControl(dateInputCtrl);
513
514         InputControl queryInputCtrl = (InputControl) repo.newResource(null, InputControl.class);
515         setCommon(queryInputCtrl, "QueryInput");
516         queryInputCtrl.setType(InputControl.TYPE_SINGLE_SELECT_QUERY);
517         queryInputCtrl.setMandatory(false);
518         queryInputCtrl.setReadOnly(false);
519         queryInputCtrl.setQueryValueColumn("user_name");
520         queryInputCtrl.addQueryVisibleColumn("first_name");
521         queryInputCtrl.addQueryVisibleColumn("last_name");
522         Query query = (Query) repo.newResource(null, Query.class);
523         setCommon(query, "testQuery");
524         query.setLanguage("sql");
525         query.setSql("select user_name, first_name, last_name from users");
526         queryInputCtrl.setQuery(query);
527         unit.addInputControl(queryInputCtrl);
528
529         repo.saveResource(null, unit);
530     }
531
532     private void createEmployees(Folder folder) {
533         FileResource reportRes = (FileResource) repo.newResource(null, FileResource.class);
534         reportRes.setFileType(FileResource.TYPE_JRXML);
535         setCommon(reportRes, "EmployeesJRXML");
536
537         InputStream JavaDoc jrxml = getClass().getResourceAsStream("/reports/jasper/Employees.jrxml");
538         reportRes.readData(jrxml);
539
540         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
541         unit.setName("Employees");
542         unit.setLabel("Employees");
543         unit.setParentFolder(folder);
544
545         unit.setDataSourceReference("/datasources/JServerJdbcDS");
546         unit.setMainReport(reportRes);
547
548         repo.saveResource(null, unit);
549     }
550
551     private void createEmployeeAccounts(Folder folder) {
552         FileResource reportRes = (FileResource) repo.newResource(null, FileResource.class);
553         reportRes.setFileType(FileResource.TYPE_JRXML);
554         setCommon(reportRes, "EmployeeAccountsJRXML");
555
556         InputStream JavaDoc jrxml = getClass().getResourceAsStream("/reports/jasper/EmployeeAccounts.jrxml");
557         reportRes.readData(jrxml);
558
559         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
560         unit.setName("EmployeeAccounts");
561         unit.setLabel("Employee Accounts");
562         unit.setParentFolder(folder);
563
564         unit.setDataSourceReference("/datasources/JServerJdbcDS");
565         unit.setMainReport(reportRes);
566
567         InputControl empIC = (InputControl) repo.newResource(null, InputControl.class);
568         setCommon(empIC, "EmployeeID");
569         empIC.setMandatory(true);
570         empIC.setType(InputControl.TYPE_SINGLE_VALUE);
571         
572         DataType userDT = (DataType) repo.newResource(null, DataType.class);
573         setCommon(userDT, "UserIDDataType");
574         userDT.setType(DataType.TYPE_TEXT);
575         empIC.setDataType(userDT);
576         
577         unit.addInputControl(empIC);
578         
579         repo.saveResource(null, unit);
580     }
581
582     protected void createDateDatatype() {
583         Folder folder = new FolderImpl();
584         folder.setName("datatypes");
585         folder.setLabel("Input data types");
586         repo.saveFolder(null, folder);
587
588         DataType dateDataType = new DataTypeImpl();
589         setCommon(dateDataType, "date");
590         dateDataType.setType(DataType.TYPE_DATE);
591         dateDataType.setParentFolder(folder);
592         repo.saveResource(null, dateDataType);
593     }
594
595     private void setCommon(Resource res, String JavaDoc id) {
596         res.setName(id);
597         res.setLabel(id + "_label");
598         res.setDescription(id + " description");
599     }
600
601     private void createAllAccounts(Folder folder) {
602         FileResource reportRes = (FileResource) repo.newResource(null, FileResource.class);
603         reportRes.setFileType(FileResource.TYPE_JRXML);
604         reportRes.setName("AllAccountsReport");
605         reportRes.setLabel("All Accounts Jasper Report");
606         reportRes.setDescription("All Accounts Jasper Report");
607         reportRes.setParentFolder(folder);
608
609         InputStream JavaDoc jrxml = getClass().getResourceAsStream(
610                 "/reports/jasper/AllAccounts.jrxml");
611         reportRes.readData(jrxml);
612
613         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
614         unit.setName("AllAccounts");
615         unit.setLabel("All Accounts Report");
616         unit.setDescription("All Accounts Report");
617         unit.setParentFolder(folder);
618
619         unit.setDataSourceReference("/datasources/JServerJNDIDS");
620         unit.setMainReport(reportRes);
621
622         FileResource res1 = (FileResource) repo.newResource(null, FileResource.class);
623         res1.setFileType(FileResource.TYPE_IMAGE);
624         res1.readData(getClass().getResourceAsStream("/images/jasperreports.gif"));
625         res1.setName("AllAccounts_Res1");
626         res1.setLabel("AllAccounts_Res1");
627         res1.setDescription("AllAccounts_Res1");
628         unit.addResource(res1);
629
630         FileResource res2 = (FileResource) repo.newResource(null, FileResource.class);
631         res2.setFileType(FileResource.TYPE_IMAGE);
632         res2.readData(getClass().getResourceAsStream("/images/logo.jpg"));
633         res2.setName("AllAccounts_Res2");
634         res2.setLabel("AllAccounts_Res2");
635         res2.setDescription("AllAccounts_Res2");
636         unit.addResource(res2);
637         
638         repo.saveResource(null, unit);
639     }
640
641
642     private void createCustomDSReportFileResource(Folder folder) {
643         FileResource reportRes = (FileResource) repo.newResource(null, FileResource.class);
644         reportRes.setFileType(FileResource.TYPE_JRXML);
645         reportRes.setName("DataSourceReportTemplate");
646         reportRes.setLabel("Report showing Custom Data Source");
647         reportRes.setDescription("Report showing use of Custom Data Source via a bean");
648         reportRes.setParentFolder(folder);
649
650         InputStream JavaDoc jrxml = getClass().getResourceAsStream(
651                 "/reports/jasper/DataSourceReport.jrxml");
652         reportRes.readData(jrxml);
653         
654         repo.saveResource(null, reportRes);
655     }
656
657     private void createCustomDSReport(Folder folder) {
658
659         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
660         unit.setName("DataSourceReport");
661         unit.setLabel("Report showing Custom Data Source");
662         unit.setDescription("Report showing use of Custom Data Source via a bean");
663         unit.setParentFolder(folder);
664
665         unit.setMainReportReference("/reports/samples/DataSourceReportTemplate");
666         unit.setDataSourceReference("/datasources/CustomDSFromBean");
667         
668         repo.saveResource(null, unit);
669     }
670
671     private void createTableModelDSReport(Folder folder) {
672
673         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
674         unit.setName("DataSourceTableModel");
675         unit.setLabel("Table Model Data Source");
676         unit.setDescription("Report showing use of Custom Data Source via table model");
677         unit.setParentFolder(folder);
678
679         unit.setMainReportReference("/reports/samples/DataSourceReportTemplate");
680         unit.setDataSourceReference("/datasources/CustomTableModelDS");
681         unit.setMainReportReference("/reports/samples/DataSourceReportTemplate");
682         
683         repo.saveResource(null, unit);
684     }
685
686     private void update() {
687         ReportUnit unit = (ReportUnit) repo.getResource(null, "/reports/samples/AllAccounts");
688         assertEquals("AllAccounts", unit.getName());
689         assertEquals("/reports/samples/AllAccounts", unit.getURIString());
690
691         unit.setLabel("Updated " + unit.getLabel());
692
693         FileResource removed = unit.removeResourceLocal("AllAccounts_Res1");
694         assertNotNull(removed);
695
696         FileResource res3 = (FileResource) repo.newResource(null, FileResource.class);
697         res3.setFileType(FileResource.TYPE_IMAGE);
698         res3.readData(getClass().getResourceAsStream("/images/jasperreports.gif"));
699         res3.setName("AllAccounts_Res3");
700         res3.setLabel("AllAccounts_Res3");
701         res3.setDescription("AllAccounts_Res3");
702         unit.addResource(res3);
703
704         FileResource res4 = (FileResource) repo.newResource(null, FileResource.class);
705         res4.setFileType(FileResource.TYPE_IMAGE);
706         res4.setReferenceURI("/images/JRLogo");
707         setCommon(res4, "LogoLink");
708         unit.addResource(res4);
709
710         repo.saveResource(null, unit);
711
712         unit = (ReportUnit) repo.getResource(null, "/reports/samples/AllAccounts");
713         assertTrue(unit.getLabel().startsWith("Updated "));
714
715         List JavaDoc resources = unit.getResources();
716         assertNotNull(resources);
717         assertEquals(3, resources.size());
718     }
719
720     private void read() {
721         ReportUnit unit = (ReportUnit) repo.getResource(null, "/reports/samples/AllAccounts");
722         assertNotNull(unit);
723         assertEquals(ReportUnit.class.getName(), unit.getResourceType());
724         assertEquals("AllAccounts", unit.getName());
725         
726         ResourceReference dsRef = unit.getDataSource();
727         assertNotNull(dsRef);
728         assertFalse(dsRef.isLocal());
729         assertEquals("/datasources/JServerJNDIDS", dsRef.getReferenceURI());
730         
731         ResourceReference mainReportRef = unit.getMainReport();
732         assertNotNull(mainReportRef);
733         assertTrue(mainReportRef.isLocal());
734         Resource mainReport = mainReportRef.getLocalResource();
735         assertTrue(mainReport instanceof FileResource);
736         assertEquals("AllAccountsReport", mainReport.getName());
737
738         List JavaDoc resources = unit.getResources();
739         assertNotNull(resources);
740         assertEquals(2, resources.size());
741
742         FileResource img = (FileResource) repo.getResource(null, "/images/JRLogo");
743         assertNotNull(img);
744         assertEquals("JRLogo", img.getName());
745         
746         datasources();
747         parentFolder();
748         propertyFilter();
749         disjunctionFilter();
750     }
751
752     private void datasources() {
753         FilterCriteria criteria = FilterCriteria.createFilter(ReportDataSource.class);
754         ResourceLookup[] lookups = repo.findResource(null, criteria);
755         assertNotNull(lookups);
756         assertTrue(2 <= lookups.length);
757         for (int i = 0; i < lookups.length; i++) {
758             Resource res = repo.getResource(null, lookups[i].getURIString());
759             assertTrue(res instanceof ReportDataSource);
760         }
761     }
762
763     private void parentFolder() {
764         FilterCriteria criteria = FilterCriteria.createFilter();
765         criteria.addFilterElement(FilterCriteria.createParentFolderFilter("/datasources"));
766         ResourceLookup[] folderResources = repo.findResource(null, criteria);
767         assertNotNull(folderResources);
768         assertTrue(folderResources.length > 0);
769         for (int i = 0; i < folderResources.length; i++) {
770             ResourceLookup lookup = folderResources[i];
771             assertEquals("/datasources", lookup.getParentFolder());
772             if (lookup.getName().equals("JServerJdbcDS")) {
773                 assertEquals(JdbcReportDataSource.class.getName(), lookup.getResourceType());
774             } else if (lookup.getName().equals("JServerJNDIDS")) {
775                 assertEquals(JndiJdbcReportDataSource.class.getName(), lookup.getResourceType());
776             }
777         }
778     }
779
780     private void propertyFilter() {
781         FilterCriteria criteria = FilterCriteria.createFilter(FileResource.class);
782         criteria.addFilterElement(FilterCriteria.createPropertyEqualsFilter("fileType", FileResource.TYPE_IMAGE));
783         ResourceLookup[] resources = repo.findResource(null, criteria);
784         assertNotNull(resources);
785         assertTrue(resources.length > 0);
786         for (int i = 0; i < resources.length; i++) {
787             Resource res = repo.getResource(null, resources[i].getURIString());
788             assertTrue(res instanceof FileResource);
789             FileResource fileRes = (FileResource) res;
790             assertEquals(FileResource.class.getName(), fileRes.getResourceType());
791             assertEquals(FileResource.TYPE_IMAGE, fileRes.getFileType());
792         }
793     }
794
795     private void disjunctionFilter() {
796         FilterCriteria criteria = FilterCriteria.createFilter();
797         FilterElementDisjunction disjunction = criteria.addDisjunction();
798         disjunction.addFilterElement(FilterCriteria.createPropertyLikeFilter("name", "%JdbcDS"));
799         disjunction.addNegatedFilterElement(FilterCriteria.createParentFolderFilter("/datasources"));
800
801         ResourceLookup[] resources = repo.findResource(null, criteria);
802         assertNotNull(resources);
803         assertTrue(resources.length > 0);
804         for (int i = 0; i < resources.length; i++) {
805             ResourceLookup lookup = resources[i];
806             assertTrue(lookup.getName().endsWith("JdbcDS") || !lookup.getParentFolder().equals("/datasources"));
807         }
808     }
809
810     private void readFolders() {
811         List JavaDoc folders = repo.getAllFolders(null);
812         assertNotNull(folders);
813         assertTrue(5 <= folders.size());
814
815         Iterator JavaDoc it = folders.iterator();
816         Folder folder = (Folder) it.next();
817         assertEquals("/", folder.getURIString());
818         
819         Set JavaDoc folderURIs = new HashSet JavaDoc();
820         while (it.hasNext()) {
821             folder = (Folder) it.next();
822             folderURIs.add(folder.getURIString());
823         }
824         assertTrue(folderURIs.contains("/datasources"));
825         assertTrue(folderURIs.contains("/images"));
826         assertTrue(folderURIs.contains("/reports"));
827         assertTrue(folderURIs.contains("/reports/samples"));
828         
829         List JavaDoc subFolders = repo.getSubFolders(null, "/reports");
830         assertNotNull(subFolders);
831         assertEquals(1, subFolders.size());
832         folder = (Folder) subFolders.get(0);
833         assertEquals("/reports/samples", folder.getURIString());
834     }
835
836     private void list() {
837         ResourceLookup[] units = repo.findResource(null, FilterCriteria.createFilter(ReportUnit.class));
838         assertNotNull(units);
839         assertTrue(units.length >= 2);
840     }
841
842     private void resources() {
843         Resource[] resources = repo.findResource(null, null);
844         assertNotNull(resources);
845         assertTrue(resources.length >= 2);
846     }
847
848     private void optimisticLocking() {
849         JndiJdbcReportDataSource ds1 = (JndiJdbcReportDataSource) repo.getResource(null, "/datasources/JServerJNDIDS");
850         ds1.setLabel(ds1.getLabel() + " Updated 1");
851         
852         JndiJdbcReportDataSource ds2 = (JndiJdbcReportDataSource) repo.getResource(null, "/datasources/JServerJNDIDS");
853         ds2.setLabel(ds1.getLabel() + " Updated 2");
854         
855         repo.saveResource(null, ds1);
856         
857         boolean failed = false;
858         try {
859             repo.saveResource(null, ds2);
860         } catch (Exception JavaDoc e) {
861             failed = true;
862         }
863         assertTrue(failed);
864     }
865     
866     
867     public void testLocalResourceReplace() {
868         assertNotNull("Repo not null", repo);
869         
870         Folder folder = new FolderImpl();
871         setCommon(folder, "testLocalResourceReplace");
872         folder.setParentFolder("/");
873         repo.saveFolder(null, folder);
874         
875         ReportUnit unit = (ReportUnit) repo.newResource(null, ReportUnit.class);
876         setCommon(unit, "unit");
877         unit.setParentFolder(folder);
878         
879         FileResource rep = (FileResource) repo.newResource(null, FileResource.class);
880         setCommon(rep, "report");
881         rep.readData(getClass().getResourceAsStream("/reports/jasper/SalesByMonth.jrxml"));
882         unit.setMainReport(rep);
883         
884         JdbcReportDataSource jdbcDS = (JdbcReportDataSource) repo.newResource(null, JdbcReportDataSource.class);
885         setCommon(jdbcDS, "ds");
886         jdbcDS.setConnectionUrl("jdbc:mysql://localhost:3306/jasperserver");
887         jdbcDS.setDriverClass("com.mysql.jdbc.Driver");
888         jdbcDS.setUsername("user");
889         jdbcDS.setPassword("passwd");
890         unit.setDataSource(jdbcDS);
891         
892         repo.saveResource(null, unit);
893         
894         Resource res = repo.getResource(null, "/testLocalResourceReplace/unit");
895         assertNotNull(unit);
896         assertTrue(res instanceof ReportUnit);
897         unit = (ReportUnit) res;
898         ResourceReference dsRef = unit.getDataSource();
899         assertNotNull(dsRef);
900         assertTrue(dsRef.isLocal());
901         Resource ds = dsRef.getLocalResource();
902         assertTrue(ds instanceof JdbcReportDataSource);
903         assertEquals("ds", ds.getName());
904         
905         JndiJdbcReportDataSource jndiDS = (JndiJdbcReportDataSource) repo.newResource(null, JndiJdbcReportDataSource.class);
906         setCommon(jndiDS, "ds");
907         jndiDS.setJndiName("jdbc/jserver");
908         unit.setDataSource(jndiDS);
909         
910         repo.saveResource(null, unit);
911         
912         res = repo.getResource(null, "/testLocalResourceReplace/unit");
913         assertNotNull(unit);
914         assertTrue(res instanceof ReportUnit);
915         unit = (ReportUnit) res;
916         
917         dsRef = unit.getDataSource();
918         assertNotNull(dsRef);
919         assertTrue(dsRef.isLocal());
920         Resource dsLocal = dsRef.getLocalResource();
921         assertEquals("ds", dsLocal.getName());
922         assertTrue(dsLocal instanceof JndiJdbcReportDataSource);
923         jndiDS = (JndiJdbcReportDataSource) dsLocal;
924         assertEquals("jdbc/jserver", jndiDS.getJndiName());
925
926         repo.deleteFolder(null, "/testLocalResourceReplace");
927     }
928 }
929
Popular Tags