From e19847de1bf88021915bd6def47d1b55f7bea769 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 24 Nov 2022 02:25:38 +0100 Subject: [PATCH] First commit --- .classpath | 55 ++++++++ .project | 23 +++ .settings/org.eclipse.jdt.apt.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 16 +++ .settings/org.eclipse.m2e.core.prefs | 4 + pom.xml | 20 +++ src/main/Model/Fighter.java | 133 ++++++++++++++++++ src/main/config/AppConfig.java | 32 +++++ src/main/controller/CsvParser.java | 38 +++++ src/main/dao/FighterDao.java | 60 ++++++++ src/main/dao/IFighterDao.java | 10 ++ src/main/service/FighterQueryService.java | 55 ++++++++ src/main/service/FighterService.java | 54 +++++++ src/main/service/IFightQueryService.java | 13 ++ src/main/service/IFightService.java | 13 ++ target/classes/META-INF/MANIFEST.MF | 5 + .../danielkuperus/mmaplayers/pom.properties | 7 + .../maven/danielkuperus/mmaplayers/pom.xml | 20 +++ 18 files changed, 560 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 pom.xml create mode 100644 src/main/Model/Fighter.java create mode 100644 src/main/config/AppConfig.java create mode 100644 src/main/controller/CsvParser.java create mode 100644 src/main/dao/FighterDao.java create mode 100644 src/main/dao/IFighterDao.java create mode 100644 src/main/service/FighterQueryService.java create mode 100644 src/main/service/FighterService.java create mode 100644 src/main/service/IFightQueryService.java create mode 100644 src/main/service/IFightService.java create mode 100644 target/classes/META-INF/MANIFEST.MF create mode 100644 target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties create mode 100644 target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.xml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..0ca1374 --- /dev/null +++ b/.classpath @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..e59975a --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + mmaplayers + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ea7a397 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,16 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a7908c5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + danielkuperus + mmaplayers + 0.0.1-SNAPSHOT + MMAPlayers + Este programa muestra los 25 mejores luchadores de la MMA + + + org.springframework + spring-context + 6.0.0 + + + javax.annotation + javax.annotation-api + 1.3.2 + + + \ No newline at end of file diff --git a/src/main/Model/Fighter.java b/src/main/Model/Fighter.java new file mode 100644 index 0000000..2c75b99 --- /dev/null +++ b/src/main/Model/Fighter.java @@ -0,0 +1,133 @@ +package mmaplayers; + + +import java.util.List; + +public class Fighter { + + private static int AUTO_ID = 0; + + private int id; + private String name; + private List categories; + private String bestDiscipline; + private int victories; + private int loses; + + + public Fighter(int id, String name, String bestDiscipline, List categories, int victories, int loses) { + this.id = ++AUTO_ID; + this.name = name; + this.categories = categories; + this.bestDiscipline = bestDiscipline; + this.victories = victories; + this.loses = loses; + + + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return title; + } + + public void setTitle(String title) { + this.name = name; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } + + public String getBestDiscipline() { + return bestDiscipline; + } + + public void setBestDiscipline(String year) { + this.bestDiscipline = bestDiscipline; + } + + public int getVictories() { + return victories; + } + + public void setBestDiscipline(String year) { + this.victories = victories; + } + + public int getLoses() { + return loses; + } + + public void setBestDiscipline(String year) { + this.loses = loses; + } + + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((categories == null) ? 0 : categories.hashCode()); + result = prime * result + (int) (id ^ (id >>> 32)); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((bestDiscipline == null) ? 0 : bestDiscipline.hashCode()); + return result; //revisar mas adelante + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Film other = (Film) obj; + if (genres == null) { + if (other.genres != null) + return false; + } else if (!categories.equals(other.genres)) + return false; + if (id != other.id) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + if (bestDiscipline == null) { + if (other.bestDiscipline != null) + return false; + } else if (!bestDiscipline.equals(other.bestDiscipline)) + return false; + if (victories != other.victories) + return false; + if (loses != other.loses) + return false; + return true; + } + + @Override + public String toString() { + return "Luchador [id=" + id + ", nombre=" + name + ", categoria=" + categories + ", mejor disciplina=" + bestDiscipline + "victorias "+victories+" derrotas"+loses"]"; + } + + + + + + +} \ No newline at end of file diff --git a/src/main/config/AppConfig.java b/src/main/config/AppConfig.java new file mode 100644 index 0000000..771bb04 --- /dev/null +++ b/src/main/config/AppConfig.java @@ -0,0 +1,32 @@ +package mmaplayers.fightersearch.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@ComponentScan(basePackages="mmaplayers") +@PropertySource("classpath:/booksearch.properties") +public class AppConfig { + @Value("${file.path}") + public String file; + + @Value("${file.csv.separator}") + public String separator; + + @Value("${file.csv.list_separator}") + public String listSeparator; + + public String getFile() { + return file; + } + + public String getSeparator() { + return separator; + } + + public String getListSeparator() { + return listSeparator; + } +} diff --git a/src/main/controller/CsvParser.java b/src/main/controller/CsvParser.java new file mode 100644 index 0000000..6bdf5aa --- /dev/null +++ b/src/main/controller/CsvParser.java @@ -0,0 +1,38 @@ +package mmaplayers.fightersearch.controller; + +import mmaplayers.mmaplayers.model.Fighter; +import org.springframework.util.ResourceUtils; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class CsvParser { + + public static List readFile(final String path, final String separator, final String listSeparator) { + List result = new ArrayList<>(); + + try { + result = Files + .lines(Paths.get(ResourceUtils.getFile(path).toURI())) + .skip(1) + .map(line -> { + String[] values = line.split(separator); + if (values.length >= 5) { + return new Fighter(values[0], Arrays.asList(values[1].split(listSeparator)), values[2], values[3], values[4] ,values[5]); + }).collect(Collectors.toList()); + + } catch (Exception e) { + e.printStackTrace(); + System.err.println("Error de lectura del fichero de datos: MMA_DanielKuperus.csv"); + System.exit(-1); + } + + return result; + + } + +} \ No newline at end of file diff --git a/src/main/dao/FighterDao.java b/src/main/dao/FighterDao.java new file mode 100644 index 0000000..e21de8b --- /dev/null +++ b/src/main/dao/FighterDao.java @@ -0,0 +1,60 @@ +package mmaplayers.fightersearch.dao; + +public class FighterDao implements IFighterDao{ + public Fighter fighters = new ArrayList<>(); + + @Autowired + private AppConfig appConfig; + + @PostConstruct + public void init() { + fighters = CsvParser.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); + } + + @Override + public Fighter findById(int id) { + Optional result = fighters + .stream() + .filter(f -> f.getId() == id) + .findFirst(); + return result.orElse(null); + } + + @Override + public Collection findAll() { + return fighters; + } + + @Override + public void insert(Fighter fighter) { + fighters.add(fighter); + } + + @Override + public void edit(Fighter fighter) { + int index = getIndexOf(fighter.getId()); + if (index != -1) + fighter.set(index, fighter); + } + + @Override + public void delete(int id) { + int index = getIndexOf(id); + if (index != -1) + fighters.remove(index); + } + + private int getIndexOf(int id) { + boolean find = false; + int index = 0; + + while (!find && index < fighters.size()) { + if (fighters.get(index).getId() == id) + find = true; + else + index++; + } + + return (find) ? index : -1; + } +} diff --git a/src/main/dao/IFighterDao.java b/src/main/dao/IFighterDao.java new file mode 100644 index 0000000..efb44f9 --- /dev/null +++ b/src/main/dao/IFighterDao.java @@ -0,0 +1,10 @@ +package mmaplayers.fightersearch.dao; + +public interface IFighterDao { + + public Fighter findById(int id); + public Collection findAll(); + public void insert(Fighter fighter); + public void edit(Fighter fighter); + public void delete(int id); +} diff --git a/src/main/service/FighterQueryService.java b/src/main/service/FighterQueryService.java new file mode 100644 index 0000000..6c9a52d --- /dev/null +++ b/src/main/service/FighterQueryService.java @@ -0,0 +1,55 @@ +package mmaplayers.fightersearch.service; + +import mmaplayers.fightersearch.dao.IFighterDao; +import mmaplayers.fightersearch.model.Fighter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class FighterQueryService implements IFightQueryService { + + @Autowired + IFighterDao iFighterDao; + + private Predicate predicate; + + @PostConstruct + public void init() { + predicate = null; + } + + @Override + public Collection exec() { + return iFighterDao.findAll() + .stream() + .filter(predicate) + .collect(Collectors.toList()); + } + + @Override + public IFighterQueryService anyCategorie(String... categorie) { + Predicate pAnyCategorie = (fighter -> Arrays.stream(categories).anyMatch(fighter.getCategorie()::contains)); + predicate = (predicate == null) ? pAnyCategorie : predicate.and(pAnyCategorie); + return this; + } + + @Override + public IFighterQueryService allCategories(String... categories) { + Predicate pAnyCategorie = (fighter -> Arrays.stream(categories).allMatch(book.getCategorie()::contains)); + predicate = (predicate == null) ? pAnyCategorie : predicate.and(pAnyCategorie); + return this; + } + + @Override + public IFighterQueryService anyName(String name) { + Predicate pNameContains = (fighter -> fighter.getName().toLowerCase().contains(name.toLowerCase())); + predicate = (predicate == null) ? pNameContains : predicate.and(pNameContains); + + return this; + } +} diff --git a/src/main/service/FighterService.java b/src/main/service/FighterService.java new file mode 100644 index 0000000..18a6b47 --- /dev/null +++ b/src/main/service/FighterService.java @@ -0,0 +1,54 @@ +package mmaplayers.fightersearch.service; + +import mmaplayers.fightersearch.dao.IFighterDao; +import mmaplayers.fightersearch.model.Fighter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +public class FighterService implements IFightService{ + + @Autowired + IFighterDao iFighterDao; + + @Autowired + IFighterQueryService queryService; + + + @Override + public Collection findAllCategories() { + List result = null; + + result = iFighterDao.findAll() + .stream() + .map(book -> book.getCategorie()) + .distinct() + .sorted() + .collect(Collectors.toList()); + + return result; + } + + @Override + public Collection findByAnyCategorie(String... categories) { + return queryService.anyCategorie(categories).exec(); + } + + @Override + public Collection findByAllCategories(String... categories) { + return queryService.allCategories(categories).exec(); + } + + @Override + public Collection findByNameContains(String name) { + return queryService.anyName(name).exec(); + } + + @Override + public Collection findAll() { + return iFighterDao.findAll(); + } +} diff --git a/src/main/service/IFightQueryService.java b/src/main/service/IFightQueryService.java new file mode 100644 index 0000000..7584615 --- /dev/null +++ b/src/main/service/IFightQueryService.java @@ -0,0 +1,13 @@ +package mmaplayers.fightersearch.service; + +import mmaplayers.fightersearch.model.Fighter; + +import java.util.Collection; +public interface IFightQueryService { + + public Collection findAllCategories(); + public Collection findByAnyCategorie(String... categories); + public Collection findByAllCategories(String... categories); + public Collection findByNameContains(String name); + public Collection findAll(); +} diff --git a/src/main/service/IFightService.java b/src/main/service/IFightService.java new file mode 100644 index 0000000..0f0f625 --- /dev/null +++ b/src/main/service/IFightService.java @@ -0,0 +1,13 @@ +package mmaplayers.fightersearch.service; + +import mmaplayers.fightersearch.model.Fight; + +public interface IFightService { + + public Collection findAllCategories(); + public Collection findByAnyCategorie(String... categories); + public Collection findByAllCategories(String... categories); + public Collection findByNameContains(String name); + public Collection findAll(); + +} diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..c2dd0a8 --- /dev/null +++ b/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Built-By: Daniel +Build-Jdk: 17.0.4.1 +Created-By: Maven Integration for Eclipse + diff --git a/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties new file mode 100644 index 0000000..5bfabdd --- /dev/null +++ b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Thu Nov 24 01:08:48 CET 2022 +m2e.projectLocation=C\:\\Users\\Daniel\\Documents\\workspace-spring-tool-suite-4-4.16.1.RELEASE\\mmaplayers +m2e.projectName=mmaplayers +groupId=danielkuperus +artifactId=mmaplayers +version=0.0.1-SNAPSHOT diff --git a/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.xml b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.xml new file mode 100644 index 0000000..a7908c5 --- /dev/null +++ b/target/classes/META-INF/maven/danielkuperus/mmaplayers/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + danielkuperus + mmaplayers + 0.0.1-SNAPSHOT + MMAPlayers + Este programa muestra los 25 mejores luchadores de la MMA + + + org.springframework + spring-context + 6.0.0 + + + javax.annotation + javax.annotation-api + 1.3.2 + + + \ No newline at end of file