/**
 *                                                                            
 *  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 2.0        
 *  which accompanies this distribution, and is available at                  
 *  https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 *  SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */

grammar org.eclipse.osbp.xtext.cubedsl.CubeDSL with org.eclipse.osbp.xtext.oxtype.OXtype

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} 
	importSection=XImportSection?
	pckg=CubePackage;

CubePackage:
	'package' name=QualifiedName ('{'  (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] (nameColumn?='nameColumn' levelNameColValue=[entity::LEntityFeature|LFQN])? (captionColumn?='captionColumn' levelCaptionColValue=[entity::LEntityFeature|LFQN])? (ordinalColumn?='ordinalColumn' levelOrdinalColValue=[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';

LFQN:
	ID ('.' ID)*;
	
TRANSLATABLEID:
	ID;
	
TRANSLATABLESTRING:
	STRING;
