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