
com.igormaznitsa.mindmap.plugins.MindMapPluginRegistry Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mind-map-swing-panel Show documentation
Show all versions of mind-map-swing-panel Show documentation
Swing based panel to show and interact with mind map
The newest version!
/*
* Copyright (C) 2015-2022 Igor A. Maznitsa
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.igormaznitsa.mindmap.plugins;
import static java.util.Objects.requireNonNull;
import com.igormaznitsa.mindmap.model.TopicFinder;
import com.igormaznitsa.mindmap.model.logger.Logger;
import com.igormaznitsa.mindmap.model.logger.LoggerFactory;
import com.igormaznitsa.mindmap.plugins.api.AbstractExporter;
import com.igormaznitsa.mindmap.plugins.api.AbstractImporter;
import com.igormaznitsa.mindmap.plugins.api.MindMapPlugin;
import com.igormaznitsa.mindmap.plugins.attributes.emoticon.EmoticonPopUpMenuPlugin;
import com.igormaznitsa.mindmap.plugins.attributes.emoticon.EmoticonVisualAttributePlugin;
import com.igormaznitsa.mindmap.plugins.attributes.images.ImagePopUpMenuPlugin;
import com.igormaznitsa.mindmap.plugins.attributes.images.ImageVisualAttributePlugin;
import com.igormaznitsa.mindmap.plugins.exporters.ASCIIDocExporter;
import com.igormaznitsa.mindmap.plugins.exporters.FreeMindExporter;
import com.igormaznitsa.mindmap.plugins.exporters.MDExporter;
import com.igormaznitsa.mindmap.plugins.exporters.MindmupExporter;
import com.igormaznitsa.mindmap.plugins.exporters.ORGMODEExporter;
import com.igormaznitsa.mindmap.plugins.exporters.PNGImageExporter;
import com.igormaznitsa.mindmap.plugins.exporters.PUMLExporter;
import com.igormaznitsa.mindmap.plugins.exporters.SVGImageExporter;
import com.igormaznitsa.mindmap.plugins.exporters.TextExporter;
import com.igormaznitsa.mindmap.plugins.importers.CoggleMM2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.importers.Freemind2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.importers.Mindmup2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.importers.Novamind2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.importers.Text2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.importers.XMind2MindMapImporter;
import com.igormaznitsa.mindmap.plugins.misc.OptionsPlugin;
import com.igormaznitsa.mindmap.plugins.processors.AddChildPlugin;
import com.igormaznitsa.mindmap.plugins.processors.CloneTopicPlugin;
import com.igormaznitsa.mindmap.plugins.processors.EditTextPlugin;
import com.igormaznitsa.mindmap.plugins.processors.ExtraFilePlugin;
import com.igormaznitsa.mindmap.plugins.processors.ExtraJumpPlugin;
import com.igormaznitsa.mindmap.plugins.processors.ExtraNotePlugin;
import com.igormaznitsa.mindmap.plugins.processors.ExtraURIPlugin;
import com.igormaznitsa.mindmap.plugins.processors.RemoveTopicPlugin;
import com.igormaznitsa.mindmap.plugins.processors.TextAlignMenuPlugin;
import com.igormaznitsa.mindmap.plugins.tools.ChangeColorPlugin;
import com.igormaznitsa.mindmap.plugins.tools.CollapseAllPlugin;
import com.igormaznitsa.mindmap.plugins.tools.ShowJumpsPlugin;
import com.igormaznitsa.mindmap.plugins.tools.UnfoldAllPlugin;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public final class MindMapPluginRegistry implements Iterable {
private static final Logger LOGGER = LoggerFactory.getLogger(MindMapPluginRegistry.class);
private static final MindMapPluginRegistry INSTANCE = new MindMapPluginRegistry();
private final List pluginList = new ArrayList<>();
private final Map, List extends MindMapPlugin>> FIND_CACHE =
new HashMap<>();
private MindMapPluginRegistry() {
registerPlugin(new FreeMindExporter());
registerPlugin(new MDExporter());
registerPlugin(new ASCIIDocExporter());
registerPlugin(new MindmupExporter());
registerPlugin(new PNGImageExporter());
registerPlugin(new ORGMODEExporter());
registerPlugin(new TextExporter());
registerPlugin(new SVGImageExporter());
registerPlugin(new PUMLExporter());
registerPlugin(new ExtraFilePlugin());
registerPlugin(new ExtraNotePlugin());
registerPlugin(new ExtraJumpPlugin());
registerPlugin(new ExtraURIPlugin());
registerPlugin(new EditTextPlugin());
registerPlugin(new AddChildPlugin());
registerPlugin(new CloneTopicPlugin());
registerPlugin(new RemoveTopicPlugin());
registerPlugin(new OptionsPlugin());
registerPlugin(new ShowJumpsPlugin());
registerPlugin(new CollapseAllPlugin());
registerPlugin(new UnfoldAllPlugin());
registerPlugin(new ChangeColorPlugin());
registerPlugin(new TextAlignMenuPlugin());
registerPlugin(new Text2MindMapImporter());
registerPlugin(new Mindmup2MindMapImporter());
registerPlugin(new Freemind2MindMapImporter());
registerPlugin(new XMind2MindMapImporter());
registerPlugin(new CoggleMM2MindMapImporter());
registerPlugin(new Novamind2MindMapImporter());
registerPlugin(new EmoticonPopUpMenuPlugin());
registerPlugin(new EmoticonVisualAttributePlugin());
registerPlugin(new ImagePopUpMenuPlugin());
registerPlugin(new ImageVisualAttributePlugin());
}
public Set findAllTopicFinders() {
final Set result = new HashSet<>();
for (final MindMapPlugin p : this.pluginList) {
if (p instanceof TopicFinder) {
result.add((TopicFinder) p);
}
}
return result;
}
public static MindMapPluginRegistry getInstance() {
return INSTANCE;
}
public void registerPlugin(final MindMapPlugin plugin) {
synchronized (FIND_CACHE) {
this.pluginList.add(requireNonNull(plugin));
LOGGER.info("Registered plugin " + plugin.getClass().getName());
Collections.sort(this.pluginList);
FIND_CACHE.clear();
}
}
public void unregisterPluginForClass(final Class extends MindMapPlugin> pluginClass) {
synchronized (FIND_CACHE) {
final Iterator iterator = this.pluginList.iterator();
while (iterator.hasNext()) {
final MindMapPlugin plugin = iterator.next();
if (pluginClass.isAssignableFrom(plugin.getClass())) {
LOGGER.info("Unregistered plugin " + plugin.getClass().getName() + " for class " +
pluginClass.getName());
iterator.remove();
}
}
}
}
public void unregisterPlugin(final MindMapPlugin plugin) {
synchronized (FIND_CACHE) {
if (this.pluginList.remove(requireNonNull(plugin))) {
LOGGER.info("Unregistered plugin " + plugin.getClass().getName());
Collections.sort(this.pluginList);
}
FIND_CACHE.clear();
}
}
public int size() {
synchronized (FIND_CACHE) {
return this.pluginList.size();
}
}
public void clear() {
synchronized (FIND_CACHE) {
this.pluginList.clear();
FIND_CACHE.clear();
}
}
public AbstractExporter findExporterForMnemonic(final String mnemonic) {
AbstractExporter result = null;
synchronized (FIND_CACHE) {
for (final MindMapPlugin p : this.pluginList) {
if (p instanceof AbstractExporter) {
final AbstractExporter exporter = (AbstractExporter) p;
if (mnemonic.equals(exporter.getMnemonic())) {
result = exporter;
break;
}
}
}
}
return result;
}
public AbstractImporter findImporterForMnemonic(final String mnemonic) {
AbstractImporter result = null;
synchronized (FIND_CACHE) {
for (final MindMapPlugin p : this.pluginList) {
if (p instanceof AbstractImporter) {
final AbstractImporter importer = (AbstractImporter) p;
if (mnemonic.equals(importer.getMnemonic())) {
result = importer;
break;
}
}
}
}
return result;
}
@SuppressWarnings("unchecked")
public List findFor(final Class klazz) {
synchronized (FIND_CACHE) {
List result = (List) FIND_CACHE.get(klazz);
if (result == null) {
result = new ArrayList<>();
if (klazz != null) {
for (final MindMapPlugin p : this.pluginList) {
if (klazz.isInstance(p)) {
result.add(klazz.cast(p));
}
}
}
result = Collections.unmodifiableList(result);
FIND_CACHE.put(klazz, result);
}
return result;
}
}
@Override
public Iterator iterator() {
return this.pluginList.iterator();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy