package org.docear.plugin.pdfutilities.actions; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import javax.swing.Icon; import org.docear.addons.highlights.IHighlightsImporter; import org.docear.plugin.core.DocearController; import org.docear.plugin.core.logger.DocearLogEvent; import org.docear.plugin.core.ui.SwingWorkerDialog; import org.docear.plugin.pdfutilities.addons.DocearAddonController; import org.docear.plugin.pdfutilities.features.AnnotationID; import org.docear.plugin.pdfutilities.features.AnnotationModel; import org.docear.plugin.pdfutilities.features.IAnnotation; import org.docear.plugin.pdfutilities.features.MonitoringWorker; import org.docear.plugin.pdfutilities.ui.conflict.ImportConflictDialog; import org.freeplane.core.ui.AFreeplaneAction; import org.freeplane.core.ui.EnabledAction; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.map.NodeModel; import org.freeplane.features.mode.Controller; import org.freeplane.features.url.mindmapmode.SaveAll; import org.jdesktop.swingworker.SwingWorker; @EnabledAction(checkOnNodeChange = true) public abstract class AbstractMonitoringAction extends AFreeplaneAction { /** * */ private static final long serialVersionUID = 1L; public AbstractMonitoringAction(String key) { super(key); } public abstract void setEnabled(); public AbstractMonitoringAction(String key, String title, Icon icon) { super(key, title, icon); } public static void updateNodesAgainstMonitoringDir(NodeModel target, boolean saveall) { List<NodeModel> list = new ArrayList<NodeModel>(); list.add(target); AbstractMonitoringAction.updateNodesAgainstMonitoringDir(list, saveall); } public static void updateNodesAgainstMonitoringDir(final List<NodeModel> targets, boolean saveall) { if (saveall) { new SaveAll().actionPerformed(null); } try { SwingWorker<Map<AnnotationID, Collection<IAnnotation>>, AnnotationModel[]> thread = getMonitoringThread(targets); SwingWorkerDialog workerDialog = new SwingWorkerDialog(Controller.getCurrentController().getViewController().getJFrame()); workerDialog.setHeadlineText(TextUtils.getText("AbstractMonitoringAction.0")); //$NON-NLS-1$ if(DocearAddonController.getController().hasPlugin(IHighlightsImporter.class)){ workerDialog.setSubHeadlineText(TextUtils.getText("AbstractMonitoringAction.1")); //$NON-NLS-1$ } else{ workerDialog.setSubHeadlineText(TextUtils.getText("AbstractMonitoringAction.1.noAddon")); //$NON-NLS-1$ } workerDialog.showDialog(thread); workerDialog = null; Map<AnnotationID, Collection<IAnnotation>> conflicts = thread.get(); if (conflicts != null && conflicts.size() > 0) { ImportConflictDialog dialog = new ImportConflictDialog(Controller.getCurrentController().getViewController().getJFrame(), conflicts); dialog.showDialog(); } thread = null; } catch (CancellationException e) { DocearController.getController().getDocearEventLogger().appendToLog(AbstractMonitoringAction.class, DocearLogEvent.MONITORING_FOLDER_READ_ABORTED); LogUtils.info("CancellationException during monitoring update."); //$NON-NLS-1$ } catch (InterruptedException e) { LogUtils.info("InterruptedException during monitoring update."); //$NON-NLS-1$ } catch (ExecutionException e) { LogUtils.warn(e); LogUtils.warn("ExecutionException during monitoring update."); //$NON-NLS-1$ LogUtils.warn(e.getCause()); } catch (Exception e) { LogUtils.warn(e); LogUtils.warn("===================================="); //$NON-NLS-1$ LogUtils.warn(e.getCause()); } // System.gc(); } public static SwingWorker<Map<AnnotationID, Collection<IAnnotation>>, AnnotationModel[]> getMonitoringThread(final List<NodeModel> targets) { return new MonitoringWorker(targets); } }