xref: /aoo42x/test/testuno/source/fvt/uno/db/DBAccess.java (revision eba4d44a)
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