Author: bfoster
Date: Sat Mar 26 22:32:37 2011
New Revision: 1085819

URL: http://svn.apache.org/viewvc?rev=1085819&view=rev
Log:

- continued updates to column-based datasource catalog

---------------------

Modified:
    
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalog.java
    
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalogFactory.java
    oodt/branches/wengine-branch/filemgr/src/main/resources/filemgr.properties

Modified: 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalog.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalog.java?rev=1085819&r1=1085818&r2=1085819&view=diff
==============================================================================
--- 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalog.java
 (original)
+++ 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalog.java
 Sat Mar 26 22:32:37 2011
@@ -37,6 +37,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 import java.util.logging.Level;
@@ -66,12 +67,16 @@ public class ColumnBasedDataSourceCatalo
 
     /* our validation layer */
     private ValidationLayer validationLayer = null;
-
-    private Set<String> dbVectorElements;
-    private Set<String> dbIntegerTypes;
     
     /* size of pages of products within the catalog */
     protected int pageSize = -1;
+        
+    public static final String VECTOR = "VECTOR";
+    public static final String STRING = "STRING";
+    public static final String NUMBER = "NUMBER";
+    public static final String DATE = "DATE";
+    public static final String TIMESTAMP = "TIMESTAMP";
+    public static final String TIMESTAMP_TZ = "TIMESTAMP_TZ";
     
     /**
      * <p>
@@ -79,12 +84,10 @@ public class ColumnBasedDataSourceCatalo
      * </p>.
      * @throws  
      */
