CardInfoRowUtil.java
package com.hack23.cia.web.impl.ui.application.views.common.pagemode;
import com.hack23.cia.web.impl.ui.application.views.common.labelfactory.LabelFactory;
import com.hack23.cia.web.impl.ui.application.views.common.sizing.ContentRatio;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.Responsive;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.shared.ui.ContentMode;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
/**
* The Class CardInfoRowUtil.
*/
public class CardInfoRowUtil {
/** The Constant CARD_TENURE. */
public static final String CARD_TENURE = "card-tenure";
/** The Constant CARD_EXPERIENCE. */
public static final String CARD_EXPERIENCE = "card-experience-section";
/** The Constant CARD_INFO_VALUE. */
public static final String CARD_INFO_VALUE = "card-info-value";
/** The Constant CARD_INFO_ICON. */
public static final String CARD_INFO_ICON = "card-info-icon";
/** The Constant METRIC_LABEL. */
public static final String METRIC_LABEL = "metric-label";
/**
* Creates the page header.
*
* @param panel the panel
* @param panelContent the panel content
* @param header the header
* @param pageHeader the page header
* @param pageDescription the page description
*/
public static final void createPageHeader(final Panel panel, final VerticalLayout panelContent, final String header,
final String pageHeader, final String pageDescription) {
panel.setCaption(header);
LabelFactory.createHeader2Label(panelContent, pageHeader);
final Label descriptionLabel = new Label(pageDescription);
descriptionLabel.addStyleName("itembox");
Responsive.makeResponsive(descriptionLabel);
descriptionLabel.setWidth(100, Unit.PERCENTAGE);
panelContent.addComponent(descriptionLabel);
panelContent.setExpandRatio(descriptionLabel, ContentRatio.SMALL);
}
/**
* Adds an info row to the parent layout if value is not null or empty.
*
* @param parent the parent layout
* @param caption the caption
* @param value the value
* @param icon the icon
*/
public static final void addInfoRowIfNotNull(final VerticalLayout parent, final String caption, final String value,
final VaadinIcons icon) {
if (value != null && !value.trim().isEmpty() && !"null".equalsIgnoreCase(value)) {
parent.addComponent(CardInfoRowUtil.createInfoRow(caption, value, icon));
}
}
/**
* Creates a simple info row (caption and value) with optional icon.
*
* @param caption the field caption
* @param value the field value
* @param icon a VaadinIcons icon
* @return a HorizontalLayout representing the info row
*/
public static final HorizontalLayout createInfoRow(final String caption, final String value,
final VaadinIcons icon) {
return CardInfoRowUtil.createInfoRow(caption, value, icon, null);
}
/**
* Creates a row displaying a caption and value, with optional icon and tooltip.
*
* @param caption the field caption
* @param value the field value
* @param icon a VaadinIcons icon for better visual cue
* @param tooltip optional tooltip to provide more info
* @return a HorizontalLayout representing the info row
*/
public static final HorizontalLayout createInfoRow(final String caption, final String value, final VaadinIcons icon,
final String tooltip) {
final HorizontalLayout layout = new HorizontalLayout();
layout.setSpacing(true);
layout.addStyleName("metric-label");
layout.setWidthUndefined();
if (icon != null) {
final Label iconLabel = new Label(icon.getHtml(), ContentMode.HTML);
iconLabel.addStyleName("card-info-icon");
if (tooltip != null && !tooltip.isEmpty()) {
iconLabel.setDescription(tooltip);
}
layout.addComponent(iconLabel);
}
final Label captionLabel = new Label(caption);
captionLabel.addStyleName("card-info-caption");
if (tooltip != null && !tooltip.isEmpty()) {
captionLabel.setDescription(tooltip);
}
final Label valueLabel = new Label(value != null ? value : "");
valueLabel.addStyleName("card-info-value");
layout.addComponents(captionLabel, valueLabel);
return layout;
}
/**
* Creates a section layout with a title and consistent styling.
*
* @param title the section title
* @return the vertical layout configured for the section
*/
public static VerticalLayout createSectionLayout(final String title) {
final VerticalLayout layout = new VerticalLayout();
layout.setSpacing(true);
layout.setMargin(true);
layout.addStyleName("card-details-column");
layout.setWidth("100%");
final Label header = new Label(title);
header.addStyleName("card-section-title");
layout.addComponent(header);
// Add some vertical padding after the header
final Label padding = new Label();
padding.setHeight("10px");
layout.addComponent(padding);
return layout;
}
/**
* Creates the metric row.
*
* @param icon the icon
* @param linkComponent the link component
* @param description the description
* @param valueText the value text
* @return the horizontal layout
*/
public static final HorizontalLayout createMetricRow(final VaadinIcons icon,
final com.vaadin.ui.Component linkComponent, final String description, final String valueText) {
final HorizontalLayout layout = new HorizontalLayout();
layout.setSpacing(true);
layout.addStyleName("metric-label");
layout.setWidthUndefined();
final Label iconLabel = new Label(icon.getHtml(), ContentMode.HTML);
iconLabel.setDescription(description);
// Value displayed outside of the link
Label valueLabel = null;
if (valueText != null && !valueText.isEmpty()) {
valueLabel = new Label(valueText);
valueLabel.addStyleName("metric-value");
}
layout.addComponent(iconLabel);
layout.addComponent(linkComponent);
if (valueLabel != null) {
layout.addComponent(valueLabel);
}
return layout;
}
/**
* Creates the card header.
*
* @param cardContent the card content
* @param titleText the title text
*/
public static final void createCardHeader(final VerticalLayout cardContent, final String titleText) {
// Card Header
final HorizontalLayout headerLayout = new HorizontalLayout();
headerLayout.setSpacing(true);
headerLayout.setWidth("100%");
headerLayout.addStyleName("card-header-section");
final Label titleLabel = new Label(titleText, ContentMode.HTML);
titleLabel.addStyleName("card-title");
titleLabel.setWidthUndefined();
headerLayout.addComponent(titleLabel);
cardContent.addComponent(headerLayout);
// Divider line
final Label divider = new Label("<hr/>", ContentMode.HTML);
divider.addStyleName("card-divider");
divider.setWidth("100%");
cardContent.addComponent(divider);
}
/**
* Creates a standard stats container.
*
* @return the vertical layout configured for the stats container
*/
public static final VerticalLayout createStatsContainer() {
final VerticalLayout layout = new VerticalLayout();
layout.setSpacing(false);
layout.addStyleName("card-stats-container");
layout.setWidth("100%");
return layout;
}
/**
* Creates the standard row.
*
* @return the horizontal layout
*/
public static HorizontalLayout createStandardRow() {
final HorizontalLayout layout = new HorizontalLayout();
layout.setSpacing(true);
layout.setWidthUndefined();
return layout;
}
/**
* Creates the icon label.
*
* @param icon the icon
* @param tooltip the tooltip
* @return the label
*/
public static Label createIconLabel(final VaadinIcons icon, final String tooltip) {
final Label iconLabel = new Label(icon.getHtml(), ContentMode.HTML);
iconLabel.addStyleName(CARD_INFO_ICON);
if (tooltip != null) {
iconLabel.setDescription(tooltip);
}
return iconLabel;
}
}