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