Skip to content

Commit ea2d923

Browse files
committed
Allow DynamicUpdate making the (erreneous) updatePartial method and PATCH interface redundant
1 parent 8f0b581 commit ea2d923

14 files changed

Lines changed: 57 additions & 156 deletions

File tree

shogun-lib/src/main/java/de/terrestris/shogun/lib/controller/BaseController.java

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333

3434
import java.time.OffsetDateTime;
3535
import java.util.List;
36-
import java.util.Map;
3736
import java.util.Optional;
3837
import java.util.UUID;
3938

@@ -597,80 +596,6 @@ public S update(@RequestBody S entity, @PathVariable("id") Long entityId) {
597596
}
598597
}
599598

600-
@PatchMapping("/{id}")
601-
@ResponseStatus(HttpStatus.OK)
602-
public S updatePartial(@RequestBody Map<String, Object> values, @PathVariable("id") Long entityId) {
603-
log.trace("Requested to partially update entity of type {} with ID {} ({})", getGenericClassName(), entityId, values);
604-
605-
try {
606-
Object idFromValues = values.get("id");
607-
if (idFromValues == null) {
608-
log.error("Field 'id' (entity {})is missing in the passed values: {}.", entityId, values);
609-
throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
610-
}
611-
Long id = Long.valueOf((Integer) idFromValues);
612-
if (!entityId.equals(id)) {
613-
log.error("IDs of update candidate (ID: {}) and update data ({}) don't match.", entityId, values);
614-
throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
615-
}
616-
617-
S persistedEntity = service.findOne(entityId).orElseThrow();
618-
if (persistedEntity != null) {
619-
S updatedEntity = service.updatePartial(entityId, persistedEntity, values);
620-
621-
log.trace("Successfully updated values for entity of type {} with ID {}",
622-
getGenericClassName(), entityId);
623-
624-
return updatedEntity;
625-
} else {
626-
log.error("Could not find entity of type {} with ID {}",
627-
getGenericClassName(), entityId);
628-
629-
throw new ResponseStatusException(
630-
HttpStatus.NOT_FOUND,
631-
messageSource.getMessage(
632-
"BaseController.NOT_FOUND",
633-
null,
634-
LocaleContextHolder.getLocale()
635-
)
636-
);
637-
}
638-
} catch (AccessDeniedException ade) {
639-
log.warn("Updating values of type {} with ID {} is denied",
640-
getGenericClassName(), entityId);
641-
642-
throw new ResponseStatusException(
643-
HttpStatus.NOT_FOUND,
644-
messageSource.getMessage(
645-
"BaseController.NOT_FOUND",
646-
null,
647-
LocaleContextHolder.getLocale()
648-
),
649-
ade
650-
);
651-
} catch (NumberFormatException nfe) {
652-
log.error("Can't parse 'id' field ({}) from values ({}). It has to be an Integer.: {}",
653-
values, entityId, nfe.getMessage());
654-
throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
655-
} catch (ResponseStatusException rse) {
656-
throw rse;
657-
} catch (Exception e) {
658-
log.error("Error while updating values for entity of type {} with ID {}: \n {}",
659-
getGenericClassName(), entityId, e.getMessage());
660-
log.trace("Full stack trace: ", e);
661-
662-
throw new ResponseStatusException(
663-
HttpStatus.INTERNAL_SERVER_ERROR,
664-
messageSource.getMessage(
665-
"BaseController.INTERNAL_SERVER_ERROR",
666-
null,
667-
LocaleContextHolder.getLocale()
668-
),
669-
e
670-
);
671-
}
672-
}
673-
674599
@DeleteMapping("/{id}")
675600
@ResponseStatus(HttpStatus.NO_CONTENT)
676601
public void delete(@PathVariable("id") Long entityId) {

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/Application.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import lombok.*;
2525
import org.hibernate.annotations.Cache;
2626
import org.hibernate.annotations.CacheConcurrencyStrategy;
27+
import org.hibernate.annotations.DynamicUpdate;
2728
import org.hibernate.annotations.Type;
2829
import org.hibernate.envers.AuditTable;
2930
import org.hibernate.envers.Audited;
@@ -33,6 +34,7 @@
3334

3435
@Entity(name = "applications")
3536
@Table(schema = "shogun")
37+
@DynamicUpdate
3638
@Audited
3739
@AuditTable(value = "applications_rev", schema = "shogun_rev")
3840
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/File.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
import lombok.*;
2222
import org.hibernate.annotations.Cache;
2323
import org.hibernate.annotations.CacheConcurrencyStrategy;
24-
import org.hibernate.annotations.Type;
24+
import org.hibernate.annotations.DynamicUpdate;
2525

2626
import javax.persistence.*;
27-
import java.util.UUID;
2827

2928
@Entity(name = "files")
3029
@Table(schema = "shogun")
30+
@DynamicUpdate
3131
@Cacheable
3232
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "files")
3333
@AllArgsConstructor

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/Group.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
import lombok.*;
2121
import org.hibernate.annotations.Cache;
2222
import org.hibernate.annotations.CacheConcurrencyStrategy;
23+
import org.hibernate.annotations.DynamicUpdate;
2324
import org.hibernate.envers.AuditTable;
2425
import org.hibernate.envers.Audited;
2526

