/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed 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.
*/
package de.jetwick.ui;
import de.jetwick.data.JUser;
import de.jetwick.tw.TwitterSearch;
import de.jetwick.util.Helper;
import java.util.Collection;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.ContextImage;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class UserPanel extends Panel {
private final Logger logger = LoggerFactory.getLogger(getClass());
private String imageUrl = "img/jetwick-twitter.png";
private String profileLink = "http://jetsli.de/";
private String title = "Jetslide News Reader";
public UserPanel(String id, final TweetSearchPage tweetSearchRef) {
super(id);
ExternalLink profileImageLink = new ExternalLink("profileImageLink", new PropertyModel(this, "profileLink"));
profileImageLink.add(new ContextImage("profileImage", new PropertyModel(this, "imageUrl")));
profileImageLink.add(new AttributeAppender("title", new PropertyModel(this, "title"), " "));
add(profileImageLink);
add(new WebMarkupContainer("gojetslideLink") {
@Override
public boolean isVisible() {
return !tweetSearchRef.getMySession().hasLoggedIn();
}
});
Link loginLink = new Link("loginLink") {
@Override
public void onClick() {
setResponsePage(Login.class);
}
};
add(loginLink);
if (!tweetSearchRef.getMySession().hasLoggedIn()) {
add(new WebMarkupContainer("loginContainer").setVisible(false));
add(new AttributeModifier("class", "logged-in", new Model("logged-out")));
return;
}
title = tweetSearchRef.getMySession().getUser().getScreenName();
imageUrl = tweetSearchRef.getMySession().getUser().getProfileImageUrl();
profileLink = Helper.TURL + "/" + title;
loginLink.setVisible(false);
WebMarkupContainer container = new WebMarkupContainer("loginContainer") {
{
final JUser user = tweetSearchRef.getMySession().getUser();
String name = user.getRealName();
if (name == null)
name = user.getScreenName();
add(new Label("loginText", "Hi " + name + "!"));
add(new Link("logout") {
@Override
public void onClick() {
onLogout();
}
});
add(new AjaxFallbackLink("showHomeline") {
@Override
public void onClick(AjaxRequestTarget target) {
onHomeline(target, user.getScreenName());
}
});
add(new AjaxFallbackLink("showTweets") {
@Override
public void onClick(AjaxRequestTarget target) {
onShowTweets(target, user.getScreenName());
}
});
final ModalWindow modalW = new ModalWindow("userModal");
add(modalW);
add(new AjaxLink("grabTweets") {
@Override
public void onClick(AjaxRequestTarget target) {
modalW.show(target);
}
});
modalW.setTitle("Specify the user and the number of tweets you want to grab");
final GrabTweetsDialog dialog = new GrabTweetsDialog(modalW.getContentId(), user.getScreenName()) {
@Override
public TwitterSearch getTwitterSearch() {
return tweetSearchRef.getTwitterSearch();
}
@Override
public void updateAfterAjax(AjaxRequestTarget target) {
UserPanel.this.updateAfterAjax(target);
}
@Override
public void onClose(AjaxRequestTarget target) {
modalW.close(target);
}
@Override
protected Collection<String> getUserChoices(String input) {
return UserPanel.this.getUserChoices(input);
}
};
modalW.setContent(dialog);
modalW.setCloseButtonCallback(new ModalWindow.CloseButtonCallback() {
@Override
public boolean onCloseButtonClicked(AjaxRequestTarget target) {
logger.info("cancel grabber archiving thread!");
dialog.interruptGrabber();
modalW.close(target);
return true;
}
});
modalW.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
@Override
public void onClose(AjaxRequestTarget target) {
logger.info("closed dialog");
}
});
modalW.setCookieName("user-modal");
}
};
add(container);
}
protected Collection<String> getUserChoices(String input) {
throw new RuntimeException();
}
public void updateAfterAjax(AjaxRequestTarget target) {
}
public void onShowTweets(AjaxRequestTarget target, String user) {
}
public void onHomeline(AjaxRequestTarget target, String user) {
}
public void onLogout() {
}
}