/*****************************************************************************
 * Copyright (c) 2017 CEA LIST and others.
 *
 * 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:
 *   Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation
 *****************************************************************************/

import org.eclipse.papyrus.uml.m2m.qvto.common.blackboxes.ecore.EcoreHelper;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLBlockDefinitionDiagram;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLInternalBlockDiagram;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLParametricDiagram;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLRequirementDiagram;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLAllocationTable;
import org.eclipse.papyrus.interoperability.sysml14.sysml.SysMLRequirementTable;

modeltype notation "strict" uses 'http://www.eclipse.org/gmf/runtime/1.0.2/notation';
modeltype UML "strict" uses 'http://www.eclipse.org/uml2/5.0.0/UML';
modeltype ecore "strict" uses 'http://www.eclipse.org/emf/2002/Ecore';
modeltype SysML11 "strict" uses 'http://www.eclipse.org/papyrus/0.7.0/SysML';
modeltype SysML14 "strict" uses 'http://www.eclipse.org/papyrus/sysml/1.4/SysML';
modeltype nattable "strict" uses 'http://www.eclipse.org/papyrus/nattable/model';


transformation SysMLNotation(in umlFile : UML, in inS14Profile : SysML14, in requirementNatTableS11 : nattable, in allocationNatTableS11 : nattable, in requirementNatTableS14 : nattable, in allocationNatTableS14 : nattable, inout notationFile : notation);

main() {
	notationFile.objects()[notation::Diagram]->map filterSysMLDiagrams();
	notationFile.objects()[nattable::Table]->map filterSysMLTables();
}

mapping notation::Diagram::filterSysMLDiagrams() : notation::Diagram disjuncts
	notation::Diagram::fromSysML11BlockDefinitionDiagram,
	notation::Diagram::fromSysML11InternalBlockDiagram,
	notation::Diagram::fromSysML11ParametricDiagram,
	notation::Diagram::fromSysML11RequirementDiagram
{}

mapping nattable::Table::filterSysMLTables() : nattable::Table disjuncts
	nattable::Table::fromSysML11RequirementTable,
	nattable::Table::fromSysML11AllocationTable
{}