#i10000# changes form dbwizard4 (bc)

This commit is contained in:
Kurt Zenker 2005-03-21 17:04:17 +00:00
parent ff729d9f6e
commit 538972409c
2 changed files with 70 additions and 32 deletions

View file

@ -2,9 +2,9 @@
*
* $RCSfile: ColumnPropertySet.java,v $
*
* $Revision: 1.2 $
* $Revision: 1.3 $
*
* last change: $Author: vg $ $Date: 2005-02-21 13:52:32 $
* last change: $Author: kz $ $Date: 2005-03-21 18:04:17 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -58,6 +58,7 @@
*
*/
package com.sun.star.wizards.db;
import com.sun.star.beans.Property;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.PropertyVetoException;
@ -86,7 +87,6 @@ public class ColumnPropertySet {
public void assignPropertyValues(PropertyValue[] _aNewColPropertyValues, boolean _bsetDefaultProperties){
try {
nType = ((Integer) Properties.getPropertyValue(_aNewColPropertyValues, "Type")).intValue();
xPropertySet.setPropertyValue("Type",new Integer(nType));
if (Properties.hasPropertyValue(_aNewColPropertyValues, "TypeName"))
sTypeName = (String) Properties.getPropertyValue(_aNewColPropertyValues, "TypeName");
setType(nType, sTypeName);
@ -130,7 +130,7 @@ public class ColumnPropertySet {
sTypeName = oTypeInspector.getDefaultTypeName(nType);
else
sTypeName = _sTypeName;
nType = oTypeInspector.convertDataType(nType);
nType = oTypeInspector.getDataType(sTypeName);
assignPropertyValue("Type", new Integer(nType));
assignPropertyValue("TypeName", sTypeName);
}

View file

@ -2,9 +2,9 @@
*
* $RCSfile: TypeInspector.java,v $
*
* $Revision: 1.2 $
* $Revision: 1.3 $
*
* last change: $Author: vg $ $Date: 2005-02-21 13:54:43 $
* last change: $Author: kz $ $Date: 2005-03-21 18:04:17 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -62,7 +62,10 @@ package com.sun.star.wizards.db;
import java.util.Vector;
import com.sun.star.beans.UnknownPropertyException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.sdbc.ColumnSearch;
import com.sun.star.sdbc.ColumnValue;
import com.sun.star.sdbc.DataType;
import com.sun.star.sdbc.SQLException;
@ -78,6 +81,7 @@ public class TypeInspector{
private int[] nDataTypeInfos;
private int[] nPrecisionInfos;
private int[] nNullableInfos;
private int[] nSearchables;
private boolean[] bisAutoIncrementableInfos;
private int[] nMinScaleInfos;
private int[] nMaxScaleInfos;
@ -107,6 +111,7 @@ public class TypeInspector{
Vector aPrecisionVector = new Vector();
Vector aMinScaleVector = new Vector();
Vector aMaxScaleVector = new Vector();
Vector aSearchableVector = new Vector();
Integer[] aIntegerDataTypes = null;
// XResultSet xResultSet = xDBMetaDagetTypeInfo();
XRow xRow = (XRow) UnoRuntime.queryInterface(XRow.class, xResultSet);
@ -115,14 +120,17 @@ public class TypeInspector{
aTypeVector.addElement(new Integer(xRow.getShort(2)));
aPrecisionVector.addElement(new Integer(xRow.getInt(3)));
aNullableVector.addElement(new Integer(xRow.getShort(7)));
aSearchableVector.addElement(new Integer(xRow.getShort(9)));
aAutoIncrementVector.addElement(new Boolean(xRow.getBoolean(12)));
aMinScaleVector.addElement(new Integer(xRow.getShort(14)));
aMaxScaleVector.addElement(new Integer(xRow.getShort(15)));
}
sDataTypeNames = new String[aTypeNameVector.size()];
aTypeNameVector.toArray(sDataTypeNames);
nDataTypeInfos = JavaTools.IntegerTointList(aTypeVector);
nNullableInfos = JavaTools.IntegerTointList(aNullableVector);
nSearchables = JavaTools.IntegerTointList(aSearchableVector);
bisAutoIncrementableInfos = JavaTools.BooleanTobooleanList(aAutoIncrementVector);
nPrecisionInfos = JavaTools.IntegerTointList(aPrecisionVector);
nMinScaleInfos = JavaTools.IntegerTointList(aMinScaleVector);
@ -160,6 +168,7 @@ public class TypeInspector{
return nNullable;
}
public int getNullability(XPropertySet _xColPropertySet){
try {
int i = getDataTypeIndex(_xColPropertySet, false);
@ -175,6 +184,16 @@ public class TypeInspector{
return ColumnValue.NO_NULLS;
}
public boolean isColumnOrderable(XPropertySet _xColPropertySet){
int i = getDataTypeIndex(_xColPropertySet, false);
if (i > -1)
return (nSearchables[i] != ColumnSearch.NONE);
else
return false;
}
public int isNullable(XPropertySet _xColPropertySet){
int i = getDataTypeIndex(_xColPropertySet, false);
if (i > -1)
@ -221,15 +240,6 @@ public class TypeInspector{
}
public boolean isAutoIncrementable(XPropertySet _xColPropertySet){
int i = getDataTypeIndex(_xColPropertySet, true);
if (i > -1)
return (bisAutoIncrementableInfos[i]);
else
return false;
}
public boolean supportsDataType(int _curDataType){
return (JavaTools.FieldInIntTable(nDataTypeInfos, _curDataType)> -1);
}
@ -245,25 +255,24 @@ public class TypeInspector{
/**
* an empty string is returned when no appropriate Typename can be found
* finds the first TypeName of the passed datatype that supports Autoincrementation.
* finds the first TypeName of the passed datatype.
* @param _curDataType
* @return
*/
public String getDefaultTypeName(int _curDataType){
String sdefaultdatatypename = "";
boolean bleaveloop = false;
int startindex = 0;
while (!bleaveloop){
int i = JavaTools.FieldInIntTable(nDataTypeInfos, _curDataType, startindex);
startindex = i+1;
bleaveloop = (i == -1);
if (!bleaveloop){
sdefaultdatatypename = sDataTypeNames[i];
if (bisAutoIncrementableInfos[i])
return sdefaultdatatypename;
}
}
return sdefaultdatatypename;
int i = JavaTools.FieldInIntTable(nDataTypeInfos, _curDataType, 0);
if (i > -1)
return sDataTypeNames[i];;
return "";
}
public int getDataType(String _sTypeName){
int i = JavaTools.FieldInList(sDataTypeNames, _sTypeName);
if (i > -1)
return nDataTypeInfos[i];
else
return getLastConversionFallbackDataType();
}
@ -317,9 +326,37 @@ public class TypeInspector{
return retDataType;
}
public int getAutoIncrementIndex(XPropertySet _xColPropertySet){
try {
boolean bleaveloop = false;
int startindex = 0;
int curDataType = ((Integer) _xColPropertySet.getPropertyValue("Type")).intValue();
while (!bleaveloop){
int i = JavaTools.FieldInIntTable(nDataTypeInfos, curDataType, startindex);
startindex = i+1;
bleaveloop = (i == -1);
if (!bleaveloop){
if (bisAutoIncrementableInfos[i]){
return nDataTypeInfos[i];
}
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
return INVALID;
}
public boolean isAutoIncrementable(XPropertySet _xColPropertySet){
return (getAutoIncrementIndex(_xColPropertySet) != INVALID);
}
/** finds the first available DataType that can be used as a primary key in a table.
* @return The first datatype that also supports Autoincrmentation is taken according to thefollowing list:
* @return The first datatype that also supports Autoincrmentation is taken according to the following list:
*1) INTEGER
*2) FLOAT
*3) REAL
@ -329,7 +366,8 @@ public class TypeInspector{
* If no appropriate datatype is found ther first available numeric type after DataType.INTEGER
* according to the 'convertDataType' method is returned
*/
/**TODO the fallback order is the same as implemented in the method 'convertDataType'. It's not very elegant to have the same intelligence
/**TODO the fallback order is the same as implemented in the method 'convertDataType'.
* It's not very elegant to have the same intelligence
* on several spots in the class!!
*
*/