/**
* 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.job;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.metamodel.schema.ColumnType;
import org.apache.metamodel.util.BaseObject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
/**
* Immutable implementation of {@link AnalysisJobMetadata}.
*/
public class ImmutableAnalysisJobMetadata extends BaseObject implements AnalysisJobMetadata {
private final String _jobName;
private final String _jobVersion;
private final String _jobDescription;
private final String _author;
private final Date _createdDate;
private final Date _updatedDate;
private final String _datastoreName;
private final List<String> _sourceColumnPaths;
private final Map<String, String> _variables;
private final List<ColumnType> _sourceColumnTypes;
private final Map<String, String> _properties;
public ImmutableAnalysisJobMetadata(String jobName, String jobVersion, String jobDescription, String author,
Date createdDate, Date updatedDate, String datastoreName, List<String> sourceColumnPaths,
List<ColumnType> sourceColumnTypes, Map<String, String> variables, Map<String, String> properties) {
_jobName = jobName;
_jobVersion = jobVersion;
_jobDescription = jobDescription;
_author = author;
_createdDate = createdDate;
_updatedDate = updatedDate;
_datastoreName = datastoreName;
if (properties == null) {
_properties = Collections.emptyMap();
} else {
_properties = ImmutableMap.copyOf(properties);
}
if (sourceColumnPaths == null) {
_sourceColumnPaths = Collections.emptyList();
} else {
_sourceColumnPaths = ImmutableList.copyOf(sourceColumnPaths);
}
if (sourceColumnTypes == null) {
_sourceColumnTypes = new ArrayList<ColumnType>(sourceColumnPaths.size());
} else {
// we don't use ImmutableList here because it does not allow nulls
_sourceColumnTypes = Collections.unmodifiableList(sourceColumnTypes);
}
if (variables == null) {
variables = Collections.emptyMap();
} else {
variables = ImmutableMap.copyOf(variables);
}
_variables = Collections.unmodifiableMap(variables);
}
@Override
protected void decorateIdentity(List<Object> identifiers) {
identifiers.add(_jobName);
identifiers.add(_jobVersion);
identifiers.add(_jobDescription);
identifiers.add(_author);
identifiers.add(_createdDate);
identifiers.add(_updatedDate);
identifiers.add(_datastoreName);
identifiers.add(_sourceColumnPaths);
identifiers.add(_variables);
identifiers.add(_properties);
}
@Override
public String getJobName() {
return _jobName;
}
@Override
public String getJobVersion() {
return _jobVersion;
}
@Override
public String getJobDescription() {
return _jobDescription;
}
@Override
public String getAuthor() {
return _author;
}
@Override
public Date getCreatedDate() {
return _createdDate;
}
@Override
public Date getUpdatedDate() {
return _updatedDate;
}
@Override
public String getDatastoreName() {
return _datastoreName;
}
@Override
public List<String> getSourceColumnPaths() {
return _sourceColumnPaths;
}
@Override
public Map<String, String> getVariables() {
return _variables;
}
@Override
public List<ColumnType> getSourceColumnTypes() {
return _sourceColumnTypes;
}
@Override
public Map<String, String> getProperties() {
return _properties;
}
}