1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski package storagetesting;
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
25*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory;
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XUnoUrlResolver;
29*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
30*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski import com.sun.star.lang.IllegalArgumentException;
33*b1cdbd2cSJim Jagielski import com.sun.star.container.NoSuchElementException;
34*b1cdbd2cSJim Jagielski import com.sun.star.container.ElementExistException;
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski import com.sun.star.embed.*;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski import storagetesting.TestHelper;
39*b1cdbd2cSJim Jagielski import storagetesting.StorageTest;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski public class Test06 implements StorageTest {
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 	XMultiServiceFactory m_xMSF;
44*b1cdbd2cSJim Jagielski 	XSingleServiceFactory m_xStorageFactory;
45*b1cdbd2cSJim Jagielski 	TestHelper m_aTestHelper;
46*b1cdbd2cSJim Jagielski 
Test06( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory )47*b1cdbd2cSJim Jagielski 	public Test06( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory )
48*b1cdbd2cSJim Jagielski 	{
49*b1cdbd2cSJim Jagielski 		m_xMSF = xMSF;
50*b1cdbd2cSJim Jagielski 		m_xStorageFactory = xStorageFactory;
51*b1cdbd2cSJim Jagielski 		m_aTestHelper = new TestHelper( "Test06: " );
52*b1cdbd2cSJim Jagielski 	}
53*b1cdbd2cSJim Jagielski 
test()54*b1cdbd2cSJim Jagielski     public boolean test()
55*b1cdbd2cSJim Jagielski 	{
56*b1cdbd2cSJim Jagielski 		try
57*b1cdbd2cSJim Jagielski 		{
58*b1cdbd2cSJim Jagielski 			// create temporary storage based on arbitrary medium
59*b1cdbd2cSJim Jagielski 			// after such a storage is closed it is lost
60*b1cdbd2cSJim Jagielski 			Object oTempStorage = m_xStorageFactory.createInstance();
61*b1cdbd2cSJim Jagielski 			XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
62*b1cdbd2cSJim Jagielski 			if ( xTempStorage == null )
63*b1cdbd2cSJim Jagielski 			{
64*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
65*b1cdbd2cSJim Jagielski 				return false;
66*b1cdbd2cSJim Jagielski 			}
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski 			try
69*b1cdbd2cSJim Jagielski 			{
70*b1cdbd2cSJim Jagielski 				xTempStorage.copyToStorage( null );
71*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "The method must throw an exception because of illegal parameter!" );
72*b1cdbd2cSJim Jagielski 				return false;
73*b1cdbd2cSJim Jagielski 			}
74*b1cdbd2cSJim Jagielski 			catch( com.sun.star.lang.IllegalArgumentException iae )
75*b1cdbd2cSJim Jagielski 			{}
76*b1cdbd2cSJim Jagielski 			catch( com.sun.star.uno.Exception ue )
77*b1cdbd2cSJim Jagielski 			{}
78*b1cdbd2cSJim Jagielski 			catch( Exception e )
79*b1cdbd2cSJim Jagielski 			{
80*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion because of illegal parameter : " + e );
81*b1cdbd2cSJim Jagielski 				return false;
82*b1cdbd2cSJim Jagielski 			}
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 			// open new substorages
85*b1cdbd2cSJim Jagielski 			XStorage xTempSubStorage1 = m_aTestHelper.openSubStorage( xTempStorage,
86*b1cdbd2cSJim Jagielski 																	"SubStorage1",
87*b1cdbd2cSJim Jagielski 																	ElementModes.ELEMENT_WRITE );
88*b1cdbd2cSJim Jagielski 			XStorage xTempSubStorage2 = m_aTestHelper.openSubStorage( xTempStorage,
89*b1cdbd2cSJim Jagielski 																	"SubStorage2",
90*b1cdbd2cSJim Jagielski 																	ElementModes.ELEMENT_WRITE );
91*b1cdbd2cSJim Jagielski 			if ( xTempSubStorage1 == null || xTempSubStorage2 == null )
92*b1cdbd2cSJim Jagielski 			{
93*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can't create substorage!" );
94*b1cdbd2cSJim Jagielski 				return false;
95*b1cdbd2cSJim Jagielski 			}
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 			// in case stream is open for reading it must exist
98*b1cdbd2cSJim Jagielski 			try
99*b1cdbd2cSJim Jagielski 			{
100*b1cdbd2cSJim Jagielski 				xTempSubStorage1.openStreamElement( "NonExistingStream", ElementModes.ELEMENT_READ );
101*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "The method must throw an exception in case of try to open nonexistent stream for reading!" );
102*b1cdbd2cSJim Jagielski 				return false;
103*b1cdbd2cSJim Jagielski 			}
104*b1cdbd2cSJim Jagielski 			catch( com.sun.star.uno.Exception ue )
105*b1cdbd2cSJim Jagielski 			{}
106*b1cdbd2cSJim Jagielski 			catch( Exception e )
107*b1cdbd2cSJim Jagielski 			{
108*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of try to open nonexistent stream for reading : " + e );
109*b1cdbd2cSJim Jagielski 				return false;
110*b1cdbd2cSJim Jagielski 			}
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 			// in case a storage is open for reading it must exist
113*b1cdbd2cSJim Jagielski 			try
114*b1cdbd2cSJim Jagielski 			{
115*b1cdbd2cSJim Jagielski 				xTempSubStorage1.openStreamElement( "NonExistingStorage", ElementModes.ELEMENT_READ );
116*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "The method must throw an exception in case of try to open nonexistent storage for reading!" );
117*b1cdbd2cSJim Jagielski 				return false;
118*b1cdbd2cSJim Jagielski 			}
119*b1cdbd2cSJim Jagielski 			catch( com.sun.star.uno.Exception ue )
120*b1cdbd2cSJim Jagielski 			{}
121*b1cdbd2cSJim Jagielski 			catch( Exception e )
122*b1cdbd2cSJim Jagielski 			{
123*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of try to open nonexistent storage for reading : " + e );
124*b1cdbd2cSJim Jagielski 				return false;
125*b1cdbd2cSJim Jagielski 			}
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 			// in case of removing nonexistent element an exception must be thrown
128*b1cdbd2cSJim Jagielski 			try
129*b1cdbd2cSJim Jagielski 			{
130*b1cdbd2cSJim Jagielski 				xTempSubStorage1.removeElement( "NonExistingElement" );
131*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case of removing nonexistent element!" );
132*b1cdbd2cSJim Jagielski 				return false;
133*b1cdbd2cSJim Jagielski 			}
134*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.NoSuchElementException ne )
135*b1cdbd2cSJim Jagielski 			{}
136*b1cdbd2cSJim Jagielski 			catch( Exception e )
137*b1cdbd2cSJim Jagielski 			{
138*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of try to remove nonexistent element : " + e );
139*b1cdbd2cSJim Jagielski 				return false;
140*b1cdbd2cSJim Jagielski 			}
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 			// in case of renaming of nonexistent element an exception must be thrown
143*b1cdbd2cSJim Jagielski 			try
144*b1cdbd2cSJim Jagielski 			{
145*b1cdbd2cSJim Jagielski 				xTempSubStorage1.renameElement( "NonExistingElement", "NewName" );
146*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case of renaming nonexistent element!" );
147*b1cdbd2cSJim Jagielski 				return false;
148*b1cdbd2cSJim Jagielski 			}
149*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.NoSuchElementException ne )
150*b1cdbd2cSJim Jagielski 			{}
151*b1cdbd2cSJim Jagielski 			catch( Exception e )
152*b1cdbd2cSJim Jagielski 			{
153*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of try to rename nonexistent element : " + e );
154*b1cdbd2cSJim Jagielski 				return false;
155*b1cdbd2cSJim Jagielski 			}
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 			// in case of renaming to a name of existent element an exception must be thrown
158*b1cdbd2cSJim Jagielski 			try
159*b1cdbd2cSJim Jagielski 			{
160*b1cdbd2cSJim Jagielski 				xTempStorage.renameElement( "SubStorage1", "SubStorage2" );
161*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case of renaming to the name of existent element!" );
162*b1cdbd2cSJim Jagielski 				return false;
163*b1cdbd2cSJim Jagielski 			}
164*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.ElementExistException ee )
165*b1cdbd2cSJim Jagielski 			{}
166*b1cdbd2cSJim Jagielski 			catch( Exception e )
167*b1cdbd2cSJim Jagielski 			{
168*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of try to rename to the name of existent element : " + e );
169*b1cdbd2cSJim Jagielski 				return false;
170*b1cdbd2cSJim Jagielski 			}
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 			// in case of copying target storage must be provided
173*b1cdbd2cSJim Jagielski 			try
174*b1cdbd2cSJim Jagielski 			{
175*b1cdbd2cSJim Jagielski 				xTempStorage.copyElementTo( "SubStorage1", null, "SubStorage1" );
176*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case empty reference is provided as target for copying!" );
177*b1cdbd2cSJim Jagielski 				return false;
178*b1cdbd2cSJim Jagielski 			}
179*b1cdbd2cSJim Jagielski 			catch( com.sun.star.lang.IllegalArgumentException iae )
180*b1cdbd2cSJim Jagielski 			{}
181*b1cdbd2cSJim Jagielski 			catch( com.sun.star.uno.Exception ue )
182*b1cdbd2cSJim Jagielski 			{}
183*b1cdbd2cSJim Jagielski 			catch( Exception e )
184*b1cdbd2cSJim Jagielski 			{
185*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case empty reference is provieded as target for copying : " + e );
186*b1cdbd2cSJim Jagielski 				return false;
187*b1cdbd2cSJim Jagielski 			}
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 			// in case of moving target storage must be provided
190*b1cdbd2cSJim Jagielski 			try
191*b1cdbd2cSJim Jagielski 			{
192*b1cdbd2cSJim Jagielski 				xTempStorage.moveElementTo( "SubStorage1", null, "SubStorage1" );
193*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case empty reference is provided as target for moving!" );
194*b1cdbd2cSJim Jagielski 				return false;
195*b1cdbd2cSJim Jagielski 			}
196*b1cdbd2cSJim Jagielski 			catch( com.sun.star.lang.IllegalArgumentException iae )
197*b1cdbd2cSJim Jagielski 			{}
198*b1cdbd2cSJim Jagielski 			catch( com.sun.star.uno.Exception ue )
199*b1cdbd2cSJim Jagielski 			{}
200*b1cdbd2cSJim Jagielski 			catch( Exception e )
201*b1cdbd2cSJim Jagielski 			{
202*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case empty reference is provieded as target for moving : " + e );
203*b1cdbd2cSJim Jagielski 				return false;
204*b1cdbd2cSJim Jagielski 			}
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 			// prepare target for further testings
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 			// create new temporary storage based on arbitrary medium
210*b1cdbd2cSJim Jagielski 			Object oTargetStorage = m_xStorageFactory.createInstance();
211*b1cdbd2cSJim Jagielski 			XStorage xTargetStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTargetStorage );
212*b1cdbd2cSJim Jagielski 			if ( xTargetStorage == null )
213*b1cdbd2cSJim Jagielski 			{
214*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
215*b1cdbd2cSJim Jagielski 				return false;
216*b1cdbd2cSJim Jagielski 			}
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 			// open a new substorage
219*b1cdbd2cSJim Jagielski 			XStorage xTargetSubStorage = m_aTestHelper.openSubStorage( xTargetStorage,
220*b1cdbd2cSJim Jagielski 																	"SubStorage1",
221*b1cdbd2cSJim Jagielski 																	ElementModes.ELEMENT_WRITE );
222*b1cdbd2cSJim Jagielski 			if ( xTargetSubStorage == null )
223*b1cdbd2cSJim Jagielski 			{
224*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can't create substorage!" );
225*b1cdbd2cSJim Jagielski 				return false;
226*b1cdbd2cSJim Jagielski 			}
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 			// in case of copying of nonexistent element an exception must be thrown
229*b1cdbd2cSJim Jagielski 			try
230*b1cdbd2cSJim Jagielski 			{
231*b1cdbd2cSJim Jagielski 				xTempStorage.copyElementTo( "Nonexistent element", xTargetStorage, "Target" );
232*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case of copying of nonexisting element!" );
233*b1cdbd2cSJim Jagielski 				return false;
234*b1cdbd2cSJim Jagielski 			}
235*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.NoSuchElementException ne )
236*b1cdbd2cSJim Jagielski 			{}
237*b1cdbd2cSJim Jagielski 			catch( Exception e )
238*b1cdbd2cSJim Jagielski 			{
239*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of copying of nonexistent element: " + e );
240*b1cdbd2cSJim Jagielski 				return false;
241*b1cdbd2cSJim Jagielski 			}
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 			// in case of moving of nonexistent element an exception must be thrown
244*b1cdbd2cSJim Jagielski 			try
245*b1cdbd2cSJim Jagielski 			{
246*b1cdbd2cSJim Jagielski 				xTempStorage.moveElementTo( "Nonexistent element", xTargetStorage, "Target" );
247*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case of moving of nonexisting element!" );
248*b1cdbd2cSJim Jagielski 				return false;
249*b1cdbd2cSJim Jagielski 			}
250*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.NoSuchElementException ne )
251*b1cdbd2cSJim Jagielski 			{}
252*b1cdbd2cSJim Jagielski 			catch( Exception e )
253*b1cdbd2cSJim Jagielski 			{
254*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case of moving of nonexistent element: " + e );
255*b1cdbd2cSJim Jagielski 				return false;
256*b1cdbd2cSJim Jagielski 			}
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 			// in case target for copying already exists an exception must be thrown
259*b1cdbd2cSJim Jagielski 			try
260*b1cdbd2cSJim Jagielski 			{
261*b1cdbd2cSJim Jagielski 				xTempStorage.copyElementTo( "SubStorage1", xTargetStorage, "SubStorage1" );
262*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case target for copying already exists!" );
263*b1cdbd2cSJim Jagielski 				return false;
264*b1cdbd2cSJim Jagielski 			}
265*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.ElementExistException ee )
266*b1cdbd2cSJim Jagielski 			{}
267*b1cdbd2cSJim Jagielski 			catch( Exception e )
268*b1cdbd2cSJim Jagielski 			{
269*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case target for copying already exists: " + e );
270*b1cdbd2cSJim Jagielski 				return false;
271*b1cdbd2cSJim Jagielski 			}
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 			// in case target for moving already exists an exception must be thrown
274*b1cdbd2cSJim Jagielski 			try
275*b1cdbd2cSJim Jagielski 			{
276*b1cdbd2cSJim Jagielski 				xTempStorage.moveElementTo( "SubStorage1", xTargetStorage, "SubStorage1" );
277*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "An exception must be thrown in case target for moving already exists!" );
278*b1cdbd2cSJim Jagielski 				return false;
279*b1cdbd2cSJim Jagielski 			}
280*b1cdbd2cSJim Jagielski 			catch( com.sun.star.container.ElementExistException ee )
281*b1cdbd2cSJim Jagielski 			{}
282*b1cdbd2cSJim Jagielski 			catch( Exception e )
283*b1cdbd2cSJim Jagielski 			{
284*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Unexpected excepion in case target for moving already exists: " + e );
285*b1cdbd2cSJim Jagielski 				return false;
286*b1cdbd2cSJim Jagielski 			}
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 			return true;
290*b1cdbd2cSJim Jagielski 		}
291*b1cdbd2cSJim Jagielski 		catch( Exception e )
292*b1cdbd2cSJim Jagielski 		{
293*b1cdbd2cSJim Jagielski 			m_aTestHelper.Error( "Exception: " + e );
294*b1cdbd2cSJim Jagielski 			return false;
295*b1cdbd2cSJim Jagielski 		}
296*b1cdbd2cSJim Jagielski     }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski }
299*b1cdbd2cSJim Jagielski 
300