KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sessionsystem > ConstraintInformation


1 package com.daffodilwoods.daffodildb.server.sessionsystem;
2
3 import java.util.HashMap JavaDoc;
4 import com.daffodilwoods.database.resource.DException;
5 import java.util.ArrayList JavaDoc;
6 import com.daffodilwoods.database.general.QualifiedIdentifier;
7
8 /**
9  * <p>Title: ConstraintStatus</p>
10  * <p>Description: Describes the status of deferrable constraints.
11  * <p>Company: Daffodil Software Ltd.
12  * @author Sachin
13  * @version 2.0
14  */

15
16 public class ConstraintInformation {
17     private HashMap JavaDoc defferedToImmediate;
18     private HashMap JavaDoc immediateToDeffered;
19
20     public HashMap JavaDoc getDefferedToImmediateConstraints() throws DException {
21       return defferedToImmediate;
22     }
23
24     public ArrayList JavaDoc getImmediateToDefferedConstraints(QualifiedIdentifier tableName) throws DException {
25       return immediateToDeffered == null ? null : (ArrayList JavaDoc)immediateToDeffered.get(tableName);
26     }
27
28     public ArrayList JavaDoc getDefferedToImmediateConstraints(QualifiedIdentifier tableName) throws DException {
29       return defferedToImmediate == null ? null : (ArrayList JavaDoc)defferedToImmediate.get(tableName);
30     }
31
32     public HashMap JavaDoc getImmediateToDefferedConstraints() throws DException {
33       return immediateToDeffered;
34     }
35
36     public void setConstraints(Object JavaDoc maps, String JavaDoc mode) throws DException {
37       Object JavaDoc[] consMaps = (Object JavaDoc[])maps;
38       HashMap JavaDoc matching = (HashMap JavaDoc)consMaps[0];
39       HashMap JavaDoc conflicting = (HashMap JavaDoc)consMaps[1];
40       if(mode.equalsIgnoreCase("DEFERRED")) {
41         if(immediateToDeffered==null && (conflicting.size() > 0))
42           immediateToDeffered=new HashMap JavaDoc();
43         addNonMatchingConstraintsToNewModeList(conflicting,immediateToDeffered);
44         removeMatchingConstraintsFromOldModeList(matching,defferedToImmediate);
45       }
46       else {
47         if(defferedToImmediate==null && (conflicting.size() > 0))
48           defferedToImmediate=new HashMap JavaDoc();
49         addNonMatchingConstraintsToNewModeList(conflicting,defferedToImmediate);
50         removeMatchingConstraintsFromOldModeList(matching,immediateToDeffered);
51       }
52     }
53
54     private void addNonMatchingConstraintsToNewModeList(HashMap JavaDoc srcMap, HashMap JavaDoc tgtMap) throws DException {
55       Object JavaDoc[] keys = srcMap.keySet().toArray();
56       for (int i = 0; i < keys.length; i++) {
57         ArrayList JavaDoc list = (ArrayList JavaDoc)srcMap.get(keys[i]);
58         addValueToHashMap(tgtMap,keys[i],list);
59       }
60     }
61
62     private void removeMatchingConstraintsFromOldModeList(HashMap JavaDoc srcMap, HashMap JavaDoc tgtMap) throws DException {
63       if(tgtMap == null) {
64         return;
65       }
66       Object JavaDoc[] keys = srcMap.keySet().toArray();
67       for (int i = 0; i < keys.length; i++) {
68         ArrayList JavaDoc list = (ArrayList JavaDoc)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 JavaDoc map, Object JavaDoc key , ArrayList JavaDoc subValue) throws DException {
76       if(!map.containsKey(key))
77         return false;
78       ArrayList JavaDoc list = (ArrayList JavaDoc) map.get(key);
79       for (int i = 0, size = subValue.size(); i < size; i++) {
80         Object JavaDoc 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 JavaDoc map, Object JavaDoc key , ArrayList JavaDoc subValues) throws DException {
91       if(!map.containsKey(key)) {
92         map.put(key,subValues);
93         return;
94       }
95       ArrayList JavaDoc list = (ArrayList JavaDoc) map.get(key);
96       addListToList(list,subValues);
97     }
98
99     private void addListToList(ArrayList JavaDoc list1, ArrayList JavaDoc list2) throws DException {
100       for (int i = 0,size = list2.size(); i < size; i++) {
101         Object JavaDoc 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