blob: 23636a24a78482fef0d2f5dbd881754471dbeebf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.pig.scripting.groovy;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import org.apache.pig.AlgebraicEvalFunc;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.DataByteArray;
import org.apache.pig.data.Tuple;
public abstract class GroovyAlgebraicEvalFunc<T> extends AlgebraicEvalFunc<T> {
public GroovyAlgebraicEvalFunc() {
}
public GroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public abstract String getFinal();
@Override
public String getInitial() {
return Initial.class.getName();
}
@Override
public String getIntermed() {
return Intermed.class.getName();
}
public static abstract class AlgebraicFunctionWrapper<T> extends GroovyEvalFunc<T> {
public AlgebraicFunctionWrapper() {
}
public AlgebraicFunctionWrapper(String path, String namespace, String methodName) throws IOException {
super(path, namespace, methodName);
}
}
public static class Initial extends AlgebraicFunctionWrapper<Tuple> {
public Initial() {
}
public Initial(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, initialMethod);
}
}
public static class Intermed extends AlgebraicFunctionWrapper<Tuple> {
public Intermed() {
}
public Intermed(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, intermedMethod);
}
}
public static class Final<T> extends AlgebraicFunctionWrapper<T> {
public Final() {
}
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, finalMethod);
}
}
/**
* Unlike EvalFuncs and Accumulators, the type must be known at compile time
* (ie it
* can't return Object), as Pig inspects the type and ensures that it is
* valid. This
* is why class specific shells are provided here.
*/
public static class DataBagGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<DataBag> {
public DataBagGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<DataBag> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class TupleGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Tuple> {
public TupleGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Tuple> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class ChararrayGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<String> {
public ChararrayGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<String> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class DataByteArrayGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<DataByteArray> {
public DataByteArrayGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<DataByteArray> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class DateTimeGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<org.joda.time.DateTime> {
public DateTimeGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<org.joda.time.DateTime> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class DoubleGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Double> {
public DoubleGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Double> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class FloatGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Float> {
public FloatGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Float> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class IntegerGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Integer> {
public IntegerGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Integer> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class LongGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Long> {
public LongGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Long> {
public Final() {
}
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class MapGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Map<String, ?>> {
public MapGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Map<String, ?>> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class BooleanGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<Boolean> {
public BooleanGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<Boolean> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class BigIntegerGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<BigInteger> {
public BigIntegerGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<BigInteger> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
public static class BigDecimalGroovyAlgebraicEvalFunc extends GroovyAlgebraicEvalFunc<BigDecimal> {
public BigDecimalGroovyAlgebraicEvalFunc(String path, String namespace, String methodName, String initialMethod,
String intermedMethod, String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
@Override
public String getFinal() {
return Final.class.getName();
}
public static class Final extends GroovyAlgebraicEvalFunc.Final<BigDecimal> {
public Final(String path, String namespace, String methodName, String initialMethod, String intermedMethod,
String finalMethod) throws IOException {
super(path, namespace, methodName, initialMethod, intermedMethod, finalMethod);
}
}
}
}