package de.deutscherv.diva.gui.viewer; import java.awt.AWTEvent; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.AWTEventListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.CharArrayWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.ResourceBundle; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.WindowConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.preferences.ScopedPreferenceStore; import org.icepdf.ri.util.PropertiesManager; import de.deutscherv.diva.common.bh.DokIdentHelper; import de.deutscherv.diva.common.dao.DataObjectFactory; import de.deutscherv.diva.common.dao.IDivaDokIdent; import de.deutscherv.diva.common.dao.IDivaMessage; import de.deutscherv.diva.common.dao.IFODataObject; import de.deutscherv.diva.common.dao.IRSDataObject; import de.deutscherv.diva.common.dao.impl.TreeRSDataObject; import de.deutscherv.diva.common.exception.BusinessException; import de.deutscherv.diva.common.exception.TechnicalException; import de.deutscherv.diva.common.logging.Logger; import de.deutscherv.diva.common.types.DivaRightType; import de.deutscherv.diva.gui.commons.core.ErrorHandler; import de.deutscherv.diva.gui.commons.core.Helper; import de.deutscherv.diva.gui.commons.preferences.allgemein.RechercheConfigManager; import de.deutscherv.diva.gui.commons.provider.DokumentListeProvider; import de.deutscherv.diva.gui.commons.provider.IDokumentListeProvider; import de.deutscherv.diva.gui.model.exceptions.ValueNotFoundException; import de.deutscherv.diva.gui.model.services.DokumentattributNamen; import de.deutscherv.diva.gui.model.services.NotAuthenticatedException; import de.deutscherv.diva.gui.model.services.ServiceFactory; import de.deutscherv.diva.gui.model.wrapper.Dokument; import de.deutscherv.diva.gui.model.wrapper.DokumentReferenz; import de.deutscherv.diva.gui.model.wrapper.KeyValuePair; import de.deutscherv.diva.gui.model.wrapper.Suchergebnis; import de.deutscherv.diva.gui.postkorb.PostkorbPerspective; import de.deutscherv.diva.gui.postkorb.auftraege.AuftragEditor; import de.deutscherv.diva.gui.postkorb.vorgaenge.VorgangView; import de.deutscherv.diva.gui.recherche.RecherchePerspective; import de.deutscherv.diva.gui.recherche.akten.AktenMaske; import de.deutscherv.diva.gui.recherche.akten.AktenView; import de.deutscherv.diva.services.IDokumentService; import de.deutscherv.icepdf.integration.IMarkupSaveHandler; import de.deutscherv.icepdf.integration.IcePdfPuRAnnotation; import de.deutscherv.icepdf.integration.JAXBXmlHandler; import de.deutscherv.icepdf.integration.MySwingController; import de.deutscherv.icepdf.integration.MySwingViewBuilder; /** * Klasse für die Einbindung von eReview. */ @SuppressWarnings("serial") public class FileViewer extends JFrame implements IMarkupSaveHandler { private static Logger _logger = Logger.getLogger(FileViewer.class); private MySwingController _ICEpdfController; private static PropertiesManager _propertiesManager; // private IEReviewBean _erbean; // private String _documentID = null; // private String _technischeDokId; private String _docId; private IDivaDokIdent _pIDivaDokIdent; private final ArrayList _openDocuments = new ArrayList(); private ConfigManager _configInstance; // private final HashMap _openDocumentsMap = new HashMap(); private final HashMap _openDocumentsDokIdentsMap = new HashMap(); private FileViewer _viewer = null; private Dokument _dokument = null; private DokumentReferenz _dokumentReferenz = null; private IDokumentService _service = null; private String _dokurl; private URL _url; private ButtonGroup _buttonGroup = new ButtonGroup(); private JRadioButton _akteBlaetternSelected; private JRadioButton _vorgangBlaetternSelected; private JRadioButton _auftragBlaetternSelected; private void ladeNextDocument() { this.setAlwaysOnTop(true); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { // TODO MNJ Welcher DokListeProvider???? DokumentListeProvider lDokListeProvider; if (_auftragBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.AUFTRAG); } else if (_vorgangBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.VORGANG); } else { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(RecherchePerspective.ID); } int lSelectedIndex = lDokListeProvider.getSelectedIndex(); if (lSelectedIndex >= 0 && lDokListeProvider.getDokumentReferenzListe().size() > lSelectedIndex + 1) { lDokListeProvider.setSelection(lSelectedIndex + 1); if (lDokListeProvider.hasSelection()) { // AbstractAction lAction = new // ShowDocumentAction(lDokListeProvider.getSelectedDokumente().get(0), // false); // if (lAction.isEnabled()) { // lAction.run(); // } ladeDokument(lDokListeProvider); } } else if (lDokListeProvider.getDokumentReferenzListe().size() == 1) { lDokListeProvider.setSelection(0); if (lDokListeProvider.hasSelection()) { ladeDokument(lDokListeProvider); } } } }); this.setAlwaysOnTop(false); } private void ladePreviousDocument() { this.setAlwaysOnTop(true); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { // TODO MNJ Welcher DokListeProvider???? DokumentListeProvider lDokListeProvider; if (_auftragBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.AUFTRAG); } else if (_vorgangBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.VORGANG); } else { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(RecherchePerspective.ID); } int lSelectedIndex = lDokListeProvider.getSelectedIndex(); if (lSelectedIndex >= 1) { lDokListeProvider.setSelection(lSelectedIndex - 1); if (lDokListeProvider.hasSelection()) { ladeDokument(lDokListeProvider); } } else if (lDokListeProvider.getDokumentReferenzListe().size() == 1) { lDokListeProvider.setSelection(0); if (lDokListeProvider.hasSelection()) { ladeDokument(lDokListeProvider); } } } }); this.setAlwaysOnTop(false); } private void ladeFirstDocument() { this.setAlwaysOnTop(true); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { // TODO MNJ Welcher DokListeProvider???? DokumentListeProvider lDokListeProvider; if (_auftragBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.AUFTRAG); } else if (_vorgangBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.VORGANG); } else { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(RecherchePerspective.ID); } int lSelectedIndex = lDokListeProvider.getSelectedIndex(); if (lSelectedIndex >= 0) { lDokListeProvider.setSelection(0); if (lDokListeProvider.hasSelection()) { ladeDokument(lDokListeProvider); } } } }); this.setAlwaysOnTop(false); } private void ladeLastDocument() { this.setAlwaysOnTop(true); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { // TODO MNJ Welcher DokListeProvider???? DokumentListeProvider lDokListeProvider; if (_auftragBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.AUFTRAG); } else if (_vorgangBlaetternSelected.isSelected()) { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(PostkorbPerspective.VORGANG); } else { lDokListeProvider = (DokumentListeProvider) DokumentListeProvider .getInstance(RecherchePerspective.ID); } int lSelectedIndex = lDokListeProvider.getSelectedIndex(); if (lSelectedIndex <= lDokListeProvider .getDokumentReferenzListe().size() - 1) { lDokListeProvider.setSelection(lDokListeProvider .getDokumentReferenzListe().size() - 1); if (lDokListeProvider.hasSelection()) { ladeDokument(lDokListeProvider); } } } }); this.setAlwaysOnTop(false); } private void ladeDokument(IDokumentListeProvider lDokListeProvider) { _dokumentReferenz = lDokListeProvider.getSelectedDokumente().get(0); try { _service = ServiceFactory.holenDokumentService(); } catch (NotAuthenticatedException e) { ErrorHandler.handle(e); } _viewer = Activator.getDefault().getViewer(); // _viewer.setState(FileViewer.ICONIFIED); if (_dokumentReferenz != null) { try { if (_service != null) { IFODataObject lDataObject = _service .getDokumentMetainfo(DokIdentHelper .getDivaDokIdentFrom(_dokumentReferenz .getResultSet(), _dokumentReferenz .getIndex())); if (lDataObject != null) { _dokument = new Dokument(_dokumentReferenz, lDataObject); if (_dokument.getURL().equals("")) { _logger.info("Ärztliche Unterlagen"); IDivaMessage lDivaMessage = ServiceFactory .holenConfigManager().getDivaMessage( "DIVA-111"); throw new BusinessException(lDivaMessage .getDivaMessage()); } } } } catch (BusinessException e) { ErrorHandler.handle(e); } if (_viewer != null && _dokumentReferenz != null) { try { _dokurl = _dokument.getURL(); _url = new URL(_dokurl); } catch (MalformedURLException e) { ErrorHandler.handle(e); } catch (TechnicalException e) { ErrorHandler.handle(e); } catch (BusinessException e) { ErrorHandler.handle(e); } } if (_viewer != null && _dokumentReferenz != null) { try { _viewer .openDocument( _dokumentReferenz.getId(), _dokumentReferenz.getText(), _url.openStream(), (Boolean) _dokumentReferenz .getValueFor(DokumentattributNamen.HAT_ANNOTATIONEN .value()), DokIdentHelper .getDivaDokIdentFrom(_dokument .getFODataObject())); } catch (TechnicalException e) { ErrorHandler.handle(e); } catch (BusinessException e) { ErrorHandler.handle(e); } catch (IOException e) { ErrorHandler.handle(e); } } _viewer.setState(FileViewer.NORMAL); _viewer.show(); } } /** * This is the default constructor. * * @param pLogPath * Verzeichnis Log-Datei * @param pIniPath * Verzeichnis Ini-Datei * @param pProfilePath * Verzeichnis Profil-Datei * @param pBlaetterLeiste * Blätterleiste anzeigen? true/false * @throws LicenseException * keine Lizenz? */ public FileViewer( // String pLogPath, String pIniPath, String pProfilePath, boolean pBlaetterLeiste) { super(); // if (pLogPath == null || pLogPath.length() < 1) { // throw new IllegalArgumentException("logPath"); // } // if (pIniPath == null || pIniPath.length() < 1) { // throw new IllegalArgumentException("iniPath"); // } // if (pProfilePath == null || pProfilePath.length() < 1) { // throw new IllegalArgumentException("profilePath"); // } this.setTitle(Labels.viewer_titel); _ICEpdfController = new MySwingController(); _ICEpdfController.setIsEmbeddedComponent(true); // add interactive mouse link annotation support via callback _ICEpdfController.getDocumentViewController().setAnnotationCallback( new org.icepdf.ri.common.MyAnnotationCallback( _ICEpdfController.getDocumentViewController())); _ICEpdfController.registerMarkupSaveHandler(this); initPropertiesManager(); // Build a SwingViewFactory configured with the controller MySwingViewBuilder _ICEpdfViewBuilder = new MySwingViewBuilder(_ICEpdfController, _propertiesManager); this.setJMenuBar(_ICEpdfViewBuilder.buildCompleteMenuBar()); // Look and Feel setzen try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { ErrorHandler.handle(e); } // try { // this._erbean = EReviewBeanFactory.createEReviewBean(pLogPath, // pIniPath); // this._erbean.applyUserProfile(pProfilePath); // this._erbean.showContextMenu(true); // } // catch (Exception e1) { // ErrorHandler.handle(e1); // } this.getToolkit().addAWTEventListener(new AWTEventListener() { public void eventDispatched(AWTEvent pEvent) { switch (pEvent.getID()) { case KeyEvent.KEY_PRESSED: if (pEvent instanceof KeyEvent) { KeyEvent lKeyEvent = (KeyEvent) pEvent; if (lKeyEvent.getKeyCode() == 40 && lKeyEvent.getModifiers() == 2) { _logger.info("STRG und " + KeyEvent.getKeyText(lKeyEvent .getKeyCode()) + " gedrückt!"); // setExtendedState(JFrame.ICONIFIED); // Display.getCurrent().readAndDispatch(); // Neues Dokument wird im Viewer geöffnet // TODO Auto-generated method stub ladeNextDocument(); } if (lKeyEvent.getKeyCode() == 38 && lKeyEvent.getModifiers() == 2) { _logger.info("STRG und " + KeyEvent.getKeyText(lKeyEvent .getKeyCode()) + " gedrückt!"); // setExtendedState(JFrame.ICONIFIED); // Display.getCurrent().readAndDispatch(); // Neues Dokument wird im Viewer geöffnet // TODO Auto-generated method stub ladePreviousDocument(); } } _logger.info(pEvent + ""); break; case KeyEvent.KEY_TYPED: break; case KeyEvent.KEY_RELEASED: break; default: break; } } }, AWTEvent.KEY_EVENT_MASK); JPanel lPanel = new JPanel(); JPanel lPanel2 = new JPanel(); lPanel.setLayout(new BorderLayout()); // lPanel.add(this._erbean.getEReviewPanel(), BorderLayout.CENTER); lPanel.add(_ICEpdfViewBuilder.buildViewerPanel(), BorderLayout.CENTER); if (pBlaetterLeiste) { boolean lHatRecht = false; try { lHatRecht = ServiceFactory.getZugriffProfil().hatRecht( DivaRightType.POSTKORB); } catch (Exception e) { ErrorHandler.handle(e); } _akteBlaetternSelected = new JRadioButton(); _akteBlaetternSelected.setSelected(true); _vorgangBlaetternSelected = new JRadioButton(); _auftragBlaetternSelected = new JRadioButton(); if (lHatRecht) { JLabel lLabel = new JLabel(); lLabel.setText("Dokument öffnen aus: "); lPanel2.add(lLabel); _akteBlaetternSelected.setText("Akte"); _buttonGroup.add(_akteBlaetternSelected); lPanel2.add(_akteBlaetternSelected); _vorgangBlaetternSelected.setText("Vorgang"); _buttonGroup.add(_vorgangBlaetternSelected); lPanel2.add(_vorgangBlaetternSelected); _auftragBlaetternSelected.setText("Auftrag"); _buttonGroup.add(_auftragBlaetternSelected); lPanel2.add(_auftragBlaetternSelected); } final JButton lVorherigesDokumentLadenButton = new JButton(); final JButton lNaechstesDokumentLadenButton = new JButton(); final JButton lFirstDokumentLadenButton = new JButton(); final JButton lLastDokumentLadenButton = new JButton(); try { lVorherigesDokumentLadenButton.setIcon(new ImageIcon(new URL( de.deutscherv.diva.gui.commons.Activator.getDefault() .getURL(), "images/16/rauf.gif"))); lVorherigesDokumentLadenButton .setToolTipText("Vorheriges Aktendokument laden"); lNaechstesDokumentLadenButton.setIcon(new ImageIcon(new URL( de.deutscherv.diva.gui.commons.Activator.getDefault() .getURL(), "images/16/runter.gif"))); lNaechstesDokumentLadenButton .setToolTipText("Nächstes Aktendokument laden"); lFirstDokumentLadenButton.setIcon(new ImageIcon(new URL( de.deutscherv.diva.gui.commons.Activator.getDefault() .getURL(), "images/16/firstDoc.gif"))); lFirstDokumentLadenButton .setToolTipText("Erstes Aktendokument laden"); lLastDokumentLadenButton.setIcon(new ImageIcon(new URL( de.deutscherv.diva.gui.commons.Activator.getDefault() .getURL(), "images/16/lastDoc.gif"))); lLastDokumentLadenButton .setToolTipText("Letztes Aktendokument laden"); } catch (MalformedURLException e) { ErrorHandler.log(e); } catch (IOException e) { ErrorHandler.log(e); } lFirstDokumentLadenButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent pEvent) { _logger.info("Action FirstDok gedrückt!"); ladeFirstDocument(); } }); lPanel2.add(lFirstDokumentLadenButton); lVorherigesDokumentLadenButton .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent pEvent) { _logger.info("Action prev gedrückt!"); ladePreviousDocument(); } }); lPanel2.add(lVorherigesDokumentLadenButton); lNaechstesDokumentLadenButton .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent pEvent) { _logger.info("Action next gedrückt!"); ladeNextDocument(); } }); lPanel2.add(lNaechstesDokumentLadenButton); lLastDokumentLadenButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent pEvent) { _logger.info("Action LastDok gedrückt!"); ladeLastDocument(); } }); lPanel2.add(lLastDokumentLadenButton); lPanel.add(lPanel2, BorderLayout.SOUTH); } this.setContentPane(lPanel); // this.setContentPane(this._erbean.getEReviewPanel()); try { _configInstance = ConfigManager.getInstance(); int lWidth = _configInstance.getWidth(); int lHeight = _configInstance.getHeight(); // _logger.info("getSize", "width, hight = " + lWidth + ", " + // lHeight); this.setSize(lWidth, lHeight); } catch (ValueNotFoundException e) { _logger.warn(e.getMessage()); } try { int lX = _configInstance.getX(); int lY = _configInstance.getY(); // _logger.info("getLocation", "x,y=" + lX + "," + lY); setLocation(lX, lY); } catch (ValueNotFoundException e) { _logger.warn(e.getMessage()); } this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); addComponentListener(new ComponentListener() { @Override public void componentShown(ComponentEvent pEvent) { } @Override public void componentResized(ComponentEvent pEvent) { int lWidth = getWidth(); int lHeight = getHeight(); int lX = getX(); int lY = getY(); // _logger.info("dispose", "width,hight,xPos,yPos=" + lWidth + // "," + lHeight + "," + lX + "," + lY); _configInstance.setPositionAndSize(lX, lY, lWidth, lHeight); boolean lNeedsSaving = Activator.getDefault() .getPreferenceStore().needsSaving(); if (lNeedsSaving) { // _logger.info("Viewer-Einstellungen (resized) gespeichert."); if (Activator.getDefault().getPreferenceStore() instanceof ScopedPreferenceStore) { ScopedPreferenceStore lPreferences = (ScopedPreferenceStore) Activator .getDefault().getPreferenceStore(); try { lPreferences.save(); } catch (IOException e) { _logger .warn("Viewer-Einstellungen konnten nicht gespeichert werden."); } } } } @Override public void componentMoved(ComponentEvent pEvent) { int lWidth = getWidth(); int lHeight = getHeight(); int lX = getX(); int lY = getY(); // _logger.info("dispose", "width,hight,xPos,yPos=" + lWidth + // "," + lHeight + "," + lX + "," + lY); _configInstance.setPositionAndSize(lX, lY, lWidth, lHeight); boolean lNeedsSaving = Activator.getDefault() .getPreferenceStore().needsSaving(); if (lNeedsSaving) { // _logger.info("Viewer-Einstellungen (moved) gespeichert."); if (Activator.getDefault().getPreferenceStore() instanceof ScopedPreferenceStore) { ScopedPreferenceStore lPreferences = (ScopedPreferenceStore) Activator .getDefault().getPreferenceStore(); try { lPreferences.save(); } catch (IOException e) { _logger .warn("Viewer-Einstellungen konnten nicht gespeichert werden."); } } } } @Override public void componentHidden(ComponentEvent pEvent) { } }); } /** * Methode zum O¨ffnen eines Dokumentes über einen Inputstream. * * @param pDokId * technische ID * @param pTitle * Titel des Dokumentes * @param pIs * Inputstream {@link InputStream} * @param pHatAnnotationen * hat Annotationen? * @param pIDivaDokIdent * {@link IDivaDokIdent} für zusätzliche Informationen */ public void openDocument(String pDokId, String pTitle, InputStream pIs, boolean pHatAnnotationen, IDivaDokIdent pIDivaDokIdent) { if (pIs == null) { throw new IllegalArgumentException("stream"); } _pIDivaDokIdent = pIDivaDokIdent; // Einstellung der Zoom-Groesse aus den PuR-Eigenschaften double dZoom; try { dZoom = RechercheConfigManager.getInstance().getZoomViewer() * 0.01; } catch (ValueNotFoundException e) { dZoom = 1.40; } _propertiesManager.setDouble( PropertiesManager.PROPERTY_DEFAULT_ZOOM_LEVEL, dZoom); validate(); setVisible(true); try { // Oeffnen des Dokuments _ICEpdfController.openDocument(pIs, pTitle, pDokId); this.setTitle(new String("Viewer " + pTitle)); this.validate(); } catch (Exception e) { ErrorHandler.handle(e); } _logger.info("openDocument(String title, InputStream is)", "end "); // Viewer wurde geoeffnet - Semaphore sperren ... ViewerSemaphore.getInstance().setDocumentOpen(true); } /** * Öffnet eine Seite des Dokuments im Viewer. * * @param pPage * Seitenzahl * */ public void gotoPage(int pPage) { _logger.debug("gotoPage", pPage + ""); try { // _ICEpdfController.showPage(pPage); _ICEpdfController.geheZuSeite(pPage); } catch (Exception e) { ErrorHandler.handle(e); } } /** * Liefert die aktuelle Seitenzahl des im Viewer angezeigten Dokuments. * * @return Die aktuelle Seitenzahl */ public int getAktuelleSeite() { int lCurrentViewedPage = 0; try { // lCurrentViewedPage = _ICEpdfController.getCurrentPageNumber(); lCurrentViewedPage = _ICEpdfController.gibAktuelleSeite(); _logger.debug("currentPage", lCurrentViewedPage + ""); } catch (Exception e) { // TODO POS Was ist, wenn das Dok zu ist, hier aber noch war gelesen // werden soll? // ErrorHandler.handle(e); } return lCurrentViewedPage; } /** * Liefert die Anzahl der Seiten des geöffneten Dokuments. * * @return int Anzahl der Seiten */ public int getAnzahlSeiten() { int lNumberOfPages = 0; try { lNumberOfPages = _ICEpdfController.getDocument().getNumberOfPages(); _logger.debug("numberOfPages", lNumberOfPages + ""); } catch (Exception e) { // TODO POS Was ist, wenn das Dok zu ist, hier aber noch war gelesen // werden soll? // ErrorHandler.handle(e); } return lNumberOfPages; } /** * Druckt das aktuelle Dokument. * * @return Ergebnis des Drucks */ public boolean print() { return printKopie(); } /** * Druckt das Dokument mit Wasserzeichen. * * @return Ergebnis des Drucks */ public boolean printKopie() { boolean lPrint = false; try { _ICEpdfController.print(true); return true; } catch (Exception e) { ErrorHandler.handle(e); } return lPrint; } /** * Speichert die Annotationen. * * @return boolean */ public boolean speicherMarkup() { try { // final String lDocID = _erbean.getCurrentDocumentID(); final String lDocID = _docId; //InputStream lInputStream = _erbean.saveMarkupFile(lDocID); InputStream lInputStream = _ICEpdfController.saveMarkupFile(); final String printXML = printXML(lInputStream); String lValue = null; for (Iterator lIterator = _openDocuments.iterator(); lIterator .hasNext();) { KeyValuePair lKeyValuePair = lIterator.next(); if (lKeyValuePair.getKey().equals(lDocID)) { lValue = lKeyValuePair.getValue(); } } final String lTechnischeId = lValue; _logger.info("Speichere: " + printXML); Display.getDefault().asyncExec(new Runnable() { public void run() { Helper.redrawWindow(false); } }); Display.getDefault().asyncExec(new Runnable() { private IDokumentListeProvider _dokumentListeProvider; public void run() { IPerspectiveDescriptor lActPd = Helper.getActivePage() .getPerspective(); try { // String lRVArchivDokType = _openDocumentsDokIdentsMap // .get(lDocID).getRvArchivDokType(); // _logger.info(lRVArchivDokType); // String lDivaIOID = _openDocumentsDokIdentsMap.get( // lDocID).getDivaIoid(); // IDivaDokIdent lDivaDokIdent = DataObjectFactory // .createDivaDokIdent(lTechnischeId, // lRVArchivDokType, lDivaIOID); boolean lHatAnnotationen = ServiceFactory .holenDokumentService() .setDokumentAnnotationen(_pIDivaDokIdent, printXML); // boolean lHatAnnotationen = ServiceFactory // .holenDokumentService() // .setDokumentAnnotationen(lDivaDokIdent, // printXML); AktenView lView = (AktenView) Helper .getView(AktenView.ID); if (lView == null) { IPerspectiveDescriptor[] lPd = Helper .getActivePage().getOpenPerspectives(); for (int i = 0; i < lPd.length; i++) { try { Helper.getActivePage().setPerspective( lPd[i]); } catch (Exception ex) { // Ignore, this can get an NPE in Eclipse, // see bug 4454 } lView = (AktenView) Helper .getView(AktenView.ID); if (lView != null) { break; } } } if (lView != null) { ISelection lSelection = null; _dokumentListeProvider = DokumentListeProvider .getInstance(RecherchePerspective.ID); if (_dokumentListeProvider != null) { lSelection = _dokumentListeProvider .getSelection(); } // Die AktenMaske wird geholt AktenMaske lAktenMaske = lView.getAktenMaske(); TreeRSDataObject lTreeRSDataObject = null; Suchergebnis lAkte = null; // List lAkten = new ArrayList(); // Durchläuft alle Akten // Sich die Aufgeklappte Struktur merken Object[] lStrukturMerker = lAktenMaske.getViewer() .getExpandedElements(); // Das Selektierte Element merken ISelection lSelectionMerker = lAktenMaske .getViewer().getSelection(); for (int i = 0; i < lAktenMaske.getViewer() .getTree().getItemCount(); i++) { // Holt die Akte lAkte = (Suchergebnis) lAktenMaske.getViewer() .getTree().getItem(i).getData(); // Holt das ITreeRSDataObject lTreeRSDataObject = (TreeRSDataObject) lAkte .getITreeRSDataObject(); // Holt das IRSDataObject IRSDataObject lRsDataObjectFor = lTreeRSDataObject .getRSDataObjectFor(lTreeRSDataObject .getRootNode()); for (int lK = 0; lK < lRsDataObjectFor .getRowCount(); lK++) { String lPid = (String) lRsDataObjectFor .getValue(DokumentattributNamen.PID .value(), lK); // Wenn Dokument gefunden, Daten ändern if (lPid.equals(lTechnischeId)) { if (!lHatAnnotationen) { lRsDataObjectFor .setValue( DokumentattributNamen.HAT_ANNOTATIONEN .value(), lK, new Boolean( false)); Object[] lNeueWerte = lRsDataObjectFor .getValues(lK); // NeueWerte in treeRS setzen lTreeRSDataObject.updateRow(lPid, lNeueWerte); lAkte .setITreeRSDataObject(lTreeRSDataObject); } else { lRsDataObjectFor .setValue( DokumentattributNamen.HAT_ANNOTATIONEN .value(), lK, new Boolean( true)); Object[] lNeueWerte = lRsDataObjectFor .getValues(lK); // NeueWerte in treeRS setzen lTreeRSDataObject.updateRow(lPid, lNeueWerte); lAkte .setITreeRSDataObject(lTreeRSDataObject); } break; } } } if (lAkte != null) { try { lView.anzeigenSuchergebnis(lAkte); Helper.getActivePage().setPerspective( lActPd); } catch (ValueNotFoundException e) { ErrorHandler.handle(e); } } // Die aufgeklappte Struktur wird wieder hergestellt lAktenMaske.getViewer().setExpandedElements( lStrukturMerker); // Das zuvor selektierte Element wird wieder // selektiert lAktenMaske.getViewer().setSelection( lSelectionMerker); _dokumentListeProvider.setSelection(lSelection); // lView.resultSetChanged(); } // das gleiche noch für Postkorbdokumente!!! VorgangView lVorgangView = (VorgangView) Helper .getView(VorgangView.ID); if (lVorgangView == null) { // IPerspectiveDescriptor actPd = // Helper.getActivePage().getPerspective(); lVorgangView = (VorgangView) Helper.getActivePage() .findView(VorgangView.ID); if (lVorgangView == null) { IPerspectiveDescriptor[] lPd = Helper .getActivePage().getOpenPerspectives(); for (int i = 0; i < lPd.length; i++) { try { Helper.getActivePage().setPerspective( lPd[i]); } catch (Exception ex) { // Ignore, this can get an NPE in // Eclipse, see bug 4454 } lVorgangView = (VorgangView) Helper .getActivePage().findView( VorgangView.ID); if (lVorgangView != null) { break; } } } } if (lVorgangView != null) { IWorkbenchPart lActivePart = Helper.getActivePage() .getActivePart(); if (lActivePart instanceof VorgangView) { _dokumentListeProvider = DokumentListeProvider .getInstance(PostkorbPerspective.VORGANG); } else if (lActivePart instanceof AuftragEditor) { _dokumentListeProvider = DokumentListeProvider .getInstance(PostkorbPerspective.AUFTRAG); } if (_dokumentListeProvider != null) { ISelection lSelection = _dokumentListeProvider .getSelection(); IRSDataObject lRsDataObjectFor = _dokumentListeProvider .getDokumentReferenzListe() .getRSDataObject(); for (int lK = 0; lK < lRsDataObjectFor .getRowCount(); lK++) { String lPid = (String) lRsDataObjectFor .getValue(DokumentattributNamen.PID .value(), lK); if (lPid.equals(lTechnischeId)) { if (!lHatAnnotationen) { lRsDataObjectFor .setValue( DokumentattributNamen.HAT_ANNOTATIONEN .value(), lK, new Boolean( false)); } else { lRsDataObjectFor .setValue( DokumentattributNamen.HAT_ANNOTATIONEN .value(), lK, new Boolean( true)); } // Update der Dokumente _dokumentListeProvider .setDokumentListe(lRsDataObjectFor); // Ursprüngliche Selektion wieder // setzen! _dokumentListeProvider .setSelection(lSelection); break; } } } _logger.info("Ende!"); } } catch (Exception e) { ErrorHandler.handle(e); } Helper.getActivePage().setPerspective(lActPd); } }); // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setRedraw(true); Display.getDefault().asyncExec(new Runnable() { public void run() { Helper.redrawWindow(true); // Postkorb if (Helper .getActivePage() .getPerspective() .getId() .equals( "de.deutscherv.diva.gui.client.perspektive.postkorb")) { Helper .aktualisiereTester(Helper.getActivePage() .getActivePart(), "de.deutscherv.diva.gui.postkorb.views.Vorgangsliste"); } // Recherche if (Helper.getActivePage().getPerspective().getId().equals( "de.deutscherv.diva.gui.recherche.perspektive")) { Helper .aktualisiereTester(Helper.getActivePage() .getActivePart(), "de.deutscherv.diva.gui.recherche.views.DokumentListe"); } } }); } catch (Exception e) { ErrorHandler.handle(e); } _logger.info("Markup speichern fertig"); return true; } /** * lädt die Annotationen. * * @return boolean */ public boolean loadMarkup() { try { //String lDocID = _erbean.getCurrentDocumentID(); final String lDocID = _docId; for (Iterator lIterator = _openDocuments.iterator(); lIterator .hasNext();) { KeyValuePair lKeyValuePair = lIterator.next(); if (lKeyValuePair.getKey().equals(lDocID)) { try { // String lRVArchivDokType = _openDocumentsDokIdentsMap // .get(lDocID).getRvArchivDokType(); // String lDivaIOID = _openDocumentsDokIdentsMap.get( // lDocID).getDivaIoid(); // // IDivaDokIdent lDivaDokIdent = DataObjectFactory // .createDivaDokIdent(lKeyValuePair.getValue(), // lRVArchivDokType, lDivaIOID); // String lDokumentAnnotationen = ServiceFactory // .holenDokumentService() // .getDokumentAnnotationen(lDivaDokIdent); String lDokumentAnnotationen = ServiceFactory .holenDokumentService() .getDokumentAnnotationen(_pIDivaDokIdent); InputStream lIs = new ByteArrayInputStream( lDokumentAnnotationen.getBytes()); // String printXML = printXML(lIs); // _logger.info(printXML); //_erbean.loadMarkupFile(lDocID, lIs); _ICEpdfController.loadMarkupFile(lIs); } catch (Exception e) { // do nothing, keine Annotationen vorhanden, Datei // trotzdem anzeigen! } } } } catch (Exception e) { ErrorHandler.handle(e); } return true; } /** * @see java.awt.Window#dispose() */ @Override public void dispose() { // Viewer wurde geschlossen - Sempahore wieder freigeben ... ViewerSemaphore.getInstance().setDocumentOpen(false); // _logger.info("im dispose"); Helper.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { try { _ICEpdfController.closeDocument(); } catch (Exception e) { // do nothing! } } }); Helper.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { int lWidth = getWidth(); int lHeight = getHeight(); int lX = getX(); int lY = getY(); // _logger.info("dispose", "width,hight,xPos,yPos=" + lWidth + // "," + lHeight + "," + lX + "," + lY); _configInstance.setPositionAndSize(lX, lY, lWidth, lHeight); } }); super.dispose(); } /** * @see java.awt.Window#show() As of JDK 5, replaced by * {@link Component#setVisible(boolean) Component.setVisible(boolean)}. */ @SuppressWarnings("deprecation") @Override public void show() { super.show(); } /** * {@inheritDoc} */ public void saveMarkup() throws Exception { _logger.info("Markup-Save geklickt!"); boolean lSaveMarkup = speicherMarkup(); _logger.info("Markup gespeichert: " + lSaveMarkup); } /** * XML generieren. * * @param pXml * {@link InputStream} * @return String */ public String printXML(InputStream pXml) { BufferedReader lReader = new BufferedReader(new InputStreamReader(pXml)); StringBuilder lSb = new StringBuilder(); String lLine = null; try { while ((lLine = lReader.readLine()) != null) { lSb.append(lLine + "\n"); } pXml.close(); } catch (IOException e) { ErrorHandler.handle(e); } _logger.info("lbs.toString: " +lSb.toString()); IcePdfPuRAnnotation annotation = new IcePdfPuRAnnotation(); annotation.setsAnnotation(lSb.toString()); try { return JAXBXmlHandler.marshal(annotation); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; //return lSb.toString(); } private void initPropertiesManager() { // Properties instanziieren // Construct a PropertiesManager from the default properties file and // default message bundle _propertiesManager = new PropertiesManager(System.getProperties(), ResourceBundle .getBundle(PropertiesManager.DEFAULT_MESSAGE_BUNDLE)); // Change the value of a couple default viewer Properties. // _propertiesManager.setBoolean( // PropertiesManager.PROPERTY_SHOW_UTILITYPANE_ANNOTATION, // Boolean.FALSE); // _propertiesManager.setBoolean( // PropertiesManager.PROPERTY_SHOW_UTILITY_SAVE, Boolean.FALSE); // _propertiesManager.setBoolean( // PropertiesManager.PROPERTY_SHOW_UTILITYPANE_ANNOTATION, // Boolean.TRUE); // _propertiesManager.setBoolean( // PropertiesManager.PROPERTY_SHOW_TOOLBAR_ANNOTATION, // Boolean.FALSE); // propertiesManager.setDouble(PropertiesManager.PROPERTY_DEFAULT_ZOOM_LEVEL, // 1.4); _propertiesManager.setDouble( PropertiesManager.PROPERTY_UTILITYPANE_THUMBNAILS_ZOOM, 0.3); } }