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

eu.stratosphere.pact.runtime.plugable.DeserializationDelegate Maven / Gradle / Ivy

There is a newer version: 0.5.2-hadoop2
Show newest version
/***********************************************************************************************************************
 * Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
 *
 * 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 eu.stratosphere.pact.runtime.plugable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

import eu.stratosphere.api.common.typeutils.TypeSerializer;
import eu.stratosphere.core.io.IOReadableWritable;
import eu.stratosphere.core.memory.DataInputView;


public class DeserializationDelegate implements IOReadableWritable {
	
	private T instance;
	
	private final TypeSerializer serializer;
	
	private final InputViewWrapper wrapper;
	
	
	public DeserializationDelegate(TypeSerializer serializer) {
		this.serializer = serializer;
		this.wrapper = new InputViewWrapper();
	}
	
	public void setInstance(T instance) {
		this.instance = instance;
	}

	public T getInstance() {
		return instance;
	}

	@Override
	public void write(DataOutput out) throws IOException {
		throw new IllegalStateException("Serialization method called on DeserializationDelegate.");
	}

	@Override
	public void read(DataInput in) throws IOException {
		this.wrapper.setDelegate(in);
		this.instance = this.serializer.deserialize(this.instance, this.wrapper);
	}
	
	// --------------------------------------------------------------------------------------------
	
	/**
	 * Utility class that wraps a {@link DataInput} as a {@link DataInputView}.
	 */
	private static final class InputViewWrapper implements DataInputView {
		
		private DataInput delegate;
		
		public void setDelegate(DataInput delegate) {
			this.delegate = delegate;
		}

		@Override
		public void readFully(byte[] b) throws IOException {
			this.delegate.readFully(b);
		}

		@Override
		public void readFully(byte[] b, int off, int len) throws IOException {
			this.delegate.readFully(b, off, len);
		}

		@Override
		public int skipBytes(int n) throws IOException {
			return this.delegate.skipBytes(n);
		}

		@Override
		public boolean readBoolean() throws IOException {
			return this.delegate.readBoolean();
		}

		@Override
		public byte readByte() throws IOException {
			return this.delegate.readByte();
		}

		@Override
		public int readUnsignedByte() throws IOException {
			return this.delegate.readUnsignedByte();
		}

		@Override
		public short readShort() throws IOException {
			return this.delegate.readShort();
		}

		@Override
		public int readUnsignedShort() throws IOException {
			return this.delegate.readUnsignedShort();
		}

		@Override
		public char readChar() throws IOException {
			return this.delegate.readChar();
		}

		@Override
		public int readInt() throws IOException {
			return this.delegate.readInt();
		}

		@Override
		public long readLong() throws IOException {
			return this.delegate.readLong();
		}

		@Override
		public float readFloat() throws IOException {
			return this.delegate.readFloat();
		}

		@Override
		public double readDouble() throws IOException {
			return this.delegate.readDouble();
		}

		@Override
		public String readLine() throws IOException {
			return this.delegate.readLine();
		}

		@Override
		public String readUTF() throws IOException {
			return this.delegate.readUTF();
		}

		@Override
		public void skipBytesToRead(int numBytes) throws IOException {
			for (int i = 0; i < numBytes; i++) {
				this.delegate.readByte();
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy