Fixed the Update facility, #24166
This commit is contained in:
parent
c330148ac5
commit
2f7d93cd8e
|
@ -241,7 +241,6 @@ public class UpdateRecord extends Composite {
|
||||||
String htmlMsg = "Updating the section <b>"+listBoxSections.getSelectedItemText()+"</b> of the project with:";
|
String htmlMsg = "Updating the section <b>"+listBoxSections.getSelectedItemText()+"</b> of the project with:";
|
||||||
htmlMsg += "<ul>";
|
htmlMsg += "<ul>";
|
||||||
htmlMsg += "<li>id: " + projectID + "</li>";
|
htmlMsg += "<li>id: " + projectID + "</li>";
|
||||||
htmlMsg += "<li>profile: " + profileID + "</li>";
|
|
||||||
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
||||||
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
||||||
htmlMsg += "</ul>";
|
htmlMsg += "</ul>";
|
||||||
|
@ -281,7 +280,6 @@ public class UpdateRecord extends Composite {
|
||||||
String htmlMsg = "The project with:";
|
String htmlMsg = "The project with:";
|
||||||
htmlMsg += "<ul>";
|
htmlMsg += "<ul>";
|
||||||
htmlMsg += "<li>id: " + projectID + "</li>";
|
htmlMsg += "<li>id: " + projectID + "</li>";
|
||||||
htmlMsg += "<li>profile: " + profileID + "</li>";
|
|
||||||
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
htmlMsg += "<li>" + theDocument.getFirstEntryOfMap().getKey() + ": "
|
||||||
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
+ theDocument.getFirstEntryOfMap().getValue() + "</li>";
|
||||||
htmlMsg += "</ul>";
|
htmlMsg += "</ul>";
|
||||||
|
|
|
@ -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
|
@Override
|
||||||
public CommitReport updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
|
public CommitReport updateGeportalDataForm(String profileID, String projectID, GeoNaFormDataObject section,
|
||||||
String sectionPath, List<FilePathDV> listFilePaths) throws Exception {
|
String sectionPath, List<FilePathDV> listFilePaths) throws Exception {
|
||||||
|
@ -327,6 +338,14 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
|
|
||||||
if (listFilePaths != null) {
|
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)
|
// Cleaning all the fileset path of the section (defined in the UCD)
|
||||||
for (FilePathDV filePath : listFilePaths) {
|
for (FilePathDV filePath : listFilePaths) {
|
||||||
|
|
||||||
|
@ -342,11 +361,27 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Registering new files
|
// Registering fileset in the section according to mapFilesToRegistrer
|
||||||
List<? extends FileUploaded> filesUploaded = sectionBean.getFilesUploaded();
|
if (mapFilesToRegistrer != null && mapFilesToRegistrer.size()>0) {
|
||||||
if (filesUploaded != null && !filesUploaded.isEmpty()) {
|
LOG.info("Cluster of fileset per fieldDefinition is: " + mapFilesToRegistrer);
|
||||||
replaceFiles(currentProject, sectionPath, section.getGcubeProfileDV(), filesUploaded);
|
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");
|
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.
|
* Replace files.
|
||||||
*
|
*
|
||||||
|
@ -576,7 +689,9 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
FileUploadedRemote remote = (FileUploadedRemote) file;
|
FileUploadedRemote remote = (FileUploadedRemote) file;
|
||||||
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
LOG.info("Uploaded file is remote: " + remote.getUrl());
|
||||||
InputStream in = new URL(remote.getUrl()).openStream();
|
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);
|
output = new File(tmpDirPath, fileName);
|
||||||
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
Path outputAbsolutePath = Paths.get(output.getAbsolutePath());
|
||||||
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(in, outputAbsolutePath, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
@ -613,7 +728,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
FilePathDV filePath = uploadedFileset.getFilePathDV();
|
||||||
Access access = ConvertToDataServiceModel.getAccessFromDocumentSection(theJSONDocument, sectionJSONPath);
|
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,
|
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath,
|
||||||
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
|
filePath.getFieldName(), filePath.getFieldDefinition(), access, fileset);
|
||||||
|
|
||||||
|
@ -1397,6 +1512,14 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
|
||||||
return null;
|
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
|
@Override
|
||||||
public ProjectEdit getProjectEdit(String profileID, String projectID) throws Exception {
|
public ProjectEdit getProjectEdit(String profileID, String projectID) throws Exception {
|
||||||
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
|
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);
|
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;
|
return projectEdit;
|
||||||
} catch (Exception e) {
|
} 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);
|
LOG.warn(erroMsg, e);
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
|
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
|
@Override
|
||||||
public ProjectView getProjectView(String profileID, String projectID) throws Exception {
|
public ProjectView getProjectView(String profileID, String projectID) throws Exception {
|
||||||
LOG.info("getProjectEdit called for profileID: {}, and projectID: {}", profileID, projectID);
|
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);
|
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;
|
return projectView;
|
||||||
} catch (Exception e) {
|
} 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);
|
LOG.warn(erroMsg, e);
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
|
erroMsg + ". Error: " + e.getMessage() + ". Refresh and try again or contact the support");
|
||||||
|
|
|
@ -97,37 +97,40 @@ public class Service_Tests {
|
||||||
|
|
||||||
Project doc = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
Project doc = clientPrj.getProjectByID(PROFILE_ID, PROJECT_ID);
|
||||||
|
|
||||||
JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
// JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
||||||
List<String> matchingPaths = wrapper.getMatchingPaths(path);
|
// List<String> matchingPaths = wrapper.getMatchingPaths(path);
|
||||||
|
//
|
||||||
LOG.info("matchingPaths is: " + matchingPaths);
|
// LOG.info("matchingPaths is: " + matchingPaths);
|
||||||
|
//
|
||||||
String error = null;
|
// String error = null;
|
||||||
if (matchingPaths.isEmpty()) {
|
// if (matchingPaths.isEmpty()) {
|
||||||
error = "No Registered FileSet found at " + path;
|
// error = "No Registered FileSet found at " + path;
|
||||||
if (!ignore_errors) {
|
// if (!ignore_errors) {
|
||||||
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (matchingPaths.size() > 1 && !ignore_errors) {
|
// if (matchingPaths.size() > 1 && !ignore_errors) {
|
||||||
error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
|
// error = "Multiple Fileset (" + matchingPaths.size() + ") matching " + path;
|
||||||
if (!ignore_errors)
|
// if (!ignore_errors)
|
||||||
throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
// throw new WebApplicationException(error, Response.Status.BAD_REQUEST);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (error != null && ignore_errors) {
|
// if (error != null && ignore_errors) {
|
||||||
LOG.info("Error detected {}. Ignoring it and returning input doc", error);
|
// LOG.info("Error detected {}. Ignoring it and returning input doc", error);
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
List<Object> listPath = wrapper.getByPath(path);
|
// List<Object> listPath = wrapper.getByPath(path);
|
||||||
LOG.info("List path: " + listPath);
|
// LOG.info("List path: " + listPath);
|
||||||
// RegisteredFileSet fs = Serialization.convert(listPath.get(0), RegisteredFileSet.class);
|
// RegisteredFileSet fs = Serialization.convert(listPath.get(0), RegisteredFileSet.class);
|
||||||
// LOG.info("Going to delete {}", fs);
|
// 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 {
|
public void registerFileSet() throws Exception {
|
||||||
ScopeProvider.instance.set(CONTEXT);
|
ScopeProvider.instance.set(CONTEXT);
|
||||||
SecurityTokenProvider.instance.set(TOKEN);
|
SecurityTokenProvider.instance.set(TOKEN);
|
||||||
|
@ -175,16 +178,16 @@ public class Service_Tests {
|
||||||
copyContent(input, output);
|
copyContent(input, output);
|
||||||
LOG.info("Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
LOG.info("Temp file: " + file.getTempSystemPath() + ", copied to new file: " + output.getName());
|
||||||
}
|
}
|
||||||
tempDir.deleteOnExit();
|
//tempDir.deleteOnExit();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage(), e);
|
LOG.warn("Skipping file: " + file.getFileName() + ". Error: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
File fileset = output;
|
File fileset = output;
|
||||||
LOG.info("the fileName is: " + fileset.getName());
|
LOG.info("final fileName is: " + fileset.getName());
|
||||||
|
mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition, access, fileset);
|
||||||
//mongoService.registerFileSet(theProject.getProfileID(), theProject, sectionJSONPath, fieldName, fieldDefinition, access, fileset);
|
|
||||||
|
|
||||||
|
LOG.info("registerFileSet: finished!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue