/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.connector.metadata.runtime;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.teiid.cdk.api.TranslationUtility;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.language.ColumnReference;
import org.teiid.language.DerivedColumn;
import org.teiid.language.Select;
import org.teiid.metadata.Column;
import org.teiid.metadata.BaseColumn.NullType;
import org.teiid.metadata.Column.SearchType;
/**
*/
public class TestElement extends TestCase {
private static TranslationUtility CONNECTOR_METADATA_UTILITY = createTranslationUtility(getTestVDBName());
Map<String, String> props;
/**
* @param name
*/
public TestElement(String name) {
super(name);
}
private static String getTestVDBName() {
return UnitTestUtil.getTestDataPath() + "/ConnectorMetadata.vdb"; //$NON-NLS-1$
}
public static TranslationUtility createTranslationUtility(String vdbName) {
return new TranslationUtility(vdbName);
}
public Column getElement(String groupName, String elementName, TranslationUtility transUtil) throws Exception {
Select query = (Select) transUtil.parseCommand("SELECT " + elementName + " FROM " + groupName); //$NON-NLS-1$ //$NON-NLS-2$
DerivedColumn symbol = query.getDerivedColumns().get(0);
ColumnReference element = (ColumnReference) symbol.getExpression();
return element.getMetadataObject();
}
public void helpTestElement(String fullGroupName, String elementShortName, TranslationUtility transUtil,
String nameInSource, Object defaultValue, Object minValue, Object maxValue,
Class<?> javaType, int length, NullType nullable, int position, SearchType searchable,
boolean autoIncrement, boolean caseSensitive, Map<String, String> expectedProps)
throws Exception {
Column element = getElement(fullGroupName, elementShortName, transUtil);
assertEquals(nameInSource, element.getNameInSource());
assertEquals(defaultValue, element.getDefaultValue());
assertEquals(minValue, element.getMinimumValue());
assertEquals(maxValue, element.getMaximumValue());
assertEquals(javaType, element.getJavaType());
assertEquals(length, element.getLength());
assertEquals(nullable, element.getNullType());
assertEquals(position + 1, element.getPosition());
assertEquals(searchable, element.getSearchType());
assertEquals(autoIncrement, element.isAutoIncremented());
assertEquals(caseSensitive, element.isCaseSensitive());
Map<String, String> extProps = element.getProperties();
assertEquals(expectedProps, extProps);
}
public void testElement1() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestNameInSource", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
"the name in source", // name in source //$NON-NLS-1$
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.Nullable, // nullable
0, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testElement2() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestDefaultValue", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
"1000", // default value //$NON-NLS-1$
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
1, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testElement3() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestMinMaxValue", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
"500", // minimum value //$NON-NLS-1$
"25000", // maximum value //$NON-NLS-1$
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
2, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testElement4() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestAutoIncrement", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Long.class, // java type
0, // length
NullType.Nullable, // nullable
3, // position
SearchType.Searchable, // searchable
true, // auto incremented
true, // case sensitive
props
);
}
public void testElement5() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestCaseSensitive", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.Nullable, // nullable
4, // position
SearchType.Searchable, // searchable
false, // auto incremented
false, // case sensitive
props
);
}
public void testElement6() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestExtensionProp", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
5, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testEnterpriseDataTypes() throws Exception {
helpTestElement(
"ConnectorMetadata.TestTable", // group name //$NON-NLS-1$
"TestDataType", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
0, // length
NullType.Nullable, // nullable
6, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testUnsearchable() throws Exception {
helpTestElement(
"ConnectorMetadata.TestSearchableColumns", // group name //$NON-NLS-1$
"TestUnsearchable", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
0, // position
SearchType.Unsearchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testSearchableLike() throws Exception {
helpTestElement(
"ConnectorMetadata.TestSearchableColumns", // group name //$NON-NLS-1$
"TestSearchableLike", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.Nullable, // nullable
1, // position
SearchType.Like_Only, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testSearchableComparable() throws Exception {
helpTestElement(
"ConnectorMetadata.TestSearchableColumns", // group name //$NON-NLS-1$
"TestSearchableComparable", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
2, // position
SearchType.All_Except_Like, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testSearchable() throws Exception {
helpTestElement(
"ConnectorMetadata.TestSearchableColumns", // group name //$NON-NLS-1$
"TestSearchable", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.Nullable, // nullable
3, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testNullable() throws Exception {
helpTestElement(
"ConnectorMetadata.TestNullableColumns", // group name //$NON-NLS-1$
"TestNullable", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
0, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testNotNullable() throws Exception {
helpTestElement(
"ConnectorMetadata.TestNullableColumns", // group name //$NON-NLS-1$
"TestNotNullable", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.No_Nulls, // nullable
1, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testNullableUnknown() throws Exception {
helpTestElement(
"ConnectorMetadata.TestNullableColumns", // group name //$NON-NLS-1$
"TestNullableUnknown", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
String.class, // java type
10, // length
NullType.Unknown, // nullable
2, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
public void testElementWithCategories() throws Exception {
helpTestElement(
"ConnectorMetadata.TestCatalog.TestSchema.TestTable2", // group name //$NON-NLS-1$
"TestCol", // element name //$NON-NLS-1$
CONNECTOR_METADATA_UTILITY, // translation utility
null, // name in source
null, // default value
null, // minimum value
null, // maximum value
Integer.class, // java type
0, // length
NullType.Nullable, // nullable
0, // position
SearchType.Searchable, // searchable
false, // auto incremented
true, // case sensitive
props
);
}
@Override
protected void setUp() throws Exception {
props = new HashMap<String, String>();
props.put("ColProp", "defaultvalue"); //$NON-NLS-1$ //$NON-NLS-2$
}
}