/*
* 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.ctl;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ValueListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.kaaproject.avro.ui.gwt.client.widget.ActionsButton;
import org.kaaproject.avro.ui.gwt.client.widget.AvroWidgetsConfig;
import org.kaaproject.avro.ui.gwt.client.widget.SizedTextBox;
import org.kaaproject.avro.ui.shared.RecordField;
import org.kaaproject.kaa.server.admin.client.mvp.view.CtlSchemaView;
import org.kaaproject.kaa.server.admin.client.mvp.view.base.BaseDetailsViewImpl;
import org.kaaproject.kaa.server.admin.client.mvp.view.widget.IntegerListBox;
import org.kaaproject.kaa.server.admin.client.mvp.view.widget.KaaAdminSizedTextBox;
import org.kaaproject.kaa.server.admin.client.mvp.view.widget.RecordPanel;
import org.kaaproject.kaa.server.admin.client.util.Utils;
public class CtlSchemaViewImpl extends BaseDetailsViewImpl implements CtlSchemaView,
ValueChangeHandler<RecordField> {
private Label scope;
private IntegerListBox version;
private Button createNewSchemaVersionButton;
private Button updateSchemaScopeButton;
private Button deleteSchemaVersionButton;
private ActionsButton exportActionsButton;
private SizedTextBox createdUsername;
private SizedTextBox createdDateTime;
private RecordPanel schemaForm;
private Widget backButtonPanelWidget;
private Button backButtonWidget;
private Label titleLabelWidget;
private Button saveButtonWidget;
private Button cancelButtonWidget;
public CtlSchemaViewImpl(boolean create, boolean editable) {
super(create, editable);
}
@Override
protected String getCreateTitle() {
return Utils.constants.addNewCtl();
}
@Override
protected String getViewTitle() {
return Utils.constants.commonType();
}
@Override
protected String getSubTitle() {
return Utils.constants.commonTypeDetails();
}
@Override
protected Widget getBackButtonPanelWidget() {
return backButtonPanelWidget;
}
@Override
protected Button getBackButtonWidget() {
return backButtonWidget;
}
@Override
protected Label getTitileLabelWidget() {
return titleLabelWidget;
}
@Override
protected Button getSaveButtonWidget() {
return saveButtonWidget;
}
@Override
protected Button getCancelButtonWidget() {
return cancelButtonWidget;
}
@Override
protected void constructTopPanel() {
FlexTable flexTable = new FlexTable();
flexTable.setCellSpacing(0);
flexTable.setCellPadding(0);
flexTable.setHeight("100%");
topPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
topPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
topPanel.add(flexTable);
topPanel.setCellHeight(flexTable, "100%");
HorizontalPanel backButtonPanel = new HorizontalPanel();
backButtonPanel.setHeight("100%");
backButtonPanel.addStyleName(Utils.kaaAdminStyle.bAppPaddedPanel());
backButtonPanel.setVisible(false);
flexTable.setWidget(0, 0, backButtonPanel);
flexTable.getFlexCellFormatter().setVerticalAlignment(0, 0, HasVerticalAlignment.ALIGN_MIDDLE);
backButtonPanelWidget = backButtonPanel;
Button backButton = new Button();
backButton.addStyleName(Utils.kaaAdminStyle.bAppBackButton());
backButtonPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
backButtonPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
backButtonPanel.add(backButton);
backButtonPanel.setCellHeight(backButton, "100%");
backButtonWidget = backButton;
VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.setHeight("100%");
flexTable.setWidget(0, 1, verticalPanel);
flexTable.getFlexCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_MIDDLE);
HorizontalPanel firstRowPanel = new HorizontalPanel();
firstRowPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
firstRowPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
verticalPanel.add(firstRowPanel);
HorizontalPanel secondRowPanel = new HorizontalPanel();
secondRowPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
secondRowPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
if (!create) {
backButton.getElement().getStyle().setPaddingTop(25, Unit.PX);
backButton.getElement().getStyle().setPaddingBottom(25, Unit.PX);
firstRowPanel.setHeight("45px");
firstRowPanel.getElement().getStyle().setPaddingBottom(5, Unit.PX);
secondRowPanel.setHeight("45px");
topPanel.setHeight("105px");
topPanel.getElement().getStyle().setPaddingTop(10, Unit.PX);
updateNorthSize(185);
} else {
firstRowPanel.setHeight("70px");
secondRowPanel.setHeight("100%");
topPanel.setHeight("80px");
updateNorthSize(175);
}
verticalPanel.add(secondRowPanel);
Label titleLabel = new Label();
titleLabel.addStyleName(Utils.kaaAdminStyle.bAppContentTitle());
firstRowPanel.add(titleLabel);
firstRowPanel.setCellHeight(titleLabel, "100%");
titleLabelWidget = titleLabel;
scope = new Label();
scope.getElement().getStyle().setFontSize(16, Unit.PX);
scope.getElement().getStyle().setFontWeight(FontWeight.NORMAL);
int horizontalMargin = 15;
scope.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
firstRowPanel.add(scope);
firstRowPanel.setCellHeight(scope, "100%");
updateSchemaScopeButton = new Button(Utils.constants.promote());
updateSchemaScopeButton.setVisible(!create && editable);
updateSchemaScopeButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (hasUpdateScopeOption()) {
firstRowPanel.add(updateSchemaScopeButton);
firstRowPanel.setCellHeight(updateSchemaScopeButton, "100%");
}
Label versionLabel = new Label(Utils.constants.version());
versionLabel.addStyleName(Utils.kaaAdminStyle.bAppContentTitle());
versionLabel.getElement().getStyle().setFontSize(16, Unit.PX);
versionLabel.getElement().getStyle().setFontWeight(FontWeight.NORMAL);
version = new IntegerListBox();
version.getElement().getStyle().setPadding(5, Unit.PX);
version.getElement().getStyle().setMarginLeft(10, Unit.PX);
HorizontalPanel versionPanel = new HorizontalPanel();
versionPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
versionPanel.add(versionLabel);
versionPanel.add(version);
versionPanel.setVisible(!create);
secondRowPanel.add(versionPanel);
secondRowPanel.setCellHeight(versionPanel, "100%");
createNewSchemaVersionButton = new Button(Utils.constants.createNewVersion());
createNewSchemaVersionButton.setVisible(!create && editable);
createNewSchemaVersionButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (!create && editable) {
secondRowPanel.add(createNewSchemaVersionButton);
secondRowPanel.setCellHeight(createNewSchemaVersionButton, "100%");
}
exportActionsButton = new ActionsButton(Utils.resources.export(), Utils.constants.export());
exportActionsButton.setVisible(!create);
exportActionsButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (!create) {
secondRowPanel.add(exportActionsButton);
secondRowPanel.setCellHeight(exportActionsButton, "100%");
}
Button saveButton = new Button();
saveButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (create) {
firstRowPanel.add(saveButton);
firstRowPanel.setCellHeight(saveButton, "100%");
}
saveButtonWidget = saveButton;
Button cancelButton = new Button();
cancelButton.setVisible(false);
cancelButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (create) {
firstRowPanel.add(cancelButton);
firstRowPanel.setCellHeight(cancelButton, "100%");
}
cancelButtonWidget = cancelButton;
deleteSchemaVersionButton = new Button(Utils.constants.delete());
deleteSchemaVersionButton.addStyleName(Utils.kaaAdminStyle.deleteButton());
deleteSchemaVersionButton.setVisible(!create && editable);
deleteSchemaVersionButton.getElement().getStyle().setMarginLeft(horizontalMargin, Unit.PX);
if (!create && editable) {
secondRowPanel.add(deleteSchemaVersionButton);
secondRowPanel.setCellHeight(deleteSchemaVersionButton, "100%");
}
}
@Override
protected void initDetailsTable() {
if (create) {
requiredFieldsNoteLabel.setVisible(true);
} else {
requiredFieldsNoteLabel.setVisible(false);
requiredFieldsNoteLabel.getElement().getParentElement().getStyle().setHeight(0, Unit.PX);
}
Label authorLabel = new Label(Utils.constants.author());
createdUsername = new KaaAdminSizedTextBox(-1, false);
createdUsername.setWidth("100%");
detailsTable.setWidget(0, 0, authorLabel);
detailsTable.setWidget(0, 1, createdUsername);
authorLabel.setVisible(!create);
createdUsername.setVisible(!create);
Label dateTimeCreatedLabel = new Label(Utils.constants.dateTimeCreated());
createdDateTime = new KaaAdminSizedTextBox(-1, false);
createdDateTime.setWidth("100%");
detailsTable.setWidget(1, 0, dateTimeCreatedLabel);
detailsTable.setWidget(1, 1, createdDateTime);
dateTimeCreatedLabel.setVisible(!create);
createdDateTime.setVisible(!create);
getFooter().addStyleName(Utils.kaaAdminStyle.bAppContentDetailsTable());
schemaForm = new RecordPanel(new AvroWidgetsConfig.Builder()
.recordPanelWidth(900).createConfig(), false,
null, this, !create, !create);
if (create) {
schemaForm.addValueChangeHandler(this);
}
getFooter().setWidth("1000px");
getFooter().add(schemaForm);
}
protected boolean hasUpdateScopeOption() {
return false;
}
@Override
protected void resetImpl() {
version.reset();
createdUsername.setValue("");
createdDateTime.setValue("");
schemaForm.reset();
}
@Override
public ValueListBox<Integer> getVersion() {
return version;
}
@Override
protected boolean validate() {
boolean result = !create || schemaForm.validate();
return result;
}
@Override
public void onValueChange(ValueChangeEvent<RecordField> event) {
fireChanged();
}
@Override
public RecordPanel getSchemaForm() {
return schemaForm;
}
@Override
public HasValue<String> getCreatedUsername() {
return createdUsername;
}
@Override
public HasValue<String> getCreatedDateTime() {
return createdDateTime;
}
@Override
public HasClickHandlers getCreateNewSchemaVersionButton() {
return createNewSchemaVersionButton;
}
@Override
public HasClickHandlers getUpdateSchemaScopeButton() {
return updateSchemaScopeButton;
}
@Override
public HasClickHandlers getDeleteSchemaVersionButton() {
return deleteSchemaVersionButton;
}
@Override
public ActionsButton getExportActionsButton() {
return exportActionsButton;
}
@Override
public Label getScope() {
return scope;
}
}