/* * Copyright 2015 JBoss, by Red Hat, Inc * * 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.uberfire.ext.widgets.common.client.tables; import com.google.gwt.cell.client.AbstractSafeHtmlCell; 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.ext.widgets.common.client.resources.CommonCss; import org.uberfire.ext.widgets.common.client.resources.CommonResources; /** * An extension to the normal TextCell that renders upto two rows of text; one * being the title and the other being narrative. */ public class TitledTextCell extends AbstractSafeHtmlCell<TitledTextCell.TitledText> { protected static final CommonCss css = CommonResources.INSTANCE.CSS(); /** * Constructs a TitledTextCell that uses a * {@link TitledTextSafeHtmlRenderer} to render its text. */ public TitledTextCell() { super(TitledTextSafeHtmlRenderer.getInstance()); } /** * Constructs a TextCell that uses the provided {@link SafeHtmlRenderer} to * render its text. * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance */ public TitledTextCell(final SafeHtmlRenderer<TitledText> renderer) { super(renderer); } @Override public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { if (value != null) { sb.append(value); } } /** * Container for the Cell value; consisting of title and description */ public static class TitledText implements Comparable<TitledText> { private String title; private String description; public TitledText(String title, String description) { this.title = title; this.description = description; } public String getTitle() { return title; } public String getDescription() { return description; } public int compareTo(TitledText o) { return title.compareTo(o.title); } } /** * A renderer for TitledText values */ public static class TitledTextSafeHtmlRenderer implements SafeHtmlRenderer<TitledText> { // Singleton private static TitledTextSafeHtmlRenderer instance; private TitledTextSafeHtmlRenderer() { } public static TitledTextSafeHtmlRenderer getInstance() { if (instance == null) { instance = new TitledTextSafeHtmlRenderer(); } return instance; } public SafeHtml render(TitledText object) { boolean bHasDescription = object.description != null && !"".equals(object.description); if (bHasDescription) { String html = "<div class='" + css.titleTextCellContainer() + "'>"; html = html + "<div>" + object.title + "</div>"; html = html + "<div class='" + css.titleTextCellDescription() + "'>" + object.description + "</div>"; html = html + "</div>"; return SafeHtmlUtils.fromTrustedString(html); } else { String html = "<div class='" + css.titleTextCellContainer() + "'>"; html = html + "<div>" + object.title + "</div>"; html = html + "</div>"; return SafeHtmlUtils.fromTrustedString(html); } } public void render(TitledText object, SafeHtmlBuilder builder) { builder.append(render(object)); } } }