package com.jds.jn.logs;
import java.awt.HeadlessException;
import java.io.File;
import java.util.HashMap;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import com.jds.jn.config.RValues;
import com.jds.jn.gui.forms.MainForm;
import com.jds.jn.logs.writers.AbstractWriter;
import com.jds.jn.logs.writers.JNL2Writer;
import com.jds.jn.session.Session;
import com.jds.jn.util.RunnableImpl;
import com.jds.jn.util.ThreadPoolManager;
/**
* Author: VISTALL
* Company: J Develop Station
* Date: 23.09.2009
* Time: 21:41:42
*/
public class Writer
{
private static Writer _instance;
private HashMap<String, AbstractWriter> _writers = new HashMap<String, AbstractWriter>();
public static Writer getInstance()
{
if (_instance == null)
{
_instance = new Writer();
}
return _instance;
}
private Writer()
{
addWriter(new JNL2Writer());
}
public void addWriter(AbstractWriter r)
{
_writers.put(r.getFileExtension(), r);
}
public void chooseDialog()
{
try
{
final JFileChooser c = new JFileChooser(RValues.LAST_FOLDER.asString());
for(AbstractWriter w : _writers.values())
c.addChoosableFileFilter(new WriterFileFilter(w));
c.setAcceptAllFileFilterUsed(false);
final int r = c.showSaveDialog(MainForm.getInstance());
if (r == JFileChooser.APPROVE_OPTION)
{
ThreadPoolManager.getInstance().execute(new RunnableImpl()
{
@Override
public void runImpl()
{
Session session = MainForm.getInstance().getViewTabbedPane().getSelectedComponent().getSession();
if (session == null)
{
return;
}
AbstractWriter w = ((WriterFileFilter)c.getFileFilter()).getWriter();
try
{
if(!c.getSelectedFile().getName().contains(w.getFileExtension()))
{
w.write(new File(c.getSelectedFile().getAbsolutePath() + "." + w.getFileExtension()), session);
}
else
{
w.write(c.getSelectedFile(), session);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
}
catch (HeadlessException e)
{
e.printStackTrace();
}
}
private class WriterFileFilter extends FileFilter
{
private final AbstractWriter _writer;
public WriterFileFilter(AbstractWriter writer)
{
_writer = writer;
}
@Override
public boolean accept(File f)
{
return f.isDirectory() || f.isFile() && f.getName().endsWith("." + _writer.getFileExtension());
}
@Override
public String getDescription()
{
return String.format("%s (.%s)", _writer.getWriterInfo(), _writer.getFileExtension());
}
public AbstractWriter getWriter()
{
return _writer;
}
}
}