Commit 25e5c979 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ hover improvements

parent 334cc8af
Loading
Loading
Loading
Loading
+62 −2
Original line number Diff line number Diff line
package org.etsi.mts.tdl.ui.hover;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
import org.etsi.mts.tdl.Member;
import org.etsi.mts.tdl.MemberAssignment;
import org.etsi.mts.tdl.NamedElement;
import org.etsi.mts.tdl.Parameter;
import org.etsi.mts.tdl.ParameterBinding;
import org.etsi.mts.tdl.StructuredDataInstance;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.TestDescription;
import org.etsi.mts.tdl.TestObjective;
@@ -15,6 +23,9 @@ import org.etsi.mts.tdl.TestObjective;
public class TDLtxHoverProvider extends DefaultEObjectHoverProvider {
	protected String getHoverInfoAsHtml(EObject o) {
		String html = super.getHoverInfoAsHtml(o);
		if (o instanceof NamedElement) {
			html = "<b>"+o.eClass().getName()+" : "+((NamedElement) o).getName()+"</b>";
		}
		if (o instanceof TestObjective) {
			//TODO: search within resource set?
			//TODO: basic PoC, elaborate further, e.g. links, other info 
@@ -26,12 +37,61 @@ public class TDLtxHoverProvider extends DefaultEObjectHoverProvider {
			html+="<br/></br>Referenced in: <b><ul><li>"+targets+"</li></ul></b></br</br>";
		}
		if (o instanceof StructuredDataType) {
			String members = ((StructuredDataType) o).allMembers().stream().map(e -> e.getName() + " : "+e.getDataType().getName()).collect(Collectors.joining("</li><li>"));
			html+="<br/></br>Members: <b><ul><li>"+members+"</li></ul></b></br</br>";
			String members = getListOfMembers((StructuredDataType) o);
			html+="<br/></br>Members: <b>"+members+"</b></br</br>";
		}		
		if (o instanceof StructuredDataInstance) {
			StructuredDataInstance instance = (StructuredDataInstance) o;
			html+="<br/><br/>Type: <b>"+instance.getDataType().getName()+"</b>";
			String members = getListOfMembers((StructuredDataType) instance.getDataType());
			html+="<br/></br>Members: <b>"+members+"</b></br</br>";
			//TODO: merge assignments above?
			String unassigned = getListOfUnassignedMembers((StructuredDataType) instance.getDataType(), instance.getMemberAssignment());
			if (!unassigned.equals("<ul><li></li></ul>")) {
				html+="Unassigned Members: <b>"+unassigned+"</b></br</br>";
			}
		}		
		if (o instanceof Parameter) {
			html+="<br/><br/>Type: <b>"+((Parameter) o).getDataType().getName()+"</b>";
			if (((Parameter) o).getDataType() instanceof StructuredDataType) {
				String members = getListOfMembers((StructuredDataType) ((Parameter) o).getDataType());
				html+="<br/></br>Members: <b>"+members+"</b></br</br>";
				//not really possible to determine
//				String unbound = getListOfUnboundParameters(((StructuredDataType) ((Parameter) o).getDataType()), o);
//				html+="<br/></br>Unbound Parameters: <b>"+unbound+"</b></br</br>";
			}
		}
		//TODO: data use
		return html;
	}

	//TODO: move to label providers?
	private String getListOfMembers(StructuredDataType o) {
		String members = o.allMembers().stream()
				.map(e -> e.getName() + " : "+e.getDataType().getName() + (e.isIsOptional() ? " (optional)" : ""))
				.collect(Collectors.joining("</li><li>"));
		return "<ul><li>"+members+"</li></ul>";
	}

	private String getListOfUnassignedMembers(StructuredDataType o, List<MemberAssignment> m) {
		List<Member> assigned = m.stream().map(e->e.getMember()).collect(Collectors.toList());
		String members = o.allMembers().stream()
				.filter(e->!assigned.contains(e))
				.map(e -> e.getName() + " : "+e.getDataType().getName() + (e.isIsOptional() ? " (optional)" : ""))
				.collect(Collectors.joining("</li><li>"));
		return "<ul><li>"+members+"</li></ul>";
	}

	private String getListOfUnboundParameters(StructuredDataType o, List<ParameterBinding> m) {
		List<Parameter> assigned = m.stream().map(e->e.getParameter()).collect(Collectors.toList());
		String members = o.allMembers().stream()
				.filter(e->!assigned.contains(e))
				.map(e -> e.getName() + " : "+e.getDataType().getName() + (e.isIsOptional() ? " (optional)" : ""))
				.collect(Collectors.joining("</li><li>"));
		return "<ul><li>"+members+"</li></ul>";
	}

	
	protected String getHoverInfoAsHtml(TestObjective o) {
		String html = super.getHoverInfoAsHtml(o);
		System.out.println(html);