package org.docear.plugin.bibtex.actions; import java.awt.event.ActionEvent; import java.net.URI; import java.util.Collection; import java.util.Iterator; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import net.sf.jabref.BasePanel; import net.sf.jabref.BibtexEntry; import net.sf.jabref.BibtexEntryType; import net.sf.jabref.EntryTypeDialog; import net.sf.jabref.export.DocearSaveDatabaseAction; import org.docear.plugin.bibtex.JabRefProjectExtension; import org.docear.plugin.bibtex.ReferencesController; import org.docear.plugin.bibtex.jabref.JabRefCommons; import org.docear.plugin.bibtex.jabref.JabrefWrapper; import org.freeplane.core.ui.AFreeplaneAction; import org.freeplane.core.ui.EnabledAction; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.link.NodeLinks; import org.freeplane.features.map.MapModel; import org.freeplane.features.map.NodeModel; import org.freeplane.features.mode.Controller; import org.freeplane.features.url.UrlManager; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.features.WorkspaceMapModelExtension; import org.freeplane.plugin.workspace.model.project.AWorkspaceProject; @EnabledAction(checkOnNodeChange=true) public class AddNewReferenceAction extends AFreeplaneAction { public static final String KEY = "AddNewReferenceAction"; /** * */ private static final long serialVersionUID = 1L; public AddNewReferenceAction() { super(KEY); } public void actionPerformed(ActionEvent e) { Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes(); if (nodes != null) { Iterator<NodeModel> iter = nodes.iterator(); if (iter.hasNext()) { WorkspaceMapModelExtension modelExt = WorkspaceController.getMapModelExtension(iter.next().getMap(), false); if(modelExt != null) { AWorkspaceProject project = modelExt.getProject(); if(project == null || !project.isLoaded()) { return; } JabRefProjectExtension ext = (JabRefProjectExtension) project.getExtensions(JabRefProjectExtension.class); ext.selectBasePanel(); } } } if (DocearSaveDatabaseAction.JABREF_DATABASE_SAVE_SUCCESS.equals(e.getActionCommand())) { addCreatedReference(e); return; } else if (DocearSaveDatabaseAction.JABREF_DATABASE_SAVE_FAILED.equals(e.getActionCommand())) { return; } else { createNewReference(nodes); } } private void createNewReference(Collection<NodeModel> nodes) { BibtexEntry entry = null; URI link = null; String name = null; for (NodeModel node : nodes) { try { URI tempLink = NodeLinks.getLink(node); String tempName = UrlManager.getController().getAbsoluteFile(node.getMap(), tempLink).getName(); if (link == null) { link = tempLink; name = tempName; } if (!tempName.equals(name)) { JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("docear.add_new_reference.error.conflicting_pdf_files"), TextUtils.getText("docear.add_new_reference.error.title"), JOptionPane.WARNING_MESSAGE); return; } } catch (NullPointerException ex) { } } JabrefWrapper jabrefWrapper = ReferencesController.getController().getJabrefWrapper(); MapModel map = Controller.getCurrentController().getMap(); if (link != null && link.getPath().toLowerCase().endsWith(".pdf")) { String path = UrlManager.getController().getAbsoluteFile(map, link).getAbsolutePath(); JabRefCommons.addNewRefenceEntry(new String[] { path }, jabrefWrapper.getJabrefFrame(), jabrefWrapper.getJabrefFrame().basePanel()); // PdfImporter pdfImporter = new PdfImporter(jabrefWrapper.getJabrefFrame(), jabrefWrapper.getJabrefFrame().basePanel(), null, 0); // pdfImporter.importPdfFiles(new String[] { path }, Controller.getCurrentController().getViewController().getFrame(), true); // entry = pdfImporter.getNewEntry(); } else { BasePanel basePanel = jabrefWrapper.getBasePanel(); EntryTypeDialog dialog = new EntryTypeDialog(jabrefWrapper.getJabrefFrame()); dialog.setVisible(true); BibtexEntryType bet = dialog.getChoice(); if (bet == null) { return; } String thisType = bet.getName(); entry = basePanel.newEntry(BibtexEntryType.getType(thisType)); } showJabRefTab(); if (entry != null) { String nodeIds = ""; for (NodeModel node : nodes) { nodeIds += node.getID()+","; } entry.setField("docear_add_to_node", nodeIds); ReferencesController.getController().setInAdd(map); } } private void addCreatedReference(ActionEvent e) { BibtexEntry entry; try { entry = (BibtexEntry) e.getSource(); String s = entry.getField("docear_add_to_node"); if (s != null) { String[] nodeIDs = s.split(","); for (String nodeID : nodeIDs) { NodeModel node = Controller.getCurrentModeController().getMapController().getNodeFromID(nodeID); ReferencesController.getController().getJabRefAttributes().setReferenceToNode(entry, node); } } } catch (Exception ex) { ex.printStackTrace(); } return; } private void showJabRefTab() { final JComponent toolBar = Controller.getCurrentModeController().getUserInputListenerFactory().getToolBar("/format"); toolBar.setVisible(true); ((JComponent) toolBar.getParent()).revalidate(); final String propertyName = Controller.getCurrentController().getViewController().completeVisiblePropertyKey(toolBar); try { Controller.getCurrentController().getResourceController().setProperty(propertyName, true); } catch(Exception e) { LogUtils.warn(this.getClass().getName()+".showJabRefTab: "+e.getMessage()); } JTabbedPane tabbedPane = (JTabbedPane) toolBar.getComponent(1); tabbedPane.setSelectedComponent(ReferencesController.getController().getJabrefWrapper().getJabrefFrame()); } @Override public void setEnabled() { try { NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode(); WorkspaceMapModelExtension modelExt = WorkspaceController.getMapModelExtension(node.getMap(), false); setEnabled(modelExt.getProject() != null && modelExt.getProject().isLoaded()); } catch (Exception e) { setEnabled(false); } } }