Skip to content

Commit 742f50d

Browse files
authored
Merge pull request #71 from diging/develop
[GECO-106] make only one db call for page files (#70)
2 parents f77f7a8 + 22aa3eb commit 742f50d

13 files changed

Lines changed: 94 additions & 34 deletions

File tree

giles-eco/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,6 @@
118118
<artifactId>util</artifactId>
119119
<version>${geco.util.version}</version>
120120
</dependency>
121-
<dependency>
122-
<groupId>edu.asu.diging.giles-eco</groupId>
123-
<artifactId>september-util</artifactId>
124-
<version>${geco.september.util.version}</version>
125-
</dependency>
126121

127122
<!-- Spring -->
128123
<dependency>

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/controllers/ViewDocumentController.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,44 +105,55 @@ public void accept(IProcessingRequest t) {
105105
docBean.setTextFiles(new ArrayList<>());
106106
docBean.setMetadataUrl(metadataService.getDocumentLink(doc));
107107
docBean.setPages(new ArrayList<>());
108-
108+
109+
List<String> ids = new ArrayList<>();
110+
docBean.getTasks().forEach(t -> {
111+
if (t.getResultFileId() != null) {
112+
ids.add(t.getResultFileId());
113+
}
114+
});
115+
Map<String, IFile> additionalFilesMap = fileService.getFilesForIds(ids);
116+
117+
109118
IFile origFile = fileService.getFileById(doc.getUploadedFileId());
110119
if (origFile != null) {
111120
FilePageBean bean = createFilePageBean(fileMappingService, requestsByFileId,
112-
badgesByFile, origFile, docBean.getTasks());
121+
badgesByFile, origFile, docBean.getTasks(), additionalFilesMap);
113122
docBean.setUploadedFile(bean);
114123
}
115124

116125
IFile textFile = fileService.getFileById(doc.getExtractedTextFileId());
117126
if (textFile != null) {
118127
FilePageBean bean = createFilePageBean(fileMappingService, requestsByFileId,
119-
badgesByFile, textFile, docBean.getTasks());
128+
badgesByFile, textFile, docBean.getTasks(), additionalFilesMap);
120129
docBean.setExtractedTextFile(bean);
121130
}
122-
131+
123132
for (IPage page : doc.getPages()) {
124133
PagePageBean bean = pageMappingService.convertToT2(page, new PagePageBean());
125134
docBean.getPages().add(bean);
135+
136+
Map<String, IFile> pageFiles = fileService.getFilesForPage(page);
126137

127-
IFile imageFile = fileService.getFileById(page.getImageFileId());
138+
IFile imageFile = pageFiles.get(page.getImageFileId());
128139
if (imageFile != null) {
129140
FilePageBean pageBean = createFilePageBean(fileMappingService,
130-
requestsByFileId, badgesByFile, imageFile, docBean.getTasks());
141+
requestsByFileId, badgesByFile, imageFile, docBean.getTasks(), additionalFilesMap);
131142
bean.setImageFile(pageBean);
132143

133144
}
134145

135-
IFile pageTextFile = fileService.getFileById(page.getTextFileId());
146+
IFile pageTextFile = pageFiles.get(page.getTextFileId());
136147
if (pageTextFile != null) {
137148
FilePageBean textBean = createFilePageBean(fileMappingService,
138-
requestsByFileId, badgesByFile, pageTextFile, docBean.getTasks());
149+
requestsByFileId, badgesByFile, pageTextFile, docBean.getTasks(), additionalFilesMap);
139150
bean.setTextFile(textBean);
140151
}
141152

142-
IFile ocrFile = fileService.getFileById(page.getOcrFileId());
153+
IFile ocrFile = pageFiles.get(page.getOcrFileId());
143154
if (ocrFile != null) {
144155
FilePageBean ocrBean = createFilePageBean(fileMappingService,
145-
requestsByFileId, badgesByFile, ocrFile, docBean.getTasks());
156+
requestsByFileId, badgesByFile, ocrFile, docBean.getTasks(), additionalFilesMap);
146157
bean.setOcrFile(ocrBean);
147158
}
148159
}
@@ -153,19 +164,20 @@ public void accept(IProcessingRequest t) {
153164
private FilePageBean createFilePageBean(
154165
IGilesMappingService<IFile, FilePageBean> fileMappingService,
155166
Map<String, List<IProcessingRequest>> requestsByFileId,
156-
Map<String, List<Badge>> badgesByFile, IFile file, List<ITask> tasks)
167+
Map<String, List<Badge>> badgesByFile, IFile file, List<ITask> tasks, Map<String, IFile> additionalFiles)
157168
throws GilesMappingException {
158169
FilePageBean pageBean = fileMappingService.convertToT2(file, new FilePageBean());
159170
pageBean.setMetadataLink(metadataService.getFileLink(file));
160171
setRequestStatus(pageBean, requestsByFileId);
161172
pageBean.setBadges(badgesByFile.get(pageBean.getId()));
162-
addAdditionalFiles(pageBean, tasks, requestsByFileId);
173+
addAdditionalFiles(pageBean, tasks, requestsByFileId, additionalFiles);
163174
return pageBean;
164175
}
165176

166-
private void addAdditionalFiles(FilePageBean bean, List<ITask> tasks, Map<String, List<IProcessingRequest>> requestsByFileId) {
177+
private void addAdditionalFiles(FilePageBean bean, List<ITask> tasks,
178+
Map<String, List<IProcessingRequest>> requestsByFileId, Map<String, IFile> additionalFiles) {
167179
tasks.forEach(t -> {
168-
IFile additionalFile = fileService.getFileById(t.getResultFileId());
180+
IFile additionalFile = additionalFiles.get(t.getResultFileId());
169181
if (additionalFile != null) {
170182
if (bean.getId().equals(additionalFile.getDerivedFrom())) {
171183
AdditionalFilePageBean additionalFileBean = new AdditionalFilePageBean(t.getResultFileId(),

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/controllers/util/StatusBadgeHelper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void createBadges(DocumentPageBean docBean,
4949
if (procRequests.stream()
5050
.filter(preq -> preq.getSentRequest() instanceof ITextExtractionRequest)
5151
.count() > 0) {
52-
RequestStatus status = statusHelper.getProcessingPhaseResult(ITextExtractionRequest.class, docBean);
52+
RequestStatus status = statusHelper.getProcessingPhaseResult(ITextExtractionRequest.class, procRequests);
5353
docBean.getBadges()
5454
.add(new Badge(
5555
propertiesManager
@@ -64,7 +64,7 @@ public void createBadges(DocumentPageBean docBean,
6464
if (procRequests.stream()
6565
.filter(preq -> preq.getSentRequest() instanceof IImageExtractionRequest)
6666
.count() > 0) {
67-
RequestStatus status = statusHelper.getProcessingPhaseResult(IImageExtractionRequest.class, docBean);
67+
RequestStatus status = statusHelper.getProcessingPhaseResult(IImageExtractionRequest.class, procRequests);
6868
docBean.getBadges()
6969
.add(new Badge(
7070
propertiesManager
@@ -80,7 +80,7 @@ public void createBadges(DocumentPageBean docBean,
8080
if (procRequests.stream()
8181
.filter(preq -> preq.getSentRequest() instanceof IOCRRequest)
8282
.count() > 0) {
83-
RequestStatus status = statusHelper.getProcessingPhaseResult(IOCRRequest.class, docBean);
83+
RequestStatus status = statusHelper.getProcessingPhaseResult(IOCRRequest.class, procRequests);
8484
docBean.getBadges()
8585
.add(new Badge(
8686
propertiesManager

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/files/IFilesDatabaseClient.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,6 @@ public interface IFilesDatabaseClient extends IDatabaseClient<IFile> {
2424

2525
List<IFile> getFilesByDerivedFrom(String derivedFromId);
2626

27+
List<IFile> getFilesForIds(List<String> ids);
28+
2729
}

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/files/impl/FilesDatabaseClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package edu.asu.diging.gilesecosystem.web.files.impl;
22

3+
import java.util.ArrayList;
34
import java.util.List;
45

56
import javax.persistence.EntityManager;
67
import javax.persistence.PersistenceContext;
8+
import javax.persistence.TypedQuery;
79

810
import org.springframework.stereotype.Component;
911

@@ -41,6 +43,13 @@ public IFile saveFile(IFile file) throws UnstorableObjectException {
4143
public IFile getFileById(String id) {
4244
return em.find(File.class, id);
4345
}
46+
47+
@Override
48+
public List<IFile> getFilesForIds(List<String> ids) {
49+
TypedQuery<IFile> query = getClient().createQuery("SELECT t FROM " + File.class.getName() + " t WHERE t.id IN (:ids)", IFile.class);
50+
query.setParameter("ids", ids);
51+
return query.getResultList();
52+
}
4453

4554
@Override
4655
public List<IFile> getFilesByUploadId(String uploadId) {

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/files/impl/ProcessingRequestsDatabaseClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public class ProcessingRequestsDatabaseClient extends DatabaseClient<IProcessing
3131

3232
@Override
3333
public List<IProcessingRequest> getRequestByDocumentId(String docId) {
34-
return searchByProperty("documentId", docId, ProcessingRequest.class);
34+
List<Object> results = getClient().createQuery("SELECT t FROM " + IProcessingRequest.class.getName() + " t WHERE t.documentId = '" + docId + "'").getResultList();
35+
TypedQuery<IProcessingRequest> query = getClient().createQuery("SELECT t FROM " + IProcessingRequest.class.getName() + " t WHERE t.documentId = '" + docId + "'", IProcessingRequest.class);
36+
return query.getResultList();
3537
}
3638

3739
@Override

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/rest/UploadImagesController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public ResponseEntity<String> checkAndGetResults(
196196
"{\"error\": \"Could not write json result.\" }",
197197
HttpStatus.INTERNAL_SERVER_ERROR);
198198
}
199-
199+
200200
return new ResponseEntity<String>(sw.toString(), HttpStatus.OK);
201201
}
202202

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/rest/util/impl/JSONHelper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,19 @@ public void createDocumentJson(IDocument doc, ObjectMapper mapper, ObjectNode do
8484
ObjectNode pageNode = pagesArray.addObject();
8585
pageNode.put("nr", page.getPageNr());
8686
ArrayNode additionalPageFiles = mapper.createArrayNode();
87+
Map<String, IFile> pageFiles = fileService.getFilesForPage(page);
8788
if (page.getImageFileId() != null) {
88-
IFile imageFile = fileService.getFileById(page.getImageFileId());
89+
IFile imageFile = pageFiles.get(page.getImageFileId());
8990
pageNode.set("image", createFileJsonObject(mapper, imageFile));
9091
addFiletoArray(mapper, tasksByDerivedFrom, imageFile, additionalPageFiles);
9192
}
9293
if (page.getTextFileId() != null) {
93-
IFile textFile = fileService.getFileById(page.getTextFileId());
94+
IFile textFile = pageFiles.get(page.getTextFileId());
9495
pageNode.set("text", createFileJsonObject(mapper, textFile));
9596
addFiletoArray(mapper, tasksByDerivedFrom, textFile, additionalPageFiles);
9697
}
9798
if (page.getOcrFileId() != null) {
98-
IFile ocrFile = fileService.getFileById(page.getOcrFileId());
99+
IFile ocrFile = pageFiles.get(page.getOcrFileId());
99100
pageNode.set("ocr", createFileJsonObject(mapper, ocrFile));
100101
addFiletoArray(mapper, tasksByDerivedFrom, ocrFile, additionalPageFiles);
101102
}

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/service/core/ITransactionalFileService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package edu.asu.diging.gilesecosystem.web.service.core;
22

33
import java.util.List;
4+
import java.util.Map;
45

56
import edu.asu.diging.gilesecosystem.util.exceptions.UnstorableObjectException;
67
import edu.asu.diging.gilesecosystem.web.domain.IFile;
8+
import edu.asu.diging.gilesecosystem.web.domain.IPage;
79

810
public interface ITransactionalFileService {
911

@@ -23,4 +25,8 @@ public interface ITransactionalFileService {
2325

2426
List<IFile> getFilesByDerivedFrom(String derivedFromId);
2527

28+
Map<String, IFile> getFilesForPage(IPage page);
29+
30+
Map<String, IFile> getFilesForIds(List<String> ids);
31+
2632
}

giles-eco/src/main/java/edu/asu/diging/gilesecosystem/web/service/core/impl/TransactionalFileService.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package edu.asu.diging.gilesecosystem.web.service.core.impl;
22

3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.HashMap;
36
import java.util.List;
7+
import java.util.Map;
48

59
import org.springframework.beans.factory.annotation.Autowired;
610
import org.springframework.stereotype.Service;
711
import org.springframework.transaction.annotation.Transactional;
812

913
import edu.asu.diging.gilesecosystem.util.exceptions.UnstorableObjectException;
1014
import edu.asu.diging.gilesecosystem.web.domain.IFile;
15+
import edu.asu.diging.gilesecosystem.web.domain.IPage;
1116
import edu.asu.diging.gilesecosystem.web.files.IFilesDatabaseClient;
1217
import edu.asu.diging.gilesecosystem.web.service.core.ITransactionalFileService;
1318

@@ -51,6 +56,32 @@ public IFile getFileById(String id) {
5156
return filesDbClient.getFileById(id);
5257
}
5358

59+
@Override
60+
public Map<String, IFile> getFilesForPage(IPage page) {
61+
List<String> ids = new ArrayList<>();
62+
if (page.getImageFileId() != null) {
63+
ids.add(page.getImageFileId());
64+
}
65+
if (page.getOcrFileId() != null) {
66+
ids.add(page.getOcrFileId());
67+
}
68+
if (page.getTextFileId() != null) {
69+
ids.add(page.getTextFileId());
70+
}
71+
return getFilesForIds(ids);
72+
}
73+
74+
@Override
75+
public Map<String, IFile> getFilesForIds(List<String> ids) {
76+
Map<String, IFile> fileMap = new HashMap<>();
77+
if (ids == null || ids.isEmpty()) {
78+
return fileMap;
79+
}
80+
List<IFile> files = filesDbClient.getFilesForIds(ids);
81+
files.forEach(f -> fileMap.put(f.getId(), f));
82+
return fileMap;
83+
}
84+
5485
@Override
5586
public IFile getFileByPath(String path) {
5687
IFile file = new edu.asu.diging.gilesecosystem.web.domain.impl.File();

0 commit comments

Comments
 (0)