package uk.co.mmscomputing.application.faxsender;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.text.*;
import uk.co.mmscomputing.device.fax.*;
import uk.co.mmscomputing.util.JarImageIcon;
import uk.co.mmscomputing.application.imageviewer.*;
/*
Use ghostscript to convert *.ps or *.pdf file to *.sff file
gs -q -dNOPAUSE -dBATCH -r200 -sOutputFile=test1.sff -sDEVICE=cfax test.ps
*/
public class FaxSenderTab extends ScannerTab implements FaxSenderListener{
public FaxSenderTab(Properties properties){
super(properties);
}
protected void setButtonPanel(JPanel gui){
super.setButtonPanel(gui);
JPanel buttonPanel=new JPanel();
buttonPanel.setLayout(new GridLayout(0,1));
buttonPanel.add(new JButton(getScaleAction()));
gui.add(buttonPanel);
FaxSender faxsender=FaxSender.getDevice();
if(faxsender!=null){
faxsender.addListener(this);
gui.add(faxsender.getGUI(properties));
}
}
public Action getScaleAction(){
return new AbstractAction("<html><center>convert to <br><b>Fax Format</b></center></html>"){
public void actionPerformed(ActionEvent ev){
scale();
}
};
}
public void scale(){
for(int i=0; i<images.getTabCount(); i++){
JScrollPane sp=(JScrollPane)images.getComponentAt(i);
ImagePanel ip=(ImagePanel)sp.getViewport().getView();
BufferedImage original=ip.getImage();
/*
Width
G3 FAX 1728 * 2256 A4
B4 2048
A3 2432
*/
if(1728<original.getWidth()){ // if original is wider than A4 width: scale it down
double sf=1728.0/original.getWidth();
BufferedImage image=new BufferedImage(1728,(int)(original.getHeight()*sf),BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g=image.createGraphics();
AffineTransform t=new AffineTransform();
t.scale(sf,sf);
g.drawRenderedImage(original,t);
ip.setImage(image);
}else if(original.getWidth()<1728){ // if smaller just copy
BufferedImage image=new BufferedImage(1728,original.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g=image.createGraphics();
AffineTransform t=new AffineTransform();
g.setPaint(Color.white);
g.fill(new Rectangle(0,0,image.getWidth(),image.getHeight()));
g.drawRenderedImage(original,t);
ip.setImage(image);
}else if(original.getType()!=BufferedImage.TYPE_BYTE_BINARY){
BufferedImage image=new BufferedImage(1728,original.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g=image.createGraphics();
AffineTransform t=new AffineTransform();
g.drawRenderedImage(original,t);
ip.setImage(image);
}
ip.revalidate();ip.repaint();
}
}
public void update(FaxSenderMetadata.Type type, final FaxSenderMetadata md){
if(type.equals(FaxSenderMetadata.GETFILE)){ // application needs to set metadata
md.setFile(getFile()); // get name of file we want to fax
md.setHeader(properties.getProperty(FaxConstants.faxHeaderID));
md.setLocalNo(properties.getProperty(FaxConstants.faxLocalNoID));
md.setRemoteNo(properties.getProperty(FaxConstants.faxRemoteNoID));
int time=Integer.valueOf(properties.getProperty(FaxConstants.faxTimeOutID)).intValue();
md.setTimeOut(time);
md.progressmonitor=true; // want a progress monitor (opens only once data will be send)
}else if(type.equals(FaxSenderMetadata.STATE)){ // in what state are we
int state=md.getState();
switch(state){
case FaxConstants.faxRinging:
System.out.println("Ringing ... "+md.getRemoteNo());
break;
case FaxConstants.faxConnected:
System.out.println("Sending ... "+md.getRemoteNo());
break;
case FaxConstants.faxDisconnected:
System.out.println("Disconnected ... "+md.getRemoteNo());
break;
}
}else if(type.equals(FaxSenderMetadata.INFO)){
System.out.println(md.getInfo());
}else if(type.equals(FaxSenderMetadata.EXCEPTION)){
System.out.println("9\b"+md.getException().getMessage());
}
}
static final protected SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_");
private String getFile(){
try{
String date = sdf.format(Calendar.getInstance().getTime());
String sendDir = properties.getProperty(FaxConstants.faxSenderFileDirID);
String remoteno = properties.getProperty(FaxConstants.faxRemoteNoID);
String rno = remoteno.replace('*','0').replace('#','0'); // PBX
String srcfile = sendDir+File.separator+date+rno+".sff";
properties.setProperty(FaxConstants.faxFileID,srcfile);
new File(sendDir).mkdirs();
save(srcfile);
return srcfile;
}catch(Exception e){
System.out.println("9\b"+getClass().getName()+".sendFax:\n\t"+e.getMessage());
e.printStackTrace();
return null;
}
}
}