blob: 1b490d9537692ec5d676f74a0f59f6db96d5ccf4 [file] [log] [blame]
/**
*
* 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;