/******************************************************************************* * Copyright (c) 2013 itemis AG (http://www.itemis.eu). * 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 ******************************************************************************/ package de.itemis.tooling.terminology.ui.hover; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.nodemodel.ICompositeNode; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider; import com.google.common.collect.ImmutableList; import de.itemis.tooling.terminology.terminology.Author; import de.itemis.tooling.terminology.terminology.Customer; import de.itemis.tooling.terminology.terminology.Entry; import de.itemis.tooling.terminology.terminology.Gr; import de.itemis.tooling.terminology.terminology.Product; import de.itemis.tooling.terminology.terminology.Status; import de.itemis.tooling.terminology.terminology.Subject; import de.itemis.tooling.terminology.terminology.Term; import de.itemis.tooling.terminology.terminology.TerminologyPackage; import de.itemis.tooling.terminology.terminology.WithNameAndDisplayName; public class TerminologyEObjectHoverProvider extends DefaultEObjectHoverProvider { // @Override // protected String getFirstLine(EObject o) { // return ""; // } @Override protected String getDocumentation(EObject o) { if(o instanceof Term){ ICompositeNode node = NodeModelUtils.findActualNodeFor(o); StringBuilder b=new StringBuilder(); String definition=((Entry)o.eContainer()).getDefinition(); if(definition!=null && definition.length()>0){ b.append("Definition: "); b.append(definition); b.append("\n"); } String nodeText = node.getText().trim(); int StatusIndex =nodeText.indexOf("Status"); b.append(nodeText.substring(StatusIndex)); //make hover window bigger b.append("<dl></dl><dl></dl><dl></dl><dl></dl><dl></dl>"); return b.toString().replaceAll("\n", "</br>"); } else if(o instanceof Entry){ Entry e=(Entry)o; StringBuilder b=new StringBuilder(); if(e.getDefinition()!=null &&e.getDefinition().length()>0){ b.append("Definition: "); b.append(e.getDefinition()); b.append("\n"); } for (Term t : e.getTerms()) { b.append("Term "); b.append(t.getName()); b.append("\n"); } b.append("<dl></dl><dl></dl><dl></dl><dl></dl><dl></dl>"); return b.toString().replaceAll("\n", "</br>"); } else if (o instanceof WithNameAndDisplayName){ return ((WithNameAndDisplayName) o).getDisplayName(); } return null; } // //remove surrounding quotation marks and escaped quotes // private String simplify(String value) { // String resultString=""; // if(value!=null){ // if(value.startsWith("\"\"\"")){ // resultString=value.substring(3, value.length()-3); // }else{ // resultString=value.substring(1, value.length()-1); // } // } // return resultString.replaceAll("\\\\\"", "\"").replaceAll("\n", "</br>"); // } private static final List<EClass> hoverClasses=ImmutableList.of( TerminologyPackage.Literals.TERM, TerminologyPackage.Literals.AUTHOR, TerminologyPackage.Literals.SUBJECT, TerminologyPackage.Literals.STATUS, TerminologyPackage.Literals.GR, TerminologyPackage.Literals.LANGUAGE, TerminologyPackage.Literals.ENTRY, TerminologyPackage.Literals.PRODUCT, TerminologyPackage.Literals.CUSTOMER ); @Override protected boolean hasHover(EObject o) { EClass eClass = o.eClass(); return hoverClasses.contains(eClass); } }