/* * RapidMiner * * Copyright (C) 2001-2011 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.repository.gui.process; import java.awt.Component; import java.text.DateFormat; import java.util.Calendar; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import com.rapid_i.repository.wsimport.ProcessResponse; import com.rapid_i.repository.wsimport.ProcessStackTraceElement; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.repository.RemoteProcessState; import com.rapidminer.repository.remote.RemoteRepository; import com.rapidminer.tools.Tools; /** * * @author Simon Fischer * */ public class RemoteProcessTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 1L; private Icon PROCESS_PENDING_ICON = SwingTools.createIcon("16/gear_new.png"); private Icon PROCESS_RUNNING_ICON = SwingTools.createIcon("16/gear_run.png"); private Icon PROCESS_STOPPED_ICON = SwingTools.createIcon("16/gear_stop.png"); private Icon PROCESS_FAILED_ICON = SwingTools.createIcon("16/gear_error.png"); private Icon PROCESS_DONE_ICON = SwingTools.createIcon("16/gear_ok.png"); private Icon PROCESS_ZOMBIE_ICON = SwingTools.createIcon("16/skull.png"); private Icon SERVER_ICON = SwingTools.createIcon("16/application_server_run.png"); private Icon OPERATOR_ICON = SwingTools.createIcon("16/element_selection.png"); private Icon RESULT_ICON = SwingTools.createIcon("16/plug_new_next.png"); @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); if (value instanceof RemoteRepository) { label.setText(((RemoteRepository) value).getName()); label.setIcon(SERVER_ICON); } else if (value instanceof ProcessResponse) { ProcessResponse processResponse = (ProcessResponse) value; RemoteProcessState processState = RemoteProcessState.valueOf(processResponse.getState()); Calendar startTime = processResponse.getStartTime() != null ? processResponse.getStartTime().toGregorianCalendar() : null; Calendar endTime = processResponse.getCompletionTime() != null ? processResponse.getCompletionTime().toGregorianCalendar() : null; StringBuilder b = new StringBuilder(); b.append("<html><body>"); b.append(""+processResponse.getProcessLocation()); b.append(" <small style=\"color:gray\">("); if (processState != RemoteProcessState.COMPLETED) { // completed is obvious from completion time if (processState == RemoteProcessState.FAILED) { b.append("<span style=\"color:red;font-weight:bold;\">"); } b.append(processState.toString().toLowerCase()).append("; "); if (processState == RemoteProcessState.FAILED) { b.append("</span>"); } } if (startTime != null) { b.append("started "); b.append(DateFormat.getDateTimeInstance().format(startTime.getTime())); } if (endTime != null) { b.append("; completed "); b.append(DateFormat.getDateTimeInstance().format(endTime.getTime())); } b.append(")</small>"); b.append("</body></html>"); label.setText(b.toString()); switch (processState) { case COMPLETED: label.setIcon(PROCESS_DONE_ICON); break; case FAILED: label.setIcon(PROCESS_FAILED_ICON); break; case RUNNING: label.setIcon(PROCESS_RUNNING_ICON); break; case PENDING: label.setIcon(PROCESS_PENDING_ICON); break; case STOPPED: label.setIcon(PROCESS_STOPPED_ICON); break; case ZOMBIE: label.setIcon(PROCESS_ZOMBIE_ICON); break; } } else if (value instanceof ProcessStackTraceElement) { ProcessStackTraceElement element = (ProcessStackTraceElement) value; label.setText(element.getOperatorName() + " ["+element.getApplyCount()+", "+Tools.formatDuration(element.getExecutionTime())+"]"); label.setIcon(OPERATOR_ICON); } else if (value instanceof OutputLocation) { label.setText(value.toString()); label.setIcon(RESULT_ICON); } else { label.setText(value.toString()); } return label; } }