xref: /trunk/main/odk/examples/java/Storage/Test03.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 package storagetesting;
2 
3 import com.sun.star.uno.XInterface;
4 import com.sun.star.lang.XMultiServiceFactory;
5 import com.sun.star.lang.XSingleServiceFactory;
6 
7 import com.sun.star.bridge.XUnoUrlResolver;
8 import com.sun.star.uno.UnoRuntime;
9 import com.sun.star.uno.XInterface;
10 
11 import com.sun.star.embed.*;
12 import com.sun.star.container.XNameAccess;
13 
14 import storagetesting.TestHelper;
15 import storagetesting.StorageTest;
16 
17 public class Test03 implements StorageTest {
18 
19     XMultiServiceFactory m_xMSF;
20     XSingleServiceFactory m_xStorageFactory;
21     TestHelper m_aTestHelper;
22 
23     public Test03( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory )
24     {
25         m_xMSF = xMSF;
26         m_xStorageFactory = xStorageFactory;
27         m_aTestHelper = new TestHelper( "Test03: " );
28     }
29 
30     public boolean test()
31     {
32         try
33         {
34             // create temporary storage based on arbitrary medium
35             // after such a storage is closed it is lost
36             Object oTempStorage = m_xStorageFactory.createInstance();
37             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
38             if ( xTempStorage == null )
39             {
40                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
41                 return false;
42             }
43 
44             // open a new substorage
45             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
46                                                                         "SubStorage1",
47                                                                         ElementModes.ELEMENT_WRITE );
48             if ( xTempSubStorage == null )
49             {
50                 m_aTestHelper.Error( "Can't create substorage!" );
51                 return false;
52             }
53 
54             byte pBytes1[] = { 1, 1, 1, 1, 1 };
55 
56             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
57             if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
58                 return false;
59 
60             byte pBytes2[] = { 2, 2, 2, 2, 2 };
61 
62             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
63             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", false, pBytes2 ) )
64                 return false;
65 
66             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
67             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
68                                                             "MediaType3",
69                                                             false,
70                                                             ElementModes.ELEMENT_WRITE ) )
71                 return false;
72 
73             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
74                 return false;
75 
76             if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
77                 return false;
78 
79             // ================================================
80             // check storage hyerarchy tree
81             // ================================================
82 
83             // check that isStorageElement() and isStreamElement reacts to nonexisting object correctly
84             try {
85                 xTempStorage.isStorageElement( "does not exist" );
86                 m_aTestHelper.Error( "Nonexisting element doesn't detected by isStorageElement() call!" );
87                 return false;
88             }
89             catch( com.sun.star.container.NoSuchElementException ne )
90             {
91             }
92             catch( Exception e )
93             {
94                 m_aTestHelper.Error( "Wrong exception is thrown by isStorageElement() call: " + e );
95                 return false;
96             }
97 
98             try {
99                 xTempStorage.isStreamElement( "does not exist" );
100                 m_aTestHelper.Error( "Nonexisting element doesn't detected by isStreamElement() call!" );
101                 return false;
102             }
103             catch( com.sun.star.container.NoSuchElementException ne )
104             {
105             }
106             catch( Exception e )
107             {
108                 m_aTestHelper.Error( "Wrong exception is thrown by isStreamElement() call: " + e );
109                 return false;
110             }
111 
112             XNameAccess xRootNameAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xTempStorage );
113             if ( xRootNameAccess == null )
114             {
115                 m_aTestHelper.Error( "Root storage doesn't support XNameAccess!" );
116                 return false;
117             }
118 
119             try {
120                 if ( !xTempStorage.isStorageElement( "SubStorage1" ) || xTempStorage.isStreamElement( "SubStorage1" ) )
121                 {
122                     m_aTestHelper.Error( "Child 'SubStorage1' can not be detected as storage!" );
123                     return false;
124                 }
125 
126                 if ( xTempStorage.isStorageElement( "SubStream1" ) || !xTempStorage.isStreamElement( "SubStream1" ) )
127                 {
128                     m_aTestHelper.Error( "Child 'SubStream1' can not be detected as stream!" );
129                     return false;
130                 }
131             }
132             catch( Exception e )
133             {
134                 m_aTestHelper.Error( "Child's type can not be detected, exception: " + e );
135                 return false;
136             }
137 
138 
139             // check that root storage contents are represented correctly
140             String sRootCont[] = xRootNameAccess.getElementNames();
141 
142             if ( sRootCont.length != 2 )
143             {
144                 m_aTestHelper.Error( "Root storage contains wrong amount of children!" );
145                 return false;
146             }
147 
148             if ( !( sRootCont[0].equals( "SubStorage1" ) && sRootCont[1].equals( "SubStream1" )
149                  || sRootCont[0].equals( "SubStream1" ) && sRootCont[1].equals( "SubStorage1" ) )
150               || !( xRootNameAccess.hasByName( "SubStream1" ) && xRootNameAccess.hasByName( "SubStorage1" ) ) )
151             {
152                 m_aTestHelper.Error( "Root storage contains wrong list of children!" );
153                 return false;
154             }
155 
156             // get storage through XNameAccess
157             XStorage xResultSubStorage = getStorageFromNameAccess( xRootNameAccess, "SubStorage1" );
158             if ( xResultSubStorage == null )
159                 return false;
160 
161             if ( !m_aTestHelper.checkStorageProperties( xResultSubStorage, "MediaType3", false, ElementModes.ELEMENT_READ ) )
162                 return false;
163 
164             XNameAccess xChildAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xResultSubStorage );
165             if ( xChildAccess == null )
166             {
167                 m_aTestHelper.Error( "Child storage doesn't support XNameAccess!" );
168                 return false;
169             }
170 
171             if ( !xChildAccess.hasByName( "SubStream2" )
172               || !xResultSubStorage.isStreamElement( "SubStream2" )
173               || xResultSubStorage.isStorageElement( "SubStream2" ) )
174             {
175                 m_aTestHelper.Error( "'SubStream2' can not be detected as child stream element of 'SubStorage1'!" );
176                 return false;
177             }
178 
179             return true;
180         }
181         catch( Exception e )
182         {
183             m_aTestHelper.Error( "Exception: " + e );
184             return false;
185         }
186     }
187 
188     public XStorage getStorageFromNameAccess( XNameAccess xAccess, String sName )
189     {
190         try
191         {
192             Object oStorage = xAccess.getByName( sName );
193             XStorage xResult = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStorage );
194 
195             if ( xResult != null )
196                 return xResult;
197             else
198                 m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess!" );
199         }
200         catch( Exception e )
201         {
202             m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess, exception: " + e );
203         }
204 
205         return null;
206     }
207 
208 }
209 
210