Author: kmorin Date: 2014-03-24 16:55:50 +0100 (Mon, 24 Mar 2014) New Revision: 22 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/22 Log: refs #4666 [ECRAN] Pi?\195?\168ces jointes Modified: trunk/faxtomail-ui-swing/pom.xml trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/JImagePanel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentItem.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIHandler.java Modified: trunk/faxtomail-ui-swing/pom.xml =================================================================== --- trunk/faxtomail-ui-swing/pom.xml 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/pom.xml 2014-03-24 15:55:50 UTC (rev 22) @@ -258,8 +258,23 @@ <artifactId>pdf-renderer</artifactId> </dependency> + <dependency> + <groupId>javax.media.jai</groupId> + <artifactId>com.springsource.javax.media.jai.core</artifactId> + <version>1.1.3</version> + </dependency> + </dependencies> + <!-- TODO --> + <repositories> + <repository> + <id>com.springsource.repository.bundles.external</id> + <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name> + <url>http://repository.springsource.com/maven/bundles/external</url> + </repository> + </repositories> + <build> <resources> <resource> Modified: trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties =================================================================== --- trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/license/THIRD-PARTY.properties 2014-03-24 15:55:50 UTC (rev 22) @@ -8,6 +8,7 @@ # - Common Development and Distribution License (CDDL) v1.0 # - Common Public License Version 1.0 # - Eclipse Public License, Version 1.0 +# - GNU Affero General Public License v3 # - GNU General Public License - Version 2 with the class path exception # - GNU General Public License, Version 2 with the Classpath Exception # - GNU Lesser General Public License, Version 2.1 @@ -27,6 +28,9 @@ # Please fill the missing licenses for dependencies : # # -#Tue Feb 25 10:11:09 CET 2014 +#Mon Mar 24 15:58:44 CET 2014 commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 dom4j--dom4j--1.6.1=BSD License +#to check +javax.media.jai--com.springsource.javax.media.jai.codec--1.1.3=Apache License +javax.media.jai--com.springsource.javax.media.jai.core--1.1.3=Apache License Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java 2014-03-24 15:55:50 UTC (rev 22) @@ -10,6 +10,7 @@ import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.Image; +import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.BaseFont; @@ -24,9 +25,11 @@ import javax.swing.*; import java.awt.*; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileReader; import java.net.URL; /** @@ -36,7 +39,7 @@ public class GenerateAnnotatedAttachmentAction extends AbstractFaxToMailAction<PDFEditorUIModel, PDFEditorUI, PDFEditorUIHandler> { public GenerateAnnotatedAttachmentAction(PDFEditorUIHandler handler) { - super(handler, false); + super(handler, true); } @Override @@ -48,8 +51,12 @@ if (FaxToMailUIUtil.isFileAPDF(file)) { fis = new FileInputStream(file); + } else if (FaxToMailUIUtil.isFileATxt(file)) { + File target = handler.convertTextToPdf(file); + fis = new FileInputStream(target); + } else { - File target = File.createTempFile("test", ".pdf"); + File target = File.createTempFile(file.getName(), ".pdf"); Document document = new Document(); FileOutputStream fos = new FileOutputStream(target); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-03-24 15:55:50 UTC (rev 22) @@ -158,4 +158,12 @@ public static boolean isFileAPDF(File file) { return FileUtil.extension(file).toUpperCase().equals("PDF"); } + + public static boolean isFileATxt(File file) { + return FileUtil.extension(file).toUpperCase().equals("TXT"); + } + + public static boolean isFileATif(File file) { + return FileUtil.extension(file).toUpperCase().equals("TIF"); + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/JImagePanel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/JImagePanel.java 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/JImagePanel.java 2014-03-24 15:55:50 UTC (rev 22) @@ -1,11 +1,25 @@ package com.franciaflex.faxtomail.ui.swing.util; +import com.sun.media.jai.codec.ByteArraySeekableStream; +import com.sun.media.jai.codec.ImageCodec; +import com.sun.media.jai.codec.ImageDecoder; +import com.sun.media.jai.codec.SeekableStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.imageio.ImageIO; +import javax.media.jai.PlanarImage; import javax.swing.*; -import javax.swing.border.Border; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; +import java.awt.image.BufferedImage; +import java.awt.image.RenderedImage; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; /** * @author Kevin Morin (Code Lutin) @@ -13,6 +27,8 @@ */ public class JImagePanel extends JPanel { + private static final Log log = LogFactory.getLog(JImagePanel.class); + protected Image img; protected Image scaledImage; @@ -65,10 +81,39 @@ return scaledImage; } - public void setImg(String img) { - setImg(new ImageIcon(img).getImage()); + public void setImg(File img) { + BufferedImage bufferedImage; + try { + bufferedImage = ImageIO.read(img); + + } catch (IOException e) { + log.error("error while reading image " + img.getAbsolutePath(), e); + bufferedImage = null; + } + if (bufferedImage != null) { + setImg(bufferedImage); + } } + public void setTifImage(File file) { + try { + FileInputStream fis = new FileInputStream(file); + FileChannel channel = fis.getChannel(); + ByteBuffer buffer = ByteBuffer.allocate((int) channel.size()); + channel.read(buffer); + SeekableStream stream = new ByteArraySeekableStream(buffer.array()); + String[] names = ImageCodec.getDecoderNames(stream); + ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null); + RenderedImage im = dec.decodeAsRenderedImage(); + Image image = PlanarImage.wrapRenderedImage(im).getAsBufferedImage(); + + setImg(image); + + } catch (IOException e) { + log.error("error while reading image " + file.getAbsolutePath(), e); + } + } + public void setImg(Image img) { this.img = img; this.scaledImage = img; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2014-03-24 15:55:50 UTC (rev 22) @@ -42,7 +42,7 @@ public class AttachmentEditorUIHandler extends AbstractToolbarPopupHandler<AttachmentEditorUIModel, AttachmentEditorUI> { public static final List<String> EDITABLE_EXTENSIONS = Lists.newArrayList("PDF", "PNG", "JPG", "JPEG", "GIF", - "TIF", "JP2", "BMP", "WMF", "JB2", "TXT"); + "TIF", "BMP", "TXT"); @Override public void afterInit(AttachmentEditorUI ui) { @@ -174,7 +174,8 @@ } else { Desktop desktop = FaxToMailUIUtil.getDesktopForBrowse(); try { - desktop.browse(file.toURI()); +// desktop.browse(file.toURI()); + desktop.open(file); } catch (IOException e) { getContext().getErrorHelper().showErrorDialog(t("swing.error.cannot.open.file")); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentItem.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentItem.css 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentItem.css 2014-03-24 15:55:50 UTC (rev 22) @@ -1,3 +1,7 @@ +#attachmentPanel { + border: { BorderFactory.createEmptyBorder(2, 3, 2, 3) }; +} + #attachmentNameLabel { text: { attachment != null ? getAttachment().getOriginalFile().getName() : null }; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIHandler.java 2014-03-24 11:13:05 UTC (rev 21) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIHandler.java 2014-03-24 15:55:50 UTC (rev 22) @@ -2,9 +2,14 @@ import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; +import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfWriter; import com.sun.pdfview.PDFFile; import com.sun.pdfview.PDFPage; import jaxx.runtime.SwingUtil; @@ -13,20 +18,19 @@ import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import javax.swing.*; -import javax.swing.border.Border; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; @@ -75,6 +79,20 @@ File file = model.getNotNullFile(); if (file != null) { + if (FaxToMailUIUtil.isFileATxt(file)) { + try { + file = convertTextToPdf(file); + + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } catch (DocumentException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } + } if (FaxToMailUIUtil.isFileAPDF(file)) { getUI().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { @@ -86,10 +104,6 @@ model.setPageNumber(pdf.getNumPages()); model.setCurrentPageIndex(1); - } catch (FileNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("", e); - } } catch (IOException e) { if (log.isErrorEnabled()) { log.error("", e); @@ -100,7 +114,49 @@ } else { model.setPageNumber(1); model.setCurrentPageIndex(1); - getUI().getContainer().setImg(file.getAbsolutePath()); + + JImagePanel container = getUI().getContainer(); + if (FaxToMailUIUtil.isFileATxt(file)) { + JTextPane textPane = new JTextPane(); + textPane.setEditable(false); + try { + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); + String text = new String(); + while (br.readLine() != null) { + text += br.readLine() + "\n"; + } + textPane.setText(text); + + log.debug(textPane.getText()); + + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } + container.add(textPane); + + Insets insets = container.getInsets(); + Dimension size = textPane.getPreferredSize(); + + container.setPreferredSize(size); + container.setMinimumSize(size); + container.setMaximumSize(size); + container.setSize(size); + + textPane.setBounds(insets.left, insets.top, size.width, size.height); + + container.updateUI(); + + } else { + if (FaxToMailUIUtil.isFileATif(file)) { + container.setTifImage(file); + + } else { + container.setImg(file); + } + } } model.firePropertyChanged(PDFEditorUIModel.PROPERTY_CURRENT_PAGE_INDEX, null, 1); } @@ -180,14 +236,16 @@ } protected void addPanel(JPanel panel) { - ui.getContainer().add(panel, 0); + JImagePanel container = ui.getContainer(); + container.add(panel, 0); - Insets insets = ui.getContainer().getInsets(); + Insets insets = container.getInsets(); Dimension size = panel.getPreferredSize(); - panel.setBounds(0 + insets.left, 0 + insets.top, + Rectangle rect = container.getVisibleRect(); + panel.setBounds(rect.x + insets.left, rect.y + insets.top, size.width, size.height); - ui.getContainer().updateUI(); + container.updateUI(); cm.registerComponent(panel); } @@ -216,7 +274,8 @@ true, // fill background with white true // block until drawing is done ); - getUI().getContainer().setImg(image); + JImagePanel container = getUI().getContainer(); + container.setImg(image); PDFEditorUIModel.Page p = getModel().getPage(pageNb); for (JPanel panel : p.getNotes()) { @@ -226,8 +285,31 @@ panel.setVisible(true); } - getUI().getContainer().updateUI(); + container.updateUI(); } } } + + public File convertTextToPdf(File file) throws IOException, DocumentException { + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); + String text = new String(); + while (br.readLine() != null) { + text += br.readLine() + "\n"; + } + + file = File.createTempFile(file.getName(), ".pdf"); + + Document document = new Document(); + FileOutputStream fos = new FileOutputStream(file); + PdfWriter writer = PdfWriter.getInstance(document, fos); + writer.open(); + + document.open(); + document.add(new Paragraph(text)); + document.close(); + writer.close(); + return file; + } + }