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 Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs