package org.dashbuilder.client.widgets.dataset.editor.attributes; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import org.dashbuilder.dataset.client.resources.i18n.DateIntervalTypeConstants; import org.dashbuilder.dataset.date.TimeAmount; import org.dashbuilder.dataset.group.DateIntervalType; import org.gwtbootstrap3.client.ui.constants.Placement; import org.uberfire.client.mvp.UberView; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; import javax.inject.Inject; import java.util.Arrays; import java.util.List; /** * <p>Provides an editor for a the refreshInterval data set definition attribute..</p> * * @since 0.4.0 */ @Dependent public class DataSetDefRefreshIntervalEditor implements IsWidget, org.dashbuilder.dataset.client.editor.DataSetDefRefreshIntervalEditor { private static final DateIntervalType DEFAULT_INTERVAL_TYPE = DateIntervalType.HOUR; private static List<DateIntervalType> ALLOWED_TYPES = Arrays.asList( DateIntervalType.SECOND, DateIntervalType.MINUTE, DateIntervalType.HOUR, DateIntervalType.DAY, DateIntervalType.MONTH, DateIntervalType.YEAR); public interface View extends UberView<DataSetDefRefreshIntervalEditor> { View addHelpContent(final String title, final String content, final Placement placement); View addIntervalTypeItem(String item); View setSelectedIntervalType(int index); int getSelectedIntervalTypeIndex(); View setQuantity(double value); double getQuantity(); View setEnabled(boolean enabled); } Event<org.dashbuilder.common.client.event.ValueChangeEvent<String>> valueChangeEvent; public View view; @Inject public DataSetDefRefreshIntervalEditor(final View view, final Event<org.dashbuilder.common.client.event.ValueChangeEvent<String>> valueChangeEvent) { this.view = view; this.valueChangeEvent = valueChangeEvent; } @PostConstruct public void init() { view.init(this); // List box for available date interval types. for (final DateIntervalType dateInterval : ALLOWED_TYPES) { final String s = DateIntervalTypeConstants.INSTANCE.getString(dateInterval.name()); view.addIntervalTypeItem(s); } } @Override public Widget asWidget() { return view.asWidget(); } public void addHelpContent(final String title, final String content, final Placement placement) { view.addHelpContent(title, content, placement); } @Override public void setEnabled(final boolean isEnabled) { view.setEnabled(isEnabled); } @Override public void setValue(final String value) { double quantity = 1; int index = -1; if (value != null) { final TimeAmount timeAmount = TimeAmount.parse(value); quantity = timeAmount.getQuantity(); final DateIntervalType dType = timeAmount.getType(); index = getIntervalTypeIndex(dType); } view.setQuantity(quantity); view.setSelectedIntervalType(index > -1 ? index : getIntervalTypeIndex(DEFAULT_INTERVAL_TYPE)); } @Override public String getValue() { final Double quantity = view.getQuantity(); final DateIntervalType type = getSelectedIntervalType(); return new TimeAmount(quantity.longValue(), type).toString(); } private DateIntervalType getSelectedIntervalType() { return ALLOWED_TYPES.get(view.getSelectedIntervalTypeIndex()); } private int getIntervalTypeIndex(DateIntervalType type) { for (int i=0; i<ALLOWED_TYPES.size(); i++) { if (ALLOWED_TYPES.get(i).equals(type)) { return i; } } return 0; } }