Lots of cleanup and javadoc updates

This commit is contained in:
2017-07-04 23:34:45 -04:00
parent 72d95456ae
commit d65affbbc0
66 changed files with 2432 additions and 710 deletions

View File

@@ -13,7 +13,8 @@ import java.util.ArrayList;
class Automata {
private ArrayList<Estado> estados;
private ArrayList<Integer> estados_existentes;
private ArrayList<Integer> estadosExistentes;
Automata(Document document) {
setEstados(new ArrayList<>());
@@ -51,9 +52,11 @@ class Automata {
System.exit(1);
}
}
estados_existentes = new ArrayList<>();
for(int i=0 ; i < getEstados().size() ; i++){
if(getEstados().get(i) != null) estados_existentes.add(getEstados().get(i).getQ());
estadosExistentes = new ArrayList<>();
for (int i = 0; i < getEstados().size(); i++) {
if (getEstados().get(i) != null) {
getEstadosExistentes().add(getEstados().get(i).getQ());
}
}
}
@@ -65,11 +68,11 @@ class Automata {
this.estados = estados;
}
public ArrayList<Integer> getEstados_existentes() {
return estados_existentes;
ArrayList<Integer> getEstadosExistentes() {
return estadosExistentes;
}
public void setEstados_existentes(ArrayList<Integer> estados_existentes) {
this.estados_existentes = estados_existentes;
public void setEstadosExistentes(ArrayList<Integer> estadosExistentes) {
this.estadosExistentes = estadosExistentes;
}
}

View File

@@ -9,11 +9,8 @@ package cl.cromer.mt;
class Enlace {
private char si;
private char sj;
private char movimiento;
private Estado qj;
Enlace(char si, Estado qj, char sj, char move) {

View File

@@ -10,7 +10,6 @@ import java.util.ArrayList;
public class Estado {
private final int q;
private final ArrayList<Enlace> enlaces;
Estado(int q) {

View File

@@ -9,37 +9,72 @@ package cl.cromer.mt;
import java.util.ArrayList;
public class EstadosFinales {
private ArrayList<Integer> estadosExistents;
/**
* Esta clase es un objeto para pasar entre los stage.
*/
class EstadosFinales {
private ArrayList<Integer> estadosExistentes;
private ArrayList<Integer> estadosElegidos;
private Maquina maquina;
public EstadosFinales(Maquina maquina) {
/**
* Constructor de la clase que recibe una maquina de turning
*
* @param maquina La maquina de turning a pasar entre stages
*/
EstadosFinales(Maquina maquina) {
this.maquina = maquina;
this.estadosExistents = maquina.getMaquina().getEstados_existentes();
this.estadosExistentes = maquina.getMaquina().getEstadosExistentes();
}
public ArrayList<Integer> getEstadosExistents() {
return estadosExistents;
/**
* Devolver los estados que existen
*
* @return Los estados que existen
*/
ArrayList<Integer> getEstadosExistentes() {
return estadosExistentes;
}
public void setEstadosExistents(ArrayList<Integer> estadosExistents) {
this.estadosExistents = estadosExistents;
/**
* Cambiar los estados que existen
*
* @param estadosExistentes Los estados nuevos
*/
public void setEstadosExistentes(ArrayList<Integer> estadosExistentes) {
this.estadosExistentes = estadosExistentes;
}
public ArrayList<Integer> getEstadosElegidos() {
/**
* Devolver los estados elegidos por el usuario
* @return Los estados elegidos
*/
ArrayList<Integer> getEstadosElegidos() {
return estadosElegidos;
}
public void setEstadosElegidos(ArrayList<Integer> estadosElegidos) {
/**
* Cambiar los estados elegidos por el usuario
*
* @param estadosElegidos Los estados elegidods nuevos
*/
void setEstadosElegidos(ArrayList<Integer> estadosElegidos) {
this.estadosElegidos = estadosElegidos;
}
/**
* Devolver la maquina de turning para usar
* @return La maquina de turning
*/
public Maquina getMaquina() {
return maquina;
}
/**
* Cambiar la maquina de turning del objeto
* @param maquina La maquina
*/
public void setMaquina(Maquina maquina) {
this.maquina = maquina;
}

View File

@@ -25,11 +25,14 @@ public class EstadosFinalesController {
private EstadosFinales estadosFinales;
/**
* El metodo llamado cuando el usuario hace click en elegir
*/
@FXML
public void elegir() {
ArrayList<Integer> elegidos = new ArrayList<>();
for (int i = 0; i < estadosFinales.getEstadosExistents().size(); i++) {
CheckBox checkBox = (CheckBox) contenido.getScene().lookup("#q" + estadosFinales.getEstadosExistents().get(i));
for (int i = 0; i < estadosFinales.getEstadosExistentes().size(); i++) {
CheckBox checkBox = (CheckBox) contenido.getScene().lookup("#q" + estadosFinales.getEstadosExistentes().get(i));
if (checkBox.isSelected()) {
elegidos.add(i);
}
@@ -46,21 +49,21 @@ public class EstadosFinalesController {
}
/**
* Este metodo es para el evento de windowshown.
* Este metodo es para el evento de windowshown
*/
public void handleWindowShownEvent() {
void handleWindowShownEvent() {
Stage stage = (Stage) contenido.getScene().getWindow();
estadosFinales = (EstadosFinales) stage.getScene().getUserData();
for (int i = 0; i < estadosFinales.getEstadosExistents().size(); i++) {
for (int i = 0; i < estadosFinales.getEstadosExistentes().size(); i++) {
HBox hBox = new HBox();
hBox.setAlignment(Pos.CENTER);
hBox.prefWidthProperty().bind(contenido.prefWidthProperty());
hBox.prefHeightProperty().bind(contenido.prefHeightProperty());
hBox.prefWidthProperty().bind(contenido.widthProperty());
hBox.prefHeightProperty().bind(contenido.heightProperty());
CheckBox checkBox = new CheckBox("q" + estadosFinales.getEstadosExistents().get(i));
checkBox.setId("q" + estadosFinales.getEstadosExistents().get(i));
CheckBox checkBox = new CheckBox("q" + estadosFinales.getEstadosExistentes().get(i));
checkBox.setId("q" + estadosFinales.getEstadosExistentes().get(i));
hBox.getChildren().add(checkBox);
contenido.getChildren().add(hBox);
}

View File

@@ -38,7 +38,7 @@ class LeerXML {
return null;
}
Document dc = createDocument(archivo);
if(dc == null) {
if (dc == null) {
error = false;
return validarXML(archivo);
}

View File

@@ -20,30 +20,30 @@ import javafx.stage.Stage;
* Controlar las acciones de reconocimiento por lote
*/
public class LoteController extends VBox {
private final ObservableList<TablaData> tablaData = FXCollections.observableArrayList();
@FXML
private VBox vboxLote;
private VBox contenido;
@FXML
private TextField cadena;
private ObservableList<TablaData> tablaData = FXCollections.observableArrayList();
/**
* Boton de run MT
* @throws Exception La excepción
*/
@FXML
protected void runLote() throws Exception {
Scene scene = vboxLote.getScene();
Scene scene = contenido.getScene();
EstadosFinales estadosFinales = (EstadosFinales) scene.getUserData();
Maquina maquina = estadosFinales.getMaquina();
for (TablaData fila : tablaData) {
boolean exito = maquina.comprobarCadena(new StringBuilder(fila.getPrimer()), estadosFinales.getEstadosElegidos().stream().mapToInt(i -> i).toArray());
boolean exito = maquina.comprobarCadena(new StringBuilder(fila.getPrimera()), estadosFinales.getEstadosElegidos().stream().mapToInt(i -> i).toArray());
if (exito) {
fila.setSegundo("Aceptada");
fila.setSegunda("Aceptada");
}
else {
fila.setSegundo("Rechazada");
fila.setSegunda("Rechazada");
}
maquina.reset();
}
@@ -55,7 +55,7 @@ public class LoteController extends VBox {
@FXML
protected void agregarCadena() {
tablaData.add(new TablaData(cadena.getText(), ""));
Scene scene = vboxLote.getScene();
Scene scene = contenido.getScene();
@SuppressWarnings("unchecked")
TableView<TablaData> tableView = (TableView<TablaData>) scene.lookup("#tableView");
tableView.setEditable(true);
@@ -68,7 +68,7 @@ public class LoteController extends VBox {
*/
@FXML
protected void cerrar() {
Scene scene = vboxLote.getScene();
Scene scene = contenido.getScene();
Stage stage = (Stage) scene.getWindow();
stage.close();
}

View File

@@ -10,10 +10,13 @@ package cl.cromer.mt;
import org.w3c.dom.Document;
class Maquina {
private Automata maquina;
private Estado estadoactual;
private Enlace enlaceactual;
private String cintaanterior;
private final Automata maquina;
private Estado estadoActual;
private Enlace enlaceActual;
private String cintaAnterior;
private int cabezal;
Maquina(Document document) {
@@ -21,54 +24,80 @@ class Maquina {
reset();
}
Automata getMaquina() {return maquina;}
Automata getMaquina() {
return maquina;
}
public Estado getEstadoactual() {return estadoactual;}
private Estado getEstadoActual() {
return estadoActual;
}
public Enlace getEnlaceactual() {return enlaceactual;}
private void setEstadoActual(Estado estadoActual) {
this.estadoActual = estadoActual;
}
public String getCintaanterior() {return cintaanterior;}
private Enlace getEnlaceActual() {
return enlaceActual;
}
public int getCabezal() {return cabezal;}
private void setEnlaceActual(Enlace enlaceActual) {
this.enlaceActual = enlaceActual;
}
public void reset() {
estadoactual = maquina.getEstados().get(0);
enlaceactual = null;
cintaanterior = "";
cabezal = 0;
private String getCintaAnterior() {
return cintaAnterior;
}
private void setCintaAnterior(String cintaAnterior) {
this.cintaAnterior = cintaAnterior;
}
private int getCabezal() {
return cabezal;
}
private void setCabezal(int cabezal) {
this.cabezal = cabezal;
}
void reset() {
setEstadoActual(maquina.getEstados().get(0));
setEnlaceActual(null);
setCintaAnterior("");
setCabezal(0);
}
boolean comprobarCadena(StringBuilder cinta, int[] estadoFinal) {
//estadoactual = maquina.getEstados().get(0);
//estadoActual = maquina.getEstados().get(0);
int i;
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
enlaceactual = estadoactual.getEnlaces().get(i);
cinta.setCharAt(cabezal, enlaceactual.getSj());
switch (enlaceactual.getMovimiento()) {
for (i = 0; i < getEstadoActual().getEnlaces().size(); i++) {
if (getEstadoActual().getEnlaces().get(i).getSi() == cinta.charAt(getCabezal())) {
setEnlaceActual(getEstadoActual().getEnlaces().get(i));
cinta.setCharAt(getCabezal(), getEnlaceActual().getSj());
switch (getEnlaceActual().getMovimiento()) {
case 'L': {
cabezal--;
if (cabezal == (-1)) {
setCabezal(getCabezal() - 1);
if (getCabezal() == (-1)) {
cinta.insert(0, "#");
cabezal++;
setCabezal(getCabezal() + 1);
}
break;
}
case 'R': {
cabezal++;
if (cabezal == cinta.length()) {
cinta.insert(cabezal, "#");
setCabezal(getCabezal() + 1);
if (getCabezal() == cinta.length()) {
cinta.insert(getCabezal(), "#");
}
break;
}
default: {/*Se mantiene*/}
}
estadoactual = enlaceactual.getQj();
setEstadoActual(getEnlaceActual().getQj());
i = -1;
}
}
for(i=0;i<estadoFinal.length;i++){
if(estadoactual.getQ() == estadoFinal[i]){
for (i = 0; i < estadoFinal.length; i++) {
if (getEstadoActual().getQ() == estadoFinal[i]) {
reset();
return true;
}
@@ -78,26 +107,26 @@ class Maquina {
}
boolean comprobarCadenaS2S(StringBuilder cinta, int[] estadoFinal){
cintaanterior = cinta.toString();
setCintaAnterior(cinta.toString());
int i;
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
enlaceactual = estadoactual.getEnlaces().get(i);
estadoactual = enlaceactual.getQj();
cinta.setCharAt(cabezal, enlaceactual.getSj());
switch (enlaceactual.getMovimiento()) {
for (i = 0; i < getEstadoActual().getEnlaces().size(); i++) {
if (getEstadoActual().getEnlaces().get(i).getSi() == cinta.charAt(getCabezal())) {
setEnlaceActual(getEstadoActual().getEnlaces().get(i));
setEstadoActual(getEnlaceActual().getQj());
cinta.setCharAt(getCabezal(), getEnlaceActual().getSj());
switch (getEnlaceActual().getMovimiento()) {
case 'L': {
cabezal--;
if (cabezal == (-1)) {
setCabezal(getCabezal() - 1);
if (getCabezal() == (-1)) {
cinta.insert(0, "#");
cabezal++;
setCabezal(getCabezal() + 1);
}
break;
}
case 'R': {
cabezal++;
if (cabezal == cinta.length()) {
cinta.insert(cabezal, "#");
setCabezal(getCabezal() + 1);
if (getCabezal() == cinta.length()) {
cinta.insert(getCabezal(), "#");
}
break;
}
@@ -106,9 +135,9 @@ class Maquina {
return true;
}
}
for(i=0;i<estadoFinal.length;i++){
if(estadoactual.getQ() == estadoFinal[i]){
enlaceactual = null; // Indicar que no hay más transiciones
for (i = 0; i < estadoFinal.length; i++) {
if (getEstadoActual().getQ() == estadoFinal[i]) {
setEnlaceActual(null); // Indicar que no hay más transiciones
return true;
}
}

View File

@@ -36,9 +36,7 @@ import java.util.regex.Pattern;
* Controlar las acciones cuando una opción es elegido en el menu.
*/
public class MenuController {
protected EstadosFinales estadosFinales;
private Maquina maquina = null;
private EstadosFinales estadosFinales;
private TableView<TablaData> tableView;
@@ -68,7 +66,7 @@ public class MenuController {
LeerXML xml = new LeerXML();
Document documento = xml.leerArchivo(archivo);
if (documento != null) {
maquina = new Maquina(documento);
Maquina maquina = new Maquina(documento);
TableView temp = (TableView) scene.lookup("#tableView");
VBox contenido = (VBox) scene.lookup("#contenido");
if (temp != null) {
@@ -185,7 +183,7 @@ public class MenuController {
TableColumn<TablaData, String> columna1 = (TableColumn<TablaData, String>) tableView.getColumns().get(0);
columna1.setCellFactory(TextFieldTableCell.forTableColumn());
columna1.setOnEditCommit(
columna -> columna.getTableView().getItems().get(columna.getTablePosition().getRow()).setPrimer(columna.getNewValue())
columna -> columna.getTableView().getItems().get(columna.getTablePosition().getRow()).setPrimera(columna.getNewValue())
);
tableView.getColumns().get(0).setText("Cadena");
@@ -193,7 +191,7 @@ public class MenuController {
tableView.getColumns().get(1).setText("Aceptada/Rechazada");
tableView.getColumns().get(1).setEditable(false);
VBox contenido = (VBox) scene.lookup("#contenidoLote");
VBox contenido = (VBox) scene.lookup("#contenido");
contenido.getChildren().add(tableView);
}
}

View File

@@ -1,43 +1,92 @@
/* Copyright (c) 2017 Christopher Cromer
* Copyright (c) 2017 Carlos Faúndez
*
* This file is part of mt. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution.
* This file may not be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file.
*/
package cl.cromer.mt;
import javafx.beans.property.SimpleStringProperty;
/**
* Esta clase se usa para organizar las columnas de un TableView
*/
public class TablaData {
private final SimpleStringProperty primer;
private final SimpleStringProperty primera;
private final SimpleStringProperty segundo;
private final SimpleStringProperty segunda;
public TablaData(SimpleStringProperty primer, SimpleStringProperty segundo) {
this.primer = primer;
this.segundo = segundo;
/**
* Esta constructor recibe los nombres de las columnas
*
* @param primera La primera columna
* @param segunda La segunda columna
*/
public TablaData(SimpleStringProperty primera, SimpleStringProperty segunda) {
this.primera = primera;
this.segunda = segunda;
}
public TablaData(String primer, String segundo) {
this.primer = new SimpleStringProperty(primer);
this.segundo = new SimpleStringProperty(segundo);
/**
* Esta constructor recibe los nombres de las columnas y los va a convertir a SimpleStringProperty
*
* @param primera La primera columna
* @param segunda La segunda columna
*/
public TablaData(String primera, String segunda) {
this.primera = new SimpleStringProperty(primera);
this.segunda = new SimpleStringProperty(segunda);
}
public String getPrimer() {
return primer.get();
/**
* Developer el nombre de la primera columna
*
* @return El nombre
*/
public String getPrimera() {
return primera.get();
}
public void setPrimer(String primer) {
this.primer.set(primer);
/**
* Cambiar el nombre de primera columna
*
* @param primera El nombre de primera columna
*/
public void setPrimera(String primera) {
this.primera.set(primera);
}
public SimpleStringProperty primerProperty() {
return primer;
/**
* Devolver la primera string property
* @return La primera
*/
public SimpleStringProperty primeraProperty() {
return primera;
}
public String getSegundo() {
return segundo.get();
/**
* Developer el nombre de la segunda columna
* @return El nombre
*/
public String getSegunda() {
return segunda.get();
}
public void setSegundo(String segundo) {
this.segundo.set(segundo);
/**
* Cambiar el nombre de segunda columna
*
* @param segunda El nombre de segunda columna
*/
public void setSegunda(String segunda) {
this.segunda.set(segunda);
}
public SimpleStringProperty segundoProperty() {
return segundo;
/**
* Devolver la segunda string property
* @return La segunda
*/
public SimpleStringProperty segundaProperty() {
return segunda;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2017 Christopher Cromer
Copyright (c) 2017 Carlos Faúndez
@@ -12,10 +11,10 @@ This file may not be copied, modified, propagated, or distributed except accordi
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Text?>
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:id="vboxLote" prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.131" fx:controller="cl.cromer.mt.LoteController">
<VBox xmlns:fx="http://javafx.com/fxml/1" prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.131" fx:controller="cl.cromer.mt.LoteController">
<ScrollPane fitToHeight="true" fitToWidth="true" VBox.vgrow="ALWAYS">
<VBox alignment="CENTER" VBox.vgrow="ALWAYS">
<VBox fx:id="contenidoLote" alignment="CENTER" VBox.vgrow="ALWAYS">
<VBox fx:id="contenido" alignment="CENTER" VBox.vgrow="ALWAYS">
<padding>
<Insets left="5.0" right="5.0" top="5.0" bottom="5.0"/>
</padding>

View File

@@ -15,12 +15,12 @@ This file may not be copied, modified, propagated, or distributed except accordi
<columns>
<TableColumn sortable="false">
<cellValueFactory>
<PropertyValueFactory property="primer"/>
<PropertyValueFactory property="primera"/>
</cellValueFactory>
</TableColumn>
<TableColumn sortable="false">
<cellValueFactory>
<PropertyValueFactory property="segundo"/>
<PropertyValueFactory property="segunda"/>
</cellValueFactory>
</TableColumn>
</columns>