/**
*
*/
package org.freeplane.plugin.script.proxy;
import java.net.URI;
import java.net.URISyntaxException;
import org.freeplane.core.util.LogUtils;
import org.freeplane.features.map.NodeModel;
import org.freeplane.plugin.script.ScriptContext;
import org.freeplane.view.swing.features.filepreview.ExternalResource;
import org.freeplane.view.swing.features.filepreview.ViewerController;
class ExternalObjectProxy extends AbstractProxy<NodeModel> implements Proxy.ExternalObject {
ExternalObjectProxy(final NodeModel delegate, final ScriptContext scriptContext) {
super(delegate, scriptContext);
}
private ExternalResource getExternalObjectModel() {
return (ExternalResource) getDelegate().getExtension(ExternalResource.class);
}
public String getUri() {
final ExternalResource externalObject = getExternalObjectModel();
final URI uri = externalObject == null ? null : externalObject.getUri();
return uri == null ? null : uri.toString();
}
@Deprecated
public String getURI() {
return getUri();
}
private ViewerController getViewerController() {
return (ViewerController) getModeController().getExtension(ViewerController.class);
}
public float getZoom() {
final ExternalResource externalObject = getExternalObjectModel();
return externalObject == null ? 1f : externalObject.getZoom();
}
public void setUri(final String uri) {
ExternalResource externalObject = getExternalObjectModel();
try {
if (externalObject != null) {
if (uri == null) {
// remove object
getViewerController().undoableToggleHook(getDelegate(), null);
return;
}
getViewerController().undoableToggleHook(getDelegate(), externalObject);
externalObject = new ExternalResource(new URI(uri));
getViewerController().undoableToggleHook(getDelegate(), externalObject);
}
}
catch (final URISyntaxException e) {
LogUtils.warn(e);
}
}
@Deprecated
public void setURI(final String uri) {
setUri(uri);
}
public void setZoom(final float zoom) {
final ExternalResource externalObject = getExternalObjectModel();
if (externalObject != null)
getViewerController().setZoom(getModeController(), getDelegate().getMap(), externalObject, zoom);
}
/** make <code>if (node.externalObject) println "has an externalObject"</code> work. */
public boolean asBoolean() {
return getExternalObjectModel() != null;
}
}