Skip to content

Commit ed27371

Browse files
authored
Update getRecordStatusHistory and getRecordStatusHistoryByType to support getting working copy records history. (#8153)
* Update getRecordStatusHistory and getRecordStatusHistoryByType to support getting working copy records history. * Also include workflow/last api in the changes. * Update can edit to use non approved records when not specified.
1 parent 906e071 commit ed27371

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

services/src/main/java/org/fao/geonet/api/ApiUtils.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,19 @@ public static Path downloadUrlInTemp(String url) throws IOException, URISyntaxEx
259259
}
260260

261261
/**
262-
* Check if the current user can edit this record.
262+
* Check if the current user can edit this record
263263
*/
264264
public static AbstractMetadata canEditRecord(String metadataUuid, HttpServletRequest request) throws Exception {
265+
return canEditRecord(metadataUuid, false, request);
266+
}
267+
268+
/**
269+
* Check if the current user can edit this record.
270+
*/
271+
public static AbstractMetadata canEditRecord(String metadataUuid, boolean approved, HttpServletRequest request) throws Exception {
265272
ApplicationContext appContext = ApplicationContextHolder.get();
266-
AbstractMetadata metadata = getRecord(metadataUuid);
273+
String metadataId = getInternalId(metadataUuid, approved);
274+
AbstractMetadata metadata = getRecord(metadataId);
267275
AccessManager accessManager = appContext.getBean(AccessManager.class);
268276
if (!accessManager.canEdit(createServiceContext(request), String.valueOf(metadata.getId()))) {
269277
throw new SecurityException(String.format(
@@ -297,8 +305,7 @@ public static AbstractMetadata canViewRecord(String metadataUuid, HttpServletReq
297305
* Check if the current user can view this record.
298306
*/
299307
public static AbstractMetadata canViewRecord(String metadataUuid, boolean approved, HttpServletRequest request) throws Exception {
300-
String metadataId;
301-
metadataId = getInternalId(metadataUuid, approved);
308+
String metadataId = getInternalId(metadataUuid, approved);
302309

303310
AbstractMetadata metadata = getRecord(metadataId);
304311
try {

services/src/main/java/org/fao/geonet/api/records/MetadataWorkflowApi.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,18 @@ public List<MetadataStatusResponse> getRecordStatusHistory(
176176
@Parameter(description = API_PARAM_RECORD_UUID, required = true) @PathVariable String metadataUuid,
177177
@RequestParam(required = false) boolean details,
178178
@Parameter(description = "Sort direction", required = false) @RequestParam(defaultValue = "DESC") Sort.Direction sortOrder,
179+
@Parameter(description = "Use approved version or not", example = "true")
180+
@RequestParam(required = false, defaultValue = "true") Boolean approved,
179181
HttpServletRequest request) throws Exception {
180182
ServiceContext context = ApiUtils.createServiceContext(request);
181-
AbstractMetadata metadata = ApiUtils.canViewRecord(metadataUuid, request);
183+
184+
AbstractMetadata metadata;
185+
try {
186+
metadata = ApiUtils.canViewRecord(metadataUuid, approved, request);
187+
} catch (SecurityException e) {
188+
Log.debug(API.LOG_MODULE_NAME, e.getMessage(), e);
189+
throw new NotAllowedException(ApiParams.API_RESPONSE_NOT_ALLOWED_CAN_VIEW);
190+
}
182191

183192
String sortField = SortUtils.createPath(MetadataStatus_.changeDate);
184193

@@ -199,9 +208,17 @@ public List<MetadataStatusResponse> getRecordStatusHistoryByType(
199208
@Parameter(description = "Type", required = true) @PathVariable StatusValueType type,
200209
@RequestParam(required = false) boolean details,
201210
@Parameter(description = "Sort direction", required = false) @RequestParam(defaultValue = "DESC") Sort.Direction sortOrder,
211+
@Parameter(description = "Use approved version or not", example = "true")
212+
@RequestParam(required = false, defaultValue = "true") Boolean approved,
202213
HttpServletRequest request) throws Exception {
203214
ServiceContext context = ApiUtils.createServiceContext(request);
204-
AbstractMetadata metadata = ApiUtils.canViewRecord(metadataUuid, request);
215+
AbstractMetadata metadata;
216+
try {
217+
metadata = ApiUtils.canViewRecord(metadataUuid, approved, request);
218+
} catch (SecurityException e) {
219+
Log.debug(API.LOG_MODULE_NAME, e.getMessage(), e);
220+
throw new NotAllowedException(ApiParams.API_RESPONSE_NOT_ALLOWED_CAN_VIEW);
221+
}
205222

206223
String sortField = SortUtils.createPath(MetadataStatus_.changeDate);
207224

@@ -223,8 +240,10 @@ public List<MetadataStatusResponse> getRecordStatusHistoryByType(
223240
@ResponseBody
224241
public MetadataWorkflowStatusResponse getStatus(
225242
@Parameter(description = API_PARAM_RECORD_UUID, required = true) @PathVariable String metadataUuid,
243+
@Parameter(description = "Use approved version or not", example = "true")
244+
@RequestParam(required = false, defaultValue = "true") Boolean approved,
226245
HttpServletRequest request) throws Exception {
227-
AbstractMetadata metadata = ApiUtils.canEditRecord(metadataUuid, request);
246+
AbstractMetadata metadata = ApiUtils.canEditRecord(metadataUuid, approved, request);
228247
Locale locale = languageUtils.parseAcceptLanguage(request.getLocales());
229248
ResourceBundle messages = ApiUtils.getMessagesResourceBundle(request.getLocales());
230249
ServiceContext context = ApiUtils.createServiceContext(request, locale.getISO3Language());

0 commit comments

Comments
 (0)