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.lang.IllegalArgumentException;
12 import com.sun.star.container.NoSuchElementException;
13 import com.sun.star.container.ElementExistException;
14 
15 import com.sun.star.embed.*;
16 
17 import storagetesting.TestHelper;
18 import storagetesting.StorageTest;
19 
20 public class Test06 implements StorageTest {
21 
22 	XMultiServiceFactory m_xMSF;
23 	XSingleServiceFactory m_xStorageFactory;
24 	TestHelper m_aTestHelper;
25 
26 	public Test06( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory )
27 	{
28 		m_xMSF = xMSF;
29 		m_xStorageFactory = xStorageFactory;
30 		m_aTestHelper = new TestHelper( "Test06: " );
31 	}
32 
33     public boolean test()
34 	{
35 		try
36 		{
37 			// create temporary storage based on arbitrary medium
38 			// after such a storage is closed it is lost
39 			Object oTempStorage = m_xStorageFactory.createInstance();
40 			XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
41 			if ( xTempStorage == null )
42 			{
43 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
44 				return false;
45 			}
46 
47 			try
48 			{
49 				xTempStorage.copyToStorage( null );
50 				m_aTestHelper.Error( "The method must throw an exception because of illegal parameter!" );
51 				return false;
52 			}
53 			catch( com.sun.star.lang.IllegalArgumentException iae )
54 			{}
55 			catch( com.sun.star.uno.Exception ue )
56 			{}
57 			catch( Exception e )
58 			{
59 				m_aTestHelper.Error( "Unexpected excepion because of illegal parameter : " + e );
60 				return false;
61 			}
62 
63 			// open new substorages
64 			XStorage xTempSubStorage1 = m_aTestHelper.openSubStorage( xTempStorage,
65 																	"SubStorage1",
66 																	ElementModes.ELEMENT_WRITE );
67 			XStorage xTempSubStorage2 = m_aTestHelper.openSubStorage( xTempStorage,
68 																	"SubStorage2",
69 																	ElementModes.ELEMENT_WRITE );
70 			if ( xTempSubStorage1 == null || xTempSubStorage2 == null )
71 			{
72 				m_aTestHelper.Error( "Can't create substorage!" );
73 				return false;
74 			}
75 
76 			// in case stream is open for reading it must exist
77 			try
78 			{
79 				xTempSubStorage1.openStreamElement( "NonExistingStream", ElementModes.ELEMENT_READ );
80 				m_aTestHelper.Error( "The method must throw an exception in case of try to open nonexistent stream for reading!" );
81 				return false;
82 			}
83 			catch( com.sun.star.uno.Exception ue )
84 			{}
85 			catch( Exception e )
86 			{
87 				m_aTestHelper.Error( "Unexpected excepion in case of try to open nonexistent stream for reading : " + e );
88 				return false;
89 			}
90 
91 			// in case a storage is open for reading it must exist
92 			try
93 			{
94 				xTempSubStorage1.openStreamElement( "NonExistingStorage", ElementModes.ELEMENT_READ );
95 				m_aTestHelper.Error( "The method must throw an exception in case of try to open nonexistent storage for reading!" );
96 				return false;
97 			}
98 			catch( com.sun.star.uno.Exception ue )
99 			{}
100 			catch( Exception e )
101 			{
102 				m_aTestHelper.Error( "Unexpected excepion in case of try to open nonexistent storage for reading : " + e );
103 				return false;
104 			}
105 
106 			// in case of removing nonexistent element an exception must be thrown
107 			try
108 			{
109 				xTempSubStorage1.removeElement( "NonExistingElement" );
110 				m_aTestHelper.Error( "An exception must be thrown in case of removing nonexistent element!" );
111 				return false;
112 			}
113 			catch( com.sun.star.container.NoSuchElementException ne )
114 			{}
115 			catch( Exception e )
116 			{
117 				m_aTestHelper.Error( "Unexpected excepion in case of try to remove nonexistent element : " + e );
118 				return false;
119 			}
120 
121 			// in case of renaming of nonexistent element an exception must be thrown
122 			try
123 			{
124 				xTempSubStorage1.renameElement( "NonExistingElement", "NewName" );
125 				m_aTestHelper.Error( "An exception must be thrown in case of renaming nonexistent element!" );
126 				return false;
127 			}
128 			catch( com.sun.star.container.NoSuchElementException ne )
129 			{}
130 			catch( Exception e )
131 			{
132 				m_aTestHelper.Error( "Unexpected excepion in case of try to rename nonexistent element : " + e );
133 				return false;
134 			}
135 
136 			// in case of renaming to a name of existent element an exception must be thrown
137 			try
138 			{
139 				xTempStorage.renameElement( "SubStorage1", "SubStorage2" );
140 				m_aTestHelper.Error( "An exception must be thrown in case of renaming to the name of existent element!" );
141 				return false;
142 			}
143 			catch( com.sun.star.container.ElementExistException ee )
144 			{}
145 			catch( Exception e )
146 			{
147 				m_aTestHelper.Error( "Unexpected excepion in case of try to rename to the name of existent element : " + e );
148 				return false;
149 			}
150 
151 			// in case of copying target storage must be provided
152 			try
153 			{
154 				xTempStorage.copyElementTo( "SubStorage1", null, "SubStorage1" );
155 				m_aTestHelper.Error( "An exception must be thrown in case empty reference is provided as target for copying!" );
156 				return false;
157 			}
158 			catch( com.sun.star.lang.IllegalArgumentException iae )
159 			{}
160 			catch( com.sun.star.uno.Exception ue )
161 			{}
162 			catch( Exception e )
163 			{
164 				m_aTestHelper.Error( "Unexpected excepion in case empty reference is provieded as target for copying : " + e );
165 				return false;
166 			}
167 
168 			// in case of moving target storage must be provided
169 			try
170 			{
171 				xTempStorage.moveElementTo( "SubStorage1", null, "SubStorage1" );
172 				m_aTestHelper.Error( "An exception must be thrown in case empty reference is provided as target for moving!" );
173 				return false;
174 			}
175 			catch( com.sun.star.lang.IllegalArgumentException iae )
176 			{}
177 			catch( com.sun.star.uno.Exception ue )
178 			{}
179 			catch( Exception e )
180 			{
181 				m_aTestHelper.Error( "Unexpected excepion in case empty reference is provieded as target for moving : " + e );
182 				return false;
183 			}
184 
185 
186 			// prepare target for further testings
187 
188 			// create new temporary storage based on arbitrary medium
189 			Object oTargetStorage = m_xStorageFactory.createInstance();
190 			XStorage xTargetStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTargetStorage );
191 			if ( xTargetStorage == null )
192 			{
193 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
194 				return false;
195 			}
196 
197 			// open a new substorage
198 			XStorage xTargetSubStorage = m_aTestHelper.openSubStorage( xTargetStorage,
199 																	"SubStorage1",
200 																	ElementModes.ELEMENT_WRITE );
201 			if ( xTargetSubStorage == null )
202 			{
203 				m_aTestHelper.Error( "Can't create substorage!" );
204 				return false;
205 			}
206 
207 			// in case of copying of nonexistent element an exception must be thrown
208 			try
209 			{
210 				xTempStorage.copyElementTo( "Nonexistent element", xTargetStorage, "Target" );
211 				m_aTestHelper.Error( "An exception must be thrown in case of copying of nonexisting element!" );
212 				return false;
213 			}
214 			catch( com.sun.star.container.NoSuchElementException ne )
215 			{}
216 			catch( Exception e )
217 			{
218 				m_aTestHelper.Error( "Unexpected excepion in case of copying of nonexistent element: " + e );
219 				return false;
220 			}
221 
222 			// in case of moving of nonexistent element an exception must be thrown
223 			try
224 			{
225 				xTempStorage.moveElementTo( "Nonexistent element", xTargetStorage, "Target" );
226 				m_aTestHelper.Error( "An exception must be thrown in case of moving of nonexisting element!" );
227 				return false;
228 			}
229 			catch( com.sun.star.container.NoSuchElementException ne )
230 			{}
231 			catch( Exception e )
232 			{
233 				m_aTestHelper.Error( "Unexpected excepion in case of moving of nonexistent element: " + e );
234 				return false;
235 			}
236 
237 			// in case target for copying already exists an exception must be thrown
238 			try
239 			{
240 				xTempStorage.copyElementTo( "SubStorage1", xTargetStorage, "SubStorage1" );
241 				m_aTestHelper.Error( "An exception must be thrown in case target for copying already exists!" );
242 				return false;
243 			}
244 			catch( com.sun.star.container.ElementExistException ee )
245 			{}
246 			catch( Exception e )
247 			{
248 				m_aTestHelper.Error( "Unexpected excepion in case target for copying already exists: " + e );
249 				return false;
250 			}
251 
252 			// in case target for moving already exists an exception must be thrown
253 			try
254 			{
255 				xTempStorage.moveElementTo( "SubStorage1", xTargetStorage, "SubStorage1" );
256 				m_aTestHelper.Error( "An exception must be thrown in case target for moving already exists!" );
257 				return false;
258 			}
259 			catch( com.sun.star.container.ElementExistException ee )
260 			{}
261 			catch( Exception e )
262 			{
263 				m_aTestHelper.Error( "Unexpected excepion in case target for moving already exists: " + e );
264 				return false;
265 			}
266 
267 
268 			return true;
269 		}
270 		catch( Exception e )
271 		{
272 			m_aTestHelper.Error( "Exception: " + e );
273 			return false;
274 		}
275     }
276 
277 }
278 
279