/* * Copyright 2014-2016 CyberVision, 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.kaaproject.kaa.server.admin.client.mvp.view.appender; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HasValue; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ValueListBox; import com.watopi.chosen.client.event.ChosenChangeEvent; import com.watopi.chosen.client.event.ChosenChangeEvent.ChosenChangeHandler; import com.watopi.chosen.client.gwt.ChosenListBox; import org.kaaproject.kaa.common.dto.logs.LogHeaderStructureDto; import org.kaaproject.kaa.server.admin.client.mvp.view.LogAppenderView; import org.kaaproject.kaa.server.admin.client.mvp.view.plugin.BasePluginViewImpl; import org.kaaproject.kaa.server.admin.client.mvp.view.widget.IntegerListBox; import org.kaaproject.kaa.server.admin.client.util.Utils; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class LogAppenderViewImpl extends BasePluginViewImpl implements LogAppenderView, ChosenChangeHandler { private static final String REQUIRED = Utils.avroUiStyle.requiredField(); private IntegerListBox minSchemaVersion; private IntegerListBox maxSchemaVersion; private CheckBox confirmDelivery; private ChosenListBox metadatalistBox; private List<Integer> schemaVersions; public LogAppenderViewImpl(boolean create) { super(create); } @Override protected int initPluginDetails(int idx) { Label minSchemaVersionLabel = new Label(Utils.constants.minSchemaVersion()); minSchemaVersionLabel.addStyleName(REQUIRED); minSchemaVersion = new IntegerListBox(); minSchemaVersion.setWidth("30%"); minSchemaVersion.addValueChangeHandler(new ValueChangeHandler<Integer>() { @Override public void onValueChange(ValueChangeEvent<Integer> event) { updateMaxSchemaVersions(); fireChanged(); } }); idx++; detailsTable.setWidget(idx, 0, minSchemaVersionLabel); detailsTable.setWidget(idx, 1, minSchemaVersion); Label maxSchemaVersionLabel = new Label(Utils.constants.maxVersion()); maxSchemaVersionLabel.addStyleName(REQUIRED); maxSchemaVersion = new IntegerListBox(); maxSchemaVersion.setWidth("30%"); maxSchemaVersion.addValueChangeHandler(new ValueChangeHandler<Integer>() { @Override public void onValueChange(ValueChangeEvent<Integer> event) { fireChanged(); } }); idx++; detailsTable.setWidget(idx, 0, maxSchemaVersionLabel); detailsTable.setWidget(idx, 1, maxSchemaVersion); confirmDelivery = new CheckBox(); confirmDelivery.setWidth("100%"); Label confirmDeliveryLabel = new Label(Utils.constants.confirmDelivery()); idx++; detailsTable.setWidget(idx, 0, confirmDeliveryLabel); detailsTable.setWidget(idx, 1, confirmDelivery); confirmDelivery.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { fireChanged(); } }); Label logMetadata = new Label(Utils.constants.logMetadata()); generateMetadataListBox(); idx++; detailsTable.setWidget(idx, 0, logMetadata); detailsTable.setWidget(idx, 1, metadatalistBox); return idx; } @Override protected String getCreateTitle() { return Utils.constants.addLogAppender(); } @Override protected String getViewTitle() { return Utils.constants.logAppender(); } @Override protected String getSubTitle() { return Utils.constants.logAppenderDetails(); } @Override public HasValue<Boolean> getConfirmDelivery() { return confirmDelivery; } @Override protected void resetImpl() { super.resetImpl(); minSchemaVersion.reset(); maxSchemaVersion.reset(); confirmDelivery.setValue(true); if (metadatalistBox != null) { generateMetadataListBox(); } } @Override protected boolean validate() { boolean result = super.validate(); result &= minSchemaVersion.getValue() != null; result &= maxSchemaVersion.getValue() != null; return result; } @Override public ValueListBox<Integer> getMinSchemaVersion() { return minSchemaVersion; } @Override public ValueListBox<Integer> getMaxSchemaVersion() { return maxSchemaVersion; } private void generateMetadataListBox() { if (metadatalistBox != null) { metadatalistBox.clear(); } else { metadatalistBox = new ChosenListBox(true); metadatalistBox.addChosenChangeHandler(this); } metadatalistBox.setPixelSize(300, 30); metadatalistBox.setPlaceholderText("Select metadata components"); for (LogHeaderStructureDto headerDto : LogHeaderStructureDto.values()) { metadatalistBox.addItem(headerDto.getValue()); } } /** * Set metadata list box. * * @param header the log header structure */ public void setMetadataListBox(List<LogHeaderStructureDto> header) { if (header != null) { for (LogHeaderStructureDto field : header) { metadatalistBox.setSelectedValue(field.getValue()); } } } /** * Get header. * * @return the log header structure */ public List<LogHeaderStructureDto> getHeader() { List<LogHeaderStructureDto> header = Collections.emptyList(); if (metadatalistBox != null) { String[] selected = metadatalistBox.getValues(); if (selected != null && selected.length != 0) { header = new ArrayList<>(); for (String field : selected) { for (LogHeaderStructureDto value : LogHeaderStructureDto.values()) { if (value.getValue().equalsIgnoreCase(field)) { header.add(value); continue; } } } } } return header; } private void updateMaxSchemaVersions() { if (schemaVersions != null) { Integer minVersionValue = minSchemaVersion.getValue(); List<Integer> maxSchemaVersions = null; Integer maxVersionValue = maxSchemaVersion.getValue(); if (minVersionValue != null) { maxSchemaVersions = new ArrayList<>(); for (Integer version : schemaVersions) { if (version >= minVersionValue) { maxSchemaVersions.add(version); } } if (maxVersionValue != null && maxVersionValue < minVersionValue) { maxVersionValue = minVersionValue; } } else { maxSchemaVersions = new ArrayList<>(schemaVersions); } maxSchemaVersions.add(Integer.MAX_VALUE); if (maxVersionValue == null) { maxVersionValue = Integer.MAX_VALUE; } maxSchemaVersion.setValue(maxVersionValue); maxSchemaVersion.setAcceptableValues(maxSchemaVersions); } } @Override public void setSchemaVersions(List<Integer> schemaVersions) { this.schemaVersions = schemaVersions; if (minSchemaVersion.getValue() == null && !schemaVersions.isEmpty()) { minSchemaVersion.setValue(schemaVersions.get(0)); } minSchemaVersion.setAcceptableValues(schemaVersions); updateMaxSchemaVersions(); } @Override public void onChange(ChosenChangeEvent event) { fireChanged(); } }