Sonar issues fixed
Signed-off-by: asharani-murugesh <asharani.murugesh@in.bosch.com>
This commit is contained in:
@@ -14,6 +14,7 @@ import com.vaadin.data.Container;
|
||||
import com.vaadin.data.Container.Indexed;
|
||||
import com.vaadin.shared.ui.grid.HeightMode;
|
||||
import com.vaadin.ui.Grid;
|
||||
import com.vaadin.ui.Label;
|
||||
import com.vaadin.ui.themes.ValoTheme;
|
||||
|
||||
/**
|
||||
@@ -31,15 +32,8 @@ public abstract class AbstractGrid extends Grid {
|
||||
setSizeFull();
|
||||
setImmediate(true);
|
||||
setId(getGridId());
|
||||
//TODO these styles are rwquired??
|
||||
addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES);
|
||||
addStyleName(ValoTheme.TABLE_SMALL);
|
||||
|
||||
setHeight("100%");
|
||||
setHeightMode(HeightMode.CSS);
|
||||
setSelectionMode(SelectionMode.NONE);
|
||||
setColumnReorderingAllowed(true);
|
||||
|
||||
addNewContainerDS();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,9 +19,14 @@ public class HtmlButtonRenderer extends ButtonRenderer {
|
||||
|
||||
private void applystyles(Button button) {
|
||||
button.setStyleName(VButton.CLASSNAME);
|
||||
button.addStyleName("tiny v-button-tiny");
|
||||
button.addStyleName("borderless v-button-borderless");
|
||||
button.addStyleName("icon-only v-button-icon-only");
|
||||
button.addStyleName("button-no-border v-button-button-no-border");
|
||||
button.addStyleName(getStyle("tiny"));
|
||||
button.addStyleName(getStyle("borderless"));
|
||||
button.addStyleName(getStyle("icon-only"));
|
||||
button.addStyleName(getStyle("button-no-border"));
|
||||
}
|
||||
|
||||
|
||||
private String getStyle(final String style) {
|
||||
return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ public class HtmlLabelRenderer extends WidgetRenderer<String, VLabel> {
|
||||
|
||||
if (value != null) {
|
||||
label.setHTML("<span>&#x" + Integer.toHexString(Integer.parseInt(value)) + ";</span>");
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
label.setHTML("<span></span>");
|
||||
}
|
||||
applyStyle(label, style);
|
||||
@@ -33,14 +32,18 @@ public class HtmlLabelRenderer extends WidgetRenderer<String, VLabel> {
|
||||
}
|
||||
|
||||
private void applyStyle(VLabel label, String style) {
|
||||
label.setStylePrimaryName("v-label");
|
||||
label.setStyleName("small v-label-small");
|
||||
label.addStyleName("font-icon v-label-font-icon");
|
||||
label.setStyleName(VLabel.CLASSNAME);
|
||||
label.addStyleName(getStyle("small"));
|
||||
label.addStyleName(getStyle("font-icon"));
|
||||
if (style != null) {
|
||||
label.addStyleName(style + " v-label-" + style);
|
||||
label.addStyleName(getStyle(style));
|
||||
}
|
||||
}
|
||||
|
||||
private String getStyle(final String style) {
|
||||
return new StringBuilder(style).append(" ").append(VLabel.CLASSNAME).append("-").append(style).toString();
|
||||
}
|
||||
|
||||
private Map<String, String> formatInput(String input) {
|
||||
Map<String, String> details = new HashMap<>();
|
||||
String[] tempData = input.split(",");
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.eclipse.hawkbit.ui.customrenderers.client.renderers;
|
||||
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.vaadin.client.renderers.ButtonRenderer;
|
||||
import com.vaadin.client.ui.VButton;
|
||||
import com.vaadin.client.widget.grid.RendererCellReference;
|
||||
|
||||
public class LinkRenderer extends ButtonRenderer {
|
||||
@@ -15,10 +16,14 @@ public class LinkRenderer extends ButtonRenderer {
|
||||
}
|
||||
|
||||
private void applystyle(Button button) {
|
||||
button.setStylePrimaryName("v-button");
|
||||
button.setStyleName("borderless v-button-borderless");
|
||||
button.addStyleName("small v-button-small");
|
||||
button.addStyleName("on-focus-no-border v-button-on-focus-no-border");
|
||||
button.addStyleName("link v-button-link");
|
||||
button.setStyleName(VButton.CLASSNAME);
|
||||
button.addStyleName(getStyle("borderless"));
|
||||
button.addStyleName(getStyle("small"));
|
||||
button.addStyleName(getStyle("on-focus-no-border"));
|
||||
button.addStyleName(getStyle("link"));
|
||||
}
|
||||
|
||||
private String getStyle(final String style) {
|
||||
return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -524,7 +524,7 @@ public class ActionHistoryTable extends TreeTable implements Handler {
|
||||
} else if (Action.Status.SCHEDULED == status) {
|
||||
label.setStyleName(statusIconPending);
|
||||
label.setDescription(i18n.get("label.scheduled"));
|
||||
label.setValue(FontAwesome.BULLSEYE.getHtml());
|
||||
label.setValue(FontAwesome.HOURGLASS_1.getHtml());
|
||||
} else {
|
||||
label.setDescription("");
|
||||
label.setValue("");
|
||||
@@ -575,7 +575,7 @@ public class ActionHistoryTable extends TreeTable implements Handler {
|
||||
label.setContentMode(ContentMode.HTML);
|
||||
if (SPUIDefinitions.SCHEDULED.equals(activeValue)) {
|
||||
label.setDescription("Scheduled");
|
||||
label.setValue(FontAwesome.BULLSEYE.getHtml());
|
||||
label.setValue(FontAwesome.HOURGLASS_1.getHtml());
|
||||
} else if (SPUIDefinitions.ACTIVE.equals(activeValue)) {
|
||||
label.setDescription("Active");
|
||||
label.setStyleName("statusIconActive");
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.UINotification;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory;
|
||||
@@ -54,8 +55,17 @@ import com.vaadin.ui.renderers.HtmlRenderer;
|
||||
@SpringComponent
|
||||
@ViewScope
|
||||
public class RolloutListGrid extends AbstractGrid {
|
||||
|
||||
private static final long serialVersionUID = 4060904914954370524L;
|
||||
|
||||
private static final String UPDATE_OPTION = "Update";
|
||||
|
||||
private static final String RESUME_OPTION = "Resume";
|
||||
|
||||
private static final String PAUSE_OPTION = "Pause";
|
||||
|
||||
private static final String START_OPTION = "Start";
|
||||
|
||||
@Autowired
|
||||
private I18N i18n;
|
||||
|
||||
@@ -248,16 +258,22 @@ public class RolloutListGrid extends AbstractGrid {
|
||||
return cell -> getDescription(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addColumnRenderes() {
|
||||
getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(),
|
||||
new TotalTargetCountStatusConverter());
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter());
|
||||
getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event)));
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event)));
|
||||
}
|
||||
|
||||
private void alignColumns() {
|
||||
setCellStyleGenerator(new CellStyleGenerator() {
|
||||
private static final long serialVersionUID = 5573570647129792429L;
|
||||
|
||||
@Override
|
||||
public String getStyle(final CellReference cellReference) {
|
||||
String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS,
|
||||
/*
|
||||
* SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS,
|
||||
*/ SPUILabelDefinitions.ACTION };
|
||||
String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION };
|
||||
if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) {
|
||||
return "centeralign";
|
||||
}
|
||||
@@ -266,14 +282,6 @@ public class RolloutListGrid extends AbstractGrid {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addColumnRenderes() {
|
||||
addDetailStatusColumn();
|
||||
addStatusCoulmn();
|
||||
getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event)));
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event)));
|
||||
}
|
||||
|
||||
private void onClickOfRolloutName(RendererClickEvent event) {
|
||||
rolloutUIState.setRolloutId((long) event.getItemId());
|
||||
final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId())
|
||||
@@ -298,126 +306,66 @@ public class RolloutListGrid extends AbstractGrid {
|
||||
final ContextMenu context = new ContextMenu();
|
||||
context.addItemClickListener(event -> menuItemClicked(event));
|
||||
if (rolloutStatus == RolloutStatus.READY) {
|
||||
final ContextMenuItem startItem = context.addItem("Start");
|
||||
final ContextMenuItem startItem = context.addItem(START_OPTION);
|
||||
startItem.setData(new ContextMenuData(rolloutId, ACTION.START));
|
||||
} else if (rolloutStatus == RolloutStatus.RUNNING) {
|
||||
final ContextMenuItem pauseItem = context.addItem("Pause");
|
||||
final ContextMenuItem pauseItem = context.addItem(PAUSE_OPTION);
|
||||
pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE));
|
||||
} else if (rolloutStatus == RolloutStatus.PAUSED) {
|
||||
final ContextMenuItem resumeItem = context.addItem("Resume");
|
||||
final ContextMenuItem resumeItem = context.addItem(RESUME_OPTION);
|
||||
resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME));
|
||||
} else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) {
|
||||
return context;
|
||||
}
|
||||
if (permissionChecker.hasRolloutUpdatePermission()) {
|
||||
final ContextMenuItem cancelItem = context.addItem("Update");
|
||||
final ContextMenuItem cancelItem = context.addItem(UPDATE_OPTION);
|
||||
cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE));
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
private void addDetailStatusColumn() {
|
||||
getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(),
|
||||
new Converter<String, TotalTargetCountStatus>() {
|
||||
private static final long serialVersionUID = 2660476405836705932L;
|
||||
|
||||
@Override
|
||||
public TotalTargetCountStatus convertToModel(String value,
|
||||
Class<? extends TotalTargetCountStatus> targetType, Locale locale)
|
||||
throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(TotalTargetCountStatus value,
|
||||
Class<? extends String> targetType, Locale locale)
|
||||
throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<TotalTargetCountStatus> getModelType() {
|
||||
return TotalTargetCountStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void addStatusCoulmn() {
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(),
|
||||
new Converter<String, RolloutStatus>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public RolloutStatus convertToModel(final String value,
|
||||
final Class<? extends RolloutStatus> targetType, final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final RolloutStatus value,
|
||||
final Class<? extends String> targetType, final Locale locale) {
|
||||
return convertRolloutStatusToString(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<RolloutStatus> getModelType() {
|
||||
return RolloutStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String convertRolloutStatusToString(final RolloutStatus value) {
|
||||
String result = null;
|
||||
switch (value) {
|
||||
case FINISHED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen",
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_GREEN,
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case PAUSED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.PAUSE.getCodepoint()),
|
||||
"statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
SPUIStyleDefinitions.STATUS_ICON_BLUE, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case RUNNING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "yellowSpinner",
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW,
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case READY:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue",
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()),
|
||||
SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case STOPPED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.STOP.getCodepoint()),
|
||||
"statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case CREATING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "greySpinner",
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY,
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case STARTING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "blueSpinner",
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE,
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case ERROR_CREATING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed",
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()),
|
||||
SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
case ERROR_STARTING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed",
|
||||
SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()),
|
||||
SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -486,8 +434,7 @@ public class RolloutListGrid extends AbstractGrid {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum ACTION {
|
||||
PAUSE, RESUME, START, UPDATE
|
||||
}
|
||||
@@ -544,6 +491,70 @@ public class RolloutListGrid extends AbstractGrid {
|
||||
public void setAction(final ACTION action) {
|
||||
this.action = action;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Converter to convert {@link RolloutStatus} to string.
|
||||
*
|
||||
*/
|
||||
class RolloutStatusConverter implements Converter<String, RolloutStatus> {
|
||||
|
||||
private static final long serialVersionUID = -1217685750825632678L;
|
||||
|
||||
@Override
|
||||
public RolloutStatus convertToModel(final String value, final Class<? extends RolloutStatus> targetType,
|
||||
final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final RolloutStatus value, final Class<? extends String> targetType,
|
||||
final Locale locale) {
|
||||
return convertRolloutStatusToString(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<RolloutStatus> getModelType() {
|
||||
return RolloutStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converter to convert {@link TotalTargetCountStatus} to formatted string
|
||||
* with status and count details.
|
||||
*
|
||||
*/
|
||||
class TotalTargetCountStatusConverter implements Converter<String, TotalTargetCountStatus> {
|
||||
|
||||
private static final long serialVersionUID = -5794528427855153924L;
|
||||
|
||||
@Override
|
||||
public TotalTargetCountStatus convertToModel(String value, Class<? extends TotalTargetCountStatus> targetType,
|
||||
Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(TotalTargetCountStatus value, Class<? extends String> targetType,
|
||||
Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<TotalTargetCountStatus> getModelType() {
|
||||
return TotalTargetCountStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory;
|
||||
import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
|
||||
@@ -213,26 +214,12 @@ public class RolloutGroupListGrid extends AbstractGrid {
|
||||
alignColumns();
|
||||
}
|
||||
|
||||
private void alignColumns() {
|
||||
setCellStyleGenerator(new CellStyleGenerator() {
|
||||
private static final long serialVersionUID = 5573570647129792429L;
|
||||
|
||||
@Override
|
||||
public String getStyle(final CellReference cellReference) {
|
||||
String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS,
|
||||
SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS };
|
||||
if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) {
|
||||
return "centeralign";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addColumnRenderes() {
|
||||
addDetailStatusColumn();
|
||||
addStatusCoulmn();
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(),
|
||||
new RolloutGroupStatusConverter());
|
||||
getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(),
|
||||
new TotalTargetCountStatusConverter());
|
||||
if (permissionChecker.hasRolloutTargetsReadPermission()) {
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME)
|
||||
.setRenderer(new LinkRenderer(event -> onClickOfRolloutGroupName(event)));
|
||||
@@ -263,62 +250,33 @@ public class RolloutGroupListGrid extends AbstractGrid {
|
||||
eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS);
|
||||
}
|
||||
|
||||
private void addStatusCoulmn() {
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(),
|
||||
new Converter<String, RolloutGroupStatus>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public RolloutGroupStatus convertToModel(final String value,
|
||||
final Class<? extends RolloutGroupStatus> targetType, final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final RolloutGroupStatus value,
|
||||
final Class<? extends String> targetType, final Locale locale) {
|
||||
return convertRolloutGroupStatusToString(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<RolloutGroupStatus> getModelType() {
|
||||
return RolloutGroupStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) {
|
||||
String result = null;
|
||||
switch (value) {
|
||||
case FINISHED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen",
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_GREEN,
|
||||
SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
break;
|
||||
case SCHEDULED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue",
|
||||
Integer.toString(FontAwesome.HOURGLASS_1.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_PENDING,
|
||||
SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
break;
|
||||
case RUNNING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow",
|
||||
Integer.toString(FontAwesome.ADJUST.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_LIGHT_YELLOW,
|
||||
SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
break;
|
||||
case READY:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue",
|
||||
SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()),
|
||||
SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
break;
|
||||
case ERROR:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed",
|
||||
SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()),
|
||||
SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -327,37 +285,6 @@ public class RolloutGroupListGrid extends AbstractGrid {
|
||||
|
||||
}
|
||||
|
||||
private void addDetailStatusColumn() {
|
||||
getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(),
|
||||
new Converter<String, TotalTargetCountStatus>() {
|
||||
private static final long serialVersionUID = 2660476405836705932L;
|
||||
|
||||
@Override
|
||||
public TotalTargetCountStatus convertToModel(String value,
|
||||
Class<? extends TotalTargetCountStatus> targetType, Locale locale)
|
||||
throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(TotalTargetCountStatus value,
|
||||
Class<? extends String> targetType, Locale locale)
|
||||
throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<TotalTargetCountStatus> getModelType() {
|
||||
return TotalTargetCountStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String getDescription(CellReference cell) {
|
||||
if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) {
|
||||
return cell.getProperty().getValue().toString().toLowerCase();
|
||||
@@ -373,4 +300,85 @@ public class RolloutGroupListGrid extends AbstractGrid {
|
||||
}
|
||||
}
|
||||
|
||||
private void alignColumns() {
|
||||
setCellStyleGenerator(new CellStyleGenerator() {
|
||||
private static final long serialVersionUID = 5573570647129792429L;
|
||||
|
||||
@Override
|
||||
public String getStyle(final CellReference cellReference) {
|
||||
String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS,
|
||||
SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS };
|
||||
if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) {
|
||||
return "centeralign";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Converts {@link TotalTargetCountStatus} into formatted string with status
|
||||
* and count details.
|
||||
*
|
||||
*/
|
||||
class TotalTargetCountStatusConverter implements Converter<String, TotalTargetCountStatus> {
|
||||
|
||||
private static final long serialVersionUID = -9205943894818450807L;
|
||||
|
||||
@Override
|
||||
public TotalTargetCountStatus convertToModel(String value, Class<? extends TotalTargetCountStatus> targetType,
|
||||
Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(TotalTargetCountStatus value, Class<? extends String> targetType,
|
||||
Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
|
||||
return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<TotalTargetCountStatus> getModelType() {
|
||||
return TotalTargetCountStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Converts {@link RolloutGroupStatus} to string.
|
||||
*
|
||||
*/
|
||||
class RolloutGroupStatusConverter implements Converter<String, RolloutGroupStatus> {
|
||||
|
||||
private static final long serialVersionUID = 5448062736373292820L;
|
||||
|
||||
@Override
|
||||
public RolloutGroupStatus convertToModel(final String value,
|
||||
final Class<? extends RolloutGroupStatus> targetType, final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final RolloutGroupStatus value, final Class<? extends String> targetType,
|
||||
final Locale locale) {
|
||||
return convertRolloutGroupStatusToString(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<RolloutGroupStatus> getModelType() {
|
||||
return RolloutGroupStatus.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,29 +94,27 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid {
|
||||
null, false, true);
|
||||
rolloutGroupTargetGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false,
|
||||
true);
|
||||
rolloutGroupTargetGridContainer.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER,
|
||||
String.class, "", false, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setColumnExpandRatio() {
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(20);
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(250);
|
||||
getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(280);
|
||||
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(50);
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(100);
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(80);
|
||||
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(150);
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMinimumWidth(50);
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(180);
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMinimumWidth(30);
|
||||
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(150);
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(180);
|
||||
getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMinimumWidth(50);
|
||||
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(150);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMinimumWidth(20);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(180);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMinimumWidth(30);
|
||||
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(150);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMinimumWidth(20);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(180);
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMinimumWidth(50);
|
||||
|
||||
setFrozenColumnCount(getColumns().size());
|
||||
|
||||
@@ -131,8 +129,6 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid {
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate"));
|
||||
getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy"));
|
||||
getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description"));
|
||||
getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHeaderCaption(i18n.get("header.assigned.ds"));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -154,6 +150,23 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid {
|
||||
alignColumns();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addColumnRenderes() {
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new StatusConverter());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setHiddenColumns() {
|
||||
/**
|
||||
* No hidden columns.
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CellDescriptionGenerator getDescriptionGenerator() {
|
||||
return cell -> getDescription(cell);
|
||||
};
|
||||
|
||||
private void alignColumns() {
|
||||
setCellStyleGenerator(new CellStyleGenerator() {
|
||||
private static final long serialVersionUID = 5573570647129792429L;
|
||||
@@ -168,88 +181,81 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addColumnRenderes() {
|
||||
addStatusCoulmn();
|
||||
/**
|
||||
*
|
||||
* Converts {@link Status} into string with status icon details.
|
||||
*
|
||||
*/
|
||||
private class StatusConverter implements Converter<String, Status> {
|
||||
private static final long serialVersionUID = -7467206089699548808L;
|
||||
|
||||
@Override
|
||||
public Status convertToModel(final String value, final Class<? extends Status> targetType,
|
||||
final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final Status status, final Class<? extends String> targetType,
|
||||
final Locale locale) {
|
||||
if (status == null) {
|
||||
// Actions are not created for targets when
|
||||
// rollout's status
|
||||
// is READY and when duplicate assignment is done.
|
||||
// In these cases display a appropriate status with
|
||||
// description
|
||||
return getStatus();
|
||||
} else {
|
||||
return processActionStatus(status);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<Status> getModelType() {
|
||||
return Status.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setHiddenColumns() {
|
||||
getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHidden(true);
|
||||
}
|
||||
|
||||
private void addStatusCoulmn() {
|
||||
getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(),
|
||||
new Converter<String, Status>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Status convertToModel(final String value, final Class<? extends Status> targetType,
|
||||
final Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToPresentation(final Status status, final Class<? extends String> targetType,
|
||||
final Locale locale) {
|
||||
String result = null;
|
||||
if (status == null) {
|
||||
// Actions are not created for targets when
|
||||
// rollout's status
|
||||
// is READY and when duplicate assignment is done.
|
||||
// In these cases display a appropriate status with
|
||||
// description
|
||||
return getStatus();
|
||||
} else {
|
||||
switch (status) {
|
||||
case FINISHED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen",
|
||||
null);
|
||||
break;
|
||||
case SCHEDULED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue", null);
|
||||
break;
|
||||
case RUNNING:
|
||||
case RETRIEVED:
|
||||
case WARNING:
|
||||
case DOWNLOAD:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", null);
|
||||
break;
|
||||
case CANCELING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconPending",
|
||||
null);
|
||||
break;
|
||||
case CANCELED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconGreen",
|
||||
null);
|
||||
break;
|
||||
case ERROR:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()),
|
||||
"statusIconRed", null);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<Status> getModelType() {
|
||||
return Status.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<String> getPresentationType() {
|
||||
return String.class;
|
||||
}
|
||||
});
|
||||
private String processActionStatus(final Status status) {
|
||||
String result = null;
|
||||
switch (status) {
|
||||
case FINISHED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", null);
|
||||
break;
|
||||
case SCHEDULED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.HOURGLASS_1.getCodepoint()), "statusIconPending", null);
|
||||
break;
|
||||
case RUNNING:
|
||||
case RETRIEVED:
|
||||
case WARNING:
|
||||
case DOWNLOAD:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", null);
|
||||
break;
|
||||
case CANCELING:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconPending", null);
|
||||
break;
|
||||
case CANCELED:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconGreen", null);
|
||||
break;
|
||||
case ERROR:
|
||||
result = HawkbitCommonUtil.getStatusLabelDetailsInString(
|
||||
Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", null);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private String getStatus() {
|
||||
@@ -267,30 +273,29 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CellDescriptionGenerator getDescriptionGenerator() {
|
||||
return cell -> getDescription(cell);
|
||||
};
|
||||
|
||||
private String getDescription(CellReference cell) {
|
||||
if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) {
|
||||
if (null != cell.getProperty().getValue()) {
|
||||
return cell.getProperty().getValue().toString().toLowerCase();
|
||||
|
||||
} else {
|
||||
final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent()
|
||||
? rolloutUIState.getRolloutGroup().get() : null;
|
||||
if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) {
|
||||
return RolloutGroupStatus.READY.toString().toLowerCase();
|
||||
} else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) {
|
||||
String ds = rolloutUIState.getRolloutDistributionSet().isPresent()
|
||||
? rolloutUIState.getRolloutDistributionSet().get() : "";
|
||||
return i18n.get("message.dist.already.assigned", new Object[] { ds });
|
||||
} else {
|
||||
return "unknown";
|
||||
}
|
||||
return getDescriptionWhenNoAction();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getDescriptionWhenNoAction() {
|
||||
final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent()
|
||||
? rolloutUIState.getRolloutGroup().get() : null;
|
||||
if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) {
|
||||
return RolloutGroupStatus.READY.toString().toLowerCase();
|
||||
} else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) {
|
||||
String ds = rolloutUIState.getRolloutDistributionSet().isPresent()
|
||||
? rolloutUIState.getRolloutDistributionSet().get() : "";
|
||||
return i18n.get("message.dist.already.assigned", new Object[] { ds });
|
||||
} else {
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,6 +248,17 @@ public final class SPUIStyleDefinitions {
|
||||
* Target filter search progress indicator style.
|
||||
*/
|
||||
public static final String TARGET_FILTER_SEARCH_PROGRESS_INDICATOR_STYLE = "target-filter-spinner";
|
||||
|
||||
|
||||
public static final String STATUS_ICON_RED = "statusIconRed";
|
||||
public static final String STATUS_ICON_GREEN = "statusIconGreen";
|
||||
public static final String STATUS_ICON_BLUE = "statusIconBlue";
|
||||
public static final String STATUS_SPINNER_YELLOW = "yellowSpinner";
|
||||
public static final String STATUS_ICON_LIGHT_BLUE = "statusIconLightBlue";
|
||||
public static final String STATUS_SPINNER_GREY = "greySpinner";
|
||||
public static final String STATUS_SPINNER_BLUE = "blueSpinner";
|
||||
public static final String STATUS_ICON_LIGHT_YELLOW = "statusIconYellow";
|
||||
public static final String STATUS_ICON_PENDING = "statusIconPending";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
||||
@@ -50,16 +50,4 @@
|
||||
|
||||
}
|
||||
|
||||
&.alump-dbar-tooltip {
|
||||
background-color: rgba(27, 54, 73, 0.9);
|
||||
border-radius: 3px;
|
||||
color: white;
|
||||
z-index: 100;
|
||||
padding: 3px;
|
||||
font-size: 10px;
|
||||
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user