/* ****************************************************************************** * 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.core.internal; import java.util.Comparator; import java.util.regex.Pattern; import org.xmind.core.IIdFactory; import org.xmind.core.ITopic; import org.xmind.core.IWorkbookBuilder; import org.xmind.core.IWorkspace; import org.xmind.core.internal.dom.MarkerSheetBuilderImpl; import org.xmind.core.internal.dom.StyleSheetBuilderImpl; import org.xmind.core.internal.dom.WorkbookBuilderImpl; import org.xmind.core.marker.IMarkerSheetBuilder; import org.xmind.core.style.IStyleSheetBuilder; import org.xmind.core.util.ILogger; public class InternalCore { public static final boolean DEBUG_WORKBOOK_SAVE = Boolean .getBoolean("org.xmind.debug.core.workbookSave"); //$NON-NLS-1$ /** * @author Frank Shaka * */ private final class ConsoleLogger implements ILogger { public void log(Throwable e) { e.printStackTrace(); } public void log(Throwable e, String message) { System.err.println(message); e.printStackTrace(); } public void log(String message) { System.err.println(message); } } private static InternalCore instance = null; private IWorkbookBuilder workbookBuilder = null; private IWorkspace workspace = null; private IMarkerSheetBuilder markerSheetBuilder = null; private Comparator<ITopic> topicComparator; private IIdFactory idFactory; private IStyleSheetBuilder styleSheetBuilder; private ILogger logger; private Pattern partiallyCompatibleVersionPattern = Pattern .compile("[012]\\.\\d+"); //$NON-NLS-1$ private InternalCore() { } public String getCurrentVersion() { return "2.0"; //$NON-NLS-1$ } public boolean isPartiallyCompatible(String version) { if (version == null) return false; if (getCurrentVersion().equals(version)) return true; return partiallyCompatibleVersionPattern.matcher(version).matches(); } public synchronized IWorkbookBuilder getWorkbookBuilder() { if (workbookBuilder == null) workbookBuilder = new WorkbookBuilderImpl(); return workbookBuilder; } public synchronized IWorkspace getWorkspace() { if (workspace == null) { workspace = new Workspace(); } return workspace; } public synchronized IMarkerSheetBuilder getMarkerSheetBuilder() { if (markerSheetBuilder == null) { markerSheetBuilder = new MarkerSheetBuilderImpl(); } return markerSheetBuilder; } public synchronized Comparator<ITopic> getTopicComparator() { if (topicComparator == null) { topicComparator = new TopicCompartor(); } return topicComparator; } public synchronized IIdFactory getIdFactory() { if (idFactory == null) { idFactory = new IDFactory(); } return idFactory; } public synchronized IStyleSheetBuilder getStyleSheetBuilder() { if (styleSheetBuilder == null) { styleSheetBuilder = new StyleSheetBuilderImpl(); } return styleSheetBuilder; } public synchronized ILogger getLogger() { if (logger == null) { logger = new ConsoleLogger(); } return logger; } public synchronized void setLogger(ILogger logger) { this.logger = logger; } public static InternalCore getInstance() { if (instance == null) instance = new InternalCore(); return instance; } }