From 84d99d0f0700b2a19f504b21b1747275251305d8 Mon Sep 17 00:00:00 2001
From: Leonardo Vannucci <leonardo.vannucci@grupposistematica.it>
Date: Wed, 03 Apr 2019 10:40:10 +0200
Subject: [PATCH] Gstione customKey
---
dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java | 13 ++++++
dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java | 7 +++
dg1cloud-core/src/main/resources/application.properties | 1
dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java | 7 ++-
dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java | 48 ++++++++++++------------
5 files changed, 49 insertions(+), 27 deletions(-)
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
index 8039327..ed0675f 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
@@ -53,6 +53,9 @@
@Column(name="secret_key")
private String secretKey;
+ @Column(name="custom_key")
+ private String customKey;
+
public RegDocument() {
}
@@ -153,11 +156,19 @@
this.secretKey = secretKey;
}
+ public String getCustomKey() {
+ return customKey;
+ }
+
+ public void setCustomKey(String customKey) {
+ this.customKey = customKey;
+ }
+
@Override
public String toString() {
return "RegDocument [documentId=" + documentId + ", created=" + created + ", createdBy=" + createdBy
+ ", modified=" + modified + ", modifiedBy=" + modifiedBy + ", fileHash=" + fileHash + ", filePath="
- + filePath + ", fileSize=" + fileSize + ", dueDate=" + dueDate + "]";
+ + filePath + ", fileSize=" + fileSize + ", dueDate=" + dueDate + ", customKey=" + customKey + "]";
}
}
\ No newline at end of file
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
index d263a1d..37de4db 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
@@ -8,6 +8,7 @@
private String sha256;
private Date dueDate; //Data nel formato ISO-8601 - es: 2018-07-27T18:25:43.511Z
private String secretKey;
+ private String customKey;
public String getFileName() {
return fileName;
@@ -33,4 +34,10 @@
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
+ public String getCustomKey() {
+ return customKey;
+ }
+ public void setCustomKey(String customKey) {
+ this.customKey = customKey;
+ }
}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
index 35b4df3..0869cb7 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
@@ -15,9 +15,12 @@
@Transactional( propagation = Propagation.REQUIRED )
public interface RegDocumentRepository extends JpaRepository<RegDocument, Long> {
- @Query("SELECT d FROM RegDocument d WHERE d.fileHash = :fileHash and d.fileName = :fileName")
- RegDocument findOneByHashAndName(@Param("fileHash") String fileHash, @Param("fileName") String fileName);
+ @Query("SELECT d FROM RegDocument d WHERE d.fileHash = :fileHash and d.fileName = :fileName and d.createdBy = :userName")
+ RegDocument findOneByHashAndName(@Param("fileHash") String fileHash, @Param("fileName") String fileName, @Param("userName") String userName);
@Query("SELECT d FROM RegDocument d WHERE CURRENT_DATE > d.dueDate")
List<RegDocument> findAllRegDocumentExpired();
+
+ @Query("SELECT d FROM RegDocument d WHERE d.customKey = :customKey")
+ RegDocument findOneByCustomKey(@Param("customKey") String customKey);
}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
index 39a2d6a..0fe93bd 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
@@ -18,6 +18,7 @@
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
+import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -165,10 +166,17 @@
throw new RuntimeException("Errore caricamento classe dal json del descrittore", e);
}
- logger.debug("Controllo esistenza file sul db");
- RegDocument regDocument = regDocumentRepository.findOneByHashAndName(uploadedFileDescriptor.getSha256(), uploadedFileDescriptor.getFileName());
-
String userName = cloudFileDescriptor.getParentFile().getName();
+
+ RegDocument regDocument = null;
+ if ( Strings.isBlank(uploadedFileDescriptor.getCustomKey()) == false ) {
+ logger.debug("Controllo esistenza file sul db tramite customKey {}", uploadedFileDescriptor.getCustomKey());
+ regDocument = regDocumentRepository.findOneByCustomKey(uploadedFileDescriptor.getCustomKey());
+ } else {
+ logger.debug("Controllo esistenza file sul db");
+ regDocument = regDocumentRepository.findOneByHashAndName(uploadedFileDescriptor.getSha256(),
+ uploadedFileDescriptor.getFileName(), userName);
+ }
File uploadedFile = new File(getUploadedFilePath(cloudFileDescriptorPath));
@@ -177,19 +185,20 @@
logger.debug("Creazione nuovo record per il documento da conservare");
regDocument = new RegDocument();
regDocument.setCreatedBy(userName);
- regDocument.setModifiedBy(userName);
- regDocument.setFileHash(uploadedFileDescriptor.getSha256());
- regDocument.setFileName(uploadedFileDescriptor.getFileName());
- regDocument.setFileSize(uploadedFile.length());
- regDocument.setDueDate(uploadedFileDescriptor.getDueDate());
- regDocument.setFilePath("");
- regDocument.setSecretKey(uploadedFileDescriptor.getSecretKey());
-
- regDocumentRepository.save(regDocument);
-
} else {
logger.debug("Trovato 1 record per il documento da memorizzare");
}
+
+ regDocument.setModifiedBy(userName);
+ regDocument.setFileHash(uploadedFileDescriptor.getSha256());
+ regDocument.setFileName(uploadedFileDescriptor.getFileName());
+ regDocument.setFileSize(uploadedFile.length());
+ regDocument.setDueDate(uploadedFileDescriptor.getDueDate());
+ regDocument.setFilePath("");
+ regDocument.setSecretKey(uploadedFileDescriptor.getSecretKey());
+ regDocument.setCustomKey(uploadedFileDescriptor.getCustomKey());
+
+ regDocumentRepository.save(regDocument);
try {
moveUploadedFileToStorage(uploadedFile.getAbsolutePath(), regDocument);
@@ -216,8 +225,6 @@
private void moveUploadedFileToStorage( String source, RegDocument regDocument ) throws IOException {
logger.debug("Spostamento file nello storage");
- String sha256Descriptor = regDocument.getFileHash();
-
File sourceFile = new File(source);
File destinationFile = new File(generateStoragePath(regDocument));
@@ -226,15 +233,8 @@
FileUtils.forceMkdirParent(destinationFile);
FileUtils.copyFile(sourceFile, destinationFile);
} else {
- logger.debug("Il file risulta gia' presente nello storage. Verifico l'integrita'");
- FileInputStream fis = new FileInputStream(destinationFile);
- String hash = DigestUtils.sha256Hex(fis);
- fis.close();
- if ( sha256Descriptor.equalsIgnoreCase(hash) == false ) {
- throw new IllegalStateException("L'hash del file nello storage non corrisponde con l'hash dichiarato nel descrittore del file:\n\t" +
- "hash file inviato: " + hash + "\n\t" +
- "hash dichiarato nel descrittore: " + sha256Descriptor);
- }
+ logger.debug("Il file risulta gia' presente nello storage. Aggiorno il file");
+ FileUtils.copyFile(sourceFile, destinationFile);
}
regDocument.setFilePath(destinationFile.getAbsolutePath());
diff --git a/dg1cloud-core/src/main/resources/application.properties b/dg1cloud-core/src/main/resources/application.properties
index 5d487d4..f07899d 100644
--- a/dg1cloud-core/src/main/resources/application.properties
+++ b/dg1cloud-core/src/main/resources/application.properties
@@ -13,6 +13,7 @@
spring.jmx.default-domain=dg1cloud
+spring.flyway.enabled=true
#server.address=vannux.grupposistematica.it
server.error.include-stacktrace=always
--
Gitblit v1.6.2