KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > rolap > SqlConstraintFactory


1 /*
2 // This software is subject to the terms of the Common Public License
3 // Agreement, available at the following URL:
4 // http://www.opensource.org/licenses/cpl.html.
5 // Copyright (C) 2004-2005 TONBELLER AG
6 // All Rights Reserved.
7 // You must accept the terms of that agreement to use this software.
8 */

9 package mondrian.rolap;
10
11 import java.util.List JavaDoc;
12
13 import mondrian.olap.Evaluator;
14 import mondrian.olap.Level;
15 import mondrian.olap.MondrianProperties;
16 import mondrian.rolap.sql.MemberChildrenConstraint;
17 import mondrian.rolap.sql.TupleConstraint;
18
19 /**
20  * Creates the right constraint for common tasks.
21  *
22  * @author av
23  * @since Nov 21, 2005
24  */

25 public class SqlConstraintFactory {
26
27     boolean enabled = MondrianProperties.instance().EnableNativeNonEmpty.get();
28
29     private static final SqlConstraintFactory instance = new SqlConstraintFactory();
30
31     /** singleton */
32     private SqlConstraintFactory() {
33     }
34
35     public static SqlConstraintFactory instance() {
36         return instance;
37     }
38
39     public MemberChildrenConstraint getMemberChildrenConstraint(Evaluator context) {
40         if (!enabled || !SqlContextConstraint.isValidContext(context))
41             return DefaultMemberChildrenConstraint.instance();
42         return new SqlContextConstraint((RolapEvaluator) context, false);
43     }
44
45     public TupleConstraint getLevelMembersConstraint(Evaluator context) {
46         return getLevelMembersConstraint(context, null);
47     }
48
49     public TupleConstraint getLevelMembersConstraint(
50         Evaluator context,
51         Level [] levels) {
52         if (!enabled ||
53             !SqlContextConstraint.isValidContext(context, false, levels))
54         {
55             return DefaultTupleConstraint.instance();
56         }
57         return new SqlContextConstraint((RolapEvaluator) context, false);
58     }
59
60     public MemberChildrenConstraint getChildByNameConstraint(
61         RolapMember parent,
62         String JavaDoc childName)
63     {
64         // ragged hierarchies span multiple levels, so SQL WHERE does not work there
65
if (!enabled || parent.getHierarchy().isRagged()) {
66             return DefaultMemberChildrenConstraint.instance();
67         }
68         return new ChildByNameConstraint(childName);
69     }
70
71     /**
72      * Returns a constraint that allows to read all children of multiple parents
73      * at once using a LevelMember query style. This does not work
74      * for parent/child hierarchies.
75      */

76     public TupleConstraint getDescendantsConstraint(
77         List JavaDoc<RolapMember> parentMembers,
78         MemberChildrenConstraint mcc)
79     {
80         return new DescendantsConstraint(parentMembers, mcc);
81     }
82 }
83
84 // End SqlConstraintFactory.java
85
Popular Tags