package gr.upatras.ece.wcl.radl2.ui; import gr.upatras.ece.wcl.radl2.radl.RADL; import gr.upatras.ece.wcl.radl2.radl.ResourceAdapter; import gr.upatras.ece.wcl.radl2.radl.rulSSH_commands; import gr.upatras.ece.wcl.radl2.radl.ruleHTTP; import gr.upatras.ece.wcl.radl2.radl.ruleSSH; import gr.upatras.ece.wcl.radl2.radl.scriptParam; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.nodemodel.impl.AbstractNode; import org.eclipse.xtext.nodemodel.impl.CompositeNode; import org.eclipse.xtext.nodemodel.impl.LeafNode; import org.eclipse.xtext.resource.XtextResource; import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor; import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator; public class MySemanticHighlightingCalculator implements ISemanticHighlightingCalculator { // Dummy-Highlighting // of each block of 10 characters the last 5 are to be highlighted // this is not semantic but very briefly illustrates what kind of // information is processed @Override public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) { //System.out.println("provideHighlightingFor"); if (resource == null) return; // if (resource.getContents().size() > 0) { // // fetch the model // RADL mradl = (RADL) resource.getContents().get(0); // ResourceAdapter m =mradl.getResourceAdapter(); // //List<ConfigurationParam> confParams = m.getConfParams(); // // if (m.getProtocol() instanceof ruleSSH){ // ruleSSH rs = (ruleSSH)m.getProtocol(); // if (rs==null) // return; // EList<rulSSH_commands> rulSSHs = rs.getCommands(); // // for (rulSSH_commands sshs: rulSSHs){ // // List<scriptParam> scriptParams = sshs.getScriptparams(); // for ( scriptParam sparam : scriptParams) { // //System.out.println("provideHighlightingFor sparam="+ sparam.getName()); // String highlightID = MySemanticHighlightingConfiguration.DUMMYHL; // highlightFirstFeature(sparam, sparam.getName(), highlightID, acceptor); // } // // //System.out.println("provideHighlightingFor sparam="+ sshs); // String highlightID = MySemanticHighlightingConfiguration.DUMMYHL; // getSSHFeatureNode(sshs, highlightID, acceptor); // // } // } // // if (m.getProtocol() instanceof ruleHTTP){ // ruleHTTP rs = (ruleHTTP)m.getProtocol(); // if (rs==null) // return; // // NodeAdapter adapter = NodeUtil.getNodeAdapter(m); // //System.out.println("adapter not null adapter="+adapter ); // if (adapter != null) { // //System.out.println("adapter not null ="+adapter ); // CompositeNode node = adapter.getParserNode(); // if (node != null) { // //System.out.println("node not null ="+node ); // // for (INode child : node.getChildren()) { // //System.out.println("child ="+child ); // if (child instanceof LeafNode) { // if ( ("scriptparams".equals(((LeafNode) child).getFeature() ))) { // LeafNode nodetohighlight =(LeafNode) child; // acceptor.addPosition(nodetohighlight.getOffset(), nodetohighlight.getLength(), MySemanticHighlightingConfiguration.DUMMYHL); // // //return (LeafNode) child; // } // } // } // } // } // } // } } // public LeafNode getSSHFeatureNode(rulSSH_commands semantic, String highlightID,IHighlightedPositionAcceptor acceptor ) { // NodeAdapter adapter = NodeUtil.getNodeAdapter(semantic); // //System.out.println("adapter not null adapter="+adapter ); // if (adapter != null) { // //System.out.println("adapter not null ="+adapter ); // CompositeNode node = adapter.getParserNode(); // if (node != null) { // //System.out.println("node not null ="+node ); // // for (INode child : node.getChildren()) { // //System.out.println("child ="+child ); // if (child instanceof LeafNode) { // if ("scriptparams".equals(((LeafNode) child).getFeature() )) { // LeafNode nodetohighlight =(LeafNode) child; // acceptor.addPosition(nodetohighlight.getOffset(), nodetohighlight.getLength(), highlightID); // // //return (LeafNode) child; // } // } // } // } // } // return null; // } // // // // //helper method that takes care of highlighting the first feature element // //of a semantic object using a given text style ID // private void highlightFirstFeature(EObject semobject, String featurename, // String highlightID, IHighlightedPositionAcceptor acceptor) { // //System.out.println("highlightFirstFeature featurename=" + featurename); // getFirstFeatureNode(semobject, featurename, highlightID, acceptor); // // } // // // // adapted from Sebastian Zarnekow's semantic highlighting implementation // // navigate to the parse node corresponding to the semantic object and // // fetch the leaf node that corresponds to the first feature with the given // // name // public LeafNode getFirstFeatureNode(EObject semantic, String feature, String highlightID,IHighlightedPositionAcceptor acceptor ) { // NodeAdapter adapter = NodeUtil.getNodeAdapter(semantic); // //System.out.println("adapter not null adapter="+adapter ); // if (adapter != null) { // //System.out.println("adapter not null ="+adapter ); // CompositeNode node = adapter.getParserNode(); // if (node != null) { // //System.out.println("node not null ="+node ); // if (feature == null) // return null; // for (INode child : node.getChildren()) { // //System.out.println("child ="+child ); // if (child instanceof LeafNode) { // if (feature.equals(((LeafNode) child).getText() ) || // ((LeafNode) child).getText().equals( "\""+ feature +"\"" ) // ) { // LeafNode nodetohighlight =(LeafNode) child; // acceptor.addPosition(nodetohighlight.getOffset(), nodetohighlight.getLength(), highlightID); // //return (LeafNode) child; // } // } // } // } // } // return null; // } // // // }