r329 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-service/src/main/resources/i18n faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor faxtomail-ui-swing/src/main/java/com
Author: kmorin Date: 2014-07-03 01:36:50 +0200 (Thu, 03 Jul 2014) New Revision: 329 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/329 Log: - action d'impression - ajout de l'historisation des impressions - correction de la rotation des pj - etat modifi?\195?\169 de la demande quand on edite un ?\195?\169l?\195?\169ment Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java trunk/faxtomail-service/src/main/resources/i18n/faxtomail-service_fr_FR.properties trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java 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/content/MainUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-07-02 23:36:50 UTC (rev 329) @@ -855,7 +855,7 @@ result = new AttachmentFileImpl(); result.setContent(out.toByteArray()); - result.setFilename("demand_details.pdf"); + result.setFilename(t("faxtomail.attachment.demand.filename") + ".pdf"); result.getFile(); } catch (Exception e) { Modified: trunk/faxtomail-service/src/main/resources/i18n/faxtomail-service_fr_FR.properties =================================================================== --- trunk/faxtomail-service/src/main/resources/i18n/faxtomail-service_fr_FR.properties 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-service/src/main/resources/i18n/faxtomail-service_fr_FR.properties 2014-07-02 23:36:50 UTC (rev 329) @@ -1,3 +1,4 @@ +faxtomail.attachment.demand.filename=Détail de la demande faxtomail.email.projectReference.default=Votre demande du %s faxtomail.service.email.save.clientCode.error=Impossible de trouver le client %s \! faxtomail.service.referential.import.clients.error= Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java 2014-07-02 23:36:50 UTC (rev 329) @@ -30,6 +30,7 @@ import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUIHandler; import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUIModel; import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUI; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUIModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -79,9 +80,12 @@ } else { attachment.setEditedFile(attachmentFile); }*/ - dialogContent.getModel().fromEntity(attachment); + PDFEditorUIModel pdfEditorUIModel = dialogContent.getModel(); + pdfEditorUIModel.fromEntity(attachment); + pdfEditorUIModel.setDemand(getContext().getCurrentEmail()); + getHandler().openDialog(dialogContent, attachment.getOriginalFileName(), mainUI.getSize()); - dialogContent.getModel().toEntity(attachment); + pdfEditorUIModel.toEntity(attachment); } } \ No newline at end of file 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-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java 2014-07-02 23:36:50 UTC (rev 329) @@ -24,8 +24,7 @@ * #L% */ -import java.awt.Insets; -import java.awt.Point; +import java.awt.*; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -35,6 +34,11 @@ import javax.swing.JTextArea; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.itextpdf.awt.geom.AffineTransform; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Element; +import com.itextpdf.text.ExceptionConverter; +import com.itextpdf.text.pdf.PdfTemplate; import jaxx.runtime.JAXXContext; import jaxx.runtime.JAXXUtil; @@ -49,6 +53,7 @@ import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUIModel; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; +import com.itextpdf.text.Font; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; @@ -84,21 +89,7 @@ PDFEditorUIModel model = getModel(); - //File file = model.getNotNullFile(); - -// InputStream inputStream; -// if (FaxToMailUIUtil.isFileAPDF(file)) { -// inputStream = new FileInputStream(file); - -// } else if (FaxToMailUIUtil.isFileATxt(file)) { -// File target = handler.convertTextToPdf(file); -// inputStream = new FileInputStream(target); -// -// } else { -// -// InputStream inputStream = new FileInputStream(file); -// } PdfReader pdfReader = new PdfReader(inputStream); @@ -117,18 +108,14 @@ for (int i = 0 ; i < pageNb ; i++) { PdfContentByte cb = pdfStamper.getOverContent(i + 1); -// PdfDictionary pageDict; -// pageDict = pdfReader.getPageN(i + 1); -// int pageRotation = pdfReader.getPageRotation(i + 1); -// pageDict.put(PdfName.ROTATE, new PdfNumber((360 + pageRotation + rotation) % 360)); - for (PDFEditorNoteUI note : model.getPages()[i].getNotes()) { - Point location = note.getLocation(); - int width = (int) (note.getWidth() / zoom); - int height = (int) (note.getHeight() / zoom); - int x = (int) (location.x / zoom); - int y = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - height; + int[] coordinates = computeCoordinates(note, rotation, zoom); + int width = coordinates[0]; + int height = coordinates[1]; + int x = coordinates[2]; + int y = coordinates[3]; + Insets insets = note.getInsets(); cb.saveState(); @@ -140,35 +127,63 @@ cb.saveState(); JTextArea textArea = note.getNoteText(); float fontSize = textArea.getFont().getSize2D() / zoom; - cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), fontSize * 1.3f); + BaseFont font = BaseFont.createFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); - ColumnText ct = new ColumnText(cb); - ct.setSimpleColumn(x + insets.left, y + insets.bottom, x + insets.left + width - insets.right, y + insets.bottom + height - insets.top); - ct.setLeading(fontSize + 3); + String text = note.getText(); + String[] rows = text.split("\n"); + int rowHeight = textArea.getHeight() / rows.length; - ct.addText(new Phrase(note.getTitle())); - ct.go(); + int xxx = x; + int yyy = y; + if (rotation == 0) { + xxx += insets.left; + yyy += height - rowHeight - insets.top; - String text = note.getText(); - String[] rows = text.split("\n"); + } else if (rotation == 90) { + xxx += rowHeight + insets.top; + yyy += insets.left; + + } else if (rotation == 180) { + xxx += width - insets.right; + yyy += rowHeight - insets.top; + + } else if (rotation == 270) { + xxx += width - rowHeight - insets.left; + yyy += height - insets.top; + } + + showTextAligned(cb, note.getTitle(), xxx, yyy, rotation, font, fontSize); + for (String s : rows) { if (s.isEmpty()) { s = " "; } - ct.addText(new Phrase(s)); - ct.go(); + if (rotation == 0) { + yyy -= rowHeight; + + } else if (rotation == 90) { + xxx += rowHeight; + + } else if (rotation == 180) { + yyy += rowHeight; + + } else if (rotation == 270) { + xxx -= rowHeight; + } + showTextAligned(cb, s, xxx, yyy, rotation, font, fontSize); } cb.restoreState(); + } for (PDFEditorCrossUI panel : model.getPages()[i].getCrosses()) { - Point location = panel.getLocation(); - int width = (int) (panel.getWidth() / zoom); - int height = (int) (panel.getHeight() / zoom); - int x = (int) (location.x / zoom); - int y = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - height; + int[] coordinates = computeCoordinates(panel, rotation, zoom); + int width = coordinates[0]; + int height = coordinates[1]; + int x = coordinates[2]; + int y = coordinates[3]; cb.saveState(); cb.setColorStroke(BaseColor.BLUE); @@ -183,13 +198,13 @@ for (PDFEditorLineUI panel : model.getPages()[i].getLines()) { - Point location = panel.getLocation(); - int width = (int) (panel.getWidth() / zoom); - int height = (int) (panel.getHeight() / zoom); - int x = (int) (location.x / zoom); - int y = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - height; + int[] coordinates = computeCoordinates(panel, rotation, zoom); + int width = coordinates[0]; + int height = coordinates[1]; + int x = coordinates[2]; + int y = coordinates[3]; - if (panel.isHorizontal()) { + if (rotation % 180 == 0 ^ !panel.isHorizontal()) { y += height / 2; } else { x += width / 2; @@ -198,7 +213,7 @@ cb.saveState(); cb.setColorStroke(BaseColor.BLUE); cb.moveTo(x, y); - if (panel.isHorizontal()) { + if (rotation % 180 == 0 ^ !panel.isHorizontal()) { cb.lineTo(x + width, y); } else { cb.lineTo(x, y + height); @@ -209,11 +224,11 @@ for (PDFEditorHighlighterUI panel : model.getPages()[i].getHighlighters()) { - Point location = panel.getLocation(); - int width = (int) (panel.getWidth() / zoom); - int height = (int) (panel.getHeight() / zoom); - int x = (int) (location.x / zoom); - int y = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - height; + int[] coordinates = computeCoordinates(panel, rotation, zoom); + int width = coordinates[0]; + int height = coordinates[1]; + int x = coordinates[2]; + int y = coordinates[3]; cb.saveState(); PdfGState gs1 = new PdfGState(); @@ -244,6 +259,75 @@ getModel().setEditedFile(attachmentFileNew); } + protected int[] computeCoordinates(Component panel, int rotation, float zoom) { + Point location = panel.getLocation(); + + int width = rotation % 180 == 0 ? panel.getWidth() : panel.getHeight(); + int height = rotation % 180 == 0 ? panel.getHeight() : panel.getWidth(); + + width = (int) (width / zoom); + height = (int) (height / zoom); + + int x = 0; + int y = 0; + + if (rotation == 0) { + x = (int) (location.x / zoom); + y = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - height; + + } else if (rotation == 180) { + x = (int) ((getUI().getContainer().getWidth() - location.x) / zoom) - width; + y = (int) (location.y / zoom); + + } else if (rotation == 90) { + x = (int) (location.y / zoom); + y = (int) (location.x / zoom); + + } else if (rotation == 270) { + x = (int) ((getUI().getContainer().getHeight() - location.y) / zoom) - width; + y = (int) ((getUI().getContainer().getWidth() - location.x) / zoom) - height; + } + + int[] result = new int[] { width, height, x, y }; + return result; + } + + protected void showTextAligned(PdfContentByte canvas, String text, float x, float y, float rotation, BaseFont baseFont, float fontSize) { + canvas.saveState(); + + ColumnText ct = new ColumnText(canvas); + + float lly = -1; + float ury = 2; + float llx = 0; + float urx = 20000; + + if (rotation == 0) { + llx += x; + lly += y; + urx += x; + ury += y; + + } else { + double alpha = rotation * Math.PI / 180.0; + float cos = (float)Math.cos(alpha); + float sin = (float)Math.sin(alpha); + canvas.concatCTM(cos, sin, -sin, cos, x, y); + } + + Font font = new Font(baseFont, fontSize); + ct.setSimpleColumn(new Phrase(text, font), llx, lly, urx, ury, 0, Element.ALIGN_LEFT); + ct.setAlignment(Element.ALIGN_LEFT); + + try { + ct.go(); + } + catch (DocumentException e) { + throw new ExceptionConverter(e); + } + canvas.restoreState(); + } + @Override public void postSuccessAction() { super.postSuccessAction(); Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java 2014-07-02 23:36:50 UTC (rev 329) @@ -0,0 +1,134 @@ +package com.franciaflex.faxtomail.ui.swing.actions; + +import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.services.service.EmailService; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; +import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.google.common.base.Strings; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import org.apache.commons.io.Charsets; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class PrintOnDefaultPrinterAction extends AbstractFaxToMailAction { + + private static final Log log = LogFactory.getLog(PrintOnDefaultPrinterAction.class); + + protected Multimap<DemandeUIModel, AttachmentFile> attachmentsToPrintByDemand; + protected boolean take; + protected boolean printDemandDetails; + + public PrintOnDefaultPrinterAction(AbstractFaxToMailUIHandler handler, + Multimap<DemandeUIModel, AttachmentFile> attachmentsToPrintByDemand, + boolean take, + boolean printDemandDetails) { + + super(handler, false); + this.attachmentsToPrintByDemand = attachmentsToPrintByDemand; + this.take = take; + this.printDemandDetails = printDemandDetails; + + setActionDescription(t("faxtomail.action.print.tip")); + } + + @Override + public void doAction() throws Exception { + FaxToMailUser currentUser = getContext().getCurrentUser(); + + Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment = HashMultimap.create(); + + for (DemandeUIModel demandeUIModel : attachmentsToPrintByDemand.keySet()) { + + if (take) { + demandeUIModel.setTakenBy(currentUser); + } + + List<String> printedFiles = new ArrayList<String>(); + + if (printDemandDetails) { + // generate details as pdf + EmailService emailService = getContext().getEmailService(); + Email email = demandeUIModel.toEntity(); + final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); + // print details + FaxToMailUIUtil.print(demandDetailAttachment, true); + printedFiles.add(demandDetailAttachment.getFilename()); + } + + for (AttachmentFile attachmentFile : attachmentsToPrintByDemand.get(demandeUIModel)) { + + boolean printable = FaxToMailUIUtil.isFileTypeEditable(attachmentFile.getFilename()); + if (printable) { + FaxToMailUIUtil.print(attachmentFile, true); + printedFiles.add(attachmentFile.getFilename()); + + } else { + nonPrintedAttachment.put(demandeUIModel, attachmentFile); + } + } + + Email email = getContext().getEmailService().addToHistory(demandeUIModel.getTopiaId(), + HistoryType.PRINTING, + getContext().getCurrentUser(), + new Date(), + printedFiles.toArray(new String[printedFiles.size()])); + demandeUIModel.setHistory(email.getHistory()); + } + + // print another page for non printed attachments + if (!nonPrintedAttachment.isEmpty()) { + InputStream errorPageStream = generateErrorPageStream(nonPrintedAttachment); + FaxToMailUIUtil.print(errorPageStream, true); + } + } + + /** + * Retourne un flux de données qui correspond à une page de récapitulatif des pièces jointes + * non imprimées. + * + * @param nonPrintedAttachment not printed attachment list + * @return input stream with content + */ + protected InputStream generateErrorPageStream(Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment) { + + // generate text content + StringBuilder builder = new StringBuilder(); + builder.append("\nLes pièces-jointes suivantes n'ont pas pu être imprimées:\n"); + + for (DemandeUIModel email : nonPrintedAttachment.keySet()) { + Collection<AttachmentFile> attachments = nonPrintedAttachment.get(email); + + builder.append(" * "); + if (!Strings.isNullOrEmpty(email.getCompanyReference())) { + builder.append(email.getCompanyReference() + " - "); + } + builder.append(Strings.nullToEmpty(email.getObject()) + " : \n"); + for (AttachmentFile attachmentFile : attachments) { + builder.append(" - " + attachmentFile.getFilename() + "\n"); + } + } + + // convert text content to inputstream + byte[] content = builder.toString().getBytes(Charsets.UTF_8); + InputStream is = new ByteArrayInputStream(content); + return is; + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.css 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.css 2014-07-02 23:36:50 UTC (rev 329) @@ -26,39 +26,41 @@ block:{model.isBusy()}; } */ +JSeparator { + border: { BorderFactory.createEmptyBorder(0, 5, 0, 5) }; +} #mainFrame { title: "faxtomail.main.title.applicationName"; defaultCloseOperation: {JFrame.DO_NOTHING_ON_CLOSE}; } -#menuFile { - text: "faxtomail.main.menu.file"; - toolTipText: "faxtomail.main.menu.file.tip"; - toolTipText: "faxtomail.main.menu.file.tip"; +#topBar { + floatable: false; + margin: {new java.awt.Insets(5, 5, 5, 5)}; + borderPainted: false; } -#menuFileDemandeList { +#demandListButton { actionIcon: list; text: "faxtomail.main.action.demandeList"; toolTipText: "faxtomail.main.action.demandeList.tip"; - enabled: true;//{model.getScreen() != TuttiScreen.LIST}; + selected: { model.getScreen() == FaxToMailScreen.LIST }; _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeListAction.class}; } -#menuFileRecherche { +#searchButton { actionIcon: search; text: "faxtomail.main.action.recherche"; toolTipText: "faxtomail.main.action.recherche.tip"; - enabled: true; + selected: { model.getScreen() == FaxToMailScreen.SEARCH }; _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.ShowRechercheAction.class}; } -#menuFileExit { +#exitButton { actionIcon: exit; text: "faxtomail.main.action.exit"; toolTipText: "faxtomail.main.action.exit.tip"; - _help: {"faxtomail.main.menu.action.exit.help"}; } #bottomBar { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.jaxx 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUI.jaxx 2014-07-02 23:36:50 UTC (rev 329) @@ -24,6 +24,7 @@ width='1024' height='780'> <import> + com.franciaflex.faxtomail.ui.swing.FaxToMailScreen com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil com.franciaflex.faxtomail.ui.swing.actions.* @@ -33,6 +34,7 @@ org.jdesktop.swingx.JXTitledPanel javax.swing.JFrame + javax.swing.SwingConstants java.awt.BorderLayout </import> @@ -45,18 +47,13 @@ } ]]></script> - <!-- menu --> - <JMenuBar id='menu'> - <JMenu id='menuFile'> - <JMenuItem id='menuFileDemandeList'/> - <JMenuItem id='menuFileRecherche'/> - <JMenuItem id='menuFileConfiguration'/> - <JSeparator/> - <JMenuItem id='menuFileExit' onActionPerformed="this.dispose()"/> - </JMenu> + <JToolBar id='topBar' constraints="BorderLayout.NORTH"> + <JToggleButton id='demandListButton'/> + <JToggleButton id='searchButton'/> + <JSeparator constructorParams="SwingConstants.VERTICAL"/> + <JButton id='exitButton'/> + </JToolBar> - </JMenuBar> - <JToolBar id='bottomBar'> <SwingValidatorMessageWidget id='validatorMessageWidget'/> </JToolBar> Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -323,7 +323,7 @@ case SEARCH: screenUI = new SearchUI(ui); screenTitle = t("faxtomail.search.title"); - icon = ui.getMenuFileRecherche().getIcon(); + icon = ui.getSearchButton().getIcon(); break; case DEMANDE: @@ -338,7 +338,7 @@ case LIST: screenUI = new DemandeListUI(ui); screenTitle = t("faxtomail.demandeList.title"); - icon = ui.getMenuFileDemandeList().getIcon(); + icon = ui.getDemandListButton().getIcon(); break; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -30,15 +30,12 @@ import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Enumeration; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -57,12 +54,12 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; +import com.franciaflex.faxtomail.ui.swing.actions.PrintOnDefaultPrinterAction; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import jaxx.runtime.JAXXUtil; import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.io.Charsets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -86,7 +83,6 @@ import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.services.FaxToMailServiceUtils; -import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.ui.swing.actions.ArchiveFromListAction; import com.franciaflex.faxtomail.ui.swing.actions.ComputeQuantitiesByRangeAction; import com.franciaflex.faxtomail.ui.swing.actions.LoadFolderEmailsAction; @@ -97,7 +93,6 @@ import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.franciaflex.faxtomail.ui.swing.util.FolderTreeNode; -import com.google.common.base.Strings; /** * Handler of UI {@link com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler}. @@ -416,14 +411,6 @@ @Override public boolean quitUI() { -// boolean result = quitScreen( -// getModel().isValid(), -// getModel().isModify(), -// _("tutti.editCruise.askCancelEditBeforeLeaving.cancelSaveCruise"), -// _("tutti.editCruise.askSaveBeforeLeaving.saveCruise"), -// ui.getSaveButton().getAction() -// ); -// return result; return true; } @@ -511,24 +498,12 @@ selectedFolder = selectedFolder.getParent(); } boolean take = Boolean.TRUE.equals(selectedFolder.getPrintActionEqualTakeAction()); - FaxToMailUser currentUser = getContext().getCurrentUser(); - Map<Email, Collection<AttachmentFile>> nonPrintedAttachment = new HashMap<Email, Collection<AttachmentFile>>(); - List<DemandeUIModel> currentEmails = model.getCurrentEmails(); - for (DemandeUIModel demandeUIModel : currentEmails) { - if (take) { - demandeUIModel.setTakenBy(currentUser); - } + Multimap<DemandeUIModel, AttachmentFile> attachmentToPrints = HashMultimap.create(); - // generate details as pdf - EmailService emailService = getContext().getEmailService(); - Email email = demandeUIModel.toEntity(); - final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); - // print details - FaxToMailUIUtil.print(demandDetailAttachment, true); + for (DemandeUIModel demandeUIModel : model.getCurrentEmails()) { for (Attachment attachment : demandeUIModel.getAttachment()) { - // force lazy loading FaxToMailUIUtil.forceAttachmentFileLoading(getContext(), attachment); @@ -536,57 +511,17 @@ if (attachmentFile == null) { attachmentFile = attachment.getOriginalFile(); } - boolean printable = FaxToMailUIUtil.isFileTypeEditable(attachmentFile.getFilename()); - if (printable) { - FaxToMailUIUtil.print(attachmentFile, true); - } else { - - Collection<AttachmentFile> emailAttachments = nonPrintedAttachment.get(email); - if (emailAttachments == null) { - emailAttachments = new ArrayList<AttachmentFile>(); - nonPrintedAttachment.put(email, emailAttachments); - } - emailAttachments.add(attachmentFile); - } + attachmentToPrints.put(demandeUIModel, attachmentFile); } } - // print another page for non printed attachments - if (MapUtils.isNotEmpty(nonPrintedAttachment)) { - InputStream errorPageStream = generateErrorPageStream(nonPrintedAttachment); - FaxToMailUIUtil.print(errorPageStream, true); - } + PrintOnDefaultPrinterAction action = new PrintOnDefaultPrinterAction(this, + attachmentToPrints, + take, + true); + getContext().getActionFactory().createUIAction(null, action).actionPerformed(null); } - /** - * Retourne un flux de données qui correspond à une page de récapitulatif des pièces jointes - * non imprimées. - * - * @param nonPrintedAttachment not printed attachment list - * @return input stream with content - */ - protected InputStream generateErrorPageStream(Map<Email, Collection<AttachmentFile>> nonPrintedAttachment) { - - // generate text content - StringBuilder builder = new StringBuilder(); - builder.append("\nLes pièces-jointes suivantes n'ont pas pu être imprimées:\n"); - - for (Map.Entry<Email, Collection<AttachmentFile>> entry : nonPrintedAttachment.entrySet()) { - Email email = entry.getKey(); - Collection<AttachmentFile> attachments = entry.getValue(); - - builder.append(" * " + Strings.nullToEmpty(email.getCompanyReference()) + " - " + Strings.nullToEmpty(email.getObject()) + " : \n"); - for (AttachmentFile attachmentFile : attachments) { - builder.append(" - " + attachmentFile.getFilename() + "\n"); - } - } - - // convert text content to inputstream - byte[] content = builder.toString().getBytes(Charsets.UTF_8); - InputStream is = new ByteArrayInputStream(content); - return is; - } - public void reply() { DemandeUIModel demand = getModel().getCurrentEmails().get(0); getContext().setCurrentEmail(demand); @@ -594,7 +529,7 @@ ReplyFormUI dialogContent = new ReplyFormUI(ui); ReplyFormUIModel model = dialogContent.getModel(); - //TODO kmorin 20140626 test + //TODO kmorin 20140626 to test String sender = JAXXUtil.getStringValue(demand.getSender()); if (demand.isFax()) { MailFolder selectedFolder = getModel().getSelectedFolder(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -365,6 +365,7 @@ FaxToMailUIUtil.getEditedFileName(attachment.getOriginalFileName())); getModel().setHistory(email.getHistory()); } + getModel().setModify(true); } @@ -401,6 +402,7 @@ result.add(Email.PROPERTY_HISTORY); result.add(DemandeUIModel.PROPERTY_GROUPED_DEMANDES); result.add(Email.PROPERTY_REPLIES); + result.add(Email.PROPERTY_LOCKED_BY); return result; } @@ -422,6 +424,7 @@ @Override public boolean quitUI() { BeanMonitor monitor = getMonitor(); + log.info(Arrays.toString(monitor.getModifiedProperties())); boolean result = quitScreen( true, monitor.wasModified(), Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -302,6 +302,7 @@ } if (change) { getModel().setCurrentIndex(newIndex); + getContext().setCurrentEmail(getModel().getCurrentDemand()); } return change; } @@ -337,23 +338,6 @@ public void print() { closeButtonPopups(); -// for (Attachment attachment : getModel().getAttachment()) { -//// try { -// File editedFile = attachment.getEditedFile(); -// if (editedFile == null) { -// editedFile = attachment.getOriginalFile(); -// } -// log.info("print " + editedFile.getAbsolutePath()); -//// Desktop.getDesktop().print(editedFile); -// -// -//// } catch (IOException e) { -//// if (log.isErrorEnabled()) { -//// log.error("", e); -//// } -//// } -// } - DemandeUI demandeUI = (DemandeUI) getTabPanel().getSelectedComponent(); AttachmentToPrintChooserUI dialogContent = new AttachmentToPrintChooserUI(ui, demandeUI.getModel()); @@ -389,7 +373,7 @@ model.setOriginalDemand(currentDemand); - //TODO kmorin 20140626 test + //TODO kmorin 20140626 to test String sender = JAXXUtil.getStringValue(currentDemand.getSender()); if (currentDemand.isFax()) { MailFolder selectedFolder = getContext().getCurrentMailFolder(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -53,6 +53,11 @@ import javax.swing.JComponent; import javax.swing.JPanel; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import jaxx.runtime.swing.ComponentMover; import jaxx.runtime.swing.ComponentResizer; import jaxx.runtime.validator.swing.SwingValidator; @@ -544,6 +549,21 @@ } public void print() { - FaxToMailUIUtil.print(getModel().getEditedFile(), false); + Multimap<DemandeUIModel, AttachmentFile> attachmentsToPrint = HashMultimap.create(); + PDFEditorUIModel model = getModel(); + AttachmentFile attachmentFile = model.getNotNullFile(); + boolean print = FaxToMailUIUtil.print(attachmentFile, false); + + // TODO kmorin 20140702 à mettre dans une action ou avec un loading ou qqchose + // j'ai essayé une action vite fait mais ca ferme l'éditeur à la fin de l'action + if (print) { + DemandeUIModel demand = model.getDemand(); + Email email = getContext().getEmailService().addToHistory(demand.getTopiaId(), + HistoryType.PRINTING, + getContext().getCurrentUser(), + new Date(), + attachmentFile.getFilename()); + demand.setHistory(email.getHistory()); + } } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-07-02 23:36:50 UTC (rev 329) @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -48,6 +49,8 @@ protected final Attachment editObject = new AttachmentImpl(); + protected DemandeUIModel demand; + public class Page { protected List<PDFEditorNoteUI> notes = new ArrayList<PDFEditorNoteUI>(); @@ -233,6 +236,14 @@ firePropertyChanged(PROPERTY_ROTATION, oldValue, rotation); } + public DemandeUIModel getDemand() { + return demand; + } + + public void setDemand(DemandeUIModel demand) { + this.demand = demand; + } + @Override protected Attachment newEntity() { return new AttachmentImpl(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java 2014-07-02 23:36:50 UTC (rev 329) @@ -24,17 +24,19 @@ * #L% */ -import static org.nuiton.i18n.I18n.t; - import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.swing.JCheckBox; import javax.swing.JComponent; -import javax.swing.JOptionPane; -import jaxx.runtime.JAXXUtil; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.ui.swing.actions.PrintOnDefaultPrinterAction; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.lang3.StringUtils; @@ -49,7 +51,6 @@ import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.Cancelable; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; -import com.google.common.collect.Lists; /** * @author Kevin Morin (Code Lutin) @@ -67,14 +68,14 @@ AttachmentToPrintChooserUIModel model = getModel(); DemandeUIModel demand = model.getDemand(); - JCheckBox checkBox = new JCheckBox(t("faxtomail.chooseMailFolder.element"), true); - ui.getAttachmentPanel().add(checkBox); - // add demand details EmailService emailService = getContext().getEmailService(); Email email = getModel().getDemand().toEntity(); final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); + JCheckBox checkBox = new JCheckBox(demandDetailAttachment.getFilename(), true); + ui.getAttachmentPanel().add(checkBox); + // add attached files getModel().addAttachmentToPrint(demandDetailAttachment); checkBox.addItemListener(new ItemListener() { @@ -151,14 +152,16 @@ } public void print() { - List<AttachmentFile> attachmentsToPrint = Lists.newArrayList(getModel().getAttachmentsToPrint()); + // TODO 20140702 put in an action + List<String> printedFiles = new ArrayList<String>(); for (AttachmentFile attachmentFile : getModel().getAttachmentsToPrint()) { try { if (StringUtils.isNotBlank(attachmentFile.getFilename())) { FaxToMailUIUtil.print(attachmentFile, true); + printedFiles.add(attachmentFile.getFilename()); } - attachmentsToPrint.remove(attachmentFile); + } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Could not print attachement.", e); @@ -166,21 +169,22 @@ } } - if (!attachmentsToPrint.isEmpty()) { + getContext().getEmailService().addToHistory(getModel().getDemand().getTopiaId(), + HistoryType.PRINTING, + getContext().getCurrentUser(), + new Date(), + printedFiles.toArray(new String[printedFiles.size()])); - StringBuilder fileNames = new StringBuilder(); - for (AttachmentFile attachmentFile : attachmentsToPrint) { - String fileName = JAXXUtil.getStringValue(attachmentFile.getFilename()); - fileNames.append("- ").append(fileName).append("\n"); - } - JOptionPane.showMessageDialog( - getTopestUI(), - t("faxtomail.demande.print.error.message.filesName", fileNames.toString()), - t("faxtomail.demande.print.error.message.title"), - JOptionPane.ERROR_MESSAGE); + Multimap<DemandeUIModel, AttachmentFile> attachmentToPrints = HashMultimap.create(); + attachmentToPrints.putAll(getModel().getDemand(), getModel().getAttachmentsToPrint()); - } else { - closeDialog(); - } + PrintOnDefaultPrinterAction action = new PrintOnDefaultPrinterAction(this, + attachmentToPrints, + false, + false); + getContext().getActionFactory().createUIAction(null, action).actionPerformed(null); + } + + } 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-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-07-02 23:36:50 UTC (rev 329) @@ -382,20 +382,22 @@ * * @param attachmentFile * @param defaultPrinter if {@code true}, do not display print dialog and print with default printer + * @return true if file has been printed, false otherwise */ - public static void print(AttachmentFile attachmentFile, boolean defaultPrinter) { - + public static boolean print(AttachmentFile attachmentFile, boolean defaultPrinter) { + boolean result = false; FileInputStream textStream = null; try { textStream = new FileInputStream(attachmentFile.getFile()); - print(textStream, defaultPrinter); + result = print(textStream, defaultPrinter); } catch (IOException e) { throw new ApplicationTechnicalException( t("jaxx.application.error.cannot.print"), e); } finally { IOUtils.closeQuietly(textStream); } + return result; } /** @@ -403,9 +405,10 @@ * * @param inputStream stream to print * @param defaultPrinter if {@code true}, do not display print dialog and print with default printer + * @return true if file has been printed, false otherwise */ - public static void print(InputStream inputStream, boolean defaultPrinter) { - + public static boolean print(InputStream inputStream, boolean defaultPrinter) { + boolean result = true; try { DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; @@ -446,8 +449,8 @@ //built in UI for printing you may not use this PrintService service = ServiceUI.printDialog(null, 200, 200, services, defaultService, flavor, aset); - System.out.print("service " + service); - if (service != null) { + result = service != null; + if (result) { DocPrintJob job = service.createPrintJob(); job.print(mydoc, aset); } @@ -457,6 +460,8 @@ throw new ApplicationTechnicalException( t("jaxx.application.error.cannot.print"), e); } + + return result; } public static String getEditedFileName(String originalFileName) { Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-07-02 17:08:07 UTC (rev 328) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-07-02 23:36:50 UTC (rev 329) @@ -15,6 +15,7 @@ faxtomail.action.goto.search.tip=Aller à l'écran de recherche faxtomail.action.group.tip=Grouper l'élément faxtomail.action.loadFolderEmails.tip=Chargement des demandes du dossier %s +faxtomail.action.print.tip=Impression faxtomail.action.reloadFaxToMail=Recharger FaxToMail faxtomail.action.reply.tip=Envoyer la réponse faxtomail.action.save.tip=Enregistrer @@ -269,6 +270,10 @@ faxtomail.validator.error.email.priority.required= faxtomail.validator.error.email.projectReference.required=Référence chantier requise faxtomail.validator.error.email.rangeRow.required=Tableau des gammes requis +faxtomail.validator.error.reply.from.invalidDomain= +faxtomail.validator.error.reply.from.required= +faxtomail.validator.error.reply.to.required= +faxtomail.validator.error.reply.totalAttachmentLength.required= jaxx.application.error.cannot.mail= jaxx.application.error.cannot.print= jaxx.application.error.desktop.not.supported=
participants (1)
-
kmorin@users.forge.codelutin.com