package damp.ekeko.snippets.data;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import clojure.lang.IFn;
import clojure.lang.Keyword;
import clojure.lang.RT;
public class SnippetOperator {
public static IFn FN_OPERATOR_CATEGORIES;
public static IFn FN_OPERATORCATEGORY_DESCRIPTION;
public static IFn FN_OPERATOR_NAME;
public static IFn FN_OPERATOR_ARGUMENT_WITH_PRECONDITION;
public static IFn FN_OPERATOR_DESCRIPTION;
public static IFn FN_OPERATOR_ISTRANSFORM;
public static IFn FN_APPLICABLE_OPERATORS_FOR_TRANSFORMATION;
public static IFn FN_POSSIBLE_NODES_FOR_OPERATOR_ARGUMENT_IN_GROUP;
public static IFn FN_IS_OPERATOR;
public static IFn FN_OPERATOR_BINDINGS_FOR_OPERANDS;
public static IFn FN_OPERATOR_FROM_ID;
public static boolean isOperator(Object value) {
return (Boolean) FN_IS_OPERATOR.invoke(value);
}
public static Object[] getArray(Object clojureList) {
return (Object[]) RT.var("clojure.core", "to-array").invoke(clojureList);
}
public static Object operatorFromId(String id) {
return FN_OPERATOR_FROM_ID.invoke(id);
}
public static void setInputForTransformation(Tree tree, Object selectedNode) {
tree.removeAll();
TreeItem root = new TreeItem(tree, 0);
root.setText("Action");
root.setData("");
Object[] operators = getArray(FN_APPLICABLE_OPERATORS_FOR_TRANSFORMATION.invoke(selectedNode));
for (int j = 0; j < operators.length; j++) {
TreeItem itemOp = new TreeItem(root, 0);
itemOp.setText((String) FN_OPERATOR_NAME.invoke(operators[j]));
itemOp.setData(operators[j]);
}
root.setExpanded(true);
}
public static Object[] getOperands(Object group, Object snippet, Object subjectNode, Object operator) {
return getArray(FN_OPERATOR_BINDINGS_FOR_OPERANDS.invoke(group, snippet, subjectNode, operator));
}
public static String getArgumentWithPrecondition(Object operator) {
if(operator instanceof Keyword)
return "";
return (String) FN_OPERATOR_ARGUMENT_WITH_PRECONDITION.invoke(operator);
}
public static Object[] possibleNodesForArgument(Object snippetgroup, Object operator) {
if(operator instanceof Keyword)
return new String[0];
return getArray(FN_POSSIBLE_NODES_FOR_OPERATOR_ARGUMENT_IN_GROUP.invoke(snippetgroup, operator));
}
public static String getDescription(Object operator) {
String result = (String) FN_OPERATOR_DESCRIPTION.invoke(operator);
if (result == null)
return "";
return result;
}
public static boolean isTransformOperator(Object operator) {
return (Boolean) FN_OPERATOR_ISTRANSFORM.invoke(operator);
}
}