/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ package jdbc; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import javax.sql.rowset.spi.SyncProviderException; import javax.swing.KeyStroke; import ilog.views.gantt.IlvHierarchyChart; import ilog.views.gantt.action.IlvAction; import ilog.views.gantt.model.table.IlvTableGanttModel; import ilog.views.util.data.IlvRowSetTableModel; import ilog.views.util.swing.IlvSwingUtil; /** * This class groups a number of IlvAction(s) that can be used when connecting a * Gantt model to a database. */ public class JdbcScheduleActions { /** * An action that commits the current data model to the database */ public static class CommitAction extends IlvAction { // The GanttChart or the ScheduleChart private IlvHierarchyChart gantt; public CommitAction(JdbcScheduleExample sample) { super("Commit", null, KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK), "Commit Gantt Model", "Commit Gantt Model Modifications to the Database"); setIcon(this.getClass(), "images/commit.png"); setEnabled(!sample.tryConnectionFailed); this.gantt = sample.getChart(); } /** * This method is called when the user wants to commit changes to the * database. */ Override public void actionPerformed(ActionEvent event) { IlvTableGanttModel ganttModel = (IlvTableGanttModel) gantt.getGanttModel(); IlvRowSetTableModel model = (IlvRowSetTableModel) ganttModel.getResourcesTableModel(); try { model.commit(); } catch (SyncProviderException e) { IlvSwingUtil.showErrorDialog(null, "A conflict happened when synchronizing,\n" + "please rollback your modifcations", e); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getReservationsTableModel(); try { model.commit(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getActivitiesTableModel(); try { model.commit(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } } } /** * An action that rollbacks the current modification of the data model */ public static class RollbackAction extends IlvAction { // The GanttChart or the ScheduleChart private IlvHierarchyChart gantt; public RollbackAction(JdbcScheduleExample sample) { super("Rollback", null, KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_DOWN_MASK), "Rollback Gantt Model", "Rollback Gantt Model Modifications"); setIcon(this.getClass(), "images/rollback.png"); setEnabled(!sample.tryConnectionFailed); this.gantt = sample.getChart(); } /** * This method is called when the user wants to rollback current * modifications. */ Override public void actionPerformed(ActionEvent event) { IlvTableGanttModel ganttModel = (IlvTableGanttModel) gantt.getGanttModel(); IlvRowSetTableModel model = (IlvRowSetTableModel) ganttModel.getResourcesTableModel(); try { model.rollback(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getReservationsTableModel(); try { model.rollback(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getActivitiesTableModel(); try { model.rollback(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } } } /** * An action that refresh the current data model with the database content */ public static class RefreshAction extends IlvAction { // The GanttChart or the ScheduleChart private IlvHierarchyChart gantt; public RefreshAction(JdbcScheduleExample sample) { super("Refresh Data", null, KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK), "Refresh Gantt Model", "Refresh Gantt Model from the Database"); setIcon(this.getClass(), "images/refresh.png"); setEnabled(!sample.tryConnectionFailed); this.gantt = sample.getChart(); } /** * This method is called when the user wants to refresh gantt model with * database content. */ Override public void actionPerformed(ActionEvent event) { IlvTableGanttModel ganttModel = (IlvTableGanttModel) gantt.getGanttModel(); IlvRowSetTableModel model = (IlvRowSetTableModel) ganttModel.getResourcesTableModel(); try { model.refreshRows(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getReservationsTableModel(); try { model.refreshRows(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } model = (IlvRowSetTableModel) ganttModel.getActivitiesTableModel(); try { model.refreshRows(); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } } } /** * An action that reinitialiazes the database tables */ public static class ReInitAction extends IlvAction { private JdbcScheduleExample sample; public ReInitAction(JdbcScheduleExample sample) { super("Reinitialize Database", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_DOWN_MASK), "Reinitialize Database Content", "Reinitialize Database Content with Initial Data"); setIcon(this.getClass(), "images/reinit.png"); setEnabled(!sample.tryConnectionFailed); this.sample = sample; } /** * This method is called when the user wants to reinitialize the database * tables with JViews Gantt distribution initial content. */ Override public void actionPerformed(ActionEvent event) { try { Connection con = DriverManager.getConnection(JdbcScheduleExample.databaseURL, JdbcScheduleExample.user, JdbcScheduleExample.passwd); InputStream stream = this.getClass().getResourceAsStream("script.sql"); BufferedReader breader = new BufferedReader(new InputStreamReader(stream)); Statement statement = con.createStatement(); while (breader.ready()) { statement.executeUpdate(breader.readLine()); } stream.close(); con.close(); // refresh the gantt model with the new database content sample.refreshAction.actionPerformed(null); } catch (SQLException e) { IlvSwingUtil.showErrorDialog(null, e); } catch (IOException e) { IlvSwingUtil.showErrorDialog(null, e); } } } /** * An action that reinitialiazes the database tables */ public static class ReConnectAction extends IlvAction { private JdbcScheduleExample sample; public ReConnectAction(JdbcScheduleExample sample) { super("Reconnect to the Database", null, KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_DOWN_MASK), "Reconnect to the Database", "Tries to reconnect to the Database"); setIcon(this.getClass(), "images/reconnect.png"); setEnabled(sample.tryConnectionFailed); this.sample = sample; } /** * This method is called when the user wants to reinitialize the database * tables with JViews Gantt distribution initial content. */ Override public void actionPerformed(ActionEvent event) { sample.retryConnection(); } } }