1
0
Fork 0
libreoffice/odk/examples/DevelopersGuide/Forms/HsqlDatabase.java
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

184 lines
5.6 KiB
Java

/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XNameAccess;
import com.sun.star.frame.XStorable;
import com.sun.star.sdb.XOfficeDatabaseDocument;
import com.sun.star.sdbc.SQLException;
import com.sun.star.sdbc.XCloseable;
import com.sun.star.sdbc.XConnection;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sdb.XDocumentDataSource;
import com.sun.star.sdbc.XDataSource;
import com.sun.star.uno.XComponentContext;
import java.io.File;
import com.sun.star.util.CloseVetoException;
public class HsqlDatabase
{
private XComponentContext m_context;
// the URL of the temporary file used for the database document
private String m_databaseDocumentFile;
// the database document
private XOfficeDatabaseDocument m_databaseDocument;
// the data source belonging to the database document
// the default connection
private XConnection m_connection;
public HsqlDatabase( XComponentContext _context ) throws Exception
{
m_context = _context;
createDBDocument();
}
public HsqlDatabase( XComponentContext _context, String _existingDocumentURL ) throws Exception
{
m_context = _context;
createDBDocument( _existingDocumentURL );
}
private void createDBDocument( String _docURL ) throws Exception
{
m_databaseDocumentFile = _docURL;
XNameAccess dbContext = UnoRuntime.queryInterface( XNameAccess.class,
m_context.getServiceManager().createInstanceWithContext( "com.sun.star.sdb.DatabaseContext", m_context ) );
XDocumentDataSource dataSource = UnoRuntime.queryInterface( XDocumentDataSource.class,
dbContext.getByName( _docURL ) );
m_databaseDocument = dataSource.getDatabaseDocument();
}
/** creates an empty database document in a temporary location
*/
private void createDBDocument() throws Exception
{
File documentFile = File.createTempFile("testdb",".odb");
documentFile.deleteOnExit();
m_databaseDocumentFile = URLHelper.getFileURLFromSystemPath( documentFile );
m_databaseDocument = UnoRuntime.queryInterface(
XOfficeDatabaseDocument.class, m_context.getServiceManager().createInstanceWithContext(
"com.sun.star.sdb.OfficeDatabaseDocument", m_context ) );
XPropertySet dsProperties = UnoRuntime.queryInterface( XPropertySet.class, m_databaseDocument.getDataSource() );
dsProperties.setPropertyValue("URL", "sdbc:embedded:hsqldb");
XStorable storable = UnoRuntime.queryInterface( XStorable.class, m_databaseDocument );
storable.storeAsURL( m_databaseDocumentFile, new PropertyValue[]{} );
}
/** closes the database document
*
* Any CloseVetoExceptions fired by third parties are ignored, and any reference to the
* database document is released.
*/
private void close()
{
// close connection
XCloseable closeConn = UnoRuntime.queryInterface( XCloseable.class,
m_connection );
if ( closeConn != null )
{
try
{
closeConn.close();
}
catch( SQLException e )
{
}
}
m_connection = null;
// close document
com.sun.star.util.XCloseable closeDoc = UnoRuntime.queryInterface(
com.sun.star.util.XCloseable.class, m_databaseDocument );
if ( closeDoc != null )
{
try
{
closeDoc.close( true );
}
catch( CloseVetoException e )
{
}
}
m_databaseDocument = null;
}
/** closes the document, and deletes the underlying file
*/
private void closeAndDelete()
{
close();
if ( m_databaseDocumentFile != null )
{
try
{
File file = new File(m_databaseDocumentFile);
file.delete();
}
catch(Exception e)
{
}
m_databaseDocumentFile = null;
}
}
/** returns the underlying database document
*/
public XOfficeDatabaseDocument getDatabaseDocument()
{
return m_databaseDocument;
}
/** returns the associated data source
*/
public XDataSource getDataSource()
{
return m_databaseDocument.getDataSource();
}
/** returns the URL of the ODB document represented by this instance
*/
public String getDocumentURL()
{
return m_databaseDocumentFile;
}
@Override
protected void finalize() throws Throwable
{
closeAndDelete();
super.finalize();
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */