KickJava   Java API By Example, From Geeks To Geeks.

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


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.serversystem.*;
10 import com.daffodilwoods.daffodildb.server.sql99.common.*;
11 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
12 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*;
13 import com.daffodilwoods.database.general.*;
14 import com.daffodilwoods.database.resource.*;
15
16 public class CalculateIdentified {
17
18    /** @todo this loading of table descriptor could be saved by using
19     * value set by setObjectDescriptor method in revokePrivilegestatement */

20    private static ArrayList getColumnList(TablePrivilegesDescriptor tpd,
21                                           _ServerSession serverSession) throws
22        DException {
23       TableDescriptor tableDescriptor = new TableDescriptor();
24       tableDescriptor.table_catalog = tpd.object_catalog;
25       tableDescriptor.table_schema = tpd.object_schema;
26       tableDescriptor.table_name = tpd.object_name;
27       tableDescriptor.load(serverSession);
28       return tableDescriptor.get_all_column_descriptors();
29    }
30
31    public static ArrayList getIdentifiedRoleAuthorisationDescriptor(
32        _ServerSession serverSession,
33        ArrayList RADRevoked, ArrayList grantee, String JavaDoc grantor) throws
34        DException {
35       return null;
36    }
37
38    public static ArrayList getIdentifiedPrivilegeDescriptor(_ServerSession
39        serverSession, privileges privilege, ArrayList grantee_list,
40        String JavaDoc grantor) throws DException {
41
42       privilege.setGrantee(grantor);
43       ArrayList returned_list = (ArrayList) privilege.run(serverSession);
44       if (returned_list == null) {
45          throw new DException("DSE1171", null);
46       }
47
48       ArrayList identi_list = new ArrayList();
49       PrivilegeDescriptor pd, clone_pd;
50
51       ArrayList columnList = null;
52       for (int j = 0, sz = returned_list.size(); j < sz; j++) {
53          for (int i = 0, size = grantee_list.size(); i < size; i++) {
54             pd = (PrivilegeDescriptor) returned_list.get(j);
55             pd.setGrantee(grantee_list.get(i));
56             pd.setGrantor(grantor);
57             try {
58                if (pd instanceof TablePrivilegesDescriptor) {
59                   clone_pd = new TablePrivilegesDescriptor( (
60                       TablePrivilegesDescriptor) pd);
61                   if (columnList == null) {
62                      columnList = getColumnList( (TablePrivilegesDescriptor) pd,
63                                                 serverSession);
64                   }
65                   ( (TablePrivilegesDescriptor) clone_pd).load(serverSession);
66                   saveColumnPrivilegeDescriptor(serverSession,
67                                                 (TablePrivilegesDescriptor) pd,
68                                                 identi_list, columnList);
69                } else if (pd instanceof ColumnPrivilegeDescriptor) {
70                   clone_pd = new ColumnPrivilegeDescriptor( (
71                       ColumnPrivilegeDescriptor) pd);
72                   ( (ColumnPrivilegeDescriptor) clone_pd).load(serverSession);
73                } else if (pd instanceof RoutinePrivilegeDescriptor) {
74                   clone_pd = new RoutinePrivilegeDescriptor( (
75                       RoutinePrivilegeDescriptor) pd);
76                   ( (RoutinePrivilegeDescriptor) clone_pd).load(serverSession);
77                } else if (pd instanceof UsagePrivilegesDescriptor) {
78                   clone_pd = new UsagePrivilegesDescriptor( (
79                       UsagePrivilegesDescriptor) pd);
80                   ( (UsagePrivilegesDescriptor) clone_pd).load(serverSession);
81                } else {
82                   throw new DException("DSE1172", null);
83                }
84                identi_list.add(clone_pd);
85             } catch (DException ex) {
86                if (! (ex.getDseCode().equals("DSE265") ||
87                       ex.getDseCode().equals("DSE264") ||
88                       ex.getDseCode().equals("DSE723") ||
89                       ex.getDseCode().equals("DSE1046"))) {
90                   throw ex;
91                }
92             }
93          }
94       }
95       return identi_list.size() == 0 ? null : identi_list;
96    }
97
98    private static void saveColumnPrivilegeDescriptor(_ServerSession
99        serverSession, TablePrivilegesDescriptor tpd, ArrayList identi_list,
100        ArrayList columnList) throws
101        DException {
102       if ( (!tpd.privilege_type.equalsIgnoreCase(SqlKeywords.TRIGGER)) &&
103           (!tpd.privilege_type.equalsIgnoreCase(SqlKeywords.DELETE))) {
104          for (int i = 0, size = columnList.size(); i < size; i++) {
105             ColumnDescriptor temp = (ColumnDescriptor) columnList.get(i);
106             if ( (!temp.column_name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.rowId])) ||
107                 (tpd.privilege_type.equalsIgnoreCase(SqlKeywords.SELECT) ||
108                  tpd.privilege_type.equalsIgnoreCase(SqlKeywords.REFERENCES))) {
109                ColumnPrivilegeDescriptor cpd = new ColumnPrivilegeDescriptor();
110                cpd.grantee = tpd.grantee;
111                cpd.grantor = tpd.grantor;
112                cpd.object_catalog = tpd.object_catalog;
113                cpd.object_schema = tpd.object_schema;
114                cpd.object_name = tpd.object_name;
115                cpd.column_name = temp.column_name;
116                cpd.privilege_type = tpd.privilege_type;
117                cpd.load(serverSession);
118                identi_list.add(cpd);
119             }
120          }
121       }
122    }
123 }
124
Popular Tags