package hu.sztaki.ilab.longneck.process.block; import hu.sztaki.ilab.longneck.process.AbstractSourceInfoContainer; import java.util.ArrayList; import java.util.List; /** * Base class for atomic blocks. * * @author Molnar Peter <molnarp@sztaki.mta.hu> */ public abstract class AbstractAtomicBlock extends AbstractSourceInfoContainer implements AtomicBlock, Cloneable { /** The list of field names the transformation is applied to. */ protected List<String> applyTo; @Override public void setApplyTo(List<String> fieldNames) { this.applyTo = fieldNames; } public List<String> getApplyTo() { return applyTo; } public void setApplyTo(String applyTo) { // Assign filtered list this.applyTo = BlockUtils.splitIdentifiers(applyTo); } @Override public AbstractAtomicBlock clone() { AbstractAtomicBlock copy = (AbstractAtomicBlock) super.clone(); if (applyTo != null) { copy.applyTo = new ArrayList<String>(applyTo.size()); copy.applyTo.addAll(applyTo); } return copy; } @Override public int hashCode() { int hash = 5; hash = 11 * hash + (this.applyTo != null ? this.applyTo.hashCode() : 0); return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final AbstractAtomicBlock other = (AbstractAtomicBlock) obj; if (! super.equals(obj)) { return false; } if (this.applyTo != other.applyTo && (this.applyTo == null || !this.applyTo.equals(other.applyTo))) { return false; } return true; } }