| @ -0,0 +1,51 @@ | |||
| <?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"/> | |||
| <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>MovieAdvisor</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,17 @@ | |||
| eclipse.preferences.version=1 | |||
| org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | |||
| org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate | |||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 | |||
| org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | |||
| org.eclipse.jdt.core.compiler.compliance=17 | |||
| 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=warning | |||
| org.eclipse.jdt.core.compiler.processAnnotations=disabled | |||
| org.eclipse.jdt.core.compiler.release=disabled | |||
| org.eclipse.jdt.core.compiler.source=17 | |||
| @ -0,0 +1,4 @@ | |||
| activeProfiles= | |||
| eclipse.preferences.version=1 | |||
| resolveWorkspaceProjects=true | |||
| version=1 | |||
| @ -0,0 +1,21 @@ | |||
| <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>com.ims</groupId> | |||
| <artifactId>MovieAdvisor</artifactId> | |||
| <version>0.0.1-SNAPSHOT</version> | |||
| <name>MovieAdvisor</name> | |||
| <description>Gran recomendador de peliculas</description> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>org.springframework</groupId> | |||
| <artifactId>spring-context</artifactId> | |||
| <version>5.3.23</version> | |||
| </dependency> | |||
| <!--https://www.baeldung.com/spring-postconstruct-predestroy --> | |||
| <dependency> | |||
| <groupId>javax.annotation</groupId> | |||
| <artifactId>javax.annotation-api</artifactId> | |||
| <version>1.3.2</version> | |||
| </dependency> | |||
| </dependencies> | |||
| </project> | |||
| @ -0,0 +1,37 @@ | |||
| package com.ims.studentManager.ConfigPackage; | |||
| 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.ims") | |||
| @PropertySource("classpath:/movieadvisor.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; | |||
| } | |||
| } | |||
| @ -0,0 +1,22 @@ | |||
| package com.ims.studentManager; | |||
| import org.springframework.context.ApplicationContext; | |||
| import org.springframework.context.annotation.AnnotationConfigApplicationContext; | |||
| import com.ims.studentManager.ConfigPackage.AppConfig; | |||
| public class StudentManagerApp { | |||
| public static void main(String args[]) { | |||
| ApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class); | |||
| StudentManagerRunApp runApp = appContext.getBean(StudentManagerRunApp.class); | |||
| runApp.run(args); | |||
| ((AnnotationConfigApplicationContext) appContext).close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,39 @@ | |||
| package com.ims.studentManager; | |||
| import java.io.FileNotFoundException; | |||
| 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 StudentManagerHelp { | |||
| 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.err.println("Error cargando el texto de ayuda"); | |||
| System.exit(-1); | |||
| } | |||
| } | |||
| public String getHelp() { | |||
| return help; | |||
| } | |||
| } | |||
| @ -0,0 +1,99 @@ | |||
| package com.ims.studentManager; | |||
| 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.ims.studentManager.service.StudentQueryService; | |||
| import com.ims.studentManager.service.StudentService; | |||
| import com.ims.studentManger.Package.Student; | |||
| @Component | |||
| public class StudentManagerRunApp { | |||
| @Autowired | |||
| private StudentService studentService; | |||
| @Autowired | |||
| private StudentQueryService studentQueryService; | |||
| private StudentManagerHelp 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 "-lm": | |||
| studentService.findAllMarks().forEach(System.out::println); | |||
| break; | |||
| case "-h": | |||
| System.out.println(help.getHelp()); | |||
| 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<String[]> 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 "-am": | |||
| studentQueryService.anyMark(argumento[1].split(",")); | |||
| break; | |||
| case "-tg": | |||
| studentQueryService.allMarks(argumento[1].split(",")); | |||
| break; | |||
| case "-g": | |||
| studentQueryService.grade(argumento[1]); | |||
| break; | |||
| case "-b": | |||
| String[] marks = argumento[1].split(","); | |||
| studentQueryService.betweenAvgMark(Float.parseFloat(marks[0]), Float.parseFloat(marks[1])); | |||
| break; | |||
| case "-t": | |||
| studentQueryService.nameContains(argumento[1]); | |||
| break; | |||
| default: error = true; | |||
| System.out.println("Error de sintaxis"); | |||
| System.out.println(help.getHelp()); | |||
| } | |||
| } | |||
| if(!error) { | |||
| Collection<Student> result = studentQueryService.exec(); | |||
| System.out.printf("%s\t%-50s\t%s\t%s\n","ID","NAME","GRADE","MARKS"); | |||
| if(result != null) { | |||
| result.forEach(f -> System.out.printf("%s\t%-50s\t%s\t%s\n",f.getId() | |||
| ,f.getName(),f.getGrade(), | |||
| f.getMarks().stream().collect(Collectors.joining(", ")))); | |||
| }else { | |||
| System.out.println("No hay Alumnos con esos criterios. No lo siento, deja de usarme"); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,13 @@ | |||
| package com.ims.studentManager.dao; | |||
| import java.util.Collection; | |||
| import com.ims.studentManger.Package.Student; | |||
| public interface StudentDao { | |||
| public Student findById(long id); | |||
| public Collection<Student> findAll(); | |||
| public void insert(Student student); | |||
| public void edit(Student student); | |||
| public void delete(long id); | |||
| } | |||
| @ -0,0 +1,75 @@ | |||
| package com.ims.studentManager.dao; | |||
| import java.util.ArrayList; | |||
| import java.util.Collection; | |||
| import java.util.List; | |||
| import java.util.Optional; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Repository; | |||
| import com.ims.studentManager.ConfigPackage.AppConfig; | |||
| import com.ims.studentManger.Package.Student; | |||
| @Repository | |||
| public class StudentDaoImplMemory implements StudentDao{ | |||
| public List<Student> students = new ArrayList<>(); | |||
| @Autowired | |||
| private AppConfig appConfig; | |||
| public void init() { | |||
| students = UtilStudentFileReader.readFile(appConfig.getFile(),appConfig.getSeparator(),appConfig.getListSeparator()); | |||
| } | |||
| public Student findById(long id) { | |||
| // @formatter:off | |||
| Optional<Student> result = students | |||
| .stream() | |||
| .filter(f -> f.getId() == id) | |||
| .findFirst(); | |||
| // @formatter:on | |||
| return result.orElse(null); | |||
| } | |||
| public Collection<Student> findAll() { | |||
| return students; | |||
| } | |||
| public void insert(Student student) { | |||
| students.add(student); | |||
| } | |||
| public void edit(Student student) { | |||
| int index = getIndexOf(student.getId()); | |||
| if(index != -1) | |||
| students.set(index, student); | |||
| } | |||
| public void delete(long id) { | |||
| int index = getIndexOf(id); | |||
| if(index != -1) | |||
| students.remove(index); | |||
| } | |||
| private int getIndexOf(long id) { | |||
| boolean encontrado = false; | |||
| int index = 0; | |||
| while(!encontrado && index < students.size()) { | |||
| if(students.get(index).getId() == id) | |||
| encontrado = true; | |||
| else | |||
| index++; | |||
| } | |||
| return (encontrado) ? index : -1; | |||
| } | |||
| } | |||
| @ -0,0 +1,42 @@ | |||
| package com.ims.studentManager.dao; | |||
| import java.io.FileNotFoundException; | |||
| 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.ims.studentManger.Package.Student; | |||
| public class UtilStudentFileReader { | |||
| public static List<Student> readFile(final String path,final String separator,final String listSeparator) { | |||
| List<Student> result = new ArrayList<>(); | |||
| //@formatter:off | |||
| try { | |||
| result = Files.lines(Paths.get(ResourceUtils.getFile(path).toURI())) | |||
| .skip(1) | |||
| .map(line -> { | |||
| String[] values = line.split(separator); | |||
| return new Student(Long.parseLong(values[0]),values[1],values[2], | |||
| Arrays.asList(values[3].split(listSeparator))); | |||
| }).collect(Collectors.toList()); | |||
| } catch (IOException e) { | |||
| System.out.println("Error en la lectura de datos del fichero"); | |||
| e.printStackTrace(); | |||
| } | |||
| //@formatter:on | |||
| return result; | |||
| } | |||
| } | |||
| @ -0,0 +1,16 @@ | |||
| package com.ims.studentManager.service; | |||
| import java.util.Collection; | |||
| import com.ims.studentManger.Package.Student; | |||
| public interface StudentQueryService { | |||
| public Collection<Student> exec(); | |||
| public StudentQueryService anyMark(String... marks); | |||
| public StudentQueryService allMarks(String... marks); | |||
| public StudentQueryService grade(String grade); | |||
| public StudentQueryService betweenAvgMark(float max,float min); | |||
| public StudentQueryService nameContains(String name); | |||
| } | |||
| @ -0,0 +1,75 @@ | |||
| package com.ims.studentManager.service; | |||
| 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.ims.studentManager.dao.StudentDao; | |||
| import com.ims.studentManger.Package.Student; | |||
| @Service | |||
| public class StudentQueryServiceImpl implements StudentQueryService { | |||
| @Autowired | |||
| private StudentDao dao; | |||
| private Predicate<Student> predicate; | |||
| @PostConstruct | |||
| public void init() { | |||
| predicate = null; | |||
| } | |||
| @Override | |||
| public Collection<Student> exec() { | |||
| // @formatter:off | |||
| return dao.findAll() | |||
| .stream() | |||
| .filter(predicate) | |||
| .collect(Collectors.toList()); | |||
| // @formatter:on | |||
| } | |||
| @Override | |||
| public StudentQueryService anyMark(String... marks) { | |||
| Predicate<Student> pAnyMark = (student -> Arrays.stream(marks).allMatch(student.getMarks()::contains)); | |||
| predicate = (predicate == null) ? pAnyMark : predicate.and(pAnyMark); | |||
| return this; | |||
| } | |||
| @Override | |||
| public StudentQueryService allMarks(String... marks) { | |||
| Predicate<Student> pAllMarks = (student -> Arrays.stream(marks).anyMatch(student.getMarks()::contains)); | |||
| predicate = (predicate == null) ? pAllMarks : predicate.and(pAllMarks); | |||
| return this; | |||
| } | |||
| @Override | |||
| public StudentQueryService grade(String grade) { | |||
| Predicate<Student> pGrade = (student -> student.getGrade().equalsIgnoreCase(grade)); | |||
| predicate = (predicate == null) ? pGrade : predicate.and(pGrade); | |||
| return this; | |||
| } | |||
| @Override | |||
| public StudentQueryService betweenAvgMark(float max, float min) { | |||
| // TODO Auto-generated method stub | |||
| return null; | |||
| } | |||
| @Override | |||
| public StudentQueryService nameContains(String name) { | |||
| Predicate<Student> pNameContains = (student -> student.getName().toLowerCase().contains(name.toLowerCase())); | |||
| predicate = (predicate == null) ? pNameContains : predicate.and(pNameContains); | |||
| return this; | |||
| } | |||
| } | |||
| @ -0,0 +1,65 @@ | |||
| package com.ims.studentManager.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.ims.studentManager.dao.StudentDao; | |||
| import com.ims.studentManger.Package.Student; | |||
| @Service | |||
| public class StudentService { | |||
| @Autowired | |||
| StudentDao studentDao; | |||
| @Autowired | |||
| StudentQueryService queryService; | |||
| public Collection<String> findAllMarks() { | |||
| List<String> result = null; | |||
| // @formatter:off | |||
| result = studentDao.findAll() | |||
| .stream() | |||
| .map(f -> f.getMarks()) | |||
| .flatMap(lista -> lista.stream()) | |||
| .distinct() | |||
| .sorted() | |||
| .collect(Collectors.toList()); | |||
| // @formatter:on | |||
| return result; | |||
| } | |||
| public Collection<Student> findByAnyMark(String... marks) { | |||
| return queryService.anyMark(marks).exec(); | |||
| } | |||
| public Collection<Student> findByAllMarks(String... marks) { | |||
| return queryService.allMarks(marks).exec(); | |||
| } | |||
| public Collection<Student> findByGrade(String grade) { | |||
| return queryService.grade(grade).exec(); | |||
| } | |||
| public Collection<Student> findBetweenYears(float max, float min) { | |||
| return queryService.betweenAvgMark(max, min).exec(); | |||
| } | |||
| public Collection<Student> findByNameContains(String title) { | |||
| return queryService.nameContains(title).exec(); | |||
| } | |||
| public Collection<Student> findAll() { | |||
| return studentDao.findAll(); | |||
| } | |||
| } | |||
| @ -0,0 +1,110 @@ | |||
| package com.ims.studentManger.Package; | |||
| import java.util.List; | |||
| /** | |||
| * | |||
| * La clase modelo que articula el programa. Permite | |||
| * manejar la información mínima sobre una película. | |||
| * Si hubíeramos utilizado Spring Data y una base de datos, | |||
| * seguramente estaría anotada con @Entity | |||
| * | |||
| * | |||
| * @author OpenWebinars | |||
| * | |||
| */ | |||
| public class Student { | |||
| private long id; | |||
| private String name; | |||
| private String grade; | |||
| private List<String> marks; | |||
| public Student(long id, String name, String grade, List<String> marks) { | |||
| this.id = id; | |||
| this.name = name; | |||
| this.marks = marks; | |||
| this.grade = grade; | |||
| } | |||
| 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 List<String> getMarks() { | |||
| return marks; | |||
| } | |||
| public void setMarks(List<String> marks) { | |||
| this.marks = marks; | |||
| } | |||
| public String getGrade() { | |||
| return grade; | |||
| } | |||
| public void setGrade(String grade) { | |||
| this.grade = grade; | |||
| } | |||
| @Override | |||
| public int hashCode() { | |||
| final int prime = 31; | |||
| int result = 1; | |||
| result = prime * result + ((grade == null) ? 0 : grade.hashCode()); | |||
| result = prime * result + (int) (id ^ (id >>> 32)); | |||
| result = prime * result + ((marks == null) ? 0 : marks.hashCode()); | |||
| result = prime * result + ((name == null) ? 0 : name.hashCode()); | |||
| return result; | |||
| } | |||
| @Override | |||
| public boolean equals(Object obj) { | |||
| if (this == obj) | |||
| return true; | |||
| if (obj == null) | |||
| return false; | |||
| if (getClass() != obj.getClass()) | |||
| return false; | |||
| Student other = (Student) obj; | |||
| if (grade == null) { | |||
| if (other.grade != null) | |||
| return false; | |||
| } else if (!grade.equals(other.grade)) | |||
| return false; | |||
| if (id != other.id) | |||
| return false; | |||
| if (marks == null) { | |||
| if (other.marks != null) | |||
| return false; | |||
| } else if (!marks.equals(other.marks)) | |||
| return false; | |||
| if (name == null) { | |||
| if (other.name != null) | |||
| return false; | |||
| } else if (!name.equals(other.name)) | |||
| return false; | |||
| return true; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "Student [id=" + id + ", name=" + name + ", marks=" + marks + ", grade=" + grade + "]"; | |||
| } | |||
| } | |||
| @ -0,0 +1,51 @@ | |||
| Sintaxis: java -jar movieadvisor.jar [OPCIONES] | |||
| -lg | |||
| Lista los diferentes géneros de películas de la colección. | |||
| No se pueden utilizar más parámetros. | |||
| -ag genero1,genero2,genero... | |||
| Lista aquellas películas que pertenecen a al menos uno de los géneros | |||
| que se indican. El listado de géneros no puede incluir espacios. | |||
| -tg genero1,genero2,genero... | |||
| Lista aquellas películas que pertenecen a todos y cada uno de los | |||
| géneros que se indican. El listado de géneros no puede incluir espacios. | |||
| -y año | |||
| Lista aquellas películas que se estrenaron en el año indicado. | |||
| El año debe expresarse con 4 cifras. | |||
| -b desde,hasta | |||
| Lista aquellas películas que se estrenaron entre los años DESDE y HASTA. | |||
| Los años indicados están incluidos. Deben expresarse con 4 cifras. | |||
| -t titulo | |||
| Lista aquellas películas cuyo título contiene la cadena proporcionada. | |||
| Se ignorará el uso de mayúsculas/minúsculas en la comparación. | |||
| -h | |||
| Muestra este mensaje de ayuda. | |||
| EJEMPLOS DE USO | |||
| java -jar movieadvisor.jar -y 2018 -ag Action,Comedy | |||
| Muestra las películas estrenadas de 2018 de acción y/o de comedia. | |||
| java -jar movieadvisor.jar -t heart | |||
| Muestra las películas cuyo título contiene la palabra heart. | |||
| java -jar movieadvisor.jar -td Action,Sci-Fi -b 1990,2010 -t star | |||
| Muestra las películas cuyo título contiene la palabra star, pertenecen al | |||
| género de acción y ciencia ficción y fueron estrenadas entre 1990 y 2010. | |||
| java -jar movieadvisor.jar -lg | |||
| Muestra un listado con todos los géneros. | |||
| LICENCIAS | |||
| Los datos utilizados sobre películas utilizados en este ejemplo son | |||
| reales y están sacados del sitio web www.imdb.com. Ten en cuenta | |||
| que solo puede ser usada con fines personales y no comerciales. | |||
| @ -0,0 +1,16 @@ | |||
| id;name;grade;marks | |||
| 1;Juan;1ºDAM;5,3,4,6,5 | |||
| 2;Pepe;2ºDAM;6,5,7,5,6 | |||
| 3;Alberto;1ºDAM;7,8,5,4,9 | |||
| 4;Ivan;2ºDAM;3,6,5,4,2 | |||
| 5;Anna;SMX;,8,5,7,6,9 | |||
| 6;Eva;1ºDAM;5,5,5,4,5 | |||
| 7;Toñi;SMX;4,9,7,9,6 | |||
| 8;Vicente;2ºDAM;6,5,7,5,6 | |||
| 9;Jesus;SMX;4,3,5,7,6 | |||
| 10;Daniel;1ºDAM;1,2,7,6,4 | |||
| 11;Sandra;SMX;4,5,5,4,6 | |||
| 12;Alejandro;SMX;7,9,4,5,3 | |||
| 13;Martina;1ºDAM;5,1,9,7,6 | |||
| 14;Rocio;1ºDAM;5,6,4,8,9 | |||
| 15;Godofredo;2ºDAM;9,9,9,9,9 | |||
| @ -0,0 +1,3 @@ | |||
| file.path=classpath:bbdd.csv | |||
| file.csv.separator=; | |||
| file.csv.list_separator=, | |||
| @ -0,0 +1,5 @@ | |||
| Manifest-Version: 1.0 | |||
| Built-By: Ivan | |||
| Build-Jdk: 17.0.4.1 | |||
| Created-By: Maven Integration for Eclipse | |||
| @ -0,0 +1,7 @@ | |||
| #Generated by Maven Integration for Eclipse | |||
| #Thu Nov 17 19:27:49 CET 2022 | |||
| m2e.projectLocation=C\:\\Users\\Ivan\\Documents\\workspace-spring-tool-suite-4-4.16.0.RELEASE\\MovieAdvisor | |||
| m2e.projectName=MovieAdvisor | |||
| groupId=com.ims | |||
| artifactId=MovieAdvisor | |||
| version=0.0.1-SNAPSHOT | |||
| @ -0,0 +1,21 @@ | |||
| <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>com.ims</groupId> | |||
| <artifactId>MovieAdvisor</artifactId> | |||
| <version>0.0.1-SNAPSHOT</version> | |||
| <name>MovieAdvisor</name> | |||
| <description>Gran recomendador de peliculas</description> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>org.springframework</groupId> | |||
| <artifactId>spring-context</artifactId> | |||
| <version>5.3.23</version> | |||
| </dependency> | |||
| <!--https://www.baeldung.com/spring-postconstruct-predestroy --> | |||
| <dependency> | |||
| <groupId>javax.annotation</groupId> | |||
| <artifactId>javax.annotation-api</artifactId> | |||
| <version>1.3.2</version> | |||
| </dependency> | |||
| </dependencies> | |||
| </project> | |||
| @ -0,0 +1,51 @@ | |||
| Sintaxis: java -jar movieadvisor.jar [OPCIONES] | |||
| -lg | |||
| Lista los diferentes géneros de películas de la colección. | |||
| No se pueden utilizar más parámetros. | |||
| -ag genero1,genero2,genero... | |||
| Lista aquellas películas que pertenecen a al menos uno de los géneros | |||
| que se indican. El listado de géneros no puede incluir espacios. | |||
| -tg genero1,genero2,genero... | |||
| Lista aquellas películas que pertenecen a todos y cada uno de los | |||
| géneros que se indican. El listado de géneros no puede incluir espacios. | |||
| -y año | |||
| Lista aquellas películas que se estrenaron en el año indicado. | |||
| El año debe expresarse con 4 cifras. | |||
| -b desde,hasta | |||
| Lista aquellas películas que se estrenaron entre los años DESDE y HASTA. | |||
| Los años indicados están incluidos. Deben expresarse con 4 cifras. | |||
| -t titulo | |||
| Lista aquellas películas cuyo título contiene la cadena proporcionada. | |||
| Se ignorará el uso de mayúsculas/minúsculas en la comparación. | |||
| -h | |||
| Muestra este mensaje de ayuda. | |||
| EJEMPLOS DE USO | |||
| java -jar movieadvisor.jar -y 2018 -ag Action,Comedy | |||
| Muestra las películas estrenadas de 2018 de acción y/o de comedia. | |||
| java -jar movieadvisor.jar -t heart | |||
| Muestra las películas cuyo título contiene la palabra heart. | |||
| java -jar movieadvisor.jar -td Action,Sci-Fi -b 1990,2010 -t star | |||
| Muestra las películas cuyo título contiene la palabra star, pertenecen al | |||
| género de acción y ciencia ficción y fueron estrenadas entre 1990 y 2010. | |||
| java -jar movieadvisor.jar -lg | |||
| Muestra un listado con todos los géneros. | |||
| LICENCIAS | |||
| Los datos utilizados sobre películas utilizados en este ejemplo son | |||
| reales y están sacados del sitio web www.imdb.com. Ten en cuenta | |||
| que solo puede ser usada con fines personales y no comerciales. | |||
| @ -0,0 +1,16 @@ | |||
| id;name;grade;marks | |||
| 1;Juan;1ºDAM;5,3,4,6,5 | |||
| 2;Pepe;2ºDAM;6,5,7,5,6 | |||
| 3;Alberto;1ºDAM;7,8,5,4,9 | |||
| 4;Ivan;2ºDAM;3,6,5,4,2 | |||
| 5;Anna;SMX;,8,5,7,6,9 | |||
| 6;Eva;1ºDAM;5,5,5,4,5 | |||
| 7;Toñi;SMX;4,9,7,9,6 | |||
| 8;Vicente;2ºDAM;6,5,7,5,6 | |||
| 9;Jesus;SMX;4,3,5,7,6 | |||
| 10;Daniel;1ºDAM;1,2,7,6,4 | |||
| 11;Sandra;SMX;4,5,5,4,6 | |||
| 12;Alejandro;SMX;7,9,4,5,3 | |||
| 13;Martina;1ºDAM;5,1,9,7,6 | |||
| 14;Rocio;1ºDAM;5,6,4,8,9 | |||
| 15;Godofredo;2ºDAM;9,9,9,9,9 | |||
| @ -0,0 +1,3 @@ | |||
| file.path=classpath:bbdd.csv | |||
| file.csv.separator=; | |||
| file.csv.list_separator=, | |||