/**
 *                                                                            
 *  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.perspective.PerspectiveDsl with org.eclipse.osbp.xtext.oxtype.OXtype

import "http://osbp.eclipse.org/xtext/perspective/PerspectiveDsl"
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes
import "http://osbp.eclipse.org/xtext/table/TableDSL" as table
import "http://osbp.eclipse.org/xtext/chart/ChartDSL" as chart
import "http://osbp.eclipse.org/xtext/datainterchange/DataDSL" as data
import "http://osbp.eclipse.org/xtext/dialogdsl/DialogDSL" as dialog
import "http://osbp.eclipse.org/xtext/reportdsl/ReportDSL" as report
import "http://osbp.eclipse.org/xtext/organizationdsl/OrganizationDsl" as organization
import "http://osbp.eclipse.org/xtext/topologydsl/TopologyDSL" as topology
import "http://osbp.eclipse.org/xtext/action/ActionDSL" as action
import "http://osbp.eclipse.org/xtext/blip/BlipDSL" as blip
import "http://osbp.eclipse.org/dsl/dto/v1" as dto
import "http://osbp.eclipse.org/dsl/common/types/v1" as types
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

PerspectiveModel:
	importSection=XImportSection?
	packages+=PerspectivePackage*;

PerspectivePackage:
	{PerspectivePackage} 'package' name=QualifiedName
	('{'  (perspectives+=Perspective)* '}')?;

Perspective:
	{Perspective} 'perspective' name=TRANSLATABLEID
	(description?='describedBy' descriptionValue=TRANSLATABLESTRING)?
	('process' process=[blip::Blip] 'usertask' userTask=[blip::BlipUserTask])?
	(('icon' iconURI=STRING)? &
	('accessibility' accessibilityPhrase=STRING)? &
	('toolbar' toolbar=[action::ActionToolbar])?)
	'{' (elements+=PerspectiveElement)*
		('eventManager' eventmanager=PerspectiveEventManager)?	
	 '}'
;

PerspectiveElement:
	PerspectiveSashContainer | PerspectivePartStack | PerspectivePart;

PerspectiveSashContainer:
	{PerspectiveSashContainer} 'sashContainer' elementId=ID
	(('orientation' orientation=SashOrientation)? &
	('selectedElement' selectedElement=[PerspectiveElement])? &
	('spaceVolume' containerData=STRING)? &
	('accessibility' accessibilityPhrase=STRING)?)
	'{' (elements+=PerspectiveElement)* '}';

PerspectivePartStack:
	{PerspectivePartStack} 'partStack' elementId=ID
	(('selectedElement' selectedElement=[PerspectivePart])? &
	('synchronize' synchronize=[PerspectivePartStack])? &
	('spaceVolume' containerData=STRING)? &
	('accessibility' accessibilityPhrase=STRING)?)
	'{' (elements+=PerspectiveElement)* '}';

PerspectivePart:
	{PerspectivePart} 'part' elementId=TRANSLATABLEID
	(('spaceVolume' containerData=STRING)? &
	('accessibility' accessibilityPhrase=STRING)? &
	('iconURI' iconURI=STRING)? &
	('view' view=PerspectiveView)? &
	(isClosable?='isClosable')?);

PerspectiveEventManager:
	{PerspectiveEventManager}
	name=ID 
	'{'(events+=PerspectiveEvent)* '}'
;

PerspectiveEvent:
	{PerspectiveEvent} 
	'targetPart' target=[PerspectivePart]
	'allowedSources' '{' (allowedsources+=[PerspectivePart])* '}'
;

PerspectiveView:
	PerspectiveSelection | PerspectiveTable | PerspectiveChart | PerspectiveReport | PerspectiveOrganization | PerspectiveTopology |
	PerspectiveDialog | PerspectiveGrid | PerspectiveWelcome | PerspectiveSearch | PerspectiveDataInterchange | PerspectiveBPMN | PerspectiveKanban | 
	PerspectiveTitle | PerspectiveDashboard | PerspectiveBrowser;

PerspectiveSelection:
	{PerspectiveSelection} 'select' ref=[table::Table];

PerspectiveTable:
	{PerspectiveTable} 'readOnlyTable' ref=[table::Table];

PerspectiveGrid:
	{PerspectiveGrid} 'editableTable' ref=[table::Table];

PerspectiveChart:
	{PerspectiveChart} 'chart' ref=[chart::Chart];

PerspectiveReport:
	{PerspectiveReport} 'report' ref=[report::Report];

PerspectiveOrganization:
	{PerspectiveOrganization} 'organigram' ref=[organization::Organization];

PerspectiveTopology:
	{PerspectiveTopology} 'topology' ref=[topology::Topology];

PerspectiveDialog:
	{PerspectiveDialog} 'dialog' ref=[dialog::Dialog];

PerspectiveBPMN:
	{PerspectiveBPMN} 'bpmn';

PerspectiveKanban:
	{PerspectiveKanban} 'kanban' 'of' dtoRef=[dto::LDto] 'card' cardRef=[dialog::Dialog] 'dialog' dialogRef=[dialog::Dialog];

PerspectiveWelcome:
	{PerspectiveWelcome} 'welcome';

PerspectiveSearch:
	{PerspectiveSearch} 'search' 'in' dtoRef=[dto::LDto] (('depth' depth=INT)? & ('filterColumns' filterCols=INT)?);

PerspectiveDataInterchange:
	{PerspectiveDataInterchange} 'dataInterchange' ref=[data::DataInterchangeGroup];

PerspectiveTitle:
	{PerspectiveTitle} 'title' htmlName=STRING;

PerspectiveDashboard:
	{PerspectiveDashboard} 'name' name=STRING;

PerspectiveBrowser:
	{PerspectiveBrowser} 'browser' 'url' url=STRING;

TRANSLATABLEID:
	ID;

TRANSLATABLESTRING:
	STRING;

enum SashOrientation:
	HORIZONTAL='horizontal' | VERTICAL='vertical';
	