diff -r dad881565d0a -r 7fc6b7e9c982 javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java --- a/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java Mon Apr 08 18:26:11 2013 +0200 +++ b/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java Mon Apr 08 19:30:22 2013 +0200 @@ -31,7 +31,7 @@ @Page(xhtml="index.html", className="TwitterModel", properties={ @Property(name="savedLists", type=TwitterClient.Twttrs.class, array = true), @Property(name="activeTweetersName", type=String.class), - @Property(name="activeTweeters", type=TwitterClient.Twttrs.class), + @Property(name="activeTweeters", type=String.class, array = true), @Property(name="userNameToAdd", type=String.class), @Property(name="currentTweets", type=TwitterClient.Twt.class, array = true) }) @@ -50,6 +50,28 @@ @Property(name = "created_at", type = String.class), }) static final class Twt { + @ComputedProperty static String html(String text) { + StringBuilder sb = new StringBuilder(320); + for (int pos = 0;;) { + int http = text.indexOf("http", pos); + if (http == -1) { + sb.append(text.substring(pos)); + return sb.toString(); + } + int spc = text.indexOf(' ', http); + if (spc == -1) { + spc = text.length(); + } + sb.append(text.substring(pos, http)); + String url = text.substring(http, spc); + sb.append("").append(url).append(""); + pos = spc; + } + } + + @ComputedProperty static String userUrl(String from_user) { + return "http://twitter.com/" + from_user; + } } @Model(className = "TwitterQuery", properties = { @Property(array = true, name = "results", type = Twt.class) @@ -66,34 +88,32 @@ @OnPropertyChange("activeTweetersName") static void changeTweetersList(TwitterModel model) { Tweeters people = findByName(model.getSavedLists(), model.getActiveTweetersName()); - model.setActiveTweeters(people.clone()); + model.getActiveTweeters().clear(); + model.getActiveTweeters().addAll(people.getUserNames()); } - @OnPropertyChange("activeTweeters") + @OnPropertyChange({ "activeTweeters", "activeTweetersCount" }) static void refreshTweets(TwitterModel model) { - Tweeters people = model.getActiveTweeters(); - if (people != null) { - StringBuilder sb = new StringBuilder(); - sb.append("rpp=25&q="); - String sep = ""; - for (String p : people.getUserNames()) { - sb.append(sep); - sb.append("from:"); - sb.append(p); - sep = " OR "; - } - model.queryTweets("http://search.twitter.com", sb.toString()); + StringBuilder sb = new StringBuilder(); + sb.append("rpp=25&q="); + String sep = ""; + for (String p : model.getActiveTweeters()) { + sb.append(sep); + sb.append("from:"); + sb.append(p); + sep = " OR "; } + model.queryTweets("http://search.twitter.com", sb.toString()); } static { final TwitterModel model = new TwitterModel(); final List svdLst = model.getSavedLists(); - svdLst.add(tweeters("API Design", "JaroslavTulach")); - svdLst.add(tweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson")); - svdLst.add(tweeters("Microsoft people", "BillGates", "shanselman", "ScottGu")); - svdLst.add(tweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans")); - svdLst.add(tweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror")); + svdLst.add(newTweeters("API Design", "JaroslavTulach")); + svdLst.add(newTweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson")); + svdLst.add(newTweeters("Microsoft people", "BillGates", "shanselman", "ScottGu")); + svdLst.add(newTweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans", "petrjiricka")); + svdLst.add(newTweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror")); model.setActiveTweetersName("NetBeans"); @@ -101,27 +121,32 @@ } @ComputedProperty - static boolean hasUnsavedChanges(Tweeters activeTweeters, List savedLists, String activeTweetersName) { + static boolean hasUnsavedChanges(List activeTweeters, List savedLists, String activeTweetersName) { Tweeters tw = findByName(savedLists, activeTweetersName); if (activeTweeters == null) { return false; } - return !tw.equals(activeTweeters); + return !tw.getUserNames().equals(activeTweeters); + } + + @ComputedProperty + static int activeTweetersCount(List activeTweeters) { + return activeTweeters.size(); } @ComputedProperty static boolean userNameToAddIsValid( - String userNameToAdd, String activeTweetersName, List savedLists, Tweeters activeTweeters + String userNameToAdd, String activeTweetersName, List savedLists, List activeTweeters ) { - return activeTweeters != null && userNameToAdd != null && + return userNameToAdd != null && userNameToAdd.matches("[a-zA-Z0-9_]{1,15}") && - !activeTweeters.getUserNames().contains(userNameToAdd); + !activeTweeters.contains(userNameToAdd); } @OnFunction static void deleteList(TwitterModel model) { final List sl = model.getSavedLists(); - sl.remove(model.getActiveTweeters()); + sl.remove(findByName(sl, model.getActiveTweetersName())); if (sl.isEmpty()) { final Tweeters t = new Tweeters(); t.setName("New"); @@ -135,20 +160,20 @@ Tweeters t = findByName(model.getSavedLists(), model.getActiveTweetersName()); int indx = model.getSavedLists().indexOf(t); if (indx != -1) { - model.getSavedLists().set(indx, model.getActiveTweeters()); - } else { - model.getSavedLists().add(model.getActiveTweeters()); + t.setName(model.getActiveTweetersName()); + t.getUserNames().clear(); + t.getUserNames().addAll(model.getActiveTweeters()); } } @OnFunction static void addUser(TwitterModel model) { String n = model.getUserNameToAdd(); - model.getActiveTweeters().getUserNames().add(n); + model.getActiveTweeters().add(n); } @OnFunction static void removeUser(String data, TwitterModel model) { - model.getActiveTweeters().getUserNames().remove(data); + model.getActiveTweeters().remove(data); } private static Tweeters findByName(List list, String name) { @@ -160,11 +185,10 @@ return list.isEmpty() ? new Tweeters() : list.get(0); } - private static Tweeters tweeters(String listName, String... userNames) { + private static Tweeters newTweeters(String listName, String... userNames) { Tweeters t = new Tweeters(); t.setName(listName); t.getUserNames().addAll(Arrays.asList(userNames)); return t; } - }