rendered paste bodypackage funala.domain.entity.ad.residenceoffer;
import javax.persistence.Embeddable;
import javax.persistence.Transient;
/**
* Utilities included in the rent. "The stupid bills you have to pay at the end
* of the month."
*
* @author Sami Dalouche (sami.dalouche@gmail.com)
*
*/
@Embeddable
public final class Utilities {
public static final class UtilitiesBuilder {
private boolean cableTv = false;
private boolean electricity = false;
private boolean heat = false;
private boolean highSpeedInternetAccess = false;
private boolean phoneLine = false;
private boolean satelliteTv = false;
private boolean securitySystem = false;
private boolean trashPickup = false;
private boolean unlimitedPhonePlan = false;
private boolean water = false;
private UtilitiesBuilder() {}
public UtilitiesBuilder withCableTv(boolean b) {
this.cableTv = b;
return this;
}
public UtilitiesBuilder withElectricity(boolean b) {
this.electricity = b;
return this;
}
public UtilitiesBuilder withHeat(boolean b) {
this.heat = b;
return this;
}
public UtilitiesBuilder withHighSpeedInternetAccess(boolean b) {
this.highSpeedInternetAccess = b;
return this;
}
public UtilitiesBuilder withPhoneLine(boolean b) {
this.phoneLine = b;
return this;
}
public UtilitiesBuilder withSatelliteTv(boolean b) {
this.satelliteTv = b;
return this;
}
public UtilitiesBuilder withSecuritySystem(boolean b) {
this.securitySystem = b;
return this;
}
public UtilitiesBuilder withTrashPickup(boolean b) {
this.trashPickup = b;
return this;
}
public UtilitiesBuilder withUnlimitedPhonePlan(boolean b) {
this.unlimitedPhonePlan = b;
return this;
}
public UtilitiesBuilder withWater(boolean b) {
this.water = b;
return this;
}
public Utilities build() {
return new Utilities()
.withCableTv(cableTv)
.withElectricity(electricity)
.withHeat(heat)
.withHighSpeedInternetAccess(highSpeedInternetAccess)
.withPhoneLine(phoneLine)
.withSatelliteTv(satelliteTv)
.withSecuritySystem(securitySystem)
.withTrashPickup(trashPickup)
.withUnlimitedPhonePlan(unlimitedPhonePlan)
.withWater(water);
}
}
public static final UtilitiesBuilder utilities() {
return new UtilitiesBuilder();
}
private boolean cableTv = false;
private boolean electricity = false;
private boolean heat = false;
private boolean highSpeedInternetAccess = false;
private boolean phoneLine = false;
private boolean satelliteTv = false;
private boolean securitySystem = false;
private boolean trashPickup = false;
private boolean unlimitedPhonePlan = false;
private boolean water = false;
private Utilities() {
}
@Transient
private Utilities withCableTv(boolean b) {
this.cableTv = b;
return this;
}
@Transient
private Utilities withElectricity(boolean b) {
this.electricity = b;
return this;
}
@Transient
private Utilities withHeat(boolean b) {
this.heat = b;
return this;
}
@Transient
private Utilities withHighSpeedInternetAccess(boolean b) {
this.highSpeedInternetAccess = b;
return this;
}
@Transient
private Utilities withPhoneLine(boolean b) {
this.phoneLine = b;
return this;
}
@Transient
private Utilities withSatelliteTv(boolean b) {
this.satelliteTv = b;
return this;
}
@Transient
private Utilities withSecuritySystem(boolean b) {
this.securitySystem = b;
return this;
}
@Transient
private Utilities withTrashPickup(boolean b) {
this.trashPickup = b;
return this;
}
@Transient
private Utilities withUnlimitedPhonePlan(boolean b) {
this.unlimitedPhonePlan = b;
return this;
}
@Transient
private Utilities withWater(boolean b) {
this.water = b;
return this;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Utilities other = (Utilities) obj;
if (cableTv != other.cableTv)
return false;
if (electricity != other.electricity)
return false;
if (heat != other.heat)
return false;
if (highSpeedInternetAccess != other.highSpeedInternetAccess)
return false;
if (phoneLine != other.phoneLine)
return false;
if (satelliteTv != other.satelliteTv)
return false;
if (securitySystem != other.securitySystem)
return false;
if (trashPickup != other.trashPickup)
return false;
if (unlimitedPhonePlan != other.unlimitedPhonePlan)
return false;
if (water != other.water)
return false;
return true;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + (cableTv ? 1231 : 1237);
result = PRIME * result + (electricity ? 1231 : 1237);
result = PRIME * result + (heat ? 1231 : 1237);
result = PRIME * result + (highSpeedInternetAccess ? 1231 : 1237);
result = PRIME * result + (phoneLine ? 1231 : 1237);
result = PRIME * result + (satelliteTv ? 1231 : 1237);
result = PRIME * result + (securitySystem ? 1231 : 1237);
result = PRIME * result + (trashPickup ? 1231 : 1237);
result = PRIME * result + (unlimitedPhonePlan ? 1231 : 1237);
result = PRIME * result + (water ? 1231 : 1237);
return result;
}
@Transient
public boolean isAtLeastOneUtility() {
int count = 0;
if (this.cableTv)
++count;
if (this.electricity)
++count;
if (this.heat)
++count;
if (this.highSpeedInternetAccess)
++count;
if (this.phoneLine)
++count;
if (this.satelliteTv)
++count;
if (this.securitySystem)
++count;
if (this.trashPickup)
++count;
if (this.unlimitedPhonePlan)
++count;
return count > 0;
}
public boolean isCableTv() {
return cableTv;
}
public boolean isElectricity() {
return electricity;
}
public boolean isHeat() {
return heat;
}
public boolean isHighSpeedInternetAccess() {
return highSpeedInternetAccess;
}
public boolean isPhoneLine() {
return phoneLine;
}
public boolean isSatelliteTv() {
return satelliteTv;
}
public boolean isSecuritySystem() {
return securitySystem;
}
public boolean isTrashPickup() {
return trashPickup;
}
public boolean isUnlimitedPhonePlan() {
return unlimitedPhonePlan;
}
public boolean isWater() {
return water;
}
}