| --@atlcompiler atl2006 |
| |
| --/******************************************************************************* |
| -- * Copyright (c) 2009 Ecole des Mines de Nantes. |
| |
| -- * 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: |
| -- * Kelly Garces - initial implementation and/or initial documentation |
| -- *******************************************************************************/ |
| |
| module AML2PropertiesFile; -- Module Template |
| create OUT : Properties from IN : Properties, IN1 : AML; |
| uses AMLLibrary; |
| |
| helper def : root : Properties!PropertiesFile = OclUndefined; |
| |
| helper def : properties : Map(String, Properties!Property) = |
| Properties!Property.allInstances() |
| ->iterate(e ; map : Map(String, Properties!Property) = Map{} | |
| map.including(e.name, e) |
| ); |
| |
| helper context String def : notExists : Boolean = |
| thisModule.properties.get(self).oclIsUndefined(); |
| |
| rule ModelsFlowBlock2PropertyFile { |
| from |
| s : AML!ModelsBlock |
| to |
| t : Properties!PropertiesFile ( |
| name <- s.matcher.name, |
| properties <- s.models |
| ->union(s.matcher.mappedModels->collect(c | c.im)) |
| ->flatten() |
| ->select(e | e.name.notExists) |
| ->collect(e | thisModule.Model2Property(e)) |
| |
| ) |
| |
| do { |
| thisModule.root <- t; |
| } |
| |
| } |
| |
| lazy rule Model2Property { |
| from |
| s : AML!Model |
| to |
| t : Properties!Property ( |
| name <- s.name, |
| value <- OclUndefined |
| ) |
| |
| } |
| |
| rule ReferenceModel2Property { |
| from |
| m : AML!Matcher, |
| s : AML!ReferenceModel ( |
| s.isLoadable(m) and |
| s.name.notExists |
| ) |
| to |
| t : Properties!Property ( |
| name <- s.name, |
| value <- OclUndefined, |
| file <- thisModule.root |
| ) |
| } |
| |
| rule Property2Property { |
| from |
| s : Properties!Property |
| to |
| t : Properties!Property ( |
| name <- s.name, |
| value <- s.value, |
| file <- thisModule.root |
| ) |
| |
| } |