@ -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> |