summaryrefslogtreecommitdiffstats
path: root/wizards/com/sun/star/wizards/db/FieldColumn.java
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/com/sun/star/wizards/db/FieldColumn.java')
-rw-r--r--wizards/com/sun/star/wizards/db/FieldColumn.java403
1 files changed, 403 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/db/FieldColumn.java b/wizards/com/sun/star/wizards/db/FieldColumn.java
new file mode 100644
index 000000000..dd8b85a92
--- /dev/null
+++ b/wizards/com/sun/star/wizards/db/FieldColumn.java
@@ -0,0 +1,403 @@
+/*
+ * 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 .
+ */
+package com.sun.star.wizards.db;
+
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.container.XNameAccess;
+import com.sun.star.sdbc.DataType;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.Exception;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.wizards.common.*;
+
+public class FieldColumn
+{
+ protected int ColIndex;
+
+ private Object DefaultValue;
+ private String m_sFieldName;
+ private String m_sDisplayFieldName;
+ private String FieldTitle;
+ private String m_sCommandName;
+ private int m_nDBFormatKey;
+ private int m_nFieldType;
+ private XPropertySet m_xColPropertySet;
+
+ // field meta data
+ private int FieldWidth;
+ private boolean bIsNumberFormat;
+
+ private static boolean bFormatKeysInitialized = false;
+ private static int iDateFormatKey;
+ private static int iDateTimeFormatKey;
+ private static int iNumberFormatKey;
+ private static int iTextFormatKey;
+ private static int iTimeFormatKey;
+ private static int iLogicalFormatKey;
+
+ private CommandMetaData m_aCommandMetaData;
+
+ public FieldColumn(CommandMetaData oCommandMetaData, String _FieldName, String _CommandName, boolean _bInstantiateByDisplayName)
+ {
+ m_sCommandName = _CommandName;
+ if (_bInstantiateByDisplayName)
+ {
+ m_sDisplayFieldName = _FieldName;
+ m_sFieldName = getOnlyFieldName(_FieldName, _CommandName);
+ }
+ else
+ {
+ m_sFieldName = _FieldName;
+ m_sDisplayFieldName = composeDisplayFieldName(_CommandName, m_sFieldName);
+ }
+ FieldTitle = m_sFieldName;
+ m_aCommandMetaData = oCommandMetaData;
+ }
+
+ public FieldColumn(CommandMetaData oCommandMetaData, XNameAccess _xColumns, String _FieldName)
+ {
+ m_sFieldName = _FieldName;
+// FieldTitle = m_sFieldName;
+ m_sDisplayFieldName = m_sFieldName;
+ ColIndex = JavaTools.FieldInList(_xColumns.getElementNames(), m_sFieldName) + 1;
+ initializeFormatKeys(oCommandMetaData, _xColumns);
+ try
+ {
+ m_sCommandName = (String)m_xColPropertySet.getPropertyValue("TableName");
+ }
+ catch (com.sun.star.beans.UnknownPropertyException e)
+ {
+ }
+ catch (com.sun.star.lang.WrappedTargetException e)
+ {
+ }
+ }
+
+ public int getFieldType()
+ {
+ if (m_nFieldType == 0)
+ {
+ DBMetaData.CommandObject oTable = m_aCommandMetaData.getTableByName(m_sCommandName);
+ initializeFormatKeys(m_aCommandMetaData, oTable.getColumns());
+ }
+ return m_nFieldType;
+ }
+
+ public int getFieldWidth()
+ {
+ getFieldType(); // will collect meta data 'bout the column, if not already done so
+ return FieldWidth;
+ }
+
+ public int getDBFormatKey()
+ {
+ getFieldType(); // will collect meta data 'bout the column, if not already done so
+ return m_nDBFormatKey;
+ }
+
+ public boolean isNumberFormat()
+ {
+ getFieldType(); // will collect meta data 'bout the column, if not already done so
+ return bIsNumberFormat;
+ }
+
+ /**
+ * Remove the pre name, we want the name after the 'dot'
+ * @param _DisplayFieldName
+ * @param _CommandName
+ * @return
+ */
+ private String getOnlyFieldName(String _DisplayFieldName, String _CommandName)
+ {
+ return _DisplayFieldName.substring(_CommandName.length() + 1);
+ }
+
+ public static String composeDisplayFieldName(String _sCommandName, String _sFieldName)
+ {
+ return _sCommandName + "." + _sFieldName;
+ }
+
+ private void initializeFormatKeys(CommandMetaData oCommandMetaData, XNameAccess _xColumns)
+ {
+ try
+ {
+ if (!bFormatKeysInitialized)
+ {
+ final NumberFormatter aNumberFormatter = oCommandMetaData.getNumberFormatter();
+
+ iDateFormatKey = aNumberFormatter.getDateFormatKey();
+ iDateTimeFormatKey = aNumberFormatter.getDateTimeFormatKey();
+ iNumberFormatKey = aNumberFormatter.getNumberFormatKey();
+ iTextFormatKey = aNumberFormatter.getTextFormatKey();
+ iTimeFormatKey = aNumberFormatter.getTimeFormatKey();
+ iLogicalFormatKey = aNumberFormatter.getLogicalFormatKey();
+ bFormatKeysInitialized = true;
+ }
+
+ m_xColPropertySet = UnoRuntime.queryInterface(XPropertySet.class, _xColumns.getByName(m_sFieldName));
+ ColIndex = JavaTools.FieldInList(_xColumns.getElementNames(), m_sFieldName) + 1;
+ m_nFieldType = AnyConverter.toInt(m_xColPropertySet.getPropertyValue("Type"));
+ getTyperelatedFieldData();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace(System.err);
+ }
+ }
+
+ public XPropertySet getXColumnPropertySet()
+ {
+ getFieldType(); // will collect meta data 'bout the column, if not already done so
+ return m_xColPropertySet;
+ }
+
+ public String getDisplayFieldName()
+ {
+ return m_sDisplayFieldName;
+ }
+
+ public String getCommandName()
+ {
+ return m_sCommandName;
+ }
+
+ public String getFieldName()
+ {
+ return m_sFieldName;
+ }
+
+ public String getFieldTitle()
+ {
+ return FieldTitle;
+ }
+
+ public void setFieldTitle(String _sTitle)
+ {
+ FieldTitle = _sTitle;
+ }
+
+
+
+ public boolean isBoolean()
+ {
+ boolean bIsBoolean = false;
+ switch ( getFieldType() )
+ {
+ case DataType.BIT: // == -7;
+ case DataType.BOOLEAN:
+ bIsBoolean = true;
+ break;
+ default:
+ bIsBoolean = false;
+ }
+ return bIsBoolean;
+ }
+
+ private void getTyperelatedFieldData()
+ {
+ int StandardFormatKey = 0;
+ try
+ {
+ switch ( getFieldType() )
+ {
+ case DataType.BIT: // == -7;
+ case DataType.BOOLEAN:
+ // Todo: Look if the defaultvalue has been set in the Datasource
+ StandardFormatKey = iLogicalFormatKey;
+ FieldWidth = 5;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.TINYINT: // == -6;
+ case DataType.SMALLINT: // == 5;
+ StandardFormatKey = iNumberFormatKey;
+ FieldWidth = 5;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.INTEGER: // == 4;
+ StandardFormatKey = iNumberFormatKey;
+ FieldWidth = 10;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.BIGINT: // == -5;
+ StandardFormatKey = iNumberFormatKey;
+ FieldWidth = 15;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.CHAR: // == 1;
+ StandardFormatKey = iTextFormatKey;
+ getTextFieldWidth(10);
+ bIsNumberFormat = false;
+ break;
+
+ case DataType.VARCHAR: // == 12;
+ StandardFormatKey = iTextFormatKey;
+ getTextFieldWidth(30);
+ bIsNumberFormat = false;
+ break;
+
+ case DataType.LONGVARCHAR: // == -1;
+ StandardFormatKey = iTextFormatKey;
+ getTextFieldWidth(60);
+ bIsNumberFormat = false;
+ break;
+
+ case DataType.NUMERIC: // == 2;
+ StandardFormatKey = iNumberFormatKey;
+ FieldWidth = 20;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.DECIMAL: // == 3; [with fractional part]
+ case DataType.FLOAT: // == 6;
+ case DataType.REAL: // == 7;
+ case DataType.DOUBLE: // == 8;
+ StandardFormatKey = iNumberFormatKey;
+ FieldWidth = 10 + AnyConverter.toInt(m_xColPropertySet.getPropertyValue("Scale")) + 1;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.DATE: // == 91;
+ StandardFormatKey = iDateFormatKey;
+ FieldWidth = 10;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.TIME: // == 92;
+ StandardFormatKey = iTimeFormatKey;
+ FieldWidth = 10;
+ bIsNumberFormat = true;
+ break;
+
+ case DataType.TIMESTAMP: // == 93;
+ StandardFormatKey = iDateTimeFormatKey;
+ FieldWidth = 20;
+ bIsNumberFormat = true;
+ break;
+ }
+
+ Object oKey = m_xColPropertySet.getPropertyValue("FormatKey");
+ if (AnyConverter.isVoid(oKey))
+ {
+ m_nDBFormatKey = StandardFormatKey;
+ }
+ else
+ {
+ m_nDBFormatKey = AnyConverter.toInt(oKey);
+ }
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.err);
+ m_nDBFormatKey = StandardFormatKey;
+ }
+ }
+
+ private void getTextFieldWidth(int iWidth)
+ {
+ try
+ {
+ FieldWidth = AnyConverter.toInt(m_xColPropertySet.getPropertyValue("Precision"));
+ if (FieldWidth > 0)
+ {
+ if (FieldWidth > (2 * iWidth))
+ {
+ FieldWidth = 2 * iWidth;
+ }
+ else if (FieldWidth == 0)
+ {
+ FieldWidth = iWidth;
+ }
+ }
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.err);
+ }
+ }
+
+ private void initDefaultValue()
+ {
+ switch (getFieldType())
+ {
+ case DataType.BIT: // == -7;
+ case DataType.BOOLEAN:
+ DefaultValue = Integer.valueOf("1");
+ break;
+
+ case DataType.TINYINT: // == -6;
+ DefaultValue = Integer.valueOf("98");
+ break;
+
+ case DataType.SMALLINT: // == 5;
+ DefaultValue = Integer.valueOf("987");
+ break;
+
+ case DataType.INTEGER: // == 4;
+ DefaultValue = Integer.valueOf("9876");
+ break;
+
+ case DataType.BIGINT: // == -5;
+ DefaultValue = Integer.valueOf("98765");
+ break;
+
+ case DataType.CHAR: // == 1;
+ DefaultValue = String.valueOf('x');
+ break;
+
+ case DataType.VARCHAR: // == 12;
+ case DataType.LONGVARCHAR: // == -1;
+ DefaultValue = BlindtextCreator.getBlindTextString(FieldTitle, FieldWidth);
+ break;
+
+ case DataType.NUMERIC: // == 2;
+ case DataType.DECIMAL: // == 3; [with fractional part]
+ case DataType.FLOAT: // == 6;
+ case DataType.REAL: // == 7;
+ case DataType.DOUBLE: // == 8;
+ DefaultValue = Double.valueOf("9876.54");
+ break;
+
+ case DataType.DATE: // == 91;
+ DefaultValue = Double.valueOf("42510");
+ break;
+
+ case DataType.TIME: // == 92;
+ DefaultValue = Double.valueOf("10");
+ break;
+
+ case DataType.TIMESTAMP: // == 93;
+ DefaultValue = Double.valueOf("5454110");
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ public Object getDefaultValue()
+ {
+ if ( DefaultValue == null )
+ initDefaultValue();
+ return DefaultValue;
+ }
+
+}