/* * Copyright 2009-2012 by KNURT Systeme (http://www.knurt.de) * * Licensed under the Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://creativecommons.org/licenses/by-nc-sa/3.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 de.knurt.fam.template.controller.image.availability.printer; import java.util.ArrayList; import java.util.List; import de.knurt.fam.core.model.persist.FacilityAvailability; import de.knurt.fam.core.util.time.FacilityAvailabilityMerger; import de.knurt.heinzelmann.util.time.TimeFrame; /** * print a given set of availabilities using a specific artist for that. * * @see FacilityAvailabilityArtist * @see FacilityAvailability#getAvailable() * @author Daniel Oltmanns * @since 0.20090518 (05/18/2009) */ public class FacilityAvailabilityPrinter { private List<FacilityAvailability> dasGeneralNotAvailables; private List<FacilityAvailability> dasBookedNotAvailables; private List<FacilityAvailability> dasMaintenanceNotAvailables; private List<FacilityAvailability> dasMaybeAvailables; private List<FacilityAvailability> dasMustNotStartHere; private List<FacilityAvailability> dasFailureNotAvailables; private List<FacilityAvailability> dasCompletelyAvailables; private FacilityAvailabilityArtist daa; /** * construct a printer for given availablities, artist and time frame. * * @param das * set of availabilities to print out * @param daa * artist using for printings * @param askFor * time frame being printed out */ public FacilityAvailabilityPrinter(List<FacilityAvailability> das, FacilityAvailabilityArtist daa, TimeFrame askFor) { // set all unset completely available // create timeframe with availables FacilityAvailability exampleGrounding = new FacilityAvailability("", askFor.getCalendarStart(), askFor.getCalendarEnd()); exampleGrounding.setTimeStampSet(-1); // set to ice age if (askFor.endsInPast()) { exampleGrounding.setNotAvailableInGeneral(); } else { exampleGrounding.setCompletelyAvailable(); } das.add(exampleGrounding); das = FacilityAvailabilityMerger.getMergedByTimeStampSet(das, askFor); this.dasGeneralNotAvailables = new ArrayList<FacilityAvailability>(); this.dasBookedNotAvailables = new ArrayList<FacilityAvailability>(); this.dasMaintenanceNotAvailables = new ArrayList<FacilityAvailability>(); this.dasFailureNotAvailables = new ArrayList<FacilityAvailability>(); this.dasMaybeAvailables = new ArrayList<FacilityAvailability>(); this.dasMustNotStartHere = new ArrayList<FacilityAvailability>(); this.dasCompletelyAvailables = new ArrayList<FacilityAvailability>(); this.daa = daa; for (FacilityAvailability da : das) { if (da.isNotAvailableInGeneral()) { this.dasGeneralNotAvailables.add(da); } else if (da.isMaybeAvailable()) { this.dasMaybeAvailables.add(da); } else if (da.isNotAvailableBecauseOfBooking()) { this.dasBookedNotAvailables.add(da); } else if (da.mustNotStartHere()) { this.dasMustNotStartHere.add(da); } else if (da.isNotAvailableBecauseOfMaintenance()) { this.dasMaintenanceNotAvailables.add(da); } else if (da.isNotAvailableBecauseOfSuddenFailure()) { this.dasFailureNotAvailables.add(da); } else if (da.isCompletelyAvailable()) { this.dasCompletelyAvailables.add(da); } } } /** * print out all facility availabilities using a method of the constructed * {@link FacilityAvailabilityArtist} that matches the availability. concrete * use ... * <ul> * <li>... * {@link FacilityAvailabilityArtist#outCompletelyAvailable(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#isCompletelyAvailable()}</li> * <li>... * {@link FacilityAvailabilityArtist#outMaybeAvailable(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#isMaybeAvailable()}</li> * <li>... * {@link FacilityAvailabilityArtist#outNotAvailableBooking(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#isNotAvailableBecauseOfBooking()}</li> * <li>... * {@link FacilityAvailabilityArtist#outNotAvailableMaintenance(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#isNotAvailableBecauseOfMaintenance()}</li> * <li>... * {@link FacilityAvailabilityArtist#outNotAvailableFailure(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#isNotAvailableBecauseOfSuddenFailure()}</li> * <li>... * {@link FacilityAvailabilityArtist#outNotAvailableFailure(de.knurt.fam.core.model.persist.FacilityAvailability)} * if {@link FacilityAvailability#mustNotStartHere()}</li> * </ul> */ public void out() { // print everything available - because of what is not set is available for (FacilityAvailability da : this.dasCompletelyAvailables) { this.daa.outCompletelyAvailable(da); } for (FacilityAvailability da : this.dasMaybeAvailables) { this.daa.outMaybeAvailable(da); } for (FacilityAvailability da : this.dasBookedNotAvailables) { this.daa.outNotAvailableBooking(da); } for (FacilityAvailability da : this.dasGeneralNotAvailables) { this.daa.outNotAvailableInGeneral(da); } for (FacilityAvailability da : this.dasMaintenanceNotAvailables) { this.daa.outNotAvailableMaintenance(da); } for (FacilityAvailability da : this.dasFailureNotAvailables) { this.daa.outNotAvailableFailure(da); } for (FacilityAvailability da : this.dasMustNotStartHere) { this.daa.outMustNotStartHere(da); } } }