/* * 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.ignite.compute.gridify.aop; import org.apache.ignite.compute.gridify.GridifyArgument; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; /** * Convenience adapter for {@link org.apache.ignite.compute.gridify.GridifyArgument} interface. This adapter * should be used in custom grid job implementations. * <p> * See {@link org.apache.ignite.compute.gridify.Gridify} documentation for more information about execution of * {@code gridified} methods. * @see org.apache.ignite.compute.gridify.Gridify */ public class GridifyArgumentAdapter implements GridifyArgument { /** */ private static final long serialVersionUID = 0L; /** Method class. */ private Class<?> cls; /** Method name. */ private String mtdName; /** Method parameter types. */ private Class<?>[] types; /** Method parameters. */ private Object[] params; /** Method execution state. */ private Object target; /** * Empty constructor. */ public GridifyArgumentAdapter() { // No-op. } /** * Copy constructor. * * @param orig Copy to create this instance from. * @param newParams Optional array of new parameters to override the ondes from {@code orig}. */ public GridifyArgumentAdapter(GridifyArgument orig, Object... newParams) { A.notNull(orig, "orig"); cls = orig.getMethodClass(); mtdName = orig.getMethodName(); target = orig.getTarget(); types = new Class[orig.getMethodParameterTypes().length]; params = new Object[orig.getMethodParameters().length]; System.arraycopy(orig.getMethodParameters(), 0, params, 0, params.length); System.arraycopy(orig.getMethodParameterTypes(), 0, types, 0, types.length); // Override parameters, if any. if (newParams.length > 0) setMethodParameters(newParams); } /** * Creates a fully initialized gridify argument. * * @param cls Method class. * @param mtdName Method name. * @param types Method parameter types. * @param params Method parameters. * @param target Target object. */ public GridifyArgumentAdapter(Class<?> cls, String mtdName, Class<?>[] types, Object[] params, Object target) { this.cls = cls; this.mtdName = mtdName; this.types = types; this.params = params; this.target = target; } /** {@inheritDoc} */ @Override public Class<?> getMethodClass() { return cls; } /** {@inheritDoc} */ @Override public String getMethodName() { return mtdName; } /** {@inheritDoc} */ @Override public Class<?>[] getMethodParameterTypes() { return types; } /** {@inheritDoc} */ @Override public Object[] getMethodParameters() { return params; } /** * Sets method class. * * @param cls Method class. */ public void setMethodClass(Class<?> cls) { this.cls = cls; } /** * Sets method name. * * @param mtdName Method name. */ public void setMethodName(String mtdName) { this.mtdName = mtdName; } /** * Sets method parameter types. * * @param types Method parameter types. */ public void setMethodParameterTypes(Class<?>... types) { this.types = types; } /** * Updates parameter type. * * @param type Parameter type to set. * @param index Index of the parameter. */ public void updateMethodParameterType(Class<?> type, int index) { types[index] = type; } /** * Sets method parameters. * * @param params Method parameters. */ public void setMethodParameters(Object... params) { this.params = params; } /** * Updates method parameter. * * @param param Method parameter value to set. * @param index Parameter's index. */ public void updateMethodParameter(Object param, int index) { params[index] = param; } /** * Sets target object for method execution. * * @param target Target object for method execution. */ public void setTarget(Object target) { this.target = target; } /** * Gets target object for method execution. * * @return Target object for method execution. */ @Override public Object getTarget() { return target; } /** {@inheritDoc} */ @Override public String toString() { return S.toString(GridifyArgumentAdapter.class, this); } }