Fixed the Update facility, #24166

This commit is contained in:
Francesco Mangiacrapa 2023-05-02 15:16:59 +02:00
parent c330148ac5
commit 2f7d93cd8e
3 changed files with 179 additions and 45 deletions

View File

@ -241,7 +241,6 @@ public class UpdateRecord extends Composite {
String htmlMsg = "Updating the section <b>"+listBoxSections.getSelectedItemText()+"</b> of the project with:";
htmlMsg += "<ul>";
htmlMsg += "<li>id: " + projectID + "</li>";
htmlMsg += "<li>profile: " + profileID + "</li>";
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
htmlMsg += "</ul>";
@ -281,7 +280,6 @@ public class UpdateRecord extends Composite {
String htmlMsg = "The project with:";
htmlMsg += "<ul>";
htmlMsg += "<li>id: " + projectID + "</li>";
htmlMsg += "<li>profile: " + profileID + "</li>";
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
htmlMsg += "</ul>";

View File

@ -232,6 +232,17 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
}
}
/**
* Update geportal data form.
*
* @param profileID the profile ID
* @param projectID the project ID
* @param section the section
* @param sectionPath the section path
* @param listFilePaths the list file paths
* @return the commit report
* @throws Exception the exception
*/
@Override
public CommitReport updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
String sectionPath, List<FilePathDV> listFilePaths) throws Exception {
@ -327,6 +338,14 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
if (listFilePaths != null) {
// Collecting new files
List<? extends FileUploaded> filesUploaded = sectionBean.getFilesUploaded();
Map<String, FileSetDataObject> mapFilesToRegistrer = null;
if (filesUploaded != null && !filesUploaded.isEmpty()) {
mapFilesToRegistrer = collectFiles(currentProject, sectionPath, section.getGcubeProfileDV(),
filesUploaded);
}
// Cleaning all the fileset path of the section (defined in the UCD)
for (FilePathDV filePath : listFilePaths) {
@ -342,11 +361,27 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
}
}
// Registering new files
List<? extends FileUploaded> filesUploaded = sectionBean.getFilesUploaded();
if (filesUploaded != null && !filesUploaded.isEmpty()) {
replaceFiles(currentProject, sectionPath, section.getGcubeProfileDV(), filesUploaded);
// Registering fileset in the section according to mapFilesToRegistrer
if (mapFilesToRegistrer != null && mapFilesToRegistrer.size()>0) {
LOG.info("Cluster of fileset per fieldDefinition is: " + mapFilesToRegistrer);
String theJSONDocument = currentProject.getTheDocument().toJson();
MongoServiceUtil mongoService = new MongoServiceUtil();
for (String fieldDefinition : mapFilesToRegistrer.keySet()) {
FileSetDataObject uploadedFileset = mapFilesToRegistrer.get(fieldDefinition);
LOG.info("Uploading fileset: " + uploadedFileset);
File[] fileset = uploadedFileset.getFileset();
FilePathDV filePath = uploadedFileset.getFilePathDV();
Access access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument,
sectionPath);
LOG.info("Going to register fileset: " + Arrays.asList(fileset).toString());
mongoService.registerFileSet(currentProject.getProfileID(), currentProject, sectionPath,
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
}
}
}
LOG.info("Project with id " + currentProject.getId() + " updated correclty");
@ -530,6 +565,84 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
}
/**
* Collect files.
*
* @param theProject the the project
* @param sectionJSONPath the section JSON path
* @param gcubeProfile the gcube profile
* @param files the files
* @return the map of files that must be registered
* @throws Exception the exception
*/
protected Map<String, FileSetDataObject> collectFiles(Project theProject, String sectionJSONPath,
GcubeProfileDV gcubeProfile, List<? extends FileUploaded> files) throws Exception {
LOG.debug("collectFiles called [projectID: " + theProject.getId() + "], [sectionJSONPath: " + sectionJSONPath
+ "], [files: " + files + "]");
Map<String, FileSetDataObject> collectFilesetPerFieldDef = new HashMap<String, FileSetDataObject>();
if (files.size() > 0) {
// Iterating on the files upload for the section
for (int i = 0; i < files.size(); i++) {
FileUploaded file = files.get(i);
String formFieldName = file.getFilePath().getFormFieldLabel();
LOG.debug("Uploading file: " + file.getFileName() + ", from formFieldName: " + formFieldName);
FilePathDV filePath = retrieveFilePathForGcubeProfileFieldName(formFieldName, gcubeProfile);
LOG.info("Found {} for the form fieldName {}", filePath, formFieldName);
if (filePath == null) {
String error = "It is not possible to register the file " + formFieldName
+ ", missing configuration in the filePaths config of: " + gcubeProfile;
throw new Exception(error);
}
// Collecting Fileset per Field Definition
FileSetDataObject collFieldDef = collectFilesetPerFieldDef.get(filePath.getFieldDefinition());
if (collFieldDef == null) {
collFieldDef = new FileSetDataObject();
collFieldDef.setFilePathDV(filePath);
}
try {
File tempDir = Files.createTempDirectory("GEOPORTAL_REPLACE_FILES_").toFile();
String tmpDirPath = tempDir.getAbsolutePath();
File input;
File output;
if (file instanceof FileUploadedRemote) {
FileUploadedRemote remote = (FileUploadedRemote) file;
LOG.info("Uploaded file is remote: " + remote.getUrl());
InputStream in = new URL(remote.getUrl()).openStream();
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
? "file_" + Random.nextInt()
: remote.getFileName();
output = new File(tmpDirPath, fileName);
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
LOG.info("Remote file: " + remote.getUrl() + ", copied to new file: " + output.getName());
} else {
LOG.info("Uploaded file is local: " + file.getTempSystemPath());
input = new File(file.getTempSystemPath());
output = new File(tmpDirPath, file.getFileName());
copyContent(input, output);
LOG.info(
"Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
}
collFieldDef.addFile(output);
tempDir.deleteOnExit();
} catch (Exception e) {
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage());
}
collectFilesetPerFieldDef.put(filePath.getFieldDefinition(), collFieldDef);
}
}
return collectFilesetPerFieldDef;
}
/**
* Replace files.
*
@ -576,7 +689,9 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
FileUploadedRemote remote = (FileUploadedRemote) file;
LOG.info("Uploaded file is remote: " + remote.getUrl());
InputStream in = new URL(remote.getUrl()).openStream();
String fileName = (remote.getFileName()==null || remote.getFileName().isEmpty())?"file_"+Random.nextInt():remote.getFileName();
String fileName = (remote.getFileName() == null || remote.getFileName().isEmpty())
? "file_" + Random.nextInt()
: remote.getFileName();
output = new File(tmpDirPath, fileName);
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
@ -613,7 +728,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
FilePathDV filePath = uploadedFileset.getFilePathDV();
Access access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument, sectionJSONPath);
LOG.info("Going to registrer files: " + Arrays.asList(fileset).toString());
LOG.info("Going to register files: " + Arrays.asList(fileset).toString());
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath,
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
@ -1397,6 +1512,14 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
return null;
}
/**
* Gets the project edit.
*
* @param profileID the profile ID
* @param projectID the project ID
* @return the project edit
* @throws Exception the exception
*/
@Override
public ProjectEdit getProjectEdit(String profileID, String projectID) throws Exception {
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
@ -1417,16 +1540,25 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectEdit);
}
LOG.info(ProjectEdit.class.getSimpleName()+" returing not null: " + (projectEdit != null));
LOG.info(ProjectEdit.class.getSimpleName() + " returing not null: " + (projectEdit != null));
return projectEdit;
} catch (Exception e) {
String erroMsg = "Error occurred on reading "+ProjectEdit.class.getSimpleName()+" DTO for id: " + projectID;
String erroMsg = "Error occurred on reading " + ProjectEdit.class.getSimpleName() + " DTO for id: "
+ projectID;
LOG.warn(erroMsg, e);
throw new Exception(
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
}
}
/**
* Gets the project view.
*
* @param profileID the profile ID
* @param projectID the project ID
* @return the project view
* @throws Exception the exception
*/
@Override
public ProjectView getProjectView(String profileID, String projectID) throws Exception {
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
@ -1447,10 +1579,11 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
Geoportal_JSON_Mapper.prettyPrintProjectView(projectView);
}
LOG.info(ProjectView.class.getSimpleName()+" returing not null: " + (projectView != null));
LOG.info(ProjectView.class.getSimpleName() + " returing not null: " + (projectView != null));
return projectView;
} catch (Exception e) {
String erroMsg = "Error occurred on reading "+ProjectView.class.getSimpleName()+" DTO for id: " + projectID;
String erroMsg = "Error occurred on reading " + ProjectView.class.getSimpleName() + " DTO for id: "
+ projectID;
LOG.warn(erroMsg, e);
throw new Exception(
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");

View File

@ -97,37 +97,40 @@ public class Service_Tests {
Project doc = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
List<String> matchingPaths = wrapper.getMatchingPaths(path);
LOG.info("matchingPaths is: " + matchingPaths);
String error = null;
if (matchingPaths.isEmpty()) {
error = "No Registered FileSet found at " + path;
if (!ignore_errors) {
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
}
}
if (matchingPaths.size() > 1 && !ignore_errors) {
error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
if (!ignore_errors)
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
}
if (error != null && ignore_errors) {
LOG.info("Error detected {}. Ignoring it and returning input doc", error);
}
List<Object> listPath = wrapper.getByPath(path);
LOG.info("List path: " + listPath);
// JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
// List<String> matchingPaths = wrapper.getMatchingPaths(path);
//
// LOG.info("matchingPaths is: " + matchingPaths);
//
// String error = null;
// if (matchingPaths.isEmpty()) {
// error = "No Registered FileSet found at " + path;
// if (!ignore_errors) {
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
// }
// }
// if (matchingPaths.size() > 1 && !ignore_errors) {
// error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
// if (!ignore_errors)
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
// }
//
// if (error != null && ignore_errors) {
// LOG.info("Error detected {}. Ignoring it and returning input doc", error);
//
// }
//
// List<Object> listPath = wrapper.getByPath(path);
// LOG.info("List path: " + listPath);
// RegisteredFileSet fs = Serialization.convert(listPath.get(0), RegisteredFileSet.class);
// LOG.info("Going to delete {}", fs);
LOG.info("Going to delete {}", path);
Project newDoc = clientPrj.deleteFileset(PROFILE_ID, PROJECT_ID, path, true, true);
LOG.info("newDoc {}", newDoc);
}
// @Test
//@Test
public void registerFileSet() throws Exception {
ScopeProvider.instance.set(CONTEXT);
SecurityTokenProvider.instance.set(TOKEN);
@ -175,16 +178,16 @@ public class Service_Tests {
copyContent(input, output);
LOG.info("Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
}
tempDir.deleteOnExit();
//tempDir.deleteOnExit();
} catch (Exception e) {
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage(), e);
}
File fileset = output;
LOG.info("the fileName is: " + fileset.getName());
//mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition, access, fileset);
LOG.info("final fileName is: " + fileset.getName());
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition, access, fileset);
LOG.info("registerFileSet: finished!");
}
/**