/** * AnalyzerBeans * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.eobjects.analyzer.data; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import org.eobjects.analyzer.job.IdGenerator; import org.eobjects.analyzer.util.InputColumnComparator; import org.apache.metamodel.schema.Column; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Represents an InputColumn that is a result of a transformer. * * @param <E> */ public class TransformedInputColumn<E> implements MutableInputColumn<E>, Serializable, Comparable<InputColumn<E>> { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(TransformedInputColumn.class); private final transient Collection<Listener> _listeners; private final String _id; private Class<?> _dataType; private String _name; private String _initialName; private boolean _hidden; public TransformedInputColumn(String name, IdGenerator idGenerator) { this(name, idGenerator.nextId()); } public TransformedInputColumn(String name, String id) { if (name == null) { throw new IllegalArgumentException("Name cannot be null"); } _name = name; _initialName = name; _id = id; _listeners = new HashSet<Listener>(); _hidden = false; } @Override public String getName() { return _name; } @Override public String getInitialName() { return _initialName; } public void setInitialName(String initialName) { _initialName = initialName; } @Override public void setName(String name) { if (name == null) { throw new IllegalArgumentException("Name cannot be null"); } if (name.equals(_name)) { return; } final String oldName = _name; _name = name; for (Listener listener : getListeners()) { listener.onNameChanged(this, oldName, name); } } public Collection<Listener> getListeners() { if (_listeners == null) { return Collections.emptyList(); } return _listeners; } @Override public String getId() { return _id; } public void setDataType(Class<?> dataType) { _dataType = dataType; } @Override public boolean isPhysicalColumn() { return false; } @Override public boolean isVirtualColumn() { return true; } @Override public String toString() { return "TransformedInputColumn[id=" + _id + ",name=" + _name + "]"; } @Override public Column getPhysicalColumn() throws IllegalStateException { return null; } @SuppressWarnings("unchecked") @Override public Class<? extends E> getDataType() { return (Class<? extends E>) _dataType; } @Override public int hashCode() { return _id.hashCode(); } @Override public boolean equals(Object obj) { // transformed input columns should always rely on identity equality - // other transformed columns with the same name, id etc. are NOT // necesarily equal (may come from another job, or even a copy of the // job). return this == obj; } @Override public int compareTo(InputColumn<E> o) { return InputColumnComparator.compareInputColumns(this, o); } @Override public boolean isHidden() { return _hidden; } @Override public void setHidden(boolean hidden) { _hidden = hidden; for (Listener listener : getListeners()) { listener.onVisibilityChanged(this, hidden); } } @Override public boolean addListener(Listener listener) { if (_listeners == null) { logger.warn("Attempted to add listener onto TransformedInputColumn with null List of listeners"); return false; } boolean added = _listeners.add(listener); if (logger.isDebugEnabled()) { logger.debug("[{}].addListener({}): {}", getName(), listener, added); } return added; } @Override public boolean removeListener(Listener listener) { if (_listeners == null) { logger.warn("Attempted to remove listener onto TransformedInputColumn with null List of listeners"); return false; } boolean removed = _listeners.remove(listener); if (logger.isDebugEnabled()) { logger.debug("[{}].removeListener({}): {}", getName(), listener, removed); logger.debug("[{}].listeners.size: {}", getName(), _listeners.size()); } return removed; } }