/**
* 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.Collection;
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.Exceptions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
/**
* add a new element/value to a multi-valued property
*/
@SuppressWarnings("all")
public class Add extends Modification {
public Add() {
}
public Add(final String nouse) {
}
public Add(final Procedure1<Add> initializer) {
initializer.apply(this);
}
public XPath parent;
public Property property;
public XPath crossRef;
public Object newValue;
public Object index;
@Override
protected Object _execute(final Object context, final List<Change> changes) {
Object _xblockexpression = null;
{
Object _query = null;
if (this.crossRef!=null) {
_query=this.crossRef.query(context);
}
final Object resolvedCrossRef = _query;
String _plus = (this.parent.literal + "/");
String _plus_1 = (_plus + this.property.name);
XPath _xPath = new XPath(_plus_1);
final XPath toAddPath = _xPath;
final Object toAddColl = toAddPath.query(context);
Object _elvis = null;
if (resolvedCrossRef != null) {
_elvis = resolvedCrossRef;
} else {
_elvis = ObjectExtensions.<Object>operator_elvis(resolvedCrossRef, this.newValue);
}
final Object toAddValue = _elvis;
boolean _switchResult = false;
boolean _matched = false;
if (!_matched) {
if (toAddColl instanceof Map) {
final Map _map = (Map)toAddColl;
_matched=true;
boolean _xblockexpression_1 = false;
{
Object _put = _map.put(this.index, toAddValue);
/* Objects.equal(_put, null); */
_xblockexpression_1 = (true);
}
_switchResult = _xblockexpression_1;
}
}
if (!_matched) {
if (toAddColl instanceof List) {
final List _list = (List)toAddColl;
boolean _notEquals = (!Objects.equal(this.index, null));
if (_notEquals) {
_matched=true;
boolean _xtrycatchfinallyexpression = false;
try {
boolean _xblockexpression_1 = false;
{
Object _convert = CloudMLCmds.convert("int", this.index, context);
_list.add((((Integer) _convert)).intValue(), toAddValue);
_xblockexpression_1 = (true);
}
_xtrycatchfinallyexpression = _xblockexpression_1;
} catch (final Throwable _t) {
if (_t instanceof Exception) {
final Exception e = (Exception)_t;
_xtrycatchfinallyexpression = false;
} else {
throw Exceptions.sneakyThrow(_t);
}
}
_switchResult = _xtrycatchfinallyexpression;
}
}
}
if (!_matched) {
if (toAddColl instanceof Collection) {
final Collection _collection = (Collection)toAddColl;
_matched=true;
boolean _add = _collection.add(toAddValue);
_switchResult = _add;
}
}
if (!_matched) {
_switchResult = false;
}
final boolean success = _switchResult;
if (success) {
final Procedure1<Added> _function = new Procedure1<Added>() {
public void apply(final Added it) {
Object _query = Add.this.parent.query(context);
it.parent = _query;
it.parent_repr = Add.this.parent.literal;
it.property = Add.this.property.name;
it.addedValue = toAddValue;
Object _xifexpression = null;
boolean _notEquals = (!Objects.equal(Add.this.crossRef, null));
if (_notEquals) {
_xifexpression = Add.this.crossRef;
} else {
String _get = CloudMLCmds.tempObjects.get(toAddValue);
_xifexpression = _get;
}
it.addedValue_repr = _xifexpression;
}
};
Added _added = new Added(_function);
changes.add(_added);
}
_xblockexpression = (null);
}
return _xblockexpression;
}
}