001: /*
002: * Copyright (c) 2002-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.binding.tests;
032:
033: import javax.swing.JTextField;
034:
035: import junit.framework.TestCase;
036:
037: import com.jgoodies.binding.PresentationModel;
038: import com.jgoodies.binding.adapter.BasicComponentFactory;
039: import com.jgoodies.binding.beans.Model;
040: import com.jgoodies.binding.beans.PropertyAdapter;
041: import com.jgoodies.binding.list.ArrayListModel;
042: import com.jgoodies.binding.list.ObservableList;
043: import com.jgoodies.binding.list.SelectionInList;
044: import com.jgoodies.binding.value.ValueModel;
045:
046: /**
047: * A test case for changing a SelectionInList's list by changing an
048: * underlying bean that holds a list.
049: *
050: *
051: * @author Karsten Lentzsch
052: * @version $Revision: 1.8 $
053: */
054: public final class CombinedTest extends TestCase {
055:
056: public void testPersonChangeWithPresentationModel() {
057: testPersonChange(true);
058: }
059:
060: public void testPersonChangeWithPropertyAdapter() {
061: testPersonChange(false);
062: }
063:
064: private void testPersonChange(boolean usePresentationModel) {
065: String phoneNumber = "32168";
066: Person person1 = new Person();
067: person1.addPhone(new Phone(phoneNumber));
068: Person person2 = new Person();
069:
070: PresentationModel<Person> masterModel = new PresentationModel<Person>(
071: person1);
072: SelectionInList<Phone> sil = new SelectionInList<Phone>(
073: masterModel.getModel(Person.PROPERTYNAME_PHONES));
074:
075: ValueModel selectionHolder = sil.getSelectionHolder();
076: ValueModel phoneNumberModel = usePresentationModel ? new PresentationModel<Person>(
077: selectionHolder).getModel(Phone.PROPERTYNAME_NUMBER)
078: : new PropertyAdapter<Person>(selectionHolder,
079: Phone.PROPERTYNAME_NUMBER, true);
080:
081: JTextField phoneNumberField = BasicComponentFactory
082: .createTextField(phoneNumberModel);
083:
084: assertEquals("Person1, no number selected (model): ", null,
085: phoneNumberModel.getValue());
086: assertEquals("Person1, no number selected (text): ", "",
087: phoneNumberField.getText());
088:
089: sil.setSelectionIndex(0);
090: assertEquals("Person1, first number selected (model): ",
091: phoneNumber, phoneNumberModel.getValue());
092: assertEquals("Person1, first number selected (text): ",
093: phoneNumber, phoneNumberField.getText());
094:
095: masterModel.setBean(person2);
096: assertEquals("Person2, no number selected (model): ", null,
097: phoneNumberModel.getValue());
098: assertEquals("Person2, no number selected (text): ", "",
099: phoneNumberField.getText());
100: }
101:
102: // Helper Classes *********************************************************
103:
104: public static class Phone extends Model {
105:
106: public static final String PROPERTYNAME_NUMBER = "number";
107:
108: private String number;
109:
110: Phone(String number) {
111: this .number = number;
112: }
113:
114: public String getNumber() {
115: return number;
116: }
117:
118: public void setNumber(String newNumber) {
119: String oldNumber = getNumber();
120: number = newNumber;
121: firePropertyChange(PROPERTYNAME_NUMBER, oldNumber,
122: newNumber);
123: }
124:
125: }
126:
127: public static final class Person extends Model {
128:
129: public static final String PROPERTYNAME_PHONES = "phones";
130:
131: private final ObservableList<Phone> phones;
132:
133: private Person() {
134: phones = new ArrayListModel<Phone>();
135: }
136:
137: public ObservableList<Phone> getPhones() {
138: return phones;
139: }
140:
141: public void addPhone(Phone phone) {
142: phones.add(phone);
143: }
144:
145: }
146:
147: }
|