tabular-data-information-wi.../src/main/java/org/gcube/portlets/user/td/informationwidget/client/TabularResourceProperties.java

653 lines
22 KiB
Java

package org.gcube.portlets.user.td.informationwidget.client;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsFinalException;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsLockedException;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException;
import org.gcube.portlets.user.td.gwtservice.shared.licenses.LicenceData;
import org.gcube.portlets.user.td.gwtservice.shared.share.Contacts;
import org.gcube.portlets.user.td.gwtservice.shared.tr.TabResource;
import org.gcube.portlets.user.td.gwtservice.shared.tr.TableData;
import org.gcube.portlets.user.td.informationwidget.client.custom.IconButton;
import org.gcube.portlets.user.td.informationwidget.client.licence.LicenceDataPropertiesCombo;
import org.gcube.portlets.user.td.informationwidget.client.resources.ResourceBundle;
import org.gcube.portlets.user.td.informationwidget.client.util.UtilsGXT3;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.DataViewRequestEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.RibbonEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.DataViewRequestType;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.RibbonType;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
import org.gcube.portlets.user.td.widgetcommonevent.shared.dataview.TabularResourceDataView;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.CheckBox;
import com.sencha.gxt.widget.core.client.form.ComboBox;
import com.sencha.gxt.widget.core.client.form.DateField;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.TextArea;
import com.sencha.gxt.widget.core.client.form.TextField;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class TabularResourceProperties extends FramedPanel {
private static final String DESCRIPTION_FIELD_HEIGHT = "70px";
private static final DateTimeFormat sdf = DateTimeFormat
.getFormat("yyyy-MM-dd HH:mm");
private TabularResourcePropertiesMessages msgs;
private EventBus eventBus;
private TRId trId;
private TabResource tabResource;
private TextField nameField;
private TextArea descriptionField;
private TextField agencyField;
private TextField dateField;
private TextArea rightField;
private DateField validFromField;
private DateField validUntilToField;
private TextField ownerField;
private CheckBox validField;
private CheckBox finalizedField;
private ComboBox<LicenceData> comboLicences;
private ListStore<LicenceData> storeCombo;
private TextField typeField;
private TextField tableTypeNameField;
private IconButton btnShare;
private FieldLabel shareLabel;
private VerticalLayoutContainer layoutTabularResource;
private TextButton saveButton;
// private TextButton validationsButton;
// private TextButton resourcesButton;
private ArrayList<LicenceData> licencesList;
public TabularResourceProperties(String name, EventBus eventBus) {
super();
setId(name);
this.eventBus = eventBus;
this.msgs = GWT.create(TabularResourcePropertiesMessages.class);
forceLayoutOnResize = true;
retrieveLicencesList();
}
public void addTabularResource() {
layoutTabularResource = new VerticalLayoutContainer();
layoutTabularResource.setScrollMode(ScrollMode.AUTOY);
layoutTabularResource.setAdjustForScroll(true);
nameField = new TextField();
nameField.setValue("");
FieldLabel nameLabel = new FieldLabel(nameField, msgs.nameLabel());
nameLabel.setToolTip(msgs.nameLabelToolTip());
layoutTabularResource.add(nameLabel, new VerticalLayoutData(1, -1));
descriptionField = new TextArea();
descriptionField.setHeight(DESCRIPTION_FIELD_HEIGHT);
descriptionField.setValue("");
FieldLabel descriptionLabel = new FieldLabel(descriptionField,
msgs.descriptionLabel());
descriptionLabel.setToolTip(msgs.descriptionLabelToolTip());
layoutTabularResource.add(descriptionLabel, new VerticalLayoutData(1,
-1));
typeField = new TextField();
typeField.setReadOnly(true);
typeField.setValue("");
FieldLabel typeLabel = new FieldLabel(typeField, msgs.typeLabel());
typeLabel.setToolTip(msgs.typeLabelToolTip());
layoutTabularResource.add(typeLabel, new VerticalLayoutData(1, -1));
agencyField = new TextField();
agencyField.setValue("");
FieldLabel agencyLabel = new FieldLabel(agencyField, msgs.agencyLabel());
agencyLabel.setToolTip(msgs.agencyLabelToolTip());
layoutTabularResource.add(agencyLabel, new VerticalLayoutData(1, -1));
dateField = new TextField();
dateField.setReadOnly(true);
dateField.setValue("");
FieldLabel dateLabel = new FieldLabel(dateField, msgs.dateLabel());
dateLabel.setToolTip(msgs.dateLabelToolTip());
layoutTabularResource.add(dateLabel, new VerticalLayoutData(1, -1));
tableTypeNameField = new TextField();
tableTypeNameField.setReadOnly(true);
tableTypeNameField.setValue("");
FieldLabel tableTypeNameLabel = new FieldLabel(tableTypeNameField,
msgs.tableTypeNameLabel());
tableTypeNameLabel.setToolTip(msgs.tableTypeNameLabelToolTip());
layoutTabularResource.add(tableTypeNameLabel, new VerticalLayoutData(1,
-1));
rightField = new TextArea();
rightField.setValue("");
FieldLabel rightLabel = new FieldLabel(rightField, msgs.rightLabel());
rightLabel.setToolTip(msgs.rightLabelToolTip());
layoutTabularResource.add(rightLabel, new VerticalLayoutData(1, -1));
validFromField = new DateField();
FieldLabel validFromLabel = new FieldLabel(validFromField,
msgs.validFromLabel());
validFromLabel.setToolTip(msgs.validFromLabelToolTip());
layoutTabularResource
.add(validFromLabel, new VerticalLayoutData(1, -1));
validUntilToField = new DateField();
FieldLabel validUntilToLabel = new FieldLabel(validUntilToField,
msgs.validUntilToLabel());
validUntilToLabel.setToolTip(msgs.validUntilToLabelToolTip());
layoutTabularResource.add(validUntilToLabel, new VerticalLayoutData(1,
-1));
// Combo Licences
LicenceDataPropertiesCombo propsLicenceData = GWT
.create(LicenceDataPropertiesCombo.class);
storeCombo = new ListStore<LicenceData>(propsLicenceData.id());
storeCombo.addAll(licencesList);
comboLicences = new ComboBox<LicenceData>(storeCombo,
propsLicenceData.licenceName());
comboLicences.setMinListWidth(250);
comboLicences.setEditable(false);
comboLicences.setTypeAhead(false);
comboLicences.setTriggerAction(TriggerAction.ALL);
Log.trace("Combo Licence created");
FieldLabel licencesLabel = new FieldLabel(comboLicences,
msgs.licencesLabel());
licencesLabel.setToolTip(msgs.licencesLabelToolTip());
layoutTabularResource.add(licencesLabel, new VerticalLayoutData(1, -1));
// /
ownerField = new TextField();
ownerField.setReadOnly(true);
ownerField.setValue("");
FieldLabel ownerLabel = new FieldLabel(ownerField, msgs.ownerLabel());
ownerLabel.setToolTip(msgs.ownerLabelToolTip());
layoutTabularResource.add(ownerLabel, new VerticalLayoutData(1, -1));
btnShare = new IconButton();
btnShare.setIcon(ResourceBundle.INSTANCE.share());
btnShare.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Log.debug("Clicked btnShare");
eventBus.fireEvent(new RibbonEvent(RibbonType.SHARE));
}
});
shareLabel = new FieldLabel(btnShare, msgs.shareLabel());
shareLabel.setToolTip(msgs.shareLabelToolTip());
shareLabel.setVisible(false);
layoutTabularResource.add(shareLabel, new VerticalLayoutData(1, -1));
validField = new CheckBox();
validField.setValue(false);
validField.setReadOnly(true);
validField.setEnabled(false);
FieldLabel validLabel = new FieldLabel(validField, msgs.validLabel());
validLabel.setToolTip(msgs.validLabelToolTip());
layoutTabularResource.add(validLabel, new VerticalLayoutData(1, -1,
new Margins(0)));
finalizedField = new CheckBox();
finalizedField.setValue(false);
finalizedField.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue()) {
UtilsGXT3
.info("Warning",
"A TabularResource set to final can't be modified anymore!");
}
}
});
FieldLabel finalizedLabel = new FieldLabel(finalizedField,
msgs.finalizedLabel());
finalizedLabel.setToolTip(msgs.finalizedLabelToolTip());
layoutTabularResource.add(finalizedLabel, new VerticalLayoutData(1, -1,
new Margins(0)));
// Save Button
saveButton = new TextButton(msgs.saveButton());
saveButton.setIcon(ResourceBundle.INSTANCE.save());
saveButton.setIconAlign(IconAlign.RIGHT);
saveButton.setToolTip(msgs.saveButtonToolTip());
SelectHandler saveHandler = new SelectHandler() {
public void onSelect(SelectEvent event) {
onSave();
}
};
saveButton.addSelectHandler(saveHandler);
// Validation Button
/*
* validationsButton = new TextButton(msgs.validationsButton());
* validationsButton.setIcon(ResourceBundle.INSTANCE.tableValidation());
* validationsButton.setIconAlign(IconAlign.RIGHT);
* validationsButton.setToolTip(msgs.validationsButtonToolTip());
*
* SelectHandler validationsHandler = new SelectHandler() {
*
* public void onSelect(SelectEvent event) { openValidations();
*
* } }; validationsButton.addSelectHandler(validationsHandler);
*/
// Resources Button
/*
* resourcesButton = new TextButton(msgs.resourcesButton());
* resourcesButton.setIcon(ResourceBundle.INSTANCE.resources());
* resourcesButton.setIconAlign(IconAlign.RIGHT);
* resourcesButton.setToolTip(msgs.resourcesButtonToolTip());
*
* SelectHandler resourcesHandler = new SelectHandler() {
*
* public void onSelect(SelectEvent event) { openResources();
*
* } }; resourcesButton.addSelectHandler(resourcesHandler);
*/
//
HBoxLayoutContainer hBox = new HBoxLayoutContainer();
hBox.setPack(BoxLayoutPack.START);
hBox.add(saveButton, new BoxLayoutData(new Margins(2, 5, 2, 5)));
// hBox.add(validationsButton, new BoxLayoutData(new Margins(2, 5, 2,
// 5)));
// hBox.add(resourcesButton, new BoxLayoutData(new Margins(2, 5, 2,
// 5)));
layoutTabularResource.add(hBox, new VerticalLayoutData(1, -1,
new Margins(2)));
add(layoutTabularResource);
}
protected void retrieveLicencesList() {
TDGWTServiceAsync.INSTANCE
.getLicences(new AsyncCallback<ArrayList<LicenceData>>() {
public void onFailure(Throwable caught) {
if (caught instanceof TDGWTSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
Log.error("load combo failure:"
+ caught.getLocalizedMessage());
UtilsGXT3.alert("Error",
"Error retrieving licences.");
}
}
public void onSuccess(ArrayList<LicenceData> result) {
Log.trace("loaded " + result.size() + " LicenceData");
licencesList = result;
initInformation();
}
});
}
protected void updateTabularResource(TabResource tabResource) {
this.tabResource = tabResource;
Log.debug(tabResource.toString());
nameField.setValue(tabResource.getName());
descriptionField.setValue(tabResource.getDescription());
typeField.setValue(tabResource.getTabResourceType());
agencyField.setValue(tabResource.getAgency());
try {
dateField.setValue(sdf.format(tabResource.getDate()));
} catch (Throwable e) {
Log.error("Error parsing cration date: " + e.getLocalizedMessage());
}
tableTypeNameField.setValue(tabResource.getTableTypeName());
rightField.setValue(tabResource.getRight());
validFromField.clear();
if (tabResource.getValidFrom() == null) {
Log.debug("ValidFrom null or empty");
} else {
validFromField.setValue(tabResource.getValidFrom());
}
validUntilToField.clear();
if (tabResource.getValidUntilTo() == null) {
Log.debug("ValidUntilTo null or empty");
} else {
validUntilToField.setValue(tabResource.getValidUntilTo());
}
comboLicences.clear();
if (tabResource.getLicence() != null
&& !tabResource.getLicence().isEmpty()) {
List<LicenceData> listLicence = storeCombo.getAll();
boolean licenceFound = false;
for (int i = 0; i < listLicence.size(); i++) {
if (tabResource.getLicence().compareTo(
listLicence.get(i).getLicenceId()) == 0) {
comboLicences.setValue(listLicence.get(i));
licenceFound = true;
break;
}
}
if (licenceFound) {
Log.debug("Licence " + tabResource.getLicence() + " is found");
} else {
Log.debug("Licence " + tabResource.getLicence()
+ " is not found");
}
} else {
Log.debug("Licence is null");
}
ownerField.setValue(tabResource.getOwner().getLogin());
validField.setValue(tabResource.isValid());
if (tabResource.isFinalized()) {
finalizedField.setReadOnly(true);
finalizedField.setEnabled(false);
finalizedField.setValue(true);
saveButton.setEnabled(false);
} else {
finalizedField.setReadOnly(false);
finalizedField.setEnabled(true);
finalizedField.setValue(false);
saveButton.setEnabled(true);
}
ArrayList<Contacts> contacts = tabResource.getContacts();
if (contacts != null && contacts.size() > 0) {
shareLabel.setVisible(true);
} else {
shareLabel.setVisible(false);
}
}
/*
* protected void updateShareInfo(ShareInfo result) { ArrayList<Contacts>
* contacts = result.getContacts(); if (contacts != null && contacts.size()
* > 0) { shareLabel.setVisible(true); } else {
* shareLabel.setVisible(false); } }
*/
/*
* public void addTable() { tableFieldSet = new FieldSet();
* tableFieldSet.setHeadingText("Table");
* tableFieldSet.setCollapsible(true); tableFieldSet.setResize(true);
*
* layoutTable = new VerticalLayoutContainer();
*
* tableFieldSet.add(layoutTable);
*
* tableTypeDefField = new TextField(); tableTypeDefField.setReadOnly(true);
* tableTypeDefField.setValue(""); layoutTable.add(new
* FieldLabel(tableTypeDefField, "Type"), new VerticalLayoutData(1, -1));
*
* vl.add(tableFieldSet); }
*/
/*
* protected void openValidations() { Log.debug("Request Validations Tab");
* if (trId != null) { WidgetRequestEvent e = new WidgetRequestEvent(
* WidgetRequestType.VALIDATIONSTASKSPANEL); e.setTrId(trId);
* eventBus.fireEvent(e); } else { Log.error("TRId is null"); } }
*/
/*
* protected void openResources() { Log.debug("Request Resources Tab"); if
* (trId != null) { WidgetRequestEvent e = new WidgetRequestEvent(
* WidgetRequestType.RESOURCESPANEL); e.setTrId(trId);
* eventBus.fireEvent(e); } else { Log.error("TRId is null"); } }
*/
protected void updateTable(TableData tableData) {
trId = tableData.getTrId();
Log.debug("New :" + trId);
forceLayout();
}
public void update() {
TDGWTServiceAsync.INSTANCE
.getTabResourceInformation(new AsyncCallback<TabResource>() {
public void onSuccess(TabResource result) {
Log.info("Retrived TR: " + result.getTrId());
updateTabularResource(result);
getLastTable(result.getTrId());
}
public void onFailure(Throwable caught) {
if (caught instanceof TDGWTSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
if (caught instanceof TDGWTIsLockedException) {
Log.error(caught.getLocalizedMessage());
UtilsGXT3.alert("Error Locked",
caught.getLocalizedMessage());
} else {
Log.error("Error retrienving properties: "
+ caught.getLocalizedMessage());
}
}
}
});
}
/*
* protected void getShareInformation(TRId trId) {
* TDGWTServiceAsync.INSTANCE.getShareInfo(trId, new
* AsyncCallback<ShareInfo>() {
*
* public void onSuccess(ShareInfo result) {
* Log.debug("Retrived share info:" + result); updateShareInfo(result);
* getLastTable(tabResource.getTrId());
*
* }
*
* public void onFailure(Throwable caught) { if (caught instanceof
* TDGWTSessionExpiredException) { eventBus.fireEvent(new
* SessionExpiredEvent( SessionExpiredType.EXPIREDONSERVER)); } else { if
* (caught instanceof TDGWTIsLockedException) {
* Log.error(caught.getLocalizedMessage()); UtilsGXT3.alert("Error Locked",
* caught.getLocalizedMessage()); } else {
* Log.error("Error retrienving Share Informations: " +
* caught.getLocalizedMessage()); UtilsGXT3.alert("Error",
* "Error retrienving Share Informations: " + caught.getLocalizedMessage());
* } } }
*
* }); }
*/
protected void getLastTable(TRId trId) {
TDGWTServiceAsync.INSTANCE.getLastTable(trId,
new AsyncCallback<TableData>() {
public void onSuccess(TableData result) {
updateTable(result);
}
public void onFailure(Throwable caught) {
if (caught instanceof TDGWTSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
if (caught instanceof TDGWTIsLockedException) {
Log.error(caught.getLocalizedMessage());
UtilsGXT3.alert("Error Locked",
caught.getLocalizedMessage());
} else {
Log.error("Error retrienving Last Table: "
+ caught.getLocalizedMessage());
UtilsGXT3.alert("Error",
"Error retrienving Last Table: "
+ caught.getLocalizedMessage());
}
}
}
});
}
public void initInformation() {
addTabularResource();
// addTable();
update();
}
protected void onSave() {
if (nameField.getValue() == null || nameField.getValue().isEmpty()) {
Log.debug("Attention Fill name field");
UtilsGXT3.info("Attention", "Fill name field");
return;
}
tabResource.setName(nameField.getValue());
tabResource.setDescription(descriptionField.getValue());
tabResource.setAgency(agencyField.getValue());
tabResource.setRight(rightField.getValue());
Date vFrom = validFromField.getValue();
if (vFrom == null) {
Log.debug("No valid from set");
} else {
tabResource.setValidFrom(vFrom);
}
Date vUntilTo = validUntilToField.getValue();
if (vUntilTo == null) {
Log.debug("No valid until to set");
} else {
tabResource.setValidUntilTo(vUntilTo);
}
if (vFrom != null && vUntilTo != null && vFrom.compareTo(vUntilTo) > 0) {
Log.debug("Attention Valid From field is higher than Valid Until To field");
UtilsGXT3.info("Attention",
"Valid From field is higher than Valid Until To field");
return;
}
if (comboLicences.getCurrentValue() != null
&& comboLicences.getCurrentValue().getLicenceId() != null
&& !comboLicences.getCurrentValue().getLicenceId().isEmpty()) {
tabResource.setLicence(comboLicences.getCurrentValue()
.getLicenceId());
}
tabResource.setValid(validField.getValue());
tabResource.setFinalized(finalizedField.getValue());
TDGWTServiceAsync.INSTANCE.setTabResourceInformation(tabResource,
new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
if (caught instanceof TDGWTSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
if (caught instanceof TDGWTIsLockedException) {
Log.error(caught.getLocalizedMessage());
UtilsGXT3.alert("Error Locked",
caught.getLocalizedMessage());
} else {
if (caught instanceof TDGWTIsFinalException) {
Log.error(caught.getLocalizedMessage());
UtilsGXT3.alert("Error Final",
caught.getLocalizedMessage());
} else {
Log.error("Error Setting Tabular Resoruce Properties: "
+ caught.getLocalizedMessage());
UtilsGXT3
.alert("Error",
"Error setting tabular resource properties: "
+ caught.getLocalizedMessage());
}
}
}
}
public void onSuccess(Void result) {
Log.debug("Tabular Resource properties are set: "
+ tabResource);
UtilsGXT3.info("Proprerties",
"Tabular Resource properties are set");
if (finalizedField.getValue()) {
finalizedField.setReadOnly(true);
finalizedField.setValue(true);
saveButton.setEnabled(false);
} else {
finalizedField.setReadOnly(false);
finalizedField.setValue(false);
saveButton.setEnabled(true);
}
DataViewRequestEvent dataViewRequestEvent = new DataViewRequestEvent();
TabularResourceDataView tabularResouceDataView = new TabularResourceDataView(
tabResource.getTrId(), tabResource.getName());
dataViewRequestEvent
.setDataView(tabularResouceDataView);
dataViewRequestEvent
.setDataViewRequestType(DataViewRequestType.UPDATE_TAB_NAME);
eventBus.fireEvent(dataViewRequestEvent);
}
});
}
}