From e2660d054e876d22d38571b54f28b6f1c3ebe0cc Mon Sep 17 00:00:00 2001 From: "Matt Harrah (frizbog)" Date: Sun, 22 Jan 2017 10:24:52 -0500 Subject: [PATCH] Issue #58 --- .gitignore | 1 + .../impl/ConflictingDatesAnalyzer.java | 30 ++++----- .../impl/FutureBirthDeathDatesAnalyzer.java | 12 ++-- .../impl/MarriedAtYoungAgeAnalyzer.java | 4 +- .../impl/PeopleWhoLivedPast100Analyzer.java | 6 +- .../PeopleWithoutDeathEventsAnalyzer.java | 4 +- .../gedantic/web/MyHttpSessionListener.java | 65 +++++++++++++++++++ .../gedantic/web/servlet/AnalyzerServlet.java | 12 ++++ .../web/servlet/FileUploadHandler.java | 7 ++ src/webapp/META-INF/MANIFEST.MF | 3 + 10 files changed, 114 insertions(+), 30 deletions(-) create mode 100644 src/main/java/org/gedantic/web/MyHttpSessionListener.java create mode 100644 src/webapp/META-INF/MANIFEST.MF diff --git a/.gitignore b/.gitignore index 9456201..fc3c116 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /.DS_Store /.pmd /.checkstyle +/build/ \ No newline at end of file diff --git a/src/main/java/org/gedantic/analyzer/impl/ConflictingDatesAnalyzer.java b/src/main/java/org/gedantic/analyzer/impl/ConflictingDatesAnalyzer.java index 1c8e12c..6abf448 100644 --- a/src/main/java/org/gedantic/analyzer/impl/ConflictingDatesAnalyzer.java +++ b/src/main/java/org/gedantic/analyzer/impl/ConflictingDatesAnalyzer.java @@ -59,25 +59,15 @@ */ public class ConflictingDatesAnalyzer extends AAnalyzer { - /** - * The gedcom being analyzed - */ - private Gedcom gedcom; - - /** - * The results we will return - */ - private final List result = new ArrayList<>(); - /** * {@inheritDoc} */ @Override public List analyze(Gedcom g) { - gedcom = g; + List result = new ArrayList<>(); - checkIndividualEvents(); - checkFamilyEvents(); + checkIndividualEvents(g, result); + checkFamilyEvents(g, result); Collections.sort(result, new MixedResultSortComparator()); return result; @@ -114,8 +104,13 @@ public AnalysisTag[] getTags() { /** * Check the family events + * + * @param gedcom + * the gedcom + * @param result + * the results */ - private void checkFamilyEvents() { + private void checkFamilyEvents(Gedcom gedcom, List result) { DateParser dp = new DateParser(); for (Family i : gedcom.getFamilies().values()) { Map> indEventsByType = new TreeMap<>(); @@ -171,8 +166,13 @@ private void checkFamilyEvents() { /** * Check individual events for conflicts + * + * @param gedcom + * the gedcom + * @param result + * the results */ - private void checkIndividualEvents() { + private void checkIndividualEvents(Gedcom gedcom, List result) { DateParser dp = new DateParser(); for (Individual i : gedcom.getIndividuals().values()) { Map> indEventsByType = new TreeMap<>(); diff --git a/src/main/java/org/gedantic/analyzer/impl/FutureBirthDeathDatesAnalyzer.java b/src/main/java/org/gedantic/analyzer/impl/FutureBirthDeathDatesAnalyzer.java index 3d2ffd1..6ad13d9 100644 --- a/src/main/java/org/gedantic/analyzer/impl/FutureBirthDeathDatesAnalyzer.java +++ b/src/main/java/org/gedantic/analyzer/impl/FutureBirthDeathDatesAnalyzer.java @@ -53,18 +53,14 @@ public class FutureBirthDeathDatesAnalyzer extends AAnalyzer { /** * Date parser */ - private final DateParser dp = new DateParser(); - - /** - * Right now - */ - private final Date now = new Date(); + private static final DateParser DP = new DateParser(); /** * {@inheritDoc} */ @Override public List analyze(Gedcom g) { + Date now = new Date(); List result = new ArrayList<>(); @@ -73,7 +69,7 @@ public List analyze(Gedcom g) { for (IndividualEvent b : births) { if (b.getDate() != null && b.getDate().getValue() != null && !b.getDate().getValue().isEmpty()) { String dateString = b.getDate().getValue(); - Date bd = dp.parse(dateString); + Date bd = DP.parse(dateString); if (bd != null && now.before(bd)) { result.add(new IndividualRelatedResult(i, IndividualEventType.BIRTH.getDisplay(), dateString, null)); } @@ -83,7 +79,7 @@ public List analyze(Gedcom g) { for (IndividualEvent d : deaths) { if (d.getDate() != null && d.getDate().getValue() != null && !d.getDate().getValue().isEmpty()) { String dateString = d.getDate().getValue(); - Date dd = dp.parse(dateString); + Date dd = DP.parse(dateString); if (dd != null && now.before(dd)) { result.add(new IndividualRelatedResult(i, IndividualEventType.DEATH.getDisplay(), dateString, null)); } diff --git a/src/main/java/org/gedantic/analyzer/impl/MarriedAtYoungAgeAnalyzer.java b/src/main/java/org/gedantic/analyzer/impl/MarriedAtYoungAgeAnalyzer.java index 7dc7fba..ed2900c 100644 --- a/src/main/java/org/gedantic/analyzer/impl/MarriedAtYoungAgeAnalyzer.java +++ b/src/main/java/org/gedantic/analyzer/impl/MarriedAtYoungAgeAnalyzer.java @@ -64,7 +64,7 @@ public class MarriedAtYoungAgeAnalyzer extends AAnalyzer { /** * Date parser */ - DateParser dp = new DateParser(); + private static final DateParser DP = new DateParser(); @Override public List analyze(Gedcom g) { @@ -81,7 +81,7 @@ public List analyze(Gedcom g) { for (FamilyEvent e : f.getEvents()) { if (e.getType() == FamilyEventType.MARRIAGE) { if (e.getDate() != null && e.getDate().getValue() != null) { - Date d = dp.parse(e.getDate().getValue()); + Date d = DP.parse(e.getDate().getValue()); if (d != null && d.before(earliestMarriageDate)) { earliestMarriage = e; earliestMarriageDate = d; diff --git a/src/main/java/org/gedantic/analyzer/impl/PeopleWhoLivedPast100Analyzer.java b/src/main/java/org/gedantic/analyzer/impl/PeopleWhoLivedPast100Analyzer.java index c85620b..7432ac8 100644 --- a/src/main/java/org/gedantic/analyzer/impl/PeopleWhoLivedPast100Analyzer.java +++ b/src/main/java/org/gedantic/analyzer/impl/PeopleWhoLivedPast100Analyzer.java @@ -54,7 +54,7 @@ public class PeopleWhoLivedPast100Analyzer extends AAnalyzer { /** * Date parser */ - private final DateParser dateParser = new DateParser(); + private static final DateParser DP = new DateParser(); /** * {@inheritDoc} @@ -78,7 +78,7 @@ public List analyze(Gedcom g) { String earliestBirthDateString = null; for (IndividualEvent b : births) { if (b.getDate() != null && b.getDate().getValue() != null) { - Date bd = dateParser.parse(b.getDate().getValue(), ImpreciseDatePreference.FAVOR_EARLIEST); + Date bd = DP.parse(b.getDate().getValue(), ImpreciseDatePreference.FAVOR_EARLIEST); if (bd != null && (earliestBirthDate == null || bd.before(earliestBirthDate))) { earliestBirthDate = bd; earliestBirthDateString = b.getDate().getValue(); @@ -93,7 +93,7 @@ public List analyze(Gedcom g) { String latestDeathDateString = null; for (IndividualEvent d : deaths) { if (d.getDate() != null && d.getDate().getValue() != null) { - Date dd = dateParser.parse(d.getDate().getValue(), ImpreciseDatePreference.FAVOR_LATEST); + Date dd = DP.parse(d.getDate().getValue(), ImpreciseDatePreference.FAVOR_LATEST); if (dd != null && (latestDeathDate == null || dd.after(latestDeathDate))) { latestDeathDate = dd; latestDeathDateString = d.getDate().getValue(); diff --git a/src/main/java/org/gedantic/analyzer/impl/PeopleWithoutDeathEventsAnalyzer.java b/src/main/java/org/gedantic/analyzer/impl/PeopleWithoutDeathEventsAnalyzer.java index c99930d..8561296 100644 --- a/src/main/java/org/gedantic/analyzer/impl/PeopleWithoutDeathEventsAnalyzer.java +++ b/src/main/java/org/gedantic/analyzer/impl/PeopleWithoutDeathEventsAnalyzer.java @@ -54,7 +54,7 @@ public class PeopleWithoutDeathEventsAnalyzer extends AAnalyzer { /** * Date parser */ - private final DateParser dateParser = new DateParser(); + private static final DateParser DP = new DateParser(); /** * {@inheritDoc} @@ -82,7 +82,7 @@ public List analyze(Gedcom g) { String earliestBirthDateString = null; for (IndividualEvent b : births) { if (b.getDate() != null && b.getDate().getValue() != null) { - Date bd = dateParser.parse(b.getDate().getValue(), ImpreciseDatePreference.FAVOR_EARLIEST); + Date bd = DP.parse(b.getDate().getValue(), ImpreciseDatePreference.FAVOR_EARLIEST); if (bd != null && (earliestBirthDate == null || bd.before(earliestBirthDate))) { earliestBirthDate = bd; earliestBirthDateString = b.getDate().getValue(); diff --git a/src/main/java/org/gedantic/web/MyHttpSessionListener.java b/src/main/java/org/gedantic/web/MyHttpSessionListener.java new file mode 100644 index 0000000..8e0bb53 --- /dev/null +++ b/src/main/java/org/gedantic/web/MyHttpSessionListener.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2016 Matthew R. Harrah + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +package org.gedantic.web; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSessionEvent; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@WebListener +public class MyHttpSessionListener implements javax.servlet.http.HttpSessionListener { + + /** Logger */ + private static final Logger LOG = LoggerFactory.getLogger(MyHttpSessionListener.class.getName()); + + private int sessionCount = 0; + + @Override + public void sessionCreated(HttpSessionEvent arg0) { + + Runtime rt = Runtime.getRuntime(); + long maxMemory = rt.maxMemory(); + long freeMemory = rt.freeMemory(); + sessionCount++; + LOG.info("sessionCreate - freeMemory:" + Double.toString(freeMemory / (1024 * 1024)) + " maxMemory:" + Double.toString( + maxMemory / (1024 * 1024)) + " count: " + sessionCount); + } + + @Override + public void sessionDestroyed(HttpSessionEvent arg0) { + + Runtime rt = Runtime.getRuntime(); + long maxMemory = rt.maxMemory(); + long freeMemory = rt.freeMemory(); + sessionCount--; + LOG.info("sessionDestroy - freeMemory:" + Double.toString(freeMemory / (1024 * 1024)) + " maxMemory:" + Double.toString( + maxMemory / (1024 * 1024)) + " count: " + sessionCount); + } + +} diff --git a/src/main/java/org/gedantic/web/servlet/AnalyzerServlet.java b/src/main/java/org/gedantic/web/servlet/AnalyzerServlet.java index f2dc38b..c9dc234 100644 --- a/src/main/java/org/gedantic/web/servlet/AnalyzerServlet.java +++ b/src/main/java/org/gedantic/web/servlet/AnalyzerServlet.java @@ -112,8 +112,20 @@ private void process(HttpServletRequest req, HttpServletResponse resp) throws Se return; } + + Runtime rt = Runtime.getRuntime(); + long maxMemory = rt.maxMemory(); + long freeMemory = rt.freeMemory(); + LOG.info("before analysis " + a.getId() + " - freeMemory:" + Double.toString(freeMemory / (1024 * 1024)) + " maxMemory:" + + Double.toString(maxMemory / (1024 * 1024))); + List results = a.analyze(g); + maxMemory = rt.maxMemory(); + freeMemory = rt.freeMemory(); + LOG.info("after analysis " + a.getId() + " - freeMemory:" + Double.toString(freeMemory / (1024 * 1024)) + " maxMemory:" + + Double.toString(maxMemory / (1024 * 1024))); + if ("true".equals(req.getParameter("excel"))) { @SuppressWarnings("resource") Workbook wb = new WorkbookCreator(a, results).create(); diff --git a/src/main/java/org/gedantic/web/servlet/FileUploadHandler.java b/src/main/java/org/gedantic/web/servlet/FileUploadHandler.java index c645caa..da8d19d 100644 --- a/src/main/java/org/gedantic/web/servlet/FileUploadHandler.java +++ b/src/main/java/org/gedantic/web/servlet/FileUploadHandler.java @@ -118,6 +118,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) response.setStatus(403); } } + + Runtime rt = Runtime.getRuntime(); + long maxMemory = rt.maxMemory(); + long freeMemory = rt.freeMemory(); + LOG.info("fileUploaded - freeMemory:" + Double.toString(freeMemory / (1024 * 1024)) + " maxMemory:" + Double.toString( + maxMemory / (1024 * 1024))); + LOG.debug("