diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java
index 2fccaf9..e697b2e 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java
@@ -126,7 +126,7 @@ public class CKanMetadataPublisher implements EntryPoint {
String idFolderWorkspace = "d3a37eb9-1589-4c95-a9d0-c473a02d4f0f";
String owner = "costantino.perciante";
- RootPanel.get("ckan-metadata-publisher-div").add(new CreateDatasetForm(idFolderWorkspace ,owner, eventBus));
+ RootPanel.get("ckan-metadata-publisher-div").add(new CreateDatasetForm(idFolderWorkspace, eventBus));
}
}
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java
index 1dfc401..ccf277a 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java
@@ -58,4 +58,12 @@ public interface CKanPublisherService extends RemoteService {
* @return true on success, false otherwise
*/
boolean deleteResourceFromDataset(ResourceBeanWrapper resource);
+
+ /**
+ * Given the title the user wants to give to the new product to create, a check is performed
+ * to understand if a dataset with the proposed title (and so the id generateda at server side) already exists
+ * @param title
+ * @return true if it exists, false otherwise
+ */
+ boolean datasetIdAlreadyExists(String title);
}
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java
index 1308a7f..942a08d 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java
@@ -60,4 +60,12 @@ public interface CKanPublisherServiceAsync {
*/
void getProfiles(String orgName, AsyncCallback> callback);
+ /**
+ * Given the title the user wants to give to the new product to create, a check is performed
+ * to understand if a dataset with the proposed title (and so the id generateda at server side) already exists
+ * @param title
+ * @return true if it exists, false otherwise
+ */
+ void datasetIdAlreadyExists(String title, AsyncCallback callback);
+
}
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 9af0288..201d87b 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
@@ -156,6 +156,9 @@ public class CreateDatasetForm extends Composite{
@UiField Icon infoIconResources;
@UiField FocusPanel focusPanelResources;
@UiField Popover popoverResources;
+ @UiField Icon infoIconTitle;
+ @UiField FocusPanel focusPanelTitle;
+ @UiField Popover popoverTitle;
@UiField ControlGroup metadataProfilesControlGroup;
@UiField ControlGroup productTitleGroup;
@UiField ControlGroup maintainerControlGroup;
@@ -208,9 +211,9 @@ public class CreateDatasetForm extends Composite{
* Invoked in the most general case
* @param owner
*/
- public CreateDatasetForm(String owner, HandlerManager eventBus) {
+ public CreateDatasetForm(HandlerManager eventBus) {
- createDatasetFormBody(false, null, owner, eventBus);
+ createDatasetFormBody(false, null, eventBus);
}
@@ -219,9 +222,9 @@ public class CreateDatasetForm extends Composite{
* @param idFolderWorkspace
* @param owner
*/
- public CreateDatasetForm(String idFolderWorkspace, String owner, HandlerManager eventBus) {
+ public CreateDatasetForm(String idFolderWorkspace, HandlerManager eventBus) {
- createDatasetFormBody(true, idFolderWorkspace, owner, eventBus);
+ createDatasetFormBody(true, idFolderWorkspace, eventBus);
}
@@ -263,12 +266,10 @@ public class CreateDatasetForm extends Composite{
* @param owner
* @param eventBus
*/
- private void createDatasetFormBody(final boolean isWorkspaceRequest, String idFolderWorkspace, String owner, final HandlerManager eventBus){
+ private void createDatasetFormBody(final boolean isWorkspaceRequest, String idFolderWorkspace, final HandlerManager eventBus){
initWidget(uiBinder.createAndBindUi(this));
- this.owner = owner;
-
// save event bus
this.eventBus = eventBus;
@@ -634,7 +635,6 @@ public class CreateDatasetForm extends Composite{
}else{
alertOnContinue("Please check inserted data [" + errorMsg + "]", AlertType.ERROR);
}
-
}
@@ -958,6 +958,15 @@ public class CreateDatasetForm extends Composite{
focusPanelResources
);
+ // title
+ preparePopupPanelAndPopover(
+ InfoIconsLabels.TITLE_INFO_ID_POPUP,
+ InfoIconsLabels.TITLE_INFO_TEXT,
+ InfoIconsLabels.TITLE_INFO_CAPTION,
+ infoIconTitle,
+ popoverTitle,
+ focusPanelTitle
+ );
}
/**
@@ -1040,8 +1049,6 @@ public class CreateDatasetForm extends Composite{
*/
private String validateDataOnContinue() {
- String errorMessage = null;
-
// remove errors
productTitleGroup.setType(ControlGroupType.NONE);
maintainerControlGroup.setType(ControlGroupType.NONE);
@@ -1050,52 +1057,51 @@ public class CreateDatasetForm extends Composite{
organizationsGroup.setType(ControlGroupType.NONE);
if(titleTextBox.getText().isEmpty()){
- errorMessage = "Missing title";
productTitleGroup.setType(ControlGroupType.ERROR);
- return errorMessage;
+ return "Missing title";
}
- // better check for the title
- String regexTitleSubWord = "^[a-zA-Z0-9_]+$";
- String[] splittedTitle = titleTextBox.getText().split(" ");
+ // better check for the title
+ String regexTitleSubWord = "[^a-zA-Z0-9_.-]";
+ String[] splittedTitle = titleTextBox.getText().split(" ");
for (String word : splittedTitle) {
-
- if(!word.matches(regexTitleSubWord)){
+ String replaced = word.replaceAll(regexTitleSubWord, "");
+ if(!replaced.equals(word)){
productTitleGroup.setType(ControlGroupType.ERROR);
- return "Please note that only alphanumeric characters are allowed for the title";
+ return "Please note that only alphanumeric characters are allowed for the title";
}
-
}
// email reg expression
String regexMail = "\\b[\\w.%-]+@[-.\\w]+\\.[A-Za-z]{2,4}\\b";
if(!validateByRegExpression(maintainerEmailTextbox.getText(), regexMail)){
- errorMessage = "Not valid maintainer email";
maintainerControlGroup.setType(ControlGroupType.ERROR);
- return errorMessage;
+ return "Not valid maintainer email";
}
// check if version is a number
try{
- Integer.valueOf(versionTextbox.getText());
+ int number = Integer.valueOf(versionTextbox.getText());
+ if(number <= 0)
+ throw new Exception();
}catch(Exception e){
versionControlGroup.setType(ControlGroupType.ERROR);
- return errorMessage = "Version must be a natural number";
+ return "Version must be a natural number greater than zero";
}
// 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";
metadataProfilesControlGroup.setType(ControlGroupType.ERROR);
+ return "You must select a metadata profile different frome none";
}
if(organizationsListbox.getSelectedItemText() == null){
organizationsGroup.setType(ControlGroupType.ERROR);
- errorMessage = "You must select an organization in which you want to publish";
+ return "You must select an organization in which you want to publish";
}
- return errorMessage;
+ return null;
}
/**
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml
index aa694c8..b447625 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml
@@ -62,7 +62,15 @@
+ width="90%" b:id="title" title="Product title" ui:field="titleTextBox" />
+
+
+
+
+
+
+
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java
index 5ef0f46..3617714 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java
@@ -317,9 +317,7 @@ public class MetaDataFieldSkeleton extends Composite{
List vocabulary = field.getVocabulary();
for (String term : vocabulary) {
-
((ListBox)holder).addItem(term);
-
}
// set default value
@@ -574,7 +572,7 @@ public class MetaDataFieldSkeleton extends Composite{
if(field.getValidator() == null || field.getValidator().isEmpty())
return null; // no further check
else return checkValidator(textBoxValue, field.getValidator()) ? null : MALFORMED_ATTRIBUTE;
- else return " a mandatory attribute cannot be empty";
+ else return MANDATORY_ATTRIBUTE_MISSING;
}else{
if(textBoxValue.trim().isEmpty())
@@ -582,7 +580,25 @@ public class MetaDataFieldSkeleton extends Composite{
else return checkValidator(textBoxValue, field.getValidator()) ? null : MALFORMED_ATTRIBUTE;
}
}
- else return null;
+ else{
+
+ String listBoxCurrentValue = getFieldCurrentValue();
+
+ // listbox case
+ if(!field.getMandatory()){
+
+ if(field.getValidator() == null || field.getValidator().isEmpty())
+ return null;
+ else
+ return checkValidator(listBoxCurrentValue, field.getValidator()) ? null : MALFORMED_ATTRIBUTE;
+
+ }else{
+
+ return listBoxCurrentValue == null || listBoxCurrentValue.isEmpty() ? MANDATORY_ATTRIBUTE_MISSING : null;
+
+ }
+
+ }
default: return null;
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/utils/InfoIconsLabels.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/utils/InfoIconsLabels.java
index a3abd8b..8d61144 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/utils/InfoIconsLabels.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/utils/InfoIconsLabels.java
@@ -58,5 +58,10 @@ public class InfoIconsLabels {
public static final String CUSTOM_FIELDS_INFO_ID_POPUP = "custom-fields-popup-panel-info";
public static final String CUSTOM_FIELDS_INFO_CAPTION = "Product Custom Fields";
public static final String CUSTOM_FIELDS_INFO_TEXT = "Custom fields are customable metadata that will be added to the product. You have to choose a unique key for the field and a value for this. You can remove them at any time until you create theproduct.";
+
+ // TITLE
+ public static final String TITLE_INFO_ID_POPUP = "title-popup-panel-info";
+ public static final String TITLE_INFO_TEXT = "Product Title";
+ public static final String TITLE_INFO_CAPTION = "Product Title must contain only alphanumer characters and [. - _]. No others symbols are allowed.";
}
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java
index 54c6fa0..8972507 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java
@@ -11,6 +11,7 @@ import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
import org.gcube.common.homelibrary.home.HomeLibrary;
import org.gcube.common.homelibrary.home.workspace.Workspace;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
import org.gcube.common.homelibrary.home.workspace.catalogue.WorkspaceCatalogue;
import org.gcube.common.homelibrary.home.workspace.folder.FolderItem;
@@ -50,7 +51,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
public static final String TEST_SCOPE = "/gcube/devsec/devVRE";
public static final String TEST_USER = "test.user";
private final static String TEST_SEC_TOKEN = "a1e19695-467f-42b8-966d-bf83dd2382ef";
-
+
/**
* Retrieve an instance of the library for the scope
* @param scope if it is null it is evaluated from the session
@@ -346,7 +347,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
WorkspaceItem originalFolder = ws.getItem(folderId);
// set some info
- String onlyAlphanumeric = originalFolder.getName().replaceAll("[^A-Za-z0-9]", ""); // that is, remove characters different than A-Z,a-z,0-9
+ String onlyAlphanumeric = originalFolder.getName().replaceAll("[^A-Za-z0-9.-_]", " "); // that is, remove characters different than the ones inside
bean.setTitle(onlyAlphanumeric);
bean.setDescription(originalFolder.getDescription());
@@ -359,9 +360,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
for (WorkspaceItem file : originalFolder.getChildren()) {
if(!file.isFolder()){
-
childrenIds.add(file.getId());
-
}
}
@@ -381,19 +380,29 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
private List copyResourcesToUserCatalogueArea(
List resourcesToAdd, String folderId, String userName, DatasetMetadataBean bean) throws Exception{
+ logger.debug("Request to copy onto catalogue area. Parameters are resources to add" + resourcesToAdd);
+ logger.debug("Request to copy onto catalogue area. Folder id is " + folderId);
+ logger.debug("Request to copy onto catalogue area. Username is " + userName);
+ logger.debug("Request to copy onto catalogue area. DatasetMetadataBean is " + bean);
+
// in to the .catalogue area of the user's workspace
Workspace ws = HomeLibrary
.getHomeManagerFactory()
.getHomeManager()
- .getHome(userName).getWorkspace();
-
- WorkspaceItem originalFolder = ws.getItem(folderId);
+ .getHome(userName)
+ .getWorkspace();
// Retrieve the catalogue of the user
WorkspaceCatalogue userCatalogue = ws.getCatalogue();
// Create the folder in the catalogue
- WorkspaceItem copiedFolder = userCatalogue.addWorkspaceItem(originalFolder.getPath(), null); // add to .catalogue root
+ WorkspaceItem copiedFolder = userCatalogue.addWorkspaceItem(folderId, userCatalogue.getId()); // add to .catalogue root area
+
+ // change description for the folder
+ copiedFolder.setDescription(bean.getDescription());
+
+ // change name of the copied folder to match the title
+ ((WorkspaceFolder)copiedFolder).rename(org.gcube.datacatalogue.ckanutillibrary.utils.UtilMethods.nameFromTitle(bean.getTitle()));
List resources = new ArrayList();
@@ -404,14 +413,21 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
// ok it is a file, so copy it into the copiedFolder
WorkspaceItem copiedFile = userCatalogue.addWorkspaceItem(resourceBeanWrapper.getId(), copiedFolder.getId());
+
+ // name and description could have been edited
+ copiedFile.setDescription(resourceBeanWrapper.getDescription());
+
resources.add(new ResourceBean(
copiedFile.getPublicLink(true),
- copiedFile.getName(),
+ resourceBeanWrapper.getName(),
copiedFile.getDescription(),
copiedFile.getId(),
userName,
null, // to be set
((FolderItem)copiedFile).getMimeType()));
+
+ // postpone rename operation
+ copiedFile.rename(resourceBeanWrapper.getName());
}
}
@@ -459,7 +475,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
}
- logger.debug("The user wants to publish in organization with name " + organizationNameOrId + " and current scope name is " + aslSession.getScopeName());
+ logger.debug("The user wants to publish in organization with name " + organizationNameOrId);
String scope = Utils.retrieveScopeFromOrganizationName(organizationNameOrId);
CKanUtils utils = getCkanUtilsObj(scope);
@@ -594,4 +610,22 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
return toReturn;
}
+
+ @Override
+ public boolean datasetIdAlreadyExists(String title) {
+
+ if(title == null || title.isEmpty())
+ return true; // it's an error somehow
+
+ try{
+
+ String scope = (String)getThreadLocalRequest().getSession().getAttribute(SessionCatalogueAttributes.SCOPE_CLIENT_PORTLET_URL);
+ return getCkanUtilsObj(scope).existProductWithNameOrId(title);
+
+ }catch(Exception e){
+ logger.error("Unable to check if such a dataset id already exists", e);
+ }
+
+ return false;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/Utils.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/Utils.java
index 1f03e95..069fd68 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/Utils.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/Utils.java
@@ -113,7 +113,6 @@ public class Utils {
}
} catch (InternalErrorException e) {
logger.error("Error in server getItemProperties: ", e);
- return null;
}
}
return null;
@@ -163,10 +162,6 @@ public class Utils {
// get highest role according liferay
RolesIntoOrganization correspondentRoleToCheck = getLiferayHighestRoleInOrg(roles);
- // if the role is member, continue
- if(correspondentRoleToCheck.equals(RolesIntoOrganization.MEMBER))
- continue;
-
checkIfRoleIsSetInCkanInstance(username, gCubeGroupName, gCubeGroup.getGroupId(), correspondentRoleToCheck, toReturn, groupManager, ckanPublisherServicesImpl);
}
@@ -184,10 +179,6 @@ public class Utils {
// get highest role according liferay
RolesIntoOrganization correspondentRoleToCheck = getLiferayHighestRoleInOrg(roles);
- // if the role is member, continue
- if(correspondentRoleToCheck.equals(RolesIntoOrganization.MEMBER))
- continue;
-
checkIfRoleIsSetInCkanInstance(username, gCubeGroupName, gCubeGroup.getGroupId(), correspondentRoleToCheck, toReturn, groupManager, ckanPublisherServicesImpl);
}
@@ -199,10 +190,7 @@ public class Utils {
// get highest role according liferay
RolesIntoOrganization correspondentRoleToCheck = getLiferayHighestRoleInOrg(roles);
- if(correspondentRoleToCheck.equals(RolesIntoOrganization.ADMIN)){
-
- checkIfRoleIsSetInCkanInstance(username, groupName, currentGroupId, correspondentRoleToCheck, toReturn, groupManager, ckanPublisherServicesImpl);
- }
+ checkIfRoleIsSetInCkanInstance(username, groupName, currentGroupId, correspondentRoleToCheck, toReturn, groupManager, ckanPublisherServicesImpl);
}
}catch(Exception e){
logger.error("Unable to retrieve the role information for this user. Returning member role", e);
@@ -235,12 +223,11 @@ public class Utils {
// if there is an instance of ckan in this scope..
if(ckanUtils != null){
boolean res = ckanUtils.checkRole(username, gCubeGroupName, correspondentRoleToCheck);
- if(res){
-
- // get the orgs of the user
+ if(res && !correspondentRoleToCheck.equals(RolesIntoOrganization.MEMBER)){
+ // get the orgs of the user and retrieve its title and name
List ckanOrgs = ckanUtils.getOrganizationsByUser(username);
for (CkanOrganization ckanOrganization : ckanOrgs) {
- if(ckanOrganization.getName().equals(gCubeGroupName.toLowerCase())){//|| ckanOrganization.getName().equals(CKanUtilsImpl.PRODUCTION_CKAN_ORGNAME_ROOT)){
+ if(ckanOrganization.getName().equals(gCubeGroupName.toLowerCase())){
orgs.add(new OrganizationBean(ckanOrganization.getTitle(), ckanOrganization.getName()));
break;
}
@@ -262,6 +249,9 @@ public class Utils {
if(gCubeRole.getRoleName().equalsIgnoreCase(GatewayRolesNames.CATALOGUE_ADMIN.getRoleName())){
return RolesIntoOrganization.ADMIN;
}
+ if(gCubeRole.getRoleName().equalsIgnoreCase(GatewayRolesNames.CATALOGUE_EDITOR.getRoleName())){
+ return RolesIntoOrganization.EDITOR;
+ }
}
return RolesIntoOrganization.MEMBER;
}
@@ -296,10 +286,6 @@ public class Utils {
if(scope != null){
-
- // if(scope.equals(CKanUtilsImpl.PRODUCTION_SCOPE_ROOT))
- // return CKanUtilsImpl.PRODUCTION_CKAN_ORGNAME_ROOT;
-
GroupManager gm = new LiferayGroupManager();
return gm.getGroup(gm.getGroupIdFromInfrastructureScope(scope)).getGroupName().toLowerCase();
}
@@ -319,7 +305,7 @@ public class Utils {
// check the scope we need to discover
String scopeInWhichDiscover = (scope != null && !scope.isEmpty()) ? scope : aslSession.getScope();
-
+
logger.debug("Discovering into scope " + scopeInWhichDiscover);
// scope in which we need to discover
@@ -361,7 +347,7 @@ public class Utils {
wrapperObj.setValidator(validator.getRegularExpression());
MetadataVocabulary vocabulary = metadataField.getVocabulary();
-
+
if(vocabulary != null){
wrapperObj.setVocabulary(vocabulary.getVocabularyFields());
wrapperObj.setMultiSelection(vocabulary.isMultiSelection());
@@ -388,7 +374,7 @@ public class Utils {
} catch (Exception e) {
logger.error("Error while retrieving metadata beans ", e);
}finally{
-
+
// set the scope back
if(oldScope != scopeInWhichDiscover)
ScopeProvider.instance.set(oldScope);
diff --git a/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java b/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java
index c13232c..eccf995 100644
--- a/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java
+++ b/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java
@@ -1,7 +1,21 @@
package org.gcube.portlets.widgets.ckandatapublisherwidget.client;
+import java.util.List;
+
+import org.gcube.common.homelibrary.home.HomeLibrary;
+import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
+import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
+import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException;
+import org.gcube.common.homelibrary.home.workspace.Workspace;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
+import org.gcube.common.homelibrary.home.workspace.catalogue.WorkspaceCatalogue;
+import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
+import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.widgets.ckandatapublisherwidget.server.CKANPublisherServicesImpl;
+
public class TestClass {
//@Test
@@ -11,4 +25,69 @@ public class TestClass {
}
+ //@Test
+ public void testCopyResources() throws WorkspaceFolderNotFoundException, InternalErrorException, HomeNotFoundException, UserNotFoundException, ItemNotFoundException{
+
+ ScopeProvider.instance.set("/gcube/devNext/NextNext");
+
+ Workspace ws = HomeLibrary
+ .getHomeManagerFactory()
+ .getHomeManager()
+ .getHome("costantino.perciante").getWorkspace();
+
+ WorkspaceItem originalFolder = ws.getItem("d3a37eb9-1589-4c95-a9d0-c473a02d4f0f");
+
+ List extends WorkspaceItem> children = originalFolder.getChildren();
+ // System.out.println("Folder is " + originalFolder.getName());
+ // for (WorkspaceItem workspaceItem : children) {
+ // System.out.println("Child is " + workspaceItem.getName());
+ // }
+
+ // copy to catalogue
+ WorkspaceCatalogue userCatalogue = ws.getCatalogue();
+
+ WorkspaceItem copiedFolder = userCatalogue.addWorkspaceItem(originalFolder.getId(), userCatalogue.getId());
+ System.out.println(copiedFolder.isHidden());
+ // for (WorkspaceItem workspaceItem : children) {
+ // WorkspaceItem copiedChildren = userCatalogue.addWorkspaceItem(workspaceItem.getId(), copiedFolder.getId());
+ // System.out.println("****************************** Copied file has path " + copiedChildren.getPath());
+ // }
+
+ // look at catalogue structure
+ List catalogueChildrens = ((WorkspaceFolder)userCatalogue).getChildren(true);
+ if(catalogueChildrens.isEmpty())
+ System.out.println("****************************** Catalogue Child list is empty");
+ else for (WorkspaceItem catalogueItem : catalogueChildrens) {
+ System.out.println("****************************** Catalogue Child is " + catalogueItem.getName());
+ if(catalogueItem.isFolder()){
+ WorkspaceFolder catalogueFolder = (WorkspaceFolder) catalogueItem;
+ System.out.println("**************************" + catalogueFolder.getName() + " it is a folder, printing children");
+ List extends WorkspaceItem> copiedFolderChildren = catalogueFolder.getChildren(true);
+ for (WorkspaceItem copiedFolderChildrenItem : copiedFolderChildren) {
+ System.out.println("****************************** Child is " + copiedFolderChildrenItem.getName());
+ copiedFolderChildrenItem.getPublicLink(true);
+ }
+ }
+ }
+ }
+
+ //@Test
+ public void testTitle(){
+
+ // String regexTitleSubWord = "[^a-zA-Z0-9_.-]";
+ // String title = "this is a test title .";
+ // String[] splittedTitle = title.split(" ");
+ //
+ // for (String word : splittedTitle) {
+ // System.out.println("Word is " + word);
+ // String replaced = word.replaceAll(regexTitleSubWord, "");
+ // System.out.println("Replaced Word is " + replaced);
+ // if(!replaced.equals(word)){
+ // System.out.println("Please note that only alphanumeric characters are allowed for the title");
+ // }
+ // }
+
+ System.out.println("Notification_portlet".replaceAll("[^A-Za-z0-9.-_]", " "));
+ }
+
}