Author: bfoster
Date: Mon Mar 28 05:35:59 2011
New Revision: 1086126

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

- continued updates to column-based datasource catalog -- IT JUST WORKS!!!!!!

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

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

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=1086126&r1=1086125&r2=1086126&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
 Mon Mar 28 05:35:59 2011
@@ -31,14 +31,12 @@ import org.apache.oodt.commons.date.Date
 
 //JDK imports
 import java.sql.Connection;
-import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.HashMap;
 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;
 import java.util.logging.Logger;
@@ -107,7 +105,7 @@ public class ColumnBasedDataSourceCatalo
 
     protected String getType(Element element) {
        if (this.isVector(element))
-               return element.getDCElement().replaceFirst(VECTOR + "\\<", 
"").replaceAll("\\>", "");
+               return element.getDCElement().toUpperCase().replaceFirst(VECTOR 
+ "\\<", "").replaceAll("\\>", "");
        else
                return element.getDCElement() != null ? 
element.getDCElement().toUpperCase() : STRING;
     }
@@ -218,7 +216,14 @@ public class ColumnBasedDataSourceCatalo
             conn.setAutoCommit(false);
             statement = this.setDateFormats(conn.createStatement());
             
-            String removeSql = "DELETE FROM " + 
product.getProductType().getName() + "_vw WHERE ProductId = " + 
product.getProductId();
+            Vector<String> queryTables = new Vector<String>();
+            queryTables.add(product.getProductType().getName() + "_METADATA");
+            for (Element element : 
this.validationLayer.getElements(product.getProductType()))
+               if (this.isVector(element))
+                       queryTables.add(element.getElementName() + "_XREF");
+            
+//            String removeSql = "DELETE FROM " + 
product.getProductType().getName() + "_vw WHERE ProductId = " + 
product.getProductId();
+            String removeSql = "DELETE FROM " + StringUtils.join(queryTables, 
",") + " WHERE ProductId = " + product.getProductId();
             statement.execute(removeSql);
             
             conn.commit();
@@ -849,37 +854,59 @@ public class ColumnBasedDataSourceCatalo
             conn = dataSource.getConnection();
             statement = this.setDateFormats(conn.createStatement());
 
-            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());
+            Metadata metadata = new Metadata();
+            
+            List<String> scalarElementNames = new Vector<String>();
+            
+            List<Element> elements = 
this.validationLayer.getElements(product.getProductType());
+            for (Element element : elements) {
+               if (!this.isVector(element)) {
+                       
scalarElementNames.add(this.isDate(this.getType(element)) 
+                                               ? "to_char(" + 
element.getElementName() 
+                                                               + ", '" + 
this.getDateFormat(this.getType(element)) 
+                                                               + "') as " + 
element.getElementName() 
+                                               : element.getElementName());    
                                
+               }else {
+                       try {
+                                       String getVectorValuesSql = 
+                                               "SELECT " + 
(this.isDate(this.getType(element)) 
+                                                               ? "to_char(" + 
element.getElementName() 
+                                                                               
+ ", '" + this.getDateFormat(this.getType(element)) 
+                                                                               
+ "') as " + element.getElementName() 
+                                                               : 
element.getElementName()) 
+                                               + " FROM " + 
element.getElementName() + "_XREF"
+                                               + " WHERE ProductId = " + 
product.getProductId(); 
+                           LOG.log(Level.FINE, "getMetadata Executing: " + 
getVectorValuesSql);
+                           rs = statement.executeQuery(getVectorValuesSql);
+                           Vector<String> values = new Vector<String>();
+                           while(rs.next()) 
+                               
values.add(rs.getString(element.getElementName()));
+                           metadata.addMetadata(element.getElementName(), 
values);
+                       }catch (Exception e) {
+                        LOG.log(Level.SEVERE, "Failed to get metadata for 
product '" + product.getProductId() + "' for element '" + 
element.getElementName() + "' : " + e.getMessage(), e);
+                        throw new CatalogException("Failed to get metadata for 
product '" + product.getProductId() + "' for element '" + 
element.getElementName() + "' : " + e.getMessage(), e);
+                       }finally {
+                               try { rs.close(); } catch (Exception e) {}
+                       }
                }
             }
-            String metadataSql = "SELECT " + StringUtils.join(selectElements, 
",") + " FROM "
-                    + product.getProductType().getName() + "_VW"
+
+            String metadataSql = "SELECT " + 
StringUtils.join(scalarElementNames, ",") + " FROM "
+                    + product.getProductType().getName() + "_METADATA"
                     + " WHERE ProductId = " + product.getProductId();
 
             LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
             rs = statement.executeQuery(metadataSql);
             
