KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > serversystem > deeprecordcopy > CopyHierarchy


1 package com.daffodilwoods.daffodildb.server.serversystem.deeprecordcopy;
2
3 import java.util.*;
4
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record;
7 import com.daffodilwoods.daffodildb.server.serversystem.*;
8 import com.daffodilwoods.daffodildb.server.sql99.common.*;
9 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*;
10 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
11 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
12 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
13 import com.daffodilwoods.daffodildb.server.sql99.utils.parser.*;
14 import com.daffodilwoods.database.general.*;
15 import com.daffodilwoods.database.resource.*;
16 import com.daffodilwoods.database.utility.*;
17 public class CopyHierarchy {
18
19     Object JavaDoc[] values;
20     _ServerSession serverSession;
21     MappingHandler mappingHandler;
22     ArrayList tables = new ArrayList(3);
23
24
25
26
27     public CopyHierarchy(_ServerSession serverSession) {
28         this.serverSession = serverSession;
29         mappingHandler = new MappingHandler();
30     }
31
32
33     public Object JavaDoc[] copy( Object JavaDoc[] values , TableCopy rootCopy ) throws DException {
34        this.values = values;
35        TableCopy parentCopy = rootCopy;
36        _Iterator rootNodeIterator = getIteratorForRootNode( parentCopy );
37        P.showIterator( rootNodeIterator );
38        serverSession.startSavePoint();
39        return copyRecord(serverSession, parentCopy , rootNodeIterator);
40     }
41
42
43     public Object JavaDoc[] copyRecord(_ServerSession childSession,TableCopy tableCopy,_Iterator iterator) throws DException{
44        Object JavaDoc[] valToReturn = new Object JavaDoc[values.length];
45        try{
46        Vector recordMappings = new Vector();
47        RecordMapping recMap;
48        _Record recordToInsert = null;
49        if(iterator.first()){
50             Object JavaDoc[] oldRecord = iterator.getRecord().getObject();
51             Object JavaDoc[] newRecordtmp = tableCopy.tableInf.createCopyOfRecord(oldRecord,mappingHandler);
52             recMap = new RecordMapping();
53             recMap.setOldRecord(oldRecord);
54             Object JavaDoc[] newRec = new Object JavaDoc[newRecordtmp.length-5];
55             for (int i = 0; i < newRec.length; i++) {
56                 newRec[i] = newRecordtmp[5+i];
57             }
58             recordToInsert = serverSession.getServerTable(tableCopy.tablename).insert(newRec);
59             Object JavaDoc[] newRecord = recordToInsert.getObject();
60             recMap.setNewRecord( newRecord );
61             recordMappings.add(recMap);
62
63             mappingHandler.addVector(tableCopy.tablename,recordMappings);
64             ArrayList columnInfo = tableCopy.tableInf.columnInformations;
65             int k = 0;
66             for (int i = 0; i < columnInfo.size(); i++) {
67                if( ((ColumnInfo)columnInfo.get(i)).isPrimary || ((ColumnInfo)columnInfo.get(i)).isPrimary)
68                   valToReturn[k++] = newRecord[i];
69             }
70        }
71         tables.add(tableCopy);
72         for (int i = 0; i < tables.size(); i++) {
73             TableCopy tc = (TableCopy)tables.get(i);
74             createCopyInChildren( childSession,tc);
75         }
76         }catch(DException e){
77             e.printStackTrace();
78             childSession.rollback();
79             throw e;
80             }
81         childSession.commit();
82         return valToReturn;
83     }
84
85     public static boolean testing = false;
86
87     public _Iterator getIteratorForRootNode(TableCopy parentCopy) throws DException{
88         booleanvalueexpression condition ;
89         StringBuffer JavaDoc clause = new StringBuffer JavaDoc();
90         String JavaDoc[] columns = parentCopy.tableInf.getPrimaryColumnNames();
91         for (int i = 0; i < columns.length; i++) {
92             clause.append(columns[i]);
93             clause.append(" = ? ");
94             if(i != columns.length-1)
95                 clause.append(" and ");
96         }
97         condition = (booleanvalueexpression)SessionConditionParser.parseCondition(clause.toString());
98         TableDetails tableDetails = new TableDetails();
99         QualifiedIdentifier tableName = parentCopy.tablename;
100         tableDetails.setTableName(new String JavaDoc[]{tableName.catalog,tableName.schema,tableName.name});
101         _SingleTableExecuter singleTableExecuter = new ConditionSingleTableExecuter( null , tableDetails, serverSession , condition, null );
102         _Iterator iterator = serverSession.getIterator(parentCopy.tablename,singleTableExecuter);
103
104         iterator.setConditionVariableValue(getReferences(condition.getParameters(null)),values,1);
105         return iterator;
106     }
107
108     public void createCopyInChildren(_ServerSession childSession, TableCopy tableCopy)throws DException{
109         ChildInfo[] children = tableCopy.getchildren();
110         Vector parentRecords = mappingHandler.getVector(tableCopy.tablename);
111
112         for (int i = 0; i < children.length; i++) {
113          ;//// Removed By Program ** System.out.println(" Getting Records to be updated in createCopyInChildren and children = " + children[i].childTableCopy.tablename );
114
Vector recMappings = getRecordsToBeUpdated(children[i],parentRecords);
115             mappingHandler.addVector(children[i].childTableCopy.tablename,recMappings);
116             tables.add(children[i].childTableCopy);
117          }
118
119          for (int i = 0; i < children.length; i++) {
120             TableCopy childcopy = children[i].childTableCopy;
121             if(childcopy.level==tableCopy.level+1){
122             Vector recordsToBeCopied = mappingHandler.getVector(childcopy.tablename);
123             copyRecordInchild(childcopy,recordsToBeCopied);
124             }
125
126          }
127
128     }
129
130     private _Reference[] getReferences(Object JavaDoc[] obj) throws DException {
131        int len = obj.length;
132        _Reference[] ref = new _Reference[len] ;
133        for( int i=0; i<len; i++ ){
134          ref[i] = (_Reference)obj[i] ;
135         }
136        return ref;
137   }
138
139     public void copyRecordInchild(TableCopy childCopy,Vector recordsToBeCopied) throws DException{
140        if( recordsToBeCopied != null ){
141         for (int i = 0; i < recordsToBeCopied.size(); i++) {
142           try{
143             RecordMapping recMapping = (RecordMapping)recordsToBeCopied.get(i);
144                 if( !recMapping.isCopied() ){
145                     Object JavaDoc[] oldRecord = recMapping.getOldRecord();
146                     Object JavaDoc[] newRecord = childCopy.tableInf.createCopyOfRecord(oldRecord,mappingHandler);
147                 Object JavaDoc[] newRec1 = new Object JavaDoc[newRecord.length-5];
148                 for (int j = 0; j < newRec1.length; j++) {
149                     newRec1[j] = newRecord[5+j];
150                 }
151               _Record recordInserted = serverSession.getServerTable(childCopy.tablename).insert(newRec1);
152               recMapping.setNewRecord(recordInserted.getObject());
153             }
154           } catch( Exception JavaDoc ddd ){
155               ddd.printStackTrace();
156           }
157         }
158        }
159        else
160          ;//// Removed By Program ** System.out.println(" <<<<<<<<<<<<< NOthing to update for table = " + childCopy.tablename.getName() + " >>>>>>>>>>>>> ");
161
}
162
163     public Vector getRecordsToBeUpdated(ChildInfo child,Vector parentIterator) throws DException{
164         TableCopy childTableCopy = child.childTableCopy;
165         _ReferentialConstraint parentConstraint = child.referencedConstraint;
166         int []referencedColumns = parentConstraint.getReferencedColumns();
167         int[] referencingColumns = parentConstraint.getReferencingColumns();
168         booleanvalueexpression condition = parentConstraint.getReferencingCondition(referencingColumns);
169         TableDetails tableDetails = new TableDetails();
170         QualifiedIdentifier tableName = childTableCopy.tablename;
171         tableDetails.setTableName(new String JavaDoc[]{tableName.catalog,tableName.schema,tableName.name});
172
173         _SingleTableExecuter singleTableExecuter = new ConditionSingleTableExecuter( null , tableDetails, serverSession, condition, null );
174
175         _Iterator iterator = serverSession.getIterator(childTableCopy.tablename, singleTableExecuter);
176         Vector recMappings = mappingHandler.getVector(childTableCopy.tablename) ;
177         if(recMappings == null)
178          recMappings = new Vector();
179         for (int i = 0; i < parentIterator.size(); i++) {
180             Object JavaDoc[] oldRecord = ((RecordMapping)parentIterator.get(i)).getOldRecord();
181             Object JavaDoc[] values = new Object JavaDoc[referencedColumns.length];
182             for (int j = 0; j < referencedColumns.length; j++) {
183                 values[j] = oldRecord[referencedColumns[j]];
184             }
185             iterator.setConditionVariableValue(getReferences(condition.getParameters(null)),values,1);
186             if(iterator.first())
187             do{
188                 if( !isRecordAlreadyAdded( recMappings,iterator.getRecord() ) ) {
189          ;//// Removed By Program ** System.out.println(" Adding Record to Be UPDATED === " + P.print( iterator.getRecord().getObject() ) );
190
RecordMapping recMap = new RecordMapping();
191                   recMap.setOldRecord(iterator.getRecord().getObject());
192                   recMappings.add(recMap);
193                 }
194             }while(iterator.next());
195         }
196        return recMappings;
197     }
198
199     private boolean isRecordAlreadyAdded( Vector vector , _Record record ) throws DException {
200       if( vector.size() > 0 ){
201         Object JavaDoc[] toLook = record.getObject();
202         for (int i = 0; i < vector.size(); i++) {
203           Object JavaDoc[] tmpArry = ((RecordMapping)vector.get(i)).getOldRecord();
204           for (int j = 0; j < tmpArry.length; j++){
205             if( !tmpArry[j].equals(toLook[j] ) )
206               break;
207             return true;
208           }
209         }
210       }
211       return false;
212     }
213
214 }
215
Popular Tags