package org.docear.plugin.pdfutilities.features;
import java.io.IOException;
import org.docear.pdf.feature.APDMetaObject;
import org.docear.plugin.core.features.DocearFileBackupController;
import org.docear.plugin.core.features.DocearRequiredConversionController;
import org.freeplane.core.util.LogUtils;
import org.freeplane.features.map.IMapLifeCycleListener;
import org.freeplane.features.map.MapModel;
import org.freeplane.features.map.mindmapmode.MMapModel;
import org.freeplane.features.mapio.MapIO;
import org.freeplane.features.mapio.mindmapmode.MMapIO;
import org.freeplane.features.mode.Controller;
public class AnnotationConverter implements IMapLifeCycleListener {
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
private static IConversionProcessHandler currentHandler = new SingleMapConversionHandler();
/***********************************************************************************
* METHODS
**********************************************************************************/
public static void convertAnnotations(MapModel map) throws IOException {
if(map == null) {
throw new IllegalArgumentException("NULL");
}
DocearFileBackupController.createBackupForConversion(map);
synchronized (currentHandler) {
currentHandler.convert(map);
LogUtils.info("converted annotations for "+map.getTitle()+" - "+map.getFile());
}
}
public static IAnnotation cloneAnnotation(APDMetaObject metaObject, AnnotationModel model) {
AnnotationModel newModel = new AnnotationModel(metaObject.getUID(), model.getAnnotationType());
newModel.setSource(model.getSource());
newModel.setDestinationUri(model.getDestinationUri());
newModel.setPage(model.getPage());
newModel.setOldObjectNumber(model.getOldObjectNumber());
newModel.getChildren().addAll(model.getChildren());
return newModel;
}
public static IAnnotation cloneAnnotation(int uid, AnnotationModel model) {
AnnotationModel newModel = new AnnotationModel(uid, model.getAnnotationType());
newModel.setSource(model.getSource());
newModel.setDestinationUri(model.getDestinationUri());
newModel.setPage(model.getPage());
newModel.setOldObjectNumber(model.getOldObjectNumber());
newModel.getChildren().addAll(model.getChildren());
return newModel;
}
public static void SetConversionProcessHandler(IConversionProcessHandler handler) {
synchronized (currentHandler) {
currentHandler = handler;
if(handler == null) {
currentHandler = new SingleMapConversionHandler();
}
}
}
public static IConversionProcessHandler getConversionProcessHandler() {
return currentHandler;
}
/***********************************************************************************
* REQUIRED METHODS FOR INTERFACES
**********************************************************************************/
public void onCreate(MapModel map) {
if(DocearRequiredConversionController.hasRequiredConversion(ConvertAnnotationsExtension.class, map)) {
try {
if(map instanceof MMapModel) {
MMapModel mmap = (MMapModel) map;
if (mmap.getTimerForAutomaticSaving() != null) {
mmap.getTimerForAutomaticSaving().cancel();
}
}
convertAnnotations(map);
MMapIO mio = (MMapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
mio.writeToFile(map, map.getFile());
if(map instanceof MMapModel) {
MMapModel mmap = (MMapModel) map;
mmap.scheduleTimerForAutomaticSaving();
}
} catch (IOException e) {
LogUtils.warn(e);
}
}
}
public void onRemove(MapModel map) {}
public void onSavedAs(MapModel map) {}
public void onSaved(MapModel map) {}
}