-            Metadata metadata = new Metadata();
-            List<Element> elements = 
this.validationLayer.getElements(product.getProductType());
-            if (rs.next()) { 
-
-               for (Element element : elements) {
+            if (rs.next()) {
+               for (String elementName : scalarElementNames) {
                        try {
-                               String value =  
rs.getString(element.getElementName());
+                               String value =  rs.getString(elementName);
                                if (value == null)
                                        throw new Exception("value null");
-                               metadata.addMetadata(element.getElementName(), 
value);
+                               metadata.addMetadata(elementName, value);
                        }catch (Exception e) {
-                        LOG.log(Level.WARNING, "Element '" + 
element.getElementName() + "' not found : " + e.getMessage());
+                        LOG.log(Level.WARNING, "Element '" + elementName + "' 
not found : " + e.getMessage());
                        }
                 }
             }
@@ -903,36 +930,65 @@ public class ColumnBasedDataSourceCatalo
         try {
             conn = dataSource.getConnection();
             statement = this.setDateFormats(conn.createStatement());
+
+            Metadata metadata = new Metadata();
             
-            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());
+            List<String> scalarElementNames = new Vector<String>();
+            
+            List<Element> elements = 
this.validationLayer.getElements(product.getProductType());
+            for (Element element : elements) {
+               if (!elems.contains(element.getElementName()))
+                       continue;
+               if (!this.isVector(element)) {
+                       
scalarElementNames.add(this.isDate(this.getType(element)) 
+                                               ? "to_char(" + 
element.getElementName() 
+                                                               + ", '" + 
this.getDateFormat(this.getType(element)) 
+                                                               + "') as " + 
element.getElementName() 
+                                               : element.getElementName());    
                                
+               }else {
+                       try {
+                                       String getVectorValuesSql = 
+                                               "SELECT " + 
(this.isDate(this.getType(element)) 
+                                                               ? "to_char(" + 
element.getElementName() 
+                                                                               
+ ", '" + this.getDateFormat(this.getType(element)) 
+                                                                               
+ "') as " + element.getElementName() 
+                                                               : 
element.getElementName()) 
+                                               + " FROM " + 
element.getElementName() + "_XREF"
+                                               + " WHERE ProductId = " + 
product.getProductId(); 
+                           LOG.log(Level.FINE, "getMetadata Executing: " + 
getVectorValuesSql);
+                           rs = statement.executeQuery(getVectorValuesSql);
+                           Vector<String> values = new Vector<String>();
+                           while(rs.next()) 
+                               
values.add(rs.getString(element.getElementName()));
+                           metadata.addMetadata(element.getElementName(), 
values);
+                       }catch (Exception e) {
+                        LOG.log(Level.SEVERE, "Failed to get metadata for 
product '" + product.getProductId() + "' for element '" + 
element.getElementName() + "' : " + e.getMessage(), e);
+                        throw new CatalogException("Failed to get metadata for 
product '" + product.getProductId() + "' for element '" + 
element.getElementName() + "' : " + e.getMessage(), e);
+                       }finally {
+                               try { rs.close(); } catch (Exception e) {}
+                       }
                }
             }
-            
-            String metadataSql = "SELECT " + StringUtils.join(selectElements, 
",") + " FROM "
-                    + product.getProductType().getName() + "_VW"
+
+            String metadataSql = "SELECT " + 
StringUtils.join(scalarElementNames, ",") + " FROM "
+                    + product.getProductType().getName() + "_METADATA"
                     + " WHERE ProductId = " + product.getProductId();
 
             LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
             rs = statement.executeQuery(metadataSql);
             
-            Metadata metadata = new Metadata();
-            List<Element> elements = 
this.validationLayer.getElements(product.getProductType());
-            if (rs.next()) 
-                for (Element element : elements) 
-                       if (elems.contains(element.getElementName()))
-                               metadata.addMetadata(element.getElementName(), 
rs.getString(element.getElementName()));
-            
+            if (rs.next()) {
+               for (String elementName : scalarElementNames) {
+                       try {
+                               String value =  rs.getString(elementName);
+                               if (value == null)
+                                       throw new Exception("value null");
+                               metadata.addMetadata(elementName, value);
+                       }catch (Exception e) {
+                        LOG.log(Level.WARNING, "Element '" + elementName + "' 
not found : " + e.getMessage());
+                       }
+                }
+            }
             return metadata;
         } catch (Exception e) {
             LOG.log(Level.SEVERE, "Exception getting metadata. Message: "
@@ -956,6 +1012,7 @@ public class ColumnBasedDataSourceCatalo
                     ResultSet.CONCUR_READ_ONLY));
             
             Vector<String> selectElements = new Vector<String>();
+            selectElements.add("ProductId");
             for (Element element : 
this.validationLayer.getElements(productType)) {
                try {
                        if (elementNames.contains(element.getElementName())) {
@@ -969,21 +1026,30 @@ public class ColumnBasedDataSourceCatalo
                     LOG.log(Level.WARNING, "Element '" + 
element.getElementName() + "' not found : " + e.getMessage());
                }
             }
+//            
+//            Vector<String> queryTables = new Vector<String>();
+//            queryTables.add(productType.getName() + "_METADATA");
+//            for (Element element : 
this.validationLayer.getElements(productType))
+//             if (this.isVector(element))
+//                     queryTables.add(element.getElementName() + "_XREF");
             
-            String getProductSql = "SELECT " + 
StringUtils.join(selectElements, ",") + " FROM " + productType.getName() + 
"_VW";
-               if (query.getCriteria() != null)
-                       getProductSql += " WHERE " + 
SqlParser.getInfixCriteriaString(query.getCriteria()).replaceAll("==", "=");;
+            String getMetadataSql = "SELECT DISTINCT(ProductId) AS 
ProductId,ProductType FROM " + productType.getName() + "_VW";
 
-            rs = statement.executeQuery(getProductSql);
+//            String getMetadataSql = "SELECT " + 
StringUtils.join(selectElements, ",") + " FROM " + 
StringUtils.join(queryTables, ",");
+               if (query.getCriteria() != null)
+                       getMetadataSql += " WHERE " + 
SqlParser.getInfixCriteriaString(query.getCriteria()).replaceAll("==", "=");;
+               getMetadataSql += " ORDER BY ProductId DESC";
+                       
+            rs = statement.executeQuery(getMetadataSql);
 
             Vector<Metadata> metadatas = new Vector<Metadata>();
-            List<Element> elements = 
this.validationLayer.getElements(productType);
             while (rs.next()) {
-                Metadata metadata = new Metadata();
-                for (Element element : elements) 
-                       if (elementNames.contains(element.getElementName()))
-                               metadata.addMetadata(element.getElementName(), 
rs.getString(element.getElementName()));
-                metadatas.add(metadata);
+               Product p = new Product();
+               p.setProductId(rs.getString("ProductId"));
+               ProductType pt = new ProductType();
+               pt.setName(rs.getString("ProductType"));
+               p.setProductType(pt);
+               metadatas.add(this.getMetadata(p));
             }
             
             return metadatas;
@@ -1020,9 +1086,10 @@ public class ColumnBasedDataSourceCatalo
             statement = 
this.setDateFormats(conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_READ_ONLY));
             
-               String getProductSql = "SELECT ProductId FROM " + 
type.getName() + "_vw";
+               String getProductSql = "SELECT DISTINCT(ProductId) AS ProductId 
FROM " + type.getName() + "_VW";
                if (query.getCriteria() != null && query.getCriteria().size() > 
0)
                        getProductSql += " WHERE " + 
SqlParser.getInfixCriteriaString(query.getCriteria()).replaceAll("==", "=");
+               getProductSql += " ORDER BY ProductId DESC";
 
                LOG.log(Level.FINE, "performing getProductSql '" + 
getProductSql + "'");
             rs = statement.executeQuery(getProductSql);
@@ -1263,9 +1330,9 @@ public class ColumnBasedDataSourceCatalo
             statement = 
this.setDateFormats(conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_READ_ONLY));
             
-               String getProductSql = "SELECT ProductId FROM " + 
type.getName() + "_vm" 
+               String getProductSql = "SELECT DISTINCT(ProductId) AS ProductId 
FROM " + type.getName() + "_VW" 
                        + (query.getCriteria() != null ? " WHERE " + 
SqlParser.getInfixCriteriaString(query.getCriteria()) : "") 
-                       + " ORDER BY ProductReceivedTime DESC";
+                       + " ORDER BY ProductId DESC";
             rs = statement.executeQuery(getProductSql);
 
             int rsSize = -1;


Reply via email to