package net.combase.desktopcrm.swing;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import org.apache.commons.io.IOUtils;
import net.combase.desktopcrm.data.LeadImporter;
import net.combase.desktopcrm.domain.Lead;
import net.combase.desktopcrm.swing.DataSelectionEventManager.DataSelectionActivationListener;
public class SwingWindow
{
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
NimbusLookAndFeel laf = new NimbusLookAndFeel();
UIManager.setLookAndFeel(laf);
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
SwingWindow window = new SwingWindow();
window.frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public SwingWindow()
{
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize()
{
frame = new JFrame("Sugar CRM");
frame.setBounds(100, 100, 800, 500);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnSettings = new JMenu("Settings");
menuBar.add(mnSettings);
JMenu mnHelp = new JMenu("Help");
menuBar.add(mnHelp);
JMenuItem mntmCrmSetup = new JMenuItem("CRM Setup");
mntmCrmSetup.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
CrmSettings s = new CrmSettings();
s.setVisible(true);
}
});
mnSettings.add(mntmCrmSetup);
JMenuItem mntmNotificationSetup = new JMenuItem("Notifications");
mntmNotificationSetup.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
NotificationSettings s = new NotificationSettings();
s.setVisible(true);
}
});
mnSettings.add(mntmNotificationSetup);
JMenuItem mntmAbout = new JMenuItem("About");
mntmAbout.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
About s = new About();
s.setVisible(true);
}
});
mnHelp.add(mntmAbout);
frame.getContentPane().setLayout(new BorderLayout(0, 0));
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Tasks", CrmIcons.DONE, new TaskTablePanel());
tabbedPane.addTab("Calls", CrmIcons.CALL, new CallTablePanel());
tabbedPane.addTab("Action Required", CrmIcons.BELL, new ActionRequiredTablePanel());
tabbedPane.addTab("Cases", CrmIcons.WARN, new CaseTablePanel());
tabbedPane.addTab("Leads", CrmIcons.USER, new LeadTablePanel());
tabbedPane.addTab("Search", CrmIcons.VIEW, new SearchTablePanel());
tabbedPane.addTab("E-Mail Templates", CrmIcons.MAIL, new EmailTemplateTablePanel());
frame.getContentPane().add(tabbedPane);
frame.setIconImage(CrmIcons.USER.getImage());
frame.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent we)
{
String ObjButtons[] = { "Yes", "No" };
int PromptResult = JOptionPane.showOptionDialog(
frame,
"Are you sure you want to exit? You will no longer receive CRM notification if this window is closed.",
"CRM Notifications", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
CrmIcons.WARN, ObjButtons, ObjButtons[1]);
if (PromptResult == 0)
{
System.exit(0);
}
}
});
NotificationManager.init();
DataSelectionEventManager.setDataSelActivationListener(new DataSelectionActivationListener()
{
@Override
public void initiateDataSelection()
{
tabbedPane.setSelectedIndex(5);
frame.setVisible(true);
frame.setState(Frame.NORMAL);
frame.setAlwaysOnTop(true);
frame.toFront();
frame.requestFocus();
frame.setAlwaysOnTop(false);
}
});
createDropListener(frame);
}
private void createDropListener(JFrame frame2)
{
DropTargetListener dropListener = new java.awt.dnd.DropTargetListener()
{
@Override
public void dragEnter(java.awt.dnd.DropTargetDragEvent evt)
{
evt.acceptDrag(java.awt.dnd.DnDConstants.ACTION_COPY);
}
@Override
public void dragOver(java.awt.dnd.DropTargetDragEvent evt)
{
}
@Override
public void drop(java.awt.dnd.DropTargetDropEvent evt)
{
try
{
java.awt.datatransfer.Transferable tr = evt.getTransferable();
if (tr.isDataFlavorSupported(java.awt.datatransfer.DataFlavor.javaFileListFlavor))
{
evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
@SuppressWarnings("unchecked")
List<File> fileList = (List<File>)tr.getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);
for (File file : fileList)
{
Collection<Lead> leads = LeadImporter.importFile(file);
for (Lead l : leads)
DesktopUtil.openBrowser(l.getViewUrl());
}
}
else
{
DataFlavor[] flavors = tr.getTransferDataFlavors();
boolean handled = false;
for (DataFlavor df : flavors)
{
if (df.isRepresentationClassReader())
{
evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
Reader reader = df.getReaderForText(tr);
BufferedReader br = new BufferedReader(reader);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
// Mark that drop is completed.
evt.getDropTargetContext().dropComplete(true);
handled = true;
break;
}
}
if (!handled)
{
for (DataFlavor df : flavors)
{
try
{
if (df.isRepresentationClassInputStream())
{
evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
InputStream transferData = (InputStream)tr.getTransferData(df);
char[] bArray = IOUtils.toCharArray(transferData,
"UTF-16LE");
String str = new String(bArray);
System.out.println("IS Line: " + str);
}
else if (df.isRepresentationClassByteBuffer())
{
evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
ByteBuffer bf = (ByteBuffer)tr.getTransferData(df);
String str = new String(bf.array(), "UTF-16LE");
System.out.println("byte buffer: " + str);
}
else
{
evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
System.out.println(tr.getTransferData(df));
}
}
catch (java.awt.dnd.InvalidDnDOperationException e)
{
System.err.println(e.getMessage());
}
}
}
}
}
catch (java.io.IOException | UnsupportedFlavorException io)
{
io.printStackTrace();
}
}
@Override
public void dragExit(java.awt.dnd.DropTargetEvent evt)
{
}
@Override
public void dropActionChanged(java.awt.dnd.DropTargetDragEvent evt)
{
evt.acceptDrag(java.awt.dnd.DnDConstants.ACTION_COPY);
}
};
frame.setDropTarget(new DropTarget(frame, dropListener));
}
}