Inicio
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
31
pom.xml
Normal file
31
pom.xml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>modelo</groupId>
|
||||||
|
<artifactId>tarea04.1</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org/neodatis -->
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sf.xmldb-org</groupId>
|
||||||
|
<artifactId>xmldb-api</artifactId>
|
||||||
|
<version>1.7.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.exist-db/exist-core -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.exist-db</groupId>
|
||||||
|
<artifactId>exist-core</artifactId>
|
||||||
|
<version>6.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
60
src/main/java/modelo/Departamento.java
Normal file
60
src/main/java/modelo/Departamento.java
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
package modelo;
|
||||||
|
// Generated 21:11:36, 10 de xan. de 2023 by Hibernate Tools 5.6.14.Final
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dept generated by hbm2java
|
||||||
|
*/
|
||||||
|
public class Departamento implements java.io.Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private Integer deptno;
|
||||||
|
private String dname;
|
||||||
|
private String loc;
|
||||||
|
|
||||||
|
|
||||||
|
public Departamento() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Departamento(String dname, String loc) {
|
||||||
|
this.dname = dname;
|
||||||
|
this.loc = loc;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDeptno() {
|
||||||
|
return this.deptno;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeptno(Integer deptno) {
|
||||||
|
this.deptno = deptno;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDname() {
|
||||||
|
return this.dname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDname(String dname) {
|
||||||
|
this.dname = dname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLoc() {
|
||||||
|
return this.loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoc(String loc) {
|
||||||
|
this.loc = loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Departamento [deptno=" + ( (deptno!=null)? deptno : " ") + ", dname=" + dname + ", loc=" + loc + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
26
src/main/java/modelo/dao/AbstractGenericDao.java
Normal file
26
src/main/java/modelo/dao/AbstractGenericDao.java
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
package modelo.dao;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author maria
|
||||||
|
*/
|
||||||
|
public abstract class AbstractGenericDao<E> implements IGenericDao<E>{
|
||||||
|
|
||||||
|
// getClass(): accedemos a la clase de la instancia que extienda esta clase (será DepartamentoSQLServerDao u XSQLServerDao)
|
||||||
|
//.getGenericSuperclass(): obtenemos el tipo de la clase madre directa: AbstractGenericDao En el caso de que sea una clase parametrizada (con Generics),devuelve el tipo del parámetro de tipo E: ParameterizedType: https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getGenericSuperclass--
|
||||||
|
//.getActualTypeArguments(): devuelve un array de los tipos de los argumentos que se le pasan al tipo parametrizado (podrían ser más de uno, aunque en este caso el tipo es uno solo <E>)
|
||||||
|
//finalmente obtenemos el nombre del tipo parametrizado: <E> que será Departamento (o empleado cuando se implemente)
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final String entityClass =
|
||||||
|
((Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]).getName();
|
||||||
|
|
||||||
|
public String getEntityClass() {
|
||||||
|
return entityClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
58
src/main/java/modelo/dao/IGenericDao.java
Normal file
58
src/main/java/modelo/dao/IGenericDao.java
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
package modelo.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import modelo.exceptions.InstanceNotFoundException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author maria
|
||||||
|
* @param <E>
|
||||||
|
*/
|
||||||
|
public interface IGenericDao<E> {
|
||||||
|
//Usamos un tipo genérico para indicar que la interfaz IGenericDao tendrá un parámetro de cualquier tipo (clases del modelo), salvo tipos primitivos
|
||||||
|
//https://docs.oracle.com/javase/tutorial/java/generics/types.html
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Guarda una entidad en el sistema de persistencia
|
||||||
|
* @param entity
|
||||||
|
* @return el oid o -1 si hubo algún error
|
||||||
|
*/
|
||||||
|
public boolean create(E entity);
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Busca en el sistema de persistencia una entidad por su clave primaria
|
||||||
|
* @param id
|
||||||
|
* @return la entidad si la encuentra
|
||||||
|
* @throws InstanceNotFoundException si no encuentra la entidad
|
||||||
|
*/
|
||||||
|
public E read(long id) throws InstanceNotFoundException;
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Actualiza los datos de una entidad
|
||||||
|
* @param entity entidad con los nuevos datos
|
||||||
|
* @return true si se ha actualizado correctamente, false en caso contrario.
|
||||||
|
*/
|
||||||
|
public boolean update(E entity);
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Elimina una entidad del sistema de persistencia
|
||||||
|
* @param id clave primaria para encontrar la entidad
|
||||||
|
* @return true si se ha eliminado correctamente, false en caso contrario.
|
||||||
|
*/
|
||||||
|
public boolean delete(E entity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtienen todos los objetos de una clase almacenados en el sistema de persistencia
|
||||||
|
* @return la lista de los objetos
|
||||||
|
*/
|
||||||
|
public List<E> findAll();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
256
src/main/java/modelo/dao/departamento/DepartamentoEXistDao.java
Normal file
256
src/main/java/modelo/dao/departamento/DepartamentoEXistDao.java
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
|
||||||
|
package modelo.dao.departamento;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import javax.xml.transform.OutputKeys;
|
||||||
|
import javax.xml.transform.Transformer;
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
|
import javax.xml.transform.TransformerFactory;
|
||||||
|
import javax.xml.transform.dom.DOMSource;
|
||||||
|
import javax.xml.transform.stream.StreamResult;
|
||||||
|
|
||||||
|
import org.exist.xmldb.EXistResource;
|
||||||
|
import org.w3c.dom.DOMImplementation;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xmldb.api.DatabaseManager;
|
||||||
|
import org.xmldb.api.base.Collection;
|
||||||
|
import org.xmldb.api.base.CompiledExpression;
|
||||||
|
import org.xmldb.api.base.Database;
|
||||||
|
import org.xmldb.api.base.Resource;
|
||||||
|
import org.xmldb.api.base.ResourceIterator;
|
||||||
|
import org.xmldb.api.base.ResourceSet;
|
||||||
|
import org.xmldb.api.base.XMLDBException;
|
||||||
|
import org.xmldb.api.modules.XQueryService;
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import modelo.dao.AbstractGenericDao;
|
||||||
|
import modelo.exceptions.InstanceNotFoundException;
|
||||||
|
import util.ConnectionManager;
|
||||||
|
import util.MyDataSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3
|
||||||
|
*
|
||||||
|
* @author mfernandez
|
||||||
|
*/
|
||||||
|
public class DepartamentoEXistDao extends AbstractGenericDao<Departamento> implements IDepartamentoDao {
|
||||||
|
|
||||||
|
private static final String DEPT_ROW_TAG = "DEP_ROW";
|
||||||
|
private static final String DEPT_NO_TAG = "DEPT_NO";
|
||||||
|
private static final String DNOMBRE_TAG = "DNOMBRE";
|
||||||
|
private static final String LOC_TAG = "LOC";
|
||||||
|
private MyDataSource dataSource;
|
||||||
|
|
||||||
|
public DepartamentoEXistDao() {
|
||||||
|
this.dataSource = ConnectionManager.getDataSource("src/main/resources/db.properties");
|
||||||
|
Class cl;
|
||||||
|
try {
|
||||||
|
cl = Class.forName(dataSource.getDriver());
|
||||||
|
|
||||||
|
Database database = (Database) cl.getDeclaredConstructor().newInstance();
|
||||||
|
database.setProperty("create-database", "true");
|
||||||
|
|
||||||
|
DatabaseManager.registerDatabase(database);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean create(Departamento entity) {
|
||||||
|
boolean exito = false;
|
||||||
|
|
||||||
|
String deptNodeString = toXMLString(entity);
|
||||||
|
|
||||||
|
if (deptNodeString != "") {
|
||||||
|
|
||||||
|
try (Collection col = DatabaseManager.getCollection(dataSource.getUrl() + dataSource.getColeccion(),
|
||||||
|
dataSource.getUser(), dataSource.getPwd())) {
|
||||||
|
|
||||||
|
XQueryService xqs = (XQueryService) col.getService("XQueryService", "1.0");
|
||||||
|
xqs.setProperty("indent", "yes");
|
||||||
|
|
||||||
|
CompiledExpression compiled = xqs
|
||||||
|
.compile("update insert " + deptNodeString + "into doc(\"departamentos.xml\")//departamentos");
|
||||||
|
xqs.execute(compiled);
|
||||||
|
|
||||||
|
exito = true;
|
||||||
|
|
||||||
|
} catch (XMLDBException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return exito;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Departamento read(long id) throws InstanceNotFoundException {
|
||||||
|
Departamento departamento = null;
|
||||||
|
|
||||||
|
try (Collection col = DatabaseManager.getCollection(dataSource.getUrl() + dataSource.getColeccion(),
|
||||||
|
dataSource.getUser(), dataSource.getPwd())) {
|
||||||
|
|
||||||
|
XQueryService xqs = (XQueryService) col.getService("XQueryService", "1.0");
|
||||||
|
xqs.setProperty("indent", "yes");
|
||||||
|
|
||||||
|
CompiledExpression compiled = xqs.compile("//DEP_ROW[DEPT_NO=" + id + "]");
|
||||||
|
ResourceSet result = xqs.execute(compiled);
|
||||||
|
|
||||||
|
if (result.getSize() == 0)
|
||||||
|
throw new InstanceNotFoundException(id, Departamento.class.getName());
|
||||||
|
|
||||||
|
ResourceIterator i = result.getIterator();
|
||||||
|
Resource res = null;
|
||||||
|
while (i.hasMoreResources()) {
|
||||||
|
try {
|
||||||
|
res = i.nextResource();
|
||||||
|
|
||||||
|
// System.out.println(res.getContent().toString());
|
||||||
|
|
||||||
|
departamento = stringNodeToDepartamento(res.getContent().toString());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
// dont forget to cleanup resources
|
||||||
|
try {
|
||||||
|
((EXistResource) res).freeResources();
|
||||||
|
} catch (XMLDBException xe) {
|
||||||
|
departamento = null;
|
||||||
|
xe.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (XMLDBException e) {
|
||||||
|
departamento = null;
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return departamento;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toma un objeto Departamento y devuelve un nodo XML como el del documento
|
||||||
|
* departamentos.xml de src/main/resources <DEP_ROW>
|
||||||
|
* <DEPT_NO>10</DEPT_NO>
|
||||||
|
* <DNOMBRE>CONTABILIDAD</DNOMBRE>
|
||||||
|
* <LOC>SEVILLA</LOC>
|
||||||
|
* </DEP_ROW>en formato String
|
||||||
|
*
|
||||||
|
* @param dept
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String toXMLString(Departamento dept) {
|
||||||
|
String output = "";
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder builder;
|
||||||
|
try {
|
||||||
|
builder = factory.newDocumentBuilder();
|
||||||
|
|
||||||
|
DOMImplementation implementation = builder.getDOMImplementation();
|
||||||
|
|
||||||
|
// Crea un document con un elmento raiz
|
||||||
|
Document document = implementation.createDocument(null, DEPT_ROW_TAG, null);
|
||||||
|
// Obtenemos el elemento raíz
|
||||||
|
Element root = document.getDocumentElement();
|
||||||
|
Element deptNo = createElement(document, DEPT_NO_TAG, String.valueOf(dept.getDeptno()));
|
||||||
|
|
||||||
|
Element name = createElement(document, DNOMBRE_TAG, dept.getDname().trim());
|
||||||
|
Element loc = createElement(document, LOC_TAG, dept.getLoc().trim());
|
||||||
|
|
||||||
|
root.appendChild(deptNo);
|
||||||
|
root.appendChild(name);
|
||||||
|
root.appendChild(loc);
|
||||||
|
|
||||||
|
TransformerFactory tf = TransformerFactory.newInstance();
|
||||||
|
Transformer transformer = tf.newTransformer();
|
||||||
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
||||||
|
|
||||||
|
// https://docs.oracle.com/javase/8/docs/api/java/io/StringWriter.html
|
||||||
|
StringWriter writer = new StringWriter();
|
||||||
|
transformer.transform(new DOMSource(document), new StreamResult(writer));
|
||||||
|
output = writer.getBuffer().toString().replaceAll("\n|\r", "");
|
||||||
|
|
||||||
|
// System.out.println(output);
|
||||||
|
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
output = "";
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (TransformerException e) {
|
||||||
|
output = "";
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Element createElement(Document document, String tag, String content) {
|
||||||
|
Element elemento = document.createElement(tag);
|
||||||
|
elemento.setTextContent(content);
|
||||||
|
return elemento;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Departamento stringNodeToDepartamento(String nodeString) {
|
||||||
|
Element node = null;
|
||||||
|
Departamento departamento = null;
|
||||||
|
try {
|
||||||
|
node = DocumentBuilderFactory.newInstance().newDocumentBuilder()
|
||||||
|
.parse(new ByteArrayInputStream(nodeString.getBytes())).getDocumentElement();
|
||||||
|
|
||||||
|
String nombre = getElementText(node, DNOMBRE_TAG);
|
||||||
|
String location = getElementText(node, LOC_TAG);
|
||||||
|
Integer id = Integer.parseInt(getElementText(node, DEPT_NO_TAG));
|
||||||
|
|
||||||
|
departamento = new Departamento(nombre, location);
|
||||||
|
departamento.setDeptno(id);
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return departamento;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getElementText(Element parent, String tag) {
|
||||||
|
String texto = "";
|
||||||
|
NodeList lista = parent.getElementsByTagName(tag);
|
||||||
|
|
||||||
|
if (lista.getLength() > 0) {
|
||||||
|
texto = lista.item(0).getTextContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return texto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean update(Departamento entity) {
|
||||||
|
throw new UnsupportedOperationException("Este método update debe ser implementado");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean delete(Departamento entity) {
|
||||||
|
throw new UnsupportedOperationException("Este método delete debe ser implementado");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Departamento> findAll() {
|
||||||
|
throw new UnsupportedOperationException("Este método findAll debe ser implementado");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
23
src/main/java/modelo/dao/departamento/IDepartamentoDao.java
Normal file
23
src/main/java/modelo/dao/departamento/IDepartamentoDao.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||||
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
|
||||||
|
*/
|
||||||
|
package modelo.dao.departamento;
|
||||||
|
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import modelo.dao.IGenericDao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mfernandez
|
||||||
|
*/
|
||||||
|
public interface IDepartamentoDao extends IGenericDao<Departamento>{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package modelo.exceptions;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class DuplicateInstanceException extends Exception {
|
||||||
|
private Object key;
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
public DuplicateInstanceException(String specificMessage, Object key,
|
||||||
|
String className) {
|
||||||
|
|
||||||
|
super(specificMessage + " (key = '" + key + "' - className = '" +
|
||||||
|
className + "')");
|
||||||
|
this.key = key;
|
||||||
|
this.className = className;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClassName() {
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||||
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||||
|
*/
|
||||||
|
package modelo.exceptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author maria
|
||||||
|
*/
|
||||||
|
public class InstanceNotFoundException extends Exception {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private Object key;
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
private static final String DEFAULT_MSG = "Instance not found";
|
||||||
|
|
||||||
|
public InstanceNotFoundException( Object key,
|
||||||
|
String className) {
|
||||||
|
|
||||||
|
super(DEFAULT_MSG + " (key = '" + key + "' - className = '"
|
||||||
|
+ className + "')");
|
||||||
|
this.key = key;
|
||||||
|
this.className = className;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClassName() {
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
}
|
||||||
180
src/main/java/modelo/main/CreateNewDeptDialog.java
Normal file
180
src/main/java/modelo/main/CreateNewDeptDialog.java
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
package modelo.main;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.Window;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
public class CreateNewDeptDialog extends JDialog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private final JPanel contentPanel = new JPanel();
|
||||||
|
private JTextField textFieldUbicacion;
|
||||||
|
private JTextField textFieldNombreDept;
|
||||||
|
private JButton okButton;
|
||||||
|
private JLabel lblError;
|
||||||
|
private Departamento departamentoACrearOActualizar = null;
|
||||||
|
|
||||||
|
private JLabel lblId;
|
||||||
|
|
||||||
|
public Departamento getResult() {
|
||||||
|
return this.departamentoACrearOActualizar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum TIPO_EDICION {
|
||||||
|
EDITAR, CREAR
|
||||||
|
};
|
||||||
|
|
||||||
|
private TIPO_EDICION tipo = TIPO_EDICION.CREAR;
|
||||||
|
private JTextField textFieldDeptno;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the dialog.
|
||||||
|
*/
|
||||||
|
public void initComponents() {
|
||||||
|
|
||||||
|
setBounds(100, 100, 598, 300);
|
||||||
|
getContentPane().setLayout(new BorderLayout());
|
||||||
|
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||||
|
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
||||||
|
contentPanel.setLayout(null);
|
||||||
|
|
||||||
|
JLabel lblDeptName = new JLabel("Nombre departamento");
|
||||||
|
lblDeptName.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
lblDeptName.setBounds(39, 34, 208, 24);
|
||||||
|
contentPanel.add(lblDeptName);
|
||||||
|
|
||||||
|
textFieldUbicacion = new JTextField();
|
||||||
|
textFieldUbicacion.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
textFieldUbicacion.setBounds(330, 83, 197, 23);
|
||||||
|
contentPanel.add(textFieldUbicacion);
|
||||||
|
textFieldUbicacion.setColumns(10);
|
||||||
|
|
||||||
|
JLabel lblDeptLocation = new JLabel("Ubicación");
|
||||||
|
lblDeptLocation.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
lblDeptLocation.setBounds(39, 82, 140, 24);
|
||||||
|
contentPanel.add(lblDeptLocation);
|
||||||
|
|
||||||
|
textFieldNombreDept = new JTextField();
|
||||||
|
textFieldNombreDept.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
textFieldNombreDept.setColumns(10);
|
||||||
|
textFieldNombreDept.setBounds(330, 35, 197, 23);
|
||||||
|
contentPanel.add(textFieldNombreDept);
|
||||||
|
|
||||||
|
lblId= new JLabel("Dept. no");
|
||||||
|
lblId.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
lblId.setBounds(39, 135, 140, 24);
|
||||||
|
contentPanel.add(lblId);
|
||||||
|
|
||||||
|
textFieldDeptno = new JTextField();
|
||||||
|
textFieldDeptno.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
textFieldDeptno.setColumns(10);
|
||||||
|
textFieldDeptno.setBounds(330, 136, 197, 23);
|
||||||
|
contentPanel.add(textFieldDeptno);
|
||||||
|
|
||||||
|
lblError = new JLabel("Error label");
|
||||||
|
lblError.setForeground(new Color(255, 0, 0));
|
||||||
|
lblError.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
lblError.setBounds(52, 187, 294, 24);
|
||||||
|
lblError.setVisible(false);
|
||||||
|
contentPanel.add(lblError);
|
||||||
|
|
||||||
|
JPanel buttonPane = new JPanel();
|
||||||
|
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
|
||||||
|
getContentPane().add(buttonPane, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
okButton = new JButton("Guardar");
|
||||||
|
|
||||||
|
okButton.setActionCommand("OK");
|
||||||
|
buttonPane.add(okButton);
|
||||||
|
getRootPane().setDefaultButton(okButton);
|
||||||
|
|
||||||
|
JButton cancelButton = new JButton("Cancel");
|
||||||
|
cancelButton.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
departamentoACrearOActualizar = null;
|
||||||
|
CreateNewDeptDialog.this.dispose();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
cancelButton.setActionCommand("Cancel");
|
||||||
|
buttonPane.add(cancelButton);
|
||||||
|
|
||||||
|
ActionListener crearBtnActionListener = new ActionListener() {
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (!(textFieldUbicacion.getText().trim().equals(""))
|
||||||
|
&& !(textFieldNombreDept.getText().trim().equals(""))) {
|
||||||
|
if (departamentoACrearOActualizar == null) {
|
||||||
|
// Solo para creación
|
||||||
|
departamentoACrearOActualizar = new Departamento();
|
||||||
|
}
|
||||||
|
departamentoACrearOActualizar.setDname(textFieldNombreDept.getText().trim());
|
||||||
|
departamentoACrearOActualizar.setLoc(textFieldUbicacion.getText().trim());
|
||||||
|
int deptno = getDeptnoFromTextField();
|
||||||
|
if (deptno != -1) {
|
||||||
|
departamentoACrearOActualizar.setDeptno(deptno);
|
||||||
|
CreateNewDeptDialog.this.dispose();
|
||||||
|
} else {
|
||||||
|
lblError.setText("Introduzca un entero en número de departamento");
|
||||||
|
lblError.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.okButton.addActionListener(crearBtnActionListener);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public CreateNewDeptDialog(Window owner, String title, ModalityType modalityType, Departamento dept,
|
||||||
|
TIPO_EDICION tipo) {
|
||||||
|
super(owner, title, modalityType);
|
||||||
|
initComponents();
|
||||||
|
departamentoACrearOActualizar = dept;
|
||||||
|
this.tipo = tipo;
|
||||||
|
if (departamentoACrearOActualizar != null) {
|
||||||
|
textFieldNombreDept.setText(departamentoACrearOActualizar.getDname());
|
||||||
|
textFieldUbicacion.setText(departamentoACrearOActualizar.getLoc());
|
||||||
|
textFieldDeptno.setText(String.valueOf(departamentoACrearOActualizar.getDeptno()));
|
||||||
|
|
||||||
|
// No permitir cambio de deptno en edición
|
||||||
|
textFieldDeptno.setVisible(tipo != TIPO_EDICION.EDITAR);
|
||||||
|
lblId.setVisible(tipo !=TIPO_EDICION.EDITAR);
|
||||||
|
|
||||||
|
}
|
||||||
|
lblError.setVisible(false);
|
||||||
|
this.setLocationRelativeTo(owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TIPO_EDICION getTipo() {
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getDeptnoFromTextField() {
|
||||||
|
int deptno = -1;
|
||||||
|
String textIntroducido = textFieldDeptno.getText().trim();
|
||||||
|
try {
|
||||||
|
deptno = Integer.parseInt(textIntroducido);
|
||||||
|
} catch (Exception nfe) {
|
||||||
|
deptno = -1;
|
||||||
|
}
|
||||||
|
return deptno;
|
||||||
|
}
|
||||||
|
}
|
||||||
278
src/main/java/modelo/main/DeptWindow.java
Normal file
278
src/main/java/modelo/main/DeptWindow.java
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
package modelo.main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Dialog;
|
||||||
|
import java.awt.EventQueue;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.DefaultListModel;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JList;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.ListSelectionModel;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
import javax.swing.border.EmptyBorder;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import modelo.exceptions.DuplicateInstanceException;
|
||||||
|
import modelo.main.CreateNewDeptDialog.TIPO_EDICION;
|
||||||
|
import modelo.servicio.departamento.IServicioDepartamento;
|
||||||
|
import modelo.servicio.departamento.ServicioDepartamento;
|
||||||
|
|
||||||
|
public class DeptWindow extends JFrame {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private JPanel contentPane;
|
||||||
|
|
||||||
|
private JTextArea mensajes_text_Area;
|
||||||
|
private JList<Departamento> JListAllDepts;
|
||||||
|
|
||||||
|
private IServicioDepartamento departamentoServicio;
|
||||||
|
private CreateNewDeptDialog createDialog;
|
||||||
|
private JButton btnModificarDepartamento;
|
||||||
|
private JButton btnEliminarDepartamento;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launch the application.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
EventQueue.invokeLater(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
DeptWindow frame = new DeptWindow();
|
||||||
|
frame.setVisible(true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the frame.
|
||||||
|
*/
|
||||||
|
public DeptWindow() {
|
||||||
|
|
||||||
|
departamentoServicio = new ServicioDepartamento();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
setBounds(100, 100, 847, 772);
|
||||||
|
contentPane = new JPanel();
|
||||||
|
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||||
|
|
||||||
|
setContentPane(contentPane);
|
||||||
|
contentPane.setLayout(null);
|
||||||
|
|
||||||
|
JPanel panel = new JPanel();
|
||||||
|
panel.setBounds(8, 8, 821, 500);
|
||||||
|
contentPane.add(panel);
|
||||||
|
panel.setLayout(null);
|
||||||
|
|
||||||
|
JScrollPane scrollPane = new JScrollPane();
|
||||||
|
scrollPane.setBounds(19, 264, 669, 228);
|
||||||
|
panel.add(scrollPane);
|
||||||
|
|
||||||
|
mensajes_text_Area = new JTextArea();
|
||||||
|
scrollPane.setViewportView(mensajes_text_Area);
|
||||||
|
mensajes_text_Area.setEditable(false);
|
||||||
|
mensajes_text_Area.setText("Panel de mensajes");
|
||||||
|
mensajes_text_Area.setForeground(new Color(255, 0, 0));
|
||||||
|
mensajes_text_Area.setFont(new Font("Monospaced", Font.PLAIN, 13));
|
||||||
|
|
||||||
|
JButton btnShowAllDepts = new JButton("Mostrar departamentos");
|
||||||
|
|
||||||
|
btnShowAllDepts.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
btnShowAllDepts.setBounds(50, 37, 208, 36);
|
||||||
|
panel.add(btnShowAllDepts);
|
||||||
|
|
||||||
|
btnModificarDepartamento = new JButton("Modificar departamento");
|
||||||
|
|
||||||
|
JListAllDepts = new JList<Departamento>();
|
||||||
|
|
||||||
|
JListAllDepts.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
|
JListAllDepts.setBounds(403, 37, 377, 200);
|
||||||
|
|
||||||
|
JScrollPane scrollPanel_in_JlistAllDepts = new JScrollPane(JListAllDepts);
|
||||||
|
scrollPanel_in_JlistAllDepts.setLocation(300, 0);
|
||||||
|
scrollPanel_in_JlistAllDepts.setSize(500, 250);
|
||||||
|
|
||||||
|
panel.add(scrollPanel_in_JlistAllDepts);
|
||||||
|
|
||||||
|
JButton btnCrearNuevoDepartamento = new JButton("Crear nuevo departamento");
|
||||||
|
|
||||||
|
btnCrearNuevoDepartamento.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
btnCrearNuevoDepartamento.setBounds(50, 85, 208, 36);
|
||||||
|
panel.add(btnCrearNuevoDepartamento);
|
||||||
|
|
||||||
|
btnModificarDepartamento.setEnabled(false);
|
||||||
|
btnModificarDepartamento.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
btnModificarDepartamento.setBounds(50, 139, 208, 36);
|
||||||
|
panel.add(btnModificarDepartamento);
|
||||||
|
|
||||||
|
btnEliminarDepartamento = new JButton("Eliminar departamento");
|
||||||
|
|
||||||
|
btnEliminarDepartamento.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
||||||
|
btnEliminarDepartamento.setEnabled(false);
|
||||||
|
btnEliminarDepartamento.setBounds(50, 201, 208, 36);
|
||||||
|
panel.add(btnEliminarDepartamento);
|
||||||
|
|
||||||
|
// Eventos
|
||||||
|
ActionListener showAllDepartamentosActionListener = new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
getAllDepartamentos();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
btnShowAllDepts.addActionListener(showAllDepartamentosActionListener);
|
||||||
|
|
||||||
|
ActionListener crearListener = new ActionListener() {
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
|
||||||
|
JFrame owner = (JFrame) SwingUtilities.getRoot((Component) e.getSource());
|
||||||
|
createDialog = new CreateNewDeptDialog(owner, "Crear nuevo departamento",
|
||||||
|
Dialog.ModalityType.DOCUMENT_MODAL, null, TIPO_EDICION.CREAR);
|
||||||
|
showDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
btnCrearNuevoDepartamento.addActionListener(crearListener);
|
||||||
|
|
||||||
|
ActionListener modificarListener = new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int selectedIx = JListAllDepts.getSelectedIndex();
|
||||||
|
if (selectedIx > -1) {
|
||||||
|
Departamento departamento = (Departamento) JListAllDepts.getModel().getElementAt(selectedIx);
|
||||||
|
if (departamento != null) {
|
||||||
|
|
||||||
|
JFrame owner = (JFrame) SwingUtilities.getRoot((Component) e.getSource());
|
||||||
|
|
||||||
|
createDialog = new CreateNewDeptDialog(owner, "Modificar departamento",
|
||||||
|
Dialog.ModalityType.DOCUMENT_MODAL, departamento, TIPO_EDICION.EDITAR);
|
||||||
|
showDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
btnModificarDepartamento.addActionListener(modificarListener);
|
||||||
|
|
||||||
|
ListSelectionListener selectionListListener = new ListSelectionListener() {
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
if (e.getValueIsAdjusting() == false) {
|
||||||
|
int selectedIx = JListAllDepts.getSelectedIndex();
|
||||||
|
btnModificarDepartamento.setEnabled((selectedIx > -1));
|
||||||
|
btnEliminarDepartamento.setEnabled((selectedIx > -1));
|
||||||
|
if (selectedIx > -1) {
|
||||||
|
Departamento d = (Departamento) DeptWindow.this.JListAllDepts.getModel()
|
||||||
|
.getElementAt(selectedIx);
|
||||||
|
if (d != null) {
|
||||||
|
addMensaje(true, "Se ha seleccionado el d: " + d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
JListAllDepts.addListSelectionListener(selectionListListener);
|
||||||
|
|
||||||
|
ActionListener deleteListener = new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int selectedIx = JListAllDepts.getSelectedIndex();
|
||||||
|
if (selectedIx > -1) {
|
||||||
|
Departamento d = (Departamento) JListAllDepts.getModel().getElementAt(selectedIx);
|
||||||
|
if (d != null) {
|
||||||
|
try {
|
||||||
|
boolean exito = departamentoServicio.delete(d);
|
||||||
|
if (exito) {
|
||||||
|
addMensaje(true, "Se ha eliminado el dept con id: " + d.getDeptno());
|
||||||
|
getAllDepartamentos();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
addMensaje(true, "No se ha podido borrar el departamento. ");
|
||||||
|
System.out.println("Exception: " + ex.getMessage());
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
btnEliminarDepartamento.addActionListener(deleteListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addMensaje(boolean keepText, String msg) {
|
||||||
|
String oldText = "";
|
||||||
|
if (keepText) {
|
||||||
|
oldText = mensajes_text_Area.getText();
|
||||||
|
|
||||||
|
}
|
||||||
|
oldText = oldText + "\n" + msg;
|
||||||
|
mensajes_text_Area.setText(oldText);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showDialog() {
|
||||||
|
createDialog.setVisible(true);
|
||||||
|
Departamento departamentoACrear = createDialog.getResult();
|
||||||
|
if (departamentoACrear != null) {
|
||||||
|
|
||||||
|
if (createDialog.getTipo() == TIPO_EDICION.CREAR) {
|
||||||
|
try {
|
||||||
|
boolean exito = departamentoServicio.create(departamentoACrear);
|
||||||
|
if (!exito) {
|
||||||
|
addMensaje(true, "No se ha creado correctamete el departamento");
|
||||||
|
} else {
|
||||||
|
addMensaje(true, " El departamento se ha creado correctamente");
|
||||||
|
}
|
||||||
|
} catch (DuplicateInstanceException die) {
|
||||||
|
addMensaje(true, "Ya existe un departamento con ese id. No se ha podido crear.");
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
addMensaje(true, "Ha ocurrido un error y no se ha podido crear el departamento");
|
||||||
|
}
|
||||||
|
} else if (createDialog.getTipo() == TIPO_EDICION.EDITAR) {
|
||||||
|
try {
|
||||||
|
boolean exito = departamentoServicio.update(departamentoACrear);
|
||||||
|
if (!exito) {
|
||||||
|
addMensaje(true, "No se ha editado correctamete el departamento");
|
||||||
|
} else {
|
||||||
|
addMensaje(true, " El departamento se ha actualizado correctamente");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
addMensaje(true, "Ha ocurrido un error y no se ha podido crear/actualizar el departamento");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getAllDepartamentos();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getAllDepartamentos() {
|
||||||
|
List<Departamento> departamentos = departamentoServicio.findAll();
|
||||||
|
addMensaje(true, "Se han recuperado: " + departamentos.size() + " departamentos");
|
||||||
|
DefaultListModel<Departamento> defModel = new DefaultListModel<>();
|
||||||
|
for (Departamento departamento : departamentos) {
|
||||||
|
defModel.addElement(departamento);
|
||||||
|
}
|
||||||
|
|
||||||
|
// defModel.addAll(departamentos);
|
||||||
|
|
||||||
|
JListAllDepts.setModel(defModel);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package modelo.servicio.departamento;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import modelo.exceptions.DuplicateInstanceException;
|
||||||
|
import modelo.exceptions.InstanceNotFoundException;
|
||||||
|
|
||||||
|
public interface IServicioDepartamento {
|
||||||
|
|
||||||
|
public boolean create(Departamento dept)throws DuplicateInstanceException;
|
||||||
|
|
||||||
|
public boolean delete(Departamento dept);
|
||||||
|
public boolean update(Departamento dept);
|
||||||
|
|
||||||
|
public List<Departamento> findAll();
|
||||||
|
|
||||||
|
public Departamento read(long deptno) throws InstanceNotFoundException;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package modelo.servicio.departamento;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import modelo.Departamento;
|
||||||
|
import modelo.dao.departamento.DepartamentoEXistDao;
|
||||||
|
import modelo.dao.departamento.IDepartamentoDao;
|
||||||
|
import modelo.exceptions.DuplicateInstanceException;
|
||||||
|
import modelo.exceptions.InstanceNotFoundException;
|
||||||
|
|
||||||
|
public class ServicioDepartamento implements IServicioDepartamento {
|
||||||
|
|
||||||
|
private IDepartamentoDao departamentoDao;
|
||||||
|
|
||||||
|
public ServicioDepartamento() {
|
||||||
|
departamentoDao = new DepartamentoEXistDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean create(Departamento dept) throws DuplicateInstanceException {
|
||||||
|
|
||||||
|
return departamentoDao.create(dept);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean delete(Departamento dept) {
|
||||||
|
return departamentoDao.delete(dept);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean update(Departamento dept) {
|
||||||
|
return departamentoDao.update(dept);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Departamento> findAll() {
|
||||||
|
return departamentoDao.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Departamento read(long deptno) throws InstanceNotFoundException {
|
||||||
|
return departamentoDao.read(deptno);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
62
src/main/java/util/ConnectionManager.java
Normal file
62
src/main/java/util/ConnectionManager.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package util;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.xmldb.api.base.Database;
|
||||||
|
|
||||||
|
public class ConnectionManager {
|
||||||
|
|
||||||
|
private static final String URL_KEY = "url";
|
||||||
|
private static final String USER_KEY = "user";
|
||||||
|
private static final String PWD_KEY = "pwd";
|
||||||
|
private static final String DRIVER_KEY = "driver";
|
||||||
|
private static final String COL_DEPTS_KEY = "coleccionDepartamentos";
|
||||||
|
|
||||||
|
private static MyDataSource datasource = null;
|
||||||
|
|
||||||
|
|
||||||
|
private ConnectionManager() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MyDataSource getDataSource(String ruta) {
|
||||||
|
if (datasource == null) {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
try (FileInputStream fis = new FileInputStream(ruta)) {
|
||||||
|
properties.load(fis);
|
||||||
|
String url = properties.getProperty(URL_KEY);
|
||||||
|
String user = properties.getProperty(USER_KEY);
|
||||||
|
String pwd = properties.getProperty(PWD_KEY);
|
||||||
|
String driver = properties.getProperty(DRIVER_KEY);
|
||||||
|
String col_depts = properties.getProperty(COL_DEPTS_KEY);
|
||||||
|
|
||||||
|
datasource = new MyDataSource(user, pwd, url, driver);
|
||||||
|
|
||||||
|
datasource.setColeccion(col_depts);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
System.err.println("Ha ocurrido una excepción FileNotFound: " + e.getMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Ha ocurrido una excepción IOE: " + e.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Ha ocurrido una excepción: " + e.getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return datasource;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
71
src/main/java/util/MyDataSource.java
Normal file
71
src/main/java/util/MyDataSource.java
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
package util;
|
||||||
|
|
||||||
|
public class MyDataSource {
|
||||||
|
private String user = null;
|
||||||
|
private String pwd = null;
|
||||||
|
private String url = null;
|
||||||
|
private String driver = null;
|
||||||
|
private String coleccion = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public MyDataSource(String user, String pwd, String url, String driver) {
|
||||||
|
super();
|
||||||
|
this.user = user;
|
||||||
|
this.pwd = pwd;
|
||||||
|
this.url = url;
|
||||||
|
this.driver = driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setUser(String user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPwd() {
|
||||||
|
return pwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPwd(String pwd) {
|
||||||
|
this.pwd = pwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getDriver() {
|
||||||
|
return driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setDriver(String driver) {
|
||||||
|
this.driver = driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getColeccion() {
|
||||||
|
return coleccion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setColeccion(String col_depts) {
|
||||||
|
this.coleccion = col_depts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
6
src/main/resources/db.properties
Normal file
6
src/main/resources/db.properties
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
url=xmldb:exist://localhost:8080/exist/xmlrpc/db/apps/
|
||||||
|
#importante la barra final de url
|
||||||
|
user=
|
||||||
|
pwd=
|
||||||
|
driver=org.exist.xmldb.DatabaseImpl
|
||||||
|
coleccionDepartamentos=
|
||||||
24
src/main/resources/departamentos.xml
Normal file
24
src/main/resources/departamentos.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<departamentos>
|
||||||
|
<TITULO>DATOS DE LA TABLA DEPART</TITULO>
|
||||||
|
<DEP_ROW>
|
||||||
|
<DEPT_NO>10</DEPT_NO>
|
||||||
|
<DNOMBRE>CONTABILIDAD</DNOMBRE>
|
||||||
|
<LOC>SEVILLA</LOC>
|
||||||
|
</DEP_ROW>
|
||||||
|
<DEP_ROW>
|
||||||
|
<DEPT_NO>20</DEPT_NO>
|
||||||
|
<DNOMBRE>INVESTIGACION</DNOMBRE>
|
||||||
|
<LOC>MADRID</LOC>
|
||||||
|
</DEP_ROW>
|
||||||
|
<DEP_ROW>
|
||||||
|
<DEPT_NO>30</DEPT_NO>
|
||||||
|
<DNOMBRE>VENTAS</DNOMBRE>
|
||||||
|
<LOC>BARCELONA</LOC>
|
||||||
|
</DEP_ROW>
|
||||||
|
<DEP_ROW>
|
||||||
|
<DEPT_NO>40</DEPT_NO>
|
||||||
|
<DNOMBRE>PRODUCCION</DNOMBRE>
|
||||||
|
<LOC>BILBAO</LOC>
|
||||||
|
</DEP_ROW>
|
||||||
|
</departamentos>
|
||||||
Reference in New Issue
Block a user