/*
* Copyright 2004 - 2008 Christian Sprajc. All rights reserved.
*
* This file is part of PowerFolder.
*
* PowerFolder is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* PowerFolder is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PowerFolder. If not, see <http://www.gnu.org/licenses/>.
*
* $Id$
*/
package de.dal33t.powerfolder.ui.friends;
import de.dal33t.powerfolder.Member;
import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.light.AccountInfo;
import de.dal33t.powerfolder.ui.util.Icons;
import de.dal33t.powerfolder.ui.util.ColorUtil;
import de.dal33t.powerfolder.ui.util.UIUtil;
import de.dal33t.powerfolder.util.Format;
import de.dal33t.powerfolder.util.Translation;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
/**
* Helper class which renders the search results
*
* @author <A HREF="mailto:schaatser@powerfolder.com">Jan van Oosterom</A>
*/
class MemberTableCellRenderer extends DefaultTableCellRenderer {
private Controller controller;
MemberTableCellRenderer(Controller controller) {
this.controller = controller;
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
int actualColumn = UIUtil.toModel(table, column);
setHorizontalAlignment(LEFT);
setIcon(null);
if (value instanceof String) {// no user found
if (actualColumn != 0) {
value = "";
}
} else if (value instanceof Member) {
Member member = (Member) value;
switch (actualColumn) {
case 0 :
value = member.getNick();
setIcon(Icons.getIconFor(member));
break;
case 1 :
value = renderAccount(member.getAccountInfo());
break;
case 2 :
if (member.isCompletelyConnected()) {
value = Translation
.getTranslation("friends_panel.connected");
} else if (member.isConnectedToNetwork()) {
if (member.isUnableToConnect()) {
value = Translation
.getTranslation("friends_panel.unable_to_connect");
} else {
value = Translation
.getTranslation("friends_panel.currently_online");
}
} else {
value = Format.formatDateShort(member.getLastConnectTime());
}
if (member.getController().isVerbose()) {
String lastMsg = member.getLastProblem() != null
? member.getLastProblem().message
: "n/a";
value = value + " (" + lastMsg + ')';
}
setHorizontalAlignment(RIGHT);
break;
// case 2 : {
// // FIXME This may cause DNS reverselookup executed in
// EDT!
// value = replaceNullWithNA(member.getHostName());
// setHorizontalAlignment(SwingConstants.RIGHT);
// break;
// }
case 3 :
value = replaceNullWithNA(member.getIP());
int port = member.getPort();
if (port != 1337) {
value = value + ":" + port;
}
setHorizontalAlignment(RIGHT);
break;
case 4 :
JCheckBox box = new JCheckBox("", member.isOnLAN());
box.setBackground(row % 2 == 0
? ColorUtil.EVEN_TABLE_ROW_COLOR
: ColorUtil.ODD_TABLE_ROW_COLOR);
box.setHorizontalAlignment(CENTER);
return box;
}
} else {
throw new IllegalStateException("don't know how to render this");
}
if (!isSelected) {
setBackground(row % 2 == 0
? ColorUtil.EVEN_TABLE_ROW_COLOR
: ColorUtil.ODD_TABLE_ROW_COLOR);
}
return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
}
private static String renderAccount(AccountInfo aInfo) {
if (aInfo != null) {
return aInfo.getDisplayName();
} else {
return "";
}
}
private static String replaceNullWithNA(String original) {
return original == null ? Translation
.getTranslation("friends_panel.n_a") : original;
}
}