/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.starmodeler; import java.util.ArrayList; import java.util.List; import org.pentaho.metadata.model.LogicalColumn; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.metadata.model.LogicalTable; import org.pentaho.metadata.model.concept.Concept; import org.pentaho.metadata.model.concept.types.DataType; import org.pentaho.metadata.model.concept.types.FieldType; import org.pentaho.metadata.model.concept.types.LocalizedString; import org.pentaho.metadata.model.concept.types.TableType; import org.pentaho.pms.schema.concept.DefaultPropertyID; public class ConceptUtil { public static String getDescription(Concept concept, String locale) { LocalizedString localizedString = (LocalizedString) concept.getProperty(Concept.DESCRIPTION_PROPERTY); if (localizedString==null) return null; return localizedString.getLocalizedString(locale); } public static String getName(Concept concept, String locale) { LocalizedString localizedString = (LocalizedString) concept.getProperty(Concept.NAME_PROPERTY); if (localizedString==null) return null; return localizedString.getLocalizedString(locale); } public static TableType getTableType(Concept concept) { TableType tableType = (TableType) concept.getProperty(DefaultPropertyID.TABLE_TYPE.getId()); if (tableType==null) return TableType.OTHER; return tableType; } public static TableType getTableType(String typeString) { try { return TableType.valueOf(typeString); } catch(Exception e) { return TableType.OTHER; } } public static String getString(Concept concept, String id) { String string = (String) concept.getProperty(id); return string; } public static LogicalColumn findFirstKeyColumn(LogicalTable logicalTable) { for (LogicalColumn column : logicalTable.getLogicalColumns()) { FieldType fieldType = column.getFieldType(); if (fieldType!=null && fieldType==FieldType.KEY) { return column; } } return null; } public static DimensionType getDimensionType(LogicalTable logicalTable) { String typeString = getString(logicalTable, DefaultIDs.LOGICAL_TABLE_DIMENSION_TYPE); return DimensionType.getDimensionType(typeString); } public static AttributeType getAttributeType(LogicalColumn column) { String typeString = getString(column, DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE); return AttributeType.getAttributeType(typeString); } public static LogicalColumn findLogicalColumn(LogicalTable logicalTable, AttributeType attributeType) { for (LogicalColumn logicalColumn : logicalTable.getLogicalColumns()) { AttributeType type = getAttributeType(logicalColumn); if (type == attributeType) return logicalColumn; } return null; } public static List<LogicalColumn> findLogicalColumns(LogicalTable logicalTable, AttributeType attributeType) { List<LogicalColumn> logicalColumns = new ArrayList<LogicalColumn>(); for (LogicalColumn logicalColumn : logicalTable.getLogicalColumns()) { AttributeType type = getAttributeType(logicalColumn); if (type == attributeType) { logicalColumns.add(logicalColumn); } } return logicalColumns; } public static List<LogicalTable> findLogicalTables(LogicalModel logicalModel, TableType tableType) { List<LogicalTable> logicalColumns = new ArrayList<LogicalTable>(); for (LogicalTable logicalTable : logicalModel.getLogicalTables()) { TableType type = getTableType(logicalTable); if (type == tableType) { logicalColumns.add(logicalTable); } } return logicalColumns; } public static int indexOfFactTable(LogicalModel logicalModel) { for (int i=0;i<logicalModel.getLogicalTables().size();i++) { LogicalTable logicalTable = logicalModel.getLogicalTables().get(i); TableType type = getTableType(logicalTable); if (type == TableType.FACT) { return i; } } return -1; } public static LogicalTable findDimensionWithName(LogicalModel logicalModel, String dimensionName, String locale) { for (LogicalTable table : logicalModel.getLogicalTables()) { TableType tableType = ConceptUtil.getTableType(table); if (tableType==TableType.DIMENSION) { String name = ConceptUtil.getName(table, locale); if (name!=null && name.equalsIgnoreCase(dimensionName)) return table; } } return null; } public static DataType getDataType(String typeString) { try { return DataType.valueOf(typeString); } catch(Exception e) { return DataType.UNKNOWN; } } }