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