/*
* Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org
* Use is subject to license terms. See license.txt.
*/
package org.beanfabrics.model;
import static org.junit.Assert.assertNotNull;
import junit.framework.JUnit4TestAdapter;
import org.beanfabrics.Path;
import org.beanfabrics.PathEvaluation;
import org.beanfabrics.support.Property;
import org.beanfabrics.support.PropertySupport;
import org.junit.Test;
/**
* @author Michael Karneim
*/
public class CompositePresentationModelTest {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(CompositePresentationModelTest.class);
}
// TODO (mk) 1, Visitor und Filter im Helper anbieten
// TODO (mk) 1, PropertiesUIModelHelper sollte der PropertiesCell selbst sein.
@Test
public void address() {
AddressPM pModel = new AddressPM();
//TextPM street = (TextPM) Helper.get(pModel).getProperty( new Path("this.street"));
TextPM street = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.street"));
assertNotNull("street", street);
//TextPM cityName = (TextPM) Helper.get(pModel).getProperty( new Path("this.city.name"));
TextPM cityName = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.city.name"));
assertNotNull("cityName", cityName);
}
@Test
public void person() {
PersonPM pModel = new PersonPM();
pModel.getValidator().validate();
//TextPM name = (TextPM) Helper.get(pModel).getProperty( "name");
TextPM name = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("name"));
assertNotNull("name", name);
//TextPM street = (TextPM) Helper.get(pModel).getProperty( new Path("this.address.street"));
TextPM street = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.address.street"));
assertNotNull("street", street);
//TextPM cityName = (TextPM) Helper.get(pModel).getProperty( new Path("this.address.city.name"));
TextPM cityName = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.address.city.name"));
assertNotNull("cityName", cityName);
}
@Test
public void project() {
ProjectPM pModel = new ProjectPM();
//TextPM name = (TextPM) Helper.get(pModel).getProperty( "name");
TextPM name = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("name"));
assertNotNull("name", name);
//TextPM street = (TextPM) Helper.get(pModel).getProperty( new Path("this.leader.address.street"));
TextPM street = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.leader.address.street"));
assertNotNull("street", street);
//TextPM cityName = (TextPM) Helper.get(pModel).getProperty( new Path("this.leader.address.city.name"));
TextPM cityName = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.leader.address.city.name"));
assertNotNull("cityName", cityName);
//TextPM companyName = (TextPM) Helper.get(pModel).getProperty( new Path("this.company.name"));
TextPM companyName = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.company.name"));
assertNotNull("companyName", companyName);
}
@Test
public void company() {
CompanyPM pModel = new CompanyPM();
//TextPM name = (TextPM) Helper.get(pModel).getProperty( "name");
TextPM name = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("name"));
assertNotNull("name", name);
//TextPM street = (TextPM) Helper.get(pModel).getProperty( new Path("this.address.street"));
TextPM street = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.address.street"));
assertNotNull("street", street);
//TextPM cityName = (TextPM) Helper.get(pModel).getProperty( new Path("this.address.city.name"));
TextPM cityName = (TextPM)PathEvaluation.evaluateOrNull(pModel, new Path("this.address.city.name"));
assertNotNull("cityName", cityName);
}
public static class ProjectPM extends AbstractPM {
@Property
TextPM name = new TextPM();
@Property
PersonPM leader = new PersonPM();
@Property
CompanyPM company = new CompanyPM();
public ProjectPM() {
PMManager.setup(this);
name.setText("untitled project");
}
public void setLeader(PersonPM newLeader) {
if (equals(this.leader, newLeader)) {
return;
} else {
this.leader = newLeader;
PropertySupport.get(this).refresh();
}
}
}
public interface AddressablePM extends PresentationModel {
@Property
AddressPM getAddress();
}
public static class CompanyPM extends AbstractPM implements AddressablePM {
private TextPM name = new TextPM();
@Property
PersonPM owner = new PersonPM();
AddressPM address = new AddressPM();
public CompanyPM() {
PMManager.setup(this);
}
@Property
public AddressPM getAddress() {
return address;
}
@Property
public TextPM getName() {
return name;
}
}
public static class PersonPM extends AbstractPM implements AddressablePM {
private TextPM name = new TextPM();
private TextPM phone = new TextPM();
@Property
private AddressPM address = new AddressPM();
private TimeSpanPM timespan;
@Property
private IntegerPM height = new IntegerPM();
public PersonPM() {
PMManager.setup(this);
}
@Property
public TextPM getName() {
return name;
}
@Property
public TextPM getPhone() {
return phone;
}
public AddressPM getAddress() {
return address;
}
@Property
public TimeSpanPM getTimespan() {
return timespan;
}
public void setTimespan(TimeSpanPM newValue) {
if (equals(this.timespan, newValue)) {
return;
}
this.timespan = newValue;
PropertySupport.get(this).refresh();
}
}
public static interface TimeSpanPM extends PresentationModel {
@Property
public DatePM getStart();
@Property
public DatePM getEnd();
}
public static class AddressPM extends AbstractPM {
@Property
private TextPM street = new TextPM();
@Property
CityPM city = new CityPM();
public AddressPM() {
PMManager.setup(this);
}
public TextPM getStreet() {
return street;
}
}
public static class CityPM extends AbstractPM {
TextPM name = new TextPM();
public CityPM() {
PMManager.setup(this);
}
}
}