| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| package fvt.uno.db; |
| |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.container.XNameAccess; |
| import com.sun.star.frame.FrameSearchFlag; |
| import com.sun.star.frame.XComponentLoader; |
| import com.sun.star.frame.XModel; |
| import com.sun.star.frame.XStorable; |
| import com.sun.star.lang.XComponent; |
| import com.sun.star.lang.XMultiServiceFactory; |
| import com.sun.star.sdb.XOfficeDatabaseDocument; |
| import com.sun.star.sdb.application.XDatabaseDocumentUI; |
| import com.sun.star.sdbcx.XTablesSupplier; |
| import com.sun.star.uno.Exception; |
| import com.sun.star.uno.UnoRuntime; |
| |
| import testlib.uno.HsqlColumnDescriptor; |
| import testlib.uno.DBUtil; |
| |
| import java.io.IOException; |
| |
| // ---------- junit imports ----------------- |
| import org.junit.After; |
| import org.junit.AfterClass; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| import org.openoffice.test.common.FileUtil; |
| import org.openoffice.test.common.Testspace; |
| import org.openoffice.test.uno.UnoApp; |
| |
| import static org.junit.Assert.*; |
| |
| /** |
| * test case for Base's application UI |
| */ |
| public class DBAccess { |
| static final UnoApp app = new UnoApp(); |
| private XOfficeDatabaseDocument m_databaseDocument; |
| private XDatabaseDocumentUI m_documentUI; |
| |
| // public DBAccess() { |
| // super(); |
| // } |
| |
| @BeforeClass |
| public static void setUpConnection() throws Exception { |
| app.start(); |
| } |
| |
| @AfterClass |
| public static void tearDownConnection() throws InterruptedException, Exception { |
| app.close(); |
| } |
| |
| @Before |
| public void before() throws java.lang.Exception { |
| String a = null; |
| switchToDocument(a); |
| } |
| |
| @After |
| public void after() throws java.lang.Exception { |
| closeDocument(); |
| } |
| |
| private void closeDocument() { |
| DBUtil.close(); |
| m_databaseDocument = null; |
| m_documentUI = null; |
| |
| } |
| |
| private void switchToDocument(String _documentURL) |
| throws java.lang.Exception { |
| // close previous database document |
| closeDocument(); |
| |
| if (_documentURL == null) { |
| DBUtil.createNewDocument(getMSF()); |
| } else { |
| DBUtil.loadNewDocument(getMSF(), _documentURL); |
| } |
| m_databaseDocument = DBUtil.getDatabaseDocument(); |
| |
| } |
| |
| |
| @Test |
| public void testSaveAs() throws Exception, IOException, java.lang.Exception { |
| |
| m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); |
| XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, |
| m_databaseDocument); |
| m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, |
| docModel.getCurrentController()); |
| m_documentUI.connect(); |
| assertTrue("could not connect to " + DBUtil.getDocumentURL(), |
| m_documentUI.isConnected()); |
| |
| } |
| |
| @Test |
| public void testCreateTable() throws java.lang.Exception { |
| // create a table in the database |
| DBUtil.createTable("test", new HsqlColumnDescriptor[] { |
| new HsqlColumnDescriptor("a", "VARCHAR(50)"), |
| new HsqlColumnDescriptor("b", "VARCHAR(50)"), |
| new HsqlColumnDescriptor("c", "VARCHAR(50)") }); |
| switchToDocument(DBUtil.getDocumentURL()); |
| // ---save and reload database document |
| m_databaseDocument = saveAndReloadDoc(m_databaseDocument, "", "odb"); |
| |
| XModel docModel = (XModel) UnoRuntime.queryInterface(XModel.class, |
| m_databaseDocument); |
| m_documentUI = (XDatabaseDocumentUI) UnoRuntime.queryInterface(XDatabaseDocumentUI.class, |
| docModel.getCurrentController()); |
| m_documentUI.connect(); |
| XTablesSupplier suppTables = (XTablesSupplier) UnoRuntime.queryInterface( |
| XTablesSupplier.class, m_documentUI.getActiveConnection()); |
| XNameAccess tables = suppTables.getTables(); |
| assertTrue("the newly created table has not been written", |
| tables.hasByName("test")); |
| } |
| |
| protected XMultiServiceFactory getMSF() { |
| final XMultiServiceFactory xMSF1 = (XMultiServiceFactory) UnoRuntime.queryInterface( |
| XMultiServiceFactory.class, app.getComponentContext() |
| .getServiceManager()); |
| return xMSF1; |
| } |
| |
| private XOfficeDatabaseDocument saveAndReloadDoc( |
| XOfficeDatabaseDocument m_databaseDocument2, String sFilter, |
| String sExtension) throws java.lang.Exception { |
| String filePath = Testspace.getPath("tmp/basetest." + sExtension); |
| PropertyValue[] aStoreProperties = new PropertyValue[2]; |
| aStoreProperties[0] = new PropertyValue(); |
| aStoreProperties[1] = new PropertyValue(); |
| aStoreProperties[0].Name = "Override"; |
| aStoreProperties[0].Value = true; |
| aStoreProperties[1].Name = "FilterName"; |
| XStorable xStorable = (XStorable) UnoRuntime.queryInterface( |
| XStorable.class, m_databaseDocument2); |
| xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); |
| |
| return (XOfficeDatabaseDocument) UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, |
| app.loadDocument(filePath)); |
| } |
| } |