Skip to content

Commit f4983b4

Browse files
committed
Datasets tree visualizing - optimized
1 parent f4776c4 commit f4983b4

File tree

21 files changed

+439
-48
lines changed

21 files changed

+439
-48
lines changed

client/client/app/shared/projectContext/index.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,15 +614,41 @@ export default class projectContext {
614614
this._datasetsAreLoading = true;
615615
this._datasetsArePrepared = false;
616616
this.dispatcher.emitSimpleEvent('datasets:loading:started', null);
617-
this._datasets = (await this.projectDataService.getProjects() || []);
617+
this._datasets = (await this.projectDataService.getProjects(this._datasetsFilter) || []);
618618
this._datasetsLoaded = true;
619619
this._datasetsAreLoading = false;
620620
this.dispatcher.emitSimpleEvent('datasets:loading:finished', null);
621621
}
622622

623+
refreshReferencesPromise;
624+
_referencesAreLoading = false;
625+
623626
async refreshReferences(forceRefresh = false) {
624627
if (forceRefresh || !this._references) {
625-
this._references = await this.genomeDataService.loadAllReference();
628+
if (this._referencesAreLoading) {
629+
return this.refreshReferencesPromise;
630+
}
631+
this._referencesAreLoading = true;
632+
this.refreshReferencesPromise = new Promise((resolve) => {
633+
this.genomeDataService.loadAllReference(this._datasetsFilter).then(data => {
634+
this._references = data;
635+
this._references.forEach(r => {
636+
if (!r.annotationFiles) {
637+
r.annotationFiles = [];
638+
}
639+
if (r.geneFile && r.annotationFiles.filter(a =>
640+
a.name.toLowerCase() === r.geneFile.name.toLowerCase() && a.format.toLowerCase() === r.geneFile.format.toLowerCase()
641+
).length === 0) {
642+
r.geneFile.selected = true;
643+
r.geneFile.isGeneFile = true;
644+
r.annotationFiles.push(r.geneFile);
645+
}
646+
});
647+
this._referencesAreLoading = false;
648+
resolve();
649+
});
650+
});
651+
return this.refreshReferencesPromise;
626652
}
627653
}
628654

client/client/dataServices/genome/genome-data-service.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ export class GenomeDataService extends DataService {
1616
* Returns all reference genomes that are available in the system at the moment.
1717
* @returns {promise}
1818
*/
19-
loadAllReference() {
20-
return this.get('reference/loadAll');
19+
loadAllReference(referenceName) {
20+
const url = referenceName ? `reference/loadAll?referenceName=${referenceName}` : 'reference/loadAll';
21+
return this.get(url);
2122
}
2223

2324
loadReferenceTrack(reference) {

client/client/dataServices/project/project-data-service.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import {DataService} from '../data-service';
66
*/
77
export class ProjectDataService extends DataService {
88

9-
getProjects() {
9+
getProjects(referenceName) {
1010
return new Promise((resolve) => {
11-
this.get('project/tree').catch(() => resolve([])).then(data => {
11+
const url = referenceName ? `project/tree?referenceName=${referenceName}` : 'project/tree';
12+
this.get(url).catch(() => resolve([])).then(data => {
1213
if (data !== null && data !== undefined) {
1314
resolve(data);
1415
}

server/catgenome/profiles/jar/catgenome.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ database.driver.class=org.h2.Driver
2424
database.jdbc.url=jdbc:h2:file:./H2/catgenome
2525
#vcf.filter.whitelist=AA,DP,HM2,HM3
2626
vcf.extended.info.patterns='|'
27+
use.embedded.tomcat=true

server/catgenome/src/main/java/com/epam/catgenome/app/AppMVCConfiguration.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44

55
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.beans.factory.annotation.Value;
67
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
78
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
89
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
@@ -36,17 +37,35 @@
3637
@ComponentScan(basePackages = {"com.epam.catgenome.config", "com.epam.catgenome.controller"})
3738
public class AppMVCConfiguration extends WebMvcConfigurerAdapter {
3839

40+
private static final int CACHE_PERIOD = 60 * 60 * 24;
41+
private static final int CACHE_SIZE = 1024 * 1024 * 100;
42+
private static final int TOMCAT_CACHE_PERIOD = CACHE_PERIOD * 1000;
43+
3944
@Autowired
4045
private ApplicationContext applicationContext;
4146

42-
//to skip tld scan completely
47+
@Value("#{catgenome['use.embedded.tomcat']}")
48+
private String useEmbedded;
49+
50+
@Bean
51+
public TomcatConfigurer tomcatConfigurerImpl() {
52+
if (useEmbeddedContainer()) {
53+
return new TomcatConfigurerImpl();
54+
} else {
55+
return null;
56+
}
57+
}
58+
4359
@Bean
4460
@ConditionalOnClass({EmbeddedServletContainerFactory.class })
4561
public EmbeddedServletContainerCustomizer tomcatContainerCustomizer() {
4662
return container -> {
4763
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
4864
tomcat.setTldSkip("*.jar");
49-
65+
if (useEmbeddedContainer()) {
66+
TomcatConfigurer configurer = applicationContext.getBean(TomcatConfigurer.class);
67+
configurer.configure(tomcat, CACHE_SIZE, TOMCAT_CACHE_PERIOD);
68+
}
5069
};
5170
}
5271

@@ -55,6 +74,9 @@ public void addResourceHandlers(ResourceHandlerRegistry registry) {
5574
registry.addResourceHandler("/swagger-ui/**")
5675
.addResourceLocations("/swagger-ui/", "classpath:/static/swagger-ui/",
5776
"classpath:/META-INF/resources/webjars/swagger-ui/2.0.24/");
77+
registry.addResourceHandler("/**")
78+
.addResourceLocations("classpath:/static/")
79+
.setCachePeriod(CACHE_PERIOD);
5880
}
5981

6082
@Override
@@ -138,4 +160,8 @@ public FilterRegistrationBean disableDefaultOAuth(OAuth2AuthenticationProcessing
138160
registration.setEnabled(false);
139161
return registration;
140162
}
163+
164+
private boolean useEmbeddedContainer() {
165+
return useEmbedded != null && "true".equals(useEmbedded);
166+
}
141167
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.epam.catgenome.app;
2+
3+
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
4+
5+
/**
6+
* Enables configuration of Tomcat container, should be used only with embedded container
7+
*/
8+
public interface TomcatConfigurer {
9+
void configure(TomcatEmbeddedServletContainerFactory tomcat, int cacheSize,
10+
int tomcatCacheSize);
11+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.epam.catgenome.app;
2+
3+
import org.apache.catalina.webresources.StandardRoot;
4+
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
5+
6+
public class TomcatConfigurerImpl implements TomcatConfigurer {
7+
8+
public TomcatConfigurerImpl() {
9+
// no op
10+
}
11+
12+
@Override
13+
public void configure(TomcatEmbeddedServletContainerFactory tomcat, int cacheSize,
14+
int tomcatCacheSize) {
15+
tomcat.addContextCustomizers((context) -> {
16+
StandardRoot standardRoot = new StandardRoot(context);
17+
standardRoot.setCachingAllowed(true);
18+
standardRoot.setCacheMaxSize(cacheSize);
19+
standardRoot.setCacheTtl(tomcatCacheSize);
20+
context.setResources(standardRoot);
21+
});
22+
}
23+
}

server/catgenome/src/main/java/com/epam/catgenome/controller/project/ProjectController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ public Result<List<ProjectVO>> loadProjectsForCurrentUser() {
103103
@ApiResponses(
104104
value = {@ApiResponse(code = HTTP_STATUS_OK, message = API_STATUS_DESCRIPTION)
105105
})
106-
public Result<List<ProjectVO>> loadProjectsTreeForCurrentUser(@RequestParam(required = false) Long parentId) {
107-
return Result.success(ProjectConverter.convertTo(projectManager.loadProjectTree(parentId)));
106+
public Result<List<ProjectVO>> loadProjectsTreeForCurrentUser(@RequestParam(required = false) Long parentId,
107+
@RequestParam(required = false) String referenceName) {
108+
return Result.success(ProjectConverter.convertTo(projectManager.loadProjectTree(parentId, referenceName)));
108109
}
109110

110111
@RequestMapping(value = "/project/{projectId}/load", method = RequestMethod.GET)

server/catgenome/src/main/java/com/epam/catgenome/controller/reference/ReferenceController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ public class ReferenceController extends AbstractRESTController {
9191
@ApiResponses(
9292
value = {@ApiResponse(code = HTTP_STATUS_OK, message = API_STATUS_DESCRIPTION)
9393
})
94-
public final Result<List<Reference>> loadAllReferences() throws IOException {
95-
return Result.success(referenceGenomeManager.loadAllReferenceGenomes());
94+
public final Result<List<Reference>> loadAllReferences(
95+
@RequestParam(required = false) String referenceName) throws IOException {
96+
return Result.success(referenceGenomeManager.loadAllReferenceGenomes(referenceName));
9697
}
9798

9899
@ResponseBody

server/catgenome/src/main/java/com/epam/catgenome/dao/BiologicalDataItemDao.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class BiologicalDataItemDao extends NamedParameterJdbcDaoSupport {
7979
private String loadBiologicalDataItemsByNameStrictQuery;
8080
private String loadBiologicalDataItemsByNamesStrictQuery;
8181
private String loadBiologicalDataItemsByNameQuery;
82+
private String loadBiologicalDataItemsByNameCaseInsensitiveQuery;
8283

8384
@Autowired
8485
private DaoHelper daoHelper;
@@ -186,6 +187,15 @@ public List<BiologicalDataItem> loadFilesByNamesStrict(final List<String> names)
186187
return items;
187188
}
188189

190+
@Transactional(propagation = Propagation.MANDATORY)
191+
public List<BiologicalDataItem> loadFilesByNameCaseInsensitive(final String name) {
192+
final MapSqlParameterSource params = new MapSqlParameterSource();
193+
params.addValue(BiologicalDataItemParameters.NAME.name(), name.toLowerCase());
194+
return getNamedParameterJdbcTemplate().query(loadBiologicalDataItemsByNameCaseInsensitiveQuery,
195+
params, getRowMapper());
196+
}
197+
198+
189199
/**
190200
* Finds files with names matching a specified file name, performs substring, case insensitive search
191201
* @param name search query
@@ -559,4 +569,10 @@ public void setLoadBiologicalDataItemsByNameQuery(String loadBiologicalDataItems
559569
public void setLoadBiologicalDataItemsByNamesStrictQuery(String loadBiologicalDataItemsByNamesStrictQuery) {
560570
this.loadBiologicalDataItemsByNamesStrictQuery = loadBiologicalDataItemsByNamesStrictQuery;
561571
}
572+
573+
574+
public void setLoadBiologicalDataItemsByNameCaseInsensitiveQuery(
575+
String loadBiologicalDataItemsByNameCaseInsensitiveQuery) {
576+
this.loadBiologicalDataItemsByNameCaseInsensitiveQuery = loadBiologicalDataItemsByNameCaseInsensitiveQuery;
577+
}
562578
}

0 commit comments

Comments
 (0)