From 2019f1ce480fafe49599de65ffe524f21c520a84 Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Wed, 19 Nov 2014 16:59:35 +0100 Subject: [PATCH] Removed Accession#storage --- .../server/model/genesys/Accession.java | 11 --- .../server/model/json/AccessionJson.java | 6 +- .../server/model/json/GenesysJsonFactory.java | 18 +--- .../domain/GenesysLowlevelRepositoryImpl.java | 2 +- .../service/impl/BatchRESTServiceImpl.java | 37 ++++----- .../service/impl/GenesysServiceImpl.java | 2 +- .../worker/AccessionStorageScanner.java | 83 ------------------- .../servlet/controller/AdminController.java | 31 ------- .../webapp/WEB-INF/jsp/accession/details.jsp | 5 -- src/main/webapp/WEB-INF/jsp/admin/index.jsp | 5 -- 10 files changed, 23 insertions(+), 177 deletions(-) delete mode 100644 src/main/java/org/genesys2/server/service/worker/AccessionStorageScanner.java diff --git a/src/main/java/org/genesys2/server/model/genesys/Accession.java b/src/main/java/org/genesys2/server/model/genesys/Accession.java index 07a8a5f7c..82bc42f66 100644 --- a/src/main/java/org/genesys2/server/model/genesys/Accession.java +++ b/src/main/java/org/genesys2/server/model/genesys/Accession.java @@ -82,9 +82,6 @@ public class Accession extends VersionedAuditedModel { @Column(name = "sampStat", length = 3) private Integer sampleStatus; - @Column(name = "storage", length = 12) - private String storage; - @Column(name = "inSGSV") private Boolean inSvalbard; @@ -200,14 +197,6 @@ public class Accession extends VersionedAuditedModel { this.sampleStatus = sampleStatus; } - public String getStorage() { - return this.storage; - } - - public void setStorage(final String storage) { - this.storage = storage; - } - public Boolean getInSvalbard() { return this.inSvalbard; } diff --git a/src/main/java/org/genesys2/server/model/json/AccessionJson.java b/src/main/java/org/genesys2/server/model/json/AccessionJson.java index 5f8348491..a6d4aa76c 100644 --- a/src/main/java/org/genesys2/server/model/json/AccessionJson.java +++ b/src/main/java/org/genesys2/server/model/json/AccessionJson.java @@ -33,7 +33,7 @@ public class AccessionJson { private Boolean mlsStat; private Boolean inTrust; private Boolean available; - private int[] storage; + private Integer[] storage; private Integer sampStat; private String[] duplSite; private String bredCode; @@ -165,11 +165,11 @@ public class AccessionJson { this.available = available; } - public int[] getStorage() { + public Integer[] getStorage() { return storage; } - public void setStorage(int[] storage) { + public void setStorage(Integer[] storage) { this.storage = storage; } diff --git a/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java b/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java index 5181c9d46..8013cc186 100644 --- a/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java +++ b/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java @@ -18,6 +18,7 @@ package org.genesys2.server.model.json; import java.util.List; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.model.genesys.AccessionCollect; @@ -56,8 +57,8 @@ public class GenesysJsonFactory { aj.setMlsStat(accession.getMlsStatus()); aj.setInTrust(accession.getInTrust()); aj.setAvailable(accession.getAvailability()); - // private int[] storage; - aj.setStorage(toIntArray(accession.getStorage())); + // private Integer[] storage; + aj.setStorage(accession.getStoRage().toArray(ArrayUtils.EMPTY_INTEGER_OBJECT_ARRAY)); // private Integer sampStat; aj.setSampStat(accession.getSampleStatus()); // private String[] duplSite; @@ -81,19 +82,6 @@ public class GenesysJsonFactory { return arrString.split("\\s*;\\s*"); } - private static int[] toIntArray(String arrString) { - if (StringUtils.isBlank(arrString)) { - return null; - } - final String[] split = arrString.trim().split("[;,]"); - final int[] intArr = new int[split.length]; - for (int i = 0; i < split.length; i++) { - // TODO Could throw NFE - intArr[i] = Integer.parseInt(split[i]); - } - return intArr; - } - public static GeoJson from(AccessionGeo geo) { if (geo == null) { return null; diff --git a/src/main/java/org/genesys2/server/persistence/domain/GenesysLowlevelRepositoryImpl.java b/src/main/java/org/genesys2/server/persistence/domain/GenesysLowlevelRepositoryImpl.java index faa510afc..9cbe71113 100644 --- a/src/main/java/org/genesys2/server/persistence/domain/GenesysLowlevelRepositoryImpl.java +++ b/src/main/java/org/genesys2/server/persistence/domain/GenesysLowlevelRepositoryImpl.java @@ -244,7 +244,7 @@ public class GenesysLowlevelRepositoryImpl implements GenesysLowlevelRepository @Override public PreparedStatement createPreparedStatement(final Connection con) throws SQLException { final PreparedStatement stmt = con.prepareStatement(directQuery - .getQuery("a.id, a.uuid, a.instCode, a.acceNumb, t.genus, t.species, t.taxonName, a.orgCty, a.acqSrc, a.acqDate, a.mlsStat, a.available, a.storage, a.sampStat, a.duplSite, a.createdBy, a.createdDate, a.lastModifiedBy, a.lastModifiedDate")); + .getQuery("a.id, a.uuid, a.instCode, a.acceNumb, t.genus, t.species, t.taxonName, a.orgCty, a.acqSrc, a.acqDate, a.mlsStat, a.available, null, a.sampStat, a.duplSite, a.createdBy, a.createdDate, a.lastModifiedBy, a.lastModifiedDate")); final ArgumentPreparedStatementSetter apss = new ArgumentPreparedStatementSetter(directQuery.getParameters()); apss.setValues(stmt); diff --git a/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java index e7332d585..bac84c0b6 100644 --- a/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java @@ -27,7 +27,6 @@ import java.util.UUID; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; -import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -456,40 +455,34 @@ public class BatchRESTServiceImpl implements BatchRESTService { // MUST BE ARRAY if (accnJson.has("storage")) { - final String storage = arrayToString(toMcpdArray(accnJson, "storage")); - updateAccessionStorage(accession, storage); + updateAccessionStorage(accession, toMcpdArray(accnJson, "storage")); } return updated; } - public static boolean updateAccessionStorage(Accession accession, String storage) { + public static boolean updateAccessionStorage(Accession accession, ArrayNode arr) { boolean updated = false; - if (!StringUtils.equals(storage, accession.getStorage())) { - accession.setStorage(storage); - updated = true; - } List as = accession.getStoRage(); - String[] arr = StringUtils.isBlank(storage) ? ArrayUtils.EMPTY_STRING_ARRAY : storage.split("\\s*[;,]\\s*"); + List toRemove = new ArrayList(as); - // Sometimes double values are registered: 20;20;40 and the loop below - // kicks in - if (updated || as.size() != arr.length) { - List toRemove = new ArrayList(as); + Iterator it = arr.elements(); - for (String storageStr : arr) { - int stor = Integer.parseInt(storageStr); - if (!as.contains(stor)) { - as.add(stor); - } else { - // Cast needed to remove the object - toRemove.remove((Integer) stor); - } + while (it.hasNext()) { + JsonNode storageElem = it.next(); + int stor = Integer.parseInt(storageElem.asText()); + if (!as.contains(stor)) { + updated = true; + as.add(stor); + } else { + // Cast needed to remove the object + toRemove.remove((Integer) stor); } + } + if (toRemove.size() > 0) { as.removeAll(toRemove); - accession.setStorage(listToString(as)); updated = true; } diff --git a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java index afa106810..5bedc0f09 100644 --- a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java @@ -961,7 +961,7 @@ public class GenesysServiceImpl implements GenesysService, DatasetService { @SuppressWarnings("resource") final CSVWriter csv = new CSVWriter(new BufferedWriter(new OutputStreamWriter(zos)), ',', '"', '\\', "\n"); csv.writeNext(new String[] { "genesysId", "uuid", "instCode", "acceNumb", "genus", "species", "fullTaxa", "orgCty", "acqSrc", "acqDate", "mlsStat", - "available", "storage", "sampStat", "duplSite", "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate" }); + "available", "~storage", "sampStat", "duplSite", "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate" }); final ResultSetHelper csvResultsetHelper = new ResultSetHelperService(); diff --git a/src/main/java/org/genesys2/server/service/worker/AccessionStorageScanner.java b/src/main/java/org/genesys2/server/service/worker/AccessionStorageScanner.java deleted file mode 100644 index fd48223da..000000000 --- a/src/main/java/org/genesys2/server/service/worker/AccessionStorageScanner.java +++ /dev/null @@ -1,83 +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.worker; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.genesys2.server.aspect.AsAdmin; -import org.genesys2.server.model.genesys.Accession; -import org.genesys2.server.service.GenesysService; -import org.genesys2.server.service.impl.BatchRESTServiceImpl; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.PageRequest; -import org.springframework.stereotype.Component; - -/** - * Scans Accession#storage records and updates Accession#stoRage - */ -@Component -public class AccessionStorageScanner { - public static final Log LOG = LogFactory.getLog(AccessionStorageScanner.class); - - @Autowired - private GenesysService genesysService; - - private static final int BATCH_SIZE = 50; - - @AsAdmin - public void scanStorage() throws InterruptedException { - int page = 0; - - do { - page++; - if (page % 100 == 0) { - LOG.info("Scanning accessions page " + page); - } else { - LOG.debug("Scanning accessions page " + page); - } - List accns = genesysService.listAccessionsIds(new PageRequest(page, BATCH_SIZE)); - List toSave = new ArrayList(accns.size()); - - if (accns.size() == 0) - break; - - for (long accnId : accns) { - Accession accession = genesysService.getAccession(accnId); - boolean updated = BatchRESTServiceImpl.updateAccessionStorage(accession, accession.getStorage()); - if (updated) { - toSave.add(accession); - } - } - - try { - if (toSave.size() > 0) { - LOG.info("Updating accession#stoRage for size=" + toSave.size()); - genesysService.saveAccession(toSave.toArray(new Accession[] {})); - } - } catch (Throwable e) { - LOG.warn(e.getMessage(), e); - } - - Thread.sleep(5); - } while (true); - - LOG.info("Done scanning accession#storage"); - } -} diff --git a/src/main/java/org/genesys2/server/servlet/controller/AdminController.java b/src/main/java/org/genesys2/server/servlet/controller/AdminController.java index 426d76c5a..62da8ef10 100644 --- a/src/main/java/org/genesys2/server/servlet/controller/AdminController.java +++ b/src/main/java/org/genesys2/server/servlet/controller/AdminController.java @@ -35,7 +35,6 @@ import org.genesys2.server.service.GeoService; import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.MappingService; import org.genesys2.server.service.impl.ContentSanitizer; -import org.genesys2.server.service.worker.AccessionStorageScanner; import org.genesys2.server.service.worker.ElasticUpdater; import org.genesys2.server.service.worker.ITPGRFAStatusUpdater; import org.genesys2.server.service.worker.InstituteUpdater; @@ -97,9 +96,6 @@ public class AdminController { @Autowired private TaskExecutor taskExecutor; - @Autowired - protected AccessionStorageScanner accessionStorageScanner; - @RequestMapping("/") public String root(Model model) { return "/admin/index"; @@ -317,33 +313,6 @@ public class AdminController { return "redirect:/admin/"; } - @RequestMapping(method = RequestMethod.POST, value = "/scanStorage") - public String scanStorage() { - LOG.info("Updating accession.stoRage"); - taskExecutor.execute(new Runnable() { - @Override - public void run() { - Thread t = Thread.currentThread(); - int prevPrio = t.getPriority(); - String prevName = t.getName(); - t.setPriority(Thread.MIN_PRIORITY); - t.setName("background.storageScanner"); - try { - accessionStorageScanner.scanStorage(); - LOG.info("Updating done"); - } catch (InterruptedException e) { - LOG.warn("Storage scanner thread interrupted!"); - } finally { - LOG.debug("Resetting thread priority"); - t.setPriority(prevPrio); - t.setName(prevName); - } - } - }); - LOG.info("Job scheduled"); - return "redirect:/admin/"; - } - @RequestMapping(method = RequestMethod.POST, value = "/clearTilesCache") public String clearTilesCache() { final Cache tileServerCache = cacheManager.getCache("tileserver"); diff --git a/src/main/webapp/WEB-INF/jsp/accession/details.jsp b/src/main/webapp/WEB-INF/jsp/accession/details.jsp index 974ac6efb..833338f68 100644 --- a/src/main/webapp/WEB-INF/jsp/accession/details.jsp +++ b/src/main/webapp/WEB-INF/jsp/accession/details.jsp @@ -134,14 +134,9 @@
- -
-
-<%--
---%>
diff --git a/src/main/webapp/WEB-INF/jsp/admin/index.jsp b/src/main/webapp/WEB-INF/jsp/admin/index.jsp index cdd513525..cde96f152 100644 --- a/src/main/webapp/WEB-INF/jsp/admin/index.jsp +++ b/src/main/webapp/WEB-INF/jsp/admin/index.jsp @@ -89,11 +89,6 @@ -
"> - - - -

C&E

"> -- GitLab