| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| */ |
| |
| grammar org.eclipse.osbp.xtext.cubedsl.CubeDSL with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations |
| |
| import "http://osbp.eclipse.org/xtext/cubedsl/CubeDSL" |
| |
| import "http://osbp.eclipse.org/dsl/common/types/v1" |
| import "http://osbp.eclipse.org/dsl/entity/v1" as entity |
| import "http://www.eclipse.org/emf/2002/Ecore" as ecore |
| |
| CubeModel: |
| {CubeModel} pckg=CubePackage; |
| |
| CubePackage: |
| 'package' name=QualifiedName ('{' (imports+=Import)* (dimensions+=CubeDimension)* (cubes+=CubeType)* '}')?; |
| |
| CubeType: |
| 'cube' name=ID (defaultMeasure?='defaultMeasure' defaultMeasureValue=STRING)? '{' cubeTypeEntity=CubeTypeEntity'}'; |
| |
| CubeDimensionUsage: |
| 'dimensionUsage' sourceValue=[CubeDimension] 'over' overValue=[entity::LEntityFeature|LFQN] ';'; |
| |
| CubeDimension: |
| 'dimension' name=TRANSLATABLEID (typeTime?='typeTime')? '{' hierarchies+=CubeHierarchy* '}'; |
| |
| CubeHierarchy: |
| {CubeHierarchy} 'hierarchy' (name=TRANSLATABLEID)? (hasAll?='hasAll')? (allMemberName?='allMemberName=' allMemberNameValue=TRANSLATABLESTRING)? (defaultMember?='defaultMember=' defaultMemberValue=TRANSLATABLESTRING)? |
| '{' cubeDimEntity=CubeDimensionEntity '}'; |
| |
| CubeEntity: |
| 'entity' entityValue=[entity::LEntity|LFQN] (key?='key=' keyValue=[entity::LEntityFeature|LFQN])?; |
| |
| CubeTypeEntity: |
| entityRef=CubeEntity '{' dimensionUsages+=CubeDimensionUsage* measures+=CubeMeasure* '}'; |
| |
| CubeDimensionEntity: |
| {CubeDimensionEntity} entityRef=CubeEntity '{' hierarchLevels+=CubeLevel* (dimEntity=CubeDimensionEntityEntity)? '}'; |
| |
| CubeDimensionEntityEntity: |
| {CubeDimensionEntityEntity} entityRef=CubeEntity '{' 'over' overValue=[entity::LEntityFeature|LFQN] ';' hierarchLevels+=CubeLevel* (dimEntity=CubeDimensionEntityEntity)? '}'; |
| |
| CubeLevel: |
| 'level' name=TRANSLATABLEID 'column=' levelColValue=[entity::LEntityFeature|LFQN] (uniqueMembers?='uniqueMembers')? (levelType?='levelType=' levelTypeValue=CubeLevelLevelType)? (';' | '{' properties+=CubeLevelProp* '}'); |
| |
| CubeLevelProp: |
| 'property' name=TRANSLATABLEID 'column=' levelPropColValue=[entity::LEntityFeature|LFQN] (type?='type=' typeValue=CubeLevelPropType)? ';'; |
| |
| CubeMeasure: |
| 'measure' name=TRANSLATABLEID aggregator=CubeAggregatorEnum 'column=' measureCol=[entity::LEntityFeature|LFQN] (notVisible?='notVisible')? ';'; |
| |
| enum CubeAggregatorEnum: |
| SUM='sum'| COUNT='count'| MIN='min'| MAX='max'| AVG='avg'| DSC='distinct-count'; |
| |
| enum CubeLevelPropType: |
| STRING='String' | NUMERIC='Numeric' | INTEGER='Integer' | BOOLEAN='Boolean' | DATE='Date' | TIME='Time' | TIMESTAMP='Timestamp'; |
| |
| enum CubeLevelLevelType: |
| MDLEVEL_TYPE_TIME='Time' | MDLEVEL_TYPE_TIME_YEARS='TimeYears' | MDLEVEL_TYPE_TIME_HALF_YEARS='TimeHalfYears' | MDLEVEL_TYPE_TIME_QUARTERS='TimeQuarters' | MDLEVEL_TYPE_TIME_MONTHS='TimeMonths' | MDLEVEL_TYPE_TIME_WEEKS='TimeWeeks' | |
| MDLEVEL_TYPE_TIME_DAYS='TimeDays' | MDLEVEL_TYPE_TIME_HOURS='TimeHours' | MDLEVEL_TYPE_TIME_MINUTES='TimeMinutes' | MDLEVEL_TYPE_TIME_SECONDS='TimeSeconds'; |
| |
| Import returns LImport: |
| 'import' importedNamespace=CubeQualifiedNameWithWildCard ';'; |
| |
| CubeQualifiedNameWithWildCard: |
| QualifiedName ('.' '*')?; |
| |
| QualifiedName: |
| ValidID (=>'.' ValidID)*; |
| |
| ValidID: |
| ID; |
| |
| LFQN: |
| ID ('.' ID)*; |
| |
| TRANSLATABLEID: |
| ID; |
| |
| TRANSLATABLESTRING: |
| STRING; |