1b191c303SAndrew Rist /**************************************************************
2b191c303SAndrew Rist  *
3b191c303SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b191c303SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b191c303SAndrew Rist  * distributed with this work for additional information
6b191c303SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b191c303SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b191c303SAndrew Rist  * "License"); you may not use this file except in compliance
9b191c303SAndrew Rist  * with the License.  You may obtain a copy of the License at
10b191c303SAndrew Rist  *
11b191c303SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12b191c303SAndrew Rist  *
13b191c303SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b191c303SAndrew Rist  * software distributed under the License is distributed on an
15b191c303SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b191c303SAndrew Rist  * KIND, either express or implied.  See the License for the
17b191c303SAndrew Rist  * specific language governing permissions and limitations
18b191c303SAndrew Rist  * under the License.
19b191c303SAndrew Rist  *
20b191c303SAndrew Rist  *************************************************************/
21b191c303SAndrew Rist 
22cdf0e10cSrcweir package complex.olesimplestorage;
23cdf0e10cSrcweir 
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
27cdf0e10cSrcweir import com.sun.star.io.XInputStream;
28cdf0e10cSrcweir import com.sun.star.io.XOutputStream;
29cdf0e10cSrcweir import com.sun.star.io.XTempFile;
30cdf0e10cSrcweir import com.sun.star.embed.XOLESimpleStorage;
31cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
32cdf0e10cSrcweir 
33cdf0e10cSrcweir import java.util.Random;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir public class Test01 implements OLESimpleStorageTest
37cdf0e10cSrcweir {
38cdf0e10cSrcweir     XMultiServiceFactory m_xMSF = null;
39cdf0e10cSrcweir     TestHelper m_aTestHelper = null;
40cdf0e10cSrcweir     final int pStreamCnt = 5;
41cdf0e10cSrcweir     final int pBytesCnt = 10;
42cdf0e10cSrcweir 
Test01( XMultiServiceFactory xMSF )43cdf0e10cSrcweir     public Test01 ( XMultiServiceFactory xMSF )
44cdf0e10cSrcweir     {
45cdf0e10cSrcweir         m_xMSF = xMSF;
46cdf0e10cSrcweir         m_aTestHelper = new TestHelper ("Test01: ");
47cdf0e10cSrcweir     }
48cdf0e10cSrcweir 
test()49cdf0e10cSrcweir     public boolean test ()
50cdf0e10cSrcweir     {
51cdf0e10cSrcweir         try
52cdf0e10cSrcweir         {
53cdf0e10cSrcweir             //create a new temporary stream
54cdf0e10cSrcweir             Object oTempFile = m_xMSF.createInstance ( "com.sun.star.io.TempFile" );
55cdf0e10cSrcweir             XTempFile xTempFile = UnoRuntime.queryInterface(XTempFile.class, oTempFile);
56cdf0e10cSrcweir             m_aTestHelper.Message ( "A new temporary stream created." );
57cdf0e10cSrcweir 
58cdf0e10cSrcweir             //create OLESimpleStorage based on it
59cdf0e10cSrcweir             Object pArgs[] = new Object[2];
60cdf0e10cSrcweir             pArgs[0] = (Object) xTempFile;
61cdf0e10cSrcweir             pArgs[1] = new Boolean( true );
62cdf0e10cSrcweir             Object oOLESimpleStorage = m_xMSF.createInstanceWithArguments ( "com.sun.star.embed.OLESimpleStorage", pArgs );
63cdf0e10cSrcweir             XOLESimpleStorage xOLESimpleStorage = UnoRuntime.queryInterface(XOLESimpleStorage.class, oOLESimpleStorage);
64cdf0e10cSrcweir             m_aTestHelper.Message ( "OLESimpleStorage based on XStream created." );
65cdf0e10cSrcweir 
66cdf0e10cSrcweir             //fill it with some streams
67cdf0e10cSrcweir             Object oStream[] = new Object[pStreamCnt];
68cdf0e10cSrcweir             byte pBytesIn[][][] = new byte [pStreamCnt][1][pBytesCnt];
69cdf0e10cSrcweir             byte pBytesOut[][] = new byte [pStreamCnt][pBytesCnt];
70cdf0e10cSrcweir             XTempFile xTempStream[] = new XTempFile[pStreamCnt];
71cdf0e10cSrcweir             Random oRandom = new Random ();
72cdf0e10cSrcweir             final String sSubStreamPrefix = "SubStream";
73cdf0e10cSrcweir             for ( int i = 0; i < pStreamCnt; i++ )
74cdf0e10cSrcweir             {
75cdf0e10cSrcweir                 oRandom.nextBytes (pBytesOut[i]);
76cdf0e10cSrcweir                 oStream[i] = m_xMSF.createInstance ( "com.sun.star.io.TempFile" );
77cdf0e10cSrcweir                 xTempStream[i] = UnoRuntime.queryInterface(XTempFile.class, oStream[i]);
78cdf0e10cSrcweir                 xTempStream[i].getOutputStream ().writeBytes (pBytesOut[i]);
79cdf0e10cSrcweir                 xTempStream[i].seek (0);
80cdf0e10cSrcweir                 m_aTestHelper.Message ( "Substream " + i + " initialized." );
81cdf0e10cSrcweir                 if (xOLESimpleStorage.hasByName (sSubStreamPrefix + i))
82cdf0e10cSrcweir                 {
83cdf0e10cSrcweir                     xOLESimpleStorage.replaceByName ( sSubStreamPrefix + i, xTempStream[i] );
84cdf0e10cSrcweir                 }
85cdf0e10cSrcweir                 else
86cdf0e10cSrcweir                 {
87cdf0e10cSrcweir                     xOLESimpleStorage.insertByName ( sSubStreamPrefix + i, xTempStream[i] );
88cdf0e10cSrcweir                     m_aTestHelper.Message ( "Substream " + i + " inserted." );
89cdf0e10cSrcweir                 }
90cdf0e10cSrcweir             }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir             //commit the storage and close it
93cdf0e10cSrcweir             xOLESimpleStorage.commit ();
94*86e1cf34SPedro Giffuni             m_aTestHelper.Message ( "Storage committed." );
95cdf0e10cSrcweir             xOLESimpleStorage.dispose ();
96cdf0e10cSrcweir             for ( int i = 0; i < pStreamCnt; ++i )
97cdf0e10cSrcweir             {
98cdf0e10cSrcweir                 xTempStream[i].setRemoveFile ( true );
99cdf0e10cSrcweir                 xTempStream[i].getInputStream ().closeInput ();
100cdf0e10cSrcweir                 xTempStream[i].getOutputStream ().closeOutput ();
101cdf0e10cSrcweir             }
102cdf0e10cSrcweir             m_aTestHelper.Message ( "Storage closed." );
103cdf0e10cSrcweir 
104cdf0e10cSrcweir             //open the same stream with the constructor for inputstream
105cdf0e10cSrcweir             pArgs[0] = (Object)xTempFile.getInputStream ();
106cdf0e10cSrcweir             oOLESimpleStorage = m_xMSF.createInstanceWithArguments ( "com.sun.star.embed.OLESimpleStorage", pArgs );
107cdf0e10cSrcweir             xOLESimpleStorage = UnoRuntime.queryInterface(XOLESimpleStorage.class, oOLESimpleStorage);
108cdf0e10cSrcweir             m_aTestHelper.Message ( "Storage reopened, based on XInputStream." );
109cdf0e10cSrcweir 
110cdf0e10cSrcweir             //check that all the streams contain correct information
111cdf0e10cSrcweir             m_aTestHelper.Message ( "Checking data contained in all the substreams..." );
112cdf0e10cSrcweir             for ( int i = 0; i < pStreamCnt; ++i )
113cdf0e10cSrcweir             {
114cdf0e10cSrcweir                 if ( xOLESimpleStorage.hasByName (sSubStreamPrefix + i) )
115cdf0e10cSrcweir                 {
116cdf0e10cSrcweir                     xTempStream[i] = UnoRuntime.queryInterface(XTempFile.class, xOLESimpleStorage.getByName(sSubStreamPrefix + i));
117cdf0e10cSrcweir                     xTempStream[i].seek (0);
118cdf0e10cSrcweir                     xTempStream[i].getInputStream ().readBytes (pBytesIn[i], pBytesIn[i][0].length + 1 );
119cdf0e10cSrcweir                     for ( int j = 0; j < pBytesCnt; ++j )
120cdf0e10cSrcweir                     {
121cdf0e10cSrcweir                         if ( pBytesIn[i][0][j] != pBytesOut[i][j] )
122cdf0e10cSrcweir                         {
123cdf0e10cSrcweir                             m_aTestHelper.Error ( "Stream " + i + " byte " + j + ": INCORRECT DATA!");
124cdf0e10cSrcweir                             return false;
125cdf0e10cSrcweir                         }
126cdf0e10cSrcweir                         else
127cdf0e10cSrcweir                         {
128cdf0e10cSrcweir                             m_aTestHelper.Message ( "Stream " + i + " byte " + j + ":  CORRECT." );
129cdf0e10cSrcweir                         }
130cdf0e10cSrcweir                     }
131cdf0e10cSrcweir                 }
132cdf0e10cSrcweir                 else
133cdf0e10cSrcweir                 {
134cdf0e10cSrcweir                     m_aTestHelper.Error( "Stream " + i + " is lost!");
135cdf0e10cSrcweir                     return false;
136cdf0e10cSrcweir                 }
137cdf0e10cSrcweir             }
138cdf0e10cSrcweir             m_aTestHelper.Message ( "All substreams contain correct data. SUCCESS." );
139cdf0e10cSrcweir         }
140cdf0e10cSrcweir         catch ( Exception e )
141cdf0e10cSrcweir         {
142cdf0e10cSrcweir             m_aTestHelper.Error ( "Exception: " + e );
143cdf0e10cSrcweir             return false;
144cdf0e10cSrcweir         }
145cdf0e10cSrcweir         return true;
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir }
148