Résolution #25 Organisation éléments UML

This commit is contained in:
2020-12-09 22:43:01 +01:00
parent 8b0c32e074
commit 3a3390abf7
4 changed files with 290 additions and 71 deletions

View File

@@ -13,7 +13,7 @@ import java.util.Vector;
* Classe permettant la création de fenêtres pour la modification des arguments d'une méthode d'une classe. * Classe permettant la création de fenêtres pour la modification des arguments d'une méthode d'une classe.
* @author V.BOULANGER * @author V.BOULANGER
*/ */
public class ArgumentsPropertiesWindow extends JFrame { public class ArgumentsPropertiesWindow extends JDialog {
private UmlDiagram _umlDiagram; private UmlDiagram _umlDiagram;
private Method _method; private Method _method;
@@ -30,11 +30,12 @@ public class ArgumentsPropertiesWindow extends JFrame {
//Paramétrage de la fenêtre //Paramétrage de la fenêtre
this.setTitle("Edit arguments - " + m.getName()); this.setTitle("Edit arguments - " + m.getName());
this.setSize(new Dimension(800, 300)); this.setModal(true);
this.setSize(new Dimension(800, 350));
Image img = null; Image img = null;
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
this.setIconImage(img); this.setIconImage(img);
this.setResizable(true); this.setResizable(false);
this.setLocationRelativeTo(null); this.setLocationRelativeTo(null);
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
@@ -61,21 +62,53 @@ public class ArgumentsPropertiesWindow extends JFrame {
JPanel argumentsTableModifier = new JPanel(); JPanel argumentsTableModifier = new JPanel();
argumentsTableModifier.setLayout(new BoxLayout(argumentsTableModifier, BoxLayout.Y_AXIS)); argumentsTableModifier.setLayout(new BoxLayout(argumentsTableModifier, BoxLayout.Y_AXIS));
JButton addArgument = new JButton(" + "); JButton addArgument = new JButton(" + ");
addArgument.setToolTipText("Add a new argument.");
addArgument.addActionListener(new ActionListener() { addArgument.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
addArgument(); addArgument();
} }
}); });
argumentsTableModifier.add(addArgument);
JButton removeArgument = new JButton(" - "); JButton removeArgument = new JButton(" - ");
removeArgument.setToolTipText("Remove the selected argument.");
removeArgument.addActionListener(new ActionListener() { removeArgument.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
removeArgument(); removeArgument();
} }
}); });
argumentsTableModifier.add(addArgument);
argumentsTableModifier.add(removeArgument); argumentsTableModifier.add(removeArgument);
JButton upArgument = new JButton("");
upArgument.setToolTipText("Go up the selected attribute.");
upArgument.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _argumentsTable.getSelectedRow();
if(_method.upArgument(selected)){
save(false);
listArguments();
_argumentsTable.setRowSelectionInterval(selected - 1, selected - 1);
_umlDiagram.repaint();
}
}
});
argumentsTableModifier.add(upArgument);
JButton downArgument = new JButton("");
downArgument.setToolTipText("Go down the selected argument.");
downArgument.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _argumentsTable.getSelectedRow();
if(_method.downArgument(selected)){
save(false);
listArguments();
_argumentsTable.setRowSelectionInterval(selected + 1, selected + 1);
_umlDiagram.repaint();
}
}
});
argumentsTableModifier.add(downArgument);
argumentsPan.add(argumentsTableModifier); argumentsPan.add(argumentsTableModifier);
@@ -86,7 +119,7 @@ public class ArgumentsPropertiesWindow extends JFrame {
saveBtn.addActionListener(new ActionListener() { saveBtn.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
saveAndClose(); save(true);
} }
}); });
generalPanel.add(saveBtn); generalPanel.add(saveBtn);
@@ -103,6 +136,7 @@ public class ArgumentsPropertiesWindow extends JFrame {
* Ajoute un argument à la méthode sélectionnée et rafraîchit la liste des arguments. * Ajoute un argument à la méthode sélectionnée et rafraîchit la liste des arguments.
*/ */
public void addArgument(){ public void addArgument(){
save(false);
_method.addArgument(new Argument()); _method.addArgument(new Argument());
_classProp.getEditingClass().computeMinSize(); _classProp.getEditingClass().computeMinSize();
_umlDiagram.repaint(); _umlDiagram.repaint();
@@ -115,6 +149,7 @@ public class ArgumentsPropertiesWindow extends JFrame {
public void removeArgument(){ public void removeArgument(){
int i = _argumentsTable.getSelectedRow(); int i = _argumentsTable.getSelectedRow();
if(i != -1){ if(i != -1){
save(false);
_method.removeArgument(i); _method.removeArgument(i);
_classProp.getEditingClass().computeMinSize(); _classProp.getEditingClass().computeMinSize();
_umlDiagram.repaint(); _umlDiagram.repaint();
@@ -150,8 +185,9 @@ public class ArgumentsPropertiesWindow extends JFrame {
/** /**
* Sauvegarde les modifications pour la méthode en cours et ferme la fenêtre. * Sauvegarde les modifications pour la méthode en cours et ferme la fenêtre.
* @param quit Fermer la fenêtre après la sauvegarde.
*/ */
public void saveAndClose(){ public void save(boolean quit){
//Termine l'édition en sélectionnant une autre cellule //Termine l'édition en sélectionnant une autre cellule
_argumentsTable.editCellAt(0,0); _argumentsTable.editCellAt(0,0);
//Enregistrement des attributs //Enregistrement des attributs
@@ -164,6 +200,6 @@ public class ArgumentsPropertiesWindow extends JFrame {
//Rafraichissement de l'affichage //Rafraichissement de l'affichage
_classProp.getEditingClass().computeMinSize(); _classProp.getEditingClass().computeMinSize();
_umlDiagram.repaint(); _umlDiagram.repaint();
this.dispose(); if(quit) this.dispose();
} }
} }

View File

@@ -2,6 +2,7 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -292,6 +293,35 @@ public class Class implements Serializable {
this.computeMinSize(); this.computeMinSize();
} }
/**
* Faire remonter l'attribut sélectionné dans la liste.
* @param index L'index de l'attribut concerné.
* @return true if succeed, false if failed
*/
public boolean upAttribute(int index){
int attrNumber = this._attributes.size();
//Si au moins 2 attributs et que l'attribut n'est pas en 1ère position, on le remonte
if(index != 0 && attrNumber > 1){
Collections.swap(_attributes, index, index - 1);
return true;
}
return false;
}
/**
* Faire descendre l'attribut sélectionné dans la liste.
* @param index L'index de l'attribut sélectionné.
*/
public boolean downAttribute(int index){
int attrNumber = this._attributes.size();
//Si au moins 2 attributs et que l'attribut n'est pas en dernière position, on le descend
if(index != attrNumber - 1 && attrNumber > 1){
Collections.swap(_attributes, index, index + 1);
return true;
}
return false;
}
/** /**
* Récupère toutes les méthodes de la classe. * Récupère toutes les méthodes de la classe.
* @return Les méthodes de la classe. * @return Les méthodes de la classe.
@@ -335,6 +365,36 @@ public class Class implements Serializable {
this.computeMinSize(); this.computeMinSize();
} }
/**
* Faire remonter la méthode sélectionnée dans la liste.
* @param index L'index de la méthode concernée.
* @return true if succeed, false if failed
*/
public boolean upMethod(int index){
int methNumber = this._methods.size();
//Si au moins 2 méthodes et que la méthode n'est pas en 1ère position, on la remonte
if(index != 0 && methNumber > 1){
Collections.swap(_methods, index, index - 1);
return true;
}
return false;
}
/**
* Faire descendre la méthode sélectionnée dans la liste.
* @param index L'index de la méthode concernée.
* @return true if succeed, false if failed
*/
public boolean downMethod(int index){
int methNumber = this._methods.size();
//Si au moins 2 méthodes et que la méthode n'est pas en dernière position, on la descend
if(index != methNumber - 1 && methNumber > 1){
Collections.swap(_methods, index, index + 1);
return true;
}
return false;
}
/** /**
* Permet de redimensionner la classe vers le haut. * Permet de redimensionner la classe vers le haut.
* @param posY La position en ordonnée du curseur. * @param posY La position en ordonnée du curseur.

View File

@@ -12,7 +12,11 @@ import java.util.Vector;
* Classe permettant la création de fenêtres pour la modification des propriétés des classes. * Classe permettant la création de fenêtres pour la modification des propriétés des classes.
* @author V.BOULANGER * @author V.BOULANGER
*/ */
public class ClassPropertiesWindow extends JFrame { public class ClassPropertiesWindow extends JDialog {
public static int UPDATE_ATTR = 0;
public static int UPDATE_METH = 1;
private static int UPDATE_ALL = 2;
private UmlDiagram _umlDiagram; private UmlDiagram _umlDiagram;
private Class _class; private Class _class;
@@ -38,7 +42,8 @@ public class ClassPropertiesWindow extends JFrame {
//Paramétrage de la fenêtre //Paramétrage de la fenêtre
this.setTitle("Edit properties - " + a.getName()); this.setTitle("Edit properties - " + a.getName());
this.setSize(new Dimension(800, 300)); this.setModal(true);
this.setSize(new Dimension(800, 350));
Image img = null; Image img = null;
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { } try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
this.setIconImage(img); this.setIconImage(img);
@@ -49,7 +54,6 @@ public class ClassPropertiesWindow extends JFrame {
//Espace général de la fenêtre //Espace général de la fenêtre
JPanel generalPanel = new JPanel(); JPanel generalPanel = new JPanel();
generalPanel.setLayout(new BoxLayout(generalPanel, BoxLayout.Y_AXIS)); generalPanel.setLayout(new BoxLayout(generalPanel, BoxLayout.Y_AXIS));
generalPanel.setAlignmentX(LEFT_ALIGNMENT);
//Espace de modification du nom //Espace de modification du nom
JPanel namePan = new JPanel(); JPanel namePan = new JPanel();
@@ -79,22 +83,53 @@ public class ClassPropertiesWindow extends JFrame {
JPanel attributesTableModifier = new JPanel(); JPanel attributesTableModifier = new JPanel();
attributesTableModifier.setLayout(new BoxLayout(attributesTableModifier, BoxLayout.Y_AXIS)); attributesTableModifier.setLayout(new BoxLayout(attributesTableModifier, BoxLayout.Y_AXIS));
JButton addAttribute = new JButton(" + "); JButton addAttribute = new JButton(" + ");
addAttribute.setToolTipText("Add a new attribute.");
addAttribute.addActionListener(new ActionListener() { addAttribute.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
addAttribute(); addAttribute();
} }
}); });
attributesTableModifier.add(addAttribute);
JButton removeAttribute = new JButton(" - "); JButton removeAttribute = new JButton(" - ");
removeAttribute.setToolTipText("Remove the selected attribute.");
removeAttribute.addActionListener(new ActionListener() { removeAttribute.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
removeAttribute(); removeAttribute();
} }
}); });
attributesTableModifier.add(addAttribute);
attributesTableModifier.add(removeAttribute); attributesTableModifier.add(removeAttribute);
JButton upAttribute = new JButton("");
upAttribute.setToolTipText("Go up the selected attribute.");
upAttribute.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _attributesTable.getSelectedRow();
if(_class.upAttribute(selected)){
save(ClassPropertiesWindow.UPDATE_ATTR, false);
listAttributes();
_attributesTable.setRowSelectionInterval(selected - 1, selected - 1);
_umlDiagram.repaint();
}
}
});
attributesTableModifier.add(upAttribute);
JButton downAttribute = new JButton("");
downAttribute.setToolTipText("Go down the selected attribute.");
downAttribute.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _attributesTable.getSelectedRow();
if(_class.downAttribute(selected)){
save(ClassPropertiesWindow.UPDATE_ATTR, false);
listAttributes();
_attributesTable.setRowSelectionInterval(selected + 1, selected + 1);
_umlDiagram.repaint();
}
}
});
attributesTableModifier.add(downAttribute);
attributesPan.add(attributesTableModifier); attributesPan.add(attributesTableModifier);
generalPanel.add(attributesPan); generalPanel.add(attributesPan);
@@ -129,21 +164,65 @@ public class ClassPropertiesWindow extends JFrame {
JPanel methodsTableModifier = new JPanel(); JPanel methodsTableModifier = new JPanel();
methodsTableModifier.setLayout(new BoxLayout(methodsTableModifier, BoxLayout.Y_AXIS)); methodsTableModifier.setLayout(new BoxLayout(methodsTableModifier, BoxLayout.Y_AXIS));
JButton addMethod = new JButton(" + "); JButton addMethod = new JButton(" + ");
addMethod.setToolTipText("Add a new method.");
addMethod.addActionListener(new ActionListener() { addMethod.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
addMethod(); addMethod();
} }
}); });
methodsTableModifier.add(addMethod);
JButton generateConstructor = new JButton("Generate constructor");
generateConstructor.setToolTipText("Generate constructor for this class.");
generateConstructor.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Generate constructor");
}
});
methodsTableModifier.add(generateConstructor);
JButton removeMethod = new JButton(" - "); JButton removeMethod = new JButton(" - ");
removeMethod.setToolTipText("Remove the selected method.");
removeMethod.addActionListener(new ActionListener() { removeMethod.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
removeMethod(); removeMethod();
} }
}); });
methodsTableModifier.add(addMethod);
methodsTableModifier.add(removeMethod); methodsTableModifier.add(removeMethod);
JButton upMethod = new JButton("");
upMethod.setToolTipText("Go up the selected method.");
upMethod.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _methodsTable.getSelectedRow();
if(_class.upMethod(selected)){
save(ClassPropertiesWindow.UPDATE_METH, false);
listMethods();
_methodsTable.setRowSelectionInterval(selected - 1, selected - 1);
_umlDiagram.repaint();
}
}
});
methodsTableModifier.add(upMethod);
JButton downMethod = new JButton("");
downMethod.setToolTipText("Go down the selected method.");
downMethod.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selected = _methodsTable.getSelectedRow();
if(_class.downMethod(selected)){
save(ClassPropertiesWindow.UPDATE_METH, false);
listMethods();
_methodsTable.setRowSelectionInterval(selected + 1, selected + 1);
_umlDiagram.repaint();
}
}
});
methodsTableModifier.add(downMethod);
methodsPan.add(methodsTableModifier); methodsPan.add(methodsTableModifier);
@@ -154,7 +233,7 @@ public class ClassPropertiesWindow extends JFrame {
saveBtn.addActionListener(new ActionListener() { saveBtn.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
saveAndClose(); save(ClassPropertiesWindow.UPDATE_ALL, true);
} }
}); });
generalPanel.add(saveBtn); generalPanel.add(saveBtn);
@@ -188,6 +267,7 @@ public class ClassPropertiesWindow extends JFrame {
* Ajoute un attribut à la classe et rafraîchit la liste des attributs. * Ajoute un attribut à la classe et rafraîchit la liste des attributs.
*/ */
public void addAttribute(){ public void addAttribute(){
this.save(ClassPropertiesWindow.UPDATE_ATTR, false);
_class.addAttribute(new Attribute()); _class.addAttribute(new Attribute());
this.listAttributes(); this.listAttributes();
} }
@@ -196,6 +276,7 @@ public class ClassPropertiesWindow extends JFrame {
* Retire un attribut à la classe et rafraîchit la liste des attributs. * Retire un attribut à la classe et rafraîchit la liste des attributs.
*/ */
public void removeAttribute(){ public void removeAttribute(){
this.save(ClassPropertiesWindow.UPDATE_ATTR, false);
int i = _attributesTable.getSelectedRow(); int i = _attributesTable.getSelectedRow();
if(i != -1){ if(i != -1){
_class.removeAttribute(i); _class.removeAttribute(i);
@@ -271,6 +352,7 @@ public class ClassPropertiesWindow extends JFrame {
* Ajoute une méthode à la classe et rafraîchit la liste des méthodes. * Ajoute une méthode à la classe et rafraîchit la liste des méthodes.
*/ */
public void addMethod(){ public void addMethod(){
this.save(ClassPropertiesWindow.UPDATE_METH, false);
_class.addMethod(new Method()); _class.addMethod(new Method());
this.listMethods(); this.listMethods();
} }
@@ -279,6 +361,7 @@ public class ClassPropertiesWindow extends JFrame {
* Retire une méthode à la classe et rafraîchit la liste des méthodes. * Retire une méthode à la classe et rafraîchit la liste des méthodes.
*/ */
public void removeMethod(){ public void removeMethod(){
this.save(ClassPropertiesWindow.UPDATE_METH, false);
int i = _methodsTable.getSelectedRow(); int i = _methodsTable.getSelectedRow();
if(i != -1){ if(i != -1){
_class.removeMethod(i); _class.removeMethod(i);
@@ -358,8 +441,12 @@ public class ClassPropertiesWindow extends JFrame {
/** /**
* Sauvegarde les modifications pour la classe en cours et ferme la fenêtre. * Sauvegarde les modifications pour la classe en cours et ferme la fenêtre.
* @param focusUpdate Les éléments à sauvegarder.
* @param quit Fermer la fenêtre après la sauvegarde.
*/ */
public void saveAndClose(){ public void save(int focusUpdate, boolean quit){
//Si la sauvegarde des attributs est demandée
if(focusUpdate == ClassPropertiesWindow.UPDATE_ATTR || focusUpdate == ClassPropertiesWindow.UPDATE_ALL){
//Termine l'édition en sélectionnant une autre cellule //Termine l'édition en sélectionnant une autre cellule
_attributesTable.editCellAt(0,0); _attributesTable.editCellAt(0,0);
//Changement du nom de la classe //Changement du nom de la classe
@@ -388,6 +475,10 @@ public class ClassPropertiesWindow extends JFrame {
_class.getAttributes().get(i).setVolatile((boolean) vect.get(7)); _class.getAttributes().get(i).setVolatile((boolean) vect.get(7));
_class.getAttributes().get(i).setTransient((boolean) vect.get(8)); _class.getAttributes().get(i).setTransient((boolean) vect.get(8));
} }
}
//Si la sauvegarde des méthodes est demandée
if(focusUpdate == ClassPropertiesWindow.UPDATE_METH || focusUpdate == ClassPropertiesWindow.UPDATE_ALL){
//Enregistrement des méthodes //Enregistrement des méthodes
_methodsTable.editCellAt(0,0); _methodsTable.editCellAt(0,0);
for(int i = 0; i <= _methodModel.getRowCount()-1; i++){ for(int i = 0; i <= _methodModel.getRowCount()-1; i++){
@@ -413,10 +504,11 @@ public class ClassPropertiesWindow extends JFrame {
_class.getMethods().get(i).setVolatile((boolean) vect.get(8)); _class.getMethods().get(i).setVolatile((boolean) vect.get(8));
_class.getMethods().get(i).setTransient((boolean) vect.get(9)); _class.getMethods().get(i).setTransient((boolean) vect.get(9));
} }
}
//Rafraichissement de l'affichage //Rafraichissement de l'affichage
this._class.computeMinSize(); this._class.computeMinSize();
_umlDiagram.repaint(); _umlDiagram.repaint();
this.dispose(); if(quit) this.dispose();
} }
} }

View File

@@ -1,5 +1,6 @@
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -148,6 +149,36 @@ public class Method implements Serializable {
this._arguments.clear(); this._arguments.clear();
} }
/**
* Faire remonter l'argument sélectionné dans la liste.
* @param index L'index de l'argument concerné.
* @return true if succeed, false if failed
*/
public boolean upArgument(int index){
int argNumber = this._arguments.size();
//Si au moins 2 arguments et que l'argument n'est pas en 1ère position, on le remonte
if(index != 0 && argNumber > 1){
Collections.swap(_arguments, index, index - 1);
return true;
}
return false;
}
/**
* Faire descendre l'argument sélectionné dans la liste.
* @param index L'index de l'argument concerné.
* @return true if succeed, false if failed
*/
public boolean downArgument(int index){
int argNumber = this._arguments.size();
//Si au moins 2 arguments et que l'argument n'est pas en dernière position, on le descend
if(index != argNumber - 1 && argNumber > 1){
Collections.swap(_arguments, index, index + 1);
return true;
}
return false;
}
/** /**
* Retourne si l'attribut est statique ou non. * Retourne si l'attribut est statique ou non.
* @return true : l'attribut est statique, false: l'attribut n'est pas statique. * @return true : l'attribut est statique, false: l'attribut n'est pas statique.