1 package com.daffodilwoods.daffodildb.server.sessionsystem; 2 3 import java.util.HashMap ; 4 import com.daffodilwoods.database.resource.DException; 5 import java.util.ArrayList ; 6 import com.daffodilwoods.database.general.QualifiedIdentifier; 7 8 15 16 public class ConstraintInformation { 17 private HashMap defferedToImmediate; 18 private HashMap immediateToDeffered; 19 20 public HashMap getDefferedToImmediateConstraints() throws DException { 21 return defferedToImmediate; 22 } 23 24 public ArrayList getImmediateToDefferedConstraints(QualifiedIdentifier tableName) throws DException { 25 return immediateToDeffered == null ? null : (ArrayList )immediateToDeffered.get(tableName); 26 } 27 28 public ArrayList getDefferedToImmediateConstraints(QualifiedIdentifier tableName) throws DException { 29 return defferedToImmediate == null ? null : (ArrayList )defferedToImmediate.get(tableName); 30 } 31 32 public HashMap getImmediateToDefferedConstraints() throws DException { 33 return immediateToDeffered; 34 } 35 36 public void setConstraints(Object maps, String mode) throws DException { 37 Object [] consMaps = (Object [])maps; 38 HashMap matching = (HashMap )consMaps[0]; 39 HashMap conflicting = (HashMap )consMaps[1]; 40 if(mode.equalsIgnoreCase("DEFERRED")) { 41 if(immediateToDeffered==null && (conflicting.size() > 0)) 42 immediateToDeffered=new HashMap (); 43 addNonMatchingConstraintsToNewModeList(conflicting,immediateToDeffered); 44 removeMatchingConstraintsFromOldModeList(matching,defferedToImmediate); 45 } 46 else { 47 if(defferedToImmediate==null && (conflicting.size() > 0)) 48 defferedToImmediate=new HashMap (); 49 addNonMatchingConstraintsToNewModeList(conflicting,defferedToImmediate); 50 removeMatchingConstraintsFromOldModeList(matching,immediateToDeffered); 51 } 52 } 53 54 private void addNonMatchingConstraintsToNewModeList(HashMap srcMap, HashMap tgtMap) throws DException { 55 Object [] keys = srcMap.keySet().toArray(); 56 for (int i = 0; i < keys.length; i++) { 57 ArrayList list = (ArrayList )srcMap.get(keys[i]); 58 addValueToHashMap(tgtMap,keys[i],list); 59 } 60 } 61 62 private void removeMatchingConstraintsFromOldModeList(HashMap srcMap, HashMap tgtMap) throws DException { 63 if(tgtMap == null) { 64 return; 65 } 66 Object [] keys = srcMap.keySet().toArray(); 67 for (int i = 0; i < keys.length; i++) { 68 ArrayList list = (ArrayList )srcMap.get(keys[i]); 69 boolean isListEmpty = removeValueFromHashMap(tgtMap,keys[i],list); 70 if(isListEmpty) 71 tgtMap.remove(keys[i]); 72 } 73 } 74 75 private boolean removeValueFromHashMap(HashMap map, Object key , ArrayList subValue) throws DException { 76 if(!map.containsKey(key)) 77 return false; 78 ArrayList list = (ArrayList ) map.get(key); 79 for (int i = 0, size = subValue.size(); i < size; i++) { 80 Object value = subValue.get(i); 81 if(list.contains(value)) { 82 list.remove(value); 83 } 84 } 85 if(list.size() == 0) 86 return true; 87 return false; 88 } 89 90 private void addValueToHashMap(HashMap map, Object key , ArrayList subValues) throws DException { 91 if(!map.containsKey(key)) { 92 map.put(key,subValues); 93 return; 94 } 95 ArrayList list = (ArrayList ) map.get(key); 96 addListToList(list,subValues); 97 } 98 99 private void addListToList(ArrayList list1, ArrayList list2) throws DException { 100 for (int i = 0,size = list2.size(); i < size; i++) { 101 Object value = list2.get(i); 102 if(list1.contains(value)) { 103 continue; 104 } 105 list1.add(value); 106 } 107 } 108 109 public void removeTable(QualifiedIdentifier tableName) throws DException{ 110 if(immediateToDeffered != null) 111 immediateToDeffered.remove(tableName); 112 if(defferedToImmediate != null) 113 defferedToImmediate.remove(tableName); 114 } 115 } 116 | Popular Tags |