1.1 --- a/twitter/src/main/java/org/apidesign/html/demo/twitter/TwitterClient.java Wed May 15 09:46:37 2013 +0200
1.2 +++ b/twitter/src/main/java/org/apidesign/html/demo/twitter/TwitterClient.java Thu Jun 20 13:18:10 2013 +0200
1.3 @@ -26,7 +26,6 @@
1.4 import java.util.Arrays;
1.5 import java.util.List;
1.6 import net.java.html.json.ComputedProperty;
1.7 -import net.java.html.json.Context;
1.8 import net.java.html.json.Function;
1.9 import net.java.html.json.Model;
1.10 import net.java.html.json.OnPropertyChange;
1.11 @@ -52,14 +51,28 @@
1.12 })
1.13 static class Twttrs {
1.14 }
1.15 + @Model(className = "User", properties = {
1.16 + @Property(name = "name", type = String.class),
1.17 + @Property(name = "profile_image_url", type = String.class),
1.18 + @Property(name = "id", type = int.class)
1.19 + })
1.20 + static class Usr {
1.21 + }
1.22 @Model(className = "Tweet", properties = {
1.23 - @Property(name = "from_user", type = String.class),
1.24 - @Property(name = "from_user_id", type = int.class),
1.25 + @Property(name = "user", type = User.class),
1.26 @Property(name = "profile_image_url", type = String.class),
1.27 @Property(name = "text", type = String.class),
1.28 @Property(name = "created_at", type = String.class),
1.29 })
1.30 static final class Twt {
1.31 + @ComputedProperty static String from_user(User user) {
1.32 + return user != null ? user.getName() : null;
1.33 + }
1.34 +
1.35 + @ComputedProperty static String imageUrl(User user) {
1.36 + return user != null ? user.getProfile_image_url() : null;
1.37 + }
1.38 +
1.39 @ComputedProperty static String html(String text) {
1.40 StringBuilder sb = new StringBuilder(320);
1.41 for (int pos = 0;;) {
1.42 @@ -79,20 +92,20 @@
1.43 }
1.44 }
1.45
1.46 - @ComputedProperty static String userUrl(String from_user) {
1.47 - return "http://twitter.com/" + from_user;
1.48 + @ComputedProperty static String userUrl(User user) {
1.49 + return "http://twitter.com/" + user.getName();
1.50 }
1.51 }
1.52 @Model(className = "TwitterQuery", properties = {
1.53 - @Property(array = true, name = "results", type = Twt.class)
1.54 + @Property(array = true, name = "statuses", type = Twt.class)
1.55 })
1.56 public static final class TwttrQr {
1.57 }
1.58
1.59 - @OnReceive(url="{root}/search.json?{query}&callback={me}", jsonp="me")
1.60 + @OnReceive(url="{url}?{query}&callback={me}", jsonp="me")
1.61 static void queryTweets(TwitterModel page, TwitterQuery q) {
1.62 page.getCurrentTweets().clear();
1.63 - page.getCurrentTweets().addAll(q.getResults());
1.64 + page.getCurrentTweets().addAll(q.getStatuses());
1.65 page.setLoading(false);
1.66 }
1.67
1.68 @@ -106,26 +119,37 @@
1.69 @OnPropertyChange({ "activeTweeters", "activeTweetersCount" })
1.70 static void refreshTweets(TwitterModel model) {
1.71 StringBuilder sb = new StringBuilder();
1.72 - sb.append("rpp=25&q=");
1.73 + sb.append("users=");
1.74 String sep = "";
1.75 for (String p : model.getActiveTweeters()) {
1.76 sb.append(sep);
1.77 - sb.append("from:");
1.78 sb.append(p);
1.79 - sep = " OR ";
1.80 + sep = "%7C";
1.81 + }
1.82 + if (sep.isEmpty()) {
1.83 + return;
1.84 }
1.85 model.setLoading(true);
1.86 - model.queryTweets("http://search.twitter.com", sb.toString());
1.87 + model.queryTweets("http://services.netbeans.org/synergy/server/api/twitter.php", sb.toString());
1.88 }
1.89
1.90 - private static final Context DEFAULT = Context.findDefault(TwitterClient.class);
1.91 static {
1.92 - final TwitterModel model = new TwitterModel(DEFAULT);
1.93 + try {
1.94 + init();
1.95 + } catch (Throwable ex) {
1.96 + ex.printStackTrace();
1.97 + }
1.98 + }
1.99 + private static void init() {
1.100 + System.setProperty("http.proxyHost", "www-proxy.uk.oracle.com");
1.101 + System.setProperty("http.proxyPort", "80");
1.102 +
1.103 + final TwitterModel model = new TwitterModel();
1.104 final List<Tweeters> svdLst = model.getSavedLists();
1.105 svdLst.add(newTweeters("API Design", "JaroslavTulach"));
1.106 svdLst.add(newTweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson"));
1.107 svdLst.add(newTweeters("Microsoft people", "BillGates", "shanselman", "ScottGu"));
1.108 - svdLst.add(newTweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans", "petrjiricka"));
1.109 + svdLst.add(newTweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans", "petrjiricka", "ladariha"));
1.110 svdLst.add(newTweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror"));
1.111
1.112 model.setActiveTweetersName("NetBeans");
1.113 @@ -161,7 +185,7 @@
1.114 final List<Tweeters> sl = model.getSavedLists();
1.115 sl.remove(findByName(sl, model.getActiveTweetersName()));
1.116 if (sl.isEmpty()) {
1.117 - final Tweeters t = new Tweeters(DEFAULT);
1.118 + final Tweeters t = new Tweeters();
1.119 t.setName("New");
1.120 sl.add(t);
1.121 }
1.122 @@ -195,11 +219,11 @@
1.123 return l;
1.124 }
1.125 }
1.126 - return list.isEmpty() ? new Tweeters(DEFAULT) : list.get(0);
1.127 + return list.isEmpty() ? new Tweeters() : list.get(0);
1.128 }
1.129
1.130 private static Tweeters newTweeters(String listName, String... userNames) {
1.131 - Tweeters t = new Tweeters(DEFAULT);
1.132 + Tweeters t = new Tweeters();
1.133 t.setName(listName);
1.134 t.getUserNames().addAll(Arrays.asList(userNames));
1.135 return t;