@ -0,0 +1,55 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<classpath> | |||||
<classpathentry kind="src" output="target/classes" path="src/main/java"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
<attribute name="test" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
<attribute name="test" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="src" path="target/generated-sources/annotations"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
<attribute name="ignore_optional_problems" value="true"/> | |||||
<attribute name="m2e-apt" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
<attribute name="ignore_optional_problems" value="true"/> | |||||
<attribute name="m2e-apt" value="true"/> | |||||
<attribute name="test" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="output" path="target/classes"/> | |||||
</classpath> |
@ -0,0 +1,23 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<projectDescription> | |||||
<name>mmaplayers</name> | |||||
<comment></comment> | |||||
<projects> | |||||
</projects> | |||||
<buildSpec> | |||||
<buildCommand> | |||||
<name>org.eclipse.jdt.core.javabuilder</name> | |||||
<arguments> | |||||
</arguments> | |||||
</buildCommand> | |||||
<buildCommand> | |||||
<name>org.eclipse.m2e.core.maven2Builder</name> | |||||
<arguments> | |||||
</arguments> | |||||
</buildCommand> | |||||
</buildSpec> | |||||
<natures> | |||||
<nature>org.eclipse.jdt.core.javanature</nature> | |||||
<nature>org.eclipse.m2e.core.maven2Nature</nature> | |||||
</natures> | |||||
</projectDescription> |
@ -0,0 +1,2 @@ | |||||
eclipse.preferences.version=1 | |||||
org.eclipse.jdt.apt.aptEnabled=false |
@ -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 |
@ -0,0 +1,4 @@ | |||||
activeProfiles= | |||||
eclipse.preferences.version=1 | |||||
resolveWorkspaceProjects=true | |||||
version=1 |
@ -0,0 +1,20 @@ | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<groupId>danielkuperus</groupId> | |||||
<artifactId>mmaplayers</artifactId> | |||||
<version>0.0.1-SNAPSHOT</version> | |||||
<name>MMAPlayers</name> | |||||
<description>Este programa muestra los 25 mejores luchadores de la MMA</description> | |||||
<dependencies> | |||||
<dependency> | |||||
<groupId>org.springframework</groupId> | |||||
<artifactId>spring-context</artifactId> | |||||
<version>6.0.0</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>javax.annotation</groupId> | |||||
<artifactId>javax.annotation-api</artifactId> | |||||
<version>1.3.2</version> | |||||
</dependency> | |||||
</dependencies> | |||||
</project> |
@ -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<String> categories; | |||||
private String bestDiscipline; | |||||
private int victories; | |||||
private int loses; | |||||
public Fighter(int id, String name, String bestDiscipline, List<String> 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<String> getCategories() { | |||||
return categories; | |||||
} | |||||
public void setCategories(List<String> 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"]"; | |||||
} | |||||
} |
@ -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; | |||||
} | |||||
} |
@ -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<Fighter> readFile(final String path, final String separator, final String listSeparator) { | |||||
List<Fighter> 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; | |||||
} | |||||
} |
@ -0,0 +1,60 @@ | |||||
package mmaplayers.fightersearch.dao; | |||||
public class FighterDao implements IFighterDao{ | |||||
public Fighter<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<Fighter> result = fighters | |||||
.stream() | |||||
.filter(f -> f.getId() == id) | |||||
.findFirst(); | |||||
return result.orElse(null); | |||||
} | |||||
@Override | |||||
public Collection<Fighter> 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; | |||||
} | |||||
} |
@ -0,0 +1,10 @@ | |||||
package mmaplayers.fightersearch.dao; | |||||
public interface IFighterDao { | |||||
public Fighter findById(int id); | |||||
public Collection<Fighter> findAll(); | |||||
public void insert(Fighter fighter); | |||||
public void edit(Fighter fighter); | |||||
public void delete(int id); | |||||
} |
@ -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<Fighter> predicate; | |||||
@PostConstruct | |||||
public void init() { | |||||
predicate = null; | |||||
} | |||||
@Override | |||||
public Collection<Book> exec() { | |||||
return iFighterDao.findAll() | |||||
.stream() | |||||
.filter(predicate) | |||||
.collect(Collectors.toList()); | |||||
} | |||||
@Override | |||||
public IFighterQueryService anyCategorie(String... categorie) { | |||||
Predicate<Fighter> 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<Fighter> 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<Fighter> pNameContains = (fighter -> fighter.getName().toLowerCase().contains(name.toLowerCase())); | |||||
predicate = (predicate == null) ? pNameContains : predicate.and(pNameContains); | |||||
return this; | |||||
} | |||||
} |
@ -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<String> findAllCategories() { | |||||
List<String> result = null; | |||||
result = iFighterDao.findAll() | |||||
.stream() | |||||
.map(book -> book.getCategorie()) | |||||
.distinct() | |||||
.sorted() | |||||
.collect(Collectors.toList()); | |||||
return result; | |||||
} | |||||
@Override | |||||
public Collection<Fighter> findByAnyCategorie(String... categories) { | |||||
return queryService.anyCategorie(categories).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Fighter> findByAllCategories(String... categories) { | |||||
return queryService.allCategories(categories).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Fighter> findByNameContains(String name) { | |||||
return queryService.anyName(name).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Fighter> findAll() { | |||||
return iFighterDao.findAll(); | |||||
} | |||||
} |
@ -0,0 +1,13 @@ | |||||
package mmaplayers.fightersearch.service; | |||||
import mmaplayers.fightersearch.model.Fighter; | |||||
import java.util.Collection; | |||||
public interface IFightQueryService { | |||||
public Collection<String> findAllCategories(); | |||||
public Collection<Fighter> findByAnyCategorie(String... categories); | |||||
public Collection<Fighter> findByAllCategories(String... categories); | |||||
public Collection<Fighter> findByNameContains(String name); | |||||
public Collection<Fighter> findAll(); | |||||
} |
@ -0,0 +1,13 @@ | |||||
package mmaplayers.fightersearch.service; | |||||
import mmaplayers.fightersearch.model.Fight; | |||||
public interface IFightService { | |||||
public Collection<String> findAllCategories(); | |||||
public Collection<Fighter> findByAnyCategorie(String... categories); | |||||
public Collection<Fighter> findByAllCategories(String... categories); | |||||
public Collection<Fighter> findByNameContains(String name); | |||||
public Collection<Fighter> findAll(); | |||||
} |
@ -0,0 +1,5 @@ | |||||
Manifest-Version: 1.0 | |||||
Built-By: Daniel | |||||
Build-Jdk: 17.0.4.1 | |||||
Created-By: Maven Integration for Eclipse | |||||
@ -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 |
@ -0,0 +1,20 @@ | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<groupId>danielkuperus</groupId> | |||||
<artifactId>mmaplayers</artifactId> | |||||
<version>0.0.1-SNAPSHOT</version> | |||||
<name>MMAPlayers</name> | |||||
<description>Este programa muestra los 25 mejores luchadores de la MMA</description> | |||||
<dependencies> | |||||
<dependency> | |||||
<groupId>org.springframework</groupId> | |||||
<artifactId>spring-context</artifactId> | |||||
<version>6.0.0</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>javax.annotation</groupId> | |||||
<artifactId>javax.annotation-api</artifactId> | |||||
<version>1.3.2</version> | |||||
</dependency> | |||||
</dependencies> | |||||
</project> |