KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > revoke > CalculateDD


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.revoke;
2
3 /**
4  *
5  * @author pardeep
6  */

7 import java.util.*;
8
9 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
10 import com.daffodilwoods.daffodildb.server.serversystem.*;
11 import com.daffodilwoods.daffodildb.server.sql99.common.*;
12 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
13 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
14 /**
15  *
16  * @author pardeep
17  */

18 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
19 import com.daffodilwoods.database.resource.*;
20
21 public class CalculateDD {
22
23    String JavaDoc roleNameQuery = "select role_name from " + SystemTables.roles_TableName;
24    PreparedStatementGetter executerGetter;
25
26    public CalculateDD(_ServerSession serverSession) throws DException {
27       executerGetter = ( (DataDictionary) serverSession.getDataDictionary()).getPreparedStatementGetter();
28    }
29
30    public Object JavaDoc[] getDependentAndAncestor(_ServerSession serverSession, PrivilegeDescriptor pd, ArrayList roleList) throws DException {
31       Object JavaDoc[] dependentsNancectors = getDependentAndAncestorPointA(serverSession, pd, roleList);
32       HashMap dep = (HashMap) dependentsNancectors[0];
33       HashMap anc = (HashMap) dependentsNancectors[1];
34
35       setDependentInHashMapPointC(serverSession, pd, dep);
36
37       setAncestorInHashMapPointC(serverSession, pd, anc);
38
39       dependentsNancectors[0] = dep.size() == 0 ? null : dep;
40       dependentsNancectors[1] = anc.size() == 0 ? null : anc;
41       return dependentsNancectors;
42    }
43
44    public Object JavaDoc[] getDependentAndAncestor(_ServerSession serverSession, RoleAuthorizationDescriptor rad, ArrayList roleList) throws DException {
45       Object JavaDoc[] dependentNancestor = new Object JavaDoc[2];
46       HashMap dependents = new HashMap();
47       HashMap ancestors = new HashMap();
48
49       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, QueryGetter.dependentRoles, new Object JavaDoc[] {rad.role_name});
50       if (iter.first()) {
51          do {
52             Object JavaDoc[] values = (Object JavaDoc[]) iter.getObject();
53             RoleAuthorizationDescriptor ddd = new RoleAuthorizationDescriptor();
54             ddd.loadDataFromRecord(iter);
55             if (isConditionRoleSatisfied(serverSession, rad, ddd, roleList)) {
56                if (!dependents.containsKey(ddd)) {
57                   dependents.put(ddd, null);
58                }
59             }
60             if (isConditionRoleSatisfied(serverSession, ddd, rad, roleList)) {
61                if (!ancestors.containsKey(ddd)) {
62                   ancestors.put(ddd, null);
63                }
64             }
65          } while (iter.next());
66       }
67       dependentNancestor[0] = dependents.size() == 0 ? null : dependents;
68       dependentNancestor[1] = ancestors.size() == 0 ? null : ancestors;
69       return dependentNancestor;
70    }
71
72    private Object JavaDoc[] getDependentAndAncestorPointA(_ServerSession serverSession, PrivilegeDescriptor pd, ArrayList roleList) throws DException {
73       Object JavaDoc[] dependentNancestor = new Object JavaDoc[3];
74       HashMap dependent = new HashMap();
75       HashMap ancestor = new HashMap();
76       if (pd.getDescriptorType() == _Descriptor.TABLE_PRIVILEGE_DESCRIPTOR) {
77          TablePrivilegesDescriptor ppp = (TablePrivilegesDescriptor) pd;
78          Object JavaDoc[] parameters = new Object JavaDoc[] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.privilege_type};
79          _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterTablePrivilegeDescriptorDependent_A().execute(parameters);
80          dependentNancestor[2] = new Integer JavaDoc(_PDCharacterstics.tableprivilegedescriptor);
81
82          if (iter.first()) {
83             do {
84                TablePrivilegesDescriptor ddd = new TablePrivilegesDescriptor();
85                duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter);
86             } while (iter.next());
87          }
88       } else if (pd.getDescriptorType() == _Descriptor.COLUMN_PRIVILEGE_DESCRIPTOR) {
89          ColumnPrivilegeDescriptor ppp = (ColumnPrivilegeDescriptor) pd;
90          Object JavaDoc[] parameters = new Object JavaDoc[] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.column_name, ppp.privilege_type};
91          _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterColumnPrivilegeDescriptorDependent_A().execute(parameters);
92          dependentNancestor[2] = new Integer JavaDoc(_PDCharacterstics.columnprivilegedescriptor);
93
94          if (iter.first()) {
95             do {
96                ColumnPrivilegeDescriptor ddd = new ColumnPrivilegeDescriptor();
97                duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter);
98             } while (iter.next());
99          }
100       } else if (pd.getDescriptorType() == _Descriptor.ROUTINE_PRIVILEGES_DESCRIPTOR) {
101          RoutinePrivilegeDescriptor ppp = (RoutinePrivilegeDescriptor) pd;
102          Object JavaDoc[] parameters = new Object JavaDoc[] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.privilege_type};
103          _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterRoutinePrivilegeDescriptorDependent_A().execute(parameters);
104          dependentNancestor[2] = new Integer JavaDoc(_PDCharacterstics.routineprivilegedescriptor);
105
106          if (iter.first()) {
107             do {
108                RoutinePrivilegeDescriptor ddd = new RoutinePrivilegeDescriptor();
109                duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter);
110             } while (iter.next());
111          }
112       } else { // USAGE_PRIVILEGES_DESCRIPTOR
113
UsagePrivilegesDescriptor ppp = (UsagePrivilegesDescriptor) pd;
114          Object JavaDoc[] parameters = new Object JavaDoc[] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.object_type};
115          _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorDependent_A().execute(parameters);
116          dependentNancestor[2] = new Integer JavaDoc(_PDCharacterstics.usageprivilegedescriptor);
117
118          if (iter.first()) {
119             do {
120                UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor();
121                duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter);
122             } while (iter.next());
123          }
124       }
125       dependentNancestor[0] = dependent;
126       dependentNancestor[1] = ancestor;
127       return dependentNancestor;
128    }
129
130    private void duplicatecode(_ServerSession serverSession, ArrayList roleList, HashMap dependent,
131                               HashMap ancestor, PrivilegeDescriptor ppp,
132                               PrivilegeDescriptor ddd,
133                               _SelectQueryIterator iter) throws DException {
134       Object JavaDoc[] values = (Object JavaDoc[]) iter.getObject();
135       ddd.loadDataFromRecord(iter);
136       if (! (ppp.getGrantee().equalsIgnoreCase(ddd.getGrantee()) &&
137              (ppp.getGrantor().equalsIgnoreCase(ddd.getGrantor())))) {
138          if (isConditionA2satisfied(serverSession, ppp, ddd, roleList)) {
139             if (!dependent.containsKey(ddd)) {
140                dependent.put(ddd, null);
141             }
142          }
143          if (isConditionA2satisfied(serverSession, ddd, ppp, roleList)) {
144             if (!ancestor.containsKey(ddd)) {
145                ancestor.put(ddd, null);
146             }
147          }
148       }
149    }
150
151    private Object JavaDoc[] getDependentAndAncestorPointC(_ServerSession serverSession, PrivilegeDescriptor pd) throws DException {
152       Object JavaDoc[] dependentNancestor = new Object JavaDoc[2];
153       HashMap dep = new HashMap();
154       HashMap anc = new HashMap();
155       setDependentInHashMapPointC(serverSession, pd, dep);
156       setAncestorInHashMapPointC(serverSession, pd, anc);
157       dependentNancestor[0] = dep;
158       dependentNancestor[1] = anc;
159       return dependentNancestor;
160    }
161
162    private void setDependentInHashMapPointC(_ServerSession serverSession, PrivilegeDescriptor pd, HashMap existingDependent) throws DException {
163       if (pd instanceof ColumnPrivilegeDescriptor) {
164          ColumnPrivilegeDescriptor ppp = (ColumnPrivilegeDescriptor) pd;
165          if (ppp.privilege_type.equalsIgnoreCase(SqlKeywords.REFERENCES)) {
166             _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterPrivilegeDescriptorDependents_C().execute(new Object JavaDoc[] {ppp.getGrantee(), ppp.getGrantee()});
167             if (iter.first()) {
168                do {
169                   Object JavaDoc[] values = (Object JavaDoc[]) iter.getObject();
170                   UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor();
171                   ddd.loadDataFromRecord(iter);
172
173                   _SelectQueryIterator tempIter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object JavaDoc[] {ddd.object_name, ddd.object_schema, ddd.object_catalog});
174                   if (tempIter.first()) {
175                      do {
176                         Object JavaDoc[] tempValues = (Object JavaDoc[]) tempIter.getObject();
177                         CheckConstraintDescriptor tempCheckConstraintDesc = new CheckConstraintDescriptor();
178                         tempCheckConstraintDesc.loadDataFromRecord(iter);
179                         if (isSearchConditionConitionContainsColumnName(ppp, tempCheckConstraintDesc)) {
180                            if (!existingDependent.containsKey(ddd)) {
181                               existingDependent.put(ddd, null);
182                            }
183                         }
184                      } while (tempIter.next());
185                   }
186                } while (iter.next());
187             }
188          }
189       } else if (pd instanceof UsagePrivilegesDescriptor) {
190          UsagePrivilegesDescriptor ppp = (UsagePrivilegesDescriptor) pd;
191          _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterPrivilegeDescriptorDependents_C().execute(new Object JavaDoc[] {ppp.getGrantee(), ppp.getGrantee()});
192          if (iter.first()) {
193             do {
194                Object JavaDoc[] values = (Object JavaDoc[]) iter.getObject();
195                UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor();
196                ddd.loadDataFromRecord(iter);
197
198                _SelectQueryIterator tempIter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object JavaDoc[] {ddd.object_name, ddd.object_schema, ddd.object_catalog});
199                if (tempIter.first()) {
200                   do {
201                      Object JavaDoc[] tempValues = (Object JavaDoc[]) tempIter.getObject();
202                      CheckConstraintDescriptor tempCheckConstraintDesc = new CheckConstraintDescriptor();
203                      tempCheckConstraintDesc.loadDataFromRecord(tempIter);
204                      if (isSearchConditionConitionContainsUsageObject(ppp, tempCheckConstraintDesc)) {
205                         if (!existingDependent.containsKey(ddd)) {
206                            existingDependent.put(ddd, null);
207                         }
208                      }
209                   } while (tempIter.next());
210                }
211             } while (iter.next());
212          }
213       }
214    }
215
216    private HashMap getAncestorPointB(_ServerSession serverSession, PrivilegeDescriptor pd) throws DException {
217       return null;
218    }
219
220    private void setAncestorInHashMapPointC(_ServerSession serverSession, PrivilegeDescriptor pd, HashMap ancestors) throws DException {
221       if (ancestors == null) {
222          ancestors = new HashMap();
223       }
224       if (pd instanceof UsagePrivilegesDescriptor) {
225          UsagePrivilegesDescriptor ddd = (UsagePrivilegesDescriptor) pd;
226          if (ddd.getGrantor().equalsIgnoreCase(SqlSchemaConstants.SYSTEM) && ddd.object_type.equalsIgnoreCase(SqlKeywords.DOMAIN)) {
227             _SelectQueryIterator tempiter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object JavaDoc[] {ddd.object_name, ddd.object_schema, ddd.object_catalog});
228             if (tempiter.first()) {
229                ArrayList ccd = new ArrayList();
230                do {
231                   Object JavaDoc[] values = (Object JavaDoc[]) tempiter.getObject();
232                   CheckConstraintDescriptor tempccd = new CheckConstraintDescriptor();
233                   tempccd.loadDataFromRecord(tempiter);
234                   ccd.add(tempccd);
235                } while (tempiter.next());
236
237                _SelectQueryIterator iter1 = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorAncestor_C_Column().execute(new Object JavaDoc[] {getDomainOwner(serverSession, new String JavaDoc[] {ddd.object_catalog, ddd.object_schema, ddd.object_name})});
238                if (iter1.first()) {
239                   do {
240                      Object JavaDoc[] values = (Object JavaDoc[]) iter1.getObject();
241                      ColumnPrivilegeDescriptor ppp = new ColumnPrivilegeDescriptor();
242                      ppp.loadDataFromRecord(iter1);
243
244                      for (int i = 0, size = ccd.size(); i < size; i++) {
245                         if (isSearchConditionConitionContainsColumnName(ppp, (CheckConstraintDescriptor) ccd.get(i))) {
246                            if (!ancestors.containsKey(ppp)) {
247                               ancestors.put(ppp, null);
248                            }
249                         }
250                      }
251                   } while (iter1.next());
252                }
253
254                _SelectQueryIterator iter2 = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorAncestor_C_Usage().execute(new Object JavaDoc[] {getDomainOwner(serverSession, new String JavaDoc[] {ddd.object_catalog, ddd.object_schema, ddd.object_name})});
255                if (iter2.first()) {
256                   do {
257                      Object JavaDoc[] values = (Object JavaDoc[]) iter2.getObject();
258                      UsagePrivilegesDescriptor ppp = new UsagePrivilegesDescriptor();
259                      ppp.loadDataFromRecord(iter2);
260
261                      for (int i = 0, size = ccd.size(); i < size; i++) {
262                         if (isSearchConditionConitionContainsUsageObject(ppp, (CheckConstraintDescriptor) ccd.get(i))) {
263                            if (!ancestors.containsKey(ppp)) {
264                               ancestors.put(ppp, null);
265                            }
266                         }
267                      }
268                   } while (iter2.next());
269                }
270             }
271          }
272       }
273    }
274
275    public ArrayList getRoleNames(_ServerSession serverSession) throws DException {
276       ArrayList rolelist = new ArrayList();
277       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, roleNameQuery, null);
278       if (iter.first()) {
279          do {
280             rolelist.add( ( (Object JavaDoc[]) iter.getObject())[0]);
281          } while (iter.next());
282       }
283       return rolelist.size() == 0 ? null : rolelist;
284    }
285
286    private boolean isRoleName(String JavaDoc role, ArrayList roleList) {
287       if (roleList == null) {
288          return false;
289       }
290       for (int i = 0, size = roleList.size(); i < size; i++) {
291          if (roleList.get(i).toString().equalsIgnoreCase(role)) {
292             return true;
293          }
294       }
295       return false;
296    }
297
298    private boolean applicableRoles(_ServerSession serverSession, String JavaDoc roleName, String JavaDoc checkRoleName) throws DException {
299       TreeMap applicableRoles = GeneralUtility.getApplicableRoles(serverSession, roleName);
300       return applicableRoles.containsKey(checkRoleName);
301    }
302
303    private boolean isConditionA2satisfied(_ServerSession serverSession, PrivilegeDescriptor ppp, PrivilegeDescriptor ddd, ArrayList roleList) throws DException {
304       return ( (ppp.is_grantable.equalsIgnoreCase(SqlSchemaConstants.YES))
305               && (ppp.getGrantee().equalsIgnoreCase(ddd.getGrantor())
306                   || ppp.getGrantee().equalsIgnoreCase(SqlKeywords.PUBLIC)
307                   || (isRoleName(ddd.getGrantor(), roleList) && applicableRoles(serverSession, ddd.getGrantor(), ppp.getGrantee()))));
308    }
309
310    private boolean isConditionRoleSatisfied(_ServerSession serverSession, RoleAuthorizationDescriptor rad, RoleAuthorizationDescriptor ddd, ArrayList roleList) throws DException {
311       return ( (rad.is_grantable.equalsIgnoreCase(SqlSchemaConstants.YES))
312               && (rad.grantee.equalsIgnoreCase(ddd.grantor) || rad.grantee.equalsIgnoreCase(SqlKeywords.PUBLIC)
313                   || (isRoleName(ddd.grantor, roleList) && applicableRoles(serverSession, ddd.grantor, rad.grantee))));
314
315    }
316
317    private boolean isOwnerOfDomain(_ServerSession serverSession, String JavaDoc user, Object JavaDoc[] obj) throws DException {
318       return false;
319    }
320
321    private String JavaDoc getDomainOwner(_ServerSession serverSession, String JavaDoc[] obj) throws DException {
322       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, QueryGetter.usageObjectOwner, new Object JavaDoc[] {"DOMAIN", obj[2], obj[1], obj[0]});
323       String JavaDoc owner;
324       if (iter.first()) {
325          do {
326             owner = (String JavaDoc) ( (Object JavaDoc[]) iter.getObject())[0];
327          } while (iter.next());
328          return owner;
329       }
330       return null;
331    }
332
333    private boolean isSearchConditionConitionContainsColumnName(ColumnPrivilegeDescriptor cpd, CheckConstraintDescriptor ccd) {
334       return false;
335    }
336
337    private boolean isSearchConditionConitionContainsUsageObject(UsagePrivilegesDescriptor upd, CheckConstraintDescriptor ccd) {
338       return false;
339    }
340
341    public void print_privilege_descriptor(PrivilegeDescriptor pd) {
342       if (pd instanceof TablePrivilegesDescriptor) {
343          ;//// Removed By Program ** System.out.println("****Table -> Grantor = " + (pd.getGrantor() == null ? "null" : pd.getGrantor()) + ", Grantee = " + (pd.getGrantee() == null ? "null" : pd.getGrantee()) + ", Table Name = " + pd.object_name + ", Catalog name = " + pd.object_catalog + ", Schema Name = " + pd.object_schema + ", privilege type = " + ( (TablePrivilegesDescriptor) pd).privilege_type + ", is_grantable = " + ( (TablePrivilegesDescriptor) pd).is_grantable + ", With_hierarchy = " + ( (TablePrivilegesDescriptor) pd).with_hierarchy);
344
} else if (pd instanceof ColumnPrivilegeDescriptor) {
345          ;//// Removed By Program ** System.out.println("****Column -> Grantor = " + (pd.getGrantor() == null ? "null" : pd.getGrantor()) + ", Grantee = " + (pd.getGrantee() == null ? "null" : pd.getGrantee()) + ", Column name = " + ( (ColumnPrivilegeDescriptor) pd).column_name + ", Table Name = " + pd.object_name + ", Catalog name = " + pd.object_catalog + ", Schema Name = " + pd.object_schema + ", privilege type = " + ( (ColumnPrivilegeDescriptor) pd).privilege_type + ", is_grantable = " + ( (ColumnPrivilegeDescriptor) pd).is_grantable);
346
} else if (pd instanceof UsagePrivilegesDescriptor) {
347          ;//// Removed By Program ** System.out.println("****Usage -> Grantor = " + (pd.getGrantor() == null ? "null" : pd.getGrantor()) + ", Grantee = " + (pd.getGrantee() == null ? "null" : pd.getGrantee()) + ", Object Name = " + pd.object_name + ", Catalog name = " + pd.object_catalog + ", Schema Name = " + pd.object_schema + ", privilege type = " + ( (UsagePrivilegesDescriptor) pd).object_type + ", is_grantable = " + ( (UsagePrivilegesDescriptor) pd).is_grantable);
348
} else if (pd instanceof RoutinePrivilegeDescriptor) {
349          ;//// Removed By Program ** System.out.println("****Routine > Grantor = " + (pd.getGrantor() == null ? "null" : pd.getGrantor()) + ", Grantee = " + (pd.getGrantee() == null ? "null" : pd.getGrantee()) + ", Object Name = " + pd.object_name + ", Catalog name = " + pd.object_catalog + ", Schema Name = " + pd.object_schema + ", privilege type = " + ( (RoutinePrivilegeDescriptor) pd).privilege_type + ", is_grantable = " + ( (RoutinePrivilegeDescriptor) pd).is_grantable);
350
}
351    }
352
353
354 }
355
Popular Tags