-    public ColumnBasedDataSourceCatalog(DataSource ds, ValidationLayer 
valLayer, int pageSize, Set<String> dbIntegerTypes, Set<String> 
dbVectorElements) {
+    public ColumnBasedDataSourceCatalog(DataSource ds, ValidationLayer 
valLayer, int pageSize) {
        this.dataSource = ds;
         this.validationLayer = valLayer;
         this.pageSize = pageSize;
-        this.dbIntegerTypes = dbIntegerTypes;
-        this.dbVectorElements = dbVectorElements;
     }
     
     public int getPageSize() {
@@ -93,46 +96,40 @@ public class ColumnBasedDataSourceCatalo
     
     protected Statement setDateFormats(Statement statement) throws Exception {
        statement.execute("alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD'");
-       statement.execute("alter session set NLS_TIME_FORMAT = 
'HH24:MI:SS.FF3'");
-       statement.execute("alter session set NLS_TIMESTAMP_FORMAT = 
'YYYY-MM-DD\"T\"HH24:MI:SS.FF3'");
-       statement.execute("alter session set NLS_TIME_TZ_FORMAT = 
'HH24:MI:SS.FF3TZH:TZM'");
        statement.execute("alter session set 
NLS_TIMESTAMP_FORMAT='YYYY-MM-DD\"T\"HH24:MI:SS.FF3\"Z\"'");
        statement.execute("alter session set 
NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD\"T\"HH24:MI:SS.FF3TZH:TZM'");
        return statement;
     }
     
     protected boolean isVector(Element element) {
-       return this.dbVectorElements.contains(element.getElementId());
+       return element.getDCElement() != null ? 
element.getDCElement().toUpperCase().contains(VECTOR) : false;
     }
-    
-    protected boolean isString(Element element, ProductType productType) 
throws Exception {
-        Connection conn = null;
-       ResultSet tables = null;
-       ResultSet columns = null;
 
-        try {
-               conn = this.dataSource.getConnection();
-               DatabaseMetaData metaData = conn.getMetaData();
-               
-               if (this.isVector(element))
-                       tables = metaData.getTables(null, null, 
element.getElementName().toUpperCase() + "_XREF", new String[] { "TABLE" });
-               else 
-                       tables = metaData.getTables(null, null, 
productType.getName().toUpperCase() + "_METADATA", new String[] { "TABLE" });
-               
-               if (tables.next()) {
-                       columns = metaData.getColumns(null, null, 
tables.getString("TABLE_NAME"), null);
-                       while (columns.next())
-                               if 
(columns.getString("COLUMN_NAME").equalsIgnoreCase(element.getElementName()))
-                                       return 
!dbIntegerTypes.contains(columns.getString("TYPE_NAME").toLowerCase());
-               }
-               throw new Exception("Failed to determine type for element '" + 
element.getElementName() + "'");
-       }catch (Exception e) {
-               throw new Exception("Failed to determine if element is string 
for element '" + element.getElementName() + "' : " + e.getMessage(),e);
-       }finally {
-               try { conn.close(); } catch (Exception e) {}
-               try { tables.close(); } catch (Exception e) {}
-               try { columns.close(); } catch (Exception e) {}
-       }
+    protected String getType(Element element) {
+       if (this.isVector(element))
+               return element.getDCElement().replaceFirst(VECTOR + "\\<", 
"").replaceAll("\\>", "");
+       else
+               return element.getDCElement() != null ? 
element.getDCElement().toUpperCase() : STRING;
+    }
+    
+    protected String getDateFormat(String type) {
+       if (type.equalsIgnoreCase(DATE)) {
+               return "YYYY-MM-DD";
+       }else if (type.equalsIgnoreCase(TIMESTAMP)) {
+               return "YYYY-MM-DD\"T\"HH24:MI:SS.FF3\"Z\"";
+       }else if (type.equalsIgnoreCase(TIMESTAMP_TZ)) {
+               return "YYYY-MM-DD\"T\"HH24:MI:SS.FF3TZH:TZM";
+       }else {
+               return null;
+       }       
+    }
+    
+    protected boolean isDate(String type) {
+       return type.equalsIgnoreCase(DATE) || type.equalsIgnoreCase(TIMESTAMP) 
|| type.equalsIgnoreCase(TIMESTAMP_TZ);
+    }
+    
+    protected boolean isString(String type) {
+       return type.equalsIgnoreCase(STRING);
     }
 
     /*
@@ -162,7 +159,7 @@ public class ColumnBasedDataSourceCatalo
                if (metadata.getMetadata(element.getElementName()) != null) {
                        if (!this.isVector(element)) {
                                
scalarElementNames.add(element.getElementName());
-                               if (this.isString(element, 
product.getProductType()))
+                               if (this.isString(this.getType(element)))
                                        scalarElementValues.add("'" + 
metadata.getMetadata(element.getElementName()) + "'");
                                else
                                        
scalarElementValues.add(metadata.getMetadata(element.getElementName()));        
                                
@@ -172,7 +169,7 @@ public class ColumnBasedDataSourceCatalo
                                                        
element.getElementName(), 
                                                        
element.getElementName(), 
                                                        product.getProductId(),
-                                                       (this.isString(element, 
product.getProductType()) ? "'" + value + "'" : value));
+                                                       
(this.isString(this.getType(element)) ? "'" + value + "'" : value));
                                LOG.log(Level.FINE, "addMetadata Executing: " + 
sqlInsert);
                                        statement.execute(sqlInsert);
                                }
@@ -852,8 +849,20 @@ public class ColumnBasedDataSourceCatalo
             conn = dataSource.getConnection();
             statement = this.setDateFormats(conn.createStatement());
 
-            String metadataSql = "SELECT * FROM "
-                    + product.getProductType().getName() + "_vw "
+            Vector<String> selectElements = new Vector<String>();
+            for (Element element : 
this.validationLayer.getElements(product.getProductType())) {
+               try {
+                       String type = this.getType(element);
+                       if (this.isDate(type))
+                               selectElements.add("to_char(" + 
element.getElementName() + ", '" + this.getDateFormat(type) + "') as " + 
element.getElementName());
+                       else
+                               selectElements.add(element.getElementName());
+               }catch (Exception e) {
+                    LOG.log(Level.WARNING, "Element '" + 
element.getElementName() + "' not found : " + e.getMessage());
+               }
+            }
+            String metadataSql = "SELECT " + StringUtils.join(selectElements, 
",") + " FROM "
+                    + product.getProductType().getName() + "_VW"
                     + " WHERE ProductId = " + product.getProductId();
 
             LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
@@ -862,7 +871,8 @@ public class ColumnBasedDataSourceCatalo
             Metadata metadata = new Metadata();
             List<Element> elements = 
this.validationLayer.getElements(product.getProductType());
             if (rs.next()) { 
-                for (Element element : elements) {
+
+               for (Element element : elements) {
                        try {
                                String value =  
rs.getString(element.getElementName());
                                if (value == null)
@@ -893,9 +903,24 @@ public class ColumnBasedDataSourceCatalo
         try {
             conn = dataSource.getConnection();
             statement = this.setDateFormats(conn.createStatement());
-
-            String metadataSql = "SELECT * FROM "
-                    + product.getProductType().getName() + "_vw "
+            
+            Vector<String> selectElements = new Vector<String>();
+            for (Element element : 
this.validationLayer.getElements(product.getProductType())) {
+               try {
+                       if (elems.contains(element.getElementName())) {
+                               String type = this.getType(element);
+                               if (this.isDate(type))
+                                       selectElements.add("to_char(" + 
element.getElementName() + ", '" + this.getDateFormat(type) + "') as " + 
element.getElementName());
+                               else
+                                       
selectElements.add(element.getElementName());
+                       }
+               }catch (Exception e) {
+                    LOG.log(Level.WARNING, "Element '" + 
element.getElementName() + "' not found : " + e.getMessage());
+               }
+            }
+            
+            String metadataSql = "SELECT " + StringUtils.join(selectElements, 
",") + " FROM "
+                    + product.getProductType().getName() + "_VW"
                     + " WHERE ProductId = " + product.getProductId();
 
             LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
@@ -920,7 +945,7 @@ public class ColumnBasedDataSourceCatalo
         }
     }
     
-    public List<Metadata> getReducedMetadata(Query query, ProductType type,
+    public List<Metadata> getReducedMetadata(Query query, ProductType 
productType,
                        List<String> elementNames) throws CatalogException {
         Connection conn = null;
         Statement statement = null;
@@ -930,14 +955,29 @@ public class ColumnBasedDataSourceCatalo
             statement = 
this.setDateFormats(conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_READ_ONLY));
             
-               String getProductSql = "SELECT * FROM " + type.getName();
+            Vector<String> selectElements = new Vector<String>();
+            for (Element element : 
this.validationLayer.getElements(productType)) {
+               try {
+                       if (elementNames.contains(element.getElementName())) {
+                               String type = this.getType(element);
+                               if (this.isDate(type))
+                                       selectElements.add("to_char(" + 
element.getElementName() + ", '" + this.getDateFormat(type) + "') as " + 
element.getElementName());
+                               else
+                                       
selectElements.add(element.getElementName());
+                       }
+               }catch (Exception e) {
+                    LOG.log(Level.WARNING, "Element '" + 
element.getElementName() + "' not found : " + e.getMessage());
+               }
+            }
+            
+            String getProductSql = "SELECT " + 
StringUtils.join(selectElements, ",") + " FROM " + productType.getName() + 
"_VW";
                if (query.getCriteria() != null)
                        getProductSql += " WHERE " + 
SqlParser.getInfixCriteriaString(query.getCriteria()).replaceAll("==", "=");;
 
             rs = statement.executeQuery(getProductSql);
 
             Vector<Metadata> metadatas = new Vector<Metadata>();
-            List<Element> elements = this.validationLayer.getElements(type);
+            List<Element> elements = 
this.validationLayer.getElements(productType);
             while (rs.next()) {
                 Metadata metadata = new Metadata();
                 for (Element element : elements) 

Modified: 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalogFactory.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalogFactory.java?rev=1085819&r1=1085818&r2=1085819&view=diff
==============================================================================
--- 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalogFactory.java
 (original)
+++ 
oodt/branches/wengine-branch/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/ColumnBasedDataSourceCatalogFactory.java
 Sat Mar 26 22:32:37 2011
@@ -55,9 +55,6 @@ public class ColumnBasedDataSourceCatalo
     protected String user;
     protected String pass;
     protected String driver;
-
-    protected Set<String> dbIntegerTypes;
-    protected Set<String> dbVectorElements;
     
     protected String validationLayerFactoryClass;
     
@@ -84,16 +81,6 @@ public class ColumnBasedDataSourceCatalo
                String dbIntTypes = PathUtils
                                .replaceEnvVariables(System
                                                
.getProperty("org.apache.oodt.cas.filemgr.catalog.column.based.datasource.db.int.types"));
-               if (dbIntTypes != null)
-                       this.dbIntegerTypes = new 
HashSet<String>(Arrays.asList(dbIntTypes.toLowerCase()
-                                       .split(",")));
-        
-               String dbVecElems = PathUtils
-                               .replaceEnvVariables(System
-                                               
.getProperty("org.apache.oodt.cas.filemgr.catalog.column.based.datasource.db.vector.elements"));
-               if (dbVecElems != null)
-                       this.dbVectorElements = new 
HashSet<String>(Arrays.asList(dbVecElems
-                                       .split(",")));
         
         validationLayerFactoryClass = System
                 .getProperty("filemgr.validationLayer.factory",
@@ -163,22 +150,6 @@ public class ColumnBasedDataSourceCatalo
        public void setValidationLayer(ValidationLayer validationLayer) {
                this.validationLayer = validationLayer;
        }
-       
-       public Set<String> getDbIntegerTypes() {
-               return dbIntegerTypes;
-       }
-
-       public void setDbIntegerTypes(Set<String> dbIntegerTypes) {
-               this.dbIntegerTypes = dbIntegerTypes;
-       }
-
-       public Set<String> getDbVectorElements() {
-               return dbVectorElements;
-       }
-
-       public void setDbVectorElements(Set<String> dbVectorElements) {
-               this.dbVectorElements = dbVectorElements;
-       }
 
        /*
      * (non-Javadoc)
@@ -190,7 +161,7 @@ public class ColumnBasedDataSourceCatalo
                this.validationLayer = 
GenericFileManagerObjectFactory.getValidationLayerFromFactory(validationLayerFactoryClass);
                if (this.ds == null)
                        this.ds = 
DatabaseConnectionBuilder.buildDataSource(user, pass,driver, jdbcUrl);
-        return new ColumnBasedDataSourceCatalog(this.ds, validationLayer, 
pageSize, this.dbIntegerTypes, this.dbVectorElements);
+        return new ColumnBasedDataSourceCatalog(this.ds, validationLayer, 
pageSize);
     }
 
 }

Modified: 
oodt/branches/wengine-branch/filemgr/src/main/resources/filemgr.properties
URL: 
http://svn.apache.org/viewvc/oodt/branches/wengine-branch/filemgr/src/main/resources/filemgr.properties?rev=1085819&r1=1085818&r2=1085819&view=diff
==============================================================================
--- oodt/branches/wengine-branch/filemgr/src/main/resources/filemgr.properties 
(original)
+++ oodt/branches/wengine-branch/filemgr/src/main/resources/filemgr.properties 
Sat Mar 26 22:32:37 2011
@@ -38,8 +38,6 @@ org.apache.oodt.cas.filemgr.catalog.colu
 org.apache.oodt.cas.filemgr.catalog.column.based.datasource.jdbc.pass=pass
 
org.apache.oodt.cas.filemgr.catalog.column.based.datasource.jdbc.driver=driver.class.name
 org.apache.oodt.cas.filemgr.catalog.column.based.datasource.pageSize=20
-org.apache.oodt.cas.filemgr.catalog.column.based.datasource.db.int.types=number,int
-org.apache.oodt.cas.filemgr.catalog.column.based.datasource.db.vector.elements=urn:cas:InputFiles
 
 # mapped data source catalog configuration
 
org.apache.oodt.cas.filemgr.catalog.mappeddatasource.mapFile=/path/to/ops.catalog.typemap.properties


Reply via email to