import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.*; import java.io.*; /** * La classe principale du logiciel AppThinker. * @author V.BOULANGER */ public class AppThinker { //JavaDoc tags : @param @return @throws @author @version @see @since @serial @deprecated private static Project _project; private static AppThinkerWindow _window; /** * La méthode principale exécutée * @param args Les arguments de la méthode principale. */ public static void main(String[] args) { _window = new AppThinkerWindow(); } /** * Récupère la fenêtre de l'application * @return La fenêtre de l'application. */ public static AppThinkerWindow getWindow(){ return _window; } /** * Crée un nouveau Projet. */ public static void newProject(){ _project = new Project(); displayProject(); _window.getStatusbar().setFileMessage(_project.getName()); _window.setProject(_project); _project.getUmlDiagram().displayDiagram(); _window.getStatusbar().setStatusMessage("The project was created."); } /** * Opère les modifications nécessaires sur la fenêtre pour accueillir le projet. */ public static void displayProject(){ _window.setTitle((_project.getPath() == null) ? "AppThinker - " + _project.getName() + "*" : "AppThinker - " + _project.getName() + " (" + _project.getPath() + ")"); _window.getMenubar().setProjectEnable(true); _project.getUmlDiagram().getToolbar().setEnabled(true); } /** * Ouvre un projet existant dans la fenêtre. */ public static void openProject(){ FileNameExtensionFilter fileFilter = new FileNameExtensionFilter("AppThinker project", "appt"); JFileChooser dialog = new JFileChooser(); dialog.setDialogType(JFileChooser.OPEN_DIALOG); dialog.setDialogTitle("Open an AppThinker project"); dialog.setFileFilter(fileFilter); dialog.setAcceptAllFileFilterUsed(false); if(dialog.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){ ObjectInputStream ois = null; Project project = null; try { final FileInputStream fichier = new FileInputStream(dialog.getSelectedFile().getPath()); ois = new ObjectInputStream(fichier); project = (Project) ois.readObject(); } catch (final java.io.IOException e) { e.printStackTrace(); } catch (final ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (ois != null) { ois.close(); _project = project; _window.getStatusbar().setFileMessage(_project.getName()); _window.setProject(_project); _project.getUmlDiagram().displayDiagram(); displayProject(); } } catch (final IOException ex) { ex.printStackTrace(); } } } } /** * Sauvegarde le projet en cours. */ public static void saveProject(){ //Si le projet ne contient pas de path, on demande à l'enregistrer dans un emplacement FileNameExtensionFilter fileFilter = new FileNameExtensionFilter("AppThinker project", "appt"); String path = _project.getPath(); if(path == null){ JFileChooser dialog = new JFileChooser(); dialog.setDialogTitle("Save an AppThinker project"); dialog.setDialogType(JFileChooser.SAVE_DIALOG); dialog.setFileFilter(fileFilter); dialog.setAcceptAllFileFilterUsed(false); if(dialog.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){ String filePath = dialog.getSelectedFile().getPath(); path = (filePath.contains(".appt")) ? filePath : filePath + ".appt"; } } //On serialize le projet dans un fichier _project.setPath(path); ObjectOutputStream oos = null; try { final FileOutputStream fichier = new FileOutputStream(path); oos = new ObjectOutputStream(fichier); oos.writeObject(_project); oos.flush(); } catch (final java.io.IOException e) { e.printStackTrace(); } finally { try { if (oos != null) { oos.flush(); oos.close(); displayProject(); _window.getStatusbar().setStatusMessage("The project was saved successfully."); } } catch (final IOException ex) { ex.printStackTrace(); } } } /** * Sauvegarde le projet en cours à un autre emplacement. */ public static void saveAsProject(){ //Enregistrer le projet sous un autre emplacement FileNameExtensionFilter fileFilter = new FileNameExtensionFilter("AppThinker project", "appt"); String path = _project.getPath(); JFileChooser dialog = new JFileChooser(); dialog.setDialogTitle("Save an AppThinker project"); dialog.setDialogType(JFileChooser.SAVE_DIALOG); dialog.setFileFilter(fileFilter); dialog.setAcceptAllFileFilterUsed(false); if(dialog.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){ String filePath = dialog.getSelectedFile().getPath(); path = (filePath.contains(".appt")) ? filePath : filePath + ".appt"; } //On serialize le projet dans un fichier _project.setPath(path); ObjectOutputStream oos = null; try { final FileOutputStream fichier = new FileOutputStream(path); oos = new ObjectOutputStream(fichier); oos.writeObject(_project); oos.flush(); } catch (final java.io.IOException e) { e.printStackTrace(); } finally { try { if (oos != null) { oos.flush(); oos.close(); displayProject(); _window.getStatusbar().setStatusMessage("The project was saved on a new location."); } } catch (final IOException ex) { ex.printStackTrace(); } } } /** * Ferme le projet en cours. */ public static void closeProject(){ _window.setTitle("AppThinker"); _window.getMenubar().setProjectEnable(false); _project.getUmlDiagram().getToolbar().setEnabled(false); _window.getStatusbar().setStatusMessage("The project has been closed."); _window.getStatusbar().setFileMessage("No project opened."); _window.clearProject(); _project = null; } /** * Récupère le projet en cours. * @return Le projet en cours. */ public static Project getProject(){ return _project; } }