package org.olap.server.database.physical; import java.util.List; import org.olap.server.database.CatalogDefinition; import org.olap4j.OlapException; import org.olap4j.metadata.Dimension; import com.healthmarketscience.sqlbuilder.dbspec.basic.DbSchema; import com.healthmarketscience.sqlbuilder.dbspec.basic.DbSpec; public class PhysicalSchema { public String schema; public String dataSource; public List<DimensionTable> dimensions; public List<AggregateTable> aggregates; private DbSpec dbSpec; private DbSchema dbSchema; public void index(CatalogDefinition catalogDefinition) throws OlapException { dbSpec = new DbSpec(); dbSchema = dbSpec.addSchema(schema); for(DimensionTable t : dimensions){ t.index(dbSchema); } for(AggregateTable t : aggregates){ t.index(dbSchema, catalogDefinition); } } public DbSpec getDbSpec() { return dbSpec; } public DbSchema getDbSchema() { return dbSchema; } public DimensionTable findDimensionTable(String name){ for(DimensionTable dt : dimensions){ if(dt.table.equals(name)) return dt; } return null; } public DimensionTable findDimensionTable(Dimension dimension){ for(AggregateTable at : aggregates){ for(TableJoin join: at.joins){ if(join.dimension.equals(dimension.getName())) return findDimensionTable(join.table); } } return null; } }