blob: e234bc67ec691d3b5f24e0728350ea24ab83fd2a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.view.ext;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.skalli.commons.HtmlBuilder;
import org.eclipse.skalli.model.EntityBase;
import org.eclipse.skalli.model.ExtensionEntityBase;
import org.eclipse.skalli.model.Project;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.Resource;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
public abstract class InfoBoxBase implements InfoBox {
protected Clipboard clipboard;
protected static final String STYLE_LABEL = "infolabel"; //$NON-NLS-1$
protected static final String STYLE_LINK = "infolink"; //$NON-NLS-1$
protected static final String HSPACE = "    "; //$NON-NLS-1$
protected static final String DEFAULT_TARGET = HtmlBuilder.DEFAULT_TARGET;
private static final String LAST_MODIFIED = "last modified"; //$NON-NLS-1$
protected void bindClipboard(Clipboard clipboard) {
this.clipboard = clipboard;
}
protected void unbindClipboard(Clipboard clipboard) {
this.clipboard = null;
}
protected void createLabel(Layout layout, String caption) {
createLabel(layout, caption, STYLE_LABEL);
}
protected void createLabel(Layout layout, String caption, String styleName) {
Label label = new Label(caption, Label.CONTENT_XHTML);
if (StringUtils.isNotBlank(styleName)) {
label.addStyleName(styleName);
} else {
label.addStyleName(STYLE_LABEL);
}
layout.addComponent(label);
}
protected void createLink(Layout layout, String caption, String url) {
createLink(layout, caption, url, DEFAULT_TARGET, null);
}
protected void createLink(Layout layout, String caption, String url, String targetName, String styleName) {
createLink(layout, caption, new ExternalResource(url), targetName, styleName);
}
protected void createLink(Layout layout, String caption, Resource resource) {
createLink(layout, caption, resource, DEFAULT_TARGET, null);
}
protected void createLink(Layout layout, String caption, Resource resource, String targetName, String styleName) {
Link link = new Link(caption, resource);
if (StringUtils.isNotBlank(targetName)) {
link.setTargetName(targetName);
} else {
link.setTargetName(DEFAULT_TARGET);
}
if (StringUtils.isNotBlank(styleName)) {
link.addStyleName(styleName);
} else {
link.addStyleName(STYLE_LINK);
}
layout.addComponent(link);
}
protected void addLastModifiedInfo(Layout layout, String caption, String lastModified, String lastModifiedBy) {
if (lastModified == null) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append("<span style=\"font-size:x-small\">");
if (StringUtils.isNotBlank(caption)) {
sb.append(caption);
} else {
sb.append(LAST_MODIFIED);
}
sb.append(" ");
sb.append(lastModified);
if (StringUtils.isNotBlank(lastModifiedBy)) {
sb.append(" by ").append(lastModifiedBy);
}
sb.append("</span>");
Label label = asLabel(sb.toString());
label.setStyleName("light");
label.addStyleName(STYLE_LABEL);
layout.addComponent(label);
}
protected void addLastModifiedInfo(Layout layout, EntityBase entity) {
addLastModifiedInfo(layout, null, entity);
}
protected void addLastModifiedInfo(Layout layout, String caption, EntityBase entity) {
if (entity == null) {
return;
}
addLastModifiedInfo(layout, caption, entity.getLastModified(), entity.getLastModifiedBy());
}
protected void addLastModifiedInfo(Layout layout, ExtensionEntityBase ext) {
addLastModifiedInfo(layout, null, ext);
}
public Label asLabel(String s) {
return asLabel(s, (String[]) null);
}
public Label asLabel(StringBuilder sb) {
return asLabel(sb.toString(), (String[]) null);
}
public Label asLabel(HtmlBuilder sb) {
return asLabel(sb.toString(), (String[]) null);
}
public Label asLabel(String s, String... styles) {
Label label = new Label(s, Label.CONTENT_XHTML);
if (styles != null) {
for (String style : styles) {
label.addStyleName(style);
}
}
return label;
}
public Label asLabel(StringBuilder sb, String... styles) {
return asLabel(sb.toString(), styles);
}
public Label asLabel(HtmlBuilder sb, String... styles) {
return asLabel(sb.toString(), styles);
}
/**
* Creates a link that copies a given text to the clipboard.<p>
* Note: An info box that uses this method must bind to the {@link Clipboard} service:
* <pre>
* &lt;reference
* name="Clipboard"
* interface="org.eclipse.skalli.view.ext.Clipboard"
* bind="bindClipboard"
* unbind="unbindClipboard"
* cardinality="0..1"
* policy="dynamic" /&gt;
* </pre>
*
* @param label the label to display with the link.
* @param textToClipboard the text to copy to the clipboard when the
* link is clicked.
*/
@SuppressWarnings("nls")
protected String copyToClipboardLink(String label, String textToClipboard) {
StringBuilder sb = new StringBuilder();
sb.append("<div>").append(label);
if (clipboard != null) {
sb.append(clipboard.copyToClipboardLink(textToClipboard));
}
sb.append("</div>\n");
return sb.toString();
}
@Override
public String getShortName() {
return null;
}
@Override
public List<String> getSupportedActions() {
return Collections.emptyList();
}
@Override
public void perform(String action, Project project, String userId) {
//nothing to do here; no default action available
}
}