/** * 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 com.google.common.base.Objects; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.cloudml.mrt.cmd.abstracts.Change; import org.cloudml.mrt.cmd.abstracts.Instruction; import org.cloudml.mrt.cmd.abstracts.XPath; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.MapExtensions; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; import org.eclipse.xtext.xbase.lib.Procedures.Procedure2; /** * --- * !getSnapshot * path : /nodeInstances * codec : plain-text #This is optional * map: name #optional */ @SuppressWarnings("all") public class GetSnapshot extends Instruction { public XPath path; public String codec; public XPath map; public Map<String,XPath> multimaps; public GetSnapshot() { } public GetSnapshot(final String nouse) { } public GetSnapshot(final Procedure1<GetSnapshot> initializer) { initializer.apply(this); } @Override protected Object _execute(final Object context, final List<Change> changes) { Object _xifexpression = null; boolean _and = false; boolean _equals = Objects.equal(this.map, null); if (!_equals) { _and = false; } else { boolean _or = false; boolean _equals_1 = Objects.equal(this.multimaps, null); if (_equals_1) { _or = true; } else { boolean _isEmpty = this.multimaps.isEmpty(); _or = (_equals_1 || _isEmpty); } _and = (_equals && _or); } if (_and) { Object _xifexpression_1 = null; boolean _equals_2 = Objects.equal(this.codec, "plain-text"); if (_equals_2) { Object _query = this.path.query(context); String _string = _query.toString(); _xifexpression_1 = _string; } else { Object _query_1 = this.path.query(context); _xifexpression_1 = _query_1; } _xifexpression = _xifexpression_1; } else { List<? extends Object> _xifexpression_2 = null; boolean _and_1 = false; boolean _notEquals = (!Objects.equal(this.map, null)); if (!_notEquals) { _and_1 = false; } else { boolean _equals_3 = Objects.equal(this.map.literal, "key"); _and_1 = (_notEquals && _equals_3); } if (_and_1) { ArrayList<Map> _xblockexpression = null; { final ArrayList<Map> lst = CollectionLiterals.<Map>newArrayList(); Object _query_2 = this.path.query(context); Set _keySet = ((Map) _query_2).keySet(); lst.addAll(_keySet); _xblockexpression = (lst); } _xifexpression_2 = _xblockexpression; } else { List<? extends Object> _xblockexpression_1 = null; { Collection _xifexpression_3 = null; Object _query_2 = this.path.query(context); if ((_query_2 instanceof Map)) { Object _query_3 = this.path.query(context); Collection _values = ((Map) _query_3).values(); _xifexpression_3 = _values; } else { ArrayList<Object> _xblockexpression_2 = null; { final ArrayList<Object> x = CollectionLiterals.<Object>newArrayList(); final Iterator iterator = this.path.iterate(context); boolean _hasNext = iterator.hasNext(); boolean _while = _hasNext; while (_while) { Object _next = iterator.next(); x.add(_next); boolean _hasNext_1 = iterator.hasNext(); _while = _hasNext_1; } _xblockexpression_2 = (x); } _xifexpression_3 = _xblockexpression_2; } final Collection oriColl = _xifexpression_3; List<? extends Object> _xifexpression_4 = null; boolean _and_2 = false; boolean _notEquals_1 = (!Objects.equal(this.multimaps, null)); if (!_notEquals_1) { _and_2 = false; } else { boolean _isEmpty_1 = this.multimaps.isEmpty(); boolean _not = (!_isEmpty_1); _and_2 = (_notEquals_1 && _not); } if (_and_2) { ArrayList<Map> _xblockexpression_3 = null; { final ArrayList<Map> lstmap = CollectionLiterals.<Map>newArrayList(); for (final Object ori : oriColl) { { final HashMap<String,Object> m = CollectionLiterals.<String, Object>newHashMap(); lstmap.add(m); final Procedure2<String,XPath> _function = new Procedure2<String,XPath>() { public void apply(final String k, final XPath v) { Object _query = v.query(ori); m.put(k, _query); } }; MapExtensions.<String, XPath>forEach(this.multimaps, _function); } } _xblockexpression_3 = (lstmap); } _xifexpression_4 = _xblockexpression_3; } else { List<Object> _xifexpression_5 = null; boolean _notEquals_2 = (!Objects.equal(this.map, null)); if (_notEquals_2) { final Function1<Object,Object> _function = new Function1<Object,Object>() { public Object apply(final Object ori) { Object _query = GetSnapshot.this.map.query(ori); return _query; } }; Iterable<Object> _map = IterableExtensions.<Object, Object>map(oriColl, _function); List<Object> _list = IterableExtensions.<Object>toList(_map); _xifexpression_5 = _list; } _xifexpression_4 = _xifexpression_5; } _xblockexpression_1 = (_xifexpression_4); } _xifexpression_2 = _xblockexpression_1; } _xifexpression = _xifexpression_2; } return _xifexpression; } }