@ -1,13 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor; | |||||
import org.springframework.boot.SpringApplication; | |||||
import org.springframework.boot.autoconfigure.SpringBootApplication; | |||||
@SpringBootApplication | |||||
public class LolAdvisorApplication { | |||||
public static void main(String[] args) { | |||||
SpringApplication.run(LolAdvisorApplication.class, args); | |||||
} | |||||
} |
@ -1,33 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.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="com.cristobalbernal") | |||||
@PropertySource("classpath:/application.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; | |||||
} | |||||
} |
@ -1,13 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.dao; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
import java.util.Collection; | |||||
public interface LolDao { | |||||
public Lol findById(long id); | |||||
public Collection<Lol> findAll(); | |||||
public void insert(Lol lol); | |||||
public void edit(Lol lol); | |||||
public void delete(long id); | |||||
} |
@ -1,76 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.dao; | |||||
import com.cristobalbernal.loladvisor.config.AppConfig; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
import org.springframework.stereotype.Repository; | |||||
import javax.annotation.PostConstruct; | |||||
import java.util.ArrayList; | |||||
import java.util.Collection; | |||||
import java.util.List; | |||||
import java.util.Optional; | |||||
@Repository | |||||
public class LolDaoImplMemory implements LolDao{ | |||||
public List<Lol> lols = new ArrayList<>(); | |||||
private AppConfig appConfig; | |||||
public void init() { | |||||
lols = UtilLolFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); | |||||
} | |||||
@Override | |||||
public Lol findById(long id) { | |||||
Optional<Lol> result = lols | |||||
.stream() | |||||
.filter(f -> f.getId() == id) | |||||
.findFirst(); | |||||
// @formatter:on | |||||
return result.orElse(null); | |||||
} | |||||
@Override | |||||
public Collection<Lol> findAll() { | |||||
return lols; | |||||
} | |||||
@Override | |||||
public void insert(Lol lol) { | |||||
lols.add(lol); | |||||
} | |||||
@Override | |||||
public void edit(Lol lol) { | |||||
int i = getIndexOf(lol.getId()); | |||||
if(i != -1) | |||||
lols.set(i, lol); | |||||
} | |||||
@Override | |||||
public void delete(long id) { | |||||
int index = getIndexOf(id); | |||||
if(index != -1) | |||||
lols.remove(index); | |||||
} | |||||
private int getIndexOf(long id) { | |||||
boolean encontrado = false; | |||||
int index = 0; | |||||
while(!encontrado && index < lols.size()) { | |||||
if(lols.get(index).getId() == id){ | |||||
encontrado = true; | |||||
} else{ | |||||
index++; | |||||
} | |||||
} | |||||
return (encontrado) ? index : -1; | |||||
} | |||||
} |
@ -1,38 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.dao; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
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 UtilLolFileReader { | |||||
public static List<Lol> readFile(final String path, final String separator, final String listSeparator) { | |||||
List<Lol> result = new ArrayList<>(); | |||||
try { | |||||
// @formatter:off | |||||
result = Files | |||||
.lines(Paths.get(ResourceUtils.getFile(path).toURI())) | |||||
.skip(1) | |||||
.map(line -> { | |||||
String[] values = line.split(separator); | |||||
return new Lol(Long.parseLong(values[0]), values[1], | |||||
Arrays.asList(values[2].split(listSeparator)), | |||||
values[3],values[4]); | |||||
}).collect(Collectors.toList()); | |||||
// @formatter:on | |||||
} catch (Exception e) { | |||||
System.err.println("Error de lectura del fichero de datos"); | |||||
System.exit(-1); | |||||
} | |||||
return result; | |||||
} | |||||
} |
@ -1,68 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.model; | |||||
import java.util.List; | |||||
public class Lol { | |||||
private long id; | |||||
private String nombre; | |||||
private List<String> rol; | |||||
private String dificultad; | |||||
private String genero; | |||||
public Lol(long id, String nombre, List<String> rol, String dificultad, String genero) { | |||||
this.id = id; | |||||
this.nombre = nombre; | |||||
this.rol = rol; | |||||
this.dificultad = dificultad; | |||||
this.genero = genero; | |||||
} | |||||
public long getId() { | |||||
return id; | |||||
} | |||||
public String getNombre() { | |||||
return nombre; | |||||
} | |||||
public String getDificultad() { | |||||
return dificultad; | |||||
} | |||||
public void setId(long id) { | |||||
this.id = id; | |||||
} | |||||
public void setNombre(String nombre) { | |||||
this.nombre = nombre; | |||||
} | |||||
public List<String> getRol() { | |||||
return rol; | |||||
} | |||||
public void setRol(List<String> rol) { | |||||
this.rol = rol; | |||||
} | |||||
public void setDificultad(String dificultad) { | |||||
this.dificultad = dificultad; | |||||
} | |||||
public String getGenero() { | |||||
return genero; | |||||
} | |||||
public void setGenero(String genero) { | |||||
this.genero = genero; | |||||
} | |||||
@Override | |||||
public String toString() { | |||||
return "Lol{" + | |||||
"id=" + id + | |||||
", nombre='" + nombre + '\'' + | |||||
", rol=" + rol + | |||||
", dificultad='" + dificultad + '\'' + | |||||
", genero='" + genero + '\'' + | |||||
'}'; | |||||
} | |||||
} |
@ -1,13 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.service; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
import java.util.Collection; | |||||
public interface LolQueryService { | |||||
public Collection<Lol> exec(); | |||||
public LolQueryService anyGenre(String... genres); | |||||
public LolQueryService allGenres(String... genres); | |||||
public LolQueryService titleContains(String title); | |||||
} |
@ -1,47 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.service; | |||||
import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.Arrays; | |||||
import java.util.Collection; | |||||
import java.util.function.Predicate; | |||||
import java.util.stream.Collectors; | |||||
@Service | |||||
public class LolQueryServices implements LolQueryService { | |||||
private LolDao dao; | |||||
private Predicate<Lol> predicate; | |||||
@Override | |||||
public Collection<Lol> exec() { | |||||
return dao.findAll() | |||||
.stream() | |||||
.filter(predicate) | |||||
.collect(Collectors.toList()); | |||||
} | |||||
@Override | |||||
public LolQueryService anyGenre(String... genres) { | |||||
Predicate<Lol> pAnyGenre = (vg -> Arrays.stream(genres).anyMatch(vg.getNombre()::contains)); | |||||
predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); | |||||
return this; | |||||
} | |||||
@Override | |||||
public LolQueryService allGenres(String... genres) { | |||||
Predicate<Lol> pAllGenre = (vg -> Arrays.stream(genres).allMatch(vg.getNombre()::contains)); | |||||
predicate = (predicate == null) ? pAllGenre : predicate.and(pAllGenre); | |||||
return this; | |||||
} | |||||
@Override | |||||
public LolQueryService titleContains(String title) { | |||||
Predicate<Lol> pTitleContains = (vg -> vg.getNombre().toLowerCase().contains(title.toLowerCase())); | |||||
predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); | |||||
return this; | |||||
} | |||||
} |
@ -1,17 +0,0 @@ | |||||
package com.cristobalbernal.loladvisor.service; | |||||
import com.cristobalbernal.loladvisor.dao.LolDao; | |||||
import java.util.Collection; | |||||
public class LolService { | |||||
LolDao filmDao; | |||||
LolQueryService queryService; | |||||
public Collection<String> findAllGenres(){ | |||||
return null; | |||||
} | |||||
} |