001: /*
002: * Copyright (c) 2003-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.validation.tutorial.shared;
032:
033: import java.beans.PropertyChangeEvent;
034: import java.beans.PropertyChangeListener;
035:
036: import com.jgoodies.binding.PresentationModel;
037: import com.jgoodies.validation.ValidationResult;
038: import com.jgoodies.validation.ValidationResultModel;
039: import com.jgoodies.validation.tutorial.validator.OrderValidator;
040: import com.jgoodies.validation.util.DefaultValidationResultModel;
041:
042: /**
043: * Provides all models to bind an order editor to its domain model,
044: * an instance of {@link Order}.
045: *
046: * @author Karsten Lentzsch
047: * @version $Revision: 1.13 $
048: */
049: public class OrderModel extends PresentationModel<Order> {
050:
051: private final ValidationResultModel validationResultModel;
052:
053: // Instance Creation ******************************************************
054:
055: public OrderModel(Order order) {
056: super (order);
057: validationResultModel = new DefaultValidationResultModel();
058: initEventHandling();
059: updateValidationResult();
060: }
061:
062: // Exposing Models ********************************************************
063:
064: public ValidationResultModel getValidationResultModel() {
065: return validationResultModel;
066: }
067:
068: // Initialization *********************************************************
069:
070: /**
071: * Listens to changes in all properties of the current Order
072: * and to Order changes.
073: */
074: private void initEventHandling() {
075: PropertyChangeListener handler = new ValidationUpdateHandler();
076: addBeanPropertyChangeListener(handler);
077: getBeanChannel().addValueChangeListener(handler);
078: }
079:
080: // Event Handling *********************************************************
081:
082: private void updateValidationResult() {
083: Order order = getBean();
084: ValidationResult result = new OrderValidator().validate(order);
085: validationResultModel.setResult(result);
086: }
087:
088: /**
089: * Validates the order using an OrderValidator and
090: * updates the validation result.
091: */
092: private final class ValidationUpdateHandler implements
093: PropertyChangeListener {
094:
095: public void propertyChange(PropertyChangeEvent evt) {
096: updateValidationResult();
097: }
098:
099: }
100:
101: }
|