blob: 876ee52799768262b6e46aeed0551037fb8d3297 [file] [log] [blame]
/*
* Copyright 2009-2010 by The Regents of the University of California
* 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 from
*
* 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 edu.uci.ics.hyracks.algebricks.core.algebra.properties;
import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
public class FileSplitDomain implements INodeDomain {
private FileSplit[] splits;
public FileSplitDomain(FileSplit[] splits) {
this.splits = splits;
}
@Override
public Integer cardinality() {
return splits.length;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("FileSplitDomain[");
boolean fst = true;
for (FileSplit fs : splits) {
if (fst) {
fst = false;
} else {
sb.append(", ");
}
sb.append(fs.getNodeName() + ":" + fs.getLocalFile());
}
sb.append(']');
return sb.toString();
}
@Override
public boolean sameAs(INodeDomain domain) {
if (!(domain instanceof FileSplitDomain)) {
return false;
}
FileSplitDomain fsd = (FileSplitDomain) domain;
if (fsd.splits.length != splits.length) {
return false;
}
// conservative approach...
for (int i = 0; i < splits.length; i++) {
if (!ncEq(splits[i], fsd.splits[i])) {
return false;
}
}
return true;
}
private boolean ncEq(FileSplit fs1, FileSplit fs2) {
return fs1.getNodeName().equals(fs2.getNodeName());
}
}