/*
* Copyright (c) 2011-2015 EPFL DATA Laboratory
* Copyright (c) 2014-2015 The Squall Collaboration (see NOTICE)
*
* All rights reserved.
*
* 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 at
*
* 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 ch.epfl.data.squall.ewh.data_structures;
import java.io.Serializable;
import java.util.List;
// JAT is Join Attribute Key
public class KeyRegion<JAT extends Comparable<JAT>> implements Serializable {
private static final long serialVersionUID = 1L;
// region is defined with two opposite key points
// upper keys are non-inclusive
private JAT _kx1, _ky1, _kx2, _ky2;
private int _regionIndex;
// for the given key, what is the probability range that it ends up in this
// region (!Upper bound non-inclusive)
private double _kx1ProbLowerPos, _kx1ProbUpperPos, _ky1ProbLowerPos,
_ky1ProbUpperPos, _kx2ProbLowerPos, _kx2ProbUpperPos,
_ky2ProbLowerPos, _ky2ProbUpperPos;
public KeyRegion(JAT kx1, JAT ky1, JAT kx2, JAT ky2) {
_kx1 = kx1;
_ky1 = ky1;
_kx2 = kx2;
_ky2 = ky2;
}
public KeyRegion(JAT kx1, JAT ky1, JAT kx2, JAT ky2, double x1ProbLower,
double x1ProbUpper, double y1ProbLower, double y1ProbUpper,
double x2ProbLower, double x2ProbUpper, double y2ProbLower,
double y2ProbUpper, int regionIndex) {
this(kx1, ky1, kx2, ky2);
_kx1ProbLowerPos = x1ProbLower;
_kx1ProbUpperPos = x1ProbUpper;
_ky1ProbLowerPos = y1ProbLower;
_ky1ProbUpperPos = y1ProbUpper;
_kx2ProbLowerPos = x2ProbLower;
_kx2ProbUpperPos = x2ProbUpper;
_ky2ProbLowerPos = y2ProbLower;
_ky2ProbUpperPos = y2ProbUpper;
_regionIndex = regionIndex;
}
public JAT get_kx1() {
return _kx1;
}
public JAT get_ky1() {
return _ky1;
}
public JAT get_kx2() {
return _kx2;
}
public JAT get_ky2() {
return _ky2;
}
public double get_kx1ProbLowerPos() {
return _kx1ProbLowerPos;
}
public void set_kx1ProbLowerPos(double _kx1ProbLowerPos) {
this._kx1ProbLowerPos = _kx1ProbLowerPos;
}
public double get_kx1ProbUpperPos() {
return _kx1ProbUpperPos;
}
public void set_kx1ProbUpperPos(double _kx1ProbUpperPos) {
this._kx1ProbUpperPos = _kx1ProbUpperPos;
}
public double get_ky1ProbLowerPos() {
return _ky1ProbLowerPos;
}
public void set_ky1ProbLowerPos(double _ky1ProbLowerPos) {
this._ky1ProbLowerPos = _ky1ProbLowerPos;
}
public double get_ky1ProbUpperPos() {
return _ky1ProbUpperPos;
}
public void set_ky1ProbUpperPos(double _ky1ProbUpperPos) {
this._ky1ProbUpperPos = _ky1ProbUpperPos;
}
public double get_kx2ProbLowerPos() {
return _kx2ProbLowerPos;
}
public void set_kx2ProbLowerPos(double _kx2ProbLowerPos) {
this._kx2ProbLowerPos = _kx2ProbLowerPos;
}
public double get_kx2ProbUpperPos() {
return _kx2ProbUpperPos;
}
public void set_kx2ProbUpperPos(double _kx2ProbUpperPos) {
this._kx2ProbUpperPos = _kx2ProbUpperPos;
}
public double get_ky2ProbLowerPos() {
return _ky2ProbLowerPos;
}
public void set_ky2ProbLowerPos(double _ky2ProbLowerPos) {
this._ky2ProbLowerPos = _ky2ProbLowerPos;
}
public double get_ky2ProbUpperPos() {
return _ky2ProbUpperPos;
}
public void set_ky2ProbUpperPos(double _ky2ProbUpperPos) {
this._ky2ProbUpperPos = _ky2ProbUpperPos;
}
public int getRegionIndex() {
return _regionIndex;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("\nKeyRegion ");
sb.append("with key boundaries kx1 = ").append(_kx1);
sb.append(", ky1 = ").append(_ky1);
sb.append(", kx2 = ").append(_kx2);
sb.append(", ky2 = ").append(_ky2);
sb.append("\n and their probabilities Prob(kx1) = [")
.append(_kx1ProbLowerPos).append(", ").append(_kx1ProbUpperPos)
.append(")");
sb.append(", Prob(ky1) = [").append(_ky1ProbLowerPos).append(", ")
.append(_ky1ProbUpperPos).append(")");
sb.append(", Prob(kx2) = [").append(_kx2ProbLowerPos).append(", ")
.append(_kx2ProbUpperPos).append(")");
sb.append(", Prob(ky2) = [").append(_ky2ProbLowerPos).append(", ")
.append(_ky2ProbUpperPos).append(")");
return sb.toString();
}
public static String toString(List<KeyRegion> keyRegions) {
StringBuilder sb = new StringBuilder("\nKeyRegions are:");
for (KeyRegion keyRegion : keyRegions) {
sb.append(keyRegion);
}
return sb.toString();
}
}