diff options
Diffstat (limited to 'sandbox/dougsleite/travelagency/src/main/java/hotel')
6 files changed, 464 insertions, 0 deletions
diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelBD.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelBD.java new file mode 100644 index 0000000000..cd2e9b0e78 --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelBD.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +import java.util.HashMap; +import java.util.Map; + +public class HotelBD { + + private Map<Integer, HotelRoom> hotelList; + private static HotelBD instance = null; + + protected HotelBD() { + + HotelRoom room1 = new HotelRoom(1, 2, true, true, true, HotelRoom.FLOOR_MARBLE); + HotelRoom room2 = new HotelRoom(2, 2, true, true, true, HotelRoom.FLOOR_MARBLE); + HotelRoom room3 = new HotelRoom(3, 1, false, false, true, HotelRoom.FLOOR_CARPET); + HotelRoom room4 = new HotelRoom(4, 1, false, true, true, HotelRoom.FLOOR_CARPET); + HotelRoom room5 = new HotelRoom(5, 2, false, true, true, HotelRoom.FLOOR_MARBLE); + + hotelList = new HashMap<Integer, HotelRoom>(); + + hotelList.put(room1.getID(), room1); + hotelList.put(room2.getID(), room2); + hotelList.put(room3.getID(), room3); + hotelList.put(room4.getID(), room4); + hotelList.put(room5.getID(), room5); + } + + public static HotelBD getInstance() { + if (instance == null) { + instance = new HotelBD(); + } + return instance; + } + + public HotelRoom get(int id) { + return hotelList.get(id); + } + + public HotelRoom put(int id, HotelRoom ticket) { + return hotelList.put(id, ticket); + } + + public HotelRoom delete(int id) { + return hotelList.remove(id); + } +} diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelRoom.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelRoom.java new file mode 100644 index 0000000000..124d8a3b57 --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelRoom.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +public class HotelRoom { + + public static int FLOOR_MARBLE = 0; + public static int FLOOR_CARPET = 1; + private int bedroomNumber; + private boolean hasBath; + private boolean hasAirConditioning; + private boolean hasCloset; + private int floorType; + private int id; + private boolean isBooked; + private int alredyBookedNumber; + + public HotelRoom(int id, int bedroomNumber, boolean hasBath, + boolean hasAirConditioning, boolean hasCloset, int floorType) { + this.bedroomNumber = bedroomNumber; + this.hasBath = hasBath; + this.hasAirConditioning = hasAirConditioning; + this.hasCloset = hasCloset; + this.floorType = floorType; + this.alredyBookedNumber = 0; + this.id = id; + this.isBooked = false; + } + + public int getAlreadyBookedNumber() { + return alredyBookedNumber; + } + + public int book() { + if (isBooked == false) { + isBooked = true; + return ++alredyBookedNumber; + } + return -1; + } + + public boolean unbook() { + if (isBooked == true) { + isBooked = false; + return true; + } + return false; + } + + public boolean isBooked() { + return isBooked; + } + + public int getBedroomNumber() { + return bedroomNumber; + } + + public void setBedroomNumber(int bedroomNumber) { + this.bedroomNumber = bedroomNumber; + } + + public boolean hasBath() { + return this.hasBath; + } + + public void setHasBath(boolean hasBath) { + this.hasBath = hasBath; + } + + public boolean hasAirConditioning() { + return this.hasAirConditioning; + } + + public void setHasAirConditioning(boolean hasAirConditioning) { + this.hasAirConditioning = hasAirConditioning; + } + + public boolean hasClose() { + return this.hasCloset; + } + + public void setHasCloset(boolean hasCloset) { + this.hasCloset = hasCloset; + } + + public int getFloorType() { + return floorType; + } + + public void setFloorType(int floorType) { + this.floorType = floorType; + } + + public int getID() { + return id; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof HotelRoom && + super.equals(obj) && + this.getID() == ((HotelRoom) obj).getID(); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 37 * hash + this.bedroomNumber; + hash = 37 * hash + (this.hasBath ? 1 : 0); + hash = 37 * hash + (this.hasAirConditioning ? 1 : 0); + hash = 37 * hash + (this.hasCloset ? 1 : 0); + hash = 37 * hash + this.floorType; + return hash; + } +} diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelService.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelService.java new file mode 100644 index 0000000000..06c3567134 --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelService.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +import client.HotelServiceCallback; +import common.CreditCard; +import org.osoa.sca.annotations.Callback; + +@Callback(HotelServiceCallback.class) +public interface HotelService { + + //@OneWay + //throws UnavailableHotelException + public void book(int roomID); + + //@OneWay + //throws UnavailableHotelException + public void pay(int roomID, int confirmationID, CreditCard creditCard); +} diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelServiceImpl.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelServiceImpl.java new file mode 100644 index 0000000000..7f86fdeaf8 --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/HotelServiceImpl.java @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +import client.HotelServiceCallback; +import common.Constants; +import common.CreditCard; +import common.InvalidCreditCardException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.osoa.sca.annotations.Callback; +import org.osoa.sca.annotations.Property; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +@Service(HotelService.class) +@Scope("COMPOSITE") +public class HotelServiceImpl implements HotelService { + + @Callback + protected HotelServiceCallback callback; + private HotelBD bd; + private int sleepBookTime; + private int sleepPaymentTime; + private String behavior; + + public HotelServiceImpl() { + bd = HotelBD.getInstance(); + sleepBookTime = 0; + sleepPaymentTime = 0; + behavior = Constants.NORMAL; + } + + public void book(int roomID) { + new Thread(new BookThread(roomID)).start(); + } + + public void pay(int roomID, int confirmationID, CreditCard creditCard) { + new Thread(new PayThread(roomID, confirmationID, creditCard)).start(); + } + + public String getBehavior() { + return behavior; + } + + @Property(name = "behavior", required = false) + public void setBehavior(String behavior) { + this.behavior = behavior.toUpperCase(); + } + + public int getSleepBookTime() { + return sleepBookTime; + } + + @Property(name = "sleepBookTime", required = false) + public void setSleepBookTime(int sleepBookTime) { + this.sleepBookTime = sleepBookTime; + } + + public int getSleepPaymentTime() { + return sleepPaymentTime; + } + + @Property(name = "sleepPaymentTime", required = false) + public void setSleepPaymentTime(int sleepPaymentTime) { + this.sleepPaymentTime = sleepPaymentTime; + } + + private class BookThread implements Runnable { + + private int roomID; + + public BookThread(int roomID) { + this.roomID = roomID; + } + + public void run() { + //Extra time to book + try { + Thread.sleep(sleepBookTime); + } catch (InterruptedException ex) { + Logger.getLogger(HotelServiceImpl.class.getName()).log(Level.SEVERE, null, ex); + } + + //NORMAL behavior + if (behavior.equals(Constants.NORMAL) || behavior.equals(Constants.EXCEPTIONAL_PAYMENT)) { + + HotelRoom room = bd.get(roomID); + int confirmationID = room.book(); + + if (confirmationID != -1) { + callback.confirmHotelBook(confirmationID); + return; + } + + callback.throwsHotelException(new UnavailableHotelException( + "Room " + roomID + " is already booked!")); + } //EXCEPTIONAL_BOOK behavior + else if (behavior.equals(Constants.EXCEPTIONAL_BOOK)) { + callback.throwsHotelException(new UnavailableHotelException( + "Room " + roomID + " is already booked!")); + } + } + } + + private class PayThread implements Runnable { + + private int roomID; + private int confirmationID; + private CreditCard creditCard; + + public PayThread(int roomID, int confirmationID, CreditCard creditCard) { + this.roomID = roomID; + this.confirmationID = confirmationID; + this.creditCard = creditCard; + } + + public void run() { + //Extra time to pay + try { + Thread.sleep(sleepPaymentTime); + } catch (InterruptedException ex) { + Logger.getLogger(HotelServiceImpl.class.getName()).log(Level.SEVERE, null, ex); + } + + //NORMAL behavior + if (behavior.equals(Constants.NORMAL)) { + + HotelRoom room = bd.get(roomID); + + //Testing the confirmation ID + if (room.getAlreadyBookedNumber() != confirmationID) { + room.unbook(); + + callback.throwsHotelException(new InvalidConfirmationIDException()); + return; + } + //Testing the credit card + if (!verifyCreditCard(creditCard)) { + room.unbook(); + + callback.throwsHotelException(new InvalidCreditCardException()); + return; + } + + callback.confirmHotelPayment(confirmationID); + } //EXCEPTIONAL_PAYMENT behavior + else if (behavior.equals(Constants.EXCEPTIONAL_PAYMENT)) { + callback.throwsHotelException(new InvalidCreditCardException()); + } + } + + private boolean verifyCreditCard(CreditCard creditCard) { +// Random r = new Random(creditCard.getVerificationNumber()); +// return r.nextBoolean(); + return true; + } + } +} diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/InvalidConfirmationIDException.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/InvalidConfirmationIDException.java new file mode 100644 index 0000000000..c1c7f23fad --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/InvalidConfirmationIDException.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +public class InvalidConfirmationIDException extends RuntimeException { + public InvalidConfirmationIDException() { + super(); + } + + public InvalidConfirmationIDException(String message) { + super(message); + } +}
\ No newline at end of file diff --git a/sandbox/dougsleite/travelagency/src/main/java/hotel/UnavailableHotelException.java b/sandbox/dougsleite/travelagency/src/main/java/hotel/UnavailableHotelException.java new file mode 100644 index 0000000000..8ee5badcb3 --- /dev/null +++ b/sandbox/dougsleite/travelagency/src/main/java/hotel/UnavailableHotelException.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 hotel; + +public class UnavailableHotelException extends RuntimeException { + public UnavailableHotelException() { + super(); + } + + public UnavailableHotelException(String message) { + super(message); + } +} |