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