From 1d4799250ebff7481ec907d69258b91f8fde1fed Mon Sep 17 00:00:00 2001 From: Joao-Pedro-P-Holanda Date: Wed, 29 Nov 2023 01:10:33 -0300 Subject: [PATCH 1/6] implementando get e update de instituicoes em visualizarEvento --- .../sgec/DAO/InstituicaoDAO.java | 17 +- .../VisualizarEventoController.java | 273 +++++++++++------- .../preview/PreviewInstituicaoController.java | 27 +- 3 files changed, 189 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/casaculturaqxd/sgec/DAO/InstituicaoDAO.java b/src/main/java/com/casaculturaqxd/sgec/DAO/InstituicaoDAO.java index f89e0a78..c62bc0e2 100644 --- a/src/main/java/com/casaculturaqxd/sgec/DAO/InstituicaoDAO.java +++ b/src/main/java/com/casaculturaqxd/sgec/DAO/InstituicaoDAO.java @@ -102,11 +102,11 @@ public ArrayList listarInstituicoes() throws SQLException { while (resultSet.next()) { nomeStrings.add(resultSet.getString("nome_instituicao")); } - + } catch (Exception e) { logException(e); throw new SQLException(e); - + } finally { statement.close(); } @@ -147,7 +147,14 @@ public boolean atualizarInstituicao(Instituicao instituicao) throws SQLException try { Integer idServiceFile = null; if (instituicao.getImagemCapa() != null) { - instituicao.getImagemCapa().getServiceFileId(); + ServiceFileDAO serviceFileDAO = new ServiceFileDAO(conn); + Optional optionalFile = serviceFileDAO.getArquivo(instituicao.getImagemCapa().getFileKey()); + if (optionalFile.isPresent()) { + instituicao.setImagemCapa(optionalFile.get()); + } else { + serviceFileDAO.inserirArquivo(instituicao.getImagemCapa()); + } + idServiceFile = instituicao.getImagemCapa().getServiceFileId(); } statement.setString(1, instituicao.getNome()); statement.setObject(2, idServiceFile, Types.INTEGER); @@ -340,7 +347,7 @@ public boolean atualizarOrganizadorEvento(Instituicao instituicao, Integer idEve + " WHERE id_instituicao = ? AND id_evento = ?"; PreparedStatement stmt = conn.prepareStatement(sql); try { - + atualizarInstituicao(instituicao); stmt.setString(1, instituicao.getDescricaoContribuicao()); stmt.setString(2, instituicao.getValorContribuicao()); stmt.setInt(3, instituicao.getIdInstituicao()); @@ -361,7 +368,7 @@ public boolean atualizarColaboradorEvento(Instituicao instituicao, Integer idEve + " WHERE id_instituicao = ? AND id_evento = ?"; PreparedStatement stmt = conn.prepareStatement(sql); try { - + atualizarInstituicao(instituicao); stmt.setString(1, instituicao.getDescricaoContribuicao()); stmt.setString(2, instituicao.getValorContribuicao()); stmt.setInt(3, instituicao.getIdInstituicao()); diff --git a/src/main/java/com/casaculturaqxd/sgec/controller/VisualizarEventoController.java b/src/main/java/com/casaculturaqxd/sgec/controller/VisualizarEventoController.java index f98e941c..9c9d1434 100644 --- a/src/main/java/com/casaculturaqxd/sgec/controller/VisualizarEventoController.java +++ b/src/main/java/com/casaculturaqxd/sgec/controller/VisualizarEventoController.java @@ -20,6 +20,7 @@ import com.casaculturaqxd.sgec.App; import com.casaculturaqxd.sgec.DAO.EventoDAO; +import com.casaculturaqxd.sgec.DAO.InstituicaoDAO; import com.casaculturaqxd.sgec.DAO.LocalizacaoDAO; import com.casaculturaqxd.sgec.DAO.ServiceFileDAO; import com.casaculturaqxd.sgec.controller.dialog.DialogNovaInstituicao; @@ -39,6 +40,7 @@ import javafx.animation.PauseTransition; import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.MapChangeListener; import javafx.collections.ObservableList; import javafx.collections.ObservableMap; @@ -90,7 +92,7 @@ public class VisualizarEventoController implements ControllerServiceFile, Contro @FXML VBox root; @FXML - FlowPane secaoParticipantes, secaoArquivos, secaoOrganizadores, secaoColaboradores; + FlowPane secaoParticipantes, secaoArquivos, secaoOrganizadores, secaoColaboradores; @FXML VBox frameLocais; @FXML @@ -112,9 +114,8 @@ public class VisualizarEventoController implements ControllerServiceFile, Contro private String[] classificacoes = { "Livre", "10 anos", "12 anos", "14 anos", "16 anos", "18 anos" }; // listas ObservableMap participantes = FXCollections.observableHashMap(); - ObservableMap organizadorObservableMap = FXCollections.observableHashMap(); - ObservableMap colaboradorObservableMap = FXCollections.observableHashMap(); - + ObservableList listaPreviewOrganizadores = FXCollections.observableArrayList(); + ObservableList listaPreviewColaboradores = FXCollections.observableArrayList(); private ObservableMap mapServiceFiles = FXCollections.observableHashMap(); // Tabela com todos os campos de input ObservableList camposInput = FXCollections.observableArrayList(); @@ -143,8 +144,8 @@ public void initialize() throws IOException { addPropriedadeAlterar(camposInput); addListenersServiceFile(mapServiceFiles); addListenersParticipante(participantes); - addListenersColaborador(colaboradorObservableMap); - addListenersOrganizador(organizadorObservableMap); + addListenersColaborador(listaPreviewColaboradores); + addListenersOrganizador(listaPreviewOrganizadores); loadMenu(); formatterHorario = new SimpleDateFormat("HH:mm"); @@ -170,12 +171,14 @@ public void updateItem(LocalDate date, boolean empty) { // Impede que datas anteriores à dataInicial sejam selecionadas em dataFinal dataInicial.valueProperty().addListener((observable, oldValue, newValue) -> { dataFinal.setDayCellFactory(picker -> new DateCell() { + @Override public void updateItem(LocalDate date, boolean empty) { super.updateItem(date, empty); LocalDate currentDate = dataInicial.getValue(); setDisable(empty || date.compareTo(currentDate) < 0); } + }); }); } @@ -186,12 +189,13 @@ private void loadMenu() throws IOException { } private void loadContent() throws IOException, SQLException { + loadInstituicoes(); + loadArquivos(); loadMetas(); classificacaoEtaria.getItems().addAll(classificacoes); titulo.setText(evento.getNome()); descricao.setText(evento.getDescricao()); classificacaoEtaria.getSelectionModel().select(evento.getClassificacaoEtaria()); - loadArquivos(); if (evento.getHorario() != null) { horario.setText(evento.getHorario().toString()); } @@ -246,6 +250,15 @@ private void loadContent() throws IOException, SQLException { addIndicador(tabelaIndicadoresMeta2, numeroMunicipios); } + private void loadInstituicoes() { + for (Instituicao instituicao : evento.getListaOrganizadores()) { + adicionarOrganizador(instituicao); + } + for (Instituicao instituicao : evento.getListaColaboradores()) { + adicionarColaborador(instituicao); + } + } + private void loadMetas() { for (Node node : secaoMetas.getChildren()) { if (node instanceof CheckBox) { @@ -340,13 +353,19 @@ private boolean updateEvento(Evento evento) throws SQLException { try { // TODO: update de colaboradores, organizadores, participantes e locais if (!eventoDAO.alterarEvento(evento)) { - return false; + throw new SQLException(); } if (!updateMetas(evento)) { - return false; + throw new SQLException(); } if (!updateArquivos(evento)) { - return false; + throw new SQLException(); + } + if (!updateColaboradores(evento)) { + throw new SQLException(); + } + if (!updateOrganizadores(evento)) { + throw new SQLException(); } return true; } catch (SQLException e) { @@ -357,6 +376,22 @@ private boolean updateEvento(Evento evento) throws SQLException { } } + private boolean updateOrganizadores(Evento evento) throws SQLException { + InstituicaoDAO instituicaoDAO = new InstituicaoDAO(db.getConnection()); + for (Instituicao instituicao : getOrganizadores()) { + instituicaoDAO.atualizarOrganizadorEvento(instituicao, evento.getIdEvento()); + } + return eventoDAO.atualizarOrganizadoresEvento(getOrganizadores(), evento); + } + + private boolean updateColaboradores(Evento evento) throws SQLException { + InstituicaoDAO instituicaoDAO = new InstituicaoDAO(db.getConnection()); + for (Instituicao instituicao : getColaboradores()) { + instituicaoDAO.atualizarColaboradorEvento(instituicao, evento.getIdEvento()); + } + return eventoDAO.atualizarColaboradoresEvento(getColaboradores(), evento); + } + private boolean updateMetas(Evento evento) throws SQLException { return eventoDAO.atualizarMetasEvento(getMetasSelecionadas(), evento); } @@ -430,28 +465,24 @@ private void loadTable(TableView tabela) { TableColumn valorEsperado = new TableColumn<>("Valor esperado"); valorEsperado.setCellValueFactory(new PropertyValueFactory<>("valorEsperado")); - valorEsperado - .setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter())); - valorEsperado - .setOnEditCommit(new EventHandler>() { - @Override - public void handle(TableColumn.CellEditEvent t) { - ((Indicador) t.getTableView().getItems().get(t.getTablePosition().getRow())) - .setValorEsperado(t.getNewValue()); - } - }); + valorEsperado.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter())); + valorEsperado.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + ((Indicador) t.getTableView().getItems().get(t.getTablePosition().getRow())) + .setValorEsperado(t.getNewValue()); + } + }); TableColumn valorAlcancado = new TableColumn<>("Valor alcançado"); valorAlcancado.setCellValueFactory(new PropertyValueFactory<>("valorAlcancado")); - valorAlcancado - .setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter())); - valorAlcancado - .setOnEditCommit(new EventHandler>() { - @Override - public void handle(TableColumn.CellEditEvent t) { - ((Indicador) t.getTableView().getItems().get(t.getTablePosition().getRow())) - .setValorAlcancado(t.getNewValue()); - } - }); + valorAlcancado.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter())); + valorAlcancado.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + ((Indicador) t.getTableView().getItems().get(t.getTablePosition().getRow())) + .setValorAlcancado(t.getNewValue()); + } + }); tabela.getColumns().add(nomeIndicador); tabela.getColumns().add(valorEsperado); @@ -466,8 +497,7 @@ private void addIndicador(TableView tabela, Indicador indicador) { /** *

* Retorna todos os elementos que suportam interacao do usuario presentes na - * pagina, exceto - * botoes, labels e tableviews + * pagina, exceto botoes, labels e tableviews *

*/ public void addControls(Parent parent, ObservableList list) { @@ -485,7 +515,7 @@ public void loadArquivos() throws SQLException { for (ServiceFile arquivo : serviceFileDAO.listarArquivosEvento(evento, 5)) { try { adicionarArquivo(arquivo); - } catch(IOException e) { + } catch (IOException e) { e.printStackTrace(); } } @@ -518,8 +548,7 @@ public void adicionarArquivo() { @Override public void adicionarArquivo(ServiceFile serviceFile) throws IOException { - mapServiceFiles.put(serviceFile, - new FXMLLoader(App.class.getResource("view/preview/previewArquivo.fxml"))); + mapServiceFiles.put(serviceFile, new FXMLLoader(App.class.getResource("view/preview/previewArquivo.fxml"))); } @Override @@ -534,8 +563,7 @@ public void addListenersServiceFile(ObservableMap obser ControllerServiceFile superController = this; observablemap.addListener(new MapChangeListener() { @Override - public void onChanged( - MapChangeListener.Change change) { + public void onChanged(MapChangeListener.Change change) { if (change.wasAdded()) { ServiceFile addedKey = change.getKey(); @@ -564,6 +592,22 @@ public void onChanged( }); } + public ArrayList getOrganizadores() { + ArrayList listaOrganizadores = new ArrayList<>(); + for (PreviewInstituicaoController controller : listaPreviewOrganizadores) { + listaOrganizadores.add(controller.getInstituicao()); + } + return new ArrayList<>(listaOrganizadores); + } + + public ArrayList getColaboradores() { + ArrayList listaColaboradores = new ArrayList<>(); + for (PreviewInstituicaoController controller : listaPreviewColaboradores) { + listaColaboradores.add(controller.getInstituicao()); + } + return new ArrayList<>(listaColaboradores); + } + private void getDescricao() { Clipboard clipboard = Clipboard.getSystemClipboard(); ClipboardContent content = new ClipboardContent(); @@ -583,8 +627,7 @@ private void copyToClipboard(MouseEvent event) { @Override public void adicionarParticipante(Participante participante) { // TODO chamar metodo para todo participante vinculado ao evento - participantes.put(participante, - new FXMLLoader(App.class.getResource("view/preview/previewParticipante.fxml"))); + participantes.put(participante, new FXMLLoader(App.class.getResource("view/preview/previewParticipante.fxml"))); } @Override @@ -601,8 +644,7 @@ public void addListenersParticipante(ObservableMap obs VisualizarEventoController superController = this; observablemap.addListener(new MapChangeListener() { @Override - public void onChanged( - MapChangeListener.Change change) { + public void onChanged(MapChangeListener.Change change) { if (change.wasAdded()) { Participante addedKey = change.getKey(); @@ -660,18 +702,29 @@ public void removerLocalizacao(Localizacao localizacao) { } public void adicionarOrganizador() throws IOException { - ButtonType buttonTypeVincularOrganizadora = new ButtonType("Vincular como organizadora", ButtonBar.ButtonData.OK_DONE); + ButtonType buttonTypeVincularOrganizadora = new ButtonType("Vincular como organizadora", + ButtonBar.ButtonData.OK_DONE); DialogNovaInstituicao dialogNovaInstituicao = new DialogNovaInstituicao(buttonTypeVincularOrganizadora); Optional novaInstituicao = dialogNovaInstituicao.showAndWait(); - if(novaInstituicao.isPresent()){ + if (novaInstituicao.isPresent()) { adicionarOrganizador(novaInstituicao.get()); } } public void adicionarOrganizador(Instituicao instituicao) { - if(!contemInstituicao(organizadorObservableMap, instituicao.getNome()) && - !contemInstituicao(colaboradorObservableMap, instituicao.getNome())){ - organizadorObservableMap.put(instituicao, new FXMLLoader(App.class.getResource("view/preview/previewInstituicao.fxml"))); + if (!contemInstituicao(listaPreviewColaboradores, instituicao) + && !contemInstituicao(listaPreviewOrganizadores, instituicao)) { + FXMLLoader loaderInstituicao = new FXMLLoader( + App.class.getResource("view/preview/previewInstituicao.fxml")); + try { + loaderInstituicao.load(); + PreviewInstituicaoController controller = loaderInstituicao.getController(); + controller.setInstituicao(instituicao); + listaPreviewOrganizadores.add(controller); + } catch (IOException e) { + Alert alert = new Alert(AlertType.WARNING, "falha carregando organizador"); + alert.show(); + } } else { mensagem.setAlertType(AlertType.ERROR); mensagem.setContentText("Não foi possivel realizar a vinculação: Instituição já foi vinculada!"); @@ -680,18 +733,29 @@ public void adicionarOrganizador(Instituicao instituicao) { } public void adicionarColaborador() throws IOException { - ButtonType buttonTypeVincularColaborador = new ButtonType("Vincular como colaborador", ButtonBar.ButtonData.OK_DONE); + ButtonType buttonTypeVincularColaborador = new ButtonType("Vincular como colaborador", + ButtonBar.ButtonData.OK_DONE); DialogNovaInstituicao dialogNovaInstituicao = new DialogNovaInstituicao(buttonTypeVincularColaborador); Optional novaInstituicao = dialogNovaInstituicao.showAndWait(); - if(novaInstituicao.isPresent()){ - adicionarColaborador(novaInstituicao.get()); + if (novaInstituicao.isPresent()) { + adicionarColaborador(novaInstituicao.get()); } } public void adicionarColaborador(Instituicao instituicao) { - if(!contemInstituicao(organizadorObservableMap, instituicao.getNome()) && - !contemInstituicao(colaboradorObservableMap, instituicao.getNome())){ - colaboradorObservableMap.put(instituicao, new FXMLLoader(App.class.getResource("view/preview/previewInstituicao.fxml"))); + if (!contemInstituicao(listaPreviewOrganizadores, instituicao) + && !contemInstituicao(listaPreviewColaboradores, instituicao)) { + FXMLLoader loaderInstituicao = new FXMLLoader( + App.class.getResource("view/preview/previewInstituicao.fxml")); + try { + loaderInstituicao.load(); + PreviewInstituicaoController controller = loaderInstituicao.getController(); + controller.setInstituicao(instituicao); + listaPreviewColaboradores.add(controller); + } catch (IOException e) { + Alert alert = new Alert(AlertType.WARNING, "falha carregando organizador"); + alert.show(); + } } else { mensagem.setAlertType(AlertType.ERROR); mensagem.setContentText("Não foi possivel realizar a vinculação: Instituição já foi vinculada!"); @@ -699,94 +763,81 @@ public void adicionarColaborador(Instituicao instituicao) { } } - public static boolean contemInstituicao(ObservableMap organizadorObservableMap, String nome) { - for (Instituicao instituicao : organizadorObservableMap.keySet()) { - if (instituicao.getNome().equals(nome)) { - return true; + public static boolean contemInstituicao(ObservableList listaPreview, + Instituicao instituicao) { + for (PreviewInstituicaoController preview : listaPreview) { + if (preview.getInstituicao().equals(instituicao)) { + return true; } } - return false; + return false; } - public void removerInstituicao(Instituicao instituicao){ - if(contemInstituicao(organizadorObservableMap, instituicao.getNome())){ - Iterator iterator = organizadorObservableMap.keySet().iterator(); - + public void removerInstituicao(Instituicao instituicao) { + if (contemInstituicao(listaPreviewOrganizadores, instituicao)) { + Iterator iterator = listaPreviewOrganizadores.iterator(); + while (iterator.hasNext()) { - Instituicao instituicaoTemp = iterator.next(); - if (instituicaoTemp.getNome().equals(instituicao.getNome())) { + if (iterator.next().getInstituicao().equals(instituicao)) { iterator.remove(); } } } else { - Iterator iterator = colaboradorObservableMap.keySet().iterator(); - + Iterator iterator = listaPreviewColaboradores.iterator(); + while (iterator.hasNext()) { - Instituicao instituicaoTemp = iterator.next(); - if (instituicaoTemp.getNome().equals(instituicao.getNome())) { + if (iterator.next().getInstituicao().equals(instituicao)) { iterator.remove(); } } } } - public void addListenersOrganizador(ObservableMap observablemap) { + public void addListenersOrganizador(ObservableList observableList) { VisualizarEventoController superController = this; - observablemap.addListener(new MapChangeListener() { + observableList.addListener(new ListChangeListener() { @Override - public void onChanged(MapChangeListener.Change change) { - - if (change.wasAdded()) { - Instituicao addedKey = change.getKey(); - // carregar o fxml de preview e setar o participante deste para o - // participante adicionado - try { - Parent previewInstituicao = change.getValueAdded().load(); - PreviewInstituicaoController controller = change.getValueAdded().getController(); - controller.setInstituicao(addedKey); - controller.setParentController(superController); - - secaoOrganizadores.getChildren().add(previewInstituicao); - } catch (IOException e) { - e.printStackTrace(); + public void onChanged(ListChangeListener.Change change) { + while (change.next()) { + if (change.wasAdded()) { + for (PreviewInstituicaoController addedController : change.getAddedSubList()) { + addedController.setParentController(superController); + + secaoOrganizadores.getChildren().add(addedController.getContainer()); + } + } + if (change.wasRemoved()) { + for (PreviewInstituicaoController removedController : change.getRemoved()) { + // Remover o Pane de preview ao deletar um Participante da lista + secaoOrganizadores.getChildren().remove(removedController.getContainer()); + } } - } - if (change.wasRemoved()) { - PreviewInstituicaoController removedController = change.getValueRemoved().getController(); - // Remover o Pane de preview ao deletar um Participante da lista - secaoOrganizadores.getChildren().remove(removedController.getContainer()); - } } }); + } - public void addListenersColaborador(ObservableMap observablemap) { + public void addListenersColaborador(ObservableList observableList) { VisualizarEventoController superController = this; - observablemap.addListener(new MapChangeListener() { + observableList.addListener(new ListChangeListener() { @Override - public void onChanged(MapChangeListener.Change change) { + public void onChanged(ListChangeListener.Change change) { + while (change.next()) { - if (change.wasAdded()) { - Instituicao addedKey = change.getKey(); - // carregar o fxml de preview e setar o participante deste para o - // participante adicionado - try { - Parent previewInstituicao = change.getValueAdded().load(); - PreviewInstituicaoController controller = change.getValueAdded().getController(); - controller.setInstituicao(addedKey); - controller.setParentController(superController); + if (change.wasAdded()) { + for (PreviewInstituicaoController addedController : change.getAddedSubList()) { + addedController.setParentController(superController); - secaoColaboradores.getChildren().add(previewInstituicao); - } catch (IOException e) { - e.printStackTrace(); + secaoColaboradores.getChildren().add(addedController.getContainer()); + } + } + if (change.wasRemoved()) { + for (PreviewInstituicaoController removedController : change.getRemoved()) { + // Remover o Pane de preview ao deletar um Participante da lista + secaoColaboradores.getChildren().remove(removedController.getContainer()); + } } - } - if (change.wasRemoved()) { - PreviewInstituicaoController removedController = change.getValueRemoved().getController(); - // Remover o Pane de preview ao deletar um Participante da lista - secaoColaboradores.getChildren().remove(removedController.getContainer()); - } } }); diff --git a/src/main/java/com/casaculturaqxd/sgec/controller/preview/PreviewInstituicaoController.java b/src/main/java/com/casaculturaqxd/sgec/controller/preview/PreviewInstituicaoController.java index 73796613..867c6bcd 100644 --- a/src/main/java/com/casaculturaqxd/sgec/controller/preview/PreviewInstituicaoController.java +++ b/src/main/java/com/casaculturaqxd/sgec/controller/preview/PreviewInstituicaoController.java @@ -8,8 +8,8 @@ import java.util.ArrayList; import java.util.List; - import com.casaculturaqxd.sgec.DAO.InstituicaoDAO; +import com.casaculturaqxd.sgec.DAO.ServiceFileDAO; import com.casaculturaqxd.sgec.controller.ControllerEvento; import com.casaculturaqxd.sgec.jdbc.DatabasePostgres; import com.casaculturaqxd.sgec.models.Instituicao; @@ -38,16 +38,15 @@ public class PreviewInstituicaoController { @FXML - private Parent container; //pane raiz do fxml + private Parent container; // pane raiz do fxml @FXML private HBox campoNome, campoContribuicao, campoValorContribuicao; @FXML - private Label nomeInstituicao, contribuicao, valorContribuicao; + private Label nomeInstituicao, contribuicao, valorContribuicao; @FXML private Button buttonAlterarCapa, buttonRemover; @FXML private ImageView imagemViewInstituicao; - private Instituicao instituicao; private ControllerEvento parentController; private ObservableMap> previousChildren = FXCollections.observableHashMap(); @@ -62,9 +61,9 @@ public void initialize() { buttonAlterarCapa.setViewOrder(-1); buttonRemover.setViewOrder(-1); try { - listaNomes = instituicaoDAO.listarInstituicoes(); + listaNomes = instituicaoDAO.listarInstituicoes(); } catch (SQLException e) { - listaNomes = new ArrayList<>(); + listaNomes = new ArrayList<>(); } } @@ -95,8 +94,10 @@ public void loadContent() { public void loadImagem() { InputStream fileAsStream; - if(instituicao.getImagemCapa() != null){ + if (instituicao.getImagemCapa() != null) { try { + ServiceFileDAO serviceFileDAO = new ServiceFileDAO(db.getConnection()); + instituicao.getImagemCapa().setContent(serviceFileDAO.getContent(instituicao.getImagemCapa())); fileAsStream = new FileInputStream(instituicao.getImagemCapa().getContent()); imagemViewInstituicao.setImage(new Image(fileAsStream)); } catch (FileNotFoundException e) { @@ -105,8 +106,11 @@ public void loadImagem() { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - } + } } public void updateImagemCapa() { @@ -117,7 +121,6 @@ public void updateImagemCapa() { instituicao.setImagemCapa(new ServiceFile(fileChooser.showOpenDialog(stage))); loadImagem(); } - private void updateFieldNome(Labeled labeled, Pane fieldParent) { ObservableList oldNodes = FXCollections.observableArrayList(fieldParent.getChildren()); @@ -125,7 +128,7 @@ private void updateFieldNome(Labeled labeled, Pane fieldParent) { TextField textField = new TextField(labeled.getText()); textField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) { - if(!listaNomes.contains(textField.getText())){ + if (!listaNomes.contains(textField.getText())) { labeled.setText(textField.getText()); fieldParent.getChildren().setAll(previousChildren.get(campoNome)); } else { @@ -134,7 +137,7 @@ private void updateFieldNome(Labeled labeled, Pane fieldParent) { mensagem.show(); fieldParent.getChildren().setAll(previousChildren.get(campoNome)); } - + } else if (event.getCode() == KeyCode.ESCAPE) { fieldParent.getChildren().setAll(previousChildren.get(campoNome)); } @@ -149,7 +152,7 @@ private void updateField(Labeled labeled, Pane fieldParent) { textField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) { labeled.setText(textField.getText()); - fieldParent.getChildren().setAll(previousChildren.get(campoNome)); + fieldParent.getChildren().setAll(previousChildren.get(campoNome)); } else if (event.getCode() == KeyCode.ESCAPE) { fieldParent.getChildren().setAll(previousChildren.get(campoNome)); } From c756bbe6b00d8a7e6aa1937ce77fae1a48e4be84 Mon Sep 17 00:00:00 2001 From: Joao-Pedro-P-Holanda Date: Wed, 29 Nov 2023 01:44:19 -0300 Subject: [PATCH 2/6] implementando vinculo de instituicoes em cadastrar evento --- .../controller/CadastrarEventoController.java | 248 +++++++++++------- 1 file changed, 150 insertions(+), 98 deletions(-) diff --git a/src/main/java/com/casaculturaqxd/sgec/controller/CadastrarEventoController.java b/src/main/java/com/casaculturaqxd/sgec/controller/CadastrarEventoController.java index 70731cfb..c95d6d16 100644 --- a/src/main/java/com/casaculturaqxd/sgec/controller/CadastrarEventoController.java +++ b/src/main/java/com/casaculturaqxd/sgec/controller/CadastrarEventoController.java @@ -36,7 +36,9 @@ import com.casaculturaqxd.sgec.models.arquivo.ServiceFile; import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.MapChangeListener; +import javafx.collections.ObservableList; import javafx.collections.ObservableMap; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; @@ -73,7 +75,7 @@ public class CadastrarEventoController implements ControllerServiceFile, Control ServiceFileDAO serviceFileDAO; private File lastDirectoryOpen; - + ArrayList controllersLocais = new ArrayList(); DateFormat formatterHorario; @@ -104,8 +106,13 @@ public class CadastrarEventoController implements ControllerServiceFile, Control @FXML RadioButton optionCertificavel, optionAcessivelEmLibras; private ObservableMap mapServiceFiles = FXCollections.observableHashMap(); - ObservableMap organizadorObservableMap = FXCollections.observableHashMap(); - ObservableMap colaboradorObservableMap = FXCollections.observableHashMap(); + ObservableList listaPreviewOrganizadores = FXCollections.observableArrayList(); + ObservableList listaPreviewColaboradores = FXCollections.observableArrayList(); + + ObservableMap organizadorObservableMap = FXCollections + .observableHashMap(); + ObservableMap colaboradorObservableMap = FXCollections + .observableHashMap(); @FXML Button botaoNovaLocalizacao; ObservableMap participantes = FXCollections.observableHashMap(); @@ -120,8 +127,8 @@ public void initialize() throws IOException { addListenersServiceFile(mapServiceFiles); loadMenu(); addListenersParticipante(participantes); - addListenersColaborador(colaboradorObservableMap); - addListenersOrganizador(organizadorObservableMap); + addListenersColaborador(listaPreviewColaboradores); + addListenersOrganizador(listaPreviewOrganizadores); // inicia com o local obrigatorio carregado na pagina carregarCampoLocalizacao(); @@ -137,7 +144,7 @@ private void loadMenu() throws IOException { } public void compararDatas() { - + // Impede que data posteriores á dataFinal sejam seleciondas no campo // dataInicial pickerDataFinal.valueProperty().addListener((observable, oldValue, newValue) -> { @@ -151,11 +158,11 @@ public void updateItem(LocalDate date, boolean empty) { }); }); - // Impede que datas anteriores à dataInicial sejam selecionadas em dataFinal + // Impede que datas anteriores à dataInicial sejam selecionadas em dataFinal pickerDataInicial.valueProperty().addListener((observable, oldValue, newValue) -> { pickerDataFinal.setDayCellFactory(picker -> new DateCell() { @Override - public void updateItem(LocalDate date, boolean empty) { + public void updateItem(LocalDate date, boolean empty) { super.updateItem(date, empty); LocalDate currentDate = pickerDataInicial.getValue(); setDisable(empty || date.compareTo(currentDate) < 0); @@ -164,11 +171,22 @@ public void updateItem(LocalDate date, boolean empty) { }); } + /** + * Desabilita o autocommit da conexao com banco e inicia uma transacao para + * inserir o evento e todas as entidades vinculadas.Em caso de excecoes durante + * a execucao dos metodos ou retorno falso, forca o rollback + * + * @param evento + * @return true se todas as insercoes forem sucedidas + * @throws SQLException + */ private boolean insertEvento(Evento evento) throws SQLException { db.getConnection().setAutoCommit(false); try { - eventoDAO.inserirEvento(evento); + if (!eventoDAO.inserirEvento(evento)) { + throw new SQLException(); + } // procura pelo arquivo no banco, se nao estiver realiza a insercao for (ServiceFile arquivo : evento.getListaArquivos()) { Optional arquivoExistente = serviceFileDAO.getArquivo(arquivo.getFileKey()); @@ -180,15 +198,27 @@ private boolean insertEvento(Evento evento) throws SQLException { evento.getListaArquivos().set(idxArquivo, arquivoExistente.get()); } } - eventoDAO.vincularArquivos(evento); - eventoDAO.vincularMetas(evento.getListaMetas(), evento.getIdEvento()); - - for(Localizacao localizacao: evento.getLocais()){ + if (!eventoDAO.vincularMetas(evento.getListaMetas(), evento.getIdEvento())) { + throw new SQLException(); + } + if (!eventoDAO.vincularColaboradores(getColaboradores(), evento)) { + throw new SQLException(); + } + if (!eventoDAO.vincularOrganizadores(getOrganizadores(), evento)) { + throw new SQLException(); + } + for (Localizacao localizacao : evento.getLocais()) { adicionarLocalizacao(localizacao); } - eventoDAO.vincularLocais(evento.getLocais(), evento.getIdEvento()); - + if (!eventoDAO.vincularLocais(evento.getLocais(), evento.getIdEvento())) { + throw new SQLException(); + } + + if (!eventoDAO.vincularArquivos(evento)) { + throw new SQLException(); + } + return true; } catch (SQLException e) { db.getConnection().rollback(); @@ -250,7 +280,6 @@ private Evento getTargetEvento() throws SQLException { builderEvento.setCargaHoraria(novaCargaHoraria); builderEvento.setMunicipiosEsperado(numMunicipiosEsperadoValue); builderEvento.setNumParticipantesEsperado(numParticipanteEsperado); - // TODO: substituir id de locais por models ArrayList locais = new ArrayList<>(); for (FieldLocalizacaoController controller : controllersLocais) { locais.add(controller.getLocalizacao()); @@ -263,7 +292,7 @@ private Evento getTargetEvento() throws SQLException { return builderEvento.getEvento(); } - /** verifica se as condicoes para cadastrar um evento sao atendidas*/ + /** verifica se as condicoes para cadastrar um evento sao atendidas */ private void verificarInput() { if (emptyLocalizacoes()) { Alert erroLocalizacao = new Alert(AlertType.ERROR, @@ -280,7 +309,7 @@ private void verificarInput() { throw new RuntimeException("Convocatorias precisam de pelo menos um colaborador"); } } - + public void cancelar() throws IOException { builderEvento.resetar(); App.setRoot("view/home"); @@ -297,7 +326,7 @@ public void carregarCampoLocalizacao() throws IOException { paneLocalizacoes.getChildren().add(novoLocal); FieldLocalizacaoController controller = loaderLocais.getController(); - + controller.setPaneLocalizacao(novoLocal); controller.setParentController(this); controllersLocais.add(controller); @@ -324,6 +353,22 @@ public ArrayList getMetasSelecionadas() { return metasSelecionadas; } + public ArrayList getOrganizadores() { + ArrayList listaOrganizadores = new ArrayList<>(); + for (PreviewInstituicaoController controller : listaPreviewOrganizadores) { + listaOrganizadores.add(controller.getInstituicao()); + } + return new ArrayList<>(listaOrganizadores); + } + + public ArrayList getColaboradores() { + ArrayList listaColaboradores = new ArrayList<>(); + for (PreviewInstituicaoController controller : listaPreviewColaboradores) { + listaColaboradores.add(controller.getInstituicao()); + } + return new ArrayList<>(listaColaboradores); + } + public void adicionarParticipante() throws SQLException { // TODO: substituir por abrir o dialog de participante e chamar // adicionarParticipante(resultado) @@ -342,18 +387,29 @@ public void removerParticipante(Participante participante) { } public void adicionarOrganizador() throws IOException { - ButtonType buttonTypeVincularOrganizadora = new ButtonType("Vincular como organizadora", ButtonBar.ButtonData.OK_DONE); + ButtonType buttonTypeVincularOrganizadora = new ButtonType("Vincular como organizadora", + ButtonBar.ButtonData.OK_DONE); DialogNovaInstituicao dialogNovaInstituicao = new DialogNovaInstituicao(buttonTypeVincularOrganizadora); Optional novaInstituicao = dialogNovaInstituicao.showAndWait(); - if(novaInstituicao.isPresent()){ + if (novaInstituicao.isPresent()) { adicionarOrganizador(novaInstituicao.get()); } } public void adicionarOrganizador(Instituicao instituicao) { - if(!contemInstituicao(organizadorObservableMap, instituicao.getNome()) && - !contemInstituicao(colaboradorObservableMap, instituicao.getNome())){ - organizadorObservableMap.put(instituicao, new FXMLLoader(App.class.getResource("view/preview/previewInstituicao.fxml"))); + if (!contemInstituicao(listaPreviewColaboradores, instituicao) + && !contemInstituicao(listaPreviewOrganizadores, instituicao)) { + FXMLLoader loaderInstituicao = new FXMLLoader( + App.class.getResource("view/preview/previewInstituicao.fxml")); + try { + loaderInstituicao.load(); + PreviewInstituicaoController controller = loaderInstituicao.getController(); + controller.setInstituicao(instituicao); + listaPreviewOrganizadores.add(controller); + } catch (IOException e) { + Alert alert = new Alert(AlertType.WARNING, "falha carregando organizador"); + alert.show(); + } } else { mensagem.setAlertType(AlertType.ERROR); mensagem.setContentText("Não foi possivel realizar a vinculação: Instituição já foi vinculada!"); @@ -362,18 +418,29 @@ public void adicionarOrganizador(Instituicao instituicao) { } public void adicionarColaborador() throws IOException { - ButtonType buttonTypeVincularColaborador = new ButtonType("Vincular como colaborador", ButtonBar.ButtonData.OK_DONE); + ButtonType buttonTypeVincularColaborador = new ButtonType("Vincular como colaborador", + ButtonBar.ButtonData.OK_DONE); DialogNovaInstituicao dialogNovaInstituicao = new DialogNovaInstituicao(buttonTypeVincularColaborador); Optional novaInstituicao = dialogNovaInstituicao.showAndWait(); - if(novaInstituicao.isPresent()){ - adicionarColaborador(novaInstituicao.get()); + if (novaInstituicao.isPresent()) { + adicionarColaborador(novaInstituicao.get()); } } public void adicionarColaborador(Instituicao instituicao) { - if(!contemInstituicao(organizadorObservableMap, instituicao.getNome()) && - !contemInstituicao(colaboradorObservableMap, instituicao.getNome())){ - colaboradorObservableMap.put(instituicao, new FXMLLoader(App.class.getResource("view/preview/previewInstituicao.fxml"))); + if (!contemInstituicao(listaPreviewOrganizadores, instituicao) + && !contemInstituicao(listaPreviewColaboradores, instituicao)) { + FXMLLoader loaderInstituicao = new FXMLLoader( + App.class.getResource("view/preview/previewInstituicao.fxml")); + try { + loaderInstituicao.load(); + PreviewInstituicaoController controller = loaderInstituicao.getController(); + controller.setInstituicao(instituicao); + listaPreviewColaboradores.add(controller); + } catch (IOException e) { + Alert alert = new Alert(AlertType.WARNING, "falha carregando organizador"); + alert.show(); + } } else { mensagem.setAlertType(AlertType.ERROR); mensagem.setContentText("Não foi possivel realizar a vinculação: Instituição já foi vinculada!"); @@ -381,31 +448,30 @@ public void adicionarColaborador(Instituicao instituicao) { } } - public static boolean contemInstituicao(ObservableMap organizadorObservableMap, String nome) { - for (Instituicao instituicao : organizadorObservableMap.keySet()) { - if (instituicao.getNome().equals(nome)) { - return true; + public static boolean contemInstituicao(ObservableList listaPreview, + Instituicao instituicao) { + for (PreviewInstituicaoController preview : listaPreview) { + if (preview.getInstituicao().equals(instituicao)) { + return true; } } - return false; + return false; } - public void removerInstituicao(Instituicao instituicao){ - if(contemInstituicao(organizadorObservableMap, instituicao.getNome())){ - Iterator iterator = organizadorObservableMap.keySet().iterator(); - + public void removerInstituicao(Instituicao instituicao) { + if (contemInstituicao(listaPreviewOrganizadores, instituicao)) { + Iterator iterator = listaPreviewOrganizadores.iterator(); + while (iterator.hasNext()) { - Instituicao instituicaoTemp = iterator.next(); - if (instituicaoTemp.getNome().equals(instituicao.getNome())) { + if (iterator.next().getInstituicao().equals(instituicao)) { iterator.remove(); } } } else { - Iterator iterator = colaboradorObservableMap.keySet().iterator(); - + Iterator iterator = listaPreviewColaboradores.iterator(); + while (iterator.hasNext()) { - Instituicao instituicaoTemp = iterator.next(); - if (instituicaoTemp.getNome().equals(instituicao.getNome())) { + if (iterator.next().getInstituicao().equals(instituicao)) { iterator.remove(); } } @@ -499,7 +565,6 @@ public void onChanged(MapChangeListener.Change observablemap) { + public void addListenersOrganizador(ObservableList observableList) { CadastrarEventoController superController = this; - observablemap.addListener(new MapChangeListener() { + observableList.addListener(new ListChangeListener() { @Override - public void onChanged(MapChangeListener.Change change) { - - if (change.wasAdded()) { - Instituicao addedKey = change.getKey(); - // carregar o fxml de preview e setar o participante deste para o - // participante adicionado - try { - Parent previewInstituicao = change.getValueAdded().load(); - PreviewInstituicaoController controller = change.getValueAdded().getController(); - controller.setInstituicao(addedKey); - controller.setParentController(superController); - - secaoOrganizadores.getChildren().add(previewInstituicao); - } catch (IOException e) { - e.printStackTrace(); + public void onChanged(ListChangeListener.Change change) { + while (change.next()) { + if (change.wasAdded()) { + for (PreviewInstituicaoController addedController : change.getAddedSubList()) { + addedController.setParentController(superController); + + secaoOrganizadores.getChildren().add(addedController.getContainer()); + } + } + if (change.wasRemoved()) { + for (PreviewInstituicaoController removedController : change.getRemoved()) { + // Remover o Pane de preview ao deletar um Participante da lista + secaoOrganizadores.getChildren().remove(removedController.getContainer()); + } } - } - if (change.wasRemoved()) { - PreviewInstituicaoController removedController = change.getValueRemoved().getController(); - // Remover o Pane de preview ao deletar um Participante da lista - secaoOrganizadores.getChildren().remove(removedController.getContainer()); - } } }); + } - public void addListenersColaborador(ObservableMap observablemap) { + public void addListenersColaborador(ObservableList observableList) { CadastrarEventoController superController = this; - observablemap.addListener(new MapChangeListener() { + observableList.addListener(new ListChangeListener() { @Override - public void onChanged(MapChangeListener.Change change) { + public void onChanged(ListChangeListener.Change change) { + while (change.next()) { - if (change.wasAdded()) { - Instituicao addedKey = change.getKey(); - // carregar o fxml de preview e setar o participante deste para o - // participante adicionado - try { - Parent previewInstituicao = change.getValueAdded().load(); - PreviewInstituicaoController controller = change.getValueAdded().getController(); - controller.setInstituicao(addedKey); - controller.setParentController(superController); + if (change.wasAdded()) { + for (PreviewInstituicaoController addedController : change.getAddedSubList()) { + addedController.setParentController(superController); - secaoColaboradores.getChildren().add(previewInstituicao); - } catch (IOException e) { - e.printStackTrace(); + secaoColaboradores.getChildren().add(addedController.getContainer()); + } + } + if (change.wasRemoved()) { + for (PreviewInstituicaoController removedController : change.getRemoved()) { + // Remover o Pane de preview ao deletar um Participante da lista + secaoColaboradores.getChildren().remove(removedController.getContainer()); + } } - } - if (change.wasRemoved()) { - PreviewInstituicaoController removedController = change.getValueRemoved().getController(); - // Remover o Pane de preview ao deletar um Participante da lista - secaoColaboradores.getChildren().remove(removedController.getContainer()); - } } }); @@ -625,7 +678,6 @@ public void onChanged(MapChangeListener.Change Date: Wed, 29 Nov 2023 01:48:01 -0300 Subject: [PATCH 3/6] espacando locais --- .../com/casaculturaqxd/sgec/view/visualizarEvento.fxml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/com/casaculturaqxd/sgec/view/visualizarEvento.fxml b/src/main/resources/com/casaculturaqxd/sgec/view/visualizarEvento.fxml index ede955ef..3ac9d74b 100644 --- a/src/main/resources/com/casaculturaqxd/sgec/view/visualizarEvento.fxml +++ b/src/main/resources/com/casaculturaqxd/sgec/view/visualizarEvento.fxml @@ -19,7 +19,7 @@ - + @@ -145,7 +145,7 @@