javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java
branchmodel
changeset 956 7fc6b7e9c982
parent 955 dad881565d0a
child 961 3cdaee10e72b
     1.1 --- a/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java	Mon Apr 08 18:26:11 2013 +0200
     1.2 +++ b/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java	Mon Apr 08 19:30:22 2013 +0200
     1.3 @@ -31,7 +31,7 @@
     1.4  @Page(xhtml="index.html", className="TwitterModel", properties={
     1.5      @Property(name="savedLists", type=TwitterClient.Twttrs.class, array = true),
     1.6      @Property(name="activeTweetersName", type=String.class),
     1.7 -    @Property(name="activeTweeters", type=TwitterClient.Twttrs.class),
     1.8 +    @Property(name="activeTweeters", type=String.class, array = true),
     1.9      @Property(name="userNameToAdd", type=String.class),
    1.10      @Property(name="currentTweets", type=TwitterClient.Twt.class, array = true)
    1.11  })
    1.12 @@ -50,6 +50,28 @@
    1.13          @Property(name = "created_at", type = String.class),
    1.14      })
    1.15      static final class Twt {
    1.16 +        @ComputedProperty static String html(String text) {
    1.17 +            StringBuilder sb = new StringBuilder(320);
    1.18 +            for (int pos = 0;;) {
    1.19 +                int http = text.indexOf("http", pos);
    1.20 +                if (http == -1) {
    1.21 +                    sb.append(text.substring(pos));
    1.22 +                    return sb.toString();
    1.23 +                }
    1.24 +                int spc = text.indexOf(' ', http);
    1.25 +                if (spc == -1) {
    1.26 +                    spc = text.length();
    1.27 +                }
    1.28 +                sb.append(text.substring(pos, http));
    1.29 +                String url = text.substring(http, spc);
    1.30 +                sb.append("<a href='").append(url).append("'>").append(url).append("</a>");
    1.31 +                pos = spc;
    1.32 +            }
    1.33 +        }
    1.34 +        
    1.35 +        @ComputedProperty static String userUrl(String from_user) {
    1.36 +            return "http://twitter.com/" + from_user;
    1.37 +        }
    1.38      }
    1.39      @Model(className = "TwitterQuery", properties = {
    1.40          @Property(array = true, name = "results", type = Twt.class)
    1.41 @@ -66,34 +88,32 @@
    1.42      @OnPropertyChange("activeTweetersName")
    1.43      static void changeTweetersList(TwitterModel model) {
    1.44          Tweeters people = findByName(model.getSavedLists(), model.getActiveTweetersName());        
    1.45 -        model.setActiveTweeters(people.clone());
    1.46 +        model.getActiveTweeters().clear();
    1.47 +        model.getActiveTweeters().addAll(people.getUserNames());
    1.48      }
    1.49      
    1.50 -    @OnPropertyChange("activeTweeters")
    1.51 +    @OnPropertyChange({ "activeTweeters", "activeTweetersCount" })
    1.52      static void refreshTweets(TwitterModel model) {
    1.53 -        Tweeters people = model.getActiveTweeters();
    1.54 -        if (people != null) {
    1.55 -            StringBuilder sb = new StringBuilder();
    1.56 -            sb.append("rpp=25&q=");
    1.57 -            String sep = "";
    1.58 -            for (String p : people.getUserNames()) {
    1.59 -                sb.append(sep);
    1.60 -                sb.append("from:");
    1.61 -                sb.append(p);
    1.62 -                sep = " OR ";
    1.63 -            }
    1.64 -            model.queryTweets("http://search.twitter.com", sb.toString());
    1.65 +        StringBuilder sb = new StringBuilder();
    1.66 +        sb.append("rpp=25&q=");
    1.67 +        String sep = "";
    1.68 +        for (String p : model.getActiveTweeters()) {
    1.69 +            sb.append(sep);
    1.70 +            sb.append("from:");
    1.71 +            sb.append(p);
    1.72 +            sep = " OR ";
    1.73          }
    1.74 +        model.queryTweets("http://search.twitter.com", sb.toString());
    1.75      }
    1.76      
    1.77      static {
    1.78          final TwitterModel model = new TwitterModel();
    1.79          final List<Tweeters> svdLst = model.getSavedLists();
    1.80 -        svdLst.add(tweeters("API Design", "JaroslavTulach"));
    1.81 -        svdLst.add(tweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson"));
    1.82 -        svdLst.add(tweeters("Microsoft people", "BillGates", "shanselman", "ScottGu"));
    1.83 -        svdLst.add(tweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans"));
    1.84 -        svdLst.add(tweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror"));
    1.85 +        svdLst.add(newTweeters("API Design", "JaroslavTulach"));
    1.86 +        svdLst.add(newTweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson"));
    1.87 +        svdLst.add(newTweeters("Microsoft people", "BillGates", "shanselman", "ScottGu"));
    1.88 +        svdLst.add(newTweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans", "petrjiricka"));
    1.89 +        svdLst.add(newTweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror"));
    1.90  
    1.91          model.setActiveTweetersName("NetBeans");
    1.92  
    1.93 @@ -101,27 +121,32 @@
    1.94      }
    1.95      
    1.96      @ComputedProperty
    1.97 -    static boolean hasUnsavedChanges(Tweeters activeTweeters, List<Tweeters> savedLists, String activeTweetersName) {
    1.98 +    static boolean hasUnsavedChanges(List<String> activeTweeters, List<Tweeters> savedLists, String activeTweetersName) {
    1.99          Tweeters tw = findByName(savedLists, activeTweetersName);
   1.100          if (activeTweeters == null) {
   1.101              return false;
   1.102          }
   1.103 -        return !tw.equals(activeTweeters);
   1.104 +        return !tw.getUserNames().equals(activeTweeters);
   1.105 +    }
   1.106 +    
   1.107 +    @ComputedProperty
   1.108 +    static int activeTweetersCount(List<String> activeTweeters) {
   1.109 +        return activeTweeters.size();
   1.110      }
   1.111      
   1.112      @ComputedProperty
   1.113      static boolean userNameToAddIsValid(
   1.114 -        String userNameToAdd, String activeTweetersName, List<Tweeters> savedLists, Tweeters activeTweeters
   1.115 +        String userNameToAdd, String activeTweetersName, List<Tweeters> savedLists, List<String> activeTweeters
   1.116      ) {
   1.117 -        return activeTweeters != null && userNameToAdd != null && 
   1.118 +        return userNameToAdd != null && 
   1.119              userNameToAdd.matches("[a-zA-Z0-9_]{1,15}") &&
   1.120 -            !activeTweeters.getUserNames().contains(userNameToAdd);
   1.121 +            !activeTweeters.contains(userNameToAdd);
   1.122      }
   1.123      
   1.124      @OnFunction
   1.125      static void deleteList(TwitterModel model) {
   1.126          final List<Tweeters> sl = model.getSavedLists();
   1.127 -        sl.remove(model.getActiveTweeters());
   1.128 +        sl.remove(findByName(sl, model.getActiveTweetersName()));
   1.129          if (sl.isEmpty()) {
   1.130              final Tweeters t = new Tweeters();
   1.131              t.setName("New");
   1.132 @@ -135,20 +160,20 @@
   1.133          Tweeters t = findByName(model.getSavedLists(), model.getActiveTweetersName());
   1.134          int indx = model.getSavedLists().indexOf(t);
   1.135          if (indx != -1) {
   1.136 -            model.getSavedLists().set(indx, model.getActiveTweeters());
   1.137 -        } else {
   1.138 -            model.getSavedLists().add(model.getActiveTweeters());
   1.139 +            t.setName(model.getActiveTweetersName());
   1.140 +            t.getUserNames().clear();
   1.141 +            t.getUserNames().addAll(model.getActiveTweeters());
   1.142          }
   1.143      }
   1.144      
   1.145      @OnFunction
   1.146      static void addUser(TwitterModel model) {
   1.147          String n = model.getUserNameToAdd();
   1.148 -        model.getActiveTweeters().getUserNames().add(n);
   1.149 +        model.getActiveTweeters().add(n);
   1.150      }
   1.151      @OnFunction
   1.152      static void removeUser(String data, TwitterModel model) {
   1.153 -        model.getActiveTweeters().getUserNames().remove(data);
   1.154 +        model.getActiveTweeters().remove(data);
   1.155      }
   1.156      
   1.157      private static Tweeters findByName(List<Tweeters> list, String name) {
   1.158 @@ -160,11 +185,10 @@
   1.159          return list.isEmpty() ? new Tweeters() : list.get(0);
   1.160      }
   1.161      
   1.162 -    private static Tweeters tweeters(String listName, String... userNames) {
   1.163 +    private static Tweeters newTweeters(String listName, String... userNames) {
   1.164          Tweeters t = new Tweeters();
   1.165          t.setName(listName);
   1.166          t.getUserNames().addAll(Arrays.asList(userNames));
   1.167          return t;
   1.168      }
   1.169 -    
   1.170  }