1d49e0314SLiu Zhe /************************************************************** 2d49e0314SLiu Zhe * 3d49e0314SLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 4d49e0314SLiu Zhe * or more contributor license agreements. See the NOTICE file 5d49e0314SLiu Zhe * distributed with this work for additional information 6d49e0314SLiu Zhe * regarding copyright ownership. The ASF licenses this file 7d49e0314SLiu Zhe * to you under the Apache License, Version 2.0 (the 8d49e0314SLiu Zhe * "License"); you may not use this file except in compliance 9d49e0314SLiu Zhe * with the License. You may obtain a copy of the License at 10d49e0314SLiu Zhe * 11d49e0314SLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 12d49e0314SLiu Zhe * 13d49e0314SLiu Zhe * Unless required by applicable law or agreed to in writing, 14d49e0314SLiu Zhe * software distributed under the License is distributed on an 15d49e0314SLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16d49e0314SLiu Zhe * KIND, either express or implied. See the License for the 17d49e0314SLiu Zhe * specific language governing permissions and limitations 18d49e0314SLiu Zhe * under the License. 19d49e0314SLiu Zhe * 20d49e0314SLiu Zhe *************************************************************/ 21d49e0314SLiu Zhe 22*eba4d44aSLiu Zhe package fvt.uno.db; 23d49e0314SLiu Zhe 24d49e0314SLiu Zhe import com.sun.star.beans.PropertyValue; 25d49e0314SLiu Zhe import com.sun.star.container.XNameAccess; 26d49e0314SLiu Zhe import com.sun.star.frame.FrameSearchFlag; 27d49e0314SLiu Zhe import com.sun.star.frame.XComponentLoader; 28d49e0314SLiu Zhe import com.sun.star.frame.XModel; 29d49e0314SLiu Zhe import com.sun.star.frame.XStorable; 30d49e0314SLiu Zhe import com.sun.star.lang.XComponent; 31d49e0314SLiu Zhe import com.sun.star.lang.XMultiServiceFactory; 32d49e0314SLiu Zhe import com.sun.star.sdb.XOfficeDatabaseDocument; 33d49e0314SLiu Zhe import com.sun.star.sdb.application.XDatabaseDocumentUI; 34d49e0314SLiu Zhe import com.sun.star.sdbcx.XTablesSupplier; 35d49e0314SLiu Zhe import com.sun.star.uno.Exception; 36d49e0314SLiu Zhe import com.sun.star.uno.UnoRuntime; 37d49e0314SLiu Zhe 38d49e0314SLiu Zhe import testlib.uno.HsqlColumnDescriptor; 39d49e0314SLiu Zhe import testlib.uno.DBUtil; 40d49e0314SLiu Zhe 41d49e0314SLiu Zhe import java.io.IOException; 42d49e0314SLiu Zhe 43d49e0314SLiu Zhe // ---------- junit imports ----------------- 44d49e0314SLiu Zhe import org.junit.After; 45d49e0314SLiu Zhe import org.junit.Before; 46d49e0314SLiu Zhe import org.junit.Test; 47d49e0314SLiu Zhe import org.openoffice.test.common.FileUtil; 48d49e0314SLiu Zhe import org.openoffice.test.common.Testspace; 49d49e0314SLiu Zhe import org.openoffice.test.uno.UnoApp; 50d49e0314SLiu Zhe 51d49e0314SLiu Zhe import static org.junit.Assert.*; 52d49e0314SLiu Zhe 53d49e0314SLiu Zhe /** 54d49e0314SLiu Zhe * test case for Base's application UI 55d49e0314SLiu Zhe */ 56d49e0314SLiu Zhe public class DBAccess { 57d49e0314SLiu Zhe UnoApp app = new UnoApp(); 58d49e0314SLiu Zhe private XOfficeDatabaseDocument m_databaseDocument; 59d49e0314SLiu Zhe private XDatabaseDocumentUI m_documentUI; 60d49e0314SLiu Zhe 61d49e0314SLiu Zhe // public DBAccess() { 62d49e0314SLiu Zhe // super(); 63d49e0314SLiu Zhe // } 64d49e0314SLiu Zhe 65d49e0314SLiu Zhe 66d49e0314SLiu Zhe @Before before()67d49e0314SLiu Zhe public void before() throws java.lang.Exception { 68d49e0314SLiu Zhe app.start(); 69d49e0314SLiu Zhe String a = null; 70d49e0314SLiu Zhe switchToDocument(a); 71d49e0314SLiu Zhe } 72d49e0314SLiu Zhe 73d49e0314SLiu Zhe @After after()74d49e0314SLiu Zhe public void after() throws java.lang.Exception { 75d49e0314SLiu Zhe closeDocument(); 76d49e0314SLiu Zhe app.close(); 77d49e0314SLiu Zhe } 78d49e0314SLiu Zhe closeDocument()79d49e0314SLiu Zhe private void closeDocument() { 80d49e0314SLiu Zhe DBUtil.close(); 81d49e0314SLiu Zhe m_databaseDocument = null; 82d49e0314SLiu Zhe m_documentUI = null; 83d49e0314SLiu Zhe 84d49e0314SLiu Zhe } 85d49e0314SLiu Zhe switchToDocument(String _documentURL)86d49e0314SLiu Zhe private void switchToDocument(String _documentURL) 87d49e0314SLiu Zhe throws java.lang.Exception { 88d49e0314SLiu Zhe // close previous database document 89d49e0314SLiu Zhe closeDocument(); 90d49e0314SLiu Zhe 91d49e0314SLiu Zhe if (_documentURL == null) { 92d49e0314SLiu Zhe DBUtil.createNewDocument(getMSF()); 93d49e0314SLiu Zhe } else { 94d49e0314SLiu Zhe DBUtil.loadNewDocument(getMSF(), _documentURL); 95d49e0314SLiu Zhe } 96d49e0314SLiu Zhe m_databaseDocument = DBUtil.getDatabaseDocument(); 97d49e0314SLiu Zhe 98d49e0314SLiu Zhe } 99d49e0314SLiu Zhe 100d49e0314SLiu Zhe 101d49e0314SLiu Zhe @Test testSaveAs()102d49e0314SLiu Zhe public void testSaveAs() throws Exception, IOException, java.lang.Exception { 103d49e0314SLiu Zhe 104d49e0314SLiu Zhe m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); 105cebb507aSLiu Zhe XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, 106d49e0314SLiu Zhe m_databaseDocument); 107cebb507aSLiu Zhe m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, 108d49e0314SLiu Zhe docModel.getCurrentController()); 109d49e0314SLiu Zhe m_documentUI.connect(); 110d49e0314SLiu Zhe assertTrue("could not connect to " + DBUtil.getDocumentURL(), 111d49e0314SLiu Zhe m_documentUI.isConnected()); 112d49e0314SLiu Zhe 113d49e0314SLiu Zhe } 114d49e0314SLiu Zhe 115d49e0314SLiu Zhe @Test testCreateTable()116d49e0314SLiu Zhe public void testCreateTable() throws java.lang.Exception { 117d49e0314SLiu Zhe // create a table in the database 118d49e0314SLiu Zhe DBUtil.createTable("test", new HsqlColumnDescriptor[] { 119d49e0314SLiu Zhe new HsqlColumnDescriptor("a", "VARCHAR(50)"), 120d49e0314SLiu Zhe new HsqlColumnDescriptor("b", "VARCHAR(50)"), 121d49e0314SLiu Zhe new HsqlColumnDescriptor("c", "VARCHAR(50)") }); 122d49e0314SLiu Zhe switchToDocument(DBUtil.getDocumentURL()); 123d49e0314SLiu Zhe // ---save and reload database document 124d49e0314SLiu Zhe m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); 125d49e0314SLiu Zhe 126cebb507aSLiu Zhe XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, 127d49e0314SLiu Zhe m_databaseDocument); 128cebb507aSLiu Zhe m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, 129d49e0314SLiu Zhe docModel.getCurrentController()); 130d49e0314SLiu Zhe m_documentUI.connect(); 131cebb507aSLiu Zhe XTablesSupplier suppTables = (XTablesSupplier) UnoRuntime.queryInterface( 132d49e0314SLiu Zhe XTablesSupplier.class, m_documentUI.getActiveConnection()); 133d49e0314SLiu Zhe XNameAccess tables = suppTables.getTables(); 134d49e0314SLiu Zhe assertTrue("the newly created table has not been written", 135d49e0314SLiu Zhe tables.hasByName("test")); 136d49e0314SLiu Zhe } 137d49e0314SLiu Zhe getMSF()138d49e0314SLiu Zhe protected XMultiServiceFactory getMSF() { 139cebb507aSLiu Zhe final XMultiServiceFactory xMSF1 = (XMultiServiceFactory) UnoRuntime.queryInterface( 140d49e0314SLiu Zhe XMultiServiceFactory.class, app.getComponentContext() 141d49e0314SLiu Zhe .getServiceManager()); 142d49e0314SLiu Zhe return xMSF1; 143d49e0314SLiu Zhe } 144d49e0314SLiu Zhe saveAndReloadDoc( XOfficeDatabaseDocument m_databaseDocument2, String sFilter, String sExtension)145d49e0314SLiu Zhe private XOfficeDatabaseDocument saveAndReloadDoc( 146d49e0314SLiu Zhe XOfficeDatabaseDocument m_databaseDocument2, String sFilter, 147d49e0314SLiu Zhe String sExtension) throws java.lang.Exception { 148d49e0314SLiu Zhe String filePath = Testspace.getPath("tmp/basetest." + sExtension); 149d49e0314SLiu Zhe PropertyValue[] aStoreProperties = new PropertyValue[2]; 150d49e0314SLiu Zhe aStoreProperties[0] = new PropertyValue(); 151d49e0314SLiu Zhe aStoreProperties[1] = new PropertyValue(); 152d49e0314SLiu Zhe aStoreProperties[0].Name = "Override"; 153d49e0314SLiu Zhe aStoreProperties[0].Value = true; 154d49e0314SLiu Zhe aStoreProperties[1].Name = "FilterName"; 155d49e0314SLiu Zhe XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 156d49e0314SLiu Zhe XStorable.class, m_databaseDocument2); 157d49e0314SLiu Zhe xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 158d49e0314SLiu Zhe 159cebb507aSLiu Zhe return (XOfficeDatabaseDocument) UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, 160d49e0314SLiu Zhe app.loadDocument(filePath)); 161d49e0314SLiu Zhe } 162d49e0314SLiu Zhe } 163