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.database.general.*; 7 import com.daffodilwoods.database.resource.*; 8 public class TableInformation { 9 10 QualifiedIdentifier tableName; 11 int[] uniqueColumns,referencedColumns,primaryColumns,referencingColumns; 12 ArrayList columnInformations = new ArrayList(); 13 _ColumnCharacteristics columnCharacteristics; 14 Object [] parentRecord ; 15 int[] referencingColumnsForConstraint; 16 int[] referencedParentColumns; 17 _ReferentialConstraint[] referencingconstraints; 18 TableCopy tablecopy; 19 Vector referencingInfo = new Vector(); 20 21 22 23 public TableInformation(TableCopy tableCopy,_ColumnCharacteristics columnCharacteristics0) throws DException { 24 tableName = tableCopy.tablename; 25 columnCharacteristics = columnCharacteristics0; 26 tablecopy = tableCopy; 27 28 for (int i = 0; i < columnCharacteristics.getColumnCount(); i++) { 29 columnInformations.add(i,new ColumnInfo()); 30 } 31 } 32 33 public void setUniqueColumns(int[] col){ 34 uniqueColumns = col; 35 if(uniqueColumns != null) 36 for (int i = 0; i < col.length; i++) { 37 ColumnInfo cf = (ColumnInfo)columnInformations.get(col[i]); 38 cf.isUnique = true; 39 } 40 } 41 42 public int[] getUniqueColumns(){ 43 return uniqueColumns; 44 } 45 46 public void setReferencingColumns(int[] col){ 47 referencingColumns = col; 48 if(referencingColumns != null) 49 for (int i = 0; i < col.length; i++) { 50 ColumnInfo cf = (ColumnInfo)columnInformations.get(col[i]); 51 cf.isReferencing = true; 52 } 53 } 54 55 public void setReferencedColumns(int[] col){ 56 referencedColumns = col; 57 if(referencedColumns != null) 58 for (int i = 0; i < col.length; i++) { 59 ColumnInfo cf = (ColumnInfo)columnInformations.get(col[i]); 60 cf.isReferenced = true; 61 } 62 } 63 64 65 public void setPrimaryColumns(int[] col){ 66 primaryColumns = col; 67 for (int i = 0; i < col.length; i++) { 68 ColumnInfo cf = (ColumnInfo)columnInformations.get(col[i]); 69 cf.isPrimary = true; 70 } 71 72 } 73 74 public void setColumnTypes() throws DException{ 75 for (int i = 0; i < columnInformations.size(); i++) { 76 ((ColumnInfo)columnInformations.get(i)).dataType = columnCharacteristics.getColumnType(i); 77 } 78 } 79 80 81 82 83 public Object [] createCopyOfRecord(Object [] oldRecord,MappingHandler mappinghandler) throws DException{ 84 Object [] newRecord = new Object [oldRecord.length]; 85 for (int i = 5; i < oldRecord.length; i++) { 86 int columnCode = getColumnCode(i); 87 88 switch(columnCode){ 89 case 1: 90 if( isPrimaryOrUnique(i) && !((ColumnCharacteristics)columnCharacteristics).isAutoIncrement(i) ) 91 throw new DException("DSE1305",null); 92 newRecord[i] = new Integer (((Integer )oldRecord[i]).intValue()+1); 93 break; 94 case 2: 95 newRecord[i] = null; 96 break; 97 case 3: 98 newRecord[i] = oldRecord[i]; 99 break; 100 case 4: 101 newRecord[i] = ((String )oldRecord[i]).concat("copy") ; 102 break; 103 case 5: 104 newRecord[i] = getParentColumnValue(i,mappinghandler,oldRecord); 105 break; 106 } 107 108 } 109 return newRecord; 110 } 111 112 public int getColumnCode(int columnIndex) throws DException{ 113 return ((ColumnInfo)columnInformations.get(columnIndex)).getColumnCode(); 114 } 115 116 public boolean isPrimaryOrUnique( int columnIndex ) throws DException { 117 boolean toRet = ( ((ColumnInfo)columnInformations.get(columnIndex)).isPrimary || ((ColumnInfo)columnInformations.get(columnIndex)).isUnique ); 118 return toRet ; 119 } 120 121 122 123 public void setColumnCodeForReferencing() throws DException{ 124 for (int i = 0; i < referencingColumns.length; i++) { 125 ColumnInfo ci = (ColumnInfo)columnInformations.get(referencingColumns[i]); 126 ci.setColumnCode(2); 127 } 128 129 } 130 131 132 public Object getParentColumnValue(int index,MappingHandler mappingHandler,Object [] oldRecord) throws DException{ 133 Object value = null; 134 135 for (int i = 0; i < referencingInfo.size(); i++) { 136 ReferencedInfo referencedInfo = (ReferencedInfo)referencingInfo.get(i); 137 if(referencedInfo.referencingColumn == index){ 138 try{ 139 value = mappingHandler.getColumnValue(referencedInfo.referencedTable,referencedInfo.referencedColumn,oldRecord[index]); 140 } catch( NullPointerException ne ){ 141 value = oldRecord[referencedInfo.referencingColumn]; 142 } 143 } 144 } 145 return value; 146 147 } 148 149 150 public boolean isReferencedPrimary(QualifiedIdentifier parentTable,int[] col) throws DException{ 151 TableCopy parentCopy = tablecopy.getParent(parentTable); 152 ArrayList columnInformation = parentCopy.tableInf.columnInformations; 153 for (int i = 0; i < col.length; i++) { 154 ColumnInfo columnInfo = (ColumnInfo)columnInformation.get(col[i]); 155 if(!(columnInfo.isReferenced && columnInfo.isPrimary)) 156 return false; 157 } 158 return true; 159 } 160 161 162 163 164 public boolean isReferencingPrimary() throws DException{ 165 for (int i = 0; i < referencingColumnsForConstraint.length; i++) { 166 if(primaryColumns == null) 167 return false; 168 if(referencingColumnsForConstraint[i] != primaryColumns[i]){ 169 return false; 170 } 171 } 172 return true; 173 } 174 175 public boolean isReferencingUnique() throws DException{ 176 if(uniqueColumns == null) 177 return false; 178 if(referencingColumnsForConstraint.length!=uniqueColumns.length) 179 return false; 180 for (int i = 0; i < referencingColumns.length; i++) { 181 if(referencingColumnsForConstraint[i] != uniqueColumns[i]){ 182 return false; 183 } 184 } 185 return true; 186 } 187 188 189 public String [] getPrimaryColumnNames() throws DException{ 190 String [] primaryColumnNames = new String [primaryColumns.length]; 191 for (int i = 0; i < primaryColumns.length; i++) { 192 primaryColumnNames[i] = columnCharacteristics.getColumnName(primaryColumns[i]); 193 } 194 return primaryColumnNames; 195 } 196 197 public String [] getReferencingColumnNames(int[] columns) throws DException{ 198 String [] columnNames = new String [columns.length]; 199 for (int i = 0; i < columnNames.length; i++) { 200 columnNames[i] = columnCharacteristics.getColumnName(columns[i]); 201 } 202 return columnNames; 203 } 204 205 206 207 208 public void setReferencingconstraints(_ReferentialConstraint[] referencingConstraints) throws DException{ 209 referencingconstraints = referencingConstraints; 210 for (int i = 0; i < referencingconstraints.length; i++) { 211 QualifiedIdentifier referencedTable = referencingconstraints[i].getReferencedTable(); 212 int[] referencedColumns = referencingconstraints[i].getReferencedColumns(); 213 int[] referencingColumns = referencingconstraints[i].getReferencingColumns(); 214 for (int j = 0; j < referencingColumns.length; j++) { 215 ReferencedInfo referencedInfo = new ReferencedInfo(referencedTable,referencedColumns[j],referencingColumns[j]); 216 referencingInfo.add(referencedInfo); 217 } 218 } 219 220 } 221 } 222 | Popular Tags |