2627
import javax.persistence.*;
2728

2829
@Entity(name = "groups")
2930
@Table(schema = "shogun")
31+
@DynamicUpdate
3032
@Audited
3133
@AuditTable(value = "groups_rev", schema = "shogun_rev")
3234
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/ImageFile.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,18 @@
1717
package de.terrestris.shogun.lib.model;
1818

1919
import com.fasterxml.jackson.annotation.JsonIgnore;
20+
import io.swagger.v3.oas.annotations.media.Schema;
21+
import lombok.*;
22+
import org.hibernate.annotations.DynamicUpdate;
23+
2024
import javax.persistence.Cacheable;
2125
import javax.persistence.Column;
2226
import javax.persistence.Entity;
2327
import javax.persistence.Table;
2428

25-
import io.swagger.v3.oas.annotations.media.Schema;
26-
import lombok.AllArgsConstructor;
27-
import lombok.Data;
28-
import lombok.EqualsAndHashCode;
29-
import lombok.NoArgsConstructor;
30-
import lombok.ToString;
31-
3229
@Entity(name = "imagefiles")
3330
@Table(schema = "shogun")
31+
@DynamicUpdate
3432
@Cacheable
3533
@Data
3634
@AllArgsConstructor

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/Layer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.geojson.GeoJsonObject;
2525
import org.hibernate.annotations.Cache;
2626
import org.hibernate.annotations.CacheConcurrencyStrategy;
27+
import org.hibernate.annotations.DynamicUpdate;
2728
import org.hibernate.annotations.Type;
2829
import org.hibernate.envers.AuditTable;
2930
import org.hibernate.envers.Audited;
@@ -32,6 +33,7 @@
3233

3334
@Entity(name = "layers")
3435
@Table(schema = "shogun")
36+
@DynamicUpdate
3537
@Audited
3638
@AuditTable(value = "layers_rev", schema = "shogun_rev")
3739
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/User.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import lombok.*;
2323
import org.hibernate.annotations.Cache;
2424
import org.hibernate.annotations.CacheConcurrencyStrategy;
25+
import org.hibernate.annotations.DynamicUpdate;
2526
import org.hibernate.annotations.Type;
2627
import org.hibernate.envers.AuditTable;
2728
import org.hibernate.envers.Audited;
@@ -30,6 +31,7 @@
3031

3132
@Entity(name = "users")
3233
@Table(schema = "shogun")
34+
@DynamicUpdate
3335
@Audited
3436
@AuditTable(value = "users_rev", schema = "shogun_rev")
3537
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/GroupClassPermission.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,21 @@
1717
package de.terrestris.shogun.lib.model.security.permission;
1818

