/*
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* 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 org.optaplanner.examples.dinnerparty.domain;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import org.optaplanner.core.api.domain.entity.PlanningEntity;
import org.optaplanner.core.api.domain.variable.PlanningVariable;
import org.optaplanner.examples.common.domain.AbstractPersistable;
import org.optaplanner.examples.common.swingui.components.Labeled;
@PlanningEntity
@XStreamAlias("SeatDesignation")
public class SeatDesignation extends AbstractPersistable implements Labeled {
private Guest guest;
private Seat seat;
public Guest getGuest() {
return guest;
}
public void setGuest(Guest guest) {
this.guest = guest;
}
@PlanningVariable(valueRangeProviderRefs = {"seatRange"})
public Seat getSeat() {
return seat;
}
public void setSeat(Seat seat) {
this.seat = seat;
}
// ************************************************************************
// Complex methods
// ************************************************************************
public String getGuestName() {
return getGuest().getName();
}
public Gender getGuestGender() {
return getGuest().getGender();
}
public Job getGuestJob() {
return getGuest().getJob();
}
public JobType getGuestJobType() {
return getGuest().getJob().getJobType();
}
public boolean differentKindIfNeeded(Job otherGuestJob) {
JobType jobType = guest.getJob().getJobType();
return jobType == JobType.SOCIALITE || jobType == JobType.TEACHER || guest.getJob() != otherGuestJob;
}
public Table getSeatTable() {
if (seat == null) {
return null;
}
return seat.getTable();
}
public boolean isRightOf(SeatDesignation leftSeatDesignation) {
if (seat == null || leftSeatDesignation.seat == null) {
return false;
}
return seat.getRightSeat() == leftSeatDesignation.seat;
}
public boolean isNeighborOf(SeatDesignation otherSeatDesignation) {
if (seat == null || otherSeatDesignation.seat == null) {
return false;
}
return seat.getLeftSeat() == otherSeatDesignation.seat || seat.getRightSeat() == otherSeatDesignation.seat;
}
@Override
public String getLabel() {
return guest.getLabel();
}
@Override
public String toString() {
return guest.toString();
}
}