1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 package complex.ofopxmlstorages;
23 
24 import com.sun.star.uno.XInterface;
25 import com.sun.star.lang.XMultiServiceFactory;
26 import com.sun.star.lang.XSingleServiceFactory;
27 
28 import com.sun.star.bridge.XUnoUrlResolver;
29 import com.sun.star.uno.UnoRuntime;
30 import com.sun.star.uno.XInterface;
31 
32 import com.sun.star.embed.*;
33 import com.sun.star.beans.StringPair;
34 
35 import share.LogWriter;
36 import complex.ofopxmlstorages.TestHelper;
37 import complex.ofopxmlstorages.StorageTest;
38 
39 public class Test01 implements StorageTest {
40 
41 	XMultiServiceFactory m_xMSF;
42 	XSingleServiceFactory m_xStorageFactory;
43 	TestHelper m_aTestHelper;
44 
Test01( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )45 	public Test01( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
46 	{
47 		m_xMSF = xMSF;
48 		m_xStorageFactory = xStorageFactory;
49 		m_aTestHelper = new TestHelper( aLogWriter, "Test01: " );
50 	}
51 
test()52     public boolean test()
53 	{
54 		StringPair[][] aRelations1 =
55 			{ { new StringPair( "Id", "Num1" ) },
56 			  { new StringPair( "Target", "TargetURLValue1" ), new StringPair( "Id", "Num6" ) },
57 			  { new StringPair( "Target", "" ), new StringPair( "Id", "Num7" ) },
58 			  { new StringPair( "Id", "Num2" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
59 			  { new StringPair( "Id", "Num3" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
60 			  { new StringPair( "Id", "Num4" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
61 			  { new StringPair( "Id", "Num5" ), new StringPair( "TargetMode", "" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value1" ) }
62 			};
63 
64 		StringPair[][] aRelations2 =
65 			{ { new StringPair( "Id", "Num1" ) },
66 			  { new StringPair( "Target", "TargetURLValue2" ), new StringPair( "Id", "Num6" ) },
67 			  { new StringPair( "Target", "" ), new StringPair( "Id", "Num7" ) },
68 			  { new StringPair( "Id", "Num2" ), new StringPair( "TargetMode", "Internal2" ), new StringPair( "Type", "unknown2" ), new StringPair( "Target", "URL value 2" ) },
69 			  { new StringPair( "Id", "Num3" ), new StringPair( "TargetMode", "Internal2" ), new StringPair( "Type", "unknown2" ), new StringPair( "Target", "URL value 2" ) },
70 			  { new StringPair( "Id", "Num4" ), new StringPair( "TargetMode", "Internal2" ), new StringPair( "Type", "unknown" ), new StringPair( "Target", "URL value" ) },
71 			  { new StringPair( "Id", "Num5" ), new StringPair( "TargetMode", "" ), new StringPair( "Type", "unknown" ), new StringPair( "Target", "URL value" ) }
72 			};
73 
74 		try
75 		{
76 			String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
77 			if ( sTempFileURL == null || sTempFileURL == "" )
78 			{
79 				m_aTestHelper.Error( "No valid temporary file was created!" );
80 				return false;
81 			}
82 
83 			// create temporary storage based on arbitrary medium
84 			// after such a storage is closed it is lost
85 			XStorage xTempStorage = m_aTestHelper.createTempStorage( m_xMSF, m_xStorageFactory );
86 			if ( xTempStorage == null )
87 			{
88 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
89 				return false;
90 			}
91 
92 			// open a new substorage
93 			XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
94 																		"SubStorage1",
95 																		ElementModes.WRITE );
96 			if ( xTempSubStorage == null )
97 			{
98 				m_aTestHelper.Error( "Can't create substorage!" );
99 				return false;
100 			}
101 
102 			byte pBytes1[] = { 1, 1, 1, 1, 1 };
103 
104 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
105 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage,
106 														"SubStream1",
107 														"MediaType1",
108 														true,
109 														pBytes1,
110 														aRelations1 ) )
111 				return false;
112 
113 			byte pBytes2[] = { 2, 2, 2, 2, 2 };
114 
115 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
116 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage,
117 														"SubStream2",
118 														"MediaType2",
119 														false,
120 														pBytes2,
121 														aRelations2 ) )
122 				return false;
123 
124 			// set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
125 			if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
126 															true,
127 															ElementModes.WRITE,
128 															aRelations1 ) )
129 				return false;
130 
131 			// set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
132 			if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
133 															false,
134 															ElementModes.WRITE,
135 															aRelations1 ) )
136 				return false;
137 
138 			// create temporary storage based on a previously created temporary file
139 			XStorage xTempFileStorage = m_aTestHelper.createStorageFromURL( m_xStorageFactory,
140 																			sTempFileURL,
141 																			ElementModes.WRITE );
142 			if ( xTempFileStorage == null )
143 			{
144 				m_aTestHelper.Error( "Can't create storage based on temporary file!" );
145 				return false;
146 			}
147 
148 			// copy xTempStorage to xTempFileStorage
149 			// xTempFileStorage will be automatically commited
150 			if ( !m_aTestHelper.copyStorage( xTempStorage, xTempFileStorage ) )
151 				return false;
152 
153 			// dispose used storages to free resources
154 			if ( !m_aTestHelper.disposeStorage( xTempStorage ) || !m_aTestHelper.disposeStorage( xTempFileStorage ) )
155 				return false;
156 
157 			// ================================================
158 			// now check all the written and copied information
159 			// ================================================
160 
161 			// the temporary file must not be locked any more after storage disposing
162 			XStorage xResultStorage = m_aTestHelper.createStorageFromURL( m_xStorageFactory,
163 																			sTempFileURL,
164 																			ElementModes.WRITE );
165 			if ( xResultStorage == null )
166 			{
167 				m_aTestHelper.Error( "Can't reopen storage based on temporary file!" );
168 				return false;
169 			}
170 
171 			if ( !m_aTestHelper.checkStorageProperties( xResultStorage,
172 														true,
173 														ElementModes.WRITE,
174 														aRelations1 ) )
175 				return false;
176 
177 			// open existing substorage
178 			XStorage xResultSubStorage = m_aTestHelper.openSubStorage( xResultStorage,
179 																		"SubStorage1",
180 																		ElementModes.READ );
181 			if ( xResultSubStorage == null )
182 			{
183 				m_aTestHelper.Error( "Can't open existing substorage!" );
184 				return false;
185 			}
186 
187 			if ( !m_aTestHelper.checkStorageProperties( xResultSubStorage,
188 														false,
189 														ElementModes.READ,
190 														aRelations1 ) )
191 				return false;
192 
193 			if ( !m_aTestHelper.checkStream( xResultSubStorage,
194 											"SubStream1",
195 											"MediaType1",
196 											pBytes1,
197 											aRelations1 ) )
198 				return false;
199 
200 			if ( !m_aTestHelper.checkStream( xResultSubStorage,
201 											"SubStream2",
202 											"MediaType2",
203 											pBytes2,
204 											aRelations2 ) )
205 				return false;
206 
207 			// dispose used storages to free resources
208 			if ( !m_aTestHelper.disposeStorage( xResultStorage ) )
209 				return false;
210 
211 			return true;
212 		}
213 		catch( Exception e )
214 		{
215 			m_aTestHelper.Error( "Exception: " + e );
216 			return false;
217 		}
218     }
219 
220 }
221 
222