1919
import de.terrestris.shogun.lib.model.Group;
20-
import javax.persistence.Cacheable;
21-
import javax.persistence.Entity;
22-
import javax.persistence.ManyToOne;
23-
import javax.persistence.Table;
24-
import lombok.AllArgsConstructor;
25-
import lombok.Data;
26-
import lombok.EqualsAndHashCode;
27-
import lombok.NoArgsConstructor;
28-
import lombok.ToString;
20+
import lombok.*;
2921
import org.hibernate.annotations.Cache;
3022
import org.hibernate.annotations.CacheConcurrencyStrategy;
23+
import org.hibernate.annotations.DynamicUpdate;
3124
import org.hibernate.envers.AuditTable;
3225
import org.hibernate.envers.Audited;
3326

27+
import javax.persistence.Cacheable;
28+
import javax.persistence.Entity;
29+
import javax.persistence.ManyToOne;
30+
import javax.persistence.Table;
31+
3432
@Entity(name = "groupclasspermissions")
3533
@Table(schema = "shogun")
34+
@DynamicUpdate
3635
@Audited
3736
@AuditTable(value = "groupclasspermissions_rev", schema = "shogun_rev")
3837
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/GroupInstancePermission.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,21 @@
1717
package de.terrestris.shogun.lib.model.security.permission;
1818

1919
import de.terrestris.shogun.lib.model.Group;
20-
import javax.persistence.Cacheable;
21-
import javax.persistence.Entity;
22-
import javax.persistence.ManyToOne;
23-
import javax.persistence.Table;
24-
import lombok.AllArgsConstructor;
25-
import lombok.Data;
26-
import lombok.EqualsAndHashCode;
27-
import lombok.NoArgsConstructor;
28-
import lombok.ToString;
20+
import lombok.*;
2921
import org.hibernate.annotations.Cache;
3022
import org.hibernate.annotations.CacheConcurrencyStrategy;
23+
import org.hibernate.annotations.DynamicUpdate;
3124
import org.hibernate.envers.AuditTable;
3225
import org.hibernate.envers.Audited;
3326

27+
import javax.persistence.Cacheable;
28+
import javax.persistence.Entity;
29+
import javax.persistence.ManyToOne;
30+
import javax.persistence.Table;
31+
3432
@Entity(name = "groupinstancepermissions")
3533
@Table(schema = "shogun")
34+
@DynamicUpdate
3635
@Audited
3736
@AuditTable(value = "groupinstancepermissions_rev", schema = "shogun_rev")
3837
@Cacheable

shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/PermissionCollection.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,22 @@
1919
import de.terrestris.shogun.lib.enumeration.PermissionCollectionType;
2020
import de.terrestris.shogun.lib.enumeration.PermissionType;
2121
import de.terrestris.shogun.lib.model.BaseEntity;
22-
import java.util.HashSet;
23-
import java.util.Set;
24-
import javax.persistence.Cacheable;
25-
import javax.persistence.CollectionTable;
26-
import javax.persistence.Column;
27-
import javax.persistence.ElementCollection;
28-
import javax.persistence.Entity;
29-
import javax.persistence.EnumType;
30-
import javax.persistence.Enumerated;
31-
import javax.persistence.Table;
3222
import lombok.AllArgsConstructor;
3323
import lombok.Data;
3424
import lombok.EqualsAndHashCode;
3525
import lombok.NoArgsConstructor;
26+
import org.hibernate.annotations.*;
3627
import org.hibernate.annotations.Cache;
37-
import org.hibernate.annotations.CacheConcurrencyStrategy;
38-
import org.hibernate.annotations.Fetch;
39-
import org.hibernate.annotations.FetchMode;
28+
29+
import javax.persistence.*;
30+
import javax.persistence.Entity;
31+
import javax.persistence.Table;
32+
import java.util.HashSet;
33+
import java.util.Set;
4034

4135
@Entity(name = "permissions")
4236
@Table(schema = "shogun")
37+
@DynamicUpdate
4338
@Cacheable
4439
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "permissions")
4540
@Data

0 commit comments

Comments
 (0)