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