Package at.bestsolution.efxclipse.tooling.css.cssext.ui.outline

Source Code of at.bestsolution.efxclipse.tooling.css.cssext.ui.outline.CssExtDslOutlineTreeProvider

/*******************************************************************************
* Copyright (c) 2012 BestSolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Christoph Caks<ccaks@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.efxclipse.tooling.css.cssext.ui.outline;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.SortedSet;
import java.util.TreeSet;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.swt.graphics.Image;
import org.eclipse.xtext.ui.editor.outline.IOutlineNode;
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
import org.eclipse.xtext.ui.editor.outline.impl.DocumentRootNode;

import at.bestsolution.efxclipse.tooling.css.cssDsl.CssDslPackage;
import at.bestsolution.efxclipse.tooling.css.cssDsl.ruleset;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleBracket;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleConcat;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleDefinition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleLiteral;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleOr;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRulePostfix;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleRef;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CSSRuleXor;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CssExtDslPackage;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.CssExtension;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.Definition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.Doku;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.ElementDefinition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.PackageDefinition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.PropertyDefinition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.PseudoClassDefinition;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.Substructure;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.SubstructureSelector;
import at.bestsolution.efxclipse.tooling.css.cssext.cssExtDsl.SubstructureStyleclass;

/**
* customization of the default outline structure
*
*/
public class CssExtDslOutlineTreeProvider extends DefaultOutlineTreeProvider {
 
  protected Image _image(PackageDefinition m) {
    return labelProvider.getImage(m);
  }
 
  private String findFullPackageName(PackageDefinition d) {
    String name = d.getName();
    EObject c = d.eContainer();
    while (c != null && c instanceof PackageDefinition) {
      PackageDefinition cur = (PackageDefinition) c;
      name = cur.getName() + "." + name;
      c = c.eContainer();
    }
    return name;
  }
 
  protected void _createChildren(DocumentRootNode parentNode, CssExtension ext) {
   
    SortedSet<PackageDefinition> packages = new TreeSet<PackageDefinition>(new Comparator<PackageDefinition>() {
      @Override
      public int compare(PackageDefinition o1, PackageDefinition o2) {
        String name1 = findFullPackageName(o1);
        String name2 = findFullPackageName(o2);
        return name1.compareTo(name2);
      }
    });
    packages.add(ext.getPackageDef());
   
   
    while (!packages.isEmpty()) {
      PackageDefinition current = packages.last();
      packages.remove(current);
     
      createEObjectNode(parentNode, current, labelProvider.getImage(current), findFullPackageName(current), false);
     
      for (PackageDefinition d : current.getSubpackages()) {
        packages.add(d);
      }
      packages.addAll(current.getSubpackages());
    }
   
   
  }
 
  protected void _createChildren(IOutlineNode parentNode, ElementDefinition elDef) {
    for (Definition d : elDef.getProperties()) {
      createNode(parentNode, d);
    }
    for (PseudoClassDefinition d : elDef.getPseudoClasses()) {
      createNode(parentNode, d);
    }
    if (!elDef.getSubstructures().isEmpty()) {
      createEStructuralFeatureNode(parentNode, elDef, CssExtDslPackage.Literals.ELEMENT_DEFINITION__SUBSTRUCTURES, labelProvider.getImage(Collections.EMPTY_LIST), "Substructures", false);
    }
  }
 
  protected String _text(Substructure n) {
    return "substructure \""+n.getName()+"\"";
  }
 
  protected void _createChildren(IOutlineNode parent, SubstructureStyleclass n) {
    for (SubstructureStyleclass s : n.getChilds()) {
      createEObjectNode(parent, s);
    }
  }
 
  protected String _text(SubstructureStyleclass n) {
    String x =  labelProvider.getText(n.getElement()) + " -> ";
    for (SubstructureSelector s : n.getSelectors()) {
        x += s.getSelectorName();
        if (s.getVar() != null) {
          x+="[" + s.getVar() + "]";
        }
        x += " ";
    }
    return x;
  }
 
  protected void _createChildren(IOutlineNode parentNode, PackageDefinition pkg) {
    if (!pkg.getRules().isEmpty()) {
      createEStructuralFeatureNode(parentNode, pkg, CssExtDslPackage.Literals.PACKAGE_DEFINITION__RULES, labelProvider.getImage(Collections.EMPTY_LIST), "Rules", false);
    }
    if (!pkg.getElements().isEmpty()) {
      createEStructuralFeatureNode(parentNode, pkg, CssExtDslPackage.Literals.PACKAGE_DEFINITION__ELEMENTS, labelProvider.getImage(Collections.EMPTY_LIST), "Elements", false);
    }
  }
 
  protected boolean _isLeaf(Definition modelElement) {
    return true;
  }
 
  protected Object _text(CSSRuleDefinition modelElement) {
    return modelElement.getName();
  }
 
  protected Object _text(PropertyDefinition modelElement) {
    return modelElement.getName();
  }
 
  protected Object _text(ElementDefinition modelElement) {
    String r = modelElement.getName();
    if (modelElement.getStyleclass() != null) {
      r += " (" +modelElement.getStyleclass() + ")";
    }
    return r;
  }
 
  protected Object _text(Doku d) {
    return "documentation";
  }
 
  protected Object _text(PackageDefinition modelElement) {
    String name = modelElement.getName();
    EObject cur = modelElement.eContainer();
    while(cur != null && cur instanceof PackageDefinition) {
      PackageDefinition curDef = (PackageDefinition) cur;
      name = curDef.getName() + "." + name;
      cur = cur.eContainer();
    }
   
    return name;
  }
 
  protected Object _text(CSSRuleBracket model) {
    return "CSSRuleBracket []";
  }
 
  protected Object _text(CSSRuleOr model) {
    return "CSSRuleOr |";
  }
 
  protected Object _text(CSSRuleXor model) {
    return "CSSRuleXor ||";
  }
 
  protected Object _text(CSSRuleConcat model) {
    return "CSSRuleConcat";
  }
 
  protected Object _text(CSSRuleLiteral model) {
    return model.getValue();
  }
 
  protected Object _text(CSSRuleRef model) {
    return "<" + model.getRef().getName() + ">";
  }
 
  protected Object _text(CSSRulePostfix model) {
    return "CSSRulePostfix " + model.getCardinality();
  }
 
 
}
TOP

Related Classes of at.bestsolution.efxclipse.tooling.css.cssext.ui.outline.CssExtDslOutlineTreeProvider

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.