diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java index 70cfcb0..10004b5 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java @@ -328,315 +328,43 @@ public class CreateDatasetForm extends Composite{ if(lBean != null && !lBean.getLicenses().isEmpty()){ - licenseBean = lBean; + licenseBean = lBean; - // fill the listbox - for(String license: licenseBean.getLicenses()){ + // sort the list + List listOfNames = licenseBean.getLicenses(); + Collections.sort(listOfNames); - licenseListbox.addItem(license); + // fill the listbox + for(int i = 0; i < listOfNames.size(); i++){ + licenseListbox.addItem(listOfNames.get(i)); + if(listOfNames.get(i).equals("Creative Commons Attribution")) + licenseListbox.setItemSelected(i, true); + + } + + + // everything went ok + setAlertBlock("", AlertType.ERROR, false); + continueButton.setEnabled(true); + resetButton.setEnabled(true); + + }else{ + setAlertBlock("Error while retrieving licenses, try to refresh the page", AlertType.ERROR, true); } - - // everything went ok - setAlertBlock("", AlertType.ERROR, false); - continueButton.setEnabled(true); - resetButton.setEnabled(true); - - }else{ - setAlertBlock("Error while retrieving licenses, try to refresh the page", AlertType.ERROR, true); } - } - - @Override - public void onFailure(Throwable caught) { - - setAlertBlock("Error while retrieving licenses, try to refresh the page", AlertType.ERROR, true); - - } - }); - - }else{ - - setAlertBlock("Error while retrieving information, try to refresh the page", AlertType.ERROR, true); - } - - } - - @Override - public void onFailure(Throwable caught) { - - setAlertBlock("Error while retrieving information, try to refresh the page", AlertType.ERROR, true); - - } - }); - - } - - /** - * Add the items to the listbox and put data into the metadataPanel - * @param receivedBean - */ - protected void prepareMetadataList(DatasetMetadataBean receivedBean) { - - List beans = receivedBean.getMetadataList(); - - for(MetaDataProfileBean metadataBean: beans){ - - metadataProfilesFormatListbox.addItem(metadataBean.getType().getName()); - - // add handler on select - metadataProfilesFormatListbox.addChangeHandler(new ChangeHandler() { - - @Override - public void onChange(ChangeEvent event) { - - String selectedItem = metadataProfilesFormatListbox.getSelectedItemText(); - - if(selectedItem.equals("none")){ - // hide the panel - metadataFieldsPanel.clear(); - metadataFieldsPanel.setVisible(false); - }else{ - - metadataFieldsPanel.clear(); - addFields(selectedItem); - } - } - }); - } - } - - protected void addFields(String selectedItem) { - - for(MetaDataProfileBean bean: receivedBean.getMetadataList()){ - - if(bean.getType().getName().equals(selectedItem)){ - - // prepare the data - List fields = bean.getMetadataFields(); - - // clear old data - listOfMetadataFields.clear(); - - for (MetadataFieldWrapper field : fields) { - MetaDataFieldSkeleton fieldWidget = new MetaDataFieldSkeleton(field); - metadataFieldsPanel.add(fieldWidget); - listOfMetadataFields.add(fieldWidget); - } - - metadataFieldsPanel.setVisible(true); - } - } - } - - /** - * Bind on events - */ - private void bind() { - - // when a custom field is removed, remove it from the list - eventBus.addHandler(DeleteCustomFieldEvent.TYPE, new DeleteCustomFieldEventHandler() { - - @Override - public void onRemoveEntry(DeleteCustomFieldEvent event) { - - customFieldEntriesList.remove(event.getRemovedEntry()); - customFields.remove(event.getRemovedEntry()); - - } - }); - - } - - @UiHandler("addCustomFieldButton") - void addCustomFieldEvent(ClickEvent e){ - - CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, "", "", true); - customFieldEntriesList.add(toAdd); - customFields.add(toAdd); - - } - - @UiHandler("continueButton") - void onContinueButton(ClickEvent e){ - - // validate data - String errorMsg = validateDataOnContinue(); - - if(errorMsg == null){ - formFirstStep.setVisible(false); - formSecondStep.setVisible(true); - selectedProfile.setText("Selected Profile is " + metadataProfilesFormatListbox.getSelectedItemText()); - }else{ - alertOnContinue("Please check inserted data [" + errorMsg + "]", AlertType.ERROR); - } - - } - - @UiHandler("goBackButton") - void onGoBackButton(ClickEvent e){ - - // swap forms - formFirstStep.setVisible(true); - formSecondStep.setVisible(false); - - } - - @UiHandler("createButton") - void createDatasetEvent(ClickEvent e){ - - boolean profileDataValid = areProfileDataValid(); - - if(profileDataValid){ - - String title = titleTextBox.getValue(); - String description = descriptionTextarea.getText(); - String selectedLicense = licenseListbox.getSelectedItemText(); - String visibility = visibilityListbox.getSelectedItemText(); - long version = Long.valueOf(versionTextbox.getValue()); - String author = authorTextbox.getValue(); - String authorEmail = authorEmailTextbox.getValue(); - String maintainer = maintainerTextbox.getValue(); - String maintainerEmail = maintainerEmailTextbox.getValue(); - String chosenOrganization = organizationsListbox.getSelectedItemText(); - boolean addResources = addResourcesCheckBox.getValue(); - - // fill the bean - receivedBean.setAuthor(author); - receivedBean.setAuthorEmail(authorEmail); - receivedBean.setDescription(description); - receivedBean.setLicense(selectedLicense); - receivedBean.setMaintainer(maintainer); - receivedBean.setMaintainerEmail(maintainerEmail); - receivedBean.setVersion(version); - receivedBean.setVisibility(visibility.equals("Public")); - receivedBean.setTitle(title); - receivedBean.setTags(tagsList); - receivedBean.setSelectedOrganization(chosenOrganization); - receivedBean.setAddResources(addResources); - - Map customFieldsMap = new HashMap(); - - // prepare custom fields - for (MetaDataFieldSkeleton field : listOfMetadataFields) { - - customFieldsMap.put(field.getFieldName(), field.getFieldCurrentValue()); - - } - - for(CustomFieldEntry customEntry : customFieldEntriesList){ - - String key = customEntry.getKey(); - String value = customEntry.getValue(); - customFieldsMap.put(key, value); - - } - - receivedBean.setCustomFields(customFieldsMap); - - // alert - alertOnCreate("Trying to create dataset, please wait", AlertType.INFO); - - // invoke the create method - createButton.setEnabled(false); - goBackButton.setEnabled(false); - - ckanServices.createCKanDataset(receivedBean, isWorkspaceRequest, new AsyncCallback() { - - @Override - public void onSuccess(final DatasetMetadataBean createdDatasetBean) { - - if(createdDatasetBean != null){ - - alertOnCreate("Dataset correctly created!", AlertType.SUCCESS); - - // disable dataset fields - disableDatasetFields(); - - // disable reset - resetButton.setEnabled(false); - - // show the go to dataset button - final String datasetUrl = createdDatasetBean.getSource(); - goToDatasetButton.setVisible(true); - goToDatasetButton.addClickHandler(new ClickHandler() { @Override - public void onClick(ClickEvent event) { + public void onFailure(Throwable caught){ - String currentPath = Window.Location.getHref(); - int datasetIndex = datasetUrl.indexOf("/dataset"); - if(datasetIndex == -1) - return; + setAlertBlock("Error while retrieving licenses, try to refresh the page", AlertType.ERROR, true); - String finalPart = datasetUrl.substring(datasetIndex); - String finalPath = currentPath + "?" + "path" + "=" + finalPart; - Window.Location.assign(finalPath); } }); - // if we are in the "general case" we need to show a form for adding resources - if(isWorkspaceRequest) - { - - // leave to back button, but remove create and add go to dataset - createButton.removeFromParent(); - - // set go to dataset as primary - goToDatasetButton.setType(ButtonType.PRIMARY); - - }else{ - - // remove create button - createButton.removeFromParent(); - - // show the add resources button - addResourcesButton.setVisible(true); - - addResourcesButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - - // remove content of the main panel - createDatasetMainPanel.clear(); - - // TabPanel - tabPanel = new TabPanel(Tabs.ABOVE); - tabPanel.setWidth("100%"); - - // add the form - resourceForm = new AddResourceToDataset(eventBus, createdDatasetBean.getId(), owner, datasetUrl); - - // tab for the form - Tab formContainer = new Tab(); - formContainer.add(resourceForm); - formContainer.setHeading("Add New Resource"); - tabPanel.add(formContainer); - - // tab for the added resources - Tab addedResources = new Tab(); - addedResources.add(new AddedResourcesSummary(eventBus, owner)); - addedResources.setHeading("Added Resource"); - tabPanel.add(addedResources); - - // add tabs to resources panel - tabPanel.selectTab(0); - - - // form container - AddResourceContainer container = new AddResourceContainer(datasetUrl); - container.add(tabPanel); - - // add the new content of the main panel - createDatasetMainPanel.add(container); - } - }); - } - }else{ - alertOnCreate("Unable to create this dataset, maybe it already exists?", AlertType.ERROR); + setAlertBlock("Error while retrieving information, try to refresh the page", AlertType.ERROR, true); } } @@ -644,321 +372,600 @@ public class CreateDatasetForm extends Composite{ @Override public void onFailure(Throwable caught) { - alertOnCreate("Unable to create this dataset, maybe it already exists?", AlertType.ERROR); + setAlertBlock("Error while retrieving information, try to refresh the page", AlertType.ERROR, true); } }); - }else{ - - alertOnCreate("Please check the inserted values and the mandatory fields", AlertType.ERROR); } - } - /** - * Test if profile data are valid - * @return - */ - private boolean areProfileDataValid() { + /** + * Add the items to the listbox and put data into the metadataPanel + * @param receivedBean + */ + protected void prepareMetadataList(DatasetMetadataBean receivedBean) { - for (MetaDataFieldSkeleton field : listOfMetadataFields) { + List beans = receivedBean.getMetadataList(); - if(!field.isFieldValueValid()) - return false; - } + for(MetaDataProfileBean metadataBean: beans){ - return true; - } + metadataProfilesFormatListbox.addItem(metadataBean.getType().getName()); - /** - * On continue show alert box and enable buttons - * @param text - * @param type - */ - private void alertOnContinue(String text, AlertType type){ + // add handler on select + metadataProfilesFormatListbox.addChangeHandler(new ChangeHandler() { - onContinueAlertBlock.setText(text); - onContinueAlertBlock.setType(type); - onContinueAlertBlock.setVisible(true); - continueButton.setEnabled(true); - resetButton.setEnabled(true); + @Override + public void onChange(ChangeEvent event) { - // hide after some seconds - Timer t = new Timer() { + String selectedItem = metadataProfilesFormatListbox.getSelectedItemText(); - @Override - public void run() { - - onContinueAlertBlock.setVisible(false); + if(selectedItem.equals("none")){ + // hide the panel + metadataFieldsPanel.clear(); + metadataFieldsPanel.setVisible(false); + }else{ + metadataFieldsPanel.clear(); + addFields(selectedItem); + } + } + }); } - }; + } - t.schedule(4000); - } + protected void addFields(String selectedItem) { - /** - * On continue show alert box and enable buttons - * @param text - * @param type - */ - private void alertOnCreate(String text, AlertType type){ + for(MetaDataProfileBean bean: receivedBean.getMetadataList()){ - onCreateAlertBlock.setText(text); - onCreateAlertBlock.setType(type); - onCreateAlertBlock.setVisible(true); - createButton.setEnabled(true); - goBackButton.setEnabled(true); + if(bean.getType().getName().equals(selectedItem)){ - // hide after some seconds - Timer t = new Timer() { + // prepare the data + List fields = bean.getMetadataFields(); - @Override - public void run() { + // clear old data + listOfMetadataFields.clear(); - onCreateAlertBlock.setVisible(false); + for (MetadataFieldWrapper field : fields) { + MetaDataFieldSkeleton fieldWidget = new MetaDataFieldSkeleton(field); + metadataFieldsPanel.add(fieldWidget); + listOfMetadataFields.add(fieldWidget); + } + metadataFieldsPanel.setVisible(true); + } } - }; - - t.schedule(4000); - } - - /** - * Validate data - * @return true on success, false otherwise - */ - private String validateDataOnContinue() { - - String errorMessage = null; - - if(titleTextBox.getText().isEmpty()){ - errorMessage = "Missing title"; - return errorMessage; } - // better check for the title - String regexTitleSubWord = "^[a-zA-Z0-9_]+$"; - String[] splittedTitle = titleTextBox.getText().split(" "); + /** + * Bind on events + */ + private void bind() { - for (String word : splittedTitle) { + // when a custom field is removed, remove it from the list + eventBus.addHandler(DeleteCustomFieldEvent.TYPE, new DeleteCustomFieldEventHandler() { - if(!word.matches(regexTitleSubWord)) - return "Please note that only alphanumeric characters are allowed for the title"; + @Override + public void onRemoveEntry(DeleteCustomFieldEvent event) { + + customFieldEntriesList.remove(event.getRemovedEntry()); + customFields.remove(event.getRemovedEntry()); + + } + }); } - // name reg expression - String regexName = "^[a-zA-Z\\s]+"; - if(!validateByRegExpression(maintainerTextbox.getText(), regexName)){ - errorMessage = "Not valid maintainer name"; - return errorMessage; - } + @UiHandler("addCustomFieldButton") + void addCustomFieldEvent(ClickEvent e){ - // email reg expression - String regexMail = "\\b[\\w.%-]+@[-.\\w]+\\.[A-Za-z]{2,4}\\b"; - if(!validateByRegExpression(maintainerEmailTextbox.getText(), regexMail)){ - errorMessage = "Not valid maintainer email"; - return errorMessage; - } - - // check if metadata profile is different from none and its mandatory fields have been fulfilled - if(checkSelectedMetaDataProfile()){ - errorMessage = "You must select a metadata profile different frome none"; - } - - if(organizationsListbox.getSelectedItemText() == null){ - errorMessage = "You must select an organization in which you want to publish"; - } - - return errorMessage; - } - - /** - * Checks if a metadata profile has been chosen and its fields have been fulfilled - * @return - */ - private boolean checkSelectedMetaDataProfile() { - return metadataProfilesFormatListbox.getSelectedItemText().equals("none"); - } - - /** - * Validate a text against a regular expression. - * @param textToValidate - * @param regex - * @return - */ - private boolean validateByRegExpression(String textToValidate, String regex){ - return textToValidate.matches(regex); - } - - @UiHandler("resetButton") - void resetFormEvent(ClickEvent e){ - - // reset main fields - titleTextBox.setText(""); - descriptionTextarea.setText(""); - versionTextbox.setText(""); - maintainerTextbox.setText(""); - maintainerEmailTextbox.setText(""); - removeTags(); - - // delete custom fields - for (CustomFieldEntry customField : customFieldEntriesList) { - customField.removeFromParent(); - } - customFieldEntriesList.clear(); - - } - - /** - * Disable dataset editable fields once the dataset has been - * Successfully created. - */ - protected void disableDatasetFields() { - - titleTextBox.setEnabled(false); - descriptionTextarea.setEnabled(false); - versionTextbox.setEnabled(false); - maintainerTextbox.setEnabled(false); - maintainerEmailTextbox.setEnabled(false); - visibilityListbox.setEnabled(false); - tagsEnterTextBox.setEnabled(false); - licenseListbox.setEnabled(false); - organizationsListbox.setEnabled(false); - addCustomFieldButton.setEnabled(false); - - // freeze tags - for(int i = 0; i < tagsList.size(); i++){ - - // get tag widget - ListItem tagWidget = (ListItem)tagsPanel.getWidget(i); - - // get the "x" span - tagWidget.getWidget(1).removeFromParent(); + CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, "", "", true); + customFieldEntriesList.add(toAdd); + customFields.add(toAdd); } - // disable profile fields - for (MetaDataFieldSkeleton field : listOfMetadataFields) { + @UiHandler("continueButton") + void onContinueButton(ClickEvent e){ - field.freeze(); + // validate data + String errorMsg = validateDataOnContinue(); + + if(errorMsg == null){ + formFirstStep.setVisible(false); + formSecondStep.setVisible(true); + selectedProfile.setText("Selected Profile is " + metadataProfilesFormatListbox.getSelectedItemText()); + }else{ + alertOnContinue("Please check inserted data [" + errorMsg + "]", AlertType.ERROR); + } } - } + @UiHandler("goBackButton") + void onGoBackButton(ClickEvent e){ - /** - * change alert block behavior. - * @param textToShow - * @param type - * @param visible - */ - private void setAlertBlock(String textToShow, AlertType type, boolean visible){ + // swap forms + formFirstStep.setVisible(true); + formSecondStep.setVisible(false); - infoBlock.setText(textToShow); - infoBlock.setType(type); - infoBlock.setVisible(visible); + } - } + @UiHandler("createButton") + void createDatasetEvent(ClickEvent e){ - @UiHandler("tagsEnterTextBox") - void onAddTag(KeyDownEvent event){ + boolean profileDataValid = areProfileDataValid(); - if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - if (!"".equals(tagsEnterTextBox.getValue().trim())) { + if(profileDataValid){ - addTagElement(tagsEnterTextBox); + String title = titleTextBox.getValue(); + String description = descriptionTextarea.getText(); + String selectedLicense = licenseListbox.getSelectedItemText(); + String visibility = visibilityListbox.getSelectedItemText(); + long version = Long.valueOf(versionTextbox.getValue()); + String author = authorTextbox.getValue(); + String authorEmail = authorEmailTextbox.getValue(); + String maintainer = maintainerTextbox.getValue(); + String maintainerEmail = maintainerEmailTextbox.getValue(); + String chosenOrganization = organizationsListbox.getSelectedItemText(); + boolean addResources = addResourcesCheckBox.getValue(); + + // fill the bean + receivedBean.setAuthor(author); + receivedBean.setAuthorEmail(authorEmail); + receivedBean.setDescription(description); + receivedBean.setLicense(selectedLicense); + receivedBean.setMaintainer(maintainer); + receivedBean.setMaintainerEmail(maintainerEmail); + receivedBean.setVersion(version); + receivedBean.setVisibility(visibility.equals("Public")); + receivedBean.setTitle(title); + receivedBean.setTags(tagsList); + receivedBean.setSelectedOrganization(chosenOrganization); + receivedBean.setAddResources(addResources); + + Map customFieldsMap = new HashMap(); + + // prepare custom fields + for (MetaDataFieldSkeleton field : listOfMetadataFields) { + + customFieldsMap.put(field.getFieldName(), field.getFieldCurrentValue()); + + } + + for(CustomFieldEntry customEntry : customFieldEntriesList){ + + String key = customEntry.getKey(); + String value = customEntry.getValue(); + customFieldsMap.put(key, value); + + } + + receivedBean.setCustomFields(customFieldsMap); + + // alert + alertOnCreate("Trying to create dataset, please wait", AlertType.INFO); + + // invoke the create method + createButton.setEnabled(false); + goBackButton.setEnabled(false); + + ckanServices.createCKanDataset(receivedBean, isWorkspaceRequest, new AsyncCallback() { + + @Override + public void onSuccess(final DatasetMetadataBean createdDatasetBean) { + + if(createdDatasetBean != null){ + + alertOnCreate("Dataset correctly created!", AlertType.SUCCESS); + + // disable dataset fields + disableDatasetFields(); + + // disable reset + resetButton.setEnabled(false); + + // show the go to dataset button + final String datasetUrl = createdDatasetBean.getSource(); + goToDatasetButton.setVisible(true); + goToDatasetButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + String currentPath = Window.Location.getHref(); + int datasetIndex = datasetUrl.indexOf("/dataset"); + if(datasetIndex == -1) + return; + + String finalPart = datasetUrl.substring(datasetIndex); + String finalPath = currentPath + "?" + "path" + "=" + finalPart; + Window.Location.assign(finalPath); + } + }); + + // if we are in the "general case" we need to show a form for adding resources + if(isWorkspaceRequest) + { + + // leave to back button, but remove create and add go to dataset + createButton.removeFromParent(); + + // set go to dataset as primary + goToDatasetButton.setType(ButtonType.PRIMARY); + + }else{ + + // remove create button + createButton.removeFromParent(); + + // show the add resources button + addResourcesButton.setVisible(true); + + addResourcesButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + // remove content of the main panel + createDatasetMainPanel.clear(); + + // TabPanel + tabPanel = new TabPanel(Tabs.ABOVE); + tabPanel.setWidth("100%"); + + // add the form + resourceForm = new AddResourceToDataset(eventBus, createdDatasetBean.getId(), owner, datasetUrl); + + // tab for the form + Tab formContainer = new Tab(); + formContainer.add(resourceForm); + formContainer.setHeading("Add New Resource"); + tabPanel.add(formContainer); + + // tab for the added resources + Tab addedResources = new Tab(); + addedResources.add(new AddedResourcesSummary(eventBus, owner)); + addedResources.setHeading("Added Resource"); + tabPanel.add(addedResources); + + // add tabs to resources panel + tabPanel.selectTab(0); + + + // form container + AddResourceContainer container = new AddResourceContainer(datasetUrl); + container.add(tabPanel); + + // add the new content of the main panel + createDatasetMainPanel.add(container); + } + }); + } + + }else{ + + alertOnCreate("Unable to create this dataset, maybe it already exists?", AlertType.ERROR); + } + + } + + @Override + public void onFailure(Throwable caught) { + + alertOnCreate("Unable to create this dataset, maybe it already exists?", AlertType.ERROR); + + } + }); + }else{ + + alertOnCreate("Please check the inserted values and the mandatory fields", AlertType.ERROR); } } - } - /** - * Add the tag as an element - */ - private void addTagElement(TextBox itemBox){ + /** + * Test if profile data are valid + * @return + */ + private boolean areProfileDataValid() { - if (itemBox.getValue() != null && !"".equals(itemBox.getValue().trim())) { + for (MetaDataFieldSkeleton field : listOfMetadataFields) { - if(tagsList.contains(itemBox.getValue())) + if(!field.isFieldValueValid()) + return false; + } + + return true; + } + + /** + * On continue show alert box and enable buttons + * @param text + * @param type + */ + private void alertOnContinue(String text, AlertType type){ + + onContinueAlertBlock.setText(text); + onContinueAlertBlock.setType(type); + onContinueAlertBlock.setVisible(true); + continueButton.setEnabled(true); + resetButton.setEnabled(true); + + // hide after some seconds + Timer t = new Timer() { + + @Override + public void run() { + + onContinueAlertBlock.setVisible(false); + + } + }; + + t.schedule(4000); + } + + /** + * On continue show alert box and enable buttons + * @param text + * @param type + */ + private void alertOnCreate(String text, AlertType type){ + + onCreateAlertBlock.setText(text); + onCreateAlertBlock.setType(type); + onCreateAlertBlock.setVisible(true); + createButton.setEnabled(true); + goBackButton.setEnabled(true); + + // hide after some seconds + Timer t = new Timer() { + + @Override + public void run() { + + onCreateAlertBlock.setVisible(false); + + } + }; + + t.schedule(4000); + } + + /** + * Validate data + * @return true on success, false otherwise + */ + private String validateDataOnContinue() { + + String errorMessage = null; + + if(titleTextBox.getText().isEmpty()){ + errorMessage = "Missing title"; + return errorMessage; + } + + // better check for the title + String regexTitleSubWord = "^[a-zA-Z0-9_]+$"; + String[] splittedTitle = titleTextBox.getText().split(" "); + + for (String word : splittedTitle) { + + if(!word.matches(regexTitleSubWord)) + return "Please note that only alphanumeric characters are allowed for the title"; + + } + + // name reg expression + String regexName = "^[a-zA-Z\\s]+"; + if(!validateByRegExpression(maintainerTextbox.getText(), regexName)){ + errorMessage = "Not valid maintainer name"; + return errorMessage; + } + + // email reg expression + String regexMail = "\\b[\\w.%-]+@[-.\\w]+\\.[A-Za-z]{2,4}\\b"; + if(!validateByRegExpression(maintainerEmailTextbox.getText(), regexMail)){ + errorMessage = "Not valid maintainer email"; + return errorMessage; + } + + // check if metadata profile is different from none and its mandatory fields have been fulfilled + if(checkSelectedMetaDataProfile()){ + errorMessage = "You must select a metadata profile different frome none"; + } + + if(organizationsListbox.getSelectedItemText() == null){ + errorMessage = "You must select an organization in which you want to publish"; + } + + return errorMessage; + } + + /** + * Checks if a metadata profile has been chosen and its fields have been fulfilled + * @return + */ + private boolean checkSelectedMetaDataProfile() { + return metadataProfilesFormatListbox.getSelectedItemText().equals("none"); + } + + /** + * Validate a text against a regular expression. + * @param textToValidate + * @param regex + * @return + */ + private boolean validateByRegExpression(String textToValidate, String regex){ + return textToValidate.matches(regex); + } + + @UiHandler("resetButton") + void resetFormEvent(ClickEvent e){ + + // reset main fields + titleTextBox.setText(""); + descriptionTextarea.setText(""); + versionTextbox.setText(""); + maintainerTextbox.setText(""); + maintainerEmailTextbox.setText(""); + removeTags(); + + // delete custom fields + for (CustomFieldEntry customField : customFieldEntriesList) { + customField.removeFromParent(); + } + customFieldEntriesList.clear(); + + } + + /** + * Disable dataset editable fields once the dataset has been + * Successfully created. + */ + protected void disableDatasetFields() { + + titleTextBox.setEnabled(false); + descriptionTextarea.setEnabled(false); + versionTextbox.setEnabled(false); + maintainerTextbox.setEnabled(false); + maintainerEmailTextbox.setEnabled(false); + visibilityListbox.setEnabled(false); + tagsEnterTextBox.setEnabled(false); + licenseListbox.setEnabled(false); + organizationsListbox.setEnabled(false); + addCustomFieldButton.setEnabled(false); + + // freeze tags + for(int i = 0; i < tagsList.size(); i++){ + + // get tag widget + ListItem tagWidget = (ListItem)tagsPanel.getWidget(i); + + // get the "x" span + tagWidget.getWidget(1).removeFromParent(); + + } + + // disable profile fields + for (MetaDataFieldSkeleton field : listOfMetadataFields) { + + field.freeze(); + + } + + } + + /** + * change alert block behavior. + * @param textToShow + * @param type + * @param visible + */ + private void setAlertBlock(String textToShow, AlertType type, boolean visible){ + + infoBlock.setText(textToShow); + infoBlock.setType(type); + infoBlock.setVisible(visible); + + } + + @UiHandler("tagsEnterTextBox") + void onAddTag(KeyDownEvent event){ + + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + if (!"".equals(tagsEnterTextBox.getValue().trim())) { + + addTagElement(tagsEnterTextBox); + + } + } + } + + /** + * Add the tag as an element + */ + private void addTagElement(TextBox itemBox){ + + if (itemBox.getValue() != null && !"".equals(itemBox.getValue().trim())) { + + if(tagsList.contains(itemBox.getValue())) + return; + + // ckan accepts only alphanumeric values + if(!itemBox.getValue().matches("^[a-zA-Z0-9]*$")) + return; + + if(itemBox.getValue().length() <= 1) + return; + + final String value = itemBox.getValue(); + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("tag-style"); + Span tagText = new Span(itemBox.getValue()); + + Span tagRemove = new Span("x"); + tagRemove.setTitle("Remove this tag"); + tagRemove.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeTag(displayItem, value); + } + }); + + tagRemove.setStyleName("tag-style-x"); + displayItem.add(tagText); + displayItem.add(tagRemove); + itemBox.setValue(""); + itemBox.setFocus(true); + tagsPanel.add(displayItem); + tagsList.add(value); + } + } + + /** + * Add the tag as an element + */ + private void addTagElement(final String tag){ + + if(tagsList.contains(tag)) return; - // ckan accepts only alphanumeric values - if(!itemBox.getValue().matches("^[a-zA-Z0-9]*$")) - return; - - if(itemBox.getValue().length() <= 1) - return; - - final String value = itemBox.getValue(); final ListItem displayItem = new ListItem(); displayItem.setStyleName("tag-style"); - Span tagText = new Span(itemBox.getValue()); + Span p = new Span(tag); - Span tagRemove = new Span("x"); - tagRemove.setTitle("Remove this tag"); - tagRemove.addClickHandler(new ClickHandler() { + Span span = new Span("x"); + span.setTitle("Remove this tag"); + span.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { - removeTag(displayItem, value); + removeTag(displayItem, tag); } }); - tagRemove.setStyleName("tag-style-x"); - displayItem.add(tagText); - displayItem.add(tagRemove); - itemBox.setValue(""); - itemBox.setFocus(true); + span.setStyleName("tag-style-x"); + displayItem.add(p); + displayItem.add(span); tagsPanel.add(displayItem); - tagsList.add(value); + tagsList.add(tag); + } + + /** + * Remove a tag from the list + * @param displayItem + */ + private void removeTag(ListItem displayItem, String value) { + + tagsList.remove(value); + tagsPanel.remove(displayItem); + + } + + /** + * Remove all inserted tags + */ + private void removeTags(){ + + tagsList.clear(); + tagsPanel.clear(); + } } - - /** - * Add the tag as an element - */ - private void addTagElement(final String tag){ - - if(tagsList.contains(tag)) - return; - - final ListItem displayItem = new ListItem(); - displayItem.setStyleName("tag-style"); - Span p = new Span(tag); - - Span span = new Span("x"); - span.setTitle("Remove this tag"); - span.addClickHandler(new ClickHandler() { - public void onClick(ClickEvent clickEvent) { - removeTag(displayItem, tag); - } - }); - - span.setStyleName("tag-style-x"); - displayItem.add(p); - displayItem.add(span); - tagsPanel.add(displayItem); - tagsList.add(tag); - } - - /** - * Remove a tag from the list - * @param displayItem - */ - private void removeTag(ListItem displayItem, String value) { - - tagsList.remove(value); - tagsPanel.remove(displayItem); - - } - - /** - * Remove all inserted tags - */ - private void removeTags(){ - - tagsList.clear(); - tagsPanel.clear(); - - } -}