/*******************************************************************************
* Copyright (c) 2011, 2016 Eurotech and/or its affiliates
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eurotech
*******************************************************************************/
package org.eclipse.kura.web.client.ui.Firewall;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.kura.web.client.messages.Messages;
import org.eclipse.kura.web.client.ui.EntryClassUi;
import org.eclipse.kura.web.client.ui.Tab;
import org.eclipse.kura.web.client.util.FailureHandler;
import org.eclipse.kura.web.client.util.TextFieldValidator.FieldType;
import org.eclipse.kura.web.shared.model.GwtFirewallNatMasquerade;
import org.eclipse.kura.web.shared.model.GwtFirewallPortForwardEntry;
import org.eclipse.kura.web.shared.model.GwtNetProtocol;
import org.eclipse.kura.web.shared.model.GwtXSRFToken;
import org.eclipse.kura.web.shared.service.GwtNetworkService;
import org.eclipse.kura.web.shared.service.GwtNetworkServiceAsync;
import org.eclipse.kura.web.shared.service.GwtSecurityTokenService;
import org.eclipse.kura.web.shared.service.GwtSecurityTokenServiceAsync;
import org.gwtbootstrap3.client.shared.event.ModalHideEvent;
import org.gwtbootstrap3.client.shared.event.ModalHideHandler;
import org.gwtbootstrap3.client.ui.Alert;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.FormGroup;
import org.gwtbootstrap3.client.ui.FormLabel;
import org.gwtbootstrap3.client.ui.ListBox;
import org.gwtbootstrap3.client.ui.Modal;
import org.gwtbootstrap3.client.ui.ModalBody;
import org.gwtbootstrap3.client.ui.ModalFooter;
import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.Tooltip;
import org.gwtbootstrap3.client.ui.constants.ValidationState;
import org.gwtbootstrap3.client.ui.gwt.CellTable;
import org.gwtbootstrap3.client.ui.html.Span;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SingleSelectionModel;
public class PortForwardingTabUi extends Composite implements Tab {
private static PortForwardingTabUiUiBinder uiBinder = GWT.create(PortForwardingTabUiUiBinder.class);
interface PortForwardingTabUiUiBinder extends UiBinder<Widget, PortForwardingTabUi> {
}
private static final Messages MSGS = GWT.create(Messages.class);
private final GwtSecurityTokenServiceAsync gwtXSRFService = GWT.create(GwtSecurityTokenService.class);
private final GwtNetworkServiceAsync gwtNetworkService = GWT.create(GwtNetworkService.class);
private final ListDataProvider<GwtFirewallPortForwardEntry> portForwardDataProvider = new ListDataProvider<GwtFirewallPortForwardEntry>();
final SingleSelectionModel<GwtFirewallPortForwardEntry> selectionModel = new SingleSelectionModel<GwtFirewallPortForwardEntry>();
private GwtFirewallPortForwardEntry newPortForwardEntry;
private GwtFirewallPortForwardEntry editPortForwardEntry;
private boolean m_dirty;
@UiField
Button apply, create, edit, delete;
@UiField
Alert notification;
@UiField
CellTable<GwtFirewallPortForwardEntry> portForwardGrid = new CellTable<GwtFirewallPortForwardEntry>();
@UiField
Modal confirm;
@UiField
ModalBody confirmBody;
@UiField
ModalFooter confirmFooter;
@UiField
Modal alert;
@UiField
Span alertBody;
@UiField
Button yes, no;
@UiField
Modal portForwardingForm;
@UiField
FormLabel labelInput, labelOutput, labelLan, labelProtocol, labelExternal, labelInternal, labelEnable,
labelPermitttedNw, labelPermitttedMac, labelSource;
@UiField
FormGroup groupInput, groupOutput, groupLan, groupExternal, groupInternal, groupPermittedNw, groupPermittedMac,
groupSource;
@UiField
Tooltip tooltipInput, tooltipOutput, tooltipLan, tooltipProtocol, tooltipExternal, tooltipInternal, tooltipEnable,
tooltipPermittedNw, tooltipPermittedMac, tooltipSource;
@UiField
TextBox input, output, lan, external, internal, permittedNw, permittedMac, source;
@UiField
ListBox protocol, enable;
@UiField
Button submit, cancel;
public PortForwardingTabUi() {
initWidget(uiBinder.createAndBindUi(this));
initButtons();
initTable();
initModal();
}
//
// Public methods
//
@Override
public void refresh() {
EntryClassUi.showWaitModal();
this.portForwardDataProvider.getList().clear();
this.notification.setVisible(false);
this.gwtXSRFService.generateSecurityToken(new AsyncCallback<GwtXSRFToken>() {
@Override
public void onFailure(Throwable ex) {
EntryClassUi.hideWaitModal();
FailureHandler.handle(ex);
}
@Override
public void onSuccess(GwtXSRFToken token) {
PortForwardingTabUi.this.gwtNetworkService.findDeviceFirewallPortForwards(token,
new AsyncCallback<List<GwtFirewallPortForwardEntry>>() {
@Override
public void onFailure(Throwable caught) {
EntryClassUi.hideWaitModal();
FailureHandler.handle(caught);
}
@Override
public void onSuccess(List<GwtFirewallPortForwardEntry> result) {
for (GwtFirewallPortForwardEntry pair : result) {
PortForwardingTabUi.this.portForwardDataProvider.getList().add(pair);
}
refreshTable();
PortForwardingTabUi.this.apply.setEnabled(false);
EntryClassUi.hideWaitModal();
}
});
}
});
}
@Override
public boolean isDirty() {
return this.m_dirty;
}
@Override
public void setDirty(boolean b) {
this.m_dirty = b;
}
@Override
public boolean isValid() {
return true;
}
//
// Private methods
//
private void initTable() {
TextColumn<GwtFirewallPortForwardEntry> col1 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getInboundInterface() != null) {
return String.valueOf(object.getInboundInterface());
} else {
return "";
}
}
};
col1.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col1, MSGS.firewallPortForwardInboundInterface());
TextColumn<GwtFirewallPortForwardEntry> col2 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getOutboundInterface() != null) {
return String.valueOf(object.getOutboundInterface());
} else {
return "";
}
}
};
col2.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col2, MSGS.firewallPortForwardOutboundInterface());
TextColumn<GwtFirewallPortForwardEntry> col3 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getAddress() != null) {
return String.valueOf(object.getAddress());
} else {
return "";
}
}
};
col3.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col3, MSGS.firewallPortForwardAddress());
TextColumn<GwtFirewallPortForwardEntry> col4 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getProtocol() != null) {
return String.valueOf(object.getProtocol());
} else {
return "";
}
}
};
col4.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col4, MSGS.firewallPortForwardProtocol());
TextColumn<GwtFirewallPortForwardEntry> col5 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getInPort() != null) {
return String.valueOf(object.getInPort());
} else {
return "";
}
}
};
col5.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col5, MSGS.firewallPortForwardInPort());
TextColumn<GwtFirewallPortForwardEntry> col6 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getOutPort() != null) {
return String.valueOf(object.getOutPort());
} else {
return "";
}
}
};
col6.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col6, MSGS.firewallPortForwardOutPort());
TextColumn<GwtFirewallPortForwardEntry> col7 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getMasquerade() != null) {
return String.valueOf(object.getMasquerade());
} else {
return "";
}
}
};
col7.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col7, MSGS.firewallPortForwardMasquerade());
TextColumn<GwtFirewallPortForwardEntry> col8 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getPermittedNetwork() != null) {
return String.valueOf(object.getPermittedNetwork());
} else {
return "";
}
}
};
col8.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col8, MSGS.firewallPortForwardPermittedNetwork());
TextColumn<GwtFirewallPortForwardEntry> col9 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getPermittedMAC() != null) {
return String.valueOf(object.getPermittedMAC());
} else {
return "";
}
}
};
col9.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col9, MSGS.firewallPortForwardPermittedMac());
TextColumn<GwtFirewallPortForwardEntry> col10 = new TextColumn<GwtFirewallPortForwardEntry>() {
@Override
public String getValue(GwtFirewallPortForwardEntry object) {
if (object.getSourcePortRange() != null) {
return String.valueOf(object.getSourcePortRange());
} else {
return "";
}
}
};
col10.setCellStyleNames("status-table-row");
this.portForwardGrid.addColumn(col10, MSGS.firewallPortForwardSourcePortRange());
this.portForwardDataProvider.addDataDisplay(this.portForwardGrid);
this.portForwardGrid.setSelectionModel(this.selectionModel);
}
private void refreshTable() {
int size = this.portForwardDataProvider.getList().size();
this.portForwardGrid.setVisibleRange(0, size);
this.portForwardDataProvider.flush();
if (this.portForwardDataProvider.getList().isEmpty()) {
this.portForwardGrid.setVisible(false);
this.notification.setVisible(true);
this.notification.setText(MSGS.firewallPortForwardTableNoPorts());
} else {
this.portForwardGrid.setVisible(true);
this.notification.setVisible(false);
}
this.portForwardGrid.redraw();
}
// Initialize buttons
private void initButtons() {
initApplyButton();
initCreateButton();
initEditButton();
initDeleteButton();
}
private void initDeleteButton() {
this.delete.setText(MSGS.deleteButton());
this.delete.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GwtFirewallPortForwardEntry selection = PortForwardingTabUi.this.selectionModel.getSelectedObject();
if (selection != null) {
PortForwardingTabUi.this.alert.setTitle(MSGS.confirm());
PortForwardingTabUi.this.alertBody
.setText(MSGS.firewallOpenPortDeleteConfirmation(String.valueOf(selection.getInPort())));
PortForwardingTabUi.this.alert.show();
}
}
});
this.yes.setText(MSGS.yesButton());
this.no.setText(MSGS.noButton());
this.no.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
PortForwardingTabUi.this.alert.hide();
}
});
this.yes.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
PortForwardingTabUi.this.alert.hide();
PortForwardingTabUi.this.portForwardDataProvider.getList()
.remove(PortForwardingTabUi.this.selectionModel.getSelectedObject());
refreshTable();
PortForwardingTabUi.this.apply.setEnabled(true);
setDirty(true);
}
});
}
private void initEditButton() {
this.edit.setText(MSGS.editButton());
this.edit.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GwtFirewallPortForwardEntry selection = PortForwardingTabUi.this.selectionModel.getSelectedObject();
if (selection != null) {
showModal(selection);
}
}
});
this.portForwardingForm.addHideHandler(new ModalHideHandler() {
@Override
public void onHide(ModalHideEvent evt) {
if (PortForwardingTabUi.this.editPortForwardEntry != null) {
GwtFirewallPortForwardEntry oldEntry = PortForwardingTabUi.this.selectionModel.getSelectedObject();
PortForwardingTabUi.this.portForwardDataProvider.getList().remove(oldEntry);
if (!duplicateEntry(PortForwardingTabUi.this.editPortForwardEntry)) {
PortForwardingTabUi.this.portForwardDataProvider.getList()
.add(PortForwardingTabUi.this.editPortForwardEntry);
PortForwardingTabUi.this.portForwardDataProvider.flush();
PortForwardingTabUi.this.apply.setEnabled(true);
PortForwardingTabUi.this.editPortForwardEntry = null;
} else { // end duplicate
PortForwardingTabUi.this.portForwardDataProvider.getList().add(oldEntry);
PortForwardingTabUi.this.portForwardDataProvider.flush();
}
}
}
});
}
private void initCreateButton() {
this.create.setText(MSGS.newButton());
this.create.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showModal(null);
}
});
this.portForwardingForm.addHideHandler(new ModalHideHandler() {
@Override
public void onHide(ModalHideEvent evt) {
if (PortForwardingTabUi.this.newPortForwardEntry != null
&& !duplicateEntry(PortForwardingTabUi.this.newPortForwardEntry)) {
PortForwardingTabUi.this.portForwardDataProvider.getList()
.add(PortForwardingTabUi.this.newPortForwardEntry);
refreshTable();
PortForwardingTabUi.this.apply.setEnabled(true);
PortForwardingTabUi.this.newPortForwardEntry = null;
}
}
});
}
private void initApplyButton() {
this.apply.setText(MSGS.firewallApply());
this.apply.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
List<GwtFirewallPortForwardEntry> intermediateList = PortForwardingTabUi.this.portForwardDataProvider
.getList();
ArrayList<GwtFirewallPortForwardEntry> tempList = new ArrayList<GwtFirewallPortForwardEntry>();
final List<GwtFirewallPortForwardEntry> updatedPortForwardConf = tempList;
for (GwtFirewallPortForwardEntry entry : intermediateList) {
tempList.add(entry);
}
if (updatedPortForwardConf != null) {
EntryClassUi.showWaitModal();
PortForwardingTabUi.this.gwtXSRFService.generateSecurityToken(new AsyncCallback<GwtXSRFToken>() {
@Override
public void onFailure(Throwable ex) {
EntryClassUi.hideWaitModal();
FailureHandler.handle(ex);
}
@Override
public void onSuccess(GwtXSRFToken token) {
PortForwardingTabUi.this.gwtNetworkService.updateDeviceFirewallPortForwards(token,
updatedPortForwardConf, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable ex) {
FailureHandler.handle(ex);
EntryClassUi.hideWaitModal();
}
@Override
public void onSuccess(Void result) {
PortForwardingTabUi.this.apply.setEnabled(false);
EntryClassUi.hideWaitModal();
setDirty(false);
}
});
}
});
}
}
});
}
private void initModal() {
initMACConfirmModal();
// handle buttons
this.cancel.setText(MSGS.cancelButton());
this.cancel.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
PortForwardingTabUi.this.portForwardingForm.hide();
}
});
this.submit.setText(MSGS.submitButton());
this.submit.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
checkFieldsValues();
if (PortForwardingTabUi.this.groupInput.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupOutput.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupLan.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupInternal.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupExternal.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupPermittedNw.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupPermittedMac.getValidationState().equals(ValidationState.ERROR)
|| PortForwardingTabUi.this.groupSource.getValidationState().equals(ValidationState.ERROR)) {
return;
}
final GwtFirewallPortForwardEntry portForwardEntry = new GwtFirewallPortForwardEntry();
portForwardEntry.setInboundInterface(PortForwardingTabUi.this.input.getText());
portForwardEntry.setOutboundInterface(PortForwardingTabUi.this.output.getText());
portForwardEntry.setAddress(PortForwardingTabUi.this.lan.getText());
portForwardEntry.setProtocol(PortForwardingTabUi.this.protocol.getSelectedItemText());
if (PortForwardingTabUi.this.internal.getText() != null
&& !"".equals(PortForwardingTabUi.this.internal.getText().trim())) {
portForwardEntry.setInPort(Integer.parseInt(PortForwardingTabUi.this.internal.getText()));
}
if (PortForwardingTabUi.this.external.getText() != null
&& !"".equals(PortForwardingTabUi.this.external.getText().trim())) {
portForwardEntry.setOutPort(Integer.parseInt(PortForwardingTabUi.this.external.getText()));
}
portForwardEntry.setMasquerade(PortForwardingTabUi.this.enable.getSelectedItemText());
if (PortForwardingTabUi.this.permittedNw.getText() != null
&& !"".equals(PortForwardingTabUi.this.permittedNw.getText().trim())) {
portForwardEntry.setPermittedNetwork(PortForwardingTabUi.this.permittedNw.getText());
} else {
portForwardEntry.setPermittedNetwork("0.0.0.0/0");
}
if (PortForwardingTabUi.this.permittedMac.getText() != null
&& !"".equals(PortForwardingTabUi.this.permittedMac.getText().trim())) {
PortForwardingTabUi.this.confirmFooter.clear();
PortForwardingTabUi.this.confirmFooter.add(new Button(MSGS.okButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
portForwardEntry.setPermittedMAC(PortForwardingTabUi.this.permittedMac.getText());
PortForwardingTabUi.this.confirm.hide();
}
}));
PortForwardingTabUi.this.confirm.show();
}
if (PortForwardingTabUi.this.source.getText() != null
&& !"".equals(PortForwardingTabUi.this.source.getText().trim())) {
portForwardEntry.setSourcePortRange(PortForwardingTabUi.this.source.getText());
}
if (PortForwardingTabUi.this.submit.getId().equals("new")) {
PortForwardingTabUi.this.newPortForwardEntry = portForwardEntry;
PortForwardingTabUi.this.editPortForwardEntry = null;
} else if (PortForwardingTabUi.this.submit.getId().equals("edit")) {
PortForwardingTabUi.this.editPortForwardEntry = portForwardEntry;
PortForwardingTabUi.this.newPortForwardEntry = null;
}
setDirty(true);
PortForwardingTabUi.this.portForwardingForm.hide();
}
});// end submit click handler
}
private void showModal(final GwtFirewallPortForwardEntry existingEntry) {
if (existingEntry == null) {
// new
this.portForwardingForm.setTitle(MSGS.firewallPortForwardFormInformation());
} else {
// edit existing entry
this.portForwardingForm
.setTitle(MSGS.firewallPortForwardFormUpdate(String.valueOf(existingEntry.getInPort())));
}
setModalFieldsLabels();
setModalFieldsTooltips();
setModalFieldsValues(existingEntry);
setModalFieldsHandlers();
if (existingEntry == null) {
this.submit.setId("new");
} else {
this.submit.setId("edit");
}
this.portForwardingForm.show();
}// end initModal
private void initMACConfirmModal() {
this.confirm.setTitle(MSGS.firewallPortForwardFormNotification());
this.confirmBody.clear();
this.confirmBody.add(new Span(MSGS.firewallPortForwardFormNotificationMacFiltering()));
this.confirmFooter.clear();
}
private void setModalFieldsHandlers() {
// Set validations
this.input.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (PortForwardingTabUi.this.input.getText().trim().isEmpty() || !PortForwardingTabUi.this.input
.getText().trim().matches(FieldType.ALPHANUMERIC.getRegex())) {
PortForwardingTabUi.this.groupInput.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupInput.setValidationState(ValidationState.NONE);
}
}
});
this.output.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (PortForwardingTabUi.this.output.getText().trim().isEmpty() || !PortForwardingTabUi.this.output
.getText().trim().matches(FieldType.ALPHANUMERIC.getRegex())) {
PortForwardingTabUi.this.groupOutput.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupOutput.setValidationState(ValidationState.NONE);
}
}
});
this.lan.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (PortForwardingTabUi.this.lan.getText().trim().isEmpty()
|| !PortForwardingTabUi.this.lan.getText().trim().matches(FieldType.IPv4_ADDRESS.getRegex())) {
PortForwardingTabUi.this.groupLan.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupLan.setValidationState(ValidationState.NONE);
}
}
});
this.internal.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (PortForwardingTabUi.this.internal.getText().trim().isEmpty()
|| !PortForwardingTabUi.this.internal.getText().trim().matches(FieldType.NUMERIC.getRegex())) {
PortForwardingTabUi.this.groupInternal.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupInternal.setValidationState(ValidationState.NONE);
}
}
});
this.external.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (PortForwardingTabUi.this.external.getText().trim().isEmpty()
|| !PortForwardingTabUi.this.external.getText().trim().matches(FieldType.NUMERIC.getRegex())) {
PortForwardingTabUi.this.groupExternal.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupExternal.setValidationState(ValidationState.NONE);
}
}
});
this.permittedNw.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (!PortForwardingTabUi.this.permittedNw.getText().trim().isEmpty()
&& !PortForwardingTabUi.this.permittedNw.getText().trim()
.matches(FieldType.NETWORK.getRegex())) {
PortForwardingTabUi.this.groupPermittedNw.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupPermittedNw.setValidationState(ValidationState.NONE);
}
}
});
this.permittedMac.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (!PortForwardingTabUi.this.permittedMac.getText().trim().isEmpty()
&& !PortForwardingTabUi.this.permittedMac.getText().trim()
.matches(FieldType.MAC_ADDRESS.getRegex())) {
PortForwardingTabUi.this.groupPermittedMac.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupPermittedMac.setValidationState(ValidationState.NONE);
}
}
});
this.source.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (!PortForwardingTabUi.this.source.getText().trim().isEmpty()
&& !PortForwardingTabUi.this.source.getText().trim().matches(FieldType.PORT_RANGE.getRegex())) {
PortForwardingTabUi.this.groupSource.setValidationState(ValidationState.ERROR);
} else {
PortForwardingTabUi.this.groupSource.setValidationState(ValidationState.NONE);
}
}
});
}
private void setModalFieldsValues(final GwtFirewallPortForwardEntry existingEntry) {
// set ListBoxes
this.protocol.clear();
for (GwtNetProtocol prot : GwtNetProtocol.values()) {
this.protocol.addItem(prot.name());
}
this.enable.clear();
for (GwtFirewallNatMasquerade masquerade : GwtFirewallNatMasquerade.values()) {
this.enable.addItem(masquerade.name());
}
// populate Existing Values
if (existingEntry != null) {
this.input.setText(existingEntry.getInboundInterface());
this.output.setText(existingEntry.getOutboundInterface());
this.lan.setText(existingEntry.getAddress());
this.external.setText(String.valueOf(existingEntry.getOutPort()));
this.internal.setText(String.valueOf(existingEntry.getInPort()));
this.permittedNw.setText(existingEntry.getPermittedNetwork());
this.permittedMac.setText(existingEntry.getPermittedMAC());
this.source.setText(existingEntry.getSourcePortRange());
for (int i = 0; i < this.protocol.getItemCount(); i++) {
if (existingEntry.getProtocol().equals(this.protocol.getItemText(i))) {
this.protocol.setSelectedIndex(i);
break;
}
}
for (int i = 0; i < this.enable.getItemCount(); i++) {
if (existingEntry.getMasquerade().equals(this.enable.getItemText(i))) {
this.enable.setSelectedIndex(i);
break;
}
}
} else {
this.input.reset();
this.output.reset();
this.lan.reset();
this.external.reset();
this.internal.reset();
this.permittedNw.reset();
this.permittedMac.reset();
this.source.reset();
this.protocol.setSelectedIndex(0);
this.enable.setSelectedIndex(0);
}
}
private void setModalFieldsTooltips() {
// set Tooltips
this.tooltipInput.setTitle(MSGS.firewallPortForwardFormInboundInterfaceToolTip());
this.tooltipOutput.setTitle(MSGS.firewallPortForwardFormOutboundInterfaceToolTip());
this.tooltipLan.setTitle(MSGS.firewallPortForwardFormLanAddressToolTip());
this.tooltipProtocol.setTitle(MSGS.firewallPortForwardFormProtocolToolTip());
this.tooltipInternal.setTitle(MSGS.firewallPortForwardFormExternalPortToolTip());
this.tooltipExternal.setTitle(MSGS.firewallPortForwardFormInternalPortToolTip());
this.tooltipEnable.setTitle(MSGS.firewallPortForwardFormMasqueradingToolTip());
this.tooltipPermittedNw.setTitle(MSGS.firewallPortForwardFormPermittedNetworkToolTip());
this.tooltipPermittedMac.setTitle(MSGS.firewallPortForwardFormPermittedMacAddressToolTip());
this.tooltipSource.setTitle(MSGS.firewallPortForwardFormSourcePortRangeToolTip());
this.tooltipInput.reconfigure();
this.tooltipOutput.reconfigure();
this.tooltipLan.reconfigure();
this.tooltipProtocol.reconfigure();
this.tooltipExternal.reconfigure();
this.tooltipInternal.reconfigure();
this.tooltipEnable.reconfigure();
this.tooltipPermittedNw.reconfigure();
this.tooltipPermittedMac.reconfigure();
this.tooltipSource.reconfigure();
}
private void setModalFieldsLabels() {
// setLabels
this.labelInput.setText(MSGS.firewallPortForwardFormInboundInterface() + "*");
this.labelOutput.setText(MSGS.firewallPortForwardFormOutboundInterface() + "*");
this.labelLan.setText(MSGS.firewallPortForwardFormAddress() + "*");
this.labelProtocol.setText(MSGS.firewallPortForwardFormProtocol());
this.labelExternal.setText(MSGS.firewallPortForwardFormOutPort());
this.labelInternal.setText(MSGS.firewallPortForwardFormInPort());
this.labelEnable.setText(MSGS.firewallNatFormMasquerade());
this.labelPermitttedNw.setText(MSGS.firewallPortForwardFormPermittedNetwork());
this.labelPermitttedMac.setText(MSGS.firewallPortForwardFormPermittedMac());
this.labelSource.setText(MSGS.firewallPortForwardFormSourcePortRange());
}
private boolean duplicateEntry(GwtFirewallPortForwardEntry portForwardEntry) {
boolean isDuplicateEntry = false;
List<GwtFirewallPortForwardEntry> entries = this.portForwardDataProvider.getList();
if (entries != null && portForwardEntry != null) {
for (GwtFirewallPortForwardEntry entry : entries) {
if (entry.getInboundInterface().equals(portForwardEntry.getInboundInterface())
&& entry.getOutboundInterface().equals(portForwardEntry.getOutboundInterface())
&& entry.getAddress().equals(portForwardEntry.getAddress())
&& entry.getProtocol().equals(portForwardEntry.getProtocol())
&& entry.getOutPort() == portForwardEntry.getOutPort()
&& entry.getInPort() == portForwardEntry.getInPort()) {
String permittedNetwork = entry.getPermittedNetwork() != null ? entry.getPermittedNetwork()
: "0.0.0.0/0";
String newPermittedNetwork = portForwardEntry.getPermittedNetwork() != null
? portForwardEntry.getPermittedNetwork() : "0.0.0.0/0";
String permittedMAC = entry.getPermittedMAC() != null ? entry.getPermittedMAC().toUpperCase() : "";
String newPermittedMAC = portForwardEntry.getPermittedMAC() != null
? portForwardEntry.getPermittedMAC().toUpperCase() : "";
String sourcePortRange = entry.getSourcePortRange() != null ? entry.getSourcePortRange() : "";
String newSourcePortRange = portForwardEntry.getSourcePortRange() != null
? portForwardEntry.getSourcePortRange() : "";
if (permittedNetwork.equals(newPermittedNetwork) && permittedMAC.equals(newPermittedMAC)
&& sourcePortRange.equals(newSourcePortRange)) {
isDuplicateEntry = true;
break;
}
}
}
}
return isDuplicateEntry;
}
private void checkFieldsValues() {
// set required fields in error state by default if empty
if (this.input.getText() == null || "".equals(this.input.getText().trim())) {
this.groupInput.setValidationState(ValidationState.ERROR);
}
if (this.output.getText() == null || "".equals(this.output.getText().trim())) {
this.groupOutput.setValidationState(ValidationState.ERROR);
}
if (this.lan.getText() == null || "".equals(this.lan.getText().trim())) {
this.groupLan.setValidationState(ValidationState.ERROR);
}
if (this.internal.getText() == null || "".equals(this.internal.getText().trim())) {
this.groupInternal.setValidationState(ValidationState.ERROR);
}
if (this.external.getText() == null || "".equals(this.external.getText().trim())) {
this.groupExternal.setValidationState(ValidationState.ERROR);
}
}
}