Java tutorial
/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.guvnor.messageconsole.client.console; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.text.shared.SafeHtmlRenderer; import org.uberfire.commons.validation.PortablePreconditions; import static com.google.gwt.dom.client.BrowserEvents.*; public class HyperLinkCell extends AbstractCell<HyperLinkCell.HyperLink> { interface HyperLinkTemplate extends SafeHtmlTemplates { @Template("<a title=\"{1}\" href=\"#\">{0}</a>") SafeHtml hyperLink(final SafeHtml label, final String title); } interface TextTemplate extends SafeHtmlTemplates { @Template("<span title=\"{1}\">{0}</span>") SafeHtml text(final String label, final String title); } /** * Inner class to contain the Hyper Link details */ public static class HyperLink { private String label; private boolean isLink; public static HyperLink newLink(final String label) { return new HyperLink(label, true); } public static HyperLink newText(final String label) { return new HyperLink(label, false); } private HyperLink(final String label, final boolean isLink) { this.label = PortablePreconditions.checkNotNull("label", label); this.isLink = PortablePreconditions.checkNotNull("isLink", isLink); } public String getLabel() { return label; } public boolean isLink() { return isLink; } } private static HyperLinkTemplate hyperLinkTemplate = GWT.create(HyperLinkTemplate.class); private static TextTemplate textTemplate = GWT.create(TextTemplate.class); /** * Construct a new HyperLinkCell that will use a given * {@link SafeHtmlRenderer}. */ public HyperLinkCell() { super(CLICK, KEYDOWN); } @Override public void onBrowserEvent(final Context context, final Element parent, final HyperLink value, final NativeEvent event, final ValueUpdater<HyperLink> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); if (CLICK.equals(event.getType())) { onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override protected void onEnterKeyDown(final Context context, final Element parent, final HyperLink value, final NativeEvent event, final ValueUpdater<HyperLink> valueUpdater) { final Element element = event.getEventTarget().cast(); if (!parent.getFirstChildElement().equals(element)) { return; } event.preventDefault(); event.stopPropagation(); if (valueUpdater != null) { valueUpdater.update(value); } } @Override public void render(final Context context, final HyperLink value, final SafeHtmlBuilder sb) { if (value != null) { if (value.isLink()) { sb.append( hyperLinkTemplate.hyperLink(SafeHtmlUtils.fromString(value.getLabel()), value.getLabel())); } else { sb.append(textTemplate.text(value.getLabel(), value.getLabel())); } } } }