package org.xmind.ui.internal.editor;
import static org.xmind.ui.internal.editor.TempWorkbookRefFactory.URI_SCHEME;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.Iterator;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IMemento;
import org.xmind.core.Core;
import org.xmind.core.IWorkbook;
import org.xmind.core.style.IStyle;
import org.xmind.ui.internal.editor.URIParser.QueryParameter;
import org.xmind.ui.mindmap.IWorkbookRef;
import org.xmind.ui.mindmap.MindMapUI;
import org.xmind.ui.mindmap.WorkbookInitializer;
/**
*
* @author Frank Shaka
* @since 3.6.50
*/
public class CreatedWorkbookRef extends AbstractWorkbookRef {
protected static final String URI_PATH = "/create"; //$NON-NLS-1$
private static final String PARAM_NAME = "name"; //$NON-NLS-1$
private static final String PARAM_STRUCTURE_CLASS = "structureClass"; //$NON-NLS-1$
private static final String PARAM_THEME_URI = "themeURI"; //$NON-NLS-1$
private CreatedWorkbookRef(URI uri, IMemento state) {
super(uri, state);
}
@Override
public String getName() {
String name = URIParser.getQueryParameter(getURI(), PARAM_NAME);
if (name != null)
return name;
return null;
}
@Override
public String getDescription() {
return getName();
}
@Override
protected IWorkbook doLoadWorkbookFromURI(IProgressMonitor monitor, URI uri)
throws InterruptedException, InvocationTargetException {
IWorkbook workbook = Core.getWorkbookBuilder()
.createWorkbook(getTempStorage());
toInitializer(getURI()).initWorkbook(workbook);
return workbook;
}
private static WorkbookInitializer toInitializer(URI uri) {
WorkbookInitializer initializer = WorkbookInitializer.getDefault();
Iterator<QueryParameter> it = URIParser.iterateQueryParameters(uri);
while (it.hasNext()) {
QueryParameter p = it.next();
if (PARAM_STRUCTURE_CLASS.equals(p.name)) {
initializer = initializer.withStructureClass(p.value);
} else if (PARAM_THEME_URI.equals(p.name)) {
Object theme = MindMapUI.getResourceManager()
.findResource(p.value);
if (theme != null && theme instanceof IStyle) {
initializer = initializer.withTheme((IStyle) theme);
}
}
}
return initializer;
}
public static IWorkbookRef create(URI uri, IMemento state) {
Assert.isNotNull(uri);
Assert.isLegal(URI_SCHEME.equals(uri.getScheme()));
Assert.isLegal(URI_PATH.equals(uri.getPath()));
return new CreatedWorkbookRef(uri, state);
}
public static IWorkbookRef createFromWorkbookInitializer(
WorkbookInitializer initializer, String name) {
Assert.isNotNull(initializer);
URI uri = URI.create(URI_SCHEME + ":" + URI_PATH); //$NON-NLS-1$
if (name != null) {
uri = URIParser.appendQueryParameter(uri, PARAM_NAME, name);
}
if (initializer.getStructureClass() != null) {
uri = URIParser.appendQueryParameter(uri, PARAM_STRUCTURE_CLASS,
initializer.getStructureClass());
}
if (initializer.getTheme() != null) {
uri = URIParser.appendQueryParameter(uri, PARAM_THEME_URI,
MindMapUI.getResourceManager()
.toResourceURI(initializer.getTheme()));
}
return new CreatedWorkbookRef(uri, null);
}
}