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

io.dstream.DStreamInvocationChain Maven / Gradle / Ivy

/**
 * 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 io.dstream;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * A sequence of {@link DStreamInvocation}s
 */
final class DStreamInvocationChain {

	private final List invocations;

	private final Class sourceElementType;
	
	private final String sourceIdentifier;
	
	private final Class streamType;
	
	/**
	 * 
	 * @param sourceElementType
	 * @param sourceIdentifier
	 * @param streamType
	 */
	protected DStreamInvocationChain(Class sourceElementType, String sourceIdentifier, Class streamType){
		this.sourceElementType = sourceElementType;
		this.sourceIdentifier = sourceIdentifier;
		this.invocations = new ArrayList<>();
		this.streamType = streamType;
	}
	
	@Override
	public String toString(){
		return "SOURCE_ID:" + sourceIdentifier + 
				", INVOCATIONS:" + invocations;
	}
	
	/**
	 * 
	 * @return
	 */
	public Class getStreamType() {
		return this.streamType;
	}

	/**
	 * 
	 * @return
	 */
	public List getInvocations() {
		return Collections.unmodifiableList(this.invocations);
	}

	/**
	 * 
	 * @return
	 */
	public Class getSourceElementType() {
		return this.sourceElementType;
	}

	/**
	 * 
	 * @return
	 */
	public String getSourceIdentifier() {
		return this.sourceIdentifier;
	}
	
	/**
	 * 
	 * @param invocation
	 */
	protected void addInvocation(DStreamInvocation invocation){
		this.invocations.add(invocation);
	}
	
	/**
	 * 
	 * @param invocation
	 */
	protected void addAllInvocations(List invocations){
		this.invocations.addAll(invocations);
	}
	
	/**
	 * 
	 * @return
	 */
	protected DStreamInvocation getLastInvocation(){
		if (this.invocations.size() == 0){
			return null;
		}
		return this.invocations.get(this.invocations.size()-1);
	}
	
	/**
	 * 
	 */
	static class DStreamInvocation {
		
		private final Method method;

		private final Object[] arguments;
		
		private Object supplementaryOperation;

		/**
		 * Constructs this invocation.
		 * 
		 * @param method - {@link Method} invoked on {@link DStream} operation.
		 * @param arguments - arguments of the {@link Method} invoked on {@link DStream} operation.
		 */
		DStreamInvocation(Method method, Object... arguments){
			this.method = method;
			this.arguments = arguments;
		}
		
		/**
		 * Returns {@link Method} invoked on {@link DStream} operation.
		 * @return {@link Method} invoked on {@link DStream} operation.
		 */
		public Method getMethod() {
			return method;
		}

		/**
		 * Returns arguments of the {@link Method} invoked on {@link DStream} operation.
		 * @return arguments of the {@link Method} invoked on {@link DStream} operation.
		 */
		public Object[] getArguments() {
			return arguments;
		}
		
		/**
		 * 
		 * @return
		 */
		@SuppressWarnings("unchecked")
		public  T getSupplementaryOperation(){
			return (T) this.supplementaryOperation;
		}
		
		/**
		 * 
		 * @param operation
		 */
		protected void setSupplementaryOperation(Object supplementaryOperation) {
			this.supplementaryOperation = supplementaryOperation;
		}
		
		/**
		 * 
		 */
		@Override
		public String toString(){
			return "{OP:" + this.method.getName() + ", ARG:" + 
					Arrays.asList(this.arguments) + ", SUP:" + this.supplementaryOperation + "}";
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy