Update of
/var/cvs/contributions/CMSContainer_Modules/dataconversion/src/java/com/finalist/cmsc/dataconversion/dataaccess
In directory james.mmbase.org:/tmp/cvs-serv19613/dataaccess
Modified Files:
DataAccessDelegate.java DataAccessor.java ElementMeta.java
Log Message:
CMSC-1166, KNMI migration to the CMS Container,make some improvements to get
the data imported properly
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/dataconversion/src/java/com/finalist/cmsc/dataconversion/dataaccess
See also: http://www.mmbase.org/jira/browse/CMSC-1166
Index: DataAccessDelegate.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/dataconversion/src/java/com/finalist/cmsc/dataconversion/dataaccess/DataAccessDelegate.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- DataAccessDelegate.java 6 May 2008 11:05:49 -0000 1.1
+++ DataAccessDelegate.java 28 Nov 2008 07:30:44 -0000 1.2
@@ -1,9 +1,13 @@
package com.finalist.cmsc.dataconversion.dataaccess;
import java.util.HashMap;
+import java.util.List;
+
import javax.sql.DataSource;
import org.w3c.dom.Element;
+import com.finalist.cmsc.dataconversion.service.Data;
+
public class DataAccessDelegate {
public static HashMap<Integer,Integer> getNumbersOfDataType(Element
element,DataSource dataSource) throws Exception {
@@ -30,4 +34,8 @@
ElementMeta elementMeta = new ElementMeta(element);
return new DataAccessor(dataSource,elementMeta);
}
+
+ public static List<String> getResOfRelation(List<Data> sources, Data
reldata, DataSource dataSource) {
+ return new DataAccessor(dataSource).getResOfRelation(reldata,sources);
+ }
}
Index: DataAccessor.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/dataconversion/src/java/com/finalist/cmsc/dataconversion/dataaccess/DataAccessor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- DataAccessor.java 16 May 2008 11:45:45 -0000 1.2
+++ DataAccessor.java 28 Nov 2008 07:30:44 -0000 1.3
@@ -1,7 +1,13 @@
package com.finalist.cmsc.dataconversion.dataaccess;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.sql.Blob;
import java.sql.Connection;
+import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
@@ -13,6 +19,7 @@
import org.mmbase.util.logging.Logging;
import com.finalist.cmsc.dataconversion.service.Constants;
+import com.finalist.cmsc.dataconversion.service.Data;
/**
* used for Data accessing
@@ -31,6 +38,8 @@
public static final String DATATYPE_NUMBER = "datatype";
public static final String SELFREL_NUMBER = "selfrelate";
public static final String RELACTION_NUMBER = "relation";
+ public static final String INT_TO_DATA = "intToData";
+ public static final String BLOB_TO_STRING = "blobToString";
public DataAccessor(DataSource dataSource,ElementMeta elementMeta) {
@@ -39,6 +48,11 @@
query = new Query();
}
+ public DataAccessor(DataSource dataSource) {
+ this.dataSource = dataSource;
+ query = new Query();
+ }
+
/**
* get numbers
* @return key number
@@ -114,7 +128,6 @@
try {
connection = dataSource.getConnection();
statement = connection.createStatement();
-
if(type == Constants.ENTITY_TYPE) {
rs = statement.executeQuery(query.getQueryString(elementMeta,key));
parseResultSet(rs,list,elementMeta);
@@ -122,7 +135,7 @@
holder.setTableName(elementMeta.getDesTableName());
}
- else if(type == Constants.RELATION_TYPE){
+ else if(type ==
Constants.RELATION_TYPE||type==Constants.RELATION_DATA_TYPE){//add new type
if(StringUtils.isNotEmpty(query.getRelateFieldsString(elementMeta,key))) {
relRs =
statement.executeQuery(query.getRelateFieldsString(elementMeta,key));
parse(relRs,list,elementMeta,holder,key);
@@ -160,11 +173,17 @@
Elements element = new Elements();
for(String fieldName : elementMeta.getFieldNames()) {
if(StringUtils.isNotEmpty(fieldName)) {
- if(StringUtils.isEmpty(elementMeta.getPrefix(fieldName)) ||
(rs.getObject(fieldName) != null &&
rs.getObject(fieldName).toString().startsWith(URL_PROTOCOL))) {
+
if(StringUtils.isEmpty(elementMeta.getStyle(fieldName))&&StringUtils.isEmpty(elementMeta.getPrefix(fieldName))
|| (rs.getObject(fieldName) != null &&
rs.getObject(fieldName).toString().startsWith(URL_PROTOCOL))) {
element.setValue(elementMeta.getDesFieldName(fieldName),rs.getObject(fieldName));
}
- else {
+ else if(!StringUtils.isEmpty(elementMeta.getPrefix(fieldName))){
element.setValue(elementMeta.getDesFieldName(fieldName),elementMeta.getPrefix(fieldName)+rs.getObject(fieldName));
+ }else if(!StringUtils.isEmpty(elementMeta.getStyle(fieldName))){
+ String changeMethod=elementMeta.getStyle(fieldName);
+ Object o=changeStyle(changeMethod,rs,fieldName);
+ if(null!=o){
+
element.setValue(elementMeta.getDesFieldName(fieldName),o);
+ }
}
}
}
@@ -172,6 +191,33 @@
}
}
+ private Object changeStyle(String changeMethod, ResultSet rs, String
fieldName) {
+ try {
+ if (INT_TO_DATA.equals(changeMethod)) {
+ int i=rs.getInt(fieldName);
+ return new java.sql.Date(i);
+ } else if (BLOB_TO_STRING.equals(changeMethod)) {
+ Blob blob = rs.getBlob(fieldName);
+ InputStream inStream = blob.getBinaryStream();
+ StringBuffer out = new StringBuffer();
+ byte[] b = new byte[4096];
+ try {
+ for (int n; (n = inStream.read(b)) != -1;) {
+ out.append(new String(b, 0, n));
+ }
+ } catch (IOException e) {
+ log.error("changeMethod failure!"+changeMethod+"can't make
datatype chnge!"+e.getMessage());
+ e.printStackTrace();
+ }
+ String s=out.toString();
+ return org.mmbase.util.transformers.Xml.XMLEscape(s);
+ }
+ } catch (SQLException e) {
+ log.error("changeMethod failure!"+changeMethod+"can't make datatype
chnge!"+e.getMessage());
+ }
+ return null;
+ }
+
private void parse(ResultSet rs,List<Elements> list,ElementMeta
elementMeta,DataHolder holder,Integer key) throws SQLException {
if(rs == null) return;
@@ -192,6 +238,7 @@
holder.setDnumber(rs.getInt("dnumber"));
}
}
+
private void release(Statement statement, Connection connection) {
if(statement != null) {
try {
@@ -210,4 +257,58 @@
}
}
}
+
+ public List<String> getResOfRelation(Data relData, List<Data> sources) {
+ Connection connection = null;
+ Statement statement = null;
+ ResultSet rs = null;
+ String sql = null;
+ int sv = 0, dv = 0;
+ List<String> numbers = new ArrayList<String>();
+ try {
+ connection = dataSource.getConnection();
+ statement = connection.createStatement();
+ sql = "select * from " + " " + relData.getSourceRelationType() + " "
+ "where snumber in (select number from "
+ + relData.getRelateTable() + ") and dnumber in (select number
from " + relData.getTableName() + ")";
+ rs = statement.executeQuery(sql);
+ while (rs.next()) {
+ sv = rs.getInt("snumber");
+ dv = rs.getInt("dnumber");
+ if (sv != 0 && dv != 0) {
+ String s = String.valueOf(sv);
+ String d = String.valueOf(dv);
+ numbers.add(s + "," + d);
+ }
+ }
+ } catch (SQLException e) {
+ log.error(" get Rel numbers failure!" + e.getMessage());
+ } finally {
+ release(statement, connection);
+ }
+ return numbers;
+ }
+
+ public ArrayList<Integer> getPrimerKeyList(String sourcetype) {
+ Connection connection = null;
+ Statement statement = null;
+ ResultSet rs = null;
+ String sql = null;
+ int sv = 0;
+ ArrayList<Integer> numbers = new ArrayList<Integer>();
+ try {
+ connection = dataSource.getConnection();
+ statement = connection.createStatement();
+ sql = "select * from " + " " + sourcetype;
+ rs = statement.executeQuery(sql);
+ while (rs.next()) {
+ sv = rs.getInt("number");
+ numbers.add(sv);
+ }
+ } catch (SQLException e) {
+ log.error(" get Rel numbers failure!" + e.getMessage());
+ } finally {
+ release(statement, connection);
+ }
+ return numbers;
+ }
}
Index: ElementMeta.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/dataconversion/src/java/com/finalist/cmsc/dataconversion/dataaccess/ElementMeta.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- ElementMeta.java 6 May 2008 11:05:49 -0000 1.1
+++ ElementMeta.java 28 Nov 2008 07:30:44 -0000 1.2
@@ -71,6 +71,23 @@
return prefix;
}
+ //add change sourceStyle
+ public String getStyle(String fieldName) {
+ NodeList nodeList = element.getChildNodes();
+ String Style = "";
+ for(int i = 0 ; i <nodeList.getLength() ; i++) {
+ Node node = nodeList.item(i);
+ if(node.getNodeName().equalsIgnoreCase("field")) {
+ Element elem = (Element)node;
+ if(fieldName.equals(elem.getAttribute("sourcename")) &&
StringUtils.isNotEmpty(elem.getAttribute("sourcestyle"))) {
+ Style = elem.getAttribute("sourcestyle");
+ }
+ }
+ }
+ return Style;
+ }
+
+
public String getSourceTableName() {
return element.getAttribute("sourcetype");
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs