KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > schemadefinition > privileges


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition;
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.dql.iterator.*;
10 import com.daffodilwoods.daffodildb.server.sql99.dql.tableexpression.fromclause.*;
11 import com.daffodilwoods.daffodildb.server.sql99.token.*;
12 import com.daffodilwoods.database.general.*;
13 import com.daffodilwoods.database.resource.*;
14
15 public class privileges {
16    public objectname _objectname0;
17    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221;
18    public objectprivileges _objectprivileges2;
19
20    private QualifiedIdentifier objectName;
21    private String JavaDoc grantee;
22    private _Descriptor objectDescriptor;
23    private SchemaDescriptor schemaDescriptor;
24    private Object JavaDoc[] applicableRoles;
25    private Object JavaDoc[] allGrantees;
26
27    public Object JavaDoc run(Object JavaDoc object) throws DException {
28       _ServerSession currentSession = (_ServerSession) object;
29       int len = applicableRoles == null ? 0 : applicableRoles.length;
30       allGrantees = new Object JavaDoc[1 + len];
31       allGrantees[0] = grantee;
32       setObjectName(currentSession);
33       checkStatementValidity(currentSession);
34       ArrayList listOfPDs = getIdentifiedPrivilegeDescriptors(currentSession);
35       return listOfPDs;
36    }
37
38    private void setObjectName(_ServerSession currentSession) throws DException {
39       String JavaDoc sch_name = _objectname0.getSchemaName();
40       String JavaDoc cat_name = _objectname0.getCatalogName();
41       sch_name = (sch_name != null) ? sch_name : (schemaDescriptor != null)
42           ? schemaDescriptor.schema_name : currentSession.getCurrentSchema();
43       cat_name = (cat_name != null) ? cat_name : (schemaDescriptor != null)
44           ? schemaDescriptor.catalog_name : currentSession.getCurrentCatalog();
45       objectName = new QualifiedIdentifier(cat_name, sch_name,
46                                            _objectname0.getObjectName());
47    }
48
49    private void checkStatementValidity(_ServerSession currentSession) throws
50        DException {
51       String JavaDoc objectType = _objectname0.getObjectType();
52       if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) {
53          TableDescriptor tableDescriptor = null;
54          checkForTableType();
55          tableDescriptor = setTableDescriptor(currentSession, tableDescriptor);
56          checkForPrivilegeColumnsExisting(currentSession, tableDescriptor);
57       } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) {
58          checkForUsage();
59          setDomainDescriptor(currentSession);
60       } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) {
61          checkSqlRoutine();
62          setRoutineDescriptor(currentSession);
63       }
64    }
65
66    private void checkForTableType() throws DException {
67       ArrayList listOfActions = _objectprivileges2.getArrayList();
68       if (listOfActions != null) {
69          for (int i = 0, size = listOfActions.size(); i < size; i++) {
70             action act = (action) listOfActions.get(i);
71             String JavaDoc actionType = (String JavaDoc) act.run(null);
72             if (actionType.equalsIgnoreCase(SqlKeywords.USAGE)
73                 || actionType.equalsIgnoreCase(SqlKeywords.EXECUTE)
74                 || actionType.equalsIgnoreCase(SqlKeywords.UNDER)) {
75                throw new DException("DSE1181", new Object JavaDoc[] {actionType});
76             }
77          }
78       }
79    }
80
81    private void checkForUsage() throws DException {
82       ArrayList privs = _objectprivileges2.getArrayList();
83       if (privs != null) {
84          if (privs.size() == 1) {
85             if (privs.get(0).toString().equalsIgnoreCase(SqlKeywords.USAGE)) {
86                return;
87             }
88          }
89          throw new DException("DSE759", null);
90       }
91    }
92
93    private void checkSqlRoutine() throws DException {
94       ArrayList privileges = _objectprivileges2.getArrayList();
95       if (privileges != null) {
96          if (privileges.size() > 1) {
97             throw new DException("DSE5014", null);
98          }
99          if (! ( (action) privileges.get(0)).toString().equalsIgnoreCase(
100              SqlKeywords.EXECUTE)) {
101             throw new DException("DSE934", null);
102          }
103       }
104    }
105
106    private TableDescriptor setTableDescriptor(_ServerSession currentSession, TableDescriptor tableDescriptor) throws DException {
107       if (objectDescriptor == null) {
108          TableDescriptor tableDes = new TableDescriptor(objectName.catalog,
109              objectName.schema, objectName.name);
110          tableDes.load(currentSession);
111          objectDescriptor = tableDes;
112          tableDescriptor = tableDes;
113       } else {
114          tableDescriptor = (TableDescriptor) objectDescriptor;
115       }
116       return tableDescriptor;
117    }
118
119    private void setDomainDescriptor(_ServerSession currentSession) throws
120        DException {
121       if (objectDescriptor == null) {
122          DomainDescriptor domainDes = new DomainDescriptor();
123          domainDes.catalog_name = objectName.catalog;
124          domainDes.schema_name = objectName.schema;
125          domainDes.domain_name = objectName.name;
126          domainDes.load(currentSession);
127          objectDescriptor = domainDes;
128       }
129    }
130
131    private void setRoutineDescriptor(_ServerSession currentSession) throws
132        DException {
133       if (objectDescriptor == null) {
134          RoutineDescriptor routineDes = new RoutineDescriptor();
135          routineDes.SPECIFIC_CATALOG = objectName.catalog;
136          routineDes.SPECIFIC_SCHEMA = objectName.schema;
137          routineDes.SPECIFIC_NAME = objectName.name;
138          routineDes.load(currentSession);
139          objectDescriptor = routineDes;
140       }
141    }
142
143    private ArrayList getIdentifiedPrivilegeDescriptors(_ServerSession
144        currentSession) throws DException {
145       String JavaDoc objectType = _objectname0.getObjectType();
146       return (_objectprivileges2 instanceof
147               SRESERVEDWORD1206543922SRESERVEDWORD1206543922)
148           ? getAllPrivilegeDescriptors(objectType, currentSession)
149           : getCorrespondingPrivilegeDescriptors(objectType, _objectprivileges2.
150                                                  getArrayList());
151    }
152
153    private ArrayList getAllPrivilegeDescriptors(String JavaDoc objectType,
154                                                 _ServerSession currentSession) throws DException {
155       ArrayList listOfPDs = new ArrayList();
156       if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) {
157          TableDescriptor tableDescriptor = (TableDescriptor) objectDescriptor;
158          if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) {
159             setAllTablePrivilegeDescriptor(listOfPDs, tableDescriptor);
160          } else {
161             calculateGrantableTablePrivilege(tableDescriptor, currentSession,
162                                              listOfPDs);
163          }
164       } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) {
165          if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) {
166             setUsagePrivilegeDescriptor(SqlKeywords.DOMAIN, listOfPDs);
167          } else {
168             calculateGrantableUsagePrivilege(currentSession, listOfPDs);
169          }
170       } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) {
171          if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) {
172             setRoutinePrivilegeDescriptor(listOfPDs);
173          } else {
174             calculateGrantableRoutinePrivilege(currentSession, listOfPDs);
175          }
176       }
177       return listOfPDs;
178    }
179
180    private void setAllTablePrivilegeDescriptor(ArrayList listOfPDs,
181                                                TableDescriptor tableDescriptor) throws DException {
182       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.SELECT, listOfPDs);
183       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.UPDATE, listOfPDs);
184       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.INSERT, listOfPDs);
185       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.DELETE, listOfPDs);
186       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.REFERENCES,
187                                   listOfPDs);
188       setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.TRIGGER, listOfPDs);
189    }
190
191    private void calculateGrantableTablePrivilege(TableDescriptor tableDescriptor,
192                                                  _ServerSession currentSession,
193                                                  ArrayList listOfPDs) throws
194        DException {
195       String JavaDoc clause = "select distinct privilege_type from " +
196           SystemTables.table_privileges_TableName
197           + " where grantee IN (?) and is_grantable = 'YES' and table_catalog = ? "
198           + " and table_schema = ? and table_name = ? ";
199       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession, clause,
200           new Object JavaDoc[] {allGrantees, objectName.catalog, objectName.schema,
201           objectName.name});
202       if (iter.first()) {
203          do {
204             Object JavaDoc[] obj = (Object JavaDoc[]) iter.getObject();
205             setTablePrivilegeDescriptor(tableDescriptor, obj[0], listOfPDs);
206          } while (iter.next());
207       } else {
208          throw new DException("DSE8167", new Object JavaDoc[] {currentSession.getCurrentRole() == null ? currentSession.getCurrentUser() : currentSession.getCurrentRole(), objectName});
209       }
210    }
211
212    private void calculateGrantableUsagePrivilege(_ServerSession currentSession, ArrayList listOfPDs) throws DException {
213       String JavaDoc usage_clause = "select object_type from " +
214           SystemTables.usage_privileges_TableName
215           + " where grantee IN (?)and is_grantable = 'YES' and object_catalog = ? "
216           + " and object_schema = ? and object_name = ? ";
217
218       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession,
219           usage_clause,
220           new Object JavaDoc[] {allGrantees, objectName.catalog, objectName.schema,
221           objectName.name});
222       if (iter.first()) {
223          do {
224             Object JavaDoc[] obj = (Object JavaDoc[]) iter.getObject();
225             setUsagePrivilegeDescriptor(obj[0], listOfPDs);
226          } while (iter.next());
227       }
228    }
229
230    private void calculateGrantableRoutinePrivilege(_ServerSession currentSession, ArrayList listOfPDs) throws
231        DException {
232       String JavaDoc routine_clause = "select privilege_type from " +
233           SystemTables.routine_privileges_TableName
234           +
235           " where grantee in (?) and is_grantable = 'YES' and specific_catalog = ? "
236           + " and specific_schema = ? and specific_name = ? ";
237
238       _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession,
239           routine_clause, new Object JavaDoc[] {allGrantees, objectName.catalog,
240           objectName.schema, objectName.name});
241       if (iter.first()) {
242          do {
243             Object JavaDoc[] obj = (Object JavaDoc[]) iter.getObject();
244             setRoutinePrivilegeDescriptor(listOfPDs);
245          } while (iter.next());
246       }
247    }
248
249    private ArrayList getCorrespondingPrivilegeDescriptors(String JavaDoc objectType,
250        ArrayList list_of_actions) throws DException {
251       if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) {
252          return getTablePrivilegeDescriptors(list_of_actions);
253       } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) {
254          return getDomainPrivilegeDescriptors(objectType, list_of_actions);
255       } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) {
256          return getRoutinePrivilegeDescriptors(list_of_actions);
257       } else {
258          throw new DException("DSE565",
259                               new Object JavaDoc[] {objectType + " for privilleges"});
260       }
261    }
262
263    private ArrayList getRoutinePrivilegeDescriptors(ArrayList list_of_actions) throws
264        DException {
265       ArrayList listOfPDs = new ArrayList();
266       for (int i = 0, size = list_of_actions.size(); i < size; i++) {
267          action act = (action) list_of_actions.get(i);
268          String JavaDoc actionType = (String JavaDoc) act.run(null);
269          if (actionType.equalsIgnoreCase(SqlKeywords.EXECUTE)) {
270             setRoutinePrivilegeDescriptor(listOfPDs);
271          }
272       }
273       return listOfPDs;
274    }
275
276    private ArrayList getDomainPrivilegeDescriptors(String JavaDoc objectType,
277        ArrayList list_of_actions) throws
278        DException {
279       ArrayList listOfPDs = new ArrayList();
280       for (int i = 0, size = list_of_actions.size(); i < size; i++) {
281          action act = (action) list_of_actions.get(i);
282          String JavaDoc actionType = (String JavaDoc) act.run(null);
283          if (actionType.equalsIgnoreCase(SqlKeywords.USAGE)) {
284             setUsagePrivilegeDescriptor(objectType, listOfPDs);
285          }
286       }
287       return listOfPDs;
288    }
289
290    private ArrayList getTablePrivilegeDescriptors(ArrayList list_of_actions) throws DException {
291       ArrayList listOfPDs = new ArrayList();
292       TableDescriptor table_descriptor = (TableDescriptor) objectDescriptor;
293       for (int i = 0, size = list_of_actions.size(); i < size; i++) {
294          action act = (action) list_of_actions.get(i);
295          String JavaDoc actionType = (String JavaDoc) act.run(null);
296          if (actionType.equalsIgnoreCase(SqlKeywords.SELECT) ||
297              actionType.equalsIgnoreCase(SqlKeywords.DELETE) ||
298              actionType.equalsIgnoreCase(SqlKeywords.INSERT) ||
299              actionType.equalsIgnoreCase(SqlKeywords.UPDATE) ||
300              actionType.equalsIgnoreCase(SqlKeywords.REFERENCES) ||
301              actionType.equalsIgnoreCase(SqlKeywords.TRIGGER)) {
302             ArrayList l = act.get_columns();
303             if (l == null) {
304                setTablePrivilegeDescriptor(table_descriptor, actionType,
305                                            listOfPDs);
306             } else {
307                for (int j = 0; j < l.size(); j++) {
308                   setColumnPrivilegeDescriptor(table_descriptor, l.get(j),
309                                                actionType, listOfPDs);
310                }
311             }
312          } else {
313             throw new DException("DSE8030", new Object JavaDoc[] {"TABLE", actionType});
314          }
315       }
316       return listOfPDs;
317    }
318
319    private void setTablePrivilegeDescriptor(TableDescriptor tabledesc,
320                                             Object JavaDoc privilege_type, ArrayList listOfPDs) throws DException {
321       if (tabledesc == null) {
322          throw new DException("DSE1183", null);
323       }
324       TablePrivilegesDescriptor tabPriDes = new TablePrivilegesDescriptor();
325       tabPriDes.object_catalog = tabledesc.table_catalog;
326       tabPriDes.object_schema = tabledesc.table_schema;
327       tabPriDes.object_name = objectName.name;
328       tabPriDes.privilege_type = (String JavaDoc) privilege_type;
329       listOfPDs.add(tabPriDes);
330    }
331
332    private void setColumnPrivilegeDescriptor(TableDescriptor tabledesc,
333                                              Object JavaDoc columnName, Object JavaDoc privilege_type, ArrayList listOfPDs) throws
334        DException {
335       ColumnPrivilegeDescriptor cpd = new ColumnPrivilegeDescriptor();
336       cpd.object_catalog = tabledesc.table_catalog;
337       cpd.object_schema = tabledesc.table_schema;
338       cpd.object_name = objectName.name;
339       cpd.column_name = (String JavaDoc) columnName;
340       if (privilege_type != null) {
341          cpd.privilege_type = (String JavaDoc) privilege_type;
342       }
343       listOfPDs.add(cpd);
344    }
345
346    private void setUsagePrivilegeDescriptor(Object JavaDoc object_type,
347                                             ArrayList listOfPDs) throws DException {
348       UsagePrivilegesDescriptor upd = new UsagePrivilegesDescriptor();
349       upd.object_catalog = objectName.catalog;
350       upd.object_schema = objectName.schema;
351       upd.object_name = objectName.name;
352       if (object_type != null) {
353          upd.object_type = (String JavaDoc) object_type;
354       }
355       listOfPDs.add(upd);
356    }
357
358    private void setRoutinePrivilegeDescriptor(ArrayList listOfPDs) throws DException {
359       RoutinePrivilegeDescriptor rpd = new RoutinePrivilegeDescriptor();
360       rpd.object_catalog = objectName.catalog;
361       rpd.object_schema = objectName.schema;
362       rpd.object_name = objectName.name;
363       rpd.privilege_type = SqlKeywords.EXECUTE;
364       listOfPDs.add(rpd);
365    }
366
367    public void setGrantee(String JavaDoc grantee0) throws DException {
368       grantee = grantee0;
369    }
370
371    public void setObjectDescriptor(_Descriptor descriptor) {
372       objectDescriptor = descriptor;
373    }
374
375    public void setApplicableRoles(Object JavaDoc[] applicableRoles0) {
376       applicableRoles = applicableRoles0;
377    }
378
379    public void setSchemaDescriptor(_Descriptor schemaDes) throws
380        DException {
381       schemaDescriptor = (SchemaDescriptor) schemaDes;
382    }
383
384    public _Descriptor getObjectDescriptor() {
385       return objectDescriptor;
386    }
387
388    public String JavaDoc getObjectType() {
389       return _objectname0.getObjectType();
390    }
391
392    public QualifiedIdentifier getQualifiedObjectName() {
393       return objectName;
394    }
395
396    public String JavaDoc toString() {
397       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
398       sb.append(" ");
399       sb.append(_objectprivileges2);
400       sb.append(" ");
401       sb.append(_SRESERVEDWORD12065439221);
402       sb.append(" ");
403       sb.append(_objectname0);
404       return sb.toString();
405    }
406
407    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
408       return this;
409    }
410
411    private void checkForPrivilegeColumnsExisting(_ServerSession currentSession, TableDescriptor tableDescriptor) throws DException {
412       ArrayList listOfActions = _objectprivileges2.getArrayList();
413       if (listOfActions != null) {
414          for (int i = 0, size = listOfActions.size(); i < size; i++) {
415             action act = (action) listOfActions.get(i);
416             ArrayList allColumns = act.get_columns();
417             if (allColumns != null) {
418                for (int j = 0; j < allColumns.size(); j++) {
419                   String JavaDoc columnName = (String JavaDoc) allColumns.get(j);
420                   ColumnDescriptor columnDes = new ColumnDescriptor(objectName.catalog,
421                       objectName.schema, objectName.name, columnName);
422                   columnDes.setTableDescriptor(tableDescriptor);
423                   columnDes.load(currentSession);
424                }
425             }
426          }
427       }
428    }
429 }
430
Popular Tags