/** * Copyright 2011 Nube Technologies * * 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 co.nubetech.hiho.merge; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.BooleanWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; public class HihoValue<V extends Writable> implements Writable { protected BooleanWritable isOld; protected V val; private Text valClass; /*@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((isOld == null) ? 0 : isOld.hashCode()); result = prime * result + ((val == null) ? 0 : val.hashCode()); result = prime * result + ((valClass == null) ? 0 : valClass.hashCode()); return result; }*/ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; HihoValue other = (HihoValue) obj; if (isOld == null) { if (other.isOld != null) return false; } else if (!isOld.equals(other.isOld)) return false; if (val == null) { if (other.val != null) return false; } else if (!val.equals(other.val)) return false; if (valClass == null) { if (other.valClass != null) return false; } else if (!valClass.equals(other.valClass)) return false; return true; } public V getVal() { return val; } public Boolean getIsOld() { return isOld.get(); } public void setVal(V val) { this.val = val; this.valClass = new Text(val.getClass().getName()); } public void setIsOld(Boolean isOld) { this.isOld = new BooleanWritable(isOld); } @Override public void readFields(DataInput in) throws IOException { isOld = new BooleanWritable(); isOld.readFields(in); valClass = new Text(); valClass.readFields(in); try { val = (V) Class.forName(valClass.toString()).newInstance(); } catch (Exception e) { e.printStackTrace(); } val.readFields(in); } @Override public void write(DataOutput out) throws IOException { isOld.write(out); valClass.write(out); val.write(out); } }