Skip to content

Commit

Permalink
Merge pull request #3592 from geonetwork/draft2018
Browse files Browse the repository at this point in the history
Workflow Draft - Working Space - Editing Version - Record Copy - Draft Punk
  • Loading branch information
josegar74 authored Jun 19, 2019
2 parents 96392d1 + f461538 commit c7d9938
Show file tree
Hide file tree
Showing 260 changed files with 10,696 additions and 4,701 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@ schemas/*/doc/*/*.rst
*.old
web-ui-docs/package-lock.json
release/jetty/*
chromedriver
node_modules
package-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.fao.geonet.repository.specification.UserGroupSpecs;
import org.fao.geonet.utils.Log;
import org.springframework.context.ApplicationContext;
import org.springframework.data.jpa.domain.Specification;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -119,7 +120,7 @@ void transferMetadata(ApplicationContext applicationContext, List<User> oldMetad
User oldOwner = oldMetadataOwnerList.get(i);

// Transfer metadata to user but keep old group
List<Metadata> metadataList = metadataRepository.findAll(MetadataSpecs.isOwnedByUser(oldOwner.getId()));
List<Metadata> metadataList = metadataRepository.findAll((Specification<Metadata>)MetadataSpecs.isOwnedByUser(oldOwner.getId()));
for (Metadata metadata : metadataList) {
dataManager.updateMetadataOwner(metadata.getId(), Integer.toString(newMetadataOwner.getId()),
Integer.toString(metadata.getSourceInfo().getGroupOwner()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
import org.fao.geonet.kernel.AccessManager;
import org.fao.geonet.kernel.DataManager;
import org.fao.geonet.kernel.GeonetworkDataDirectory;
import org.fao.geonet.kernel.datamanager.IMetadataUtils;
import org.fao.geonet.kernel.setting.SettingManager;
import org.fao.geonet.lib.Lib;
import org.fao.geonet.repository.MetadataRepository;
import org.fao.geonet.utils.IO;
import org.springframework.context.ApplicationContext;
import org.springframework.web.multipart.MultipartFile;
Expand Down Expand Up @@ -77,15 +79,22 @@ public FilesystemStore() {
public List<MetadataResource> getResources(ServiceContext context, String metadataUuid,
Sort sort,
String filter) throws Exception {
return getResources(context, metadataUuid, sort, filter, true);
}

@Override
public List<MetadataResource> getResources(ServiceContext context, String metadataUuid,
Sort sort,
String filter, Boolean approved) throws Exception {
List<MetadataResource> resourceList = new ArrayList<>();
ApplicationContext _appContext = ApplicationContextHolder.get();
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);
AccessManager accessManager = _appContext.getBean(AccessManager.class);
boolean canEdit = accessManager.canEdit(context, metadataId);

resourceList.addAll(getResources(context, metadataUuid, MetadataResourceVisibility.PUBLIC, filter));
resourceList.addAll(getResources(context, metadataUuid, MetadataResourceVisibility.PUBLIC, filter, approved));
if (canEdit) {
resourceList.addAll(getResources(context, metadataUuid, MetadataResourceVisibility.PRIVATE, filter));
resourceList.addAll(getResources(context, metadataUuid, MetadataResourceVisibility.PRIVATE, filter, approved));
}

if (sort == Sort.name) {
Expand All @@ -95,13 +104,20 @@ public List<MetadataResource> getResources(ServiceContext context, String metada
return resourceList;
}

@Override
@Deprecated
public List<MetadataResource> getResources(ServiceContext context, String metadataUuid,
MetadataResourceVisibility visibility,
String filter) throws Exception {
return getResources(context, metadataUuid, visibility, filter, true);
}

@Override
public List<MetadataResource> getResources(ServiceContext context, String metadataUuid,
MetadataResourceVisibility visibility,
String filter) throws Exception {
String filter, Boolean approved) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);
GeonetworkDataDirectory dataDirectory =
_appContext.getBean(GeonetworkDataDirectory.class);
SettingManager settingManager = _appContext.getBean(SettingManager.class);
Expand Down Expand Up @@ -140,10 +156,14 @@ public List<MetadataResource> getResources(ServiceContext context, String metada

return resourceList;
}


@Override
@Deprecated
public Path getResource(ServiceContext context, String metadataUuid, String resourceId) throws Exception {
return getResource(context, metadataUuid, resourceId, true);
}

@Override
public Path getResource(ServiceContext context, String metadataUuid, String resourceId, Boolean approved) throws Exception {
// Those characters should not be allowed by URL structure
if (resourceId.contains("..") ||
resourceId.startsWith("/") ||
Expand All @@ -155,7 +175,7 @@ public Path getResource(ServiceContext context, String metadataUuid, String reso
ApplicationContext _appContext = ApplicationContextHolder.get();
AccessManager accessManager = _appContext.getBean(AccessManager.class);
GeonetworkDataDirectory dataDirectory = _appContext.getBean(GeonetworkDataDirectory.class);
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);
Path metadataDir = Lib.resource.getMetadataDir(dataDirectory, metadataId);

Path resourceFile = null;
Expand All @@ -174,6 +194,7 @@ public Path getResource(ServiceContext context, String metadataUuid, String reso
}
}


if (resourceFile != null && Files.exists(resourceFile)) {
if (resourceFile.getParent().getFileName().toString().equals(
MetadataResourceVisibility.PRIVATE.toString()) && !canDownload) {
Expand Down Expand Up @@ -212,8 +233,17 @@ private MetadataResource getResourceDescription(String metadataUuid, MetadataRes
public MetadataResource putResource(ServiceContext context, String metadataUuid,
MultipartFile file,
MetadataResourceVisibility visibility) throws Exception {
return putResource(context, metadataUuid, file, visibility, true);
}


@Override
public MetadataResource putResource(ServiceContext context, String metadataUuid,
MultipartFile file,
MetadataResourceVisibility visibility,
Boolean approved) throws Exception {
canEdit(context, metadataUuid);
Path filePath = getPath(metadataUuid, visibility, file.getOriginalFilename());
Path filePath = getPath(metadataUuid, visibility, file.getOriginalFilename(), approved);

BufferedOutputStream stream =
new BufferedOutputStream(
Expand All @@ -228,34 +258,43 @@ public MetadataResource putResource(ServiceContext context, String metadataUuid,

@Override
public MetadataResource putResource(ServiceContext context, String metadataUuid, Path file, MetadataResourceVisibility visibility) throws Exception {
return putResource(context, metadataUuid, file, visibility, true);
}

@Override
public MetadataResource putResource(ServiceContext context, String metadataUuid, Path file, MetadataResourceVisibility visibility, Boolean approved) throws Exception {
canEdit(context, metadataUuid);
Path filePath = getPath(metadataUuid, visibility, file.getFileName().toString());
Path filePath = getPath(metadataUuid, visibility, file.getFileName().toString(), approved);

FileUtils.copyFile(file.toFile(), filePath.toFile());

return getResourceDescription(metadataUuid, visibility, filePath);
}


@Override
public MetadataResource putResource(ServiceContext context, String metadataUuid, URL fileUrl, MetadataResourceVisibility visibility) throws Exception {
return putResource(context, metadataUuid, fileUrl, visibility, true);
}

@Override
public MetadataResource putResource(ServiceContext context, String metadataUuid, URL fileUrl, MetadataResourceVisibility visibility, Boolean approved) throws Exception {
canEdit(context, metadataUuid);
String fileName = FilenameUtils.getName(fileUrl.getPath());
if (fileName.contains("?")) {
fileName = fileName.substring(0, fileName.indexOf("?"));
}

Path filePath = getPath(metadataUuid, visibility, fileName);
Path filePath = getPath(metadataUuid, visibility, fileName, approved);

Files.copy(fileUrl.openStream(), filePath);

return getResourceDescription(metadataUuid, visibility, filePath);
}

private Path getPath(String metadataUuid, MetadataResourceVisibility visibility, String fileName) throws Exception {
private Path getPath(String metadataUuid, MetadataResourceVisibility visibility, String fileName, Boolean approved) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
GeonetworkDataDirectory dataDirectory = _appContext.getBean(GeonetworkDataDirectory.class);
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);
Path metadataDir = Lib.resource.getMetadataDir(dataDirectory, metadataId);

Path folderPath = metadataDir.resolve(visibility.toString());
Expand All @@ -282,8 +321,13 @@ private Path getPath(String metadataUuid, MetadataResourceVisibility visibility,

@Override
public String delResource(ServiceContext context, String metadataUuid) throws Exception {
return delResource(context, metadataUuid, true);
}

@Override
public String delResource(ServiceContext context, String metadataUuid, Boolean approved) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);

canEdit(context, metadataUuid);

Expand All @@ -296,13 +340,17 @@ public String delResource(ServiceContext context, String metadataUuid) throws Ex
return String.format("Unable to remove metadata '%s' directory.", metadataUuid);
}
}
@Override
public String delResource(ServiceContext context, String metadataUuid, String resourceId) throws Exception {
return delResource(context, metadataUuid, resourceId, true);
}


@Override
public String delResource(ServiceContext context, String metadataUuid, String resourceId) throws Exception {
public String delResource(ServiceContext context, String metadataUuid, String resourceId, Boolean approved) throws Exception {
canEdit(context, metadataUuid);

Path filePath = getResource(context, metadataUuid, resourceId);
Path filePath = getResource(context, metadataUuid, resourceId, approved);

try {
Files.deleteIfExists(filePath);
Expand All @@ -317,12 +365,20 @@ public String delResource(ServiceContext context, String metadataUuid, String re
public MetadataResource patchResourceStatus(ServiceContext context, String metadataUuid,
String resourceId,
MetadataResourceVisibility visibility) throws Exception {
return patchResourceStatus(context, metadataUuid, resourceId, visibility, true);
}

@Override
public MetadataResource patchResourceStatus(ServiceContext context, String metadataUuid,
String resourceId,
MetadataResourceVisibility visibility,
Boolean approved) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
AccessManager accessManager = _appContext.getBean(AccessManager.class);
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, approved);

if (accessManager.canEdit(context, metadataId)) {
Path filePath = getResource(context, metadataUuid, resourceId);
Path filePath = getResource(context, metadataUuid, resourceId, approved);

GeonetworkDataDirectory dataDirectory = _appContext.getBean(GeonetworkDataDirectory.class);
Path metadataDir = Lib.resource.getMetadataDir(dataDirectory, metadataId);
Expand Down Expand Up @@ -351,14 +407,19 @@ public MetadataResource patchResourceStatus(ServiceContext context, String metad
/**
* TODO: To be improve
*/
private String getAndCheckMetadataId(String metadataUuid) throws Exception {
private String getAndCheckMetadataId(String metadataUuid, Boolean approved) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
String metadataId = _appContext.getBean(DataManager.class).getMetadataId(metadataUuid);
String metadataId = String.valueOf(_appContext.getBean(IMetadataUtils.class).findOneByUuid(metadataUuid).getId());
if (metadataId == null) {
throw new ResourceNotFoundException(String.format(
"Metadata with UUID '%s' not found.", metadataUuid
));
}

if(approved) {
metadataId = String.valueOf(_appContext.getBean(MetadataRepository.class)
.findOneByUuid(metadataUuid).getId());
}
return metadataId;
}

Expand All @@ -369,7 +430,7 @@ private void canEdit(ServiceContext context, String metadataUuid) throws Excepti
private void canEdit(ServiceContext context, String metadataUuid,
MetadataResourceVisibility visibility) throws Exception {
ApplicationContext _appContext = ApplicationContextHolder.get();
String metadataId = getAndCheckMetadataId(metadataUuid);
String metadataId = getAndCheckMetadataId(metadataUuid, false);
AccessManager accessManager = _appContext.getBean(AccessManager.class);
boolean canEdit = accessManager.canEdit(context, metadataId);
if ((visibility == null && !canEdit) ||
Expand Down
Loading

0 comments on commit c7d9938

Please sign in to comment.