From a143dd3a27c701b68b0f46a2b7df42e205d01d28 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 23 Mar 2016 14:58:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BE=D0=B4=D0=B8=D0=BD=D0=B0=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D1=85=20=D0=BD=D0=B0=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/kinosearch/core/KinoGroup.java | 28 ++++++++++ src/main/java/kinosearch/core/Tools.java | 6 ++ .../webapp/servlets/IndexServlet.java | 56 ++++++++++++++++++- webapp/WEB-INF/index.html | 13 ++++- 4 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 src/main/java/kinosearch/core/KinoGroup.java diff --git a/src/main/java/kinosearch/core/KinoGroup.java b/src/main/java/kinosearch/core/KinoGroup.java new file mode 100644 index 0000000..d00fd8b --- /dev/null +++ b/src/main/java/kinosearch/core/KinoGroup.java @@ -0,0 +1,28 @@ +package kinosearch.core; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by DmitriyMX + * 2016 + */ +public class KinoGroup extends Kino { + private List kinolist = new ArrayList<>(); + + public KinoGroup(String name, String url) { + super(name, ""); + } + + public List getKinolist() { + return kinolist; + } + + public void add(Kino kino) { + kinolist.add(kino); + } + + public boolean contains(Kino kino) { + return kinolist.contains(kino); + } +} diff --git a/src/main/java/kinosearch/core/Tools.java b/src/main/java/kinosearch/core/Tools.java index 578c6e2..ac2636b 100644 --- a/src/main/java/kinosearch/core/Tools.java +++ b/src/main/java/kinosearch/core/Tools.java @@ -62,4 +62,10 @@ public class Tools { public static Pattern getStrongPattern(String name) { return Pattern.compile("(^"+name+"[\\s:])|(\\s"+name+"[\\s:])|(\\s"+name+"$)|(^"+name+"$)"); } + + public static String cleanString(String string) { + return string.toLowerCase(). + replaceAll("[_\\+\\-\\.,!@#$%^&*\\(\\);:\\\\\\/\\|<>\"'?=`~№\\[\\]\\{\\}]", " "). + replaceAll(" {2,}", " ").trim(); + } } diff --git a/src/main/java/kinosearch/webapp/servlets/IndexServlet.java b/src/main/java/kinosearch/webapp/servlets/IndexServlet.java index 8578167..5f57431 100644 --- a/src/main/java/kinosearch/webapp/servlets/IndexServlet.java +++ b/src/main/java/kinosearch/webapp/servlets/IndexServlet.java @@ -1,11 +1,11 @@ package kinosearch.webapp.servlets; import kinosearch.core.Kino; +import kinosearch.core.KinoGroup; import kinosearch.core.Tools; import kinosearch.webapp.WebApp; import kinosearch.webapp.template.TemplateProcessor; import kinosearch.core.warez.KinoWarez; -import kinosearch.core.warez.Onlinelife; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -64,10 +64,62 @@ public class IndexServlet extends HttpServlet { } model.put("searchtext", search); - model.put("resultsearch", list); + model.put("resultsearch", groupKino(list)); model.put("strong", strong); } + private List groupKino(List list) { + Map hashGroup = new HashMap<>(); + List grouppedList = new ArrayList<>(); + + //TODO: необходима оптимизация + Iterator itr1 = list.iterator(); + int skip = 1; + while (itr1.hasNext()) { + Kino kino1 = itr1.next(); + String s1 = Tools.cleanString(kino1.getName().replaceAll("^\\[.+?\\] ","")); + + if (hashGroup.containsKey(s1)) { + skip++; + continue; + } + + KinoGroup group = new KinoGroup(s1, null); + + Iterator itr2 = list.iterator(); + int val = 0; + while (itr2.hasNext()) { + if (val < skip) { + val++; + itr2.next(); + continue; + } + + Kino kino2 = itr2.next(); + String s2 = Tools.cleanString(kino2.getName().replaceAll("^\\[.+?\\] ","")); + + int res = s1.compareTo(s2); + if (res == 0) { + if (!group.contains(kino2)) { + group.add(kino2); + } + } + } + + if (group.getKinolist().size() > 0) { + group.add(kino1); + hashGroup.put(s1, group); + } else { + grouppedList.add(kino1); + } + + skip++; + } + + grouppedList.addAll(0, hashGroup.values()); + return grouppedList; + } + @Override public void log(String message, Throwable t) { super.log(message, t); diff --git a/webapp/WEB-INF/index.html b/webapp/WEB-INF/index.html index 676876d..7faf1a9 100644 --- a/webapp/WEB-INF/index.html +++ b/webapp/WEB-INF/index.html @@ -4,7 +4,18 @@ <#if resultsearch?has_content> <#else>