KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > schemamanipulation > revokeprivilegestatement


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation;
2
3 import java.util.*;
4
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.*;
8 import com.daffodilwoods.daffodildb.server.sql99.common.*;
9 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
10 import com.daffodilwoods.daffodildb.server.sql99.ddl.revoke.*;
11 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*;
12 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
13 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
14 import com.daffodilwoods.daffodildb.server.sql99.token.*;
15 import com.daffodilwoods.database.general.*;
16 import com.daffodilwoods.database.resource.*;
17
18 public class revokeprivilegestatement implements revokestatement {
19    public dropbehavior _dropbehavior0;
20    public SNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor
21        _OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1;
22    public grantee[] _OptRepScomma94843605grantee2;
23    public grantee _grantee3;
24    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224;
25    public privileges _privileges5;
26    public revokeoptionextension _Optrevokeoptionextension6;
27    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439227;
28
29    /** @todo change variable name */
30    private boolean isSelfInitiated = true;
31
32    /** @todo change method name */
33    private ArrayList alreadyAbandenedObjects;
34    public void setIsSelfInitiated(boolean temp) {
35       isSelfInitiated = temp;
36    }
37
38    private String JavaDoc nestedSttGrantor;
39
40    /** @todo change method name */
41    public void setGrantor(String JavaDoc temp) {
42       nestedSttGrantor = temp;
43    }
44
45    private String JavaDoc objectSchemaName;
46
47    /** @todo algo
48     initialize the variables -- currentSession, globalSession
49     Object descriptor should be set if the statement is called from some other statement.
50     set Object Descriptor --
51     set privileges Descriptor --
52     Retrieve grantee list and ensure existence
53     Set grantor
54     validate Grantor
55        a. ensure that grantor has granted privilege to the grantees.
56     set revoke properties
57     findPrivilegesToBeRevoked()
58     delete the privileges found
59     commit the global session
60     inform datadictionary about the privileges revoked;
61     */

62    public Object JavaDoc run(Object JavaDoc object) throws DException {
63       _ServerSession currentSession = (_ServerSession) object;
64       checkUnsupportedGrammer();
65       if (isSelfInitiated) {
66          objectSchemaName = getSchemaNameForObject(_privileges5, currentSession);
67       }
68       ArrayList granteeList = getGrantees();
69       checkGranteeExistance(granteeList, currentSession);
70       String JavaDoc grantor = nestedSttGrantor != null
71           ? nestedSttGrantor : getGrantor(currentSession);
72       ArrayList identifiedList = null;
73       try {
74          identifiedList = getIdentifiedPrivilegeList(currentSession,
75              grantor, granteeList);
76       } catch (DException ex) {
77          if (ex.getDseCode().equalsIgnoreCase("DSE8167"))
78             throw new DException("DSE8068", new Object JavaDoc[] {_privileges5.getQualifiedObjectName()});
79          throw ex;
80       }
81
82       if (identifiedList == null || identifiedList.size() == 0) {
83          throw new DException("DSE8068", new Object JavaDoc[] {_privileges5.getQualifiedObjectName()});
84       }
85       deletePrivileges(currentSession, grantor, identifiedList);
86
87       refreshDataDictionary(currentSession, _privileges5.getObjectType(),
88                             _privileges5.getQualifiedObjectName());
89       return null;
90    }
91
92    /**
93     * Write new method by harvinder related to bug 12083. */

94    private String JavaDoc getSchemaNameForObject(privileges _privileges5, _ServerSession currentSession) throws DException {
95       String JavaDoc sch_name = _privileges5._objectname0.getSchemaName();
96       String JavaDoc cat_name = _privileges5._objectname0.getCatalogName();
97       sch_name = (sch_name != null) ? sch_name : currentSession.getCurrentSchema();
98       cat_name = (cat_name != null) ? cat_name : currentSession.getCurrentCatalog();
99       QualifiedIdentifier objectName = new QualifiedIdentifier(cat_name, sch_name,
100           _privileges5._objectname0.getObjectName());
101       String JavaDoc qualifiedObjectName = objectName.toString();
102
103       int index0 = qualifiedObjectName.lastIndexOf(".");
104       if (index0 == -1) {
105          return currentSession.getCurrentSchema();
106       } else {
107          String JavaDoc Sc = qualifiedObjectName.substring(0, index0);
108          int index1 = Sc.lastIndexOf(".");
109          if (index1 == -1)
110             return Sc.trim();
111          else
112             return Sc.substring(index1 + 1, index0).trim();
113       }
114    }
115
116    private void refreshDataDictionary(_ServerSession currentSession,
117                                       String JavaDoc objectType,
118                                       QualifiedIdentifier objectName) throws
119        DException {
120       if (isSelfInitiated == true) {
121          currentSession.getDataDictionary().refreshPrivilegeCharacteristics(
122              objectName, objectType);
123       }
124    }
125
126    private void checkUnsupportedGrammer() throws DException {
127       if ( (_Optrevokeoptionextension6 != null) &&
128           (_Optrevokeoptionextension6 instanceof
129            SNONRESERVEDWORD136444255SNONRESERVEDWORD136444255SRESERVEDWORD1206543922)) {
130          throw new DException("DSE22", new Object JavaDoc[] {"Revoke option extension"});
131       }
132    }
133
134    /** @todo change method name */
135    private ArrayList getGrantees() throws DException {
136       ArrayList granteeList = new ArrayList();
137       granteeList.add(_grantee3.run(null));
138       if (_OptRepScomma94843605grantee2 != null) {
139          for (int i = 0, size = _OptRepScomma94843605grantee2.length; i < size; i++) {
140             granteeList.add(_OptRepScomma94843605grantee2[i].run(null));
141          }
142       }
143       return granteeList;
144    }
145
146    /** @todo change method name
147     * Confirm if grantee can be role. If so, make provision for checking the role;
148     * */

149    private void checkGranteeExistance(ArrayList granteeList,
150                                       _ServerSession serverSession) throws
151        DException {
152       _Executer userExecuter = SqlSchemaConstants.getExecuter(serverSession, QueryMaker.getUsersQuery());
153       _Executer rolesExecuter = SqlSchemaConstants.getExecuter(serverSession, QueryMaker.getRolesQuery());
154       for (int i = 0, size = granteeList.size(); i < size; i++) {
155          String JavaDoc str = (String JavaDoc) granteeList.get(i);
156          if (str.equalsIgnoreCase(ServerSystem.browserUser) || str.equalsIgnoreCase(SystemTables.SYSTEM)) {
157             continue;
158          }
159          _Iterator iterator = (_Iterator) userExecuter.executeForFresh(new Object JavaDoc[] {str});
160          if (!iterator.first()) {
161             iterator = (_Iterator) rolesExecuter.executeForFresh(new Object JavaDoc[] {str});
162             if (!iterator.first()) {
163                throw new DException("DSE8094", new Object JavaDoc[] {str});
164             }
165          }
166       }
167    }
168
169    /** @todo change method name
170     * remove the code of find and calculating dependent privileges. Move the code to a separate method
171     * */

172    private void deletePrivileges(_ServerSession currentSession, String JavaDoc grantor,
173                                  ArrayList identifiedPD) throws DException {
174
175       PrivilegeDependencyGraph graph = new PrivilegeDependencyGraph(
176           currentSession);
177       graph.initializeGraph(currentSession, identifiedPD,
178                             _Optrevokeoptionextension6 == null ? false :
179                             _Optrevokeoptionextension6.toString().
180                             equalsIgnoreCase("WITH HIERARCHY OPTION"));
181       AbandonedObjectHandler temphandler = new AbandonedObjectHandler(
182           currentSession);
183       temphandler.calculate(identifiedPD, null, graph.getAllAbandonedPrivilegeDescriptors(), currentSession /*null*/);
184       checkRevokeDestructionAction(currentSession, graph, identifiedPD);
185       temphandler.process();
186       revokeDestructionAction(currentSession, graph, graph.getAllIdentifiedPrivilegeDescriptors());
187       alreadyAbandenedObjects = temphandler.getAreadyAbandenedObjects();
188    }
189
190    public ArrayList getAlreadyAbondenedObject() {
191       return alreadyAbandenedObjects;
192    }
193
194    private ArrayList getIdentifiedPrivilegeList(_ServerSession currentSession,
195                                                 String JavaDoc grantor,
196                                                 ArrayList granteeList) throws
197        DException {
198       CalculateIdentified tt = new CalculateIdentified();
199       ArrayList identifiedPD = tt.getIdentifiedPrivilegeDescriptor(currentSession,
200           _privileges5, granteeList, grantor);
201       return identifiedPD;
202    }
203
204    private String JavaDoc getGrantor(_ServerSession serverSession) throws DException {
205       String JavaDoc grantor = null;
206       if (_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1 == null) {
207          /**
208           * Changes done by harvinder related to bug 11707. */

209          String JavaDoc currentUser = (String JavaDoc) serverSession.getCurrentUser();
210          if (currentUser != null) {
211             if (currentUser.equalsIgnoreCase(ServerSystem.browserUser)) {
212                StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
213                sb.append("select schema_owner from ").append(SystemTables.schema_TableName).
214                    append(" where schema_name = ").append("?");
215                _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, sb.toString(), new Object JavaDoc[] {isSelfInitiated ? objectSchemaName : serverSession.getCurrentSchema()});
216                if (iter.first()) {
217                   Object JavaDoc[] ob = (Object JavaDoc[]) iter.getColumnValues();
218                   grantor = ob[0].toString();
219                }
220             } else
221                grantor = currentUser;
222          } else {
223             grantor = serverSession.getCurrentRole();
224          }
225       } else {
226          grantor = _OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1.
227              getGrantor(serverSession);
228       }
229       return grantor;
230    }
231
232    /** @todo change method name */
233    private void revokeDestructionAction(_ServerSession serverSession,
234                                         PrivilegeDependencyGraph graph,
235                                         ArrayList identifiedPD) throws DException {
236       ArrayList abandonedPrivilegeDescriptors = graph.getAllAbandonedPrivilegeDescriptors();
237       if (_dropbehavior0.toString().equalsIgnoreCase(SqlKeywords.RESTRICT)) {
238          if (abandonedPrivilegeDescriptors != null) {
239             throw new DException("DSE1173", null);
240          }
241       }
242       if (_Optrevokeoptionextension6 == null) {
243          destroyAllAbandonedPrivilege(serverSession,
244                                       graph.getAllAbandonedPrivilegeDescriptors());
245          destroyAllIdentifiedPrivilege(serverSession, identifiedPD);
246       } else if (_Optrevokeoptionextension6.toString().trim().compareToIgnoreCase(
247           "WITH HIERARCHY OPTION") == 0) {
248          throw new DException("DSE1184", null);
249       } else if (_Optrevokeoptionextension6.toString().trim().compareToIgnoreCase(
250           "GRANT OPTION FOR") == 0) {
251          if (_dropbehavior0.toString().equalsIgnoreCase(SqlKeywords.CASCADE)) {
252             destroyAllAbandonedPrivilege(serverSession,
253                                          graph.getAllAbandonedPrivilegeDescriptors());
254          } else
255          /*(_dropbehavior0.toString().compareToIgnoreCase("RESTRICT")==0)*/
256          {
257             checkExceptionCondition(serverSession, graph, identifiedPD);
258          }
259          if (checkExceptionCondition(serverSession, graph, identifiedPD)) {
260             throw new DException("DSE1134", null);
261          }
262          setAllIdentifiedAsNonGrantable(serverSession, identifiedPD);
263       }
264    }
265
266    private void setAllIdentifiedAsNonGrantable(_ServerSession serverSession, ArrayList identified) throws DException {
267       for (int i = 0, size = identified.size(); i < size; i++) {
268          PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i);
269          /** @todo update is grantable value of descriptor from yes to no */
270          pd.updateIsGrantableValue(serverSession, SqlSchemaConstants.NO);
271       }
272    }
273
274    /** @todo change method name */
275    private void checkRevokeDestructionAction(_ServerSession serverSession,
276                                              PrivilegeDependencyGraph graph,
277                                              ArrayList identifiedPD) throws
278        DException {
279       ArrayList abandonedPrivilegeDescriptors = graph.
280           getAllAbandonedPrivilegeDescriptors();
281       if (_dropbehavior0.toString().compareToIgnoreCase("RESTRICT") == 0) {
282          if (abandonedPrivilegeDescriptors != null) {
283             throw new DException("DSE1173", null);
284          }
285       }
286       if (_Optrevokeoptionextension6 == null) {
287       } else if (_Optrevokeoptionextension6.toString().compareToIgnoreCase(
288           "WITH HIERARCHY OPTION") == 0) {
289          throw new DException("DSE1184", null);
290       } else if (_Optrevokeoptionextension6.toString().compareToIgnoreCase(
291           "GRANT OPTION FOR") == 0) {
292          if (checkExceptionCondition(serverSession, graph, identifiedPD)) {
293             throw new DException("DSE1134", null);
294          }
295       }
296    }
297
298    /** @todo change method name */
299    private boolean checkExceptionCondition(_ServerSession serverSession,
300                                            PrivilegeDependencyGraph graph,
301                                            ArrayList identified) throws
302        DException {
303       for (int i = 0, size_identified = identified.size(); i < size_identified; i++) {
304          PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i);
305          HashMap tempList = graph.getDependents(pd);
306          if (tempList != null) {
307             Iterator iter = tempList.keySet().iterator();
308             while (iter.hasNext()) {
309                PrivilegeDescriptor secondPD = (PrivilegeDescriptor) iter.next();
310                if (graph.getStatus(secondPD) == _PDCharacterstics.modified) {
311                   return true;
312                }
313             }
314          }
315       }
316       return false;
317    }
318
319    /** @todo remove method if not required */
320    private void removeHierarchyOptionFromIdentifiedAndAbandoned() throws
321        DException {
322    }
323
324    /** @todo change method name */
325    private void destroyAllAbandonedPrivilege(_ServerSession serverSession,
326                                              ArrayList abandoned) throws
327        DException {
328       if (abandoned != null) {
329          for (int i = 0, size = abandoned.size(); i < size; i++) {
330             PrivilegeDescriptor pd = (PrivilegeDescriptor) abandoned.get(i);
331             pd.delete(serverSession);
332          }
333       }
334    }
335
336    /** @todo change method name */
337    private void destroyAllIdentifiedPrivilege(_ServerSession serverSession,
338                                               ArrayList identified) throws
339        DException {
340       for (int i = 0, size = identified.size(); i < size; i++) {
341          PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i);
342          pd.delete(serverSession);
343       }
344    }
345
346    public void print_ArrayList(ArrayList temp, String JavaDoc name) {
347       if (temp == null) {
348          ;//// Removed By Program ** System.out.println(name + " list is null");
349
return;
350       }
351       for (int i = 0, size = temp.size(); i < size; i++) {
352          PrintUtility.print_privilege_descriptor( (PrivilegeDescriptor) temp.get(i));
353       }
354    }
355
356    public String JavaDoc toString() {
357       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
358       sb.append(" ");
359       sb.append(_SRESERVEDWORD12065439227);
360       sb.append(" ");
361       if (_Optrevokeoptionextension6 != null) {
362          sb.append(_Optrevokeoptionextension6);
363       }
364       sb.append(" ");
365       sb.append(_privileges5);
366       sb.append(" ");
367       sb.append(_SRESERVEDWORD12065439224);
368       sb.append(" ");
369       sb.append(_grantee3);
370       sb.append(" ");
371       if (_OptRepScomma94843605grantee2 != null) {
372          for (int i = 0; i < _OptRepScomma94843605grantee2.length; i++) {
373             sb.append(",").append(_OptRepScomma94843605grantee2[i]);
374          }
375       }
376       sb.append(" ");
377       if (_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1 != null) {
378          sb.append(_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1);
379       }
380       sb.append(" ");
381       sb.append(_dropbehavior0);
382       return sb.toString();
383    }
384
385    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
386       return this;
387    }
388 }
389
Popular Tags