/**
*
*/
package net.combase.desktopcrm.swing;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JButton;
import javax.swing.table.AbstractTableModel;
import net.combase.desktopcrm.data.AsteriskManager;
import net.combase.desktopcrm.domain.AbstractCrmObject;
import net.combase.desktopcrm.domain.Lead;
/**
* @author "Till Freier"
*
*/
public class SearchTableModel extends AbstractTableModel
{
/**
*
*/
private static final long serialVersionUID = -8394157828871760312L;
private static final String[] COLUMN_NAMES = new String[] { "Type", "Name", "", "", "" };
private static final Class<?>[] COLUMN_TYPES = new Class<?>[] { String.class, String.class,
JButton.class, JButton.class, JButton.class };
private final List<AbstractCrmObject> data;
public SearchTableModel(List<AbstractCrmObject> data)
{
super();
this.data = data;
}
public void update(List<AbstractCrmObject> tasks)
{
data.clear();
data.addAll(tasks);
fireTableDataChanged();
}
@Override
public String getColumnName(int columnIndex)
{
return COLUMN_NAMES[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
return COLUMN_TYPES[columnIndex];
}
@Override
public Object getValueAt(final int rowIndex, final int columnIndex)
{
/* Adding components */
AbstractCrmObject task = data.get(rowIndex);
switch (columnIndex)
{
case 0 :
return task.getClass().getSimpleName();
case 1 :
return task.getTitle();
case 2 :
return createViewButton(task);
case 3:
return createEmailButton(task);
case 4:
return createCallButton(task);
default :
return "Error";
}
}
private JButton createViewButton(final AbstractCrmObject task)
{
final JButton button = new JButton();
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
DesktopUtil.openBrowser(task.getViewUrl());
}
});
button.setBackground(new Color(90, 115, 255, 100));
button.setIcon(CrmIcons.VIEW);
button.setToolTipText("View " + task.getClass().getSimpleName());
return button;
}
private JButton createCallButton(final AbstractCrmObject task)
{
String no = null;
if (task instanceof Lead)
{
Lead lead = (Lead) task;
no = lead.getPhone();
}
final JButton button = new JButton();
final String number = no;
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0)
{
AsteriskManager.dial(number);
}
});
button.setEnabled(no != null && !no.isEmpty());
button.setBackground(new Color(90, 90, 90, 100));
button.setIcon(CrmIcons.CALL);
button.setToolTipText("Call " + no);
return button;
}
private JButton createEmailButton(final AbstractCrmObject task)
{
String mail = null;
if (task instanceof Lead)
{
Lead lead = (Lead) task;
mail = lead.getEmail();
}
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0)
{
SendEmailDialog.sendEmail(null, "", Arrays.asList((Lead) task));
}
});
button.setEnabled(mail != null && !mail.isEmpty());
button.setBackground(new Color(255, 255, 255, 100));
button.setIcon(CrmIcons.MAIL);
button.setToolTipText("email " + task.getClass().getSimpleName());
return button;
}
@Override
public int getRowCount()
{
return data.size();
}
@Override
public int getColumnCount()
{
return COLUMN_NAMES.length;
}
public List<AbstractCrmObject> getData()
{
return new ArrayList<AbstractCrmObject>(data);
}
}