/*
* AppServiceManager.java
*
* Created on January 29, 2001, 2:50 PM
*/
package org.freehep.application.services.app;
import java.awt.datatransfer.Transferable;
import java.awt.print.PageFormat;
import java.awt.print.Pageable;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import org.freehep.application.Application;
import org.freehep.application.services.FileAccess;
import org.freehep.application.services.ServiceManager;
/**
* A basic implementation of ServiceManager, for use in applications.
* @author tonyj
* @version $Id: AppServiceManager.java 8584 2006-08-10 23:06:37Z duns $
*/
public class AppServiceManager implements ServiceManager
{
private PrinterJob pj;
protected Application app;
public AppServiceManager()
{
app = Application.getApplication();
}
public PageFormat getDefaultPage()
{
if (pj == null) pj = createPrintJob();
return pj.defaultPage();
}
public PageFormat showPageFormatDialog(PageFormat page)
{
if (pj == null) pj = createPrintJob();
return pj.pageDialog(page);
}
public boolean print(Printable painter)
{
if (pj == null) pj = createPrintJob();
pj.setPrintable(painter);
return print();
}
public boolean print(Pageable document)
{
if (pj == null) pj = createPrintJob();
pj.setPageable(document);
return print();
}
private boolean print()
{
if (!pj.printDialog()) return false;
try
{
pj.print();
return true;
}
catch (PrinterException p)
{
return false;
}
finally
{
pj = null; // Do not reuse
}
}
private PrinterJob createPrintJob()
{
return PrinterJob.getPrinterJob();
}
private String userPrefFile()
{
return app.getAppProperties().getProperty("userPrefDir");
}
public void loadUserPreferences(Properties props)
{
try
{
InputStream in = new BufferedInputStream(new FileInputStream(userPrefFile()));
try
{
props.load(in);
}
finally
{
in.close();
}
}
catch (IOException x) {}
}
public void storeUserPreferences(Properties props)
{
try
{
File f = new File(userPrefFile());
if (!f.exists())
{
File parent = f.getParentFile();
if (!parent.exists()) parent.mkdirs();
}
OutputStream out = new BufferedOutputStream(new FileOutputStream(userPrefFile()));
try
{
props.store(out,app.getAppName()+" User Properties");
}
finally
{
out.close();
}
}
catch (IOException x) {}
}
public FileAccess openFileDialog(FileFilter[] filters, FileFilter defaultFilter, String key)
{
JFileChooser dlg = new JFileChooser();
Properties user = app.getUserProperties();
if (key != null)
{
String dir = user.getProperty(key);
if (dir != null) dlg.setCurrentDirectory(new File(dir));
}
if (filters != null) for (int i=0; i<filters.length; i++) dlg.addChoosableFileFilter(filters[i]);
if (defaultFilter != null) dlg.setFileFilter(defaultFilter);
if (dlg.showOpenDialog(app) == dlg.APPROVE_OPTION)
{
File file = dlg.getSelectedFile();
if (key != null) user.setProperty(key,file.getAbsolutePath());
return new AppFileAccess(file);
}
else return null;
}
public FileAccess saveFileAsDialog(FileFilter[] filters, FileFilter defaultFilter, String key, InputStream in)
{
JFileChooser dlg = new JFileChooser();
Properties user = app.getUserProperties();
if (key != null)
{
String dir = user.getProperty(key);
if (dir != null) dlg.setCurrentDirectory(new File(dir));
}
if (filters != null) for (int i=0; i<filters.length; i++) dlg.addChoosableFileFilter(filters[i]);
if (defaultFilter != null) dlg.setFileFilter(defaultFilter);
if (dlg.showSaveDialog(app) == dlg.APPROVE_OPTION)
{
File file = dlg.getSelectedFile();
if (key != null) user.setProperty(key,file.getAbsolutePath());
return new AppFileAccess(file);
}
else return null;
}
public boolean isAvailable(String part)
{
return true;
}
public boolean makeAvailable(String part)
{
return true;
}
public Transferable getClipboardContents()
{
return app.getToolkit().getSystemClipboard().getContents(null);
}
public void setClipboardContents(Transferable contents)
{
app.getToolkit().getSystemClipboard().setContents(contents,null);
}
}