Package org.freeplane.core.ui.ribbon

Source Code of org.freeplane.core.ui.ribbon.RibbonStructureReader$CategoryCreator

package org.freeplane.core.ui.ribbon;

import java.io.BufferedInputStream;
import java.io.InputStreamReader;
import java.net.URL;

import org.freeplane.core.io.IElementHandler;
import org.freeplane.core.io.ReadManager;
import org.freeplane.core.io.xml.TreeXmlReader;
import org.freeplane.core.ui.ribbon.StructureTree.StructurePath;
import org.freeplane.core.util.FileUtils;
import org.freeplane.n3.nanoxml.XMLElement;

public class RibbonStructureReader {
  private final ReadManager readManager;
  private final RibbonBuilder builder;
 
 
  public RibbonStructureReader(RibbonBuilder ribbonBuilder) {
    readManager = new ReadManager();
    readManager.addElementHandler("separator", new DefaultCreator());
    readManager.addElementHandler("menu_structure", new StructureCreator());
    readManager.addElementHandler("menu_category", new CategoryCreator());
    readManager.addElementHandler("ribbon_taskbar", new DefaultCreator());
    readManager.addElementHandler("ribbon_menu", new DefaultCreator());
    readManager.addElementHandler("primary_entry", new DefaultCreator());
    readManager.addElementHandler("entry_group", new DefaultCreator());
    readManager.addElementHandler("footer_entry", new DefaultCreator());
    readManager.addElementHandler("ribbon_menu", new DefaultCreator());
    readManager.addElementHandler("ribbon_task", new DefaultCreator());
    readManager.addElementHandler("ribbon_band", new DefaultCreator());
    readManager.addElementHandler("ribbon_flowband", new DefaultCreator());
    readManager.addElementHandler("ribbon_action", new DefaultCreator());
    readManager.addElementHandler("ribbon_contributor", new RibbonContributorCreator());
   
    this.builder = ribbonBuilder;
  }
 
  public void loadStructure(final URL xmlSource) {
    InputStreamReader streamReader = null;
    try {
      streamReader = new InputStreamReader(new BufferedInputStream(xmlSource.openStream()));
      final TreeXmlReader reader = new TreeXmlReader(readManager);
      reader.load(streamReader);
    }
    catch (final Exception e) {
      throw new RuntimeException(e);
    }
        finally {
          FileUtils.silentlyClose(streamReader);
        }
  }
 
  /******************************************************************
   * NESTED TYPES
   ******************************************************************/
 
  private final class StructureCreator implements IElementHandler {
    public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
      if (attributes == null) {
        return null;
      }
      return StructureTree.ROOT_PATH;
    }
  }
 
  private final class CategoryCreator implements IElementHandler {
    public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
      if (attributes == null) {
        return null;
      }
      String name = attributes.getAttribute("name", null);
      if("ribbon".equals(name)) {
        return StructureTree.ROOT_PATH;
      }
      return null;
    }
  }
 
  private final class DefaultCreator implements IElementHandler {
    public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
      if (attributes == null) {
        return null;
      }
     
      IRibbonContributorFactory factory = builder.getContributorFactory(tag);
      if(factory != null) {
       
        ARibbonContributor contributor = factory.getContributor(attributes.getAttributes());
        try {
          final StructurePath menuPath = new StructurePath((StructurePath) parent, contributor.getKey());
          if(!builder.containsPath(menuPath)) {
            builder.add(contributor, menuPath, ARibbonContributor.parseOrderSettings(attributes.getAttribute("orderPriority", "")));
          }
          return menuPath;
        }
        catch (Exception e) {
          throw new RuntimeException("wrong xml syntax found at '"+tag+"' ("+parent+")",e);
        }
      }
      return null;
    }
  }
 
  private final class RibbonContributorCreator implements IElementHandler {
    public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
      if (attributes == null) {
        return null;
      }
     
     
      String name = attributes.getAttribute("name", null);
      if(name != null) {
        IRibbonContributorFactory factory = builder.getContributorFactory(name);
        if(factory != null) {
          ARibbonContributor contributor = factory.getContributor(attributes.getAttributes());
          final StructurePath menuPath = new StructurePath((StructurePath) parent, contributor.getKey());
          if(!builder.containsPath(menuPath)) {
            builder.add(contributor, menuPath, ARibbonContributor.parseOrderSettings(attributes.getAttribute("orderPriority", "")));
          }
          return menuPath;
        }
      }
      return null;
    }
  }
}
TOP

Related Classes of org.freeplane.core.ui.ribbon.RibbonStructureReader$CategoryCreator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.