/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
package org.cloudml.mrt.cmd.gen;
import java.util.List;
import java.util.Map;
import org.cloudml.mrt.cmd.abstracts.Change;
import org.cloudml.mrt.cmd.abstracts.Modification;
import org.cloudml.mrt.cmd.abstracts.Property;
import org.cloudml.mrt.cmd.abstracts.XPath;
import org.eclipse.xtext.xbase.lib.Functions.Function2;
import org.eclipse.xtext.xbase.lib.MapExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure2;
/**
* Give new values to the fields
* - !set
* parent : nodeTypes/node1
* keyValues :
* minCore : 4
* minDisk : 1
*
* Not that if you need to set a cross reference, you need to add a tag !xpath
* (TODO: need to get rid of this later)
* e.g.,
* keyValues:
* minRam : 1024
* provider : xpath /providers[name='provider1']
*/
@SuppressWarnings("all")
public class Set extends Modification {
public Set() {
}
public Set(final String nouse) {
}
public Set(final Procedure1<Set> initializer) {
initializer.apply(this);
}
public XPath parent;
public Map<Property,Object> keyValues;
@Override
protected Object _execute(final Object context, final List<Change> changes) {
Object _xblockexpression = null;
{
final Object par = this.parent.query(context);
final Function2<Property,Object,Boolean> _function = new Function2<Property,Object,Boolean>() {
public Boolean apply(final Property property, final Object value) {
boolean _setProperty = CloudMLCmds.setProperty(par, property, value, context);
return Boolean.valueOf(_setProperty);
}
};
Map<Property,Object> _filter = MapExtensions.<Property, Object>filter(this.keyValues, _function);
final Procedure2<Property,Object> _function_1 = new Procedure2<Property,Object>() {
public void apply(final Property p, final Object v) {
final Procedure1<Updated> _function = new Procedure1<Updated>() {
public void apply(final Updated it) {
it.parent = par;
it.parent_repr = Set.this.parent.literal;
it.property = p.name;
it.newValue = v;
}
};
Updated _updated = new Updated(_function);
changes.add(_updated);
}
};
MapExtensions.<Property, Object>forEach(_filter, _function_1);
_xblockexpression = (null);
}
return _xblockexpression;
}
}