diff options
Diffstat (limited to 'das-java/tags/1.0-incubating-beta2-rc1/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java')
-rw-r--r-- | das-java/tags/1.0-incubating-beta2-rc1/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java | 338 |
1 files changed, 0 insertions, 338 deletions
diff --git a/das-java/tags/1.0-incubating-beta2-rc1/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java b/das-java/tags/1.0-incubating-beta2-rc1/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java deleted file mode 100644 index 608ed6122a..0000000000 --- a/das-java/tags/1.0-incubating-beta2-rc1/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.das.rdb.impl; - -import java.io.IOException; -import java.io.OutputStream; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Iterator; - -import org.apache.tuscany.das.rdb.config.ResultDescriptor; -import org.apache.tuscany.das.rdb.config.impl.ResultDescriptorImpl; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.graphbuilder.impl.GraphBuilderMetadata; -import org.apache.tuscany.das.rdb.graphbuilder.impl.ResultSetProcessor; -import org.apache.tuscany.sdo.api.SDOUtil; - -import commonj.sdo.ChangeSummary; -import commonj.sdo.DataGraph; -import commonj.sdo.DataObject; - -public class ReadCommandImpl extends CommandImpl { - - private int startRow = 1; - - private int endRow = Integer.MAX_VALUE; - - private List resultDescriptors = null; - - public ReadCommandImpl(org.apache.tuscany.das.rdb.config.Command command, MappingWrapper mapping, List resultDescriptor) { - super(command); - this.configWrapper = mapping; - - if (resultDescriptor != null && !resultDescriptor.isEmpty()) { - this.resultSetShape = new ResultSetShape(resultDescriptor, configWrapper.getConfig());//JIRA-952 - } - } - - public ReadCommandImpl(String sqlString, MappingWrapper mapping, List resultDescriptor) { - super(sqlString); - this.configWrapper = mapping; - - if (resultDescriptor != null && !resultDescriptor.isEmpty()) { - this.resultSetShape = new ResultSetShape(resultDescriptor, configWrapper.getConfig());//JIRA-952 - } - } - - private void refreshResultSetShape(){ - //sort descriptor and use in ResultSetShape - sortResultDescriptors(); - this.resultSetShape = new ResultSetShape(this.resultDescriptors, configWrapper.getConfig()); - } - - private void sortResultDescriptors(){ - if(this.resultDescriptors == null) { - return; - } - - if( this.resultDescriptors.size()==0) { - return; - } - - //when any index is found not set, do not sort - for(Iterator it = this.resultDescriptors.iterator() ; it.hasNext();){ - ResultDescriptor resultDescriptor = (ResultDescriptor) it.next(); - if(resultDescriptor.getColumnIndex() <= -1){ - return; - } - } - - //now is time to sort - Object[] resultDescAry = this.resultDescriptors.toArray(); - for(int i=0; i<resultDescAry.length; i++){ - for(int j=i+1; j<resultDescAry.length; j++){ - if( ((ResultDescriptor)resultDescAry[j]).getColumnIndex() - < ((ResultDescriptor)resultDescAry[i]).getColumnIndex()){ - ResultDescriptor tmpResDesc = (ResultDescriptor)resultDescAry[i]; - resultDescAry[i] = resultDescAry[j]; - resultDescAry[j] = tmpResDesc; - } - - if( ((ResultDescriptor)resultDescAry[j]).getColumnIndex() - == ((ResultDescriptor)resultDescAry[i]).getColumnIndex()){ - throw new RuntimeException("Two columns in Result Descriptor can not have same index"); - } - } - } - - this.resultDescriptors.clear(); - for(int i=0; i<resultDescAry.length; i++){ - this.resultDescriptors.add(resultDescAry[i]); - } - - return; - } - - private ResultDescriptor deepCopyResultDescriptor(ResultDescriptor inObj){ - ResultDescriptorImpl outObj = new ResultDescriptorImpl(); - outObj.setColumnIndex(inObj.getColumnIndex()); - outObj.setColumnName(inObj.getColumnName()); - outObj.setColumnType(inObj.getColumnType()); - outObj.setTableName(inObj.getTableName()); - outObj.setSchemaName(inObj.getSchemaName()); - return outObj; - } - - private List deepCopyResultDescriptors(List resultDescriptors){ - if(resultDescriptors == null || resultDescriptors.size() == 0) - return null; - - ArrayList copyList = new ArrayList(); - - for(Iterator it = resultDescriptors.iterator() ; it.hasNext();){ - copyList.add( deepCopyResultDescriptor( (ResultDescriptorImpl) it.next())); - } - return copyList; - } - - /** - * When any columnIndex == -ve, sorting will not happen in ResultShapeSorter (old way) - * When null is passed, set this.resultSetShape to null, this will later trigger, dbms metadata - * based shaping of result - */ - public void setResultDescriptors(List resultDescriptors){ - this.resultDescriptors = deepCopyResultDescriptors(resultDescriptors); - if(this.resultDescriptors == null || this.resultDescriptors.size()==0){ - this.resultSetShape = null; - } - else{ - //below will go away with List<> JDK5 - for(Iterator it = this.resultDescriptors.iterator() ; it.hasNext();){ - - if(!(it.next() instanceof ResultDescriptor)){ - throw new RuntimeException("Elements in List not of type ResultDescriptor!"); - } - - } - refreshResultSetShape(); - } - } - - public List getResultDescriptors(){ - return this.resultDescriptors; - } - - public void addResultDescriptor(ResultDescriptor resultDescriptor){ - //if >= 0 columnIndex, add/replace for given index - //if < 0 columnIndex, add at end of current list - if(resultDescriptor == null) { - return; - } - - if(this.resultDescriptors == null){ - this.resultDescriptors = new ArrayList(); - } - - if(resultDescriptor.getColumnIndex() <0){ - this.resultDescriptors.add(deepCopyResultDescriptor(resultDescriptor));//dont care about columnIndex,add at end, old way - } - else{ - ResultDescriptor existing = getResultDescriptor(resultDescriptor.getColumnIndex()); - if(existing != null){ - removeResultDescriptor(resultDescriptor.getColumnIndex()); - } - this.resultDescriptors.add(deepCopyResultDescriptor(resultDescriptor));//add at end, sorting will happen below - } - - refreshResultSetShape(); - } - - - public ResultDescriptor removeResultDescriptor(int columnIndex){ - //if < 0 index return null - //if >=0 index and available at given index, remove and return same - //if >=0 index and not available at given index, return null - ResultDescriptor existing = null; - if(columnIndex >=0 && ((existing = getResultDescriptor(columnIndex)) != null) ){ - this.resultDescriptors.remove(existing); - refreshResultSetShape(); - return existing; - } - return null; - } - - public ResultDescriptor removeResultDescriptor(ResultDescriptor resultDescriptor){ - //remove and return only if matched for index, name, type, table name, schema name - //else return null - if(resultDescriptor != null){ - ResultDescriptor existing = getResultDescriptor(resultDescriptor.getColumnIndex()); - if(existing != null && - existing.getColumnName().equals(resultDescriptor.getColumnName()) && - existing.getColumnType().equals(resultDescriptor.getColumnType()) && - existing.getTableName().equals(resultDescriptor.getTableName()) ) { - if(this.configWrapper.getConfig().isDatabaseSchemaNameSupported()){//multi schema support - if(resultDescriptor.getSchemaName() != null && existing.getSchemaName() != null - && resultDescriptor.getSchemaName().equals(existing.getSchemaName())){ - this.resultDescriptors.remove(existing); - refreshResultSetShape(); - return existing; - } - return null; - } - else{ - this.resultDescriptors.remove(existing); - refreshResultSetShape(); - return existing; - } - } - } - return null; - } - - public ResultDescriptor getResultDescriptor(int columnIndex){ - //if <0 index return null - //if >=0 index and available at given index, return same - //if >=0 index and not available at given index, return null - if(columnIndex >=0 && this.resultDescriptors != null){ - - for(Iterator it = this.resultDescriptors.iterator() ; it.hasNext();){ - ResultDescriptor rs = (ResultDescriptor) it.next(); - - if( rs.getColumnIndex() == columnIndex){ - return rs; - } - - } - } - - return null; - } - - //Utility method - public void printResultDescriptors(OutputStream ostrm) throws IOException{ - if(this.resultDescriptors != null && this.resultDescriptors.size() != 0){ - - for(Iterator it = this.resultDescriptors.iterator() ; it.hasNext();){ - ostrm.write( it.next().toString().getBytes() ); - ostrm.write('\n'); - - } - ostrm.flush(); - - } - } - - public void execute() { - throw new UnsupportedOperationException(); - } - - public DataObject executeQuery() { - - if (statement.getConnection() == null) { - throw new RuntimeException("A DASConnection object must be specified before executing the query."); - } - - boolean success = false; - try { - List results = statement.executeQuery(parameters); - success = true; - return buildGraph(results); - } catch (SQLException e) { - throw new RuntimeException(e); - } finally { - if (success) { - statement.getConnection().cleanUp(); - } else { - statement.getConnection().errorCleanUp(); - } - } - } - - protected DataObject buildGraph(List results) throws SQLException { - - // Before we use the mappingModel, do some checking/updating. If - // inferrable information - // isn't specified, add it in. - - GraphBuilderMetadata gbmd = new GraphBuilderMetadata(results, configWrapper.getConfig(), - resultSetShape); - - // Create the DataGraph - DataGraph g = SDOUtil.createDataGraph(); - - // Create the root object - g.createRootObject(gbmd.getRootType()); - - SDOUtil.registerDataGraphTypes(g, gbmd.getDefinedTypes()); - - ChangeSummary summary = g.getChangeSummary(); - - ResultSetProcessor rsp = new ResultSetProcessor(g.getRootObject(), gbmd); - rsp.processResults(getStartRow(), getEndRow()); - - summary.beginLogging(); - - return g.getRootObject(); - } - - - protected int getStartRow() { - return startRow; - } - - protected int getEndRow() { - return endRow; - } - - protected void setStartRow(int startRow) { - this.startRow = startRow; - } - - protected void setEndRow(int endRow) { - this.endRow = endRow; - } - - - protected void enablePaging() { - statement.enablePaging(); - } - -} |