/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.wire;
import alluxio.annotation.PublicApi;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.concurrent.NotThreadSafe;
/**
* The lineage information.
*/
@PublicApi
@NotThreadSafe
public final class LineageInfo implements Serializable {
private static final long serialVersionUID = -6407439859190160616L;
private long mId;
private ArrayList<String> mInputFiles = new ArrayList<>();
private ArrayList<String> mOutputFiles = new ArrayList<>();
private CommandLineJobInfo mJob = new CommandLineJobInfo();
private long mCreationTimeMs;
private ArrayList<Long> mParents = new ArrayList<>();
private ArrayList<Long> mChildren = new ArrayList<>();
/**
* Creates a new instance of {@link LineageInfo}.
*/
public LineageInfo() {}
/**
* Creates a new instance of {@link LineageInfo} from a thrift representation.
*
* @param lineageInfo the thrift representation of a lineage information
*/
protected LineageInfo(alluxio.thrift.LineageInfo lineageInfo) {
mId = lineageInfo.getId();
mInputFiles = new ArrayList<>(lineageInfo.getInputFiles());
mOutputFiles = new ArrayList<>(lineageInfo.getOutputFiles());
mJob = new CommandLineJobInfo(lineageInfo.getJob());
mCreationTimeMs = lineageInfo.getCreationTimeMs();
mParents = new ArrayList<>(lineageInfo.getParents());
mChildren = new ArrayList<>(lineageInfo.getChildren());
}
/**
* @return the lineage id
*/
public long getId() {
return mId;
}
/**
* @return the lineage input files
*/
public List<String> getInputFiles() {
return mInputFiles;
}
/**
* @return the lineage output files
*/
public List<String> getOutputFiles() {
return mOutputFiles;
}
/**
* @return the lineage command-line job
*/
public CommandLineJobInfo getJob() {
return mJob;
}
/**
* @return the lineage creation time (in milliseconds)
*/
public long getCreationTimeMs() {
return mCreationTimeMs;
}
/**
* @return the lineage parents
*/
public List<Long> getParents() {
return mParents;
}
/**
* @return the lineage children
*/
public List<Long> getChildren() {
return mChildren;
}
/**
* @param id the lineage id to use
* @return the lineage information
*/
public LineageInfo setId(long id) {
mId = id;
return this;
}
/**
* @param inputFiles the input files to use
* @return the lineage information
*/
public LineageInfo setInputFiles(List<String> inputFiles) {
Preconditions.checkNotNull(inputFiles, "inputFiles");
mInputFiles = new ArrayList<>(inputFiles);
return this;
}
/**
* @param outputFiles the output files to use
* @return the lineage information
*/
public LineageInfo setOutputFiles(List<String> outputFiles) {
Preconditions.checkNotNull(outputFiles);
mOutputFiles = new ArrayList<>(outputFiles);
return this;
}
/**
* @param job the command-line job to use
* @return the lineage information
*/
public LineageInfo setJob(CommandLineJobInfo job) {
Preconditions.checkNotNull(job);
mJob = job;
return this;
}
/**
* @param creationTimeMs the creation time (in milliseconds) to use
* @return the lineage information
*/
public LineageInfo setCreationTimeMs(long creationTimeMs) {
mCreationTimeMs = creationTimeMs;
return this;
}
/**
* @param parents the lineage parents
* @return the lineage information
*/
public LineageInfo setParents(List<Long> parents) {
Preconditions.checkNotNull(parents);
mParents = new ArrayList<>(parents);
return this;
}
/**
* @param children the lineage children
* @return the lineage information
*/
public LineageInfo setChildren(List<Long> children) {
Preconditions.checkNotNull(children);
mChildren = new ArrayList<>(children);
return this;
}
/**
* @return thrift representation of the lineage information
*/
protected alluxio.thrift.LineageInfo toThrift() {
return new alluxio.thrift.LineageInfo(mId, mInputFiles, mOutputFiles, mJob.toThrift(),
mCreationTimeMs, mParents, mChildren);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof LineageInfo)) {
return false;
}
LineageInfo that = (LineageInfo) o;
return mId == that.mId && mInputFiles.equals(that.mInputFiles)
&& mOutputFiles.equals(that.mOutputFiles) && mJob.equals(that.mJob)
&& mCreationTimeMs == that.mCreationTimeMs && mParents.equals(that.mParents)
&& mChildren.equals(that.mChildren);
}
@Override
public int hashCode() {
return Objects.hashCode(mId, mInputFiles, mOutputFiles, mJob, mCreationTimeMs, mParents,
mChildren);
}
@Override
public String toString() {
return Objects.toStringHelper(this).add("id", mId).add("inputFiles", mInputFiles)
.add("outputFiles", mOutputFiles).add("job", mJob).add("creationTimeMs", mCreationTimeMs)
.add("parents", mParents).add("children", mChildren).toString();
}
}