blob: ca93900b71a129a48cb60e7fbc4af0273fc5a4ba [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* Created by IntelliJ IDEA.
* User: Danno.Ferrin
* Date: Apr 26, 2008
* Time: 8:32:03 AM
*/
package groovy.swing.greet
import groovy.beans.Bindable
import groovy.swing.SwingBuilder
import javax.swing.JOptionPane
class Greet {
TwitterAPI api
Binding view
@Bindable boolean allowLogin = true
@Bindable boolean allowSelection = true
@Bindable boolean allowTweet = true
@Bindable def focusedUser = ""
@Bindable def friends = []
@Bindable def tweets = []
@Bindable def timeline = []
@Bindable def statuses = []
void startUp() {
setAllowSelection(false)
setAllowTweet(false)
view.greetFrame.show()
view.loginDialog.show()
}
void login(evt) {
setAllowLogin(false)
view.doOutside {
try {
if (api.login(view.twitterNameField.text, view.twitterPasswordField.password)) {
setFriends(api.getFriends(api.authenticatedUser))
friends.each {it.status.user = [screen_name:it.screen_name, profile_image_url:it.profile_image_url] }
setStatuses(friends.collect {it.status})
selectUser(api.authenticatedUser)
view.greetFrame.show()
view.loginDialog.dispose()
} else {
JOptionPane.showMessageDialog(view.loginDialog, "Login failed")
}
} catch (Exception e) {
e.printStackTrace()
} finally {
view.edt {
setAllowLogin(true)
setAllowSelection(true)
setAllowTweet(true)
}
}
}
}
void filterTweets(evt = null) {
setAllowSelection(false)
setAllowTweet(false)
view.doOutside {
try {
setStatuses(
friends.collect {it.status}.findAll {it.text =~ view.searchField.text}
)
setTimeline(
api.getFriendsTimeline(focusedUser).findAll {it.text =~ view.searchField.text}
)
setTweets(
api.getTweets(focusedUser).findAll {it.text =~ view.searchField.text}
)
} catch (Exception e) {
e.printStackTrace()
} finally {
view.edt {
setAllowSelection(true)
setAllowTweet(true)
}
}
}
}
def userSelected(evt) {
view.doOutside {
selectUser(view.users.selectedItem)
}
}
def selectUser(user) {
setAllowSelection(false)
setAllowTweet(false)
try {
setFocusedUser(api.getUser(user.screen_name as String))
setTweets(api.getTweets(focusedUser).findAll {it.text =~ view.searchField.text})
setTimeline(api.getFriendsTimeline(focusedUser).findAll {it.text =~ view.searchField.text})
} finally {
view.edt {
setAllowSelection(true)
setAllowTweet(true)
}
}
}
def tweet(evt = null) {
setAllowTweet(false)
view.doOutside {
try {
api.tweet(view.tweetBox.text)
// true story: it froze w/o the EDT call here
view.edt {tweetBox.text = ""}
filterTweets()
} finally {
setAllowTweet(true)
}
}
}
public static void main(String[] args) {
def model = new TwitterAPI()
def controller = new Greet()
def view = new SwingBuilder()
controller.api = model
controller.view = view
view.controller = controller
view.build(View)
view.view = view
controller.startUp()
}
}