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.ddl.descriptors.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 10 import com.daffodilwoods.daffodildb.server.sql99.token.*; 11 import com.daffodilwoods.daffodildb.utils.*; 12 import com.daffodilwoods.daffodildb.utils.parser.*; 13 import com.daffodilwoods.database.resource.*; 14 15 public class droprolestatement implements SQLschemamanipulationstatement { 16 public rolename _rolename0; 17 public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442551; 18 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 19 ArrayList revokeSt = new ArrayList(); 20 ArrayList roleDesc = new ArrayList(); 21 22 public Object run(Object object) throws DException { 23 _ServerSession currentSession = (_ServerSession) object; 24 RoleDescriptor roleDes = new RoleDescriptor(); 25 RoleAuthorizationDescriptor roleAuthDes = new RoleAuthorizationDescriptor(); 26 setRoleName(currentSession, roleDes); 27 setRoleAthorization(currentSession, roleDes.role_name, roleAuthDes); 28 checkIsActiveRole(currentSession, roleDes.role_name); 29 validatePrivileges(currentSession, roleAuthDes.grantee); 30 getAllDependentRolesForDrop(currentSession, roleDes.role_name, revokeSt, roleDesc); 31 dropAllDependentRoles(currentSession); 32 revokeRolePrivileges(currentSession, roleAuthDes); 33 roleDes.delete(currentSession); 34 return null; 35 } 36 37 private void setRoleName(_ServerSession currentSession, RoleDescriptor roleDes) throws DException { 38 String roleName = (String ) _rolename0.run(null); 39 roleDes.role_name = roleName; 40 try { 41 roleDes.load(currentSession); 42 } catch (Exception ex) { 43 throw new DException("DSE8092", new Object [] {roleDes.role_name}); 44 } 45 } 46 47 private void setRoleAthorization(_ServerSession currentSession, String roleName, RoleAuthorizationDescriptor roleAuthDes) throws DException { 48 StringBuffer query = new StringBuffer (); 49 query.append("select * from ").append(SystemTables.role_authorization_TableName) 50 .append(" where role_name = ? and grantor = ? and is_grantable = 'yes' "); 51 _SelectQueryIterator iterator = SqlSchemaConstants.getIterator(currentSession, query.toString(), new Object [] {roleName, SystemTables.SYSTEM}); 52 if (iterator.first()); 53 roleAuthDes.loadDataFromRecord(iterator); 54 } 55 56 private void validatePrivileges(_ServerSession currentSession, String authIdentifier) throws DException { 57 String currentUser = currentSession.getCurrentUser(); 58 String currentRole = currentSession.getCurrentRole(); 59 if (currentRole != null) { 60 if (!(currentSession.isEnabledAuthorizationIdentifier(authIdentifier, false))) { 61 throw new DException("DSE8143", new Object [] {currentRole}); 62 } 63 } else { 64 if (! (currentUser.equalsIgnoreCase(ServerSystem.browserUser))) { 65 if (!(currentSession.isEnabledAuthorizationIdentifier(authIdentifier, false))) { 66 throw new DException("DSE8143", new Object [] {currentUser}); 67 } 68 } 69 } 70 } 71 72 private void checkIsActiveRole(_ServerSession currentSession, String roleName) throws DException { 73 if (currentSession.isActiveAuthorization(roleName)) { 74 throw new DException("DSE8098", new Object [] {roleName}); 75 } 76 } 77 78 private void revokeRolePrivileges(_ServerSession currentSession, 79 RoleAuthorizationDescriptor roleAuthDes) throws 80 DException { 81 StringBuffer revokeQuery = new StringBuffer (); 82 revokeQuery.append("revoke ").append(QuotedUtility.getUserIdentifier(roleAuthDes.role_name)) 83 .append(" from ").append(QuotedUtility.getUserIdentifier(roleAuthDes.grantee)) 84 .append(" CASCADE"); 85 revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery( 86 revokeQuery.toString()); 87 _revokeRoleSt.run(currentSession.getSystemServerSession()); 88 } 89 90 public Object clone() throws CloneNotSupportedException { 91 return this; 92 } 93 94 public String toString() { 95 StringBuffer sb = new StringBuffer (); 96 sb.append(" "); 97 sb.append(_SRESERVEDWORD12065439222); 98 sb.append(" "); 99 sb.append(_SNONRESERVEDWORD1364442551); 100 sb.append(" "); 101 sb.append(_rolename0); 102 return sb.toString(); 103 } 104 105 107 private void getAllDependentRolesDescriporsForDrop(_ServerSession serverSession, String grantee, ArrayList revokeSt, ArrayList roleDesc) throws DException { 108 StringBuffer queryForUserRoles = new StringBuffer (); 109 queryForUserRoles.append(" select * from ") 110 .append(SystemTables.role_authorization_TableName).append(" where grantee = ? and grantor = ?"); 111 _SelectQueryIterator rolesIterator = SqlSchemaConstants.getIterator( 112 serverSession, queryForUserRoles.toString(), new Object [] {grantee, SystemTables.SYSTEM}); 113 if (rolesIterator.first()) { 114 do { 115 Object [] values = (Object []) rolesIterator.getObject(); 116 StringBuffer revokeQuery = new StringBuffer (); 117 revokeQuery.append("revoke ").append(QuotedUtility.getUserIdentifier(values[0].toString())) 118 .append(" from ").append(QuotedUtility.getUserIdentifier(grantee)) 119 .append(" CASCADE"); 120 revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery(revokeQuery.toString()); 121 revokeSt.add(_revokeRoleSt); 122 123 RoleDescriptor roleDes = new RoleDescriptor(); 124 roleDes.role_name = (String ) values[0]; 125 roleDes.load(serverSession); 126 roleDesc.add(roleDes); 127 getAllDependentRolesDescriporsForDrop(serverSession, roleDes.role_name, revokeSt, roleDesc); 128 } while (rolesIterator.next()); 129 } 130 } 131 132 private void getAllDependentRolesForDrop(_ServerSession serverSession, String grantee, ArrayList revokeSt, ArrayList roleDesc) throws DException { 133 revokeRoleAuthDescriptor(serverSession, grantee); 134 getAllDependentRolesDescriporsForDrop(serverSession, grantee, revokeSt, roleDesc); 135 } 136 137 private void revokeRoleAuthDescriptor(_ServerSession serverSession, String grantee) throws DException { 138 StringBuffer queryForRolesAuthDes = new StringBuffer (); 139 queryForRolesAuthDes.append(" select * from ") 140 .append(SystemTables.role_authorization_TableName).append(" where grantee = ? "); 141 _SelectQueryIterator rolesAuthIterator = SqlSchemaConstants.getIterator( 142 serverSession, queryForRolesAuthDes.toString(), new Object [] {grantee}); 143 if (rolesAuthIterator.first()) { 144 do { 145 Object [] values = (Object []) rolesAuthIterator.getObject(); 146 String grantor=(String ) values[2]; 147 if(!grantor.equalsIgnoreCase(SystemTables.SYSTEM)){ 148 RoleAuthorizationDescriptor roleAuthDes = new RoleAuthorizationDescriptor(); 149 roleAuthDes.role_name = (String ) values[0]; 150 roleAuthDes.grantee = (String ) values[1]; 151 roleAuthDes.grantor = grantor; 152 roleAuthDes.is_grantable = (String ) values[3]; 153 roleAuthDes.load(serverSession); 154 roleAuthDes.delete(serverSession); 155 } 156 } while (rolesAuthIterator.next()); 157 } 158 } 159 160 162 private void dropAllDependentRoles(_ServerSession currentSession) throws DException { 163 for (int i = 0; i < revokeSt.size(); i++) { 164 revokerolestatement _revokeRoleSt = (revokerolestatement) revokeSt.get(i); 165 _revokeRoleSt.run(currentSession.getSystemServerSession()); 166 } 167 for (int j = 0; j < roleDesc.size(); j++) { 168 RoleDescriptor roleDes1 = (RoleDescriptor) roleDesc.get(j); 169 roleDes1.delete(currentSession); 170 } 171 } 172 } 173 | Popular Tags |