From 4ebe321793bd629bd671bda89cb27630ca5a9fb0 Mon Sep 17 00:00:00 2001 From: Yaros Date: Sun, 27 Nov 2022 05:55:49 +0100 Subject: [PATCH] 5Am --- almacen/.classpath | 60 +++++++++ almacen/.project | 23 ++++ .../.settings/org.eclipse.jdt.apt.core.prefs | 2 + almacen/.settings/org.eclipse.jdt.core.prefs | 12 ++ almacen/.settings/org.eclipse.m2e.core.prefs | 4 + almacen/pom.xml | 16 +++ .../java/com/yaros/almacen/AlmacenApp.java | 17 +++ .../java/com/yaros/almacen/AlmacenHelp.java | 35 +++++ .../java/com/yaros/almacen/AlmacenRunApp.java | 92 +++++++++++++ .../com/yaros/almacen/config/AppConfig.java | 28 ++++ .../com/yaros/almacen/dao/ProductDao.java | 14 ++ .../almacen/dao/ProductDaoImplMemory.java | 71 ++++++++++ .../almacen/dao/UtilProductFileReader.java | 40 ++++++ .../java/com/yaros/almacen/model/Product.java | 123 ++++++++++++++++++ .../service/ProductQuearyServiceImpl.java | 66 ++++++++++ .../almacen/service/ProductQueryService.java | 15 +++ .../yaros/almacen/service/ProductService.java | 59 +++++++++ almacen/src/main/java/com/yaros/help | 28 ++++ almacen/src/main/resources/almacen.properties | 3 + almacen/src/main/resources/ayuda.txt | 28 ++++ almacen/src/main/resources/products.csv | 12 ++ almacen/target/classes/META-INF/MANIFEST.MF | 5 + .../maven/com.yaros/almacen/pom.properties | 7 + .../META-INF/maven/com.yaros/almacen/pom.xml | 16 +++ almacen/target/classes/almacen.properties | 3 + almacen/target/classes/ayuda.txt | 28 ++++ .../com/yaros/almacen/AlmacenApp.class | Bin 0 -> 952 bytes .../com/yaros/almacen/AlmacenHelp.class | Bin 0 -> 1587 bytes .../com/yaros/almacen/AlmacenRunApp.class | Bin 0 -> 5408 bytes .../com/yaros/almacen/config/AppConfig.class | Bin 0 -> 1147 bytes .../com/yaros/almacen/dao/ProductDao.class | Bin 0 -> 403 bytes .../almacen/dao/ProductDaoImplMemory.class | Bin 0 -> 3620 bytes .../almacen/dao/UtilProductFileReader.class | Bin 0 -> 3318 bytes .../com/yaros/almacen/model/Product.class | Bin 0 -> 3990 bytes .../service/ProductQuearyServiceImpl.class | Bin 0 -> 4243 bytes .../almacen/service/ProductQueryService.class | Bin 0 -> 477 bytes .../almacen/service/ProductService.class | Bin 0 -> 3919 bytes almacen/target/classes/com/yaros/help | 28 ++++ almacen/target/classes/products.csv | 12 ++ 39 files changed, 847 insertions(+) create mode 100644 almacen/.classpath create mode 100644 almacen/.project create mode 100644 almacen/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 almacen/.settings/org.eclipse.jdt.core.prefs create mode 100644 almacen/.settings/org.eclipse.m2e.core.prefs create mode 100644 almacen/pom.xml create mode 100644 almacen/src/main/java/com/yaros/almacen/AlmacenApp.java create mode 100644 almacen/src/main/java/com/yaros/almacen/AlmacenHelp.java create mode 100644 almacen/src/main/java/com/yaros/almacen/AlmacenRunApp.java create mode 100644 almacen/src/main/java/com/yaros/almacen/config/AppConfig.java create mode 100644 almacen/src/main/java/com/yaros/almacen/dao/ProductDao.java create mode 100644 almacen/src/main/java/com/yaros/almacen/dao/ProductDaoImplMemory.java create mode 100644 almacen/src/main/java/com/yaros/almacen/dao/UtilProductFileReader.java create mode 100644 almacen/src/main/java/com/yaros/almacen/model/Product.java create mode 100644 almacen/src/main/java/com/yaros/almacen/service/ProductQuearyServiceImpl.java create mode 100644 almacen/src/main/java/com/yaros/almacen/service/ProductQueryService.java create mode 100644 almacen/src/main/java/com/yaros/almacen/service/ProductService.java create mode 100644 almacen/src/main/java/com/yaros/help create mode 100644 almacen/src/main/resources/almacen.properties create mode 100644 almacen/src/main/resources/ayuda.txt create mode 100644 almacen/src/main/resources/products.csv create mode 100644 almacen/target/classes/META-INF/MANIFEST.MF create mode 100644 almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.properties create mode 100644 almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.xml create mode 100644 almacen/target/classes/almacen.properties create mode 100644 almacen/target/classes/ayuda.txt create mode 100644 almacen/target/classes/com/yaros/almacen/AlmacenApp.class create mode 100644 almacen/target/classes/com/yaros/almacen/AlmacenHelp.class create mode 100644 almacen/target/classes/com/yaros/almacen/AlmacenRunApp.class create mode 100644 almacen/target/classes/com/yaros/almacen/config/AppConfig.class create mode 100644 almacen/target/classes/com/yaros/almacen/dao/ProductDao.class create mode 100644 almacen/target/classes/com/yaros/almacen/dao/ProductDaoImplMemory.class create mode 100644 almacen/target/classes/com/yaros/almacen/dao/UtilProductFileReader.class create mode 100644 almacen/target/classes/com/yaros/almacen/model/Product.class create mode 100644 almacen/target/classes/com/yaros/almacen/service/ProductQuearyServiceImpl.class create mode 100644 almacen/target/classes/com/yaros/almacen/service/ProductQueryService.class create mode 100644 almacen/target/classes/com/yaros/almacen/service/ProductService.class create mode 100644 almacen/target/classes/com/yaros/help create mode 100644 almacen/target/classes/products.csv diff --git a/almacen/.classpath b/almacen/.classpath new file mode 100644 index 0000000..11ae050 --- /dev/null +++ b/almacen/.classpath @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/almacen/.project b/almacen/.project new file mode 100644 index 0000000..cab9d4f --- /dev/null +++ b/almacen/.project @@ -0,0 +1,23 @@ + + + almacen + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/almacen/.settings/org.eclipse.jdt.apt.core.prefs b/almacen/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/almacen/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/almacen/.settings/org.eclipse.jdt.core.prefs b/almacen/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..2c15bc6 --- /dev/null +++ b/almacen/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +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.compliance=1.8 +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=enabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/almacen/.settings/org.eclipse.m2e.core.prefs b/almacen/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/almacen/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/almacen/pom.xml b/almacen/pom.xml new file mode 100644 index 0000000..d09d70a --- /dev/null +++ b/almacen/pom.xml @@ -0,0 +1,16 @@ + + 4.0.0 + com.yaros + almacen + 0.0.1-SNAPSHOT + GestorAlmacen + Ua aplicacion que gestiona un almacen + + + + org.springframework + spring-context + 5.3.24 + + + \ No newline at end of file diff --git a/almacen/src/main/java/com/yaros/almacen/AlmacenApp.java b/almacen/src/main/java/com/yaros/almacen/AlmacenApp.java new file mode 100644 index 0000000..bf905ff --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/AlmacenApp.java @@ -0,0 +1,17 @@ +package com.yaros.almacen; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.yaros.almacen.config.AppConfig; + +public class AlmacenApp { + + public static void main(String[] args) { + ApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class); + AlmacenRunApp runApp = appContext.getBean(AlmacenRunApp.class); + runApp.run(args); + ((AnnotationConfigApplicationContext) appContext).close(); + } + +} diff --git a/almacen/src/main/java/com/yaros/almacen/AlmacenHelp.java b/almacen/src/main/java/com/yaros/almacen/AlmacenHelp.java new file mode 100644 index 0000000..a2d19f4 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/AlmacenHelp.java @@ -0,0 +1,35 @@ +package com.yaros.almacen; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Collectors; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; + +@Component +public class AlmacenHelp { + private String help; + + @PostConstruct + public void init() { + try { + // @formatter:off + help = Files.lines(Paths.get(ResourceUtils.getFile("classpath:ayuda.txt").toURI())) + .collect(Collectors.joining("\n")); + // @formatter:on + } catch (IOException e) { + System.out.println("Error cargando el texto de ayuda"); + System.exit(-1); + } + } + + public String getHelp() { + return help; + } + + +} diff --git a/almacen/src/main/java/com/yaros/almacen/AlmacenRunApp.java b/almacen/src/main/java/com/yaros/almacen/AlmacenRunApp.java new file mode 100644 index 0000000..222135e --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/AlmacenRunApp.java @@ -0,0 +1,92 @@ +package com.yaros.almacen; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.yaros.almacen.model.Product; +import com.yaros.almacen.service.ProductQueryService; +import com.yaros.almacen.service.ProductService; + +@Component +public class AlmacenRunApp { + @Autowired + private ProductService productService; + @Autowired + private ProductQueryService productQueryService; + @Autowired + private AlmacenHelp help; + + public void run(String[] args) { + if(args.length < 1) { + System.out.println("Error de Sintaxis"); + System.out.println(help.getHelp()); + } else if(args.length == 1){ + switch(args[0].toLowerCase()) { + case "-la": + System.out.printf("%s\t%-10s\t%-10s\t%s\t%s\t%s\t%s\t%s\n", "ID", "Name", "Manufacturer", "Shelf", "Weight", "Size", "Num", "Notes"); + productService.findAll().forEach(f -> System.out.printf("%s\t%-10s\t%-10s\t%s\t%s\t%s\t%s\t%s\n", + f.getId(), f.getName(), f.getManufacturer(), f.getShelf(), f.getWeight(), f.getSize(), f.getNum(), + f.getNotes().stream().collect(Collectors.joining(", ")))); + break; + case "-lm": + productService.findAllManufacturers().forEach(System.out::println); + break; + case "-ln": + productService.findAllNotes().forEach(System.out::println); + break; + default: + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } + } else if (args.length % 2 != 0) { + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } else if (args.length > 8) { + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } else { + List argumentos = new ArrayList<>(); + for(int i = 0; i < args.length; i += 2) { + argumentos.add(new String[] {args[i], args[i + 1]}); + }; + + boolean error = false; + + for(String[] argumento : argumentos) { + switch(argumento[0].toLowerCase()) { + /*case "-gi": + filmQueryService. (argumento[1].split(",")); + break;*/ + case "-gm": + productQueryService.anyManufacturer(argumento[1].split(",")); + break; + case "-gn": + productQueryService.anyNote(argumento[1]); + break; + case "-t": + productQueryService.nameContains(argumento[1]); + break; + default: error = true; + System.out.println("Error de sintaxis"); + System.out.println(help.getHelp()); + } + } + if(!error) { + Collection result = productQueryService.exec(); + System.out.printf("%s\t%-10s\t%-10s\t%s\t%s\t%s\t%s\t%s\n", "ID", "Name", "Manufacturer", "Shelf", "Weight", "Size", "Num", "Notes"); + if(result != null) { + result.forEach(f -> System.out.printf("%s\t%-10s\t%-10s\t%s\t%s\t%s\t%s\t%s\n", + f.getId(), f.getName(), f.getManufacturer(), f.getShelf(), f.getWeight(), f.getSize(), f.getNum(), + f.getNotes().stream().collect(Collectors.joining(", ")))); + } else { + System.out.println("No hay peliculas que cumplan esos critetios. Lo sentimos"); + } + } + } + } +} diff --git a/almacen/src/main/java/com/yaros/almacen/config/AppConfig.java b/almacen/src/main/java/com/yaros/almacen/config/AppConfig.java new file mode 100644 index 0000000..d3dea35 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/config/AppConfig.java @@ -0,0 +1,28 @@ +package com.yaros.almacen.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.yaros.almacen") +@PropertySource("classpath:/almacen.properties") +public class AppConfig { + @Value("${file.path}") + private String file; + @Value("${file.csv.separator}") + private String separator; + @Value("${file.csv.list.separator}") + private String listSeparator; + + public String getFile() { + return file; + } + public String getSeparator() { + return separator; + } + public String getListSeparator() { + return listSeparator; + } +} diff --git a/almacen/src/main/java/com/yaros/almacen/dao/ProductDao.java b/almacen/src/main/java/com/yaros/almacen/dao/ProductDao.java new file mode 100644 index 0000000..0ebaa21 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/dao/ProductDao.java @@ -0,0 +1,14 @@ +package com.yaros.almacen.dao; + +import java.util.Collection; + +import com.yaros.almacen.model.Product; + +public interface ProductDao { + public Product findById(long id); + public Collection findAll(); + public void insert(Product product); + public void edit(Product product); + public void delete(long id); + +} diff --git a/almacen/src/main/java/com/yaros/almacen/dao/ProductDaoImplMemory.java b/almacen/src/main/java/com/yaros/almacen/dao/ProductDaoImplMemory.java new file mode 100644 index 0000000..23175f7 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/dao/ProductDaoImplMemory.java @@ -0,0 +1,71 @@ +package com.yaros.almacen.dao; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import com.yaros.almacen.config.AppConfig; +import com.yaros.almacen.model.Product; + +@Repository +public class ProductDaoImplMemory implements ProductDao { + + public List peliculas = new ArrayList<>(); + + @Autowired + private AppConfig appConfig; + @PostConstruct + public void init() { + peliculas = UtilProductFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); + } + + public Product findById(long id) { + // TODO Auto-generated method stub + // @formatter:off + Optional result = peliculas.stream().filter(f -> f.getId() == id).findFirst(); + // @formatter:on + return result.orElse(null); + } + + public Collection findAll() { + // TODO Auto-generated method stub + return peliculas; + } + + public void insert(Product product) { + // TODO Auto-generated method stub + peliculas.add(product); + } + + public void edit(Product product) { + // TODO Auto-generated method stub + int index = getIndexOf(product.getId()); + if(index != -1) + peliculas.set(index, product); + } + + public void delete(long id) { + // TODO Auto-generated method stub + int index = getIndexOf(id); + if(index != -1) + peliculas.remove(index); + } + + private int getIndexOf(long id) { + boolean encontrado = false; + int index = 0; + while(!encontrado && index < peliculas.size()) { + if(peliculas.get(index).getId() == id) + encontrado = true; + else + index++; + } + return (encontrado) ? index : -1; + } +} diff --git a/almacen/src/main/java/com/yaros/almacen/dao/UtilProductFileReader.java b/almacen/src/main/java/com/yaros/almacen/dao/UtilProductFileReader.java new file mode 100644 index 0000000..115728c --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/dao/UtilProductFileReader.java @@ -0,0 +1,40 @@ +package com.yaros.almacen.dao; + +import java.io.IOException; +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; + +import org.springframework.util.ResourceUtils; + +import com.yaros.almacen.model.Product; + +public class UtilProductFileReader { + + public static List readFile(final String path, final String separator, final String listSeparator){ + System.out.println(path); + System.out.println(separator); + System.out.println(listSeparator); + List result = new ArrayList<>(); + System.out.println(result); + // @formatter:off + try { + result = Files.lines(Paths.get(ResourceUtils.getFile(path).toURI())) + .skip(1) + .map(line -> { + String[] values = line.split(separator); + return new Product(Long.parseLong(values[0]), values[1], values[2], values[3], values[4], values[5], Integer.parseInt(values[6]), + Arrays.asList(values[7].split(listSeparator))); + }).collect(Collectors.toList()); + } catch (IOException e) { + e.printStackTrace(); + /*System.err.println("Error de lectura del fichero de datos: imdb_data"); + System.exit(-1);*/ + } + // @formatter:on + return result; + } +} diff --git a/almacen/src/main/java/com/yaros/almacen/model/Product.java b/almacen/src/main/java/com/yaros/almacen/model/Product.java new file mode 100644 index 0000000..02642a6 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/model/Product.java @@ -0,0 +1,123 @@ +package com.yaros.almacen.model; + +import java.util.List; +import java.util.Objects; + +public class Product { + private long id; + private String name; + private String manufacturer; + private String shelf; + private String weight; + private String size; + private int num; + private List notes; + + public Product() { + + } + + public Product(long id, String name, String manufacturer, String shelf, String weight, String size, int num, + List notes) { + super(); + this.id = id; + this.name = name; + this.manufacturer = manufacturer; + this.shelf = shelf; + this.weight = weight; + this.size = size; + this.num = num; + this.notes = notes; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getManufacturer() { + return manufacturer; + } + + public void setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + } + + public String getShelf() { + return shelf; + } + + public void setShelf(String shelf) { + this.shelf = shelf; + } + + public String getWeight() { + return weight; + } + + public void setWeight(String weight) { + this.weight = weight; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } + + public List getNotes() { + return notes; + } + + public void setNotes(List notes) { + this.notes = notes; + } + + @Override + public int hashCode() { + return Objects.hash(id, manufacturer, name, notes, num, shelf, size, weight); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Product other = (Product) obj; + return id == other.id && Objects.equals(manufacturer, other.manufacturer) && Objects.equals(name, other.name) + && Objects.equals(notes, other.notes) && num == other.num && Objects.equals(shelf, other.shelf) + && Objects.equals(size, other.size) && Objects.equals(weight, other.weight); + } + + @Override + public String toString() { + return "Producto [id=" + id + ", name=" + name + ", manufacturer=" + manufacturer + ", shelf=" + shelf + + ", weight=" + weight + ", size=" + size + ", num=" + num + ", notes=" + notes + "]"; + } + + +} diff --git a/almacen/src/main/java/com/yaros/almacen/service/ProductQuearyServiceImpl.java b/almacen/src/main/java/com/yaros/almacen/service/ProductQuearyServiceImpl.java new file mode 100644 index 0000000..a7bcfd6 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/service/ProductQuearyServiceImpl.java @@ -0,0 +1,66 @@ +package com.yaros.almacen.service; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.yaros.almacen.dao.ProductDao; +import com.yaros.almacen.model.Product; + +@Service +public class ProductQuearyServiceImpl implements ProductQueryService { + @Autowired + private ProductDao dao; + private Predicate predicate; + + //DE DONDE COÑO SALE EL POSTCONSTRUCT + @PostConstruct + public void init() { + predicate = null; + } + + @Override + public Collection exec() { + // @formatter:off + return dao.findAll().stream().filter(predicate).collect(Collectors.toList()); + // @formatter:on + } + + /*@Override + public ProductQueryService anyId(String... id) { + Predicate pAnyGenere = (product -> Arrays.stream(id).anyMatch(product.getId()::contains)); + predicate = (predicate == null) ? pAnyGenere : predicate.and(pAnyGenere); + return this; + }*/ + + @Override + public ProductQueryService anyManufacturer(String... manufacturers) { + Predicate pAnyGenere = (product -> Arrays.stream(manufacturers).anyMatch(product.getManufacturer()::contains)); + predicate = (predicate == null) ? pAnyGenere : predicate.and(pAnyGenere); + return this; + } + + + + @Override + public ProductQueryService nameContains(String name) { + Predicate pTitleContains = (product -> product.getName().toLowerCase().contains(name.toLowerCase())); + predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); + return this; + } + + @Override + public ProductQueryService anyNote(String... notes) { + Predicate pAllGeneres = (product -> Arrays.stream(notes).allMatch(product.getNotes()::contains)); + predicate = (predicate == null) ? pAllGeneres : predicate.and(pAllGeneres); + return this; + } + +} \ No newline at end of file diff --git a/almacen/src/main/java/com/yaros/almacen/service/ProductQueryService.java b/almacen/src/main/java/com/yaros/almacen/service/ProductQueryService.java new file mode 100644 index 0000000..3c4b801 --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/service/ProductQueryService.java @@ -0,0 +1,15 @@ +package com.yaros.almacen.service; + +import java.util.Collection; + +import com.yaros.almacen.model.Product; + +public interface ProductQueryService { + public Collection exec(); + + public ProductQueryService anyManufacturer(String... manufacturers); + public ProductQueryService anyNote(String... notes); + public ProductQueryService nameContains(String note); + //public ProductQueryService anyId(String... id); + +} diff --git a/almacen/src/main/java/com/yaros/almacen/service/ProductService.java b/almacen/src/main/java/com/yaros/almacen/service/ProductService.java new file mode 100644 index 0000000..a74efbd --- /dev/null +++ b/almacen/src/main/java/com/yaros/almacen/service/ProductService.java @@ -0,0 +1,59 @@ +package com.yaros.almacen.service; + +import java.util.Collection; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.yaros.almacen.dao.ProductDao; +import com.yaros.almacen.model.Product; + +@Service +public class ProductService { + + @Autowired + ProductDao productDao; + + @Autowired + ProductQueryService queryService; + + public Collection findAllNotes(){ + List result = null; + + // @formatter:off + result = productDao.findAll().stream().map(f -> f.getNotes()) + .flatMap(lista -> lista.stream()) + .distinct().sorted().collect(Collectors.toList()); + // @formatter:on + return result; + } + + public Collection findAllManufacturers(){ + List result = null; + + // @formatter:off + result = productDao.findAll().stream().map(f -> f.getManufacturer()) + .distinct().sorted().collect(Collectors.toList()); + // @formatter:on + return result; + } + + public Collection findAll(){ + return productDao.findAll(); + } + + public Collection findByAnyNote(String... notes){ + return queryService.anyNote(notes).exec(); + } + + public Collection findByAnyManufacturer(String... manufacturer){ + return queryService.anyManufacturer(manufacturer).exec(); + } + + public Collection findByTitleContains(String name){ + return queryService.nameContains(name).exec(); + } +} diff --git a/almacen/src/main/java/com/yaros/help b/almacen/src/main/java/com/yaros/help new file mode 100644 index 0000000..7af7ce3 --- /dev/null +++ b/almacen/src/main/java/com/yaros/help @@ -0,0 +1,28 @@ +Sintaxis: java -jar almacen.jar [OPCIONES] + + -la + Lista todos los productos. + No se pueden utilizar parametros + + -lm + Lista todos los fabricantes + No se pueden utilizar parametros + + -ln + Lista toads las notas + No se pueden utilizar parametros + + -gi id + Busca al producto por id + id = id del producto + + -gm manufacturer + Busca al producto por fabricante + fabricante = fabricante del producto + + -gn nota + Busca al producto por notas + notas = notas del producto + + + \ No newline at end of file diff --git a/almacen/src/main/resources/almacen.properties b/almacen/src/main/resources/almacen.properties new file mode 100644 index 0000000..6495a0f --- /dev/null +++ b/almacen/src/main/resources/almacen.properties @@ -0,0 +1,3 @@ +file.path=classpath:products.csv +file.csv.separator=; +file.csv.list.separator=, \ No newline at end of file diff --git a/almacen/src/main/resources/ayuda.txt b/almacen/src/main/resources/ayuda.txt new file mode 100644 index 0000000..207a70a --- /dev/null +++ b/almacen/src/main/resources/ayuda.txt @@ -0,0 +1,28 @@ +Porfavor utiliza los siguentes comandos: + -la + Lista todos los productos. + No se pueden utilizar parametros + + -lm + Lista todos los fabricantes + No se pueden utilizar parametros + + -ln + Lista toads las notas + No se pueden utilizar parametros + + -gi id + Busca al producto por id + id = id del producto + + -gm manufacturer + Busca al producto por fabricante + fabricante = fabricante del producto + + -gn nota + Busca al producto por notas + notas = notas del producto + + -t algo + Busca el producto si contiene el 'algo' + algo = texto que tiene que incluir \ No newline at end of file diff --git a/almacen/src/main/resources/products.csv b/almacen/src/main/resources/products.csv new file mode 100644 index 0000000..5752544 --- /dev/null +++ b/almacen/src/main/resources/products.csv @@ -0,0 +1,12 @@ +id;name;manufaturer;shelf;weight;size;num;notes +1;Dobojorn;Ikea;A2;20;XL;2;furniture +2;Nintendo Swich;Nintendo;B4;0.2;XS;1;entertainment,gaming +3;SuperChair;Secret Lab;B3;2;L;3;furniture,gaming +4;Ender 3 V2;Creality;C1;6;M;4;printer +5;Ender 3 S1;Creality;C8;8;M;4;printer +6;Mario Kart 8;Nintendo;B1;0.1;XXS;22;entertainment,gaming,videogames +7;Milkentron;Ikea;A2;2;L;1;furniture +8;Kobra;Anycubic;A5;8;M;5;printer,entry-level +9;Airfriyer;Xaomi;B2;4;M;1;appliance,cooking +10;Mars 2;Elogoo;B5;10;XL;2;printer,resin +11;OLED TV;Samsung;A8;20;XXL;1;entertainment,expensive \ No newline at end of file diff --git a/almacen/target/classes/META-INF/MANIFEST.MF b/almacen/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..c408ba4 --- /dev/null +++ b/almacen/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Built-By: usuario +Build-Jdk: 17.0.4.1 +Created-By: Maven Integration for Eclipse + diff --git a/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.properties b/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.properties new file mode 100644 index 0000000..637c3db --- /dev/null +++ b/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Sun Nov 27 02:29:17 CET 2022 +m2e.projectLocation=C\:\\Users\\usuario\\Documents\\workspace-spring-tool-suite-4-4.16.1.RELEASE\\almacen +m2e.projectName=almacen +groupId=com.yaros +artifactId=almacen +version=0.0.1-SNAPSHOT diff --git a/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.xml b/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.xml new file mode 100644 index 0000000..d09d70a --- /dev/null +++ b/almacen/target/classes/META-INF/maven/com.yaros/almacen/pom.xml @@ -0,0 +1,16 @@ + + 4.0.0 + com.yaros + almacen + 0.0.1-SNAPSHOT + GestorAlmacen + Ua aplicacion que gestiona un almacen + + + + org.springframework + spring-context + 5.3.24 + + + \ No newline at end of file diff --git a/almacen/target/classes/almacen.properties b/almacen/target/classes/almacen.properties new file mode 100644 index 0000000..6495a0f --- /dev/null +++ b/almacen/target/classes/almacen.properties @@ -0,0 +1,3 @@ +file.path=classpath:products.csv +file.csv.separator=; +file.csv.list.separator=, \ No newline at end of file diff --git a/almacen/target/classes/ayuda.txt b/almacen/target/classes/ayuda.txt new file mode 100644 index 0000000..207a70a --- /dev/null +++ b/almacen/target/classes/ayuda.txt @@ -0,0 +1,28 @@ +Porfavor utiliza los siguentes comandos: + -la + Lista todos los productos. + No se pueden utilizar parametros + + -lm + Lista todos los fabricantes + No se pueden utilizar parametros + + -ln + Lista toads las notas + No se pueden utilizar parametros + + -gi id + Busca al producto por id + id = id del producto + + -gm manufacturer + Busca al producto por fabricante + fabricante = fabricante del producto + + -gn nota + Busca al producto por notas + notas = notas del producto + + -t algo + Busca el producto si contiene el 'algo' + algo = texto que tiene que incluir \ No newline at end of file diff --git a/almacen/target/classes/com/yaros/almacen/AlmacenApp.class b/almacen/target/classes/com/yaros/almacen/AlmacenApp.class new file mode 100644 index 0000000000000000000000000000000000000000..38045b0ad358850ed95a8d23b89d9732e4ffd756 GIT binary patch literal 952 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 literal 0 HcmV?d00001 diff --git a/almacen/target/classes/com/yaros/almacen/dao/ProductDao.class b/almacen/target/classes/com/yaros/almacen/dao/ProductDao.class new file mode 100644 index 0000000000000000000000000000000000000000..95814bda8b8cdd531a6b54d09cc017e50d3da7b5 GIT binary patch literal 403 zcmaiwPfG(a5XIlr?QUEDR6Tk0(8KP6CA4;5E z6b~Xjg?aPxo0<3V`SuRr9LEKEgi{r2v5_&Xg>Ea1o|9PA355%3Jh2uvf9Il>s{=1`u_KOfHC(t*3NPC1sEx6!vFvP literal 0 HcmV?d00001 diff --git a/almacen/target/classes/com/yaros/almacen/dao/ProductDaoImplMemory.class b/almacen/target/classes/com/yaros/almacen/dao/ProductDaoImplMemory.class new file mode 100644 index 0000000000000000000000000000000000000000..8ebb941050f63bee13aca440800b0e3160fa46f3 GIT binary patch literal 3620 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 A!~g&Q literal 0 HcmV?d00001 diff --git a/almacen/target/classes/com/yaros/almacen/model/Product.class b/almacen/target/classes/com/yaros/almacen/model/Product.class new file mode 100644 index 0000000000000000000000000000000000000000..2bba33800b207380fa50c5156a6427d9d272a272 GIT binary patch literal 3990 zcmcguTXR!Y6kaFymIEy*1@_1- zQOIM?DWr@mg44jnzoZHt z?Zo(6D*x3?+7b0A2X*`Z^yr%B!I=)iJyOX}0Y(EV1u4YnA(c8LdRV1SiT0|rL83vG zREdUE+DMyNW1mW0)UD9giMDgNxzIQZf8MC1ar1DZxO@JxlzfSC&P5Q5Q{pymNer&d zIyPXx+|Zj?yUr%MU}CcE(sn_oeI|rG8F`aKSggYi%$}>?>kdpeFq6uNYtG&!3SbWR zPK1G5AHaeTeTg)aUI?PS6ROy(Vd4GkYCoGcYoj4TZ4M?QT-k-8C04(I=jrxpT4HsYxrqmrjI=g^qak_) z*-b`7D}eMGDtj^_8v?{Pgkx?C5Z(e|u&5RViQ7!#9j4xPKb$__6Xr!95o#Z>+J_GA zjWhoT?jNBeUE(AFQsmhJds?GdytVi(6CX))p) zaXcd;OPsk8?i8@dh%@CEh;zl+9N|uZy^J_toVgM16wn$5mVxt37&8i`=n;H5b15W1 zX6`=qe}@T=2tm4!x@PTB5SPkh2$;zQM5dg1kAvi1VPUH{hrnupfqH-nNFG=v(m2BV z6#3pkL~|wb7#&qbKo|uZCr=H}^@q=eVqAT!}nI$Lq>t zxT;*20@_X#4=0fs5IMIF5q{e2_yj!-3!8=CXVwr(Ix}ONS94Z|KIbgm9r~HPSuax8ze3}gtPd!f$#O0unQQ<< zGLsEr&{pVlCL02ZWwPD8kif_*@yrUn;LLljCCqfa)+qQ3auIHEXo?@@ldIKTZRlI_ z`|b_>Mt<)-ZJ90&;r9&-L%)(T3H$v?{67DZ=76KX(G}9apczOJND(2Of|P`m6w+Zx z8YJy&N&&_IV`5+r}{d_!C;GA3YWSW*}WhF)yGV7ZHtx zW?|#V7JwG%4lsALh>U2pvfiaRG7vBCy^1d9p*(hNAYah0{z;2LEGgWr@#TB`71a4m zia(K=4PSpiMeyriCOceSrYdj*L-=Khql|A!9Ao^d#Bs*2OPpZ*ro_nX+u?U5PA=2? i;XA;~^l|fgZW8R5K<5TxUTQf%j#&2SyP)TxPyYrWBHMBR literal 0 HcmV?d00001 diff --git a/almacen/target/classes/com/yaros/almacen/service/ProductQuearyServiceImpl.class b/almacen/target/classes/com/yaros/almacen/service/ProductQuearyServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..b7e77c2ae7924ff581431212911f5b92b71398ba GIT binary patch literal 4243 zcmbtWX?Gk)6}>f*)$yop3E4@!#E!g#NaLlAExa(cj65cZVdU76qY#^|)Kik%>gk^J z^w<`J#X!QoL)iBvKmsHX6w4nteB&Grzlm_GyJx0H(^_))Fw@DUij5blHP=9|z~Bve zQ(CU{=By`YZYVo6&?j(cJ!ma3fu4%=1@@M^r*WW3;JoyU0^6Tzc%f5O(@x!)an*$9 z`JoIQ->VCpEc?NnRj&n(H#Zx|s=DO|^VW=#Ufr6NcIXESmTXP1CK{oC%L!D4up4W9 zI<^dz!0vJsR3mg;YqsIp8l5DPaqT?i%y}|w1azKQ)%kQrNL9b0+-6Y4apLuzc04B> zrw${d(*nIEdgRfAEhYvqC@@fVJaw^Aol(IR$)E*>%Dye#X&E^BJ2Cc#*Bz=bma*nq zdr1<#nuEY_6wmFnPM7?8SfapTz%(dsguqS{{V+L4-Bz~1wvo}43MJolnFth(sKphA z)+3BwY1o8;`}(mL`wi^l_gX1p;t}i;FlHUEGU2-Ycod@sMg+FDH?_^sL;(l50gO$_ zDg*1F8(XcZXt3CiL$C}S7I?4?)!|~|2;N1sS;q}kAaH6VB}+yorB&+yD&}zv?=~<- zMqO(q?ERo_;y6xlz0fZ^b?)8nEcPw;D1cKY-UIH7VaK~9a3oDKVbPwGP)rp#Cl5$( zVN!YxT~jOqMtXkaS{!QRNWoZv#nE*oVyg`lhuDwKns_fJm|3CH5gp6MZEKRDYClSN zpMmoN53S~B;xRnVl9OIVU_32C24;GvGKK{C6d3tZM}KgI5!iMN`1x?yNex)nu! zX(|GnYge4mZ80|ROvh0XCkV5UiFDBq)ev$xE3kpRTrs@<8Y?%JiC_1*vN}_d`;Q2m z$V!KdEbDBsqgV6zD5QapHAzIReIf|t0&A#%8G*wc$njCe1a3>Pygn%IU6u!^AvX#?2`uSJrhlb@)a`R!a{q>z?GBsNp&KM^zcx zTy4)<>3o&i*Wz=X-fJq@-h`t9$1{>;O$5CM72Gm$TdQF(w2RE1Jf`t+6Q9twes(ec zmI_L;9@#%>;#2rESGHSezcamZ>ADQ2)N>8x*{V3ofSP%7Ot17=6Q9H9Y1AvlSvAxY zG1`6IF{xoMUeq=4g=Kv(8clD1M$v2SzhvUevG%SzDI@LkQ+^|`)nkr6r+2M%c{;2! zOJF4P#!~0$q5O~?!AkC1EVsdPz8^9RWo=T0*ZoR8k8k4J2EN6MQ@a8k@1{Smta4N` zbd<@x$HaH=U5Z?7n*{!o)-#zIgFnHp=&JhuvhU9~YQ^pnPgy!9ULonU`}zmtC0C!D zK8+IOl62iECsf6OK72#q{&YyqGQK*9m-4(!{LsXQ@L@XsKw$sKI&yXpKTf9p+(d{5 zr~a&M`;CduL~y^3Z37$d{4xg3laLJlK%{>B34by0XEw-oXVJN)bN!`(jd+!Q?DiKt z9uZNQtGaaM&l#G8seRHTQ$4Q#$SeaqteMjpX^eCGMg={p|Z zH%0H8ImR}ILH@sk7K=~8=Z3_ArL2mzHEWMoCs69-hDju3<39_fxPOK0q%mTx{7)OPQ7f z$i0Ov=rJG+Od7o5@G0J+m?={(8s!i!;z|B5Cw}Q|5kF1}CrJ3@3dE;yC87Cr7xAZ& zNqoAScw}l4zk?5ED*o)-B7TO%$4UI`3dFCr6u;I*{8~2gH54Dr>%NjGevVtLGk06z zEJY?Zvq|ty(OcsU5bNe577F|=;`!w; z$5Su^Eg1Hv6=>Z_XuY6meX*O?nG{|^i+TN(i2PSuMf^2>f1STEmg)Bx`1kQ6{3Lq& oDSm-pMsL5uZ}Ge6?PdHPe~jKDvNb8~WTV5%C@mj?U$iPdwmPiK-7G~S zFkaG%q$O9$`{$)rQ6SN;S_w?D>8ummXsj%}wX7QNa)Ci<_1UdG^*!FN8g!4pTdF1(9mTq96q z|A8Ntz70y>8p{_Zd&0fgM%Nb*IN%Qg63+S%eeP54dN@ip7+}c42FG1xr#NLz;H=vi FeF3eNkPrX> literal 0 HcmV?d00001 diff --git a/almacen/target/classes/com/yaros/almacen/service/ProductService.class b/almacen/target/classes/com/yaros/almacen/service/ProductService.class new file mode 100644 index 0000000000000000000000000000000000000000..16ca1c8caca49449919d20c4f5e39f5154485206 GIT binary patch literal 3919 zcmb7GS$ES$6#m9p1dbqXfUpDz&=8yiPzcZhPHBTv3at~Cq;#R%#2yC`Su$D@+?}p; z-|61|h4!4Dw&9_t&prK3J-s6-wq!dbJlGmt-TTdV*O`C*yZsk{BluZCf+3x^N?L{6 zmZNc_#Ph<`9AVGvd7+)Rt%8?#r-D}ntqiHFe4c9tH)pkTGgn34Wk{9-wQ+7S?8!C4 z6}YtoMLHRVtrtDh)l1@%?&vdy7&A@F<*sg-4#TmWWzT9(+1Ab3qRmTU!LsMH8Np3Q zEAqT+*%ggf4YV=OwH9<+6bM$m<_WtJvSrYkP^t6mLd1Xo+DCO$cTY03qz5iBv}Ub> zNTLOuDmtJtbmnwZOnRjmVNY`+&d`;!^4z$@ZC$>H!dCZ+PM!>|yno15axdy;VazZl zEmx53mh?c*kF@9NhL*JqgF;OKBF(i^`mD)a&!+A7FQYaZ82f3Oa%CtpCo^k7kyp`% z_73!5hl1@4yH?7Uik;ZRpoH`~unT(>>}J^5jGl^n(MNG~TwCxGLr;ufAk~Nveav)G z4fdA)cND;Q$fT-!bdtKt9-QUXi7OtqAb1hEk< z8sZoTabxJ0n;lXyBJq@>!QBa7ma-!%j!G}r6m-YciJ}zVui{wXx@Ehfki-d$Dxh@r zG!PB5Y1xj72SC-2#5Q$VIX7UsH&>gSxN_nZ$`|5O?)*aPKSUnTm^kffH?b=Qk66j~h#C)z* z`e>8xDN#QfOQVD;nqi$pK2;erE3$DIhSHZCOFx?D+6H7jxq9u@(2)&xUd37@J8%)x z3Z@tiG&a~BW{`@EXLwhjR5us#q>86xBe#m{B2NuR6Iafe4Nbzuu&El= zXvQSWb1I&f3_FQo^cxMZQY5(q96(I#t|79P>2h5T_rb7Mql0PL>`bg$c{RzA?1hRV zW{Imw=Sq!Lw&_N97h{U71eGU(-&s))X;c`zG*jSx!wiShD;9P%B7O%ZQG%twqygE; zD%KP#%D6`R%?dX>NxEYF6*e?0GVETFM~(L(*;#eHo{7?okIxQdv4@Jxpz*1nIpRTG`(v$uCRsW z(v;I`=X2_mWx3=fFHZ>fidArucoT0cc#Ez)wS?>Dyfr7ZoS$t{8{9h zw&M*tGovmA_rs+!@vTBp3hyOpR(`1BD(1-YgB0dM*=H(TcqIEY1uvA{QgIy>l6{o| zT@uu@rYY>K!5v393chF9+mL}~aa8al9kF*-rNcM~I(8Gm7P_J&=toy3dQ)g6pKIs| zIpynQ@|~`U^uLb2YxHFFY#aOo>wl$10x9~J06-`1p?|3=!Mm`5o^(uN6KQqRI)TkT z$Sqn)0;4Q9_#3t?VjIIEdKqqGFK9K8pp_<9!wLF3EWh5z@F$Kh;=u&|Mm9I}3)#2$ zdvBxNfh~mCgKgN3KJ378TAx6#&!;=sE98?P`NKF(ydEJd$u*Fip%uf~2Cg^hyW~33 z$o0{X>xvA!DH@%;XZP$AHx`kup6ne8*X4HB>_9Svl2!S$;bRi9`RWN$!Z*B zT%tKS5Xnh0+~o#xn5ZI6`bgvSF8xdq(z&5UT#%7}f}tMoP=s|V#3L&_jmyO42A)|F z`PpTVk1m7!f{)C=F;nH7Z_2r_4D#`1kgq@oOC@Ey68Cs{{|=+x^`1y5+hD^Xzmu}B zL*s0i3}tW;^Fic-3Jtnrd&FG90@Wa@H3(|M1t)tC4h-{4!)lD+;Ne!x%I`aflI