/**
* 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.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import org.cloudml.mrt.cmd.abstracts.Property;
import org.cloudml.mrt.cmd.abstracts.XPath;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.representer.Representer;
@SuppressWarnings("all")
public class CloudMLCmds {
public CloudMLCmds() {
yamlConstructor = new Constructor();
yamlRepresenter = new Representer();
yamlConstructor.addTypeDescription(new TypeDescription(GetSnapshot.class, "!getSnapshot"));
yamlRepresenter.addClassTag(GetSnapshot.class, new org.yaml.snakeyaml.nodes.Tag("!getSnapshot"));
yamlConstructor.addTypeDescription(new TypeDescription(Terminate.class, "!terminate"));
yamlRepresenter.addClassTag(Terminate.class, new org.yaml.snakeyaml.nodes.Tag("!terminate"));
yamlConstructor.addTypeDescription(new TypeDescription(ListenToAdded.class, "!listenToAdded"));
yamlRepresenter.addClassTag(ListenToAdded.class, new org.yaml.snakeyaml.nodes.Tag("!listenToAdded"));
yamlConstructor.addTypeDescription(new TypeDescription(Added.class, "!added"));
yamlRepresenter.addClassTag(Added.class, new org.yaml.snakeyaml.nodes.Tag("!added"));
yamlConstructor.addTypeDescription(new TypeDescription(Remove.class, "!remove"));
yamlRepresenter.addClassTag(Remove.class, new org.yaml.snakeyaml.nodes.Tag("!remove"));
yamlConstructor.addTypeDescription(new TypeDescription(Snapshot.class, "!snapshot"));
yamlRepresenter.addClassTag(Snapshot.class, new org.yaml.snakeyaml.nodes.Tag("!snapshot"));
yamlConstructor.addTypeDescription(new TypeDescription(Ack.class, "!ack"));
yamlRepresenter.addClassTag(Ack.class, new org.yaml.snakeyaml.nodes.Tag("!ack"));
yamlConstructor.addTypeDescription(new TypeDescription(Set.class, "!set"));
yamlRepresenter.addClassTag(Set.class, new org.yaml.snakeyaml.nodes.Tag("!set"));
yamlConstructor.addTypeDescription(new TypeDescription(Extended.class, "!extended"));
yamlRepresenter.addClassTag(Extended.class, new org.yaml.snakeyaml.nodes.Tag("!extended"));
yamlConstructor.addTypeDescription(new TypeDescription(CreateAndAdd.class, "!createAndAdd"));
yamlRepresenter.addClassTag(CreateAndAdd.class, new org.yaml.snakeyaml.nodes.Tag("!createAndAdd"));
yamlConstructor.addTypeDescription(new TypeDescription(Add.class, "!add"));
yamlRepresenter.addClassTag(Add.class, new org.yaml.snakeyaml.nodes.Tag("!add"));
yamlConstructor.addTypeDescription(new TypeDescription(Create.class, "!create"));
yamlRepresenter.addClassTag(Create.class, new org.yaml.snakeyaml.nodes.Tag("!create"));
yamlConstructor.addTypeDescription(new TypeDescription(Provision.class, "!provision"));
yamlRepresenter.addClassTag(Provision.class, new org.yaml.snakeyaml.nodes.Tag("!provision"));
yamlConstructor.addTypeDescription(new TypeDescription(ListenToFlush.class, "!listenToFlush"));
yamlRepresenter.addClassTag(ListenToFlush.class, new org.yaml.snakeyaml.nodes.Tag("!listenToFlush"));
yamlConstructor.addTypeDescription(new TypeDescription(Flush.class, "!flush"));
yamlRepresenter.addClassTag(Flush.class, new org.yaml.snakeyaml.nodes.Tag("!flush"));
yamlConstructor.addTypeDescription(new TypeDescription(Created.class, "!created"));
yamlRepresenter.addClassTag(Created.class, new org.yaml.snakeyaml.nodes.Tag("!created"));
yamlConstructor.addTypeDescription(new TypeDescription(Updated.class, "!updated"));
yamlRepresenter.addClassTag(Updated.class, new org.yaml.snakeyaml.nodes.Tag("!updated"));
yamlConstructor.addTypeDescription(new TypeDescription(Commit.class, "!commit"));
yamlRepresenter.addClassTag(Commit.class, new org.yaml.snakeyaml.nodes.Tag("!commit"));
yamlConstructor.addTypeDescription(new TypeDescription(RequestFlush.class, "!requestFlush"));
yamlRepresenter.addClassTag(RequestFlush.class, new org.yaml.snakeyaml.nodes.Tag("!requestFlush"));
yamlConstructor.addTypeDescription(new TypeDescription(Removed.class, "!removed"));
yamlRepresenter.addClassTag(Removed.class, new org.yaml.snakeyaml.nodes.Tag("!removed"));
yamlConstructor.addTypeDescription(new TypeDescription(ListenToAny.class, "!listenToAny"));
yamlRepresenter.addClassTag(ListenToAny.class, new org.yaml.snakeyaml.nodes.Tag("!listenToAny"));
yamlConstructor.addTypeDescription(new TypeDescription(org.cloudml.mrt.cmd.abstracts.XPath.class, "!xpath"));
yamlRepresenter.addClassTag(org.cloudml.mrt.cmd.abstracts.XPath.class, new org.yaml.snakeyaml.nodes.Tag("!xpath"));
yamlConstructor.addTypeDescription(new TypeDescription(org.cloudml.core.credentials.FileCredentials.class, "!FileCredential"));
yamlRepresenter.addClassTag(org.cloudml.core.credentials.FileCredentials.class, new org.yaml.snakeyaml.nodes.Tag("!FileCredential"));
yaml = new Yaml(yamlConstructor, yamlRepresenter);
}
public final static CloudMLCmds INSTANCE = new CloudMLCmds();
private Constructor yamlConstructor;
private Representer yamlRepresenter;
private Yaml yaml;
private TypeDescription nouse;
public static Map<Object,String> tempObjects = new java.util.HashMap<Object,String>();
public Yaml getYaml() {
return this.yaml;
}
public static Object convert(final String type, final Object v, final Object context) {
Object _switchResult = null;
boolean _matched = false;
if (!_matched) {
if (v instanceof XPath) {
final XPath _xPath = (XPath)v;
_matched=true;
Object _query = _xPath.query(context);
_switchResult = _query;
}
}
if (!_matched) {
if (v instanceof String) {
final String _string = (String)v;
_matched=true;
Object _switchResult_1 = null;
boolean _matched_1 = false;
if (!_matched_1) {
if (Objects.equal(type,"int")) {
_matched_1=true;
int _parseInt = Integer.parseInt(_string);
_switchResult_1 = Integer.valueOf(_parseInt);
}
}
if (!_matched_1) {
if (Objects.equal(type,"double")) {
_matched_1=true;
double _parseDouble = Double.parseDouble(_string);
_switchResult_1 = Double.valueOf(_parseDouble);
}
}
if (!_matched_1) {
if (Objects.equal(type,"boolean")) {
_matched_1=true;
boolean _parseBoolean = Boolean.parseBoolean(_string);
_switchResult_1 = Boolean.valueOf(_parseBoolean);
}
}
if (!_matched_1) {
if (Objects.equal(type,"String")) {
_matched_1=true;
_switchResult_1 = _string;
}
}
if (!_matched_1) {
_switchResult_1 = null;
}
_switchResult = ((Comparable<Object>)_switchResult_1);
}
}
if (!_matched) {
if (v instanceof Object) {
final Object _object = (Object)v;
_matched=true;
_switchResult = _object;
}
}
return _switchResult;
}
public static boolean setProperty(final Object obj, final Property p, final Object value, final Object context) {
try {
boolean _xblockexpression = false;
{
final Class<? extends Object> clazz = obj.getClass();
Field[] _fields = clazz.getFields();
final Function1<Field,Boolean> _function = new Function1<Field,Boolean>() {
public Boolean apply(final Field it) {
String _name = it.getName();
boolean _equals = Objects.equal(_name, p.name);
return Boolean.valueOf(_equals);
}
};
final Field pubField = IterableExtensions.<Field>findFirst(((Iterable<Field>)Conversions.doWrapArray(_fields)), _function);
boolean _notEquals = (!Objects.equal(pubField, null));
if (_notEquals) {
final Object original = pubField.get(obj);
Class<? extends Object> _type = pubField.getType();
String _simpleName = _type.getSimpleName();
final Object newValue = CloudMLCmds.convert(_simpleName, value, context);
boolean _notEquals_1 = (!Objects.equal(original, newValue));
if (_notEquals_1) {
pubField.set(obj, newValue);
return true;
}
} else {
Method[] _methods = clazz.getMethods();
final Function1<Method,Boolean> _function_1 = new Function1<Method,Boolean>() {
public Boolean apply(final Method it) {
String _name = it.getName();
String _firstUpper = StringExtensions.toFirstUpper(p.name);
String _plus = ("set" + _firstUpper);
boolean _equals = Objects.equal(_name, _plus);
return Boolean.valueOf(_equals);
}
};
boolean _exists = IterableExtensions.<Method>exists(((Iterable<Method>)Conversions.doWrapArray(_methods)), _function_1);
if (_exists) {
Method[] _methods_1 = clazz.getMethods();
final Function1<Method,Boolean> _function_2 = new Function1<Method,Boolean>() {
public Boolean apply(final Method it) {
String _name = it.getName();
String _firstUpper = StringExtensions.toFirstUpper(p.name);
String _plus = ("set" + _firstUpper);
boolean _equals = Objects.equal(_name, _plus);
return Boolean.valueOf(_equals);
}
};
final Method setter = IterableExtensions.<Method>findFirst(((Iterable<Method>)Conversions.doWrapArray(_methods_1)), _function_2);
Method[] _methods_2 = clazz.getMethods();
final Function1<Method,Boolean> _function_3 = new Function1<Method,Boolean>() {
public Boolean apply(final Method it) {
String _name = it.getName();
String _firstUpper = StringExtensions.toFirstUpper(p.name);
String _plus = ("get" + _firstUpper);
boolean _equals = Objects.equal(_name, _plus);
return Boolean.valueOf(_equals);
}
};
final Method getter = IterableExtensions.<Method>findFirst(((Iterable<Method>)Conversions.doWrapArray(_methods_2)), _function_3);
Class<? extends Object>[] _parameterTypes = null;
if (setter!=null) {
_parameterTypes=setter.getParameterTypes();
}
Class<? extends Object> _get = _parameterTypes[0];
String _simpleName_1 = _get.getSimpleName();
final Object newValue_1 = CloudMLCmds.convert(_simpleName_1, value, context);
final Object original_1 = getter.invoke(obj);
boolean _notEquals_2 = (!Objects.equal(original_1, newValue_1));
if (_notEquals_2) {
if (setter!=null) {
setter.invoke(obj, newValue_1);
}
return true;
}
} else {
boolean _startsWith = p.name.startsWith("properties/");
if (_startsWith) {
String _trim = p.name.trim();
final String propName = _trim.substring(11);
Method[] _methods_3 = clazz.getMethods();
final Function1<Method,Boolean> _function_4 = new Function1<Method,Boolean>() {
public Boolean apply(final Method it) {
String _name = it.getName();
boolean _equals = Objects.equal(_name, "setProperty");
return Boolean.valueOf(_equals);
}
};
final Method setter_1 = IterableExtensions.<Method>findFirst(((Iterable<Method>)Conversions.doWrapArray(_methods_3)), _function_4);
try {
if (setter_1!=null) {
String _string = value.toString();
setter_1.invoke(obj, propName, _string);
}
return true;
} catch (final Throwable _t) {
if (_t instanceof Exception) {
final Exception e = (Exception)_t;
return false;
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
}
}
_xblockexpression = (false);
}
return _xblockexpression;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
}