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) 2005-2009 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.spi.impl; 011 012import mondrian.olap.MondrianDef; 013import mondrian.rolap.RolapHierarchy; 014import mondrian.rolap.agg.AggregationKey; 015import mondrian.spi.DataSourceChangeListener; 016 017 018/** 019 * Default implementation of a data source change listener 020 * that always returns that the datasource is changed. 021 * 022 * A change listener can be specified in the connection string. It is used 023 * to ask what is changed in the datasource (e.g. database). 024 * 025 * Everytime mondrian has to decide whether it will use data from cache, it 026 * will call the change listener. When the change listener tells mondrian 027 * the datasource has changed for a dimension, cube, ... then mondrian will 028 * flush the cache and read from database again. 029 * 030 * It is specified in the connection string, like this: 031 * 032 * <blockquote><code> 033 * Jdbc=jdbc:odbc:MondrianFoodMart; JdbcUser=ziggy; JdbcPassword=stardust; 034 * DataSourceChangeListener=com.acme.MyChangeListener; 035 * </code></blockquote> 036 * 037 * This class should be called in mondrian before any data is read, so 038 * even before cache is build. This way, the plugin is able to register 039 * the first timestamp mondrian tries to read the datasource. 040 * 041 * @author Bart Pappyn 042 * @since Dec 12, 2006 043 */ 044 045public class DataSourceChangeListenerImpl2 implements DataSourceChangeListener { 046 047 /** Creates a new instance of DataSourceChangeListenerImpl2 */ 048 public DataSourceChangeListenerImpl2() { 049 } 050 051 052 public synchronized boolean isHierarchyChanged(RolapHierarchy hierarchy) { 053 return true; 054 } 055 056 public synchronized boolean isAggregationChanged( 057 AggregationKey aggregation) 058 { 059 return false; 060 } 061 062 public String getTableName(RolapHierarchy hierarchy) { 063 MondrianDef.RelationOrJoin relation = hierarchy.getRelation(); 064 if (relation instanceof MondrianDef.Table) { 065 MondrianDef.Table tableRelation = (MondrianDef.Table) relation; 066 return tableRelation.name; 067 } else { 068 return null; 069 } 070 } 071} 072 073// End DataSourceChangeListenerImpl2.java