package org.geotools.arcsde.data;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import org.geotools.arcsde.data.versioning.ArcSdeVersionHandler;
import org.geotools.arcsde.session.ISession;
import org.geotools.arcsde.session.SdeRow;
import org.geotools.data.Query;
import org.geotools.data.Transaction;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeatureType;
public class ArcSDEClobTest {
private static ClobTestData testData;
private String temp_table = "clob_test";
private String[] columnNames = { "IntegerField", "ClobField" };
@BeforeClass
public static void oneTimeSetUp() throws Exception {
testData = new ClobTestData();
testData.setUp();
final boolean insertTestData = true;
testData.createTempTable(insertTestData);
}
@AfterClass
public static void finalTearDown() {
boolean cleanTestTable = false;
boolean cleanPool = true;
testData.tearDown(cleanTestTable, cleanPool);
}
/**
* loads {@code test-data/testparams.properties} into a Properties object, wich is used to
* obtain test tables names and is used as parameter to find the DataStore
*/
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testRead() throws Exception {
ISession session = null;
try {
ArcSDEDataStore dstore = testData.getDataStore();
session = dstore.getSession(Transaction.AUTO_COMMIT);
// TODO: This is crap. If data can't be loaded, add another config for the existing
// table
String typeName = testData.getTempTableName(session);
SimpleFeatureType ftype = dstore.getSchema(typeName);
// The row id column is not returned, but the geometry column is (x+1-1=x)
assertEquals("Verify attribute count.", columnNames.length, ftype.getAttributeCount());
ArcSDEQuery query = ArcSDEQuery.createQuery(session, ftype, Query.ALL,
FIDReader.NULL_READER, ArcSdeVersionHandler.NONVERSIONED_HANDLER);
query.execute();
SdeRow row = query.fetch();
assertNotNull("Verify first result is returned.", row);
Object longString = row.getObject(0);
assertNotNull("Verify the non-nullity of first CLOB.", longString);
assertEquals("Verify stringiness.", longString.getClass(), String.class);
row = query.fetch();
longString = row.getObject(0);
assertNotNull("Verify the non-nullity of second CLOB.", longString);
query.close();
} finally {
if (session != null) {
session.dispose();
}
}
}
private String getTempTableName(ISession session) throws IOException {
String tempTableName;
String dbName = session.getDatabaseName();
String user = session.getUser();
StringBuffer sb = new StringBuffer();
if (dbName != null && dbName.length() > 0) {
sb.append(dbName).append(".");
}
if (user != null && user.length() > 0) {
sb.append(user).append(".");
}
sb.append(this.temp_table);
tempTableName = sb.toString().toUpperCase();
return tempTableName;
}
}