001/*
002// This software is subject to the terms of the Eclipse Public License v1.0
003// Agreement, available at the following URL:
004// http://www.eclipse.org/legal/epl-v10.html.
005// You must accept the terms of that agreement to use this software.
006//
007// Copyright (C) 2001-2005 Julian Hyde
008// Copyright (C) 2005-2012 Pentaho and others
009// All Rights Reserved.
010*/
011package mondrian.rolap;
012
013import mondrian.olap.*;
014
015import java.io.PrintWriter;
016import java.util.ArrayList;
017import java.util.List;
018
019/**
020 * todo:
021 *
022 * @author jhyde
023 * @since 21 December, 2001
024 */
025public class Test {
026    PrintWriter pw;
027    RolapConnection connection;
028
029    public static void main(String[] args) {
030        Test test = new Test(args);
031        if (true) {
032            test.run();
033        } else {
034            try {
035                test.convertFoodMart();
036            } catch (java.sql.SQLException e) {
037                System.out.println(
038                    "Error: " + mondrian.olap.Util.getErrorMessage(e));
039            }
040        }
041    }
042
043    Test(String[] args)
044    {
045        pw = new PrintWriter(System.out, true);
046        String connectString =
047            "Data Source=LOCALHOST;Provider=msolap;Catalog=Foodmart";
048        connection =
049            (RolapConnection) DriverManager.getConnection(connectString, null);
050    }
051
052    void convertFoodMart() throws java.sql.SQLException
053    {
054        java.sql.Connection connection = null;
055        java.sql.Statement statement = null, statement2 = null;
056        try {
057            try {
058                Class.forName("com.ms.jdbc.odbc.JdbcOdbcDriver");
059            } catch (ClassNotFoundException e) {
060            }
061            String connectString = "jdbc:odbc:DSN=FoodMart2";
062            connection = java.sql.DriverManager.getConnection(connectString);
063            statement = connection.createStatement();
064            statement2 = connection.createStatement();
065            String sql =
066                "select * from ("
067                + " select *, \"fname\" + ' ' + \"lname\" as \"name\" from \"customer\")"
068                + "order by \"country\", \"state_province\", \"city\", \"name\"";
069            java.sql.ResultSet resultSet = statement.executeQuery(sql);
070            int i = 0;
071            while (resultSet.next()) {
072                int customer_id = resultSet.getInt("customer_id");
073                statement2.executeUpdate(
074                    "update \"customer\" set \"ordinal\" = " + (++i * 3)
075                    + " where \"customer_id\" = " + customer_id);
076            }
077            connection.commit();
078        } finally {
079            if (statement2 != null) {
080                try {
081                    statement2.close();
082                } catch (java.sql.SQLException e) {
083                }
084            }
085            if (statement != null) {
086                try {
087                    statement.close();
088                } catch (java.sql.SQLException e) {
089                }
090            }
091            if (connection != null) {
092                try {
093                    connection.close();
094                } catch (java.sql.SQLException e) {
095                }
096            }
097        }
098    }
099
100    void run()
101    {
102        RolapCube salesCube =
103            (RolapCube) connection.getSchema().lookupCube("Sales", true);
104        RolapHierarchy measuresHierarchy =
105                (RolapHierarchy) salesCube.getMeasuresHierarchy();
106        testMemberReader(measuresHierarchy.getMemberReader());
107
108        RolapHierarchy genderHierarchy = (RolapHierarchy)
109            salesCube.lookupHierarchy(
110                new Id.NameSegment("Gender"), false);
111        testMemberReader(genderHierarchy.getMemberReader());
112
113        RolapHierarchy customerHierarchy = (RolapHierarchy)
114            salesCube.lookupHierarchy(
115                new Id.NameSegment("Customers"), false);
116        testMemberReader(customerHierarchy.getMemberReader());
117    }
118    void testMemberReader(MemberReader reader)
119    {
120        pw.println();
121        pw.println("MemberReader class=" + reader.getClass());
122        pw.println("Count=" + reader.getMemberCount());
123
124        pw.print("Root member(s)=");
125        List<RolapMember> rootMembers = reader.getRootMembers();
126        print(rootMembers);
127        pw.println();
128
129        Level[] levels = rootMembers.get(0).getHierarchy().getLevels();
130        Level level = levels[levels.length > 1 ? 1 : 0];
131        pw.print("Members at level " + level.getUniqueName() + " are ");
132        List<RolapMember> members =
133            reader.getMembersInLevel((RolapLevel) level);
134        print(members);
135        pw.println();
136
137        pw.println("First children of first children: {");
138        List<RolapMember> firstChildren = new ArrayList<RolapMember>();
139        RolapMember member = rootMembers.get(0);
140        while (member != null) {
141            firstChildren.add(member);
142            pw.print("\t");
143            print(member);
144            List<RolapMember> children = new ArrayList<RolapMember>();
145            reader.getMemberChildren(member, children);
146            if (children.isEmpty()) {
147                break;
148            }
149            pw.print(" (" + children.size() + " children)");
150            RolapMember leadMember = reader.getLeadMember(member, 5);
151            pw.print(", lead(5)=");
152            print(leadMember);
153            if (children.size() > 1) {
154                member = children.get(1);
155            } else if (children.size() > 0) {
156                member = children.get(0);
157            } else {
158                member = null;
159            }
160            pw.println();
161        }
162        pw.println("}");
163    }
164    private void print(RolapMember member)
165    {
166        if (member == null) {
167            pw.print("Member(null)");
168            return;
169        }
170        pw.print("Member(" + member.getUniqueName() + ")");
171    }
172    private void print(List<RolapMember> members)
173    {
174        pw.print("{");
175        for (int i = 0; i < members.size(); i++) {
176            if (i > 0) {
177                pw.print(", ");
178            }
179            print(members.get(i));
180        }
181        pw.print("}");
182    }
183}
184
185
186// End Test.java