All Downloads are FREE. Search and download functionalities are using the official Maven repository.

rx.functions.Actions Maven / Gradle / Ivy

There is a newer version: 1.3.8
Show newest version
/**
 * Copyright 2014 Netflix, Inc.
 *
 * 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 rx.functions;

import rx.exceptions.OnErrorNotImplementedException;

/**
 * Utility class for the Action interfaces.
 */
public final class Actions {
    @SuppressWarnings("rawtypes")
    private static final EmptyAction EMPTY_ACTION = new EmptyAction();

    private Actions() {
        throw new IllegalStateException("No instances!");
    }

    @SuppressWarnings("unchecked")
    public static  EmptyAction empty() {
        return EMPTY_ACTION;
    }

    static final class EmptyAction implements
            Action0,
            Action1,
            Action2,
            Action3,
            Action4,
            Action5,
            Action6,
            Action7,
            Action8,
            Action9,
            ActionN {

        @Override
        public void call() {
            // deliberately no op
        }

        @Override
        public void call(T0 t1) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7, T7 t8) {
            // deliberately no op
        }

        @Override
        public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7, T7 t8, T8 t9) {
            // deliberately no op
        }

        @Override
        public void call(Object... args) {
            // deliberately no op
        }
    }

    /**
     * Converts an {@link Action0} to a function that calls the action and returns {@code null}.
     *
     * @param action
     *            the {@link Action0} to convert
     * @return a {@link Func0} that calls {@code action} and returns {@code null}
     */
    public static Func0 toFunc(final Action0 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action1} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param action
     *            the {@link Action1} to convert
     * @return a {@link Func1} that calls {@code action} and returns {@code null}
     */
    public static  Func1 toFunc(final Action1 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action2} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param action
     *            the {@link Action2} to convert
     * @return a {@link Func2} that calls {@code action} and returns {@code null}
     */
    public static  Func2 toFunc(final Action2 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action3} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param action
     *            the {@link Action3} to convert
     * @return a {@link Func3} that calls {@code action} and returns {@code null}
     */
    public static  Func3 toFunc(final Action3 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action4} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param action
     *            the {@link Action4} to convert
     * @return a {@link Func4} that calls {@code action} and returns {@code null}
     */
    public static  Func4 toFunc(final Action4 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action5} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param action
     *            the {@link Action5} to convert
     * @return a {@link Func5} that calls {@code action} and returns {@code null}
     */
    public static  Func5 toFunc(
            final Action5 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action6} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param action
     *            the {@link Action6} to convert
     * @return a {@link Func6} that calls {@code action} and returns {@code null}
     */
    public static  Func6 toFunc(
            final Action6 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action7} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param action
     *            the {@link Action7} to convert
     * @return a {@link Func7} that calls {@code action} and returns {@code null}
     */
    public static  Func7 toFunc(
            final Action7 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action8} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param  the eighth argument type
     * @param action
     *            the {@link Action8} to convert
     * @return a {@link Func8} that calls {@code action} and returns {@code null}
     */
    public static  Func8 toFunc(
            final Action8 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action9} to a function that calls the action and returns {@code null}.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param  the eighth argument type
     * @param  the ninth argument type
     * @param action
     *            the {@link Action9} to convert
     * @return a {@link Func9} that calls {@code action} and returns {@code null}
     */
    public static  Func9 toFunc(
            final Action9 action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link ActionN} to a function that calls the action and returns {@code null}.
     *
     * @param action
     *            the {@link ActionN} to convert
     * @return a {@link FuncN} that calls {@code action} and returns {@code null}
     */
    public static FuncN toFunc(
            final ActionN action) {
        return toFunc(action, (Void) null);
    }

    /**
     * Converts an {@link Action0} to a function that calls the action and returns a specified value.
     *
     * @param  the result type
     * @param action
     *            the {@link Action0} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func0} that calls {@code action} and returns {@code result}
     */
    public static  Func0 toFunc(final Action0 action, final R result) {
        return new Func0() {
            @Override
            public R call() {
                action.call();
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action1} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the result type
     * @param action
     *            the {@link Action1} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func1} that calls {@code action} and returns {@code result}
     */
    public static  Func1 toFunc(final Action1 action, final R result) {
        return new Func1() {
            @Override
            public R call(T1 t1) {
                action.call(t1);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action2} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the result type
     * @param action
     *            the {@link Action2} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func2} that calls {@code action} and returns {@code result}
     */
    public static  Func2 toFunc(final Action2 action, final R result) {
        return new Func2() {
            @Override
            public R call(T1 t1, T2 t2) {
                action.call(t1, t2);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action3} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the result type
     * @param action
     *            the {@link Action3} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func3} that calls {@code action} and returns {@code result}
     */
    public static  Func3 toFunc(final Action3 action, final R result) {
        return new Func3() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3) {
                action.call(t1, t2, t3);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action4} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the result type
     * @param action
     *            the {@link Action4} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func4} that calls {@code action} and returns {@code result}
     */
    public static  Func4 toFunc(final Action4 action, final R result) {
        return new Func4() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4) {
                action.call(t1, t2, t3, t4);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action5} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the result type
     * @param action
     *            the {@link Action5} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func5} that calls {@code action} and returns {@code result}
     */
    public static  Func5 toFunc(
            final Action5 action, final R result) {
        return new Func5() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
                action.call(t1, t2, t3, t4, t5);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action6} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the result type
     * @param action
     *            the {@link Action6} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func6} that calls {@code action} and returns {@code result}
     */
    public static  Func6 toFunc(
            final Action6 action, final R result) {
        return new Func6() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) {
                action.call(t1, t2, t3, t4, t5, t6);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action7} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param  the result type
     * @param action
     *            the {@link Action7} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func7} that calls {@code action} and returns {@code result}
     */
    public static  Func7 toFunc(
            final Action7 action, final R result) {
        return new Func7() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) {
                action.call(t1, t2, t3, t4, t5, t6, t7);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action8} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param  the eighth argument type
     * @param  the result type
     * @param action
     *            the {@link Action8} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func8} that calls {@code action} and returns {@code result}
     */
    public static  Func8 toFunc(
            final Action8 action, final R result) {
        return new Func8() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) {
                action.call(t1, t2, t3, t4, t5, t6, t7, t8);
                return result;
            }
        };
    }

    /**
     * Converts an {@link Action9} to a function that calls the action and returns a specified value.
     *
     * @param  the first argument type
     * @param  the second argument type
     * @param  the third argument type
     * @param  the fourth argument type
     * @param  the fifth argument type
     * @param  the sixth argument type
     * @param  the seventh argument type
     * @param  the eighth argument type
     * @param  the ninth argument type
     * @param  the result type
     * @param action
     *            the {@link Action9} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link Func9} that calls {@code action} and returns {@code result}
     */
    public static  Func9 toFunc(
            final Action9 action, final R result) {
        return new Func9() {
            @Override
            public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) {
                action.call(t1, t2, t3, t4, t5, t6, t7, t8, t9);
                return result;
            }
        };
    }

    /**
     * Converts an {@link ActionN} to a function that calls the action and returns a specified value.
     *
     * @param  the result type
     * @param action
     *            the {@link ActionN} to convert
     * @param result
     *            the value to return from the function call
     * @return a {@link FuncN} that calls {@code action} and returns {@code result}
     */
    public static  FuncN toFunc(
            final ActionN action, final R result) {
        return new FuncN() {
            @Override
            public R call(Object... args) {
                action.call(args);
                return result;
            }
        };
    }

    /**
     * Wraps an Action0 instance into an Action1 instance where the latter calls
     * the former.
     * @param  the first argument type
     * @param action the action to call
     * @return the new Action1 instance
     */
    public static  Action1 toAction1(Action0 action) {
        return new Action1CallsAction0(action);
    }

    static final class Action1CallsAction0 implements Action1 {
        final Action0 action;

        public Action1CallsAction0(Action0 action) {
            this.action = action;
        }

        @Override
        public void call(T t) {
            action.call();
        }
    }

    enum NotImplemented implements Action1 {
        INSTANCE;
        @Override
        public void call(Throwable t) {
            throw new OnErrorNotImplementedException(t);
        }
    }

    /**
     * Returns an action which throws OnErrorNotImplementedException.
     * @return the the shared action
     */
    public static Action1 errorNotImplemented() {
        return NotImplemented.INSTANCE;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy