KickJava   Java API By Example, From Geeks To Geeks.

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


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.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
9 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*;
10 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
12 import com.daffodilwoods.daffodildb.server.sql99.token.*;
13 import com.daffodilwoods.daffodildb.utils.*;
14 import com.daffodilwoods.daffodildb.utils.parser.*;
15 import com.daffodilwoods.database.resource.*;
16
17 public class dropuserstatement implements SQLschemamanipulationstatement {
18    public username _username0;
19    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221;
20    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222;
21
22    private ArrayList droppedSchemasList = new ArrayList();
23    private ArrayList revokeSt = new ArrayList();
24    private ArrayList roleDesc = new ArrayList();
25
26    public Object JavaDoc run(Object JavaDoc object) throws DException {
27       _ServerSession currentSession = (_ServerSession) object;
28       checkIsSuperUser(currentSession);
29       UserDescriptor userDescriptor = new UserDescriptor();
30       setUserName(currentSession, userDescriptor);
31       checkIsValidUser(userDescriptor.user_name, currentSession);
32       checkIsActiveUser(currentSession, userDescriptor.user_name);
33       dropUser(currentSession, userDescriptor);
34       /** @todo palce commit before refresh after changes in drop table */
35       refreshServerSystem(currentSession);
36       return null;
37    }
38
39    public void refreshServerSystem(_ServerSession currentSession) throws
40        DException {
41       for (int i = 0, size = droppedSchemasList.size(); i < size; i++) {
42          ( (dropschemastatement) droppedSchemasList.get(i)).refreshServerSystem(currentSession);
43       }
44    }
45
46    private void setUserName(_ServerSession currentSession, UserDescriptor userDescriptor) throws
47        DException {
48       userDescriptor.user_name = (String JavaDoc) _username0.run(null);
49       try {
50          userDescriptor.load(currentSession);
51       } catch (DException ex) {
52          throw new DException("DSE7059", new Object JavaDoc[] {userDescriptor.user_name});
53       }
54    }
55
56    private void checkIsActiveUser(_ServerSession currentSession, String JavaDoc userName) throws DException {
57       if (currentSession.isActiveAuthorization(userName)) {
58          throw new DException("DSE8097", new Object JavaDoc[] {userName});
59       }
60    }
61
62    private void checkIsSuperUser(_ServerSession currentSession) throws DException {
63       String JavaDoc userName = currentSession.getCurrentUser();
64       if (! (userName.equalsIgnoreCase(SystemTables.SYSTEM)
65              || userName.equalsIgnoreCase(ServerSystem.browserUser))) {
66          throw new DException("DSE8105", new Object JavaDoc[] {userName});
67       }
68    }
69
70    private void checkIsValidUser(String JavaDoc userName, _ServerSession currentSession) throws DException {
71       if (userName.equalsIgnoreCase(SystemTables.SYSTEM) /*|| userName.equalsIgnoreCase(ServerSystem.browserUser)*/ || userName.equalsIgnoreCase(SqlKeywords.PUBLIC)) {
72          throw new DException("DSE8104", new Object JavaDoc[] {userName});
73       }
74       /**
75        * Follwing code is done by harvinder Related to bug 12075. */

76       DataDictionary dd = (DataDictionary) currentSession.getDataDictionary();
77       _SelectQueryIterator schemaIterator = (_SelectQueryIterator) dd.getPreparedStatementGetter().
78           getSchemataTableExecuter().executeForFresh(new Object JavaDoc[] {"users", "users"});
79       if (schemaIterator.first()) {
80          Object JavaDoc[] ob = (Object JavaDoc[]) schemaIterator.getObject();
81          for (int i = 0; i < ob.length; i++) {
82             if (userName.equalsIgnoreCase(ob[2].toString())) {
83                throw new DException("DSE8181", new Object JavaDoc[] {userName});
84             }
85          }
86       }
87    }
88
89    public void dropUser(_ServerSession serverSession,
90                         UserDescriptor userDescriptor) throws DException {
91       ArrayList schemasList = getUserSchemas(serverSession, userDescriptor);
92       for (int i = 0; i < schemasList.size(); i++) {
93          dropschemastatement dropSchema = new dropschemastatement();
94          dropSchema.dropSchema( (SchemaDescriptor) schemasList.get(i),
95                                serverSession, SqlKeywords.CASCADE);
96          droppedSchemasList.add(dropSchema);
97       }
98       revokeAllPrivilegesOfUser(serverSession, userDescriptor);
99       userDescriptor.delete(serverSession);
100    }
101
102    public ArrayList getUserSchemas(_ServerSession serverSession, UserDescriptor userDes) throws DException {
103       _SelectQueryIterator tableIterator = SqlSchemaConstants.getIterator(serverSession,
104           QueryMaker.getSchemasQueryForUser(), new Object JavaDoc[] {userDes.user_name});
105       ArrayList schemaDescriptorsList = new ArrayList();
106       if (tableIterator.first()) {
107          do {
108             SchemaDescriptor schemaDescriptor = new SchemaDescriptor();
109             schemaDescriptor.loadDataFromRecord(tableIterator);
110             schemaDescriptorsList.add(schemaDescriptor);
111          } while (tableIterator.next());
112       }
113       return schemaDescriptorsList;
114    }
115
116    private void revokeAllPrivilegesOfUser(_ServerSession serverSession,
117                                           UserDescriptor userDescriptor) throws
118        DException {
119       String JavaDoc userName = userDescriptor.user_name;
120       revokeTablePrivileges(serverSession, userName);
121       revokeColumnPrivileges(serverSession, userName);
122       revokeUsagePrivileges(serverSession, userName);
123       revokeRoutinePrivileges(serverSession, userName);
124       revokeRoles(serverSession, userName, roleDesc, revokeSt);
125       dropAllDependentRoles(serverSession);
126       /** @todo revoke privileges on usage and routine privileges also */
127    }
128
129    private void revokeTablePrivileges(_ServerSession serverSession,
130                                       String JavaDoc userName) throws DException {
131       StringBuffer JavaDoc queryForTablePrivileges = new StringBuffer JavaDoc();
132       queryForTablePrivileges.append(
133           " select distinct table_catalog,table_schema,table_name,grantor from ")
134           .append(SystemTables.table_privileges_TableName).append(
135           " where grantee = ? ");
136       _SelectQueryIterator tablePrivilegesIterator = SqlSchemaConstants.getIterator(
137           serverSession, queryForTablePrivileges.toString(),
138           new Object JavaDoc[] {userName});
139       if (tablePrivilegesIterator.first()) {
140          do {
141             StringBuffer JavaDoc query = new StringBuffer JavaDoc();
142             Object JavaDoc[] values = (Object JavaDoc[]) tablePrivilegesIterator.getObject();
143             query.append("REVOKE ALL PRIVILEGES ON ")
144                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[0])).
145                 append(".")
146                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[1])).
147                 append(".")
148                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[2]))
149                 .append(" FROM ")
150                 .append(userName).append(" CASCADE");
151
152             revokeprivilegestatement _revokePrivilegesStatement = (
153                 revokeprivilegestatement) Parser.parseQuery(query.toString());
154             _revokePrivilegesStatement.setIsSelfInitiated(false);
155             _revokePrivilegesStatement.setGrantor( ( (String JavaDoc) values[3]));
156             _revokePrivilegesStatement.run(serverSession.getSystemServerSession());
157
158          } while (tablePrivilegesIterator.next());
159       }
160    }
161
162    private void revokeColumnPrivileges(_ServerSession serverSession,
163                                        String JavaDoc userName) throws DException {
164       StringBuffer JavaDoc queryForColumnPrivileges = new StringBuffer JavaDoc();
165       queryForColumnPrivileges.append(
166           " select table_catalog,table_schema,table_name,column_name,privilege_type,grantor from ")
167           .append(SystemTables.column_privileges_TableName).append(
168           " where grantee = ? ");
169       _SelectQueryIterator columnPrivilegesIterator = SqlSchemaConstants.getIterator(
170           serverSession, queryForColumnPrivileges.toString(),
171           new Object JavaDoc[] {userName});
172       if (columnPrivilegesIterator.first()) {
173          do {
174             StringBuffer JavaDoc query = new StringBuffer JavaDoc();
175             Object JavaDoc[] values = (Object JavaDoc[]) columnPrivilegesIterator.getObject();
176             query.append("REVOKE ").append( (String JavaDoc) values[4])
177                 .append("(").append(QuotedUtility.getUserIdentifier( (String JavaDoc)
178                 values[3]))
179                 .append(") ON TABLE ")
180                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[0])).
181                 append(".")
182                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[1])).
183                 append(".")
184                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[2]))
185                 .append(" FROM ")
186                 .append(userName).append(" CASCADE ");
187             revokeprivilegestatement _revokePrivilegeStatement = (
188                 revokeprivilegestatement) Parser.parseQuery(query.toString());
189             _revokePrivilegeStatement.setIsSelfInitiated(false);
190             _revokePrivilegeStatement.setGrantor( ( (String JavaDoc) values[5]));
191             _revokePrivilegeStatement.run(serverSession.getSystemServerSession());
192          } while (columnPrivilegesIterator.next());
193       }
194
195    }
196
197    private void revokeRoutinePrivileges(_ServerSession serverSession,
198                                         String JavaDoc userName) throws DException {
199       StringBuffer JavaDoc queryForRoutinePrivileges = new StringBuffer JavaDoc();
200       queryForRoutinePrivileges.append(
201           " select distinct specific_catalog,specific_schema,specific_name,grantor from ")
202           .append(SystemTables.routine_privileges_TableName).append(
203           " where grantee = ? ");
204       _SelectQueryIterator routinePrivilegesIterator = SqlSchemaConstants.getIterator(
205           serverSession, queryForRoutinePrivileges.toString(),
206           new Object JavaDoc[] {userName});
207       if (routinePrivilegesIterator.first()) {
208          do {
209             StringBuffer JavaDoc query = new StringBuffer JavaDoc();
210             Object JavaDoc[] values = (Object JavaDoc[]) routinePrivilegesIterator.getObject();
211             query.append("REVOKE ALL PRIVILEGES ON SPECIFIC PROCEDURE ")
212                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[0])).
213                 append(".")
214                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[1])).
215                 append(".")
216                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[2]))
217                 .append(" FROM ")
218                 .append(userName).append(" CASCADE");
219
220             revokeprivilegestatement _revokePrivilegesStatement = (
221                 revokeprivilegestatement) Parser.parseQuery(query.toString());
222             _revokePrivilegesStatement.setIsSelfInitiated(false);
223             _revokePrivilegesStatement.setGrantor( ( (String JavaDoc) values[3]));
224             _revokePrivilegesStatement.run(serverSession.getSystemServerSession());
225          } while (routinePrivilegesIterator.next());
226       }
227
228    }
229
230    private void revokeUsagePrivileges(_ServerSession serverSession,
231                                       String JavaDoc userName) throws DException {
232       StringBuffer JavaDoc queryForUsagePrivileges = new StringBuffer JavaDoc();
233       queryForUsagePrivileges.append(
234           " select object_catalog,object_schema,object_name,object_type,grantor from ")
235           .append(SystemTables.usage_privileges_TableName).append(
236           " where grantee = ? ");
237       _SelectQueryIterator usagePrivilegesIterator = SqlSchemaConstants.getIterator(
238           serverSession, queryForUsagePrivileges.toString(),
239           new Object JavaDoc[] {userName});
240       if (usagePrivilegesIterator.first()) {
241          do {
242             StringBuffer JavaDoc query = new StringBuffer JavaDoc();
243             Object JavaDoc[] values = (Object JavaDoc[]) usagePrivilegesIterator.getObject();
244             query.append("REVOKE USAGE ON ")
245                 .append( (String JavaDoc) values[3])
246                 .append(" ")
247                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[0])).
248                 append(".")
249                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[1])).
250                 append(".")
251                 .append(QuotedUtility.getUserIdentifier( (String JavaDoc) values[2]))
252                 .append(" FROM ")
253                 .append(userName).append(" CASCADE");
254             revokeprivilegestatement _revokePrivilegesStatement = (
255                 revokeprivilegestatement) Parser.parseQuery(query.toString());
256             _revokePrivilegesStatement.setIsSelfInitiated(false);
257             _revokePrivilegesStatement.setGrantor( ( (String JavaDoc) values[4]));
258             _revokePrivilegesStatement.run(serverSession.getSystemServerSession());
259
260          } while (usagePrivilegesIterator.next());
261       }
262
263    }
264
265    /* private void revokeRoles(_ServerSession serverSession,
266                                String userName) throws DException {
267          StringBuffer queryForUserRoles = new StringBuffer();
268          queryForUserRoles.append(
269              " select role_name,grantor from ")
270              .append(SystemTables.role_authorization_TableName).append(
271              " where grantee = ? ");
272          _SelectQueryIterator rolesIterator = SqlSchemaConstants.getIterator(
273              serverSession, queryForUserRoles.toString(),
274              new Object[] {userName});
275          if (rolesIterator.first()) {
276             do {
277                StringBuffer query = new StringBuffer();
278                Object[] values = (Object[]) rolesIterator.getObject();
279                query.append("REVOKE ")
280                    .append(QuotedUtility.getUserIdentifier( (String) values[0]))
281                    .append(" FROM ")
282                    .append(QuotedUtility.getUserIdentifier(userName)).append(" CASCADE ");
283                revokerolestatement _revokeRoleStatement = (revokerolestatement) Parser.parseQuery(query.toString());
284                String grantorFound = ( (String) values[1]);
285                _revokeRoleStatement.setRoleGrantor(grantorFound);
286                _revokeRoleStatement.run(serverSession.getSystemServerSession());
287                if (grantorFound.equalsIgnoreCase(SystemTables.SYSTEM)) {
288                   RoleDescriptor roleDes = new RoleDescriptor();
289                   roleDes.role_name = (String) values[0];
290                   roleDes.load(serverSession);
291                   roleDes.delete(serverSession);
292                }
293             } while (rolesIterator.next());
294          }
295       }*/

