/************************************************************** * * 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 com.sun.star.wizards.db; import java.util.Vector; import com.sun.star.sdbc.SQLException; import com.sun.star.sdbc.XResultSet; import com.sun.star.sdbc.XRow; import com.sun.star.uno.UnoRuntime; import com.sun.star.wizards.common.JavaTools; import com.sun.star.wizards.common.PropertyNames; /** * @author bc93774 * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RelationController extends CommandName { private int PKTABLE_CAT = 1; private int PKTABLE_SCHEM = 2; private int PKTABLE_NAME = 3; private int PKCOLUMN_NAME = 4; private int FKTABLE_CAT = 5; private int FKTABLE_SCHEM = 6; private int FKTABLE_NAME = 7; private int FKCOLUMN_NAME = 8; public RelationController(CommandMetaData _CommandMetaData, String _CatalogName, String _SchemaName, String _TableName, boolean _baddQuotation) { super(_CommandMetaData, _CatalogName, _SchemaName, _TableName, _baddQuotation); } public RelationController(CommandMetaData _CommandMetaData, String _DisplayName) { super(_CommandMetaData, _DisplayName); } public String[] getExportedKeys() { String[] sReferencedTableNames = new String[] { }; try { String[] sTableNames = super.getCommandMetaData().getTableNames(); Vector aReferencedTableVector = new Vector(); XResultSet xResultSet = super.getCommandMetaData().xDBMetaData.getExportedKeys((getCatalogName(this)), getSchemaName(), getTableName()); XRow xRow = UnoRuntime.queryInterface(XRow.class, xResultSet); while (xResultSet.next()) { String sForeignCatalog = xRow.getString(FKTABLE_CAT); String sForeignScheme = xRow.getString(FKTABLE_SCHEM); String sForeignTableName = xRow.getString(FKTABLE_NAME); CommandName oCommandName = new CommandName(getCommandMetaData(), sForeignCatalog, sForeignScheme, sForeignTableName, false); aReferencedTableVector.add(oCommandName.getComposedName()); } sReferencedTableNames = new String[aReferencedTableVector.size()]; aReferencedTableVector.toArray(sReferencedTableNames); } catch (SQLException e) { e.printStackTrace(System.out); } return sReferencedTableNames; } private Object getCatalogName(CommandName _oCommandName) { String sLocCatalog = _oCommandName.getCatalogName(); if (sLocCatalog.equals(PropertyNames.EMPTY_STRING)) { return null; } else { return sLocCatalog; } } public String[][] getImportedKeyColumns(String _sreferencedtablename) { String[][] sKeyColumnNames = new String[][] { }; try { CommandName oLocCommandName = new CommandName(super.getCommandMetaData(), _sreferencedtablename); XResultSet xResultSet = super.getCommandMetaData().xDBMetaData.getImportedKeys(getCatalogName(oLocCommandName), oLocCommandName.getSchemaName(), oLocCommandName.getTableName()); XRow xRow = UnoRuntime.queryInterface(XRow.class, xResultSet); boolean bleaveLoop = false; Vector aMasterFieldNamesVector = new Vector(); Vector aSlaveFieldNamesVector = new Vector(); while (xResultSet.next() && !bleaveLoop) { String sPrimaryCatalog = null; String sPrimarySchema = null; if (super.getCommandMetaData().xDBMetaData.supportsCatalogsInDataManipulation()) { sPrimaryCatalog = xRow.getString(PKTABLE_CAT); } if (super.getCommandMetaData().xDBMetaData.supportsSchemasInDataManipulation()) { sPrimarySchema = xRow.getString(PKTABLE_SCHEM); } String sPrimaryTableName = xRow.getString(PKTABLE_NAME); String sPrimaryColumnName = xRow.getString(PKCOLUMN_NAME); String sForeignColumnName = xRow.getString(FKCOLUMN_NAME); if (JavaTools.isSame(getTableName(), sPrimaryTableName)) { if (sPrimarySchema == null || JavaTools.isSame(getSchemaName(), sPrimarySchema)) { if (JavaTools.isSame(getCatalogName(), sPrimaryCatalog)) { aSlaveFieldNamesVector.add(sForeignColumnName); aMasterFieldNamesVector.add(sPrimaryColumnName); bleaveLoop = true; //Only one relation may exist between two tables... } } } } sKeyColumnNames = new String[2][aMasterFieldNamesVector.size()]; sKeyColumnNames[0] = new String[aSlaveFieldNamesVector.size()]; sKeyColumnNames[1] = new String[aMasterFieldNamesVector.size()]; aSlaveFieldNamesVector.toArray(sKeyColumnNames[0]); aMasterFieldNamesVector.toArray(sKeyColumnNames[1]); } catch (Exception e) { e.printStackTrace(System.out); } return sKeyColumnNames; } }