Leonardo Vannucci
2019-04-03 84d99d0f0700b2a19f504b21b1747275251305d8
Gstione customKey
5 files modified
76 ■■■■■ changed files
dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java 13 ●●●●● patch | view | raw | blame | history
dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java 7 ●●●●● patch | view | raw | blame | history
dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java 7 ●●●● patch | view | raw | blame | history
dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java 48 ●●●● patch | view | raw | blame | history
dg1cloud-core/src/main/resources/application.properties 1 ●●●● patch | view | raw | blame | history
dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
....@@ -53,6 +53,9 @@
5353 @Column(name="secret_key")
5454 private String secretKey;
5555
56
+ @Column(name="custom_key")
57
+ private String customKey;
58
+
5659 public RegDocument() {
5760 }
5861
....@@ -153,11 +156,19 @@
153156 this.secretKey = secretKey;
154157 }
155158
159
+ public String getCustomKey() {
160
+ return customKey;
161
+ }
162
+
163
+ public void setCustomKey(String customKey) {
164
+ this.customKey = customKey;
165
+ }
166
+
156167 @Override
157168 public String toString() {
158169 return "RegDocument [documentId=" + documentId + ", created=" + created + ", createdBy=" + createdBy
159170 + ", modified=" + modified + ", modifiedBy=" + modifiedBy + ", fileHash=" + fileHash + ", filePath="
160
- + filePath + ", fileSize=" + fileSize + ", dueDate=" + dueDate + "]";
171
+ + filePath + ", fileSize=" + fileSize + ", dueDate=" + dueDate + ", customKey=" + customKey + "]";
161172 }
162173
163174 }
dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
....@@ -8,6 +8,7 @@
88 private String sha256;
99 private Date dueDate; //Data nel formato ISO-8601 - es: 2018-07-27T18:25:43.511Z
1010 private String secretKey;
11
+ private String customKey;
1112
1213 public String getFileName() {
1314 return fileName;
....@@ -33,4 +34,10 @@
3334 public void setSecretKey(String secretKey) {
3435 this.secretKey = secretKey;
3536 }
37
+ public String getCustomKey() {
38
+ return customKey;
39
+ }
40
+ public void setCustomKey(String customKey) {
41
+ this.customKey = customKey;
42
+ }
3643 }
dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
....@@ -15,9 +15,12 @@
1515 @Transactional( propagation = Propagation.REQUIRED )
1616 public interface RegDocumentRepository extends JpaRepository<RegDocument, Long> {
1717
18
- @Query("SELECT d FROM RegDocument d WHERE d.fileHash = :fileHash and d.fileName = :fileName")
19
- RegDocument findOneByHashAndName(@Param("fileHash") String fileHash, @Param("fileName") String fileName);
18
+ @Query("SELECT d FROM RegDocument d WHERE d.fileHash = :fileHash and d.fileName = :fileName and d.createdBy = :userName")
19
+ RegDocument findOneByHashAndName(@Param("fileHash") String fileHash, @Param("fileName") String fileName, @Param("userName") String userName);
2020
2121 @Query("SELECT d FROM RegDocument d WHERE CURRENT_DATE > d.dueDate")
2222 List<RegDocument> findAllRegDocumentExpired();
23
+
24
+ @Query("SELECT d FROM RegDocument d WHERE d.customKey = :customKey")
25
+ RegDocument findOneByCustomKey(@Param("customKey") String customKey);
2326 }
dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
....@@ -18,6 +18,7 @@
1818 import org.apache.commons.codec.digest.DigestUtils;
1919 import org.apache.commons.io.FileUtils;
2020 import org.apache.commons.io.FilenameUtils;
21
+import org.apache.logging.log4j.util.Strings;
2122 import org.slf4j.Logger;
2223 import org.slf4j.LoggerFactory;
2324 import org.springframework.beans.factory.annotation.Autowired;
....@@ -165,10 +166,17 @@
165166 throw new RuntimeException("Errore caricamento classe dal json del descrittore", e);
166167 }
167168
168
- logger.debug("Controllo esistenza file sul db");
169
- RegDocument regDocument = regDocumentRepository.findOneByHashAndName(uploadedFileDescriptor.getSha256(), uploadedFileDescriptor.getFileName());
170
-
171169 String userName = cloudFileDescriptor.getParentFile().getName();
170
+
171
+ RegDocument regDocument = null;
172
+ if ( Strings.isBlank(uploadedFileDescriptor.getCustomKey()) == false ) {
173
+ logger.debug("Controllo esistenza file sul db tramite customKey {}", uploadedFileDescriptor.getCustomKey());
174
+ regDocument = regDocumentRepository.findOneByCustomKey(uploadedFileDescriptor.getCustomKey());
175
+ } else {
176
+ logger.debug("Controllo esistenza file sul db");
177
+ regDocument = regDocumentRepository.findOneByHashAndName(uploadedFileDescriptor.getSha256(),
178
+ uploadedFileDescriptor.getFileName(), userName);
179
+ }
172180
173181 File uploadedFile = new File(getUploadedFilePath(cloudFileDescriptorPath));
174182
....@@ -177,19 +185,20 @@
177185 logger.debug("Creazione nuovo record per il documento da conservare");
178186 regDocument = new RegDocument();
179187 regDocument.setCreatedBy(userName);
180
- regDocument.setModifiedBy(userName);
181
- regDocument.setFileHash(uploadedFileDescriptor.getSha256());
182
- regDocument.setFileName(uploadedFileDescriptor.getFileName());
183
- regDocument.setFileSize(uploadedFile.length());
184
- regDocument.setDueDate(uploadedFileDescriptor.getDueDate());
185
- regDocument.setFilePath("");
186
- regDocument.setSecretKey(uploadedFileDescriptor.getSecretKey());
187
-
188
- regDocumentRepository.save(regDocument);
189
-
190188 } else {
191189 logger.debug("Trovato 1 record per il documento da memorizzare");
192190 }
191
+
192
+ regDocument.setModifiedBy(userName);
193
+ regDocument.setFileHash(uploadedFileDescriptor.getSha256());
194
+ regDocument.setFileName(uploadedFileDescriptor.getFileName());
195
+ regDocument.setFileSize(uploadedFile.length());
196
+ regDocument.setDueDate(uploadedFileDescriptor.getDueDate());
197
+ regDocument.setFilePath("");
198
+ regDocument.setSecretKey(uploadedFileDescriptor.getSecretKey());
199
+ regDocument.setCustomKey(uploadedFileDescriptor.getCustomKey());
200
+
201
+ regDocumentRepository.save(regDocument);
193202
194203 try {
195204 moveUploadedFileToStorage(uploadedFile.getAbsolutePath(), regDocument);
....@@ -216,8 +225,6 @@
216225 private void moveUploadedFileToStorage( String source, RegDocument regDocument ) throws IOException {
217226 logger.debug("Spostamento file nello storage");
218227
219
- String sha256Descriptor = regDocument.getFileHash();
220
-
221228 File sourceFile = new File(source);
222229 File destinationFile = new File(generateStoragePath(regDocument));
223230
....@@ -226,15 +233,8 @@
226233 FileUtils.forceMkdirParent(destinationFile);
227234 FileUtils.copyFile(sourceFile, destinationFile);
228235 } else {
229
- logger.debug("Il file risulta gia' presente nello storage. Verifico l'integrita'");
230
- FileInputStream fis = new FileInputStream(destinationFile);
231
- String hash = DigestUtils.sha256Hex(fis);
232
- fis.close();
233
- if ( sha256Descriptor.equalsIgnoreCase(hash) == false ) {
234
- throw new IllegalStateException("L'hash del file nello storage non corrisponde con l'hash dichiarato nel descrittore del file:\n\t" +
235
- "hash file inviato: " + hash + "\n\t" +
236
- "hash dichiarato nel descrittore: " + sha256Descriptor);
237
- }
236
+ logger.debug("Il file risulta gia' presente nello storage. Aggiorno il file");
237
+ FileUtils.copyFile(sourceFile, destinationFile);
238238 }
239239
240240 regDocument.setFilePath(destinationFile.getAbsolutePath());
dg1cloud-core/src/main/resources/application.properties
....@@ -13,6 +13,7 @@
1313
1414 spring.jmx.default-domain=dg1cloud
1515
16
+spring.flyway.enabled=true
1617 #server.address=vannux.grupposistematica.it
1718 server.error.include-stacktrace=always
1819