javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java
Knockout.js Twitter client example rewritten to Bck2Brwsr (just missing JSON access to tweets)
2 * Back 2 Browser Bytecode Translator
3 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 2 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. Look for COPYING file in the top folder.
16 * If not, see http://opensource.org/licenses/GPL-2.0.
18 package org.apidesign.bck2brwsr.demo.twitter;
20 import java.util.Arrays;
21 import java.util.List;
22 import org.apidesign.bck2brwsr.htmlpage.api.*;
23 import org.apidesign.bck2brwsr.htmlpage.api.Page;
24 import org.apidesign.bck2brwsr.htmlpage.api.Property;
25 import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
27 /** Controller class for access to Twitter.
29 * @author Jaroslav Tulach
31 @Page(xhtml="index.html", className="TwitterModel", properties={
32 @Property(name="savedLists", type=TwitterClient.Twttrs.class, array = true),
33 @Property(name="activeTweetersName", type=String.class),
34 @Property(name="modifiedList", type=TwitterClient.Twttrs.class),
35 @Property(name="userNameToAdd", type=String.class),
36 @Property(name="currentTweets", type=String.class, array = true)
38 public class TwitterClient {
39 @Model(className = "Tweeters", properties = {
40 @Property(name="name", type = String.class),
41 @Property(name="userNames", type = String.class, array = true)
46 private static Tweeters tweeters(String listName, String... userNames) {
47 Tweeters t = new Tweeters();
49 t.getUserNames().addAll(Arrays.asList(userNames));
54 final TwitterModel model = new TwitterModel();
55 final List<Tweeters> svdLst = model.getSavedLists();
56 svdLst.add(tweeters("API Design", "JaroslavTulach"));
57 svdLst.add(tweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson"));
58 svdLst.add(tweeters("Microsoft people", "BillGates", "shanselman", "ScottGu"));
59 svdLst.add(tweeters("NetBeans", "GeertjanW","monacotoni", "NetBeans"));
60 svdLst.add(tweeters("Tech pundits", "Scobleizer", "LeoLaporte", "techcrunch", "BoingBoing", "timoreilly", "codinghorror"));
62 model.setActiveTweetersName("NetBeans");
64 model.applyBindings();
68 static Tweeters activeTweeters(String activeTweetersName, List<Tweeters> savedLists, Tweeters modifiedList) {
69 if (modifiedList != null && modifiedList.getName() != null) {
70 if (modifiedList.getName().equals(activeTweetersName)) {
73 modifiedList.setName(null);
76 return findByName(savedLists, activeTweetersName);
80 static boolean hasUnsavedChanges(Tweeters modifiedList) {
81 return modifiedList != null;
85 static boolean userNameToAddIsValid(String userNameToAdd, String activeTweetersName, List<Tweeters> savedLists, Tweeters modifiedList) {
86 Tweeters editingList = activeTweeters(activeTweetersName, savedLists, modifiedList);
87 return editingList != null && userNameToAdd != null &&
88 userNameToAdd.matches("[a-zA-Z0-9_]{1,15}") &&
89 !editingList.getUserNames().contains(userNameToAdd);
93 static void deleteList(TwitterModel model) {
94 final List<Tweeters> sl = model.getSavedLists();
95 sl.remove(model.getActiveTweeters());
97 final Tweeters t = new Tweeters();
101 model.setActiveTweetersName(sl.get(0).getName());
105 static void saveChanges(TwitterModel model) {
106 Tweeters t = findByName(model.getSavedLists(), model.getActiveTweetersName());
107 int indx = model.getSavedLists().indexOf(t);
109 model.getSavedLists().set(indx, model.getModifiedList());
110 model.setModifiedList(null);
114 static void addUser(TwitterModel model) {
115 String n = model.getUserNameToAdd();
116 findModifiedList(model).getUserNames().add(n);
119 static void removeUser(String data, TwitterModel model) {
120 findModifiedList(model).getUserNames().remove(data);
123 private static Tweeters findModifiedList(TwitterModel model) {
124 if (model.getModifiedList() == null || model.getModifiedList().getName() == null) {
125 model.setModifiedList(model.getActiveTweeters().clone());
127 return model.getModifiedList();
129 private static Tweeters findByName(List<Tweeters> list, String name) {
130 for (Tweeters l : list) {
131 if (l.getName() != null && l.getName().equals(name)) {
135 return list.isEmpty() ? null : list.get(0);