Author: kmorin Date: 2014-12-12 12:51:00 +0000 (Fri, 12 Dec 2014) New Revision: 728 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/728 Log: fix filter issues Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.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/util/FaxToMailUIUtil.java Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-12-12 12:51:00 UTC (rev 728) @@ -407,7 +407,8 @@ Email.PROPERTY_CLIENT, //Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_WAITING_STATE, - Email.PROPERTY_TAKEN_BY + Email.PROPERTY_TAKEN_BY, + Email.PROPERTY_LAST_ATTACHMENT_OPENER //Email.PROPERTY_REPLIES, //Email.PROPERTY_ATTACHMENT, //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, @@ -460,13 +461,13 @@ //Hibernate.initialize(email.getTakenBy()); Hibernate.initialize(email.getReplies()); Hibernate.initialize(email.getAttachment()); - Collection<History> histories = email.getHistory(); - if (histories != null) { - for (History history : histories) { - Hibernate.initialize(history.getFaxToMailUser()); - Hibernate.initialize(history.getFields()); - } - } +// Collection<History> histories = email.getHistory(); +// if (histories != null) { +// for (History history : histories) { +// Hibernate.initialize(history.getFaxToMailUser()); +// Hibernate.initialize(history.getFields()); +// } +// } EmailGroup emailGroup = email.getEmailGroup(); if (emailGroup != null) { Hibernate.initialize(emailGroup.getEmail()); @@ -510,18 +511,24 @@ */ public PaginationResult<Email> getEmailForFolder(EmailFilter emailFilter, MailFolder folder, PaginationParameter pagination) { + long start = new Date().getTime(); + Map<String, Object> args = new HashMap<>(); String query = filteredDemandsOfFolderCondition(folder, emailFilter, args); // add same fecth liste as emailService#getEmailForFolder() String hqlForFetchStep1 = "select E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " + query; + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder 1 - " + hqlForFetchStep1); + } String hqlForFetchStep2 = "select distinct E FROM " + Email.class.getName() + " E " + addAllFecthes( Email.PROPERTY_PRIORITY, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_CLIENT, //Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_WAITING_STATE, - Email.PROPERTY_TAKEN_BY + Email.PROPERTY_TAKEN_BY, + Email.PROPERTY_LAST_ATTACHMENT_OPENER //Email.PROPERTY_REPLIES, //Email.PROPERTY_ATTACHMENT, //Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, @@ -529,8 +536,23 @@ //Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; + if (log.isDebugEnabled()) { + log.debug("getEmailForFolder 2 - " + hqlForFetchStep2); + } + // code copied from topia to perform search + long time = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder start query 1 : " + time); + } + PaginationResult<String> pageResult = findPage(hqlForFetchStep1, args, pagination); + + long time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder end query 1 : " + time2 + " (" + (time2 - time) + ")"); + } + List<String> step1ResultTopiaIds = pageResult.getElements(); List<Email> sortedEntities; @@ -539,13 +561,38 @@ } else { Map<String, Object> step2Args = Maps.newHashMap(); step2Args.put("topiaIdsForFetch_", step1ResultTopiaIds); + + time = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder start query 2 : " + time); + } + List<Email> entities = forHql(hqlForFetchStep2, step2Args).findAll(); + time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder end query 2 : " + time2 + " (" + (time2 - time) + ")"); + } sortedEntities = sortAccordingToIds(entities, step1ResultTopiaIds); + + long time3 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder sort query 2 : " + time3 + " (" + (time3 - time2) + ")"); + } } + time = new Date().getTime(); + if (log.isDebugEnabled()) { + log.trace("getEmailForFolder init results : " + time); + } + PaginationResult<Email> result = PaginationResult.of(sortedEntities, pageResult.getCount(), pageResult.getCurrentPage()); + time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder after pagination results : " + time2 + " (" + (time2 - time) + ")"); + } + //PaginationResult<Email> result = findPage(query.toString(), args, pagination); // manual fetch @@ -574,13 +621,156 @@ //Hibernate.initialize(email.getTakenBy()); Hibernate.initialize(email.getReplies()); Hibernate.initialize(email.getAttachment()); - Collection<History> histories = email.getHistory(); - if (histories != null) { - for (History history : histories) { - Hibernate.initialize(history.getFaxToMailUser()); - Hibernate.initialize(history.getFields()); +// Collection<History> histories = email.getHistory(); +// if (histories != null) { +// for (History history : histories) { +// Hibernate.initialize(history.getFaxToMailUser()); +// Hibernate.initialize(history.getFields()); +// } +// } + EmailGroup emailGroup = email.getEmailGroup(); + if (emailGroup != null) { + Hibernate.initialize(emailGroup.getEmail()); + for (Email groupedEmail : emailGroup.getEmail()) { + // initialize folder of the grouped demand to transmit the grouped emails of the same folder + Hibernate.initialize(groupedEmail.getMailFolder()); + // initialize the attachments for the attachments in the replies + Hibernate.initialize(groupedEmail.getAttachment()); } } + } + + long time3 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder after hibernate initializing : " + time3 + " (" + (time3 - time2) + ")"); + } + if (log.isDebugEnabled()) { + log.debug("getEmailFolder total : " + (time3 - start)); + } + + return result; + } + + public PaginationResult<Email> getEmailForFolder2(EmailFilter emailFilter, MailFolder folder, PaginationParameter pagination) { + long start = new Date().getTime(); + + Map<String, Object> args = new HashMap<>(); + String query = filteredDemandsOfFolderCondition(folder, emailFilter, args); + + // add same fecth liste as emailService#getEmailForFolder() + String hqlForFetchStep1 = "select E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " + query; + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 1 - " + hqlForFetchStep1); + } + String hqlForFetchStep2 = "select distinct E FROM " + Email.class.getName() + " E " + addAllFecthes( + Email.PROPERTY_PRIORITY, + Email.PROPERTY_DEMAND_TYPE, + Email.PROPERTY_CLIENT, + Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, + Email.PROPERTY_WAITING_STATE, + Email.PROPERTY_TAKEN_BY, + Email.PROPERTY_REPLIES, + Email.PROPERTY_LAST_ATTACHMENT_OPENER +// Email.PROPERTY_ATTACHMENT +// Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER +// Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS_JSON +// Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL + "." + Email.PROPERTY_ATTACHMENT, +// Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL + "." + Email.PROPERTY_MAIL_FOLDER + ) + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )"; + + if (log.isDebugEnabled()) { + log.debug("getEmailForFolder2 2 - " + hqlForFetchStep2); + } + + + // code copied from topia to perform search + long time = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 start query 1 : " + time); + } + + PaginationResult<String> pageResult = findPage(hqlForFetchStep1, args, pagination); + + long time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 end query 1 : " + time2 + " (" + (time2 - time) + ")"); + } + + List<String> step1ResultTopiaIds = pageResult.getElements(); + + List<Email> sortedEntities; + if (CollectionUtils.isEmpty(step1ResultTopiaIds)) { + sortedEntities = Lists.newArrayList(); + } else { + Map<String, Object> step2Args = Maps.newHashMap(); + step2Args.put("topiaIdsForFetch_", step1ResultTopiaIds); + + time = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 start query 2 : " + time); + } + + List<Email> entities = forHql(hqlForFetchStep2, step2Args).findAll(); + + time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 end query 2 : " + time2 + " (" + (time2 - time) + ")"); + } + sortedEntities = sortAccordingToIds(entities, step1ResultTopiaIds); + + long time3 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 sort query 2 : " + time3 + " (" + (time3 - time2) + ")"); + } + } + + time = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 init results : " + time); + } + + PaginationResult<Email> result = PaginationResult.of(sortedEntities, pageResult.getCount(), pageResult.getCurrentPage()); + + time2 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 after pagination results : " + time2 + " (" + (time2 - time) + ")"); + } + + //PaginationResult<Email> result = findPage(query.toString(), args, pagination); + + // manual fetch + // Email.PROPERTY_PRIORITY, + // Email.PROPERTY_DEMAND_TYPE, + // Email.PROPERTY_CLIENT, + // Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, + // Email.PROPERTY_ETAT_ATTENTE, + // Email.PROPERTY_TAKEN_BY, + // Email.PROPERTY_REPLIES, +// Email.PROPERTY_ATTACHMENT, + // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, + // Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, + // Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL) + for (Email email : result.getElements()) { + //Hibernate.initialize(email.getPriority()); + //Hibernate.initialize(email.getDemandType()); + //Hibernate.initialize(email.getClient()); +// List<RangeRow> rangeRows = email.getRangeRow(); +// if (rangeRows != null) { +// for (RangeRow rangeRow : rangeRows) { +// Hibernate.initialize(rangeRow.getRange()); +// } +// } + //Hibernate.initialize(email.getWaitingState()); + //Hibernate.initialize(email.getTakenBy()); +// Hibernate.initialize(email.getReplies()); + Hibernate.initialize(email.getAttachment()); +// Collection<History> histories = email.getHistory(); +// if (histories != null) { +// for (History history : histories) { +// Hibernate.initialize(history.getFaxToMailUser()); +// Hibernate.initialize(history.getFields()); +// } +// } EmailGroup emailGroup = email.getEmailGroup(); if (emailGroup != null) { Hibernate.initialize(emailGroup.getEmail()); @@ -592,6 +782,15 @@ } } } + + long time3 = new Date().getTime(); + if (log.isTraceEnabled()) { + log.trace("getEmailForFolder2 after hibernate initializing : " + time3 + " (" + (time3 - time2) + ")"); + } + if (log.isDebugEnabled()) { + log.debug("getEmailForFolder2 total : " + (time3 - start)); + } + return result; } @@ -998,7 +1197,7 @@ String propertyList; if (sum) { - propertyList = "sum(" + StringUtils.join(properties, "), sum(") + ")"; + propertyList = "SUM(" + StringUtils.join(properties, "), SUM(") + ")"; } else { propertyList = StringUtils.join(properties, ", "); } @@ -1020,7 +1219,7 @@ query += folderAndStatusCondition; if (sum) { - query += " group by email." + Email.PROPERTY_TOPIA_ID; + query += " GROUP BY email." + Email.PROPERTY_TOPIA_ID; } List<Object> queryResults = findAll(query, args); Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-12-12 12:51:00 UTC (rev 728) @@ -740,6 +740,7 @@ EmailTopiaDao dao = getPersistenceContext().getEmailDao(); result = dao.getEmailForFolder(filter, folder, page); +// result = dao.getEmailForFolder2(filter, folder, page); // TopiaQueryBuilderAddCriteriaOrRunQueryStep<Email> builderAddCriteriaOrRunQueryStep = // dao.forMailFolderEquals(folder) // .addNull(Email.PROPERTY_ARCHIVE_DATE) @@ -1258,6 +1259,7 @@ } email.setMailFolder(newFolder); email.setTakenBy(null); + email.setLastAttachmentOpener(null); History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.TRANSMISSION, History.PROPERTY_FAX_TO_MAIL_USER, currentUser, Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-12-12 12:51:00 UTC (rev 728) @@ -265,8 +265,7 @@ FaxToMailServiceContext serviceContext = newServiceContext(); useFolderCache = serviceContext.getApplicationConfig().isUseFolderCache(); - InitFaxToMailService initFaxToMailService = - serviceContext.getInitFaxToMailService(); + InitFaxToMailService initFaxToMailService = serviceContext.getInitFaxToMailService(); initFaxToMailService.init(); Map<Class, State> additionalStates = Maps.newHashMap(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-12-12 12:51:00 UTC (rev 728) @@ -38,12 +38,9 @@ import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import jaxx.runtime.JAXXUtil; -import jaxx.runtime.swing.table.filter.TableRowFilterSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; -import org.nuiton.decorator.Decorator; import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.util.pagination.PaginationResult; @@ -104,7 +101,7 @@ getContext().getSwingSession().add(dataTable, true); // fixes #5528 filtre sur les colonnes : il manque l'icone qui indique que la colonne est filtrée - handler.initTableFilter(); + handler.updateEmailFilterWithContextEmailFilter(); result = true; } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java 2014-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListTableFilter.java 2014-12-12 12:51:00 UTC (rev 728) @@ -179,6 +179,7 @@ @Override public Set<Object> distinctValuesForColumn(int i) { + log.info("distinctValuesForColumn " + i); MailFolder selectedFolder = handler.getModel().getSelectedFolder(); if (selectedFolder == null) { return null; 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-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-12-12 12:51:00 UTC (rev 728) @@ -27,8 +27,6 @@ import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.beans.IntrospectionException; import java.beans.PropertyChangeEvent; @@ -40,10 +38,8 @@ import java.util.Collection; import java.util.Date; import java.util.Enumeration; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -56,24 +52,17 @@ import javax.swing.tree.TreePath; import com.franciaflex.faxtomail.persistence.entities.Configuration; -import com.franciaflex.faxtomail.persistence.entities.DemandType; import com.franciaflex.faxtomail.persistence.entities.EmailFilter; import com.franciaflex.faxtomail.persistence.entities.MailAction; -import com.franciaflex.faxtomail.persistence.entities.Priority; -import com.franciaflex.faxtomail.persistence.entities.Range; -import com.franciaflex.faxtomail.persistence.entities.WaitingState; -import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.actions.OpenMailFolderChooserFromListAction; import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; import com.google.common.collect.Lists; import jaxx.runtime.JAXXUtil; -import jaxx.runtime.swing.table.filter.FilterChangeListener; import jaxx.runtime.swing.table.filter.TableFilter; import jaxx.runtime.swing.table.filter.TableRowFilterSupport; import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -109,11 +98,8 @@ import com.franciaflex.faxtomail.ui.swing.util.PaginationComboModel; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import org.nuiton.util.ObjectUtil; -import org.nuiton.util.beans.BeanUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; -import org.nuiton.util.pagination.PaginationParameter; /** * Handler of UI {@link com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler}. @@ -195,8 +181,32 @@ tableFilter = new DemandeListTableFilter(dataTable, this); - initTableFilter(); + Decorator<Object> decorator = new Decorator<Object>(Object.class) { + @Override + public String toString(Object bean) { + String s = null; + if (bean != null) { + Decorator<?> decorator = getDecorator(bean.getClass(), null); + if (decorator != null) { + s = decorator.toString(bean); + } + } + if (s == null) { + s = JAXXUtil.getStringValue(bean); + } + return s; + } + }; + TableRowFilterSupport.forFilter(tableFilter) + .searchable(true) + .searchDecorator(decorator) + .useTableRenderers(true) + .setPopupDefaultSize(new Dimension(250, 290)) + .apply(); + + updateEmailFilterWithContextEmailFilter(); + dataTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override @@ -329,38 +339,11 @@ loadFolderDemands(folder, nodesByFolder); } - public void initTableFilter() { - + public void updateEmailFilterWithContextEmailFilter() { EmailFilter emailFilter = getModel().getEmailFilter(); emailFilter.removePropertyChangeListener(emailFilterPropertyChangeListener); filtersFromContextToModel(); emailFilter.addPropertyChangeListener(emailFilterPropertyChangeListener); - - Decorator<Object> decorator = new Decorator<Object>(Object.class) { - @Override - public String toString(Object bean) { - String s = null; - if (bean != null) { - Decorator<?> decorator = getDecorator(bean.getClass(), null); - if (decorator != null) { - s = decorator.toString(bean); - } - } - if (s == null) { - s = JAXXUtil.getStringValue(bean); - } - return s; - } - }; - - JTable table = TableRowFilterSupport.forFilter(tableFilter) - .searchable(true) - .searchDecorator(decorator) - .useTableRenderers(true) - .setPopupDefaultSize(new Dimension(250, 290)) - .apply(); - - tableFilter.modelChanged(table.getModel()); } protected void filtersFromContextToModel() { @@ -466,8 +449,8 @@ break; } - if (log.isDebugEnabled()) { - log.debug(i + "property to copy to model's emailfilter : " + property); + if (log.isTraceEnabled()) { + log.trace(i + "property to copy to model's emailfilter : " + property); } if (property != null) { try { 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-12-11 15:20:39 UTC (rev 727) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-12-12 12:51:00 UTC (rev 728) @@ -54,6 +54,9 @@ import java.util.regex.Pattern; import javax.media.jai.PlanarImage; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.MediaPrintableArea; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; @@ -77,6 +80,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jpedal.PdfDecoder; +import org.jpedal.examples.simpleviewer.paper.PaperSizes; import org.jpedal.exception.PdfException; import org.jpedal.fonts.FontMappings; import org.nuiton.jaxx.application.ApplicationTechnicalException; @@ -512,6 +516,15 @@ paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); pf.setPaper(paper); +// PaperSizes ps = new PaperSizes("A4"); +// log.info(ps.getAvailablePaperSizes()); + +// Paper paper = pf.getPaper(); +// final int paperWidth = (int) paper.getImageableWidth(); +// final int paperHeight = (int) paper.getImageableHeight(); +// final int paperX = (int) paper.getImageableX(); +// final int paperY = (int) paper.getImageableY(); + printJob.setPrintable(new Printable() { public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { try { @@ -520,6 +533,14 @@ } BufferedImage image = pdfDecoder.getPageAsImage(pageIndex + 1); graphics.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); + +// graphics.drawImage(image, +// paperX, +// paperY, +// Math.min(paperWidth, image.getWidth()), +// Math.min(paperHeight, image.getHeight()), +// null); + return PAGE_EXISTS; } catch (Exception e) { @@ -530,9 +551,17 @@ }); // Send print job to default printer +// PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); +// float xmargin = 0.5f; +// float ymargin = 0.5f; +// float w = 595; +// float h = 842; +// attributes.add(new MediaPrintableArea(xmargin, ymargin, w - 2*xmargin, h - 2*ymargin, MediaPrintableArea.INCH)); +// result = defaultPrinter || printJob.printDialog(attributes); result = defaultPrinter || printJob.printDialog(); if (result) { printJob.print(); +// printJob.print(attributes); }