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