/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.xmind.core.Core; import org.xmind.core.ISheet; import org.xmind.core.ITopic; import org.xmind.core.IWorkbook; import org.xmind.core.style.IStyle; import org.xmind.core.style.IStyleSheet; import org.xmind.ui.internal.editor.MME; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.util.MindMapUtils; public abstract class MindMapImporter { private String sourcePath; private IWorkbook targetWorkbook; private List<ISheet> targetSheets; private final boolean newWorkbook; private IProgressMonitor monitor; private List<Map.Entry<Throwable, String>> errors = null; public MindMapImporter(String sourcePath) { this(sourcePath, null); } public MindMapImporter(String sourcePath, IWorkbook targetWorkbook) { this.sourcePath = sourcePath; this.targetSheets = new ArrayList<ISheet>(); this.newWorkbook = targetWorkbook == null; if (targetWorkbook == null) { this.targetWorkbook = Core.getWorkbookBuilder() .createWorkbook(MME.createTempStorage()); } else { this.targetWorkbook = targetWorkbook; } } public boolean isNewWorkbook() { return newWorkbook; } public IProgressMonitor getMonitor() { if (monitor == null) monitor = new NullProgressMonitor(); return monitor; } public void setMonitor(IProgressMonitor monitor) { this.monitor = monitor; } public String getSourcePath() { return sourcePath; } public IWorkbook getTargetWorkbook() { return targetWorkbook; } public abstract void build() throws InvocationTargetException, InterruptedException; protected void postBuilded() { initStyles(); } private void initStyles() { for (ISheet sheet : getTargetWorkbook().getSheets()) { sheet.setThemeId(createAppliedTheme(getTargetWorkbook(), MindMapUI.getResourceManager().getDefaultTheme()).getId()); List<ITopic> topics = MindMapUtils.getAllTopics(sheet, true, true); for (ITopic topic : topics) { topic.setStyleId(null); } } } private IStyle createAppliedTheme(IWorkbook workbook, IStyle sourceTheme) { IStyleSheet ss = workbook.getStyleSheet(); return ss.importStyle(sourceTheme); } public List<ISheet> getTargetSheets() { return targetSheets; } protected void addTargetSheet(ISheet sheet) { if (newWorkbook) { targetWorkbook.addSheet(sheet); if (targetSheets.isEmpty()) { targetWorkbook.removeSheet(targetWorkbook.getPrimarySheet()); } } targetSheets.add(sheet); } public List<Map.Entry<Throwable, String>> getErrors() { return errors; } protected void log(final Throwable e, final String message) { if (errors == null) errors = new ArrayList<Map.Entry<Throwable, String>>(); errors.add(new Map.Entry<Throwable, String>() { public String setValue(String value) { return message; } public String getValue() { return message; } public Throwable getKey() { return e; } }); } public void dispose() { } }