/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.ext.java.client.navigation.openimplementation; import elemental.dom.Element; import elemental.dom.Node; import elemental.events.CustomEvent; import elemental.events.Event; import elemental.events.EventListener; import elemental.html.SpanElement; import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant; import org.eclipse.che.ide.ext.java.client.JavaResources; import org.eclipse.che.ide.ext.java.client.util.Flags; import org.eclipse.che.ide.ext.java.shared.dto.model.Type; import org.eclipse.che.ide.jseditor.client.popup.PopupResources; import org.eclipse.che.ide.jseditor.client.popup.PopupWidget; import org.eclipse.che.ide.util.dom.Elements; import org.vectomatic.dom.svg.ui.SVGImage; import org.vectomatic.dom.svg.ui.SVGResource; /** * Widget for displaying implementations. * * @author Valeriy Svydenko */ public class NoImplementationWidget extends PopupWidget<Type> { /** * Custom event type. */ private static final String CUSTOM_EVT_TYPE_VALIDATE = "itemvalidate"; private final JavaResources javaResources; private final JavaLocalizationConstant locale; private final OpenImplementationPresenter openImplementationPresenter; public NoImplementationWidget(PopupResources popupResources, JavaResources javaResources, JavaLocalizationConstant locale, OpenImplementationPresenter openImplementationPresenter, String title) { super(popupResources, title); this.javaResources = javaResources; this.locale = locale; this.openImplementationPresenter = openImplementationPresenter; this.asElement().setId("implementationsId"); } @Override public String getEmptyMessage() { return locale.noImplementations(); } @Override public Element createItem(final Type itemModel) { final Element element = Elements.createLiElement(popupResources.popupStyle().item()); final Element iconElement = Elements.createDivElement(popupResources.popupStyle().icon()); int flag = itemModel.getFlags(); if (flag == -1) { element.setInnerText(getEmptyMessage()); return element; } SVGImage svgImage = getSvgImage(flag); iconElement.appendChild((Node)svgImage.getElement()); element.appendChild(iconElement); element.appendChild(createTitleOfElement(itemModel)); final EventListener validateListener = new EventListener() { @Override public void handleEvent(final Event evt) { openImplementationPresenter.actionPerformed(itemModel); hide(); } }; element.addEventListener(Event.DBLCLICK, validateListener, false); element.addEventListener(CUSTOM_EVT_TYPE_VALIDATE, validateListener, false); return element; } @Override public void validateItem(final Element validatedItem) { validatedItem.dispatchEvent(createValidateEvent(CUSTOM_EVT_TYPE_VALIDATE)); super.validateItem(validatedItem); } @Override public boolean needsFocus() { return true; } private SpanElement createTitleOfElement(Type type) { String path = type.getRootPath(); SpanElement texElement = Elements.createSpanElement(); SpanElement highlightElement = Elements.createSpanElement(javaResources.css().disableTextColor()); highlightElement.setInnerText(" - (" + path + ')'); texElement.setInnerText(type.getElementName()); texElement.appendChild(highlightElement); return texElement; } private native CustomEvent createValidateEvent(String eventType) /*-{ return new CustomEvent(eventType); }-*/; private SVGImage getSvgImage(int flag) { SVGResource icon; if (Flags.isInterface(flag)) { icon = javaResources.interfaceItem(); } else if (Flags.isEnum(flag)) { icon = javaResources.enumItem(); } else if (Flags.isAnnotation(flag)) { icon = javaResources.annotationItem(); } else { icon = javaResources.javaFile(); } return new SVGImage(icon); } }