296
297    /**
298     * Write new method getAllDependentRolesForDrop for role optimization by harvinder. */

299    private void revokeRolesDescriptors(_ServerSession serverSession,
300                                        String JavaDoc userName, ArrayList roleDesc, ArrayList revokeSt) throws DException {
301       StringBuffer JavaDoc queryForUserRoles = new StringBuffer JavaDoc();
302       queryForUserRoles.append(" select * from ")
303           .append(SystemTables.role_authorization_TableName).append(" where grantee = ? and grantor = ?");
304       _SelectQueryIterator rolesIterator = SqlSchemaConstants.getIterator(
305           serverSession, queryForUserRoles.toString(), new Object JavaDoc[] {userName, SystemTables.SYSTEM});
306
307       if (rolesIterator.first()) {
308          do {
309             Object JavaDoc[] values = (Object JavaDoc[]) rolesIterator.getObject();
310             StringBuffer JavaDoc revokeQuery = new StringBuffer JavaDoc();
311             revokeQuery.append("revoke ").append(QuotedUtility.getUserIdentifier(values[0].toString()))
312                 .append(" from ").append(QuotedUtility.getUserIdentifier(userName))
313                 .append(" CASCADE");
314             revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery(revokeQuery.toString());
315             revokeSt.add(_revokeRoleSt);
316
317             RoleDescriptor roleDes = new RoleDescriptor();
318             roleDes.role_name = (String JavaDoc) values[0];
319             roleDes.load(serverSession);
320             roleDesc.add(roleDes);
321             revokeRolesDescriptors(serverSession, roleDes.role_name, roleDesc, revokeSt);
322          } while (rolesIterator.next());
323       }
324    }
325
326    private void revokeRoles(_ServerSession serverSession,
327                             String JavaDoc userName, ArrayList roleDesc, ArrayList revokeSt) throws DException {
328       revokeRolesAuthDescriptors(serverSession, userName);
329       revokeRolesDescriptors(serverSession, userName, roleDesc, revokeSt);
330    }
331
332    /* private void revokeRolesAuthDescriptors(_ServerSession serverSession,
333                                               String userName) throws DException {
334          StringBuffer queryForRoleAuthDes = new StringBuffer();
335          queryForRoleAuthDes.append(" select * from ")
336              .append(SystemTables.role_authorization_TableName).append(" where grantee = ? ");
337          _SelectQueryIterator roleAuthDesIter = SqlSchemaConstants.getIterator(
338              serverSession, queryForRoleAuthDes.toString(), new Object[] {userName});
339
340          if (roleAuthDesIter.first()) {
341             do {
342                Object[] values = (Object[]) roleAuthDesIter.getObject();
343                String grantor=(String) values[2];
344                if(!grantor.equalsIgnoreCase(SystemTables.SYSTEM)){
345                   RoleAuthorizationDescriptor roleAuthDes = new RoleAuthorizationDescriptor();
346                   roleAuthDes.role_name = (String) values[0];
347                   roleAuthDes.grantee = (String) values[1];
348                   roleAuthDes.grantor = grantor;
349                   roleAuthDes.is_grantable = (String) values[3];
350                   roleAuthDes.load(serverSession);
351                   roleAuthDes.delete(serverSession);
352                }
353             } while (roleAuthDesIter.next());
354          }
355       }*/

356    private void revokeRolesAuthDescriptors(_ServerSession serverSession,
357                                            String JavaDoc userName) throws DException {
358       StringBuffer JavaDoc queryForRoleAuthDes = new StringBuffer JavaDoc();
359       queryForRoleAuthDes.append(" select * from ")
360           .append(SystemTables.role_authorization_TableName).append(" where grantee = ? ");
361       _SelectQueryIterator roleAuthDesIter = SqlSchemaConstants.getIterator(
362           serverSession, queryForRoleAuthDes.toString(), new Object JavaDoc[] {userName});
363
364       if (roleAuthDesIter.first()) {
365          do {
366             Object JavaDoc[] values = (Object JavaDoc[]) roleAuthDesIter.getObject();
367             StringBuffer JavaDoc revokeQuery = new StringBuffer JavaDoc();
368             revokeQuery.append("revoke ").append(values[0].toString())
369                 .append(" from ").append(userName)
370                 .append(" CASCADE");
371             revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery(revokeQuery.toString());
372             _revokeRoleSt.setRoleGrantor( (String JavaDoc) values[2]);
373             _revokeRoleSt.run(serverSession);
374          } while (roleAuthDesIter.next());
375       }
376    }
377
378    /**
379     * Write new method dropAllDependentRoles for role optimization by harvinder. */

380    private void dropAllDependentRoles(_ServerSession currentSession) throws DException {
381       for (int i = 0; i < revokeSt.size(); i++) {
382          revokerolestatement _revokeRoleSt = (revokerolestatement) revokeSt.get(i);
383          _revokeRoleSt.run(currentSession.getSystemServerSession());
384       }
385       for (int j = 0; j < roleDesc.size(); j++) {
386          RoleDescriptor roleDes1 = (RoleDescriptor) roleDesc.get(j);
387          roleDes1.delete(currentSession);
388       }
389    }
390
391    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
392       return this;
393    }
394
395    public String JavaDoc toString() {
396       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
397       sb.append(" ");
398       sb.append(_SRESERVEDWORD12065439222);
399       sb.append(" ");
400       sb.append(_SRESERVEDWORD12065439221);
401       sb.append(" ");
402       sb.append(_username0);
403       return sb.toString();
404    }
405 }
406
Popular Tags