/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* PrintingWidget.java
*
* Created on 10. Juli 2006, 17:55
*/
package de.cismet.cismap.commons.gui.printing;
import edu.umd.cs.piccolo.event.PInputEventListener;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JRViewer;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Future;
import java.util.logging.Level;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JToolTip;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import de.cismet.cismap.commons.Debug;
import de.cismet.cismap.commons.HeadlessMapProvider;
import de.cismet.cismap.commons.HeadlessMapProvider.NotificationLevel;
import de.cismet.cismap.commons.XBoundingBox;
import de.cismet.cismap.commons.features.Feature;
import de.cismet.cismap.commons.gui.MappingComponent;
import de.cismet.cismap.commons.gui.piccolo.eventlistener.PrintTemplateFeature;
import de.cismet.cismap.commons.gui.piccolo.eventlistener.PrintingTemplatePreviewListener;
import de.cismet.cismap.commons.interaction.CismapBroker;
import de.cismet.cismap.commons.retrieval.RetrievalEvent;
import de.cismet.tools.CismetThreadPool;
import de.cismet.tools.Static2DTools;
import de.cismet.tools.gui.StaticSwingTools;
import de.cismet.tools.gui.downloadmanager.Download;
import de.cismet.tools.gui.downloadmanager.DownloadManager;
import de.cismet.tools.gui.downloadmanager.DownloadManagerDialog;
import de.cismet.tools.gui.imagetooltip.ImageToolTip;
import static de.cismet.cismap.commons.HeadlessMapProvider.NotificationLevel.*;
/**
* DOCUMENT ME!
*
* @author thorsten.hell@cismet.de
* @version $Revision$, $Date$
*/
public class PrintingWidget extends javax.swing.JDialog implements PropertyChangeListener {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PrintingWidget.class);
private static final boolean DEBUG = Debug.DEBUG;
public static final String BB_MIN_X = "minX";
public static final String BB_MIN_Y = "minY";
public static final String BB_MAX_X = "maxX";
public static final String BB_MAX_Y = "maxY";
//~ Instance fields --------------------------------------------------------
PDFCreatingWaitDialog pdfWait;
private MappingComponent mappingComponent = null;
private AbstractPrintingInscriber inscriber = null;
private ImageIcon errorImage = new javax.swing.ImageIcon(getClass().getResource(
"/de/cismet/cismap/commons/gui/res/error.png")); // NOI18N
private BufferedImage northArrowImage = null;
private Style styleTip;
private Style styleSuccess;
private Style styleInfo;
private Style styleExpert;
private Style styleWarn;
private Style styleError;
private Style styleErrorReason;
private EnumMap<NotificationLevel, Style> styles = new EnumMap<NotificationLevel, Style>(NotificationLevel.class);
private Future<Image> futureMapImage;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cmdBack;
private javax.swing.JButton cmdCancel;
private javax.swing.JButton cmdOk;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JSeparator jSeparator3;
private javax.swing.JSeparator jSeparator4;
private javax.swing.JLabel lbl1;
private javax.swing.JLabel lbl2;
private javax.swing.JPanel panDesc;
private javax.swing.JPanel panInscribe;
private javax.swing.JPanel panLoadAndInscribe;
private javax.swing.JPanel panProgress;
private javax.swing.JProgressBar prbLoading;
private javax.swing.JScrollPane scpLoadingStatus;
private javax.swing.JTextPane txpLoadingStatus;
private javax.swing.JTextField txt1;
private javax.swing.JTextField txt2;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form PrintingWidget.
*
* @param modal DOCUMENT ME!
* @param mappingComponent DOCUMENT ME!
*/
public PrintingWidget(final boolean modal, final MappingComponent mappingComponent) {
super(StaticSwingTools.getParentFrame(mappingComponent), modal);
final Runnable t = new Thread("PrintingWidget PDFCreatingWaitDialog()") {
@Override
public void run() {
pdfWait = new PDFCreatingWaitDialog(StaticSwingTools.getParentFrame(mappingComponent), true);
}
};
try {
northArrowImage = ImageIO.read(getClass().getResourceAsStream("/northarrow.png")); // NOI18N
} catch (Exception e) {
LOG.warn("Problems duroing the loading of the northarrow", e);
}
CismetThreadPool.execute(t);
this.mappingComponent = mappingComponent;
initComponents();
panDesc.setBackground(new Color(216, 228, 248));
getRootPane().setDefaultButton(cmdOk);
txpLoadingStatus.setBackground(this.getBackground());
prbLoading.setForeground(panDesc.getBackground());
styleTip = txpLoadingStatus.addStyle(TIP.name(), null);
StyleConstants.setForeground(styleTip, Color.blue);
StyleConstants.setFontSize(styleTip, 10);
styles.put(TIP, styleTip);
styleSuccess = txpLoadingStatus.addStyle(SUCCESS.name(), null);
StyleConstants.setForeground(styleSuccess, Color.green.darker());
StyleConstants.setFontSize(styleSuccess, 10);
styles.put(SUCCESS, styleSuccess);
styleInfo = txpLoadingStatus.addStyle(INFO.name(), null);
StyleConstants.setForeground(styleInfo, Color.DARK_GRAY);
StyleConstants.setFontSize(styleInfo, 10);
styles.put(INFO, styleInfo);
styleExpert = txpLoadingStatus.addStyle(EXPERT.name(), null);
StyleConstants.setForeground(styleExpert, Color.gray);
StyleConstants.setFontSize(styleExpert, 10);
styles.put(EXPERT, styleExpert);
styleWarn = txpLoadingStatus.addStyle(WARN.name(), null);
StyleConstants.setForeground(styleWarn, Color.orange.darker());
StyleConstants.setFontSize(styleWarn, 10);
styles.put(WARN, styleWarn);
styleError = txpLoadingStatus.addStyle(NotificationLevel.ERROR.name(), null);
StyleConstants.setForeground(styleError, Color.red);
StyleConstants.setFontSize(styleError, 10);
StyleConstants.setBold(styleError, true);
styles.put(NotificationLevel.ERROR, styleError);
styleErrorReason = txpLoadingStatus.addStyle(ERROR_REASON.name(), null);
StyleConstants.setForeground(styleErrorReason, Color.red);
StyleConstants.setFontSize(styleErrorReason, 10);
styles.put(ERROR_REASON, styleErrorReason);
StaticSwingTools.setNiftyScrollBars(scpLoadingStatus);
// txpLoadingStatus.setContentType("text/html");
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param modal DOCUMENT ME!
* @param mappingComponent DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public PrintingWidget cloneWithNewParent(final boolean modal, final MappingComponent mappingComponent) {
final PrintingWidget newWidget = new PrintingWidget(modal, mappingComponent);
return newWidget;
}
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
lbl1 = new javax.swing.JLabel();
txt1 = new javax.swing.JTextField();
lbl2 = new javax.swing.JLabel();
txt2 = new javax.swing.JTextField();
panDesc = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jSeparator3 = new javax.swing.JSeparator();
cmdOk = new javax.swing.JButton();
cmdCancel = new javax.swing.JButton();
panLoadAndInscribe = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jSeparator4 = new javax.swing.JSeparator();
panInscribe = new javax.swing.JPanel();
panProgress = new javax.swing.JPanel();
scpLoadingStatus = new javax.swing.JScrollPane();
txpLoadingStatus = new javax.swing.JTextPane();
prbLoading = new javax.swing.JProgressBar();
cmdBack = new javax.swing.JButton();
lbl1.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.lbl1.text")); // NOI18N
txt1.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.txt1.text")); // NOI18N
lbl2.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.lbl2.text")); // NOI18N
txt2.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.txt2.text")); // NOI18N
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.title")); // NOI18N
addComponentListener(new java.awt.event.ComponentAdapter() {
@Override
public void componentShown(final java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
});
panDesc.setBackground(java.awt.SystemColor.inactiveCaptionText);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel1.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.jLabel1.text")); // NOI18N
jLabel2.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.jLabel2.text")); // NOI18N
jLabel3.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.jLabel3.text")); // NOI18N
jLabel4.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.jLabel4.text")); // NOI18N
jLabel5.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/de/cismet/cismap/commons/gui/res/frameprint.png"))); // NOI18N
final org.jdesktop.layout.GroupLayout panDescLayout = new org.jdesktop.layout.GroupLayout(panDesc);
panDesc.setLayout(panDescLayout);
panDescLayout.setHorizontalGroup(
panDescLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
jSeparator3,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
286,
Short.MAX_VALUE).add(
org.jdesktop.layout.GroupLayout.TRAILING,
panDescLayout.createSequentialGroup().addContainerGap(146, Short.MAX_VALUE).add(jLabel5)
.addContainerGap()).add(
panDescLayout.createSequentialGroup().addContainerGap().add(
panDescLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
panDescLayout.createSequentialGroup().add(
jSeparator2,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
262,
Short.MAX_VALUE).addContainerGap()).add(
panDescLayout.createSequentialGroup().add(
panDescLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
jLabel1).add(jLabel2).add(jLabel3).add(jLabel4)).add(83, 83, 83)))));
panDescLayout.setVerticalGroup(
panDescLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
panDescLayout.createSequentialGroup().addContainerGap().add(jLabel1).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
jSeparator2,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
2,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(jLabel2).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(jLabel3).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(jLabel4).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED,
58,
Short.MAX_VALUE).add(jLabel5).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(
jSeparator3,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)));
cmdOk.setMnemonic('O');
cmdOk.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.cmdOk.text")); // NOI18N
cmdOk.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdOkActionPerformed(evt);
}
});
cmdCancel.setMnemonic('A');
cmdCancel.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.cmdCancel.text")); // NOI18N
cmdCancel.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdCancelActionPerformed(evt);
}
});
jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel6.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.jLabel6.text")); // NOI18N
panInscribe.setLayout(new java.awt.BorderLayout());
txpLoadingStatus.setBackground(java.awt.SystemColor.control);
txpLoadingStatus.setEditable(false);
scpLoadingStatus.setViewportView(txpLoadingStatus);
prbLoading.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
prbLoading.setBorderPainted(false);
final org.jdesktop.layout.GroupLayout panProgressLayout = new org.jdesktop.layout.GroupLayout(panProgress);
panProgress.setLayout(panProgressLayout);
panProgressLayout.setHorizontalGroup(
panProgressLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
prbLoading,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
435,
Short.MAX_VALUE).add(
scpLoadingStatus,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
435,
Short.MAX_VALUE));
panProgressLayout.setVerticalGroup(
panProgressLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
org.jdesktop.layout.GroupLayout.TRAILING,
panProgressLayout.createSequentialGroup().add(
scpLoadingStatus,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
101,
Short.MAX_VALUE).add(4, 4, 4).add(
prbLoading,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
9,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)));
final org.jdesktop.layout.GroupLayout panLoadAndInscribeLayout = new org.jdesktop.layout.GroupLayout(
panLoadAndInscribe);
panLoadAndInscribe.setLayout(panLoadAndInscribeLayout);
panLoadAndInscribeLayout.setHorizontalGroup(
panLoadAndInscribeLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
panLoadAndInscribeLayout.createSequentialGroup().addContainerGap().add(jLabel6).add(148, 148, 148)).add(
jSeparator4,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
459,
Short.MAX_VALUE).add(
panLoadAndInscribeLayout.createSequentialGroup().addContainerGap().add(
jSeparator1,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
447,
Short.MAX_VALUE)).add(
panLoadAndInscribeLayout.createSequentialGroup().addContainerGap().add(
panProgress,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE).addContainerGap()).add(
panLoadAndInscribeLayout.createSequentialGroup().addContainerGap().add(
panInscribe,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
435,
Short.MAX_VALUE).addContainerGap()));
panLoadAndInscribeLayout.setVerticalGroup(
panLoadAndInscribeLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
panLoadAndInscribeLayout.createSequentialGroup().addContainerGap().add(jLabel6).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
jSeparator1,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
panInscribe,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
125,
Short.MAX_VALUE).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(
panProgress,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
jSeparator4,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)));
cmdBack.setText(org.openide.util.NbBundle.getMessage(PrintingWidget.class, "PrintingWidget.cmdBack.text")); // NOI18N
cmdBack.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdBackActionPerformed(evt);
}
});
final org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
layout.createSequentialGroup().add(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
layout.createSequentialGroup().add(
panDesc,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
panLoadAndInscribe,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)).add(
org.jdesktop.layout.GroupLayout.TRAILING,
layout.createSequentialGroup().add(
cmdCancel,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
125,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
cmdBack,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
125,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
cmdOk,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
126,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))).addContainerGap()));
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
org.jdesktop.layout.GroupLayout.TRAILING,
layout.createSequentialGroup().add(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING).add(
panLoadAndInscribe,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE).add(
panDesc,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE).add(cmdOk).add(cmdCancel).add(
cmdBack)).addContainerGap()));
pack();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdBackActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdBackActionPerformed
dispose();
} //GEN-LAST:event_cmdBackActionPerformed
/**
* DOCUMENT ME!
*/
public void startLoading() {
if (DEBUG) {
if (LOG.isDebugEnabled()) {
LOG.debug("startLoading()"); // NOI18N
}
}
txpLoadingStatus.setText(""); // NOI18N
try {
final Class c = Class.forName(mappingComponent.getPrintingSettingsDialog().getSelectedTemplate()
.getClassName());
final Constructor constructor = c.getConstructor();
inscriber = (AbstractPrintingInscriber)constructor.newInstance();
} catch (Exception e) {
LOG.error("Error while loading the print template", e); // NOI18N
}
panInscribe.removeAll();
panInscribe.add(inscriber, BorderLayout.CENTER);
cmdOk.setEnabled(false);
// final Template t = mappingComponent.getPrintingSettingsDialog().getSelectedTemplate();
//
// final Resolution r = mappingComponent.getPrintingSettingsDialog().getSelectedResolution();
final PInputEventListener printing = mappingComponent.getInputListener(
MappingComponent.PRINTING_AREA_SELECTION);
if (printing instanceof PrintingTemplatePreviewListener) {
for (final PrintTemplateFeature ptf
: mappingComponent.getSpecialFeatureCollection(PrintTemplateFeature.class)) {
addMessageToProgressPane(org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.startLoading().msg",
new Object[] { ptf.getResolution() }),
EXPERT); // NOI18N
final HeadlessMapProvider headlessMapProvider = HeadlessMapProvider
.createHeadlessMapProviderAndAddLayers(mappingComponent);
headlessMapProvider.setRequestingObject(ptf);
headlessMapProvider.addPropertyChangeListener(this);
if ((ptf.getRotationAngle() == 0)) {
final XBoundingBox xbb = new XBoundingBox(ptf.getGeometry());
headlessMapProvider.setBoundingBox(xbb);
ptf.setFutureMapImage(headlessMapProvider.getImage(
(int)PrintTemplateFeature.DEFAULT_JAVA_RESOLUTION_IN_DPI,
ptf.getResolution().getResolution(),
ptf.getTemplate().getMapWidth(),
ptf.getTemplate().getMapHeight()));
if (LOG.isDebugEnabled()) {
LOG.debug("BoundingBox (auf " + ptf.getTemplate().getMapWidth() + ","
+ ptf.getTemplate().getMapHeight() + "):" + xbb); // NOI18N
}
} else {
// Rotationpreparation
final XBoundingBox xbb = new XBoundingBox(ptf.getGeometry().getEnvelope());
headlessMapProvider.setBoundingBox(xbb);
final Dimension newDimension = RotatedPrintingUtils
.calculateNewImageDimensionToFitRotatedBoundingBox(ptf.getTemplate().getMapWidth(),
ptf.getTemplate().getMapHeight(),
ptf.getRotationAngle());
if (LOG.isDebugEnabled()) {
LOG.debug("Extended BoundingBox (auf " + newDimension + "):" + xbb); // NOI18N
}
ptf.setFutureMapImage(headlessMapProvider.getImage(
(int)PrintTemplateFeature.DEFAULT_JAVA_RESOLUTION_IN_DPI,
ptf.getResolution().getResolution(),
newDimension.getWidth(),
newDimension.getHeight()));
}
}
}
prbLoading.setIndeterminate(true);
super.pack();
}
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void formComponentShown(final java.awt.event.ComponentEvent evt) { //GEN-FIRST:event_formComponentShown
} //GEN-LAST:event_formComponentShown
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdCancelActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdCancelActionPerformed
dispose();
} //GEN-LAST:event_cmdCancelActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdOkActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdOkActionPerformed
final Runnable t = new Thread("PrintingWidget actionPerformed") {
@Override
public void run() {
final Action a = mappingComponent.getPrintingSettingsDialog().getSelectedAction();
if (a.getId().equalsIgnoreCase(Action.PDF)) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
StaticSwingTools.showDialog(pdfWait);
}
});
}
final PrintingTemplatePreviewListener printingListener = ((PrintingTemplatePreviewListener)
(mappingComponent.getInputListener(
MappingComponent.PRINTING_AREA_SELECTION)));
final ArrayList<JasperPrint> prints = new ArrayList<JasperPrint>(
mappingComponent.getSpecialFeatureCollection(PrintTemplateFeature.class).size());
for (final PrintTemplateFeature ptf
: mappingComponent.getSpecialFeatureCollection(PrintTemplateFeature.class)) {
final Template t = ptf.getTemplate();
final Scale s = ptf.getScale();
try {
final HashMap param = new HashMap();
final Image i = ptf.getFutureMapImage().get();
if (ptf.getRotationAngle() == 0) {
param.put(t.getMapPlaceholder(), i);
System.out.println("Imagedimension (raw - not rotated):"
+ ptf.getFutureMapImage().get().getWidth(null) + ","
+ ptf.getFutureMapImage().get().getHeight(null));
} else {
param.put(ptf.getTemplate().getNorthArrowPlaceholder(),
RotatedPrintingUtils.rotate(northArrowImage, -1 * ptf.getRotationAngle()));
final BufferedImage correctedImage = RotatedPrintingUtils.rotateAndCrop(
i,
ptf.getRotationAngle(),
ptf.getTemplate().getMapWidth(),
ptf.getTemplate().getMapHeight(),
(int)PrintTemplateFeature.DEFAULT_JAVA_RESOLUTION_IN_DPI,
ptf.getResolution().getResolution());
param.put(t.getMapPlaceholder(), correctedImage);
System.out.println("Imagedimension (raw):"
+ ptf.getFutureMapImage().get().getWidth(null) + ","
+ ptf.getFutureMapImage().get().getHeight(null));
System.out.println("Imagedimension (corrected):" + correctedImage.getWidth() + ","
+ correctedImage.getHeight());
}
param.put(t.getScaleDemoninatorPlaceholder(),
String.valueOf(ptf.getRealScaleDenominator()));
final HashMap<String, String> vals = inscriber.getValues();
for (final String key : vals.keySet()) {
vals.put(key, vals.get(key).replaceAll("##N##", String.valueOf(ptf.getNumber())));
vals.put(
key,
vals.get(key).replaceAll(
"##G##",
String.valueOf(
mappingComponent.getSpecialFeatureCollection(PrintTemplateFeature.class)
.size())));
}
param.putAll(vals);
// Werte können nur gesetzt werden wenn das Template nicht gedreht wurde
if (ptf.getRotationAngle() == 0) {
final XBoundingBox bbox = new XBoundingBox(ptf.getGeometry());
param.put(BB_MIN_X, bbox.getX1());
param.put(BB_MIN_Y, bbox.getY1());
param.put(BB_MAX_X, bbox.getX2());
param.put(BB_MAX_Y, bbox.getY2());
}
if (DEBUG) {
if (LOG.isDebugEnabled()) {
LOG.debug("Parameter:" + param); // NOI18N
}
}
final JasperReport jasperReport = (JasperReport)JRLoader.loadObject(getClass()
.getResourceAsStream(t.getFile()));
final JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param);
prints.add(jasperPrint);
} catch (Throwable tt) {
LOG.error("Error during Jaspern", tt); // NOI18N
final ErrorInfo ei = new ErrorInfo(org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.cmdOKActionPerformed(ActionEvent).ErrorInfo.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.cmdOKActionPerformed(ActionEvent).ErrorInfo.message"), // NOI18N
null,
null,
tt,
Level.ALL,
null);
JXErrorPane.showDialog(PrintingWidget.this.mappingComponent, ei);
if (pdfWait.isVisible()) {
pdfWait.dispose();
}
}
}
try {
if (a.getId().equalsIgnoreCase(Action.PRINTPREVIEW) && (prints.size() == 1)) {
final JasperPrint jasperPrint = prints.get(0);
final JRViewer aViewer = new JRViewer(jasperPrint);
final JFrame aFrame = new JFrame(org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.cmdOKActionPerformed(ActionEvent).aFrame.title")); // NOI18N
aFrame.getContentPane().add(aViewer);
final java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
aFrame.setSize(screenSize.width / 2, screenSize.height / 2);
final java.awt.Insets insets = aFrame.getInsets();
aFrame.setSize(aFrame.getWidth() + insets.left + insets.right,
aFrame.getHeight()
+ insets.top
+ insets.bottom
+ 20);
aFrame.setLocationRelativeTo(PrintingWidget.this);
aFrame.setVisible(true);
} else if (a.getId().equalsIgnoreCase(Action.PDF)
|| (a.getId().equalsIgnoreCase(Action.PRINTPREVIEW) && (prints.size() > 1))) {
if (mappingComponent.getPrintingSettingsDialog().isChooseFileName()) {
final File file = StaticSwingTools.chooseFile(DownloadManager.instance()
.getDestinationDirectory().getAbsolutePath(),
true,
new String[] { "pdf" },
"PDF (.pdf)",
PrintingWidget.this.mappingComponent);
if (file != null) {
final JasperDownload jd = new JasperDownload(
prints,
file.getParent(),
"Cismap-Druck",
file.getName().substring(0, file.getName().indexOf(".")));
jd.setFileToSaveTo(file);
if (DownloadManager.instance().getDownloads().contains(jd)) {
// Previous downloads, that uses the same destination file, must be removed, so
// that the new download can be executed
final List<Download> downloads = new ArrayList(DownloadManager.instance()
.getDownloads());
final int index = downloads.indexOf(jd);
if (index != -1) {
final Download d = downloads.get(index);
DownloadManager.instance().removeDownload(d);
}
}
DownloadManager.instance().add(jd);
}
} else if (DownloadManagerDialog.getInstance().showAskingForUserTitleDialog(
PrintingWidget.this.mappingComponent)) {
final String jobname = DownloadManagerDialog.getInstance().getJobName();
DownloadManager.instance()
.add(new JasperDownload(prints, jobname, "Cismap-Druck", "cismap"));
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
if (pdfWait.isVisible()) {
pdfWait.dispose();
}
}
});
} else if (a.getId().equalsIgnoreCase(Action.PRINT)) {
for (final JasperPrint jasperPrint : prints) {
JasperPrintManager.printReport(jasperPrint, true);
}
}
} catch (Throwable tt) {
LOG.error("Error during Jaspern", tt); // NOI18N
final ErrorInfo ei = new ErrorInfo(org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.cmdOKActionPerformed(ActionEvent).ErrorInfo.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.cmdOKActionPerformed(ActionEvent).ErrorInfo.message"), // NOI18N
null,
null,
tt,
Level.ALL,
null);
JXErrorPane.showDialog(PrintingWidget.this.mappingComponent, ei);
if (pdfWait.isVisible()) {
pdfWait.dispose();
}
}
final ArrayList<Feature> ptfs = new ArrayList<Feature>(mappingComponent.getSpecialFeatureCollection(
PrintTemplateFeature.class));
mappingComponent.getFeatureCollection().removeFeatures(ptfs);
CismapBroker.getInstance()
.setCheckForOverlappingGeometriesAfterFeatureRotation(
mappingComponent.getPrintingSettingsDialog().getOldOverlappingCheckEnabled());
}
};
CismetThreadPool.execute(t);
dispose();
} //GEN-LAST:event_cmdOkActionPerformed
/**
* DOCUMENT ME!
*
* @param args the command line arguments
*/
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// new PrintingWidget(new javax.swing.JFrame(), true).setVisible(true);
}
});
}
/**
* set the progress bar to 100 percent and activates the ok button.
*/
private void activateButton() {
prbLoading.setIndeterminate(false);
prbLoading.setValue(100);
cmdOk.setEnabled(true);
}
/**
* DOCUMENT ME!
*
* @param icon DOCUMENT ME!
* @param tooltipImage DOCUMENT ME!
*/
private void addIconToProgressPane(final ImageIcon icon, final Image tooltipImage) {
final JLabel label = new JLabel() {
@Override
public JToolTip createToolTip() {
if (tooltipImage != null) {
return new ImageToolTip(tooltipImage);
} else {
return super.createToolTip();
}
}
};
synchronized (this) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
final StyledDocument doc = (StyledDocument)txpLoadingStatus.getDocument();
final Style style = doc.addStyle("Icon", null); // NOI18N
label.setIcon(icon);
label.setText(" "); // NOI18N
// label.setVerticalAlignment(SwingConstants.TOP);
label.setAlignmentY(0.8f);
label.setToolTipText(
org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.addIconToProgressPane(ImageIcon,Image).label.setToolTipText")); // NOI18N
StyleConstants.setComponent(style, label);
try {
doc.insertString(doc.getLength(), "ico", style); // NOI18N
} catch (BadLocationException ble) {
LOG.error("Error in addIconToProgressPane", ble); // NOI18N
}
}
});
}
}
@Override
public void propertyChange(final PropertyChangeEvent evt) {
if (evt.getSource() instanceof HeadlessMapProvider) {
final HeadlessMapProvider source = (HeadlessMapProvider)evt.getSource();
if (evt.getNewValue() instanceof HeadlessMapProvider.NotificationMessage) {
final HeadlessMapProvider.NotificationMessage message = (HeadlessMapProvider.NotificationMessage)
evt.getNewValue();
addMessageToProgressPane(message.getMsg(), message.getLevel());
if (message.getLevel().equals(UNLOCKED)) {
} else if (message.getLevel().equals(ERROR_REASON) && (evt.getOldValue() instanceof RetrievalEvent)) {
final RetrievalEvent e = (RetrievalEvent)evt.getOldValue();
if (e.getRetrievedObject() instanceof Image) {
final Image i = Static2DTools.removeUnusedBorder((Image)e.getRetrievedObject(), 5, 0.7);
addIconToProgressPane(errorImage, i);
addMessageToProgressPane(org.openide.util.NbBundle.getMessage(
PrintingWidget.class,
"PrintingWidget.retrievalComplete(RetrievalEvent).msg2",
new Object[] { e.getRetrievalService() }),
ERROR_REASON); // NOI18N
}
}
final Collection<PrintTemplateFeature> prints = mappingComponent.getSpecialFeatureCollection(
PrintTemplateFeature.class);
boolean allPrintsReady = true;
for (final PrintTemplateFeature ptf : prints) {
if (!(ptf.getFutureMapImage().isDone() || ptf.getFutureMapImage().isCancelled())) {
allPrintsReady = false;
break;
}
}
if (allPrintsReady) {
activateButton();
}
}
}
}
/**
* DOCUMENT ME!
*
* @param msg DOCUMENT ME!
* @param reason DOCUMENT ME!
*/
private void addMessageToProgressPane(final String msg, final NotificationLevel reason) {
synchronized (this) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
txpLoadingStatus.getStyledDocument()
.insertString(
txpLoadingStatus.getStyledDocument().getLength(),
msg
+ "\n",
styles.get(reason)); // NOI18N
} catch (BadLocationException ble) {
LOG.error("error during Insert", ble); // NOI18N
}
}
});
}
}
}