/**
* author: Marcel Genzmehr
* 21.11.2011
*/
package org.docear.plugin.core.workspace.actions;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.io.File;
import java.net.URI;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import org.docear.plugin.core.ui.LocationDialogPanel;
import org.docear.plugin.core.workspace.node.FolderTypeLiteratureRepositoryNode;
import org.docear.plugin.core.workspace.node.FolderTypeProjectsNode;
import org.docear.plugin.core.workspace.node.LinkTypeReferencesNode;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.TextUtils;
import org.freeplane.plugin.workspace.actions.AWorkspaceAction;
import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
import org.swingplus.JHyperlink;
public class DocearChangeLibraryPathAction extends AWorkspaceAction {
private static final long serialVersionUID = 1L;
private final String bibFilterDescription = "*.bib ("+TextUtils.getText("locationdialog.filefilter.bib")+")";
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
public DocearChangeLibraryPathAction() {
super("workspace.action.docear.uri.change");
}
/***********************************************************************************
* METHODS
**********************************************************************************/
/**
* @param oldLocation
* @param directory
* @return
*/
private URI requestUri(URI oldLocation, boolean directory, Component explanation, FileFilter... fileFilters) {
LocationDialogPanel locDialog = new LocationDialogPanel(oldLocation, directory, fileFilters);
if (explanation != null) {
locDialog.setExplanation(explanation);
}
int option = JOptionPane.showConfirmDialog(UITools.getFrame(), locDialog, TextUtils.getRawText(getKey()+".title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(option == JOptionPane.OK_OPTION) {
return locDialog.getLocationUri();
}
return null;
}
/***********************************************************************************
* REQUIRED METHODS FOR INTERFACES
**********************************************************************************/
public void actionPerformed(ActionEvent e) {
AWorkspaceTreeNode targetNode = getNodeFromActionEvent(e);
if(targetNode instanceof FolderTypeProjectsNode ) {
URI uri = requestUri(((FolderTypeProjectsNode) targetNode).getPath(), true, null);
if(uri != null) {
((FolderTypeProjectsNode)targetNode).setPath(uri);
}
}
else if(targetNode instanceof FolderTypeLiteratureRepositoryNode) {
URI uri = requestUri(((FolderTypeLiteratureRepositoryNode) targetNode).getPath(), true, null);
if(uri != null) {
((FolderTypeLiteratureRepositoryNode)targetNode).setPath(uri);
}
}
else if(targetNode instanceof LinkTypeReferencesNode) {
FileFilter bibFilter = new FileFilter() {
public String getDescription() {
return bibFilterDescription;
}
public boolean accept(File f) {
return (f.isDirectory() || f.getName().endsWith(".bib"));
}
};
JHyperlink hyperlink = new JHyperlink(TextUtils.getText("bibtex_mendeley_help"), TextUtils.getText("bibtex_mendeley_help_uri"));
URI uri = requestUri(((LinkTypeReferencesNode) targetNode).getLinkPath(), false, hyperlink, bibFilter);
if(uri != null) {
((LinkTypeReferencesNode)targetNode).setLinkPath(uri);
}
}
targetNode.refresh();
}
}