/*
*
* * Copyright 2010-2014 Orient Technologies LTD (info(at)orientechnologies.com)
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*/
package com.orientechnologies.orient.etl.block;
import com.orientechnologies.orient.core.command.OCommandContext;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.filter.OSQLFilter;
import com.orientechnologies.orient.etl.OETLProcessor;
public class OLetBlock extends OAbstractBlock {
protected String name;
protected OSQLFilter expression;
protected Object value;
@Override
public ODocument getConfiguration() {
return new ODocument().fromJSON("{parameters:[{name:{optional:false,description:'Variable name'}},"
+ "{value:{optional:true,description:'Variable value'}}"
+ "{expression:{optional:true,description:'Expression to evaluate'}}" + "]}");
}
@Override
public void configure(OETLProcessor iProcessor, final ODocument iConfiguration, final OCommandContext iContext) {
super.configure(iProcessor, iConfiguration, iContext);
name = iConfiguration.field("name");
if (iConfiguration.containsField("value")) {
value = iConfiguration.field("value");
} else
expression = new OSQLFilter((String) iConfiguration.field("expression"), iContext, null);
if (value == null && expression == null)
throw new IllegalArgumentException("'value' or 'expression' parameter are mandatory in Let Transformer");
}
@Override
public String getName() {
return "let";
}
@Override
public Object executeBlock() {
final Object v = expression != null ? expression.evaluate(null, null, context) : resolve(value);
context.setVariable(name, v);
return v;
}
}