/*******************************************************************************
* Copyright (c) 2011 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:
* Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.efxclipse.tooling.css.ui.outline;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.ui.editor.outline.IOutlineNode;
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
import at.bestsolution.efxclipse.tooling.css.cssDsl.css_generic_declaration;
import at.bestsolution.efxclipse.tooling.css.cssDsl.ruleset;
import at.bestsolution.efxclipse.tooling.css.cssDsl.selector;
import at.bestsolution.efxclipse.tooling.css.cssDsl.simple_selector;
import at.bestsolution.efxclipse.tooling.css.cssDsl.term;
import at.bestsolution.efxclipse.tooling.css.cssDsl.termGroup;
/**
* customization of the default outline structure
*
*/
public class CssDslOutlineTreeProvider extends DefaultOutlineTreeProvider {
// protected void _createChildren(DocumentRootNode parentNode, EObject modelElement) {
// System.err.println("Create children for: " + modelElement);
// super._createChildren(parentNode, modelElement);
// }
// @Override
// protected void _createChildren(EStructuralFeatureNode parentNode,
// EObject modelElement) {
// System.err.println("Create children for: " + parentNode.getText() + " => " + modelElement);
// super._createChildren(parentNode, modelElement);
// }
//
// @Override
// protected void _createChildren(Object parent, Object element) {
// System.err.println("create children: " + parent + ", " + element);
// super._createChildren(parent, element);
// }
@Override
protected void _createChildren(IOutlineNode parentNode, EObject modelElement) {
// System.err.println("create children: " + parentNode + ", " + modelElement);
if( modelElement instanceof ruleset ) {
ruleset s = (ruleset) modelElement;
if( s.getSelectors().size() == 1 ) {
// System.err.println("Simple: " + s.getSelectors().get(0).getSimpleselectors().size());
// System.err.println("Sub: " + s.getSelectors().get(0).getSelector());
if( s.getSelectors().get(0).getSimpleselectors().size() == 1 && s.getSelectors().get(0).getSelector() == null ) {
for (EObject childElement : modelElement.eContents()) {
// System.err.println("Child: " + childElement);
if( !(childElement instanceof selector) ) {
// System.err.println("creating child");
createNode(parentNode, childElement);
}
}
return;
}
}
} else if( modelElement instanceof selector ) {
selector s = (selector) modelElement;
if( s.getSimpleselectors().size() == 1 && s.getSelector() == null ) {
for (EObject childElement : modelElement.eContents()) {
// System.err.println("Child: " + childElement);
if( !(childElement instanceof simple_selector) ) {
// System.err.println("creating child");
createNode(parentNode, childElement);
}
}
return;
}
} else if( modelElement instanceof css_generic_declaration ) {
css_generic_declaration dec = (css_generic_declaration) modelElement;
if( dec.getExpression().getTermGroups().size() == 1 ) {
for( term t : dec.getExpression().getTermGroups().get(0).getTerms() ) {
createNode(parentNode, t);
}
} else {
for( termGroup g : dec.getExpression().getTermGroups() ) {
createNode(parentNode, g);
}
}
return;
}
super._createChildren(parentNode, modelElement);
}
}