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 complex.olesimplestorage; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 27*b1cdbd2cSJim Jagielski import com.sun.star.io.XInputStream; 28*b1cdbd2cSJim Jagielski import com.sun.star.io.XOutputStream; 29*b1cdbd2cSJim Jagielski import com.sun.star.io.XTempFile; 30*b1cdbd2cSJim Jagielski import com.sun.star.embed.XOLESimpleStorage; 31*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import java.util.Random; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski public class Test01 implements OLESimpleStorageTest 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski XMultiServiceFactory m_xMSF = null; 39*b1cdbd2cSJim Jagielski TestHelper m_aTestHelper = null; 40*b1cdbd2cSJim Jagielski final int pStreamCnt = 5; 41*b1cdbd2cSJim Jagielski final int pBytesCnt = 10; 42*b1cdbd2cSJim Jagielski Test01( XMultiServiceFactory xMSF )43*b1cdbd2cSJim Jagielski public Test01 ( XMultiServiceFactory xMSF ) 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski m_xMSF = xMSF; 46*b1cdbd2cSJim Jagielski m_aTestHelper = new TestHelper ("Test01: "); 47*b1cdbd2cSJim Jagielski } 48*b1cdbd2cSJim Jagielski test()49*b1cdbd2cSJim Jagielski public boolean test () 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski try 52*b1cdbd2cSJim Jagielski { 53*b1cdbd2cSJim Jagielski //create a new temporary stream 54*b1cdbd2cSJim Jagielski Object oTempFile = m_xMSF.createInstance ( "com.sun.star.io.TempFile" ); 55*b1cdbd2cSJim Jagielski XTempFile xTempFile = UnoRuntime.queryInterface(XTempFile.class, oTempFile); 56*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "A new temporary stream created." ); 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //create OLESimpleStorage based on it 59*b1cdbd2cSJim Jagielski Object pArgs[] = new Object[2]; 60*b1cdbd2cSJim Jagielski pArgs[0] = (Object) xTempFile; 61*b1cdbd2cSJim Jagielski pArgs[1] = new Boolean( true ); 62*b1cdbd2cSJim Jagielski Object oOLESimpleStorage = m_xMSF.createInstanceWithArguments ( "com.sun.star.embed.OLESimpleStorage", pArgs ); 63*b1cdbd2cSJim Jagielski XOLESimpleStorage xOLESimpleStorage = UnoRuntime.queryInterface(XOLESimpleStorage.class, oOLESimpleStorage); 64*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "OLESimpleStorage based on XStream created." ); 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski //fill it with some streams 67*b1cdbd2cSJim Jagielski Object oStream[] = new Object[pStreamCnt]; 68*b1cdbd2cSJim Jagielski byte pBytesIn[][][] = new byte [pStreamCnt][1][pBytesCnt]; 69*b1cdbd2cSJim Jagielski byte pBytesOut[][] = new byte [pStreamCnt][pBytesCnt]; 70*b1cdbd2cSJim Jagielski XTempFile xTempStream[] = new XTempFile[pStreamCnt]; 71*b1cdbd2cSJim Jagielski Random oRandom = new Random (); 72*b1cdbd2cSJim Jagielski final String sSubStreamPrefix = "SubStream"; 73*b1cdbd2cSJim Jagielski for ( int i = 0; i < pStreamCnt; i++ ) 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski oRandom.nextBytes (pBytesOut[i]); 76*b1cdbd2cSJim Jagielski oStream[i] = m_xMSF.createInstance ( "com.sun.star.io.TempFile" ); 77*b1cdbd2cSJim Jagielski xTempStream[i] = UnoRuntime.queryInterface(XTempFile.class, oStream[i]); 78*b1cdbd2cSJim Jagielski xTempStream[i].getOutputStream ().writeBytes (pBytesOut[i]); 79*b1cdbd2cSJim Jagielski xTempStream[i].seek (0); 80*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Substream " + i + " initialized." ); 81*b1cdbd2cSJim Jagielski if (xOLESimpleStorage.hasByName (sSubStreamPrefix + i)) 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski xOLESimpleStorage.replaceByName ( sSubStreamPrefix + i, xTempStream[i] ); 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski else 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski xOLESimpleStorage.insertByName ( sSubStreamPrefix + i, xTempStream[i] ); 88*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Substream " + i + " inserted." ); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski //commit the storage and close it 93*b1cdbd2cSJim Jagielski xOLESimpleStorage.commit (); 94*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Storage commited." ); 95*b1cdbd2cSJim Jagielski xOLESimpleStorage.dispose (); 96*b1cdbd2cSJim Jagielski for ( int i = 0; i < pStreamCnt; ++i ) 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski xTempStream[i].setRemoveFile ( true ); 99*b1cdbd2cSJim Jagielski xTempStream[i].getInputStream ().closeInput (); 100*b1cdbd2cSJim Jagielski xTempStream[i].getOutputStream ().closeOutput (); 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Storage closed." ); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski //open the same stream with the constructor for inputstream 105*b1cdbd2cSJim Jagielski pArgs[0] = (Object)xTempFile.getInputStream (); 106*b1cdbd2cSJim Jagielski oOLESimpleStorage = m_xMSF.createInstanceWithArguments ( "com.sun.star.embed.OLESimpleStorage", pArgs ); 107*b1cdbd2cSJim Jagielski xOLESimpleStorage = UnoRuntime.queryInterface(XOLESimpleStorage.class, oOLESimpleStorage); 108*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Storage reopened, based on XInputStream." ); 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski //check that all the streams contain correct information 111*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Checking data contained in all the substreams..." ); 112*b1cdbd2cSJim Jagielski for ( int i = 0; i < pStreamCnt; ++i ) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski if ( xOLESimpleStorage.hasByName (sSubStreamPrefix + i) ) 115*b1cdbd2cSJim Jagielski { 116*b1cdbd2cSJim Jagielski xTempStream[i] = UnoRuntime.queryInterface(XTempFile.class, xOLESimpleStorage.getByName(sSubStreamPrefix + i)); 117*b1cdbd2cSJim Jagielski xTempStream[i].seek (0); 118*b1cdbd2cSJim Jagielski xTempStream[i].getInputStream ().readBytes (pBytesIn[i], pBytesIn[i][0].length + 1 ); 119*b1cdbd2cSJim Jagielski for ( int j = 0; j < pBytesCnt; ++j ) 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski if ( pBytesIn[i][0][j] != pBytesOut[i][j] ) 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski m_aTestHelper.Error ( "Stream " + i + " byte " + j + ": INCORRECT DATA!"); 124*b1cdbd2cSJim Jagielski return false; 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski else 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "Stream " + i + " byte " + j + ": CORRECT." ); 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski else 133*b1cdbd2cSJim Jagielski { 134*b1cdbd2cSJim Jagielski m_aTestHelper.Error( "Stream " + i + " is lost!"); 135*b1cdbd2cSJim Jagielski return false; 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski m_aTestHelper.Message ( "All substreams contain correct data. SUCCESS." ); 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski catch ( Exception e ) 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski m_aTestHelper.Error ( "Exception: " + e ); 143*b1cdbd2cSJim Jagielski return false; 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski return true; 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski } 148