Commit inicial
This commit is contained in:
parent
5fc6bf3198
commit
f52ff6ecd5
17
.classpath
17
.classpath
@ -36,5 +36,22 @@
|
|||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</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"/>
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|||||||
13
.project
13
.project
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<projectDescription>
|
<projectDescription>
|
||||||
<name>aadd_concesionario</name>
|
<name>eedd_ra3_ejemplo2</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
||||||
@ -20,4 +20,15 @@
|
|||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
|
<filteredResources>
|
||||||
|
<filter>
|
||||||
|
<id>1772465433562</id>
|
||||||
|
<name></name>
|
||||||
|
<type>30</type>
|
||||||
|
<matcher>
|
||||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
||||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
||||||
|
</matcher>
|
||||||
|
</filter>
|
||||||
|
</filteredResources>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
|||||||
2
.settings/org.eclipse.jdt.apt.core.prefs
Normal file
2
.settings/org.eclipse.jdt.apt.core.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.apt.aptEnabled=false
|
||||||
@ -4,5 +4,6 @@ org.eclipse.jdt.core.compiler.compliance=1.8
|
|||||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.processAnnotations=disabled
|
||||||
org.eclipse.jdt.core.compiler.release=disabled
|
org.eclipse.jdt.core.compiler.release=disabled
|
||||||
org.eclipse.jdt.core.compiler.source=1.8
|
org.eclipse.jdt.core.compiler.source=1.8
|
||||||
|
|||||||
@ -2,13 +2,10 @@ package org.lapaloma.concesionario;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.hibernate.Session;
|
import org.lapaloma.concesionario.dao.ICocheDAO;
|
||||||
import org.lapaloma.concesionario.conectores.GestorEntityManagerJPA;
|
import org.lapaloma.concesionario.dao.impl.CocheDaoArray;
|
||||||
import org.lapaloma.concesionario.conectores.GestorSesionesHibernate;
|
|
||||||
import org.lapaloma.concesionario.vo.Coche;
|
import org.lapaloma.concesionario.vo.Coche;
|
||||||
|
|
||||||
import jakarta.persistence.EntityManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* AppConcesionario: Clase que realiza el tratamiento de los coches de un
|
* AppConcesionario: Clase que realiza el tratamiento de los coches de un
|
||||||
@ -22,59 +19,93 @@ import jakarta.persistence.EntityManager;
|
|||||||
|
|
||||||
public class AppConcesionario {
|
public class AppConcesionario {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
private ICocheDAO iCocheDAO;
|
||||||
AppConcesionario app = new AppConcesionario();
|
|
||||||
try {
|
|
||||||
app.realizarMigracionMySQLAObjectDB();
|
|
||||||
|
|
||||||
app.realizarMigracionMySQLAPostgreSQLConJPA();
|
public static void main(String[] args) {
|
||||||
} catch (Exception e) {
|
AppConcesionario app = new AppConcesionario();
|
||||||
e.printStackTrace();
|
app.inicializar();
|
||||||
}
|
app.consultarCoches();
|
||||||
}
|
app.consultarPorId(3);
|
||||||
|
app.altaCoche();
|
||||||
|
app.actualizarCoche();
|
||||||
|
app.borrarCoche(2);
|
||||||
|
app.consultarCoches();
|
||||||
|
}
|
||||||
|
|
||||||
private void realizarMigracionMySQLAObjectDB() throws Exception {
|
private void inicializar() {
|
||||||
// Obtener los coches de MySQL para guardarlos en ObjectDB
|
iCocheDAO = new CocheDaoArray();
|
||||||
Session sesionH = GestorSesionesHibernate.getSession();
|
}
|
||||||
List<Coche> listaCoches = sesionH.createQuery("FROM Coche", Coche.class).getResultList();
|
|
||||||
for (Coche coche : listaCoches) {
|
|
||||||
System.out.println(coche);
|
|
||||||
|
|
||||||
EntityManager em = GestorEntityManagerJPA.getEntityManager();
|
private void consultarCoches() {
|
||||||
Coche cocheODB = em.find(Coche.class, coche.getIdentificador());
|
try {
|
||||||
// Si el coche no existe en ObjectDB, lo persisto; si existe, lo actualizo
|
List<Coche> listaCoches = iCocheDAO.obtenerListaCoches();
|
||||||
if (cocheODB == null) {
|
|
||||||
em.getTransaction().begin();
|
|
||||||
em.persist(coche);
|
|
||||||
em.getTransaction().commit();
|
|
||||||
} else {
|
|
||||||
em.getTransaction().begin();
|
|
||||||
em.merge(coche);
|
|
||||||
em.getTransaction().commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void realizarMigracionMySQLAPostgreSQLConJPA() {
|
System.out.println("#########################################");
|
||||||
// Obtener los coches de MySQL para guardarlos en PostreSQL
|
System.out.println("LISTADO DE COCHES");
|
||||||
EntityManager emMySQL = GestorEntityManagerJPA.getEntityManagerMySQL();
|
System.out.println("#########################################");
|
||||||
List<Coche> listaCoches = emMySQL.createQuery("FROM Coche", Coche.class).getResultList();
|
|
||||||
for (Coche coche : listaCoches) {
|
|
||||||
System.out.println(coche);
|
|
||||||
|
|
||||||
EntityManager emPostgreSQL = GestorEntityManagerJPA.getEntityManagerMySQL();
|
for (Coche coche : listaCoches) {
|
||||||
Coche cochePostgreSQL = emPostgreSQL.find(Coche.class, coche.getIdentificador());
|
System.out.println(coche);
|
||||||
// Si el coche no existe en ObjectDB, lo persisto; si existe, lo actualizo
|
}
|
||||||
if (cochePostgreSQL == null) {
|
|
||||||
emPostgreSQL.getTransaction().begin();
|
} catch (Exception e) {
|
||||||
emPostgreSQL.persist(coche);
|
e.printStackTrace();
|
||||||
emPostgreSQL.getTransaction().commit();
|
}
|
||||||
} else {
|
}
|
||||||
emPostgreSQL.getTransaction().begin();
|
|
||||||
emPostgreSQL.merge(coche);
|
private void consultarPorId(int id) {
|
||||||
emPostgreSQL.getTransaction().commit();
|
System.out.println("#########################################");
|
||||||
}
|
System.out.println("CONSULTA POR ID: " + id);
|
||||||
}
|
System.out.println("#########################################");
|
||||||
|
|
||||||
|
Coche coche = iCocheDAO.obtenerCochePorID(id);
|
||||||
|
|
||||||
|
if (coche != null) {
|
||||||
|
System.out.println(coche);
|
||||||
|
} else {
|
||||||
|
System.out.println("No existe coche con id " + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void altaCoche() {
|
||||||
|
System.out.println("#########################################");
|
||||||
|
System.out.println("ALTA DE COCHE");
|
||||||
|
System.out.println("#########################################");
|
||||||
|
|
||||||
|
Coche nuevo = new Coche(8, "Toyota", "Corolla", 1.8);
|
||||||
|
iCocheDAO.crearCoche(nuevo);
|
||||||
|
|
||||||
|
System.out.println("Coche creado: " + nuevo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void actualizarCoche() {
|
||||||
|
System.out.println("#########################################");
|
||||||
|
System.out.println("ACTUALIZAR COCHE");
|
||||||
|
System.out.println("#########################################");
|
||||||
|
|
||||||
|
Coche cocheActualizado = new Coche(1, "Renault", "Megane RS", 2.0);
|
||||||
|
Coche resultado = iCocheDAO.actualizarCoche(cocheActualizado);
|
||||||
|
|
||||||
|
if (resultado != null) {
|
||||||
|
System.out.println("Coche actualizado: " + resultado);
|
||||||
|
} else {
|
||||||
|
System.out.println("No se encontró el coche para actualizar");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void borrarCoche(int id) {
|
||||||
|
System.out.println("#########################################");
|
||||||
|
System.out.println("BORRAR COCHE ID: " + id);
|
||||||
|
System.out.println("#########################################");
|
||||||
|
|
||||||
|
Coche coche = iCocheDAO.obtenerCochePorID(id);
|
||||||
|
|
||||||
|
if (coche != null) {
|
||||||
|
iCocheDAO.borrarCoche(coche);
|
||||||
|
System.out.println("Coche borrado correctamente");
|
||||||
|
} else {
|
||||||
|
System.out.println("No existe coche con id " + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,52 +0,0 @@
|
|||||||
package org.lapaloma.concesionario.conectores;
|
|
||||||
|
|
||||||
import jakarta.persistence.EntityManager;
|
|
||||||
import jakarta.persistence.EntityManagerFactory;
|
|
||||||
import jakarta.persistence.Persistence;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* GestorEntityManagerJPA: Clase que realiza la gestión de EntityManagers de JPA.
|
|
||||||
*
|
|
||||||
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
|
|
||||||
* @date 4 dic 2025
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class GestorEntityManagerJPA {
|
|
||||||
private static EntityManagerFactory entityManagerFactory = null;
|
|
||||||
private static EntityManagerFactory entityManagerFactoryMySQL = null;
|
|
||||||
private static EntityManagerFactory entityManagerFactoryPostgreSQKL = null;
|
|
||||||
|
|
||||||
private GestorEntityManagerJPA() { // Constructor privado para evitar instanciación
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carga la configuración desde META-INF/persistence.xml
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
entityManagerFactory = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_ODB");
|
|
||||||
entityManagerFactoryMySQL = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_MYSQL");
|
|
||||||
entityManagerFactoryPostgreSQKL = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_POSTGRESQL");
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
System.err.println("Error en EntityManagerFactory: " + ex);
|
|
||||||
throw new ExceptionInInitializerError(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EntityManager getEntityManager() {
|
|
||||||
return entityManagerFactory.createEntityManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EntityManager getEntityManagerMySQL() {
|
|
||||||
return entityManagerFactoryMySQL.createEntityManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EntityManager getEntityManagerPostgreSQL() {
|
|
||||||
return entityManagerFactoryPostgreSQKL.createEntityManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void closeEntityManagerFactory() {
|
|
||||||
entityManagerFactory.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
package org.lapaloma.concesionario.conectores;
|
|
||||||
|
|
||||||
import org.hibernate.Session;
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
import org.hibernate.cfg.Configuration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* GestorSesionesHibernate: Clase que realiza la gestión de sesiones Hibernate.
|
|
||||||
*
|
|
||||||
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
|
|
||||||
* @date 4 dic 2025
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class GestorSesionesHibernate {
|
|
||||||
private static SessionFactory sessionFactory = null;
|
|
||||||
|
|
||||||
private GestorSesionesHibernate() { // Constructor privado para evitar instanciación
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carga la configuración desde hibernate.cfg.xml
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
sessionFactory = new Configuration().configure().buildSessionFactory();
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
System.err.println("Error en SessionFactory: " + ex);
|
|
||||||
throw new ExceptionInInitializerError(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Session getSession() {
|
|
||||||
return sessionFactory.openSession();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Session getCurrentSession() {
|
|
||||||
return sessionFactory.getCurrentSession();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void closeFactoria() {
|
|
||||||
if (sessionFactory != null) {
|
|
||||||
sessionFactory.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
14
src/main/java/org/lapaloma/concesionario/dao/ICocheDAO.java
Normal file
14
src/main/java/org/lapaloma/concesionario/dao/ICocheDAO.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package org.lapaloma.concesionario.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.lapaloma.concesionario.vo.Coche;
|
||||||
|
|
||||||
|
public interface ICocheDAO {
|
||||||
|
public Coche obtenerCochePorID(int identificador) ;
|
||||||
|
public Coche actualizarCoche(Coche coche) ;
|
||||||
|
public Coche crearCoche(Coche coche);
|
||||||
|
public void borrarCoche(Coche coche);
|
||||||
|
public List<Coche> obtenerListaCoches();
|
||||||
|
public List<Coche> obtenerCochePorModelo(String modelo);
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
package org.lapaloma.concesionario.dao.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.lapaloma.concesionario.dao.ICocheDAO;
|
||||||
|
import org.lapaloma.concesionario.vo.Coche;
|
||||||
|
|
||||||
|
public class CocheDaoArray implements ICocheDAO {
|
||||||
|
|
||||||
|
private List<Coche> listaCoches;
|
||||||
|
|
||||||
|
public CocheDaoArray() {
|
||||||
|
listaCoches = new ArrayList<>();
|
||||||
|
|
||||||
|
// Simulamos los inserts de la base de datos
|
||||||
|
listaCoches.add(new Coche(1, "Renault", "Megane", 1.5));
|
||||||
|
listaCoches.add(new Coche(2, "Seat", "León", 1.6));
|
||||||
|
listaCoches.add(new Coche(3, "Suzuki", "Vitara", 1.9));
|
||||||
|
listaCoches.add(new Coche(4, "Seat", "Clio", 1.4));
|
||||||
|
listaCoches.add(new Coche(5, "Seat", "Ibiza", 1.4));
|
||||||
|
listaCoches.add(new Coche(6, "Peugeot", "308", 2.0));
|
||||||
|
listaCoches.add(new Coche(7, "Renault", "Megane", 1.5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Coche obtenerCochePorID(int identificador) {
|
||||||
|
Coche coche = null;
|
||||||
|
for (Coche cocheLista : listaCoches) {
|
||||||
|
if (cocheLista.getIdentificador() == identificador) {
|
||||||
|
coche = cocheLista;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return coche;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Coche actualizarCoche(Coche coche) {
|
||||||
|
Coche cocheActualizado = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < listaCoches.size(); i++) {
|
||||||
|
if (listaCoches.get(i).getIdentificador() == coche.getIdentificador()) {
|
||||||
|
listaCoches.set(i, coche);
|
||||||
|
cocheActualizado = coche;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cocheActualizado; // no encontrado
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Coche crearCoche(Coche coche) {
|
||||||
|
// Opcional: comprobar que no exista el ID
|
||||||
|
listaCoches.add(coche);
|
||||||
|
return coche;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void borrarCoche(Coche coche) {
|
||||||
|
listaCoches.removeIf(c -> c.getIdentificador() == coche.getIdentificador());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Coche> obtenerListaCoches() {
|
||||||
|
return new ArrayList<>(listaCoches); // devolvemos copia
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Coche> obtenerCochePorModelo(String modelo) {
|
||||||
|
return listaCoches.stream().filter(c -> c.getModelo().equalsIgnoreCase(modelo)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,9 +1,5 @@
|
|||||||
package org.lapaloma.concesionario.vo;
|
package org.lapaloma.concesionario.vo;
|
||||||
|
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Coche: Clase de persistencia que representa un coche de un concesionario.
|
* Coche: Clase de persistencia que representa un coche de un concesionario.
|
||||||
@ -13,52 +9,47 @@ import jakarta.persistence.Table;
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Entity
|
|
||||||
@Table(name = "T_COCHE")
|
|
||||||
public class Coche {
|
public class Coche {
|
||||||
@Id
|
|
||||||
private int identificador;
|
private int identificador;
|
||||||
|
|
||||||
private String marca;
|
private String marca;
|
||||||
private String modelo;
|
private String modelo;
|
||||||
private double cilindrada;
|
private double cilindrada;
|
||||||
|
public Coche(int identificador, String marca, String modelo, double cilindrada) {
|
||||||
|
super();
|
||||||
|
this.identificador = identificador;
|
||||||
|
this.marca = marca;
|
||||||
|
this.modelo = modelo;
|
||||||
|
this.cilindrada = cilindrada;
|
||||||
|
}
|
||||||
public int getIdentificador() {
|
public int getIdentificador() {
|
||||||
return identificador;
|
return identificador;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIdentificador(int identificador) {
|
public void setIdentificador(int identificador) {
|
||||||
this.identificador = identificador;
|
this.identificador = identificador;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMarca() {
|
public String getMarca() {
|
||||||
return marca;
|
return marca;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMarca(String marca) {
|
public void setMarca(String marca) {
|
||||||
this.marca = marca;
|
this.marca = marca;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getModelo() {
|
public String getModelo() {
|
||||||
return modelo;
|
return modelo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setModelo(String modelo) {
|
public void setModelo(String modelo) {
|
||||||
this.modelo = modelo;
|
this.modelo = modelo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getCilindrada() {
|
public double getCilindrada() {
|
||||||
return cilindrada;
|
return cilindrada;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCilindrada(double cilindrada) {
|
public void setCilindrada(double cilindrada) {
|
||||||
this.cilindrada = cilindrada;
|
this.cilindrada = cilindrada;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Coche [identificador=" + identificador + ", marca=" + marca + ", modelo=" + modelo + ", cilindrada="
|
return "Coche [identificador=" + identificador + ", marca=" + marca + ", modelo=" + modelo + ", cilindrada="
|
||||||
+ cilindrada + "]";
|
+ cilindrada + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user