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 fvt.uno.db; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 25*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess; 26*b1cdbd2cSJim Jagielski import com.sun.star.frame.FrameSearchFlag; 27*b1cdbd2cSJim Jagielski import com.sun.star.frame.XComponentLoader; 28*b1cdbd2cSJim Jagielski import com.sun.star.frame.XModel; 29*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable; 30*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 31*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 32*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XOfficeDatabaseDocument; 33*b1cdbd2cSJim Jagielski import com.sun.star.sdb.application.XDatabaseDocumentUI; 34*b1cdbd2cSJim Jagielski import com.sun.star.sdbcx.XTablesSupplier; 35*b1cdbd2cSJim Jagielski import com.sun.star.uno.Exception; 36*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski import testlib.uno.HsqlColumnDescriptor; 39*b1cdbd2cSJim Jagielski import testlib.uno.DBUtil; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski import java.io.IOException; 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski // ---------- junit imports ----------------- 44*b1cdbd2cSJim Jagielski import org.junit.After; 45*b1cdbd2cSJim Jagielski import org.junit.Before; 46*b1cdbd2cSJim Jagielski import org.junit.Test; 47*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil; 48*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace; 49*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski import static org.junit.Assert.*; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski /** 54*b1cdbd2cSJim Jagielski * test case for Base's application UI 55*b1cdbd2cSJim Jagielski */ 56*b1cdbd2cSJim Jagielski public class DBAccess { 57*b1cdbd2cSJim Jagielski UnoApp app = new UnoApp(); 58*b1cdbd2cSJim Jagielski private XOfficeDatabaseDocument m_databaseDocument; 59*b1cdbd2cSJim Jagielski private XDatabaseDocumentUI m_documentUI; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski // public DBAccess() { 62*b1cdbd2cSJim Jagielski // super(); 63*b1cdbd2cSJim Jagielski // } 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski @Before before()67*b1cdbd2cSJim Jagielski public void before() throws java.lang.Exception { 68*b1cdbd2cSJim Jagielski app.start(); 69*b1cdbd2cSJim Jagielski String a = null; 70*b1cdbd2cSJim Jagielski switchToDocument(a); 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski @After after()74*b1cdbd2cSJim Jagielski public void after() throws java.lang.Exception { 75*b1cdbd2cSJim Jagielski closeDocument(); 76*b1cdbd2cSJim Jagielski app.close(); 77*b1cdbd2cSJim Jagielski } 78*b1cdbd2cSJim Jagielski closeDocument()79*b1cdbd2cSJim Jagielski private void closeDocument() { 80*b1cdbd2cSJim Jagielski DBUtil.close(); 81*b1cdbd2cSJim Jagielski m_databaseDocument = null; 82*b1cdbd2cSJim Jagielski m_documentUI = null; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski switchToDocument(String _documentURL)86*b1cdbd2cSJim Jagielski private void switchToDocument(String _documentURL) 87*b1cdbd2cSJim Jagielski throws java.lang.Exception { 88*b1cdbd2cSJim Jagielski // close previous database document 89*b1cdbd2cSJim Jagielski closeDocument(); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski if (_documentURL == null) { 92*b1cdbd2cSJim Jagielski DBUtil.createNewDocument(getMSF()); 93*b1cdbd2cSJim Jagielski } else { 94*b1cdbd2cSJim Jagielski DBUtil.loadNewDocument(getMSF(), _documentURL); 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski m_databaseDocument = DBUtil.getDatabaseDocument(); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski @Test testSaveAs()102*b1cdbd2cSJim Jagielski public void testSaveAs() throws Exception, IOException, java.lang.Exception { 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); 105*b1cdbd2cSJim Jagielski XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, 106*b1cdbd2cSJim Jagielski m_databaseDocument); 107*b1cdbd2cSJim Jagielski m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, 108*b1cdbd2cSJim Jagielski docModel.getCurrentController()); 109*b1cdbd2cSJim Jagielski m_documentUI.connect(); 110*b1cdbd2cSJim Jagielski assertTrue("could not connect to " + DBUtil.getDocumentURL(), 111*b1cdbd2cSJim Jagielski m_documentUI.isConnected()); 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski @Test testCreateTable()116*b1cdbd2cSJim Jagielski public void testCreateTable() throws java.lang.Exception { 117*b1cdbd2cSJim Jagielski // create a table in the database 118*b1cdbd2cSJim Jagielski DBUtil.createTable("test", new HsqlColumnDescriptor[] { 119*b1cdbd2cSJim Jagielski new HsqlColumnDescriptor("a", "VARCHAR(50)"), 120*b1cdbd2cSJim Jagielski new HsqlColumnDescriptor("b", "VARCHAR(50)"), 121*b1cdbd2cSJim Jagielski new HsqlColumnDescriptor("c", "VARCHAR(50)") }); 122*b1cdbd2cSJim Jagielski switchToDocument(DBUtil.getDocumentURL()); 123*b1cdbd2cSJim Jagielski // ---save and reload database document 124*b1cdbd2cSJim Jagielski m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, 127*b1cdbd2cSJim Jagielski m_databaseDocument); 128*b1cdbd2cSJim Jagielski m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, 129*b1cdbd2cSJim Jagielski docModel.getCurrentController()); 130*b1cdbd2cSJim Jagielski m_documentUI.connect(); 131*b1cdbd2cSJim Jagielski XTablesSupplier suppTables = (XTablesSupplier) UnoRuntime.queryInterface( 132*b1cdbd2cSJim Jagielski XTablesSupplier.class, m_documentUI.getActiveConnection()); 133*b1cdbd2cSJim Jagielski XNameAccess tables = suppTables.getTables(); 134*b1cdbd2cSJim Jagielski assertTrue("the newly created table has not been written", 135*b1cdbd2cSJim Jagielski tables.hasByName("test")); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski getMSF()138*b1cdbd2cSJim Jagielski protected XMultiServiceFactory getMSF() { 139*b1cdbd2cSJim Jagielski final XMultiServiceFactory xMSF1 = (XMultiServiceFactory) UnoRuntime.queryInterface( 140*b1cdbd2cSJim Jagielski XMultiServiceFactory.class, app.getComponentContext() 141*b1cdbd2cSJim Jagielski .getServiceManager()); 142*b1cdbd2cSJim Jagielski return xMSF1; 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski saveAndReloadDoc( XOfficeDatabaseDocument m_databaseDocument2, String sFilter, String sExtension)145*b1cdbd2cSJim Jagielski private XOfficeDatabaseDocument saveAndReloadDoc( 146*b1cdbd2cSJim Jagielski XOfficeDatabaseDocument m_databaseDocument2, String sFilter, 147*b1cdbd2cSJim Jagielski String sExtension) throws java.lang.Exception { 148*b1cdbd2cSJim Jagielski String filePath = Testspace.getPath("tmp/basetest." + sExtension); 149*b1cdbd2cSJim Jagielski PropertyValue[] aStoreProperties = new PropertyValue[2]; 150*b1cdbd2cSJim Jagielski aStoreProperties[0] = new PropertyValue(); 151*b1cdbd2cSJim Jagielski aStoreProperties[1] = new PropertyValue(); 152*b1cdbd2cSJim Jagielski aStoreProperties[0].Name = "Override"; 153*b1cdbd2cSJim Jagielski aStoreProperties[0].Value = true; 154*b1cdbd2cSJim Jagielski aStoreProperties[1].Name = "FilterName"; 155*b1cdbd2cSJim Jagielski XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 156*b1cdbd2cSJim Jagielski XStorable.class, m_databaseDocument2); 157*b1cdbd2cSJim Jagielski xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski return (XOfficeDatabaseDocument) UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, 160*b1cdbd2cSJim Jagielski app.loadDocument(filePath)); 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski } 163