Advertisement
Guest User

datos

a guest
Feb 25th, 2020
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.21 KB | None | 0 0
  1. /**
  2. Proyecto: Juego de la vida.
  3. * Implementa el almacén de datos.
  4. * @since: prototipo 0.1.1
  5. * @source: Datos.java
  6. * @version: 0.1.2 - 2020/01/07
  7. * @author: TIP
  8. */
  9.  
  10. package accesoDatos;
  11.  
  12. import java.util.ArrayList;
  13. import java.util.HashMap;
  14.  
  15. import modelo.ClaveAcceso;
  16. import modelo.Correo;
  17. import modelo.DireccionPostal;
  18. import modelo.Identificable;
  19. import modelo.Nif;
  20. import modelo.Sesion;
  21. import modelo.Simulacion;
  22. import modelo.Usuario;
  23. import modelo.Usuario.RolUsuario;
  24. import util.Fecha;
  25.  
  26.  
  27. public class Datos {
  28.  
  29. private static Datos almacen = new Datos();
  30. private ArrayList <Identificable> datosUsuarios;
  31. private ArrayList <Identificable> datosSesiones;
  32. private ArrayList<Identificable> datosSimulaciones;
  33. private HashMap <String, String> equivalenciasId;
  34.  
  35. public Datos() {
  36. datosUsuarios = new ArrayList <Identificable> ();
  37. datosSesiones = new ArrayList <Identificable> ();
  38. datosSimulaciones = new ArrayList <Identificable> ();
  39. equivalenciasId = new HashMap<String, String>();
  40. this.iniciarAlmacen();
  41. }
  42.  
  43. private void iniciarAlmacen() {
  44. cargarUsuariosIntegrados();
  45. cargarSimulacionDemo();
  46. }
  47.  
  48. public static Datos getAlmacen() {
  49. return almacen;
  50. }
  51.  
  52. private int IndexSort(ArrayList <Identificable> datos, String id) {
  53. int inicio = 0;
  54. int fin = datos.size() - 1;
  55. while (inicio <= fin) {
  56. int medio = (inicio+fin) / 2;
  57. int comparacion = datos.get(medio).getId().compareTo(id);
  58.  
  59. if (comparacion == 0) {
  60. return medio+1;
  61. }
  62. if (comparacion < 0) {
  63. inicio = medio+1;
  64. }
  65. else {
  66. fin = medio-1;
  67. }
  68. }
  69. return -(fin+2); // Indices base 1
  70. }
  71.  
  72.  
  73. //USUARIOS
  74. ///////////
  75.  
  76. public Usuario obtenerUsuario(String id) {
  77. int index = IndexSort(datosUsuarios, equivalenciasId.get(id));
  78. if (index < 0) {
  79. return null;
  80. }
  81. return (Usuario) datosUsuarios.get(index-1);
  82. }
  83.  
  84. public Usuario getUsuario(int indice) {
  85. return (Usuario) datosUsuarios.get(indice);
  86. }
  87.  
  88. public void altaUsuario(Usuario usr) {
  89. int index = IndexSort(datosUsuarios, usr.getId());
  90. if (index < 0) {
  91. // index es en base 1
  92. datosUsuarios.add(-index-1, usr);
  93. altaEquiId(usr);
  94. }
  95. else {
  96. // El id de usuario está en uso.
  97. }
  98. }
  99.  
  100. private void altaEquiId (Usuario usr) {
  101.  
  102. equivalenciasId.put(usr.getId(), usr.getId());
  103. equivalenciasId.put(usr.getNif().getTexto(), usr.getId());
  104. equivalenciasId.put(usr.getCorreo().getTexto(), usr.getId());
  105. }
  106.  
  107. public Usuario bajaUsuario(String id) {
  108. int index = IndexSort(datosUsuarios, id);
  109. if (index > 0) {
  110. Usuario usr = (Usuario) datosUsuarios.get(-index-1);
  111. // index es en base 1
  112. datosUsuarios.remove(index-1);
  113. bajaEquiId(usr);
  114. return usr;
  115. }
  116. return null;
  117. }
  118.  
  119. private void bajaEquiId(Usuario usr) {
  120.  
  121. equivalenciasId.remove(usr.getId());
  122. equivalenciasId.remove(usr.getNif().getTexto());
  123. equivalenciasId.remove(usr.getCorreo().getTexto());
  124. }
  125.  
  126. public Usuario modificarUsuario(Usuario usr) {
  127. int index = IndexSort(datosUsuarios, usr.getId());
  128. if (index > 0) {
  129. Usuario aux = (Usuario) datosUsuarios.get(-index-1);
  130. // index es en base 1
  131. datosUsuarios.set(index-1, usr);
  132. bajaEquiId(aux);
  133. altaEquiId(usr);
  134. return aux;
  135. }
  136. return null;
  137. }
  138.  
  139. /**
  140. * Muestra por consola todos los usuarios almacenados.
  141. */
  142. public void mostrarTodosUsuarios() {
  143. for (Identificable u: datosUsuarios) {
  144. System.out.println("\n" + u);
  145. }
  146. }
  147.  
  148. private void cargarUsuariosIntegrados() {
  149.  
  150. Usuario invitado = new Usuario();
  151. altaUsuario(invitado);
  152.  
  153. Usuario admin = new Usuario(new Nif("00000001R"),
  154. "Admin",
  155. "Admin Admin",
  156. new DireccionPostal(),
  157. new Correo("admin@correo.es"),
  158. new Fecha().addYears(-16),
  159. new Fecha(),
  160. new ClaveAcceso("Miau#0"),
  161. Usuario.RolUsuario.ADMIN
  162. );
  163.  
  164. altaUsuario(admin);
  165. }
  166.  
  167. public int getUsuariosRegistrados() {
  168. return datosUsuarios.size();
  169. }
  170.  
  171. //SESIONES
  172. ///////////
  173.  
  174. /**
  175. * Busca indice de sesion dado su identificador.
  176. * @param id - el identificador de la sesión a buscar.
  177. * @return - la Sesion encontrada o null si no existe.
  178. */
  179. private int indexSort(ArrayList <Identificable> datos, String id) {
  180. int inicio = 0;
  181. int fin = datos.size() - 1;
  182. while (inicio <= fin) {
  183. int medio = (inicio+fin) / 2;
  184. int comparacion = datos.get(medio).getId().compareTo(id);
  185.  
  186. if (comparacion == 0) {
  187. return medio+1;
  188. }
  189. if (comparacion < 0) {
  190. inicio = medio+1;
  191. }
  192. else {
  193. fin = medio-1;
  194. }
  195. }
  196. return -(fin+2); // Indices base 1
  197. }
  198.  
  199. /**
  200. * Registro de la sesión de usuario.
  201. */
  202. public void altaSesion(Sesion sesion) {
  203. int index = indexSort(datosSesiones, sesion.getId());
  204. if(index < 0) {
  205. datosSesiones.add(sesion);
  206. }
  207. else {
  208. // el id de sesion está en uso
  209. }
  210. }
  211.  
  212. public Sesion bajaSesion(String id) {
  213. int index = IndexSort(datosUsuarios, id);
  214. if (index > 0) {
  215. Sesion sesion = (Sesion) datosSesiones.get(-index-1);
  216. // index es en base 1
  217. datosSesiones.remove(index-1);
  218.  
  219. return sesion;
  220. }
  221. return null;
  222. }
  223.  
  224. public Sesion modificarSesion(Sesion sesion) {
  225. int index = IndexSort(datosSesiones, sesion.getId());
  226. if (index > 0) {
  227. Sesion aux = (Sesion) datosSesiones.get(-index-1);
  228. // index es en base 1
  229. datosSesiones.set(index-1, sesion);
  230.  
  231. return aux;
  232. }
  233. return null;
  234. }
  235.  
  236. public int getSesionesRegistradas() {
  237. return datosSesiones.size();
  238. }
  239.  
  240. //SIMULACIONES
  241. //////////////
  242.  
  243. /**
  244. * Busca Simulacion dado su identificador.
  245. * @param id - el identificador de la simulación a buscar.
  246. * @return - la Simulacion encontrada o null si no existe.
  247. */
  248. public Simulacion buscarSimulacion(String id) {
  249. if (id.equals("Demo")) {
  250. return (Simulacion) datosSimulaciones.get(0);
  251. }
  252. for (Identificable simulacion : datosSimulaciones) {
  253. if (simulacion != null && simulacion.getId().equalsIgnoreCase(id)) {
  254. return (Simulacion) simulacion;
  255. }
  256. }
  257. return null; // No encuentra.
  258. }
  259.  
  260. /**
  261. * Registro de la simulación.
  262. */
  263. public void altaSimulacion(Simulacion simulacion) {
  264. int index = indexSort(datosSimulaciones, simulacion.getId());
  265. if(index < 0) {
  266. datosSimulaciones.add(simulacion);
  267. }
  268. else {
  269. // el id de sesion está en uso
  270. }
  271. }
  272.  
  273. public Simulacion bajaSimulacion(String id) {
  274. int index = IndexSort(datosSimulaciones, id);
  275. if (index > 0) {
  276. Simulacion simulacion = (Simulacion) datosSimulaciones.get(-index-1);
  277. // index es en base 1
  278. datosSimulaciones.remove(index-1);
  279.  
  280. return simulacion;
  281. }
  282. return null;
  283. }
  284.  
  285. public Simulacion modificarSimulacion(Simulacion simulacion) {
  286. int index = IndexSort(datosSimulaciones, simulacion.getId());
  287. if (index > 0) {
  288. Simulacion aux = (Simulacion) datosSimulaciones.get(-index-1);
  289. // index es en base 1
  290. datosSimulaciones.set(index-1, simulacion);
  291.  
  292. return aux;
  293. }
  294. return null;
  295. }
  296.  
  297. public int getSimulacionesRegistradas() {
  298. return datosSimulaciones.size();
  299. }
  300.  
  301. private void cargarSimulacionDemo() {
  302. Simulacion demo = new Simulacion();
  303. demo.setEspacioMundo(cargarMundoDemo());
  304. altaSimulacion(demo);
  305. }
  306.  
  307. /**
  308. * Carga datos demo en la matriz que representa el mundo.
  309. */
  310. private byte[][] cargarMundoDemo() {
  311. // En este array los 0 indican celdas con células muertas y los 1 vivas.
  312. byte[][] espacioMundo = new byte[][] {
  313. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  314. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  315. { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  316. { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  317. { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, //
  318. { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  319. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  320. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  321. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, //
  322. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }, //
  323. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, //
  324. { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 1x Planeador
  325. { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 1x Flip-Flop
  326. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 1x Still Life
  327. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  328. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  329. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, //
  330. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } //
  331. };
  332. return espacioMundo;
  333. }
  334.  
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement