diff --git a/pom.xml b/pom.xml
index 5c381c028a97064747b9ff4588677fe49258b7e5..1848a0c72cfc4d5fbc1c03c1b44f5e48271d7560 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
4.1.4
4.3.11.Final
- 2.3.3
+ 2.3.6
2.7.4
1.7.21
@@ -268,6 +268,13 @@
${spring-data-jpa.version}
+
+ org.springframework.security
+ spring-security-test
+ ${spring.security.version}
+ test
+
+
com.querydsl
querydsl-jpa
@@ -646,12 +653,8 @@
2.19.1
once
- -Xms512m -Xmx1024m
+ -Xms512m -Xmx1024m -server
false
-
-
- *.docs.*Test.java
-
@@ -864,6 +867,10 @@
true
+
+ src/test/resources
+ true
+
${project.build.directory}/generated-resources
false
diff --git a/src/main/java/org/genesys/catalog/api/v0/DatasetController.java b/src/main/java/org/genesys/catalog/api/v0/DatasetController.java
index 22daae62611fdf87e4dc5306597deeeaf485cbde..413439f3ce7ce4293b0409c081d3274a7fce8ef7 100644
--- a/src/main/java/org/genesys/catalog/api/v0/DatasetController.java
+++ b/src/main/java/org/genesys/catalog/api/v0/DatasetController.java
@@ -61,7 +61,7 @@ import io.swagger.annotations.Api;
public class DatasetController {
// Rest controller base URL
- protected static final String CONTROLLER_URL = ApiBaseController.APIv0_BASE + "/dataset";
+ public static final String CONTROLLER_URL = ApiBaseController.APIv0_BASE + "/dataset";
private static final Logger LOG = LoggerFactory.getLogger(DatasetController.class);
diff --git a/src/main/java/org/genesys/catalog/api/v0/DatasetCreatorController.java b/src/main/java/org/genesys/catalog/api/v0/DatasetCreatorController.java
index 83dd7b23285b531ce963cf2085a44993d860bb88..3890d20d62fe658809347f8c0d425aa34d4c6a22 100644
--- a/src/main/java/org/genesys/catalog/api/v0/DatasetCreatorController.java
+++ b/src/main/java/org/genesys/catalog/api/v0/DatasetCreatorController.java
@@ -49,7 +49,7 @@ import java.util.UUID;
public class DatasetCreatorController {
/** The Constant API_BASE. */
- protected static final String CONTROLLER_URL = DatasetController.CONTROLLER_URL + "/{UUID}/datasetcreator";
+ public static final String CONTROLLER_URL = DatasetController.CONTROLLER_URL + "/{UUID}/datasetcreator";
/** The dataset service. */
@Autowired
diff --git a/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java b/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java
index 7eef6cdc9da21a5237f5f189585f72601217df42..c465092536a0155927d552e23cda2f6633cbb19c 100644
--- a/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java
+++ b/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java
@@ -116,7 +116,7 @@ public class DescriptorController {
* @throws IOException
*/
@PostMapping(value = "/list")
- public FilteredPage listDescriptorsByFilter(@RequestParam(name = "p", required = false, defaultValue = "0") final int page,
+ public FilteredPage listDescriptors(@RequestParam(name = "p", required = false, defaultValue = "0") final int page,
@RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize,
@RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction,
@RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort,
@@ -141,7 +141,7 @@ public class DescriptorController {
* @param filterCode the filter code
* @return the filtered page
* @throws IOException Signals that an I/O exception has occurred.
- * @deprecated Use {@link #listDescriptorsByFilter(int, int, org.springframework.data.domain.Sort.Direction, String[], DescriptorFilter)}
+ * @deprecated Use {@link #listDescriptors(int, int, org.springframework.data.domain.Sort.Direction, String[], DescriptorFilter)}
*/
@PostMapping(value = "/list/{filterCode}")
public FilteredPage listDescriptorsByShort(@RequestParam(name = "p", required = false, defaultValue = "0") final int page,
diff --git a/src/main/java/org/genesys/catalog/mvc/DescriptorListExporter.java b/src/main/java/org/genesys/catalog/mvc/DescriptorListExporter.java
index 4ee82efaab48d0bb89fd1d6ff8e8a767c3ca43cb..f12c2260df5ce1c6cc9b54c092920df84607d2b8 100644
--- a/src/main/java/org/genesys/catalog/mvc/DescriptorListExporter.java
+++ b/src/main/java/org/genesys/catalog/mvc/DescriptorListExporter.java
@@ -41,7 +41,7 @@ import java.util.Map;
public class DescriptorListExporter {
@Autowired
- private FreemarkerTemplating freemarker;
+ private FreemarkerTemplating freemarkerTemplating;
/** The Constant OPTIONS. */
/*@formatter:off*/
@@ -75,7 +75,7 @@ public class DescriptorListExporter {
public String markdownDescriptorList(final DescriptorList descriptorList) throws FreemarkerException {
final Map root = new HashMap<>();
root.put("descriptorList", descriptorList);
- return freemarker.processTemplateResource("descriptorlist/booklet.ftl", root);
+ return freemarkerTemplating.processTemplateResource("descriptorlist/booklet.ftl", root);
}
/**
@@ -88,7 +88,7 @@ public class DescriptorListExporter {
public String htmlDescriptorList(final DescriptorList descriptorList) throws FreemarkerException {
final Map root = new HashMap<>();
root.put("descriptorList", descriptorList);
- final String markdown = freemarker.processTemplateResource("descriptorlist/booklet.ftl", root);
+ final String markdown = freemarkerTemplating.processTemplateResource("descriptorlist/booklet.ftl", root);
// System.err.println(markdown);
final Parser parser = Parser.builder(OPTIONS).build();
@@ -103,7 +103,7 @@ public class DescriptorListExporter {
root.put("author", StringUtils.defaultIfEmpty(descriptorList.getPublisher(), descriptorList.getOwner().getName()));
root.put("html", html);
- return freemarker.processTemplateResource("html.ftl", root);
+ return freemarkerTemplating.processTemplateResource("html.ftl", root);
}
}
diff --git a/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java
index 077879c72cb0748ab8627b0e9bce7c65edce93a6..c523cdec3f94dab19c8494688c2b3a8c0f6a0f44 100644
--- a/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java
+++ b/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java
@@ -79,7 +79,7 @@ public class DatasetServiceImpl implements DatasetService {
/** The file repo service. */
@Autowired
- private RepositoryService fileRepoService;
+ private RepositoryService repositoryService;
@Autowired
private CustomAclService aclService;
@@ -304,7 +304,7 @@ public class DatasetServiceImpl implements DatasetService {
InvalidRepositoryFileDataException {
dataset = datasetRepository.findByUuidAndVersion(dataset.getUuid(), dataset.getVersion());
- final RepositoryFile repositoryFile = fileRepoService.addFile(Paths.get(datasetRepositoryPath, dataset.getUuid().toString()).toAbsolutePath().toString(), file
+ final RepositoryFile repositoryFile = repositoryService.addFile(Paths.get(datasetRepositoryPath, dataset.getUuid().toString()).toAbsolutePath().toString(), file
.getOriginalFilename(), file.getContentType(), file.getBytes(), null);
dataset.getRepositoryFiles().add(repositoryFile);
return lazyLoad(datasetRepository.save(dataset));
@@ -320,7 +320,7 @@ public class DatasetServiceImpl implements DatasetService {
if (datasetFile == null) {
throw new NotFoundElement("No such dataset file");
}
- final RepositoryFile updated = fileRepoService.updateMetadata(metadata);
+ final RepositoryFile updated = repositoryService.updateMetadata(metadata);
// replace it
dataset.getRepositoryFiles().replaceAll(df -> df.getUuid().equals(datasetFile.getUuid()) ? updated : df);
return lazyLoad(dataset);
@@ -335,9 +335,9 @@ public class DatasetServiceImpl implements DatasetService {
public Dataset removeDatasetFile(Dataset dataset, final UUID fileUuid) throws NotFoundElement, NoSuchRepositoryFileException, IOException {
dataset = datasetRepository.findByUuidAndVersion(dataset.getUuid(), dataset.getVersion());
- final RepositoryFile repositoryFile = fileRepoService.getFile(fileUuid);
+ final RepositoryFile repositoryFile = repositoryService.getFile(fileUuid);
dataset.getRepositoryFiles().remove(repositoryFile);
- fileRepoService.removeFile(repositoryFile);
+ repositoryService.removeFile(repositoryFile);
return lazyLoad(datasetRepository.save(dataset));
}
diff --git a/src/main/java/org/genesys2/server/api/admin/v0/CacheController.java b/src/main/java/org/genesys2/server/api/admin/v0/CacheController.java
index c45809ac7cc4b11a372b6e01766ad9e940495439..0ac4571eb7a6133ce2e7353f0aa7393affe50eeb 100644
--- a/src/main/java/org/genesys2/server/api/admin/v0/CacheController.java
+++ b/src/main/java/org/genesys2/server/api/admin/v0/CacheController.java
@@ -43,10 +43,12 @@ import io.swagger.annotations.Api;
@Controller("adminCacheApi0")
@PreAuthorize("isAuthenticated()")
-@RequestMapping(value = { "/api/v0/admin/cache", "/json/v0/cache" })
+@RequestMapping(value = { CacheController.API_URL, "/json/v0/cache" })
@Api(tags = { "admin" })
public class CacheController extends ApiBaseController {
+ public final static String API_URL = ApiBaseController.APIv0_ADMIN_BASE + "/cache";
+
@Autowired
private MappingService mappingService;
diff --git a/src/main/java/org/genesys2/server/api/v0/CropsController.java b/src/main/java/org/genesys2/server/api/v0/CropsController.java
index d5da43ab57daa32014968a6f19e878221b770edf..497d1f4a24ae0e359c0943433ff13bf0b169ef8a 100644
--- a/src/main/java/org/genesys2/server/api/v0/CropsController.java
+++ b/src/main/java/org/genesys2/server/api/v0/CropsController.java
@@ -56,7 +56,7 @@ import net.sf.oval.Validator;
@Api(tags = { "crop" })
public class CropsController extends ApiBaseController {
- protected static final String CONTROLLER_URL = ApiBaseController.APIv0_BASE + "/crops";
+ public static final String CONTROLLER_URL = ApiBaseController.APIv0_BASE + "/crops";
@Autowired
GenesysService genesysService;
diff --git a/src/main/java/org/genesys2/server/api/v0/PermissionController.java b/src/main/java/org/genesys2/server/api/v0/PermissionController.java
index 85374deaab5c550d2e392e2331aeff9b0faf4c42..100b13c57bc9a8e13149da5c51188ab454de5a99 100644
--- a/src/main/java/org/genesys2/server/api/v0/PermissionController.java
+++ b/src/main/java/org/genesys2/server/api/v0/PermissionController.java
@@ -62,7 +62,7 @@ public class PermissionController extends ApiBaseController {
@RequestMapping(value = "/add", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ApiResult addPermission(@RequestBody PermissionJson permissionJson) {
LOG.info("Adding permission {}", permissionJson);
- final AclObjectIdentity oid = aclService.getObjectIdentity(permissionJson.getOid(), permissionJson.getClazz());
+ final AclObjectIdentity oid = aclService.ensureObjectIdentity(permissionJson.getOid(), permissionJson.getClazz());
if (permissionJson.getAuthority() != null) {
final AclSid sid = aclService.getAuthoritySid(permissionJson.getAuthority());
diff --git a/src/main/java/org/genesys2/server/model/genesys/AccessionId.java b/src/main/java/org/genesys2/server/model/genesys/AccessionId.java
index a90a2e74fb399941b22270f65efbef3972f1340f..caff024ba667e7ce9728d31356981f59901dcc59 100644
--- a/src/main/java/org/genesys2/server/model/genesys/AccessionId.java
+++ b/src/main/java/org/genesys2/server/model/genesys/AccessionId.java
@@ -80,7 +80,7 @@ public class AccessionId extends AuditedVersionedModel implements IdUUID {
@OneToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, optional = true, orphanRemoval = true)
@JoinColumn(name = "pdciId", unique = true)
@JsonIgnoreProperties({ "accession" })
- @JsonView({ JsonViews.Root.class })
+ @JsonView({ JsonViews.Internal.class })
private PDCI pdci;
@Column(name = "storage", nullable = false)
diff --git a/src/main/java/org/genesys2/server/service/audit/SpringSecurityAuditorAware.java b/src/main/java/org/genesys2/server/service/audit/SpringSecurityAuditorAware.java
deleted file mode 100644
index 7553a85a57a1d23d1d7a70d28f2ed76452580d66..0000000000000000000000000000000000000000
--- a/src/main/java/org/genesys2/server/service/audit/SpringSecurityAuditorAware.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Copyright 2014 Global Crop Diversity Trust
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- **/
-
-package org.genesys2.server.service.audit;
-
-import org.genesys.blocks.security.SecurityContextUtil;
-import org.genesys2.server.model.impl.User;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.data.domain.AuditorAware;
-import org.springframework.stereotype.Component;
-
-@Component("auditorAware")
-public class SpringSecurityAuditorAware implements AuditorAware {
- public static final Logger LOG = LoggerFactory.getLogger(SpringSecurityAuditorAware.class);
-
- @Override
- public Long getCurrentAuditor() {
- final User user = SecurityContextUtil.getCurrentUser();
- return user == null ? null : user.getId();
- }
-}
diff --git a/src/main/java/org/genesys2/server/service/impl/AccessionListServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/AccessionListServiceImpl.java
index e48b0a6be54b237b7606ada2bb98b99fc3134749..3b6c709dd60e09f408036f5d87fa2656b8b82ac1 100644
--- a/src/main/java/org/genesys2/server/service/impl/AccessionListServiceImpl.java
+++ b/src/main/java/org/genesys2/server/service/impl/AccessionListServiceImpl.java
@@ -49,7 +49,7 @@ public class AccessionListServiceImpl implements AccessionListService {
@Autowired
AccessionListRepository accessionListRepository;
- @Autowired
+ @Autowired(required = false)
ElasticUpdater elasticUpdater;
@Override
@@ -95,9 +95,10 @@ public class AccessionListServiceImpl implements AccessionListService {
@PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#accessionList, 'WRITE')")
@Transactional
public void removeAll(AccessionList accessionList) {
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
-
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
accessionListRepository.removeAll(accessionList);
}
@@ -105,9 +106,10 @@ public class AccessionListServiceImpl implements AccessionListService {
@PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#accessionList, 'WRITE')")
@Transactional
public void addToList(AccessionList list, AccessionData accession) {
- // Re-index
- elasticUpdater.update(Accession.class, accession.getId());
-
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.update(Accession.class, accession.getId());
+ }
accessionListRepository.addOne(list, accession.getAccessionId());
}
@@ -120,22 +122,28 @@ public class AccessionListServiceImpl implements AccessionListService {
accessionListRepository.addAll(acceList, accessionIds);
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionIds.toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionIds.toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
}
@Override
@PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#accessionList, 'WRITE')")
@Transactional
public void setList(AccessionList accessionList, Collection accessionIds) {
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
-
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
+
accessionListRepository.removeAll(accessionList);
accessionListRepository.addAll(accessionList, accessionIds);
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionIds.toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionIds.toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
}
@Override
@@ -144,17 +152,20 @@ public class AccessionListServiceImpl implements AccessionListService {
public void addToList(AccessionList accessionList, AppliedFilters filters) {
accessionListRepository.addAll(accessionList, filters);
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
}
@Override
@PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#accessionList, 'DELETE')")
@Transactional
public void delete(AccessionList accessionList) {
- // Re-index
- elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
-
+ if (elasticUpdater!=null) {
+ // Re-index
+ elasticUpdater.updateAll(Accession.class, accessionListRepository.getAccessionIds(accessionList).toArray(ArrayUtils.EMPTY_LONG_OBJECT_ARRAY));
+ }
accessionListRepository.delete(accessionList);
}
diff --git a/src/main/java/org/genesys2/server/service/impl/ElasticSearchManagementServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/ElasticSearchManagementServiceImpl.java
index 6727e676926f2d6af87fc42e25d85d6aea55733c..571984f94f728b3b9c253e8ac9b874d6d353096f 100644
--- a/src/main/java/org/genesys2/server/service/impl/ElasticSearchManagementServiceImpl.java
+++ b/src/main/java/org/genesys2/server/service/impl/ElasticSearchManagementServiceImpl.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
import javax.annotation.Resource;
@@ -58,8 +59,6 @@ import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
-import com.hazelcast.core.ILock;
-
@Service
public class ElasticSearchManagementServiceImpl implements ElasticSearchManagementService {
@@ -81,7 +80,7 @@ public class ElasticSearchManagementServiceImpl implements ElasticSearchManageme
private GenesysLowlevelRepository genesysLowlevelRepository;
@Resource
- private ILock elasticsearchAdminLock;
+ private Lock elasticsearchAdminLock;
private final Map> clazzMap;
diff --git a/src/main/java/org/genesys2/server/service/impl/FullTextSearchServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/FullTextSearchServiceImpl.java
index d42b0bdad0a118966e4fb0ec3dbe7afb70c9c79a..2b839c1f39189cb952f4d06b2b4c3f97db689069 100644
--- a/src/main/java/org/genesys2/server/service/impl/FullTextSearchServiceImpl.java
+++ b/src/main/java/org/genesys2/server/service/impl/FullTextSearchServiceImpl.java
@@ -15,10 +15,7 @@
**/
package org.genesys2.server.service.impl;
-import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
-import static org.elasticsearch.index.query.QueryBuilders.functionScoreQuery;
-import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
-import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;
+import static org.elasticsearch.index.query.QueryBuilders.*;
import static org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders.fieldValueFactorFunction;
import java.util.ArrayList;
@@ -35,7 +32,6 @@ import org.genesys2.server.model.impl.ActivityPost;
import org.genesys2.server.model.impl.Article;
import org.genesys2.server.model.impl.Country;
import org.genesys2.server.model.impl.FaoInstitute;
-import org.genesys2.server.mvc.JspHelper;
import org.genesys2.server.persistence.ActivityPostRepository;
import org.genesys2.server.persistence.ArticleRepository;
import org.genesys2.server.persistence.CountryRepository;
@@ -86,9 +82,6 @@ public class FullTextSearchServiceImpl implements FullTextSearchService, Initial
@Autowired
private FaoInstituteRepository instituteRepository;
- @Autowired
- private JspHelper jspHelper;
-
@Autowired
private ContentService contentService;
@@ -326,7 +319,7 @@ public class FullTextSearchServiceImpl implements FullTextSearchService, Initial
document.setSummary(activityPost.getTitle());
document.setCreatedDate(activityPost.getCreatedDate());
document.setLastModifiedDate(activityPost.getLastModifiedDate());
- document.setUrlToContent("/content/news/" + activityPost.getId() + "/" + this.jspHelper.suggestUrlForText(activityPost.getTitle()));
+ document.setUrlToContent("/content/news/" + activityPost.getId() + "/");
}
private void updateDocument(Country country, FullTextDocument document) {
diff --git a/src/main/java/org/genesys2/server/persistence/GenesysLowlevelRepositoryCustomImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysLowlevelRepositoryCustomImpl.java
similarity index 99%
rename from src/main/java/org/genesys2/server/persistence/GenesysLowlevelRepositoryCustomImpl.java
rename to src/main/java/org/genesys2/server/service/impl/GenesysLowlevelRepositoryCustomImpl.java
index babb91b5da016528b53470bb1dc5bad19c51f4fa..ff694156850c4730d827ea91720157dd750022f3 100644
--- a/src/main/java/org/genesys2/server/persistence/GenesysLowlevelRepositoryCustomImpl.java
+++ b/src/main/java/org/genesys2/server/service/impl/GenesysLowlevelRepositoryCustomImpl.java
@@ -14,7 +14,7 @@
* limitations under the License.
**/
-package org.genesys2.server.persistence;
+package org.genesys2.server.service.impl;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -24,7 +24,8 @@ import java.sql.SQLException;
import java.util.List;
import org.genesys2.server.model.genesys.Method;
-import org.genesys2.server.service.impl.DirectMysqlQuery;
+import org.genesys2.server.persistence.GenesysLowlevelRepository;
+import org.genesys2.server.persistence.MethodRepository;
import org.genesys2.server.service.impl.DirectMysqlQuery.MethodResolver;
import org.genesys2.server.service.impl.FilterHandler.AppliedFilters;
import org.slf4j.Logger;
diff --git a/src/main/java/org/genesys2/server/service/impl/TaxonomyManager.java b/src/main/java/org/genesys2/server/service/impl/TaxonomyManager.java
index 79a28bf70aa8dc3d2f62be18e71e1273f00d766b..fff7bdd07492bb02ff03284c34400fcb07349387 100644
--- a/src/main/java/org/genesys2/server/service/impl/TaxonomyManager.java
+++ b/src/main/java/org/genesys2/server/service/impl/TaxonomyManager.java
@@ -17,6 +17,7 @@
package org.genesys2.server.service.impl;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
import javax.annotation.Resource;
@@ -49,7 +50,7 @@ public class TaxonomyManager {
* update logic
*/
@Resource
- private ILock taxonomyUpdateLock;
+ private Lock taxonomyUpdateLock;
public Taxonomy2 ensureTaxonomy2(String genus, String species, String spAuthor, String subtaxa, String subtAuthor) {
if (StringUtils.isBlank(genus)) {
diff --git a/src/main/java/org/genesys2/server/persistence/TraitValueRepositoryImpl.java b/src/main/java/org/genesys2/server/service/impl/TraitValueRepositoryImpl.java
similarity index 97%
rename from src/main/java/org/genesys2/server/persistence/TraitValueRepositoryImpl.java
rename to src/main/java/org/genesys2/server/service/impl/TraitValueRepositoryImpl.java
index e6f8618bdb4d0184d50fcdb492d3e2f157f4a943..489767cfae48b12bb249deb2a4879c3ce18e59e7 100644
--- a/src/main/java/org/genesys2/server/persistence/TraitValueRepositoryImpl.java
+++ b/src/main/java/org/genesys2/server/service/impl/TraitValueRepositoryImpl.java
@@ -14,7 +14,7 @@
* limitations under the License.
**/
-package org.genesys2.server.persistence;
+package org.genesys2.server.service.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -37,6 +37,11 @@ import org.genesys2.server.model.genesys.ExperimentAccessionTrait;
import org.genesys2.server.model.genesys.ExperimentTrait;
import org.genesys2.server.model.genesys.Metadata;
import org.genesys2.server.model.genesys.Method;
+import org.genesys2.server.persistence.AccessionTraitRepository;
+import org.genesys2.server.persistence.MetadataAccessionRepository;
+import org.genesys2.server.persistence.MetadataMethodRepository;
+import org.genesys2.server.persistence.MethodRepository;
+import org.genesys2.server.persistence.TraitValueRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -51,7 +56,7 @@ import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
-@Transactional(readOnly = true)
+//@Transactional(readOnly = true)
public class TraitValueRepositoryImpl implements TraitValueRepository {
public static final Logger LOG = LoggerFactory.getLogger(TraitValueRepository.class);
private JdbcTemplate jdbcTemplate;
diff --git a/src/main/java/org/genesys2/server/service/worker/ElasticUpdater.java b/src/main/java/org/genesys2/server/service/worker/ElasticUpdater.java
index 853d1041fa17f9b713c5dd69782d485b92bd1212..946149e4d39c0a6e30949ded0f8fa857087ef956 100644
--- a/src/main/java/org/genesys2/server/service/worker/ElasticUpdater.java
+++ b/src/main/java/org/genesys2/server/service/worker/ElasticUpdater.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.BlockingQueue;
import javax.annotation.Resource;
@@ -34,8 +35,6 @@ import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.stereotype.Component;
-import com.hazelcast.core.IQueue;
-
/**
* Component that receives updated or deleted accession IDs and uses a
* background thread to refresh ES
@@ -50,10 +49,10 @@ public class ElasticUpdater {
private ElasticsearchTemplate elasticsearchTemplate;
@Resource
- private IQueue elasticRemoveQueue;
+ private BlockingQueue elasticRemoveQueue;
@Resource
- private IQueue elasticUpdateQueue;
+ private BlockingQueue elasticUpdateQueue;
/**
* Schedule objects for removal
diff --git a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterAspect.java b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterAspect.java
index 201330057dbb77ee603d9680715cfec0f9d56eff..9b1e7a7c7f9ace6e01c397c5dba886578f5297ed 100644
--- a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterAspect.java
+++ b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterAspect.java
@@ -337,7 +337,10 @@ public class ElasticUpdaterAspect {
if (LOG.isTraceEnabled()) {
LOG.trace("Returning from {} id={}", joinPoint.toLongString(), (long) joinPoint.getArgs()[0]);
}
- elasticUpdater.remove(Article.class, (Long) joinPoint.getArgs()[0]);
+ // test for deleteAll with no args
+ if (joinPoint.getArgs().length > 0) {
+ elasticUpdater.remove(Article.class, (Long) joinPoint.getArgs()[0]);
+ }
}
/**
@@ -352,7 +355,10 @@ public class ElasticUpdaterAspect {
if (LOG.isTraceEnabled()) {
LOG.trace("Returning from {} id={}", joinPoint.toLongString(), (long) joinPoint.getArgs()[0]);
}
- elasticUpdater.remove(FullTextDocument.class, (Long) joinPoint.getArgs()[0]);
+ // test for deleteAll with no args
+ if (joinPoint.getArgs().length > 0) {
+ elasticUpdater.remove(FullTextDocument.class, (Long) joinPoint.getArgs()[0]);
+ }
}
/**
@@ -367,7 +373,10 @@ public class ElasticUpdaterAspect {
if (LOG.isTraceEnabled()) {
LOG.trace("Returning from {} id={}", joinPoint.toLongString(), (long) joinPoint.getArgs()[0]);
}
- elasticUpdater.remove(Country.class, (Long) joinPoint.getArgs()[0]);
+ // test for deleteAll with no args
+ if (joinPoint.getArgs().length > 0) {
+ elasticUpdater.remove(Country.class, (Long) joinPoint.getArgs()[0]);
+ }
}
/**
@@ -382,6 +391,9 @@ public class ElasticUpdaterAspect {
if (LOG.isTraceEnabled()) {
LOG.trace("Returning from {} id={}", joinPoint.toLongString(), (long) joinPoint.getArgs()[0]);
}
- elasticUpdater.remove(FaoInstitute.class, (Long) joinPoint.getArgs()[0]);
+ // test for deleteAll with no args
+ if (joinPoint.getArgs().length > 0) {
+ elasticUpdater.remove(FaoInstitute.class, (Long) joinPoint.getArgs()[0]);
+ }
}
}
diff --git a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java
index 18dcb9f097fd948308bd0f5c67d540d81a03dea7..74d577148478af4fe4e157fe06ea67e1eb88e7e6 100644
--- a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java
+++ b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java
@@ -3,6 +3,7 @@ package org.genesys2.server.service.worker;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.BlockingQueue;
import javax.annotation.Resource;
@@ -17,14 +18,12 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
-import com.hazelcast.core.IQueue;
-
/**
* ES Processor component uses Spring's @Scheduled annotation to scan queues with 2000ms delay measured from the
* completion time of each preceding invocation.
*/
@Component
-class ElasticUpdaterProcessor {
+public class ElasticUpdaterProcessor {
public static final Logger LOG = LoggerFactory.getLogger(ElasticUpdaterProcessor.class);
private static final int BATCH_SIZE = 100;
@@ -39,10 +38,10 @@ class ElasticUpdaterProcessor {
private ThreadPoolTaskExecutor executor;
@Resource
- private IQueue elasticRemoveQueue;
+ private BlockingQueue elasticRemoveQueue;
@Resource
- private IQueue elasticUpdateQueue;
+ private BlockingQueue elasticUpdateQueue;
private HashMap> buckets = new HashMap>();
diff --git a/src/main/java/org/genesys2/spring/config/ApplicationConfig.java b/src/main/java/org/genesys2/spring/config/ApplicationConfig.java
index 33e24c1a8215b65ae9305d2f15734971dba20616..ef4f6fba3c8ba8ca9943099ede08b5ed4a4ece5b 100644
--- a/src/main/java/org/genesys2/spring/config/ApplicationConfig.java
+++ b/src/main/java/org/genesys2/spring/config/ApplicationConfig.java
@@ -33,16 +33,23 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
-@Import({ CommonConfig.class, SchedulerConfig.class, DatabaseConfig.class, MailConfig.class, OAuth2ServerConfig.class, SecurityConfig.class, CacheConfig.class,
- ElasticsearchConfig.class, FileRepositoryConfig.class, WebConfiguration.class, AuditConfig.class, GLISConfig.class })
+@Import({ HazelcastConfig.class, CommonConfig.class, SchedulerConfig.class, DatabaseConfig.class, TemplatingConfig.class, MailConfig.class, OAuth2ServerConfig.class, SecurityConfig.class, CacheConfig.class,
+ ElasticsearchConfig.class, FileRepositoryConfig.class, WebSecurityConfig.class, WebConfiguration.class, AuditConfig.class, GLISConfig.class, SwaggerConfig.class })
+
+@EnableAspectJAutoProxy
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class ApplicationConfig {
public static final Logger LOG = LoggerFactory.getLogger(ApplicationConfig.class);
diff --git a/src/main/java/org/genesys2/spring/config/AuditConfig.java b/src/main/java/org/genesys2/spring/config/AuditConfig.java
index 31a747aa31038f53332f568ed329c7d0f1f8162a..16a3f3575caba490e43036a8facd92c6a0f09954 100644
--- a/src/main/java/org/genesys2/spring/config/AuditConfig.java
+++ b/src/main/java/org/genesys2/spring/config/AuditConfig.java
@@ -20,8 +20,10 @@ import org.genesys.blocks.auditlog.service.AuditTrailService;
import org.genesys.blocks.auditlog.service.ClassPKService;
import org.genesys.blocks.auditlog.service.impl.AuditTrailServiceImpl;
import org.genesys.blocks.auditlog.service.impl.ClassPKServiceImpl;
+import org.genesys.blocks.security.SpringSecurityAuditorAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.data.domain.AuditorAware;
/**
* Configuration of audit-related components and services.
@@ -30,6 +32,11 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration
public class AuditConfig {
+
+ @Bean
+ public AuditorAware> auditorAware() {
+ return new SpringSecurityAuditorAware();
+ }
@Bean
public ClassPKService classPkService() {
diff --git a/src/main/java/org/genesys2/spring/config/CacheConfig.java b/src/main/java/org/genesys2/spring/config/CacheConfig.java
index f9a60e691311a2a0b39ac46fed2f4b57d8abb5a4..5a44af6da1b2ed85fe85a7d95502f4fadbbe1f1d 100644
--- a/src/main/java/org/genesys2/spring/config/CacheConfig.java
+++ b/src/main/java/org/genesys2/spring/config/CacheConfig.java
@@ -16,152 +16,16 @@
package org.genesys2.spring.config;
-import java.util.Properties;
-
-import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.IExecutorService;
-import com.hazelcast.core.IMap;
-import com.hazelcast.core.IQueue;
-import com.hazelcast.spring.cache.HazelcastCacheManager;
-import com.hazelcast.web.WebFilter;
-import com.hazelcast.web.spring.SpringAwareWebFilter;
-
-import org.genesys.blocks.security.lockout.AccountLockoutManager.AttemptStatistics;
import org.genesys.catalog.service.impl.ShortFilterServiceImpl;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.security.core.session.SessionRegistry;
-import org.springframework.security.core.session.SessionRegistryImpl;
@Configuration
@EnableCaching
-@Import({ HazelcastConfig.class })
public class CacheConfig {
-
- /** The instance name. */
- @Value("${hazelcast.instanceName}")
- protected String instanceName = "genesys";
-
- @Value("${base.cookie-domain}")
- private String cookieDomain;
-
- @Value("${base.cookie-secure}")
- private String cookieSecure;
-
- @Value("${base.cookie-http-only}")
- private String cookieHttpOnly;
-
- /**
- * Cache manager.
- *
- * @param hazelcastInstance the hazelcast instance
- * @return the hazelcast cache manager
- */
- @Bean
- public HazelcastCacheManager cacheManager(final HazelcastInstance hazelcastInstance) {
- final HazelcastCacheManager cm = new HazelcastCacheManager(hazelcastInstance);
- return cm;
- }
-
- /**
- * Tileserver map.
- *
- * @param hazelcast the hazelcast
- * @return the i map
- */
- @Bean
- public IMap