RSS

Search Engine

Wednesday, June 23, 2010

Domain Model

2.1. Overview

We are going to re-use the same data model for several examples. Therefore we will create the data model in a separate plugin and re-use it.

2.2. Create Plugin

Create a plugin project "de.vogella.databinding.person.model". Do not create an activator, do not select "This plug-in will make contributions to the UI" and select "No" for the question "Do you want to create a rich client application".

Press "Finish".

To use the databinding between the UI and the domain model in both directions the domain model needs to implement PropertyChangeSupport so that the Eclipse databinding can listen to changes in the model.

Create the package "de.vogella.databinding.person.model" and the following classes.

    
package de.vogella.databinding.person.model;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

public class Person implements PropertyChangeListener {
private String firstName;
private String lastName;
private boolean married;
private String gender;
private Integer age;
private Address address;
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);

public Person() {
}

public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}

public String getFirstName() {
return firstName;
}

public String getGender() {
return gender;
}

public String getLastName() {
return lastName;
}

public boolean isMarried() {
return married;
}

public void setFirstName(String firstName) {
propertyChangeSupport.firePropertyChange("firstName", this.firstName,
this.firstName = firstName);
}

public void setGender(String gender) {
propertyChangeSupport.firePropertyChange("gender", this.gender,
this.gender = gender);
}

public void setLastName(String lastName) {
propertyChangeSupport.firePropertyChange("lastName", this.lastName,
this.lastName = lastName);
}

public void setMarried(boolean isMarried) {
propertyChangeSupport.firePropertyChange("married", this.married,
this.married = isMarried);
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
propertyChangeSupport.firePropertyChange("age", this.age,
this.age = age);
}

public Address getAddress() {
return address;
}

public void setAddress(Address address) {
address.addPropertyChangeListener("country", this);
propertyChangeSupport.firePropertyChange("address", this.address,
this.address = address);
}

@Override
public String toString() {
return firstName + " " + lastName;
}

@Override
public void propertyChange(PropertyChangeEvent event) {
propertyChangeSupport.firePropertyChange("address", null, address);
}

}

    
package de.vogella.databinding.person.model;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

public class Address {

private String street;
private String number;
private String postalCode;
private String city;
private String country;
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);

public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}

public Address() {
}

public Address(String postalCode, String city, String country) {
this.postalCode = postalCode;
this.city = city;
this.country = country;
}

public String getStreet() {
return street;
}

public void setStreet(String street) {
propertyChangeSupport.firePropertyChange("street", this.street,
this.street = street);
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
propertyChangeSupport.firePropertyChange("number", this.number,
this.number = number);
}

public String getPostalCode() {
return postalCode;
}

public void setPostalCode(String postalCode) {
propertyChangeSupport.firePropertyChange("postalCode", this.postalCode,
this.postalCode = postalCode);
}

public String getCity() {
return city;
}

public void setCity(String city) {
propertyChangeSupport.firePropertyChange("city", this.city,
this.city = city);
this.city = city;
}

public String getCountry() {
return country;
}

public void setCountry(String country) {
propertyChangeSupport.firePropertyChange("country", this.country,
this.country = country);
}

public String toString() {
String s = "";
s += street != null ? street + " " : "";
s += number != null ? number + " " : "";
s += postalCode != null ? postalCode + " " : "";
s += city != null ? city + " " : "";
s += country != null ? country + " " : "";

return s;
}

}

Select the file MANIFEST.MF in the directory "META-INF". Select the tab "Runtime". Press add and add the package "de.vogella.databinding.person.model". This will enable other plugin to use the classes from this package.


0 comments:

Post a Comment