package org.docear.plugin.pdfutilities.map;
import java.io.File;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import org.docear.plugin.core.mindmap.AMindmapUpdater;
import org.docear.plugin.pdfutilities.features.AnnotationModel;
import org.freeplane.features.link.LinkController;
import org.freeplane.features.link.mindmapmode.MLinkController;
import org.freeplane.features.map.MapModel;
import org.freeplane.features.map.NodeModel;
import org.freeplane.plugin.workspace.URIUtils;
public class MindmapFileLinkUpdater extends AMindmapUpdater {
Map<File, File> fileMap = new HashMap<File, File>();
private boolean renamed = false;
public MindmapFileLinkUpdater(String title, boolean renamed, Map<File, File> fileMap) {
super(title);
this.renamed = renamed;
this.fileMap = fileMap;
}
@Override
public boolean updateMindmap(MapModel map) {
if(map == null) return false;
return updateLinks(map.getRootNode());
}
private boolean updateLinks(NodeModel node) {
if(node == null) return false;
URI uri = URIUtils.getAbsoluteURI(node);
File link = URIUtils.getFile(uri);
if(link != null){
if(fileMap.containsKey(link)){
((MLinkController) LinkController.getController()).setLinkTypeDependantLink(node, fileMap.get(link));
if(renamed && node.getText().equals(link.getName())){
node.setText(fileMap.get(link).getName());
}
AnnotationModel annotation = AnnotationController.getModel(node, false);
if(annotation != null && annotation.getAnnotationID() != null && fileMap.containsKey(URIUtils.getFile(annotation.getAnnotationID().getUri()))){
annotation.setSource(fileMap.get(URIUtils.getFile(annotation.getAnnotationID().getUri())).toURI());
}
}
}
for(NodeModel child : node.getChildren()){
updateLinks(child);
}
return true;
}
}