package netty.cookbook.chapter4.recipe5; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; public class WebUrl { public static final String LIKE_COUNT = "likeCount"; public static final String SHARE_COUNT = "shareCount"; private List<FacebookStats> stats = new ArrayList<FacebookStats>(); private List<PropertyChangeListener> listener = new ArrayList<PropertyChangeListener>(); private String url; public class FacebookStats { private long likeCount; private long shareCount; public FacebookStats(long like, long share) { this.likeCount = like; this.shareCount = share; } public long getLikeCount() { return likeCount; } public void setLikeCount(long like) { notifyListeners(this, LIKE_COUNT, this.likeCount, this.likeCount = like); } public long getShareCount() { return shareCount; } public void setShareCount(long shareCount) { notifyListeners(this, SHARE_COUNT, this.shareCount, this.shareCount = shareCount); } } public List<FacebookStats> getFacebookStats() { return stats; } public String getUrl() { return url; } public WebUrl(String url) { this.url = url; stats.add(new FacebookStats(0, 0)); } private void notifyListeners(Object object, String property, long oldValue, long newValue) { for (PropertyChangeListener name : listener) { name.propertyChange(new PropertyChangeEvent(this, property, oldValue, newValue)); } } public void addChangeListener(PropertyChangeListener newListener) { listener.add(newListener); } }