package com.jakeapp.gui.swing.renderer;
import com.explodingpixels.macwidgets.MacFontUtils;
import com.jakeapp.core.domain.FileObject;
import com.jakeapp.core.domain.ILogable;
import com.jakeapp.core.domain.NoteObject;
import com.jakeapp.core.domain.Project;
import com.jakeapp.core.domain.User;
import com.jakeapp.core.domain.logentries.LogEntry;
import com.jakeapp.gui.swing.JakeMainApp;
import com.jakeapp.gui.swing.helpers.ImageLoader;
import com.jakeapp.gui.swing.helpers.NotesHelper;
import com.jakeapp.gui.swing.helpers.TimeUtilities;
import com.jakeapp.gui.swing.helpers.Translator;
import com.jakeapp.gui.swing.helpers.UserHelper;
import com.jakeapp.gui.swing.panels.NewsPanel;
import org.apache.log4j.Logger;
import org.jdesktop.application.ResourceMap;
import javax.swing.*;
import java.awt.*;
/**
* The PeopleListCellRenderer.
* Renders People info with Status Icon.
*/
public class EventCellRenderer extends DefaultJakeTableCellRenderer {
private static final Logger log = Logger.getLogger(EventCellRenderer.class);
// file actions
private final static ImageIcon fileAddIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-add.png");
private final static ImageIcon fileRemoveIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-remove.png");
private final static ImageIcon fileMoveIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-moved.png");
private final static ImageIcon fileUpdateIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-updated.png");
private final static ImageIcon fileLockIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-lock.png");
private final static ImageIcon fileUnlockIcon =
ImageLoader.get(JakeMainApp.class, "/icons/file-unlock.png");
// project actions
private final static ImageIcon projectCreatedIcon = new ImageIcon(
Toolkit.getDefaultToolkit().getImage(
JakeMainApp.class.getResource("/icons/project-created.png")));
// users actions
private final static ImageIcon peopleTrustIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-trust.png");
private final static ImageIcon peopleNoTrustIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-trust-no.png");
private final static ImageIcon peopleInviteIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-invited.png");
private final static ImageIcon peopleAcceptInvitationIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-invite-ok.png");
private final static ImageIcon peopleRejectInvitationIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-invite-rejected.png");
private final static ImageIcon peopleTrustFullIcon =
ImageLoader.get(JakeMainApp.class, "/icons/user-trust-full.png");
// tag actions
private final static ImageIcon tagAddIcon =
ImageLoader.get(JakeMainApp.class, "/icons/" + "tags-add.png");
private final static ImageIcon tagRemoveIcon =
ImageLoader.get(JakeMainApp.class, "/icons/" + "tags-remove.png");
// note actions
private final static ImageIcon noteAddIcon =
ImageLoader.get(JakeMainApp.class, "/icons/" + "note-add.png");
private final static ImageIcon noteRemoveIcon =
ImageLoader.get(JakeMainApp.class, "/icons/" + "note-remove.png");
private final static ImageIcon noteUpdateIcon =
ImageLoader.get(JakeMainApp.class, "/icons/" + "note-updated.png");
// get notes resource map
private static final ResourceMap newsResourceMap =
org.jdesktop.application.Application
.getInstance(com.jakeapp.gui.swing.JakeMainApp.class).getContext()
.getResourceMap(NewsPanel.class);
public EventCellRenderer() {
log.trace("Init EventCellRenderer.");
}
/* This is the only method defined by DefaultTableCellRenderer. We just
* reconfigure the Jlabel each time we're called.
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
LogEntry loge = (LogEntry) value;
String msg = "";
// begin the string with e.g. "You" or "Peter" (Nicknames/FullNames)
msg += UserHelper.getLocalizedUserNick(loge.getMember()) + " ";
/* Build the String and set the operation Icon.
*/
boolean isNote = loge.getBelongsTo() instanceof NoteObject;
String type = (isNote ? "Note" : "File");
switch (loge.getLogAction()) {
/*case JAKE_OBJECT_NEW_VERSION: {
setIcon(fileAddIcon);
msg += Translator.get(newsResourceMap, "eventsAddedFile", loge.getBelongsTo().toString());
}
break;*/
case JAKE_OBJECT_DELETE: {
setIcon((isNote ? noteRemoveIcon : fileRemoveIcon));
msg += Translator.get(newsResourceMap, "eventsRemoved" + type,
getJakeObjectTitle(loge.getBelongsTo()));
}
break;
case JAKE_OBJECT_NEW_VERSION: {
setIcon((isNote ? noteUpdateIcon : fileUpdateIcon));
msg += Translator.get(newsResourceMap, "eventsUpdated" + type,
getJakeObjectTitle(loge.getBelongsTo()));
}
break;
case PROJECT_CREATED: {
setIcon(projectCreatedIcon);
msg += Translator.get(newsResourceMap, "eventsProjectCreated",
((Project) loge.getBelongsTo()).getName());
}
break;
case JAKE_OBJECT_LOCK: {
setIcon(fileLockIcon);
msg += Translator.get(newsResourceMap, "eventsObjectLock",
getJakeObjectTitle(loge.getBelongsTo()));
}
break;
case JAKE_OBJECT_UNLOCK: {
setIcon(fileUnlockIcon);
msg += Translator.get(newsResourceMap, "eventsObjectUnlock",
getJakeObjectTitle(loge.getBelongsTo()));
}
break;
case PROJECT_JOINED: {
setIcon(peopleAcceptInvitationIcon);
msg += Translator
.get(newsResourceMap, "eventsProjectMemberInvitationAccepted");
}
break;
case PROJECT_REJECTED: {
setIcon(peopleRejectInvitationIcon);
msg += Translator
.get(newsResourceMap, "eventsProjectMemberInvitationRejected");
}
break;
case START_TRUSTING_PROJECTMEMBER: {
setIcon(peopleTrustIcon);
msg += Translator.get(newsResourceMap, "eventsProjectMemberTrust",
((User) loge.getBelongsTo()).getUserId());
}
break;
case STOP_TRUSTING_PROJECTMEMBER: {
setIcon(peopleNoTrustIcon);
msg += Translator.get(newsResourceMap, "eventsProjectMemberStopTrust",
((User) loge.getBelongsTo()).getUserId());
}
break;
case FOLLOW_TRUSTING_PROJECTMEMBER: {
setIcon(peopleTrustFullIcon);
msg += Translator.get(newsResourceMap, "eventsProjectMemberFullTrust",
((User) loge.getBelongsTo()).getUserId());
}
break;
case PROJECTMEMBER_INVITED: {
setIcon(peopleInviteIcon);
msg += Translator.get(newsResourceMap, "eventsProjectMemberInvited",
((User) loge.getBelongsTo()).getUserId());
}
break;
case TAG_ADD: {
setIcon(tagAddIcon);
msg += Translator.get(newsResourceMap, "eventsTagsAdd",
((User) loge.getBelongsTo()).getUserId());
}
break;
case TAG_REMOVE: {
setIcon(tagRemoveIcon);
msg += Translator.get(newsResourceMap, "eventsTagsRemove",
((User) loge.getBelongsTo()).getUserId());
}
break;
default: {
log.warn("Unsupported action: " + loge.getLogAction());
setIcon(null);
msg += loge.getLogAction();
}
}
// do not insert html as this auto-wraps messages (not wanted)
String valStr = msg;
/* The DefaultListCellRenderer class will take care of
* the JLabels text property, it's foreground and background
* colors, and so on.
*/
super.getTableCellRendererComponent(table, valStr, isSelected, hasFocus, row,
column);
String comment = "";
if (loge.getComment() != null && loge.getComment().length() > 0) {
comment = "<br><b>Comment: " + loge.getComment() + "</b>";
}
// set the tooltip text
setToolTipText(
"<html><font size=3>" + this.getText() + "</font><br>" + TimeUtilities
.getRelativeTime(loge.getTimestamp()) + " (" + loge
.getTimestamp().toGMTString() + ")" + comment + "<br>" + this
.toString() + "</html>");
setFont(MacFontUtils.ITUNES_FONT);
return this;
}
private String getJakeObjectTitle(ILogable belongsTo) {
if (belongsTo instanceof NoteObject) {
NoteObject note = (NoteObject) belongsTo;
return NotesHelper.getTitle(note);
} else if (belongsTo instanceof FileObject) {
FileObject file = (FileObject) belongsTo;
return file.getRelPath();
}
// fallback
return belongsTo.toString();
}
}