diff --git a/src/fr/sae/JSonInspector/Graphics/Frame.java b/src/fr/sae/JSonInspector/Graphics/Frame.java index 0513cc0..dc04fd0 100644 --- a/src/fr/sae/JSonInspector/Graphics/Frame.java +++ b/src/fr/sae/JSonInspector/Graphics/Frame.java @@ -1,149 +1,211 @@ -package fr.sae.JSonInspector.Graphics; - -import fr.sae.JSonInspector.Exception.JsonSyntaxException; -import fr.sae.JSonInspector.Main; -import fr.sae.JSonInspector.Settings.Parameters; -import fr.sae.JSonInspector.Storage.Tree; - -import javax.swing.*; -import java.awt.*; -import java.io.FileNotFoundException; -import java.net.MalformedURLException; -import java.net.URL; - -public class Frame extends JFrame { - private static final Dimension DEFAULT_FRAME_SIZE = new Dimension(800, 600); - private static final Dimension MINIMUM_FRAME_SIZE = new Dimension(600, 500); - private final CardLayout cards = new CardLayout(); - private boolean showTab = true; - private JPanel secondCard; - private GraphicFile file; - private Tree tree; - - public Frame() { - super("Inspecteur JSON"); - init(); - this.setVisible(true); - } - - private void init() { - this.setSize(DEFAULT_FRAME_SIZE); - this.setDefaultCloseOperation(EXIT_ON_CLOSE); - this.setMinimumSize(MINIMUM_FRAME_SIZE); - this.setLayout(cards); - this.add(firstCard()); - // this.add(secondCard()); - cards.first(this.getContentPane()); - } - - private JPanel firstCard() { - GridBagLayout layout = new GridBagLayout(); - GridBagConstraints gbc = new GridBagConstraints(); - JTextField textField = new JTextField("file:C:\\Users\\Elève\\Desktop\\temp\\jason.json", 30); - JButton button = new JButton("Valider"); - button.addActionListener((event) -> validationAction(textField)); - JPanel panel = new JPanel(); - panel.setLayout(layout); - - gbc.insets = new Insets(10, 10, 10, 10); - gbc.gridx = 0; - gbc.gridy = 0; - JLabel label = new JLabel("URL :"); - label.setForeground(Parameters.DEFAULT_TEXT_COLOR); - panel.add(label, gbc); - - gbc.gridx = 1; - panel.add(textField, gbc); - - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 2; - panel.add(button, gbc); - - panel.setBackground(Parameters.IHM_COLOR); - return panel; - } - - private JPanel secondCard() { - file = new GraphicFile(this, tree); - return initSecondCard(file); - } - - private JPanel secondCard(GraphicFile file) { - this.file = file; - return initSecondCard(file); - } - - private JPanel initSecondCard(GraphicFile file) { - JButton unfoldButton = new JButton("Tout déplier"); - JButton retreatButton = new JButton("Tout replier"); - JButton backButton = new JButton("Retour"); - JPanel mainPanel = new JPanel(), southPanel = new JPanel(); - JScrollPane scroll = new JScrollPane(); - mainPanel.setLayout(new BorderLayout()); - - southPanel.setBackground(Parameters.IHM_COLOR); - southPanel.add(backButton); - backButton.addActionListener((event) -> backAction(mainPanel)); - southPanel.add(unfoldButton); - unfoldButton.addActionListener((event) -> unfoldAction()); - southPanel.add(retreatButton); - retreatButton.addActionListener((event) -> retreatAction()); - southPanel.add(new JButton("convertir en PHP")); - - mainPanel.add(file); - mainPanel.add(southPanel, BorderLayout.SOUTH); - mainPanel.add(scroll); - - scroll.setViewportView(file); - return mainPanel; - } - - private void unfoldAction() { - file.showAll(); - repaintFile(); - } - - private void retreatAction() { - file.retreatAll(); - repaintFile(); - } - - public void repaintFile() { - file = new GraphicFile(this, file.getLines()); - this.remove(secondCard); - secondCard = secondCard(file); - this.add(secondCard); - cards.last(this.getContentPane()); - } - - private void validationAction(JTextField field) { - try { - URL url = new URL(field.getText()); - String file = Main.getJsonInOneLine(url); - - if (file.length() <= 2) { - throw new FileNotFoundException(); - } - - tree = new Tree(file); - secondCard = secondCard(); - this.add(secondCard); - cards.last(this.getContentPane()); - - } catch (MalformedURLException e) { - JOptionPane.showMessageDialog(this, "URL invalide", "Error", JOptionPane.ERROR_MESSAGE); - - } catch (JsonSyntaxException j) { - JOptionPane.showMessageDialog(this, "Erreur de syntax dans le fichier", "Error", JOptionPane.ERROR_MESSAGE); - - } catch (FileNotFoundException f) { - JOptionPane.showMessageDialog(this, "Impossible trouver le fichier", "Error", JOptionPane.ERROR_MESSAGE); - } - } - - private void backAction(JPanel panel) { - this.remove(panel); - cards.first(this.getContentPane()); - } -} +package JsonInspector.Graphics; + +import JsonInspector.Exception.JsonSyntaxException; +import JsonInspector.Main; +import JsonInspector.Settings.Parameters; +import JsonInspector.Storage.Tree; + +import javax.swing.*; +import java.awt.*; +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Frame extends JFrame { + private static final Dimension DEFAULT_FRAME_SIZE = new Dimension(800, 600); + private static final Dimension MINIMUM_FRAME_SIZE = new Dimension(600, 500); + private final CardLayout cards = new CardLayout(); + private boolean php = false; + private JPanel secondCard; + private GraphicFile file; + private Tree tree; + + + public Frame() { + super("Inspecteur JSON"); + init(); + this.setVisible(true); + } + + + private void init() { + this.setSize(DEFAULT_FRAME_SIZE); + this.setDefaultCloseOperation(EXIT_ON_CLOSE); + this.setMinimumSize(MINIMUM_FRAME_SIZE); + this.setLayout(cards); + this.add(firstCard()); + //this.add(secondCard()); + cards.first(this.getContentPane()); + } + + + /** + * Créer le premier panel où l'on entre l'URL du fichier + * @return le panel créé + */ + private JPanel firstCard() { + GridBagLayout layout = new GridBagLayout(); + GridBagConstraints gbc = new GridBagConstraints(); + JTextField textField = new JTextField(30); + JButton button = new JButton("Valider"); + button.addActionListener((event) -> validationAction(textField)); + JPanel panel = new JPanel(); + panel.setLayout(layout); + + gbc.insets = new Insets(10, 10, 10, 10); + gbc.gridx = 0; + gbc.gridy = 0; + JLabel label = new JLabel("URL :"); + label.setForeground(Parameters.DEFAULT_TEXT_COLOR); + panel.add(label, gbc); + + gbc.gridx = 1; + panel.add(textField, gbc); + + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 2; + panel.add(button, gbc); + + panel.setBackground(Parameters.IHM_COLOR); + return panel; + } + + + /** + * Créer le deuxième panel où l'on voit le fichier + * @return le panel créé + */ + private JPanel secondCard() { + file = new GraphicFile(this, tree, php); + return initSecondCard(file); + } + + + /** + * Créer le deuxième panel où l'on voit le fichier + * @return le panel créé + */ + private JPanel secondCard(GraphicFile file) { + this.file = file; + return initSecondCard(file); + } + + + private JPanel initSecondCard(GraphicFile file) { + JButton unfoldButton = new JButton("Tout déplier"); + JButton retreatButton = new JButton("Tout replier"); + JButton convertButton = new JButton(); + JButton backButton = new JButton("Retour"); + JPanel mainPanel = new JPanel(), southPanel = new JPanel(); + JScrollPane scroll = new JScrollPane(); + mainPanel.setLayout(new BorderLayout()); + + if (php) { + convertButton.setText("Convertir en JSON"); + } else { + convertButton.setText("Convertir en PHP"); + } + + southPanel.setBackground(Parameters.IHM_COLOR); + southPanel.add(backButton); + backButton.addActionListener((event) -> backAction(mainPanel)); + southPanel.add(unfoldButton); + unfoldButton.addActionListener((event) -> unfoldAction()); + southPanel.add(retreatButton); + retreatButton.addActionListener((event) -> retreatAction()); + southPanel.add(convertButton); + convertButton.addActionListener((event) -> convertAction()); + + mainPanel.add(file); + mainPanel.add(southPanel, BorderLayout.SOUTH); + mainPanel.add(scroll); + + scroll.setViewportView(file); + return mainPanel; + } + + + /** + * Passe de la version PHP du fichier à la version JSON et vice-versa + */ + private void convertAction() { + if (!php) { + php = true; + } else { + php = false; + } + file = new GraphicFile(this, tree, php); + repaintFile(); + } + + + /** + * Déplit l'élément cliqué + */ + private void unfoldAction() { + file.showAll(); + repaintFile(); + } + + + /** + * Replit l'élément cliqué + */ + private void retreatAction() { + file.retreatAll(); + repaintFile(); + } + + + /** + * Met à jour le fichier + */ + public void repaintFile() { + file = new GraphicFile(this, file.getLines()); + this.remove(secondCard); + secondCard = secondCard(file); + this.add(secondCard); + cards.last(this.getContentPane()); + } + + + /** + * Passe du premier panel au second + * @param field le champ contenant l'URL + */ + private void validationAction(JTextField field) { + try { + URL url = new URL(field.getText()); + String file = Main.getJsonInOneLine(url); + + if (file.length() <= 2) { + throw new FileNotFoundException(); + } + + tree = new Tree(file); + secondCard = secondCard(); + this.add(secondCard); + cards.last(this.getContentPane()); + + } catch (MalformedURLException e) { + JOptionPane.showMessageDialog(this, "URL invalide", "Error", JOptionPane.ERROR_MESSAGE); + + } catch (JsonSyntaxException j) { + JOptionPane.showMessageDialog(this, "Erreur de syntax dans le fichier", "Error", JOptionPane.ERROR_MESSAGE); + + } catch (FileNotFoundException f) { + JOptionPane.showMessageDialog(this, "Impossible trouver le fichier", "Error", JOptionPane.ERROR_MESSAGE); + } + } + + + /** + * Passe du second panel au premier + * @param panel + */ + private void backAction(JPanel panel) { + this.remove(panel); + cards.first(this.getContentPane()); + } +} diff --git a/src/fr/sae/JSonInspector/Graphics/GraphicFile.java b/src/fr/sae/JSonInspector/Graphics/GraphicFile.java index 76de8db..465811f 100644 --- a/src/fr/sae/JSonInspector/Graphics/GraphicFile.java +++ b/src/fr/sae/JSonInspector/Graphics/GraphicFile.java @@ -1,275 +1,406 @@ -package fr.sae.JSonInspector.Graphics; - -import fr.sae.JSonInspector.Settings.Parameters; -import fr.sae.JSonInspector.Storage.Node; -import fr.sae.JSonInspector.Storage.Tree; -import fr.sae.JSonInspector.Storage.Type; -import fr.sae.JSonInspector.Storage.Value; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -public class GraphicFile extends JPanel { - private final GridBagConstraints gbc = new GridBagConstraints(); - private final JPanel alignementPanel = new JPanel(); - private final Frame frame; - private ArrayList lines; - private Node firstNode; - - public GraphicFile(Frame frame, Tree tree) { - super(); - firstNode = tree.getFirstNode(); - init(); - lines = new ArrayList<>(); - this.frame = frame; - createFileRecursive(firstNode, 0, false); - // displayAllLines(); - displayLines(); - } - - public GraphicFile(Frame frame, ArrayList lines) { - super(); - init(); - this.frame = frame; - this.lines = lines; - // displayAllLines(); - displayLines(); - } - - private void init() { - this.setBackground(Parameters.BACKGROUND_COLOR); - this.setLayout(new FlowLayout(FlowLayout.LEFT)); - gbc.fill = GridBagConstraints.BOTH; - gbc.anchor = GridBagConstraints.WEST; - alignementPanel.setLayout(new GridBagLayout()); - this.add(alignementPanel); - } - - private void createFileRecursive(Node node, int depth, boolean virgule) { - String indentation = ""; - - for (int i = 0; i < depth; i++) { - indentation += Parameters.IHM_INDENTATION; - } - - if (node.isObject() || node.isElement()) { - createObjectElement(node, depth, indentation, virgule); - - } else if (node.isArray()) { - createArray(node, depth, indentation, virgule); - - } else if (node.isPair()) { - createPair(node, depth, indentation, virgule); - } - } - - private void createPair(Node node, int depth, String indentation, boolean virgule) { - Line line = new Line(node, depth); - line.add(indentation); - line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); - line.add(": "); - - if (node.getSize() != 0) { - createValue(line, node.get(0)); - } else { - line.add("null", Parameters.OTHER_COLOR); - } - - if (virgule) { - line.add(","); - } - - lines.add(line); - } - - private void createObjectElement(Node node, int depth, String indentation, boolean virgule) { - Line line = new Line(node, depth); - line.add(indentation); - - if (0 < depth && 0 < node.getSize()) { - line.retreat(); - } - - if (node.getType() == Type.ELEMENT) { - line.add("{"); - } else { - line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); - line.add(": {"); - } - - if (node.getSize() == 0) { - if (virgule) { - line.add(" },"); - } else { - line.add(" }"); - } - lines.add(line); - - } else { - line.addMouseListener(new ArrayObjectListener(line, frame)); - lines.add(line); - callNextNodes(node, depth); - Line endLine = new Line(node, indentation + "}", depth); - endLine.setClosingElement(); - - if (virgule) { - endLine.add(","); - } - - lines.add(endLine); - } - } - - private void createArray(Node node, int depth, String indentation, boolean virgule) { - Line line = new Line(node, depth); - line.add(indentation); - - if (0 < depth && 0 < node.getSize()) { - line.retreat(); - } - - line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); - line.add(": ["); - - if (node.getSize() == 0) { - if (virgule) { - line.add(" ],"); - } else { - line.add(" ]"); - } - lines.add(line); - } else { - line.addMouseListener(new ArrayObjectListener(line, frame)); - lines.add(line); - - for (int i = 0; i < node.getSize(); i++) { - Line valueLine = new Line(new Node("", Type.NULL), depth + 1); - - if (node.get(i).isNode()) { - callNextNodes(node, depth); - } else { - String valueString = indentation + Parameters.IHM_INDENTATION; - valueLine.add(valueString, Parameters.STRING_COLOR); - createValue(valueLine, node.get(i)); - - if (i != node.getSize() - 1) { - valueLine.add(","); - } - } - - lines.add(valueLine); - } - - Line endLine = new Line(node, indentation + "]", depth); - endLine.setClosingElement(); - - if (virgule) { - endLine.add(","); - } - - lines.add(endLine); - } - } - - private void createValue(Line line, Value value) { - if (value.isNumber()) { - line.add("" + value.getValue(), Parameters.NUMBER_COLOR); - } else if (value.isString()) { - line.add("\"" + value.getValue() + "\"", Parameters.STRING_COLOR); - } else { - line.add("" + value.getValue(), Parameters.OTHER_COLOR); - } - } - - private void callNextNodes(Node node, int depth) { - boolean virgule; - - for (int i = 0; i < node.getSize(); i++) { - // si l'élément afficher est le dernier à son niveau "virgule" est faux - // donc il n'y aura pas de virgule en fin ligne - virgule = i != node.getSize() - 1; - - if (node.get(i).isNode()) { - createFileRecursive((Node) node.get(i).getValue(), depth + 1, virgule); - } - } - } - - private void displayLines() { - boolean inArrayObject = false, array, object; - Node openedArrayObject = lines.get(0).getNode(); - removeAllClosingLabel(); - - for (int i = 0; i < lines.size(); i++) { - if (!inArrayObject) { - array = lines.get(i).getNode().isArray(); - object = lines.get(i).getNode().isObject(); - - // Vérifie si le noeud est du type ARRAY ou du type OBJECT et s'il doit être - // affiché - if ((array || object) && !lines.get(i).isShow()) { - inArrayObject = true; - openedArrayObject = lines.get(i).getNode(); - - if (openedArrayObject.isArray()) { - displayOneHidedLine(i, Parameters.ARRAY_CLOSING); - } else { - displayOneHidedLine(i, Parameters.OBJECT_ELEMENT_CLOSING); - } - - // Sinon affiche la ligne normalement - } else { - displayOneLine(i); - } - - } else if (lines.get(i).getNode().equals(openedArrayObject)) { - inArrayObject = false; - } - } - } - - private void displayOneLine(int index) { - gbc.gridy = index; - - gbc.gridx = 0; - alignementPanel.add(lines.get(index), gbc); - } - - private void displayOneHidedLine(int index, String endOfLine) { - gbc.gridy = index; - - gbc.gridx = 0; - lines.get(index).add(endOfLine); - alignementPanel.add(lines.get(index), gbc); - } - - public void showAll() { - for (Line line : lines) { - if (!line.isShow()) { - line.removeClosingLabel(); - } - line.unfold(); - } - } - - public void retreatAll() { - for (Line line : lines) { - if (line.getNode().isArrayObjectElement()) { - if (0 < line.getDepth() && 0 < line.getNode().getSize() && !line.isClosingElement()) { - line.retreat(); - } - } - } - } - - private void removeAllClosingLabel() { - for (Line line : lines) { - line.removeClosingLabel(); - } - } - - public ArrayList getLines() { - return lines; - } -} +package JsonInspector.Graphics; + +import JsonInspector.Settings.Parameters; +import JsonInspector.Storage.Node; +import JsonInspector.Storage.Tree; +import JsonInspector.Storage.Type; +import JsonInspector.Storage.Value; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; + +public class GraphicFile extends JPanel { + private final GridBagConstraints gbc = new GridBagConstraints(); + private final JPanel alignementPanel = new JPanel(); + private final Frame frame; + private final ArrayList lines; + private boolean php = false; + private Node firstNode; + + + public GraphicFile(Frame frame, Tree tree, boolean php) { + super(); + this.php = php; + firstNode = tree.getFirstNode(); + init(); + lines = new ArrayList<>(); + this.frame = frame; + createFileRecursive(firstNode, 0, false); + displayLines(); + } + + + public GraphicFile(Frame frame, ArrayList lines) { + super(); + init(); + this.frame = frame; + this.lines = lines; + //displayAllLines(); + displayLines(); + } + + /** + * initialise l'objet (permet de ne pas répéter de code dans les constructeurs) + */ + private void init() { + this.setBackground(Parameters.BACKGROUND_COLOR); + this.setLayout(new FlowLayout(FlowLayout.LEFT)); + gbc.fill = GridBagConstraints.BOTH; + gbc.anchor = GridBagConstraints.WEST; + alignementPanel.setLayout(new GridBagLayout()); + this.add(alignementPanel); + } + + + /** + * parcours de manière récursive l'arbre pour créer les lignes + * @param node le noeud à afficher + * @param depth la profondeur dans l'arbre + * @param virgule détermine si une virgule doit être affichée à la fin + */ + private void createFileRecursive(Node node, int depth, boolean virgule) { + String indentation = ""; + + for (int i = 0; i < depth; i++) { + indentation += Parameters.IHM_INDENTATION; + } + + if (node.isObject() || node.isElement()) { + createObjectElement(node, depth, indentation, virgule); + + } else if (node.isArray()) { + createArray(node, depth, indentation, virgule); + + } else if (node.isPair()) { + createPair(node, depth, indentation, virgule); + } + } + + + /** + * Créé une ligne de type 'PAIR' + * @param node le noeud a afficher + * @param depth la profondeur dans l'arbre + * @param indentation l'indentation du père + * @param virgule détermine si une virgule doit être affichée à la fin + */ + private void createPair(Node node, int depth, String indentation, boolean virgule) { + Line line = new Line(node, depth); + line.add(indentation); + line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); + if (!php) { + line.add(": "); + } else { + line.add(" => "); + } + + + if (node.getSize() != 0) { + createValue(line, node.get(0)); + } else { + line.add("null" , Parameters.OTHER_COLOR); + } + + if (virgule) { + line.add(","); + } + + lines.add(line); + } + + + /** + * Créé une ligne de type 'OBJECT' ou 'ELEMENT' + * @param node le noeud a afficher + * @param depth la profondeur dans l'arbre + * @param indentation l'indentation du père + * @param virgule détermine si une virgule doit être affichée à la fin + */ + private void createObjectElement(Node node, int depth, String indentation, boolean virgule) { + Line line = new Line(node, depth); + line.add(indentation); + + if (0 < depth && 0 < node.getSize()) { + line.retreat(); + } + + if (node.getType() == Type.ELEMENT) { + if (!php) { + line.add("{"); + } else { + line.add("("); + } + + } else { + line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); + if (!php) { + line.add(": {"); + } else { + line.add(" => ("); + } + + } + + if (node.getSize() == 0) { + if (virgule) { + if (!php) { + line.add(" },"); + } else { + line.add(" ),"); + } + + } else { + if (!php) { + line.add(" }"); + } else { + line.add(" )"); + } + + } + lines.add(line); + + } else { + line.addMouseListener(new ArrayObjectListener(line, frame)); + lines.add(line); + callNextNodes(node, depth); + Line endLine; + + if (!php) { + endLine = new Line(node, indentation + "}", depth); + } else { + endLine = new Line(node, indentation + ")", depth); + } + + endLine.setClosingElement(); + + if (virgule) { + endLine.add(","); + } + + lines.add(endLine); + } + } + + + /** + * Créé une ligne de type 'ARRAY' + * @param node le noeud a afficher + * @param depth la profondeur dans l'arbre + * @param indentation l'indentation du père + * @param virgule détermine si une virgule doit être affichée à la fin + */ + private void createArray(Node node, int depth, String indentation, boolean virgule) { + Line line = new Line(node, depth); + line.add(indentation); + + if (0 < depth && 0 < node.getSize()) { + line.retreat(); + } + + line.add("\"" + node.getName() + "\"", Parameters.KEY_COLOR); + if (!php) { + line.add(": ["); + } else { + line.add(" => ("); + } + + + if (node.getSize() == 0) { + if (virgule) { + if (!php) { + line.add(" ],"); + } else { + line.add(" ),"); + } + + } else { + if (!php) { + line.add(" ]"); + } else { + line.add(" )"); + } + } + lines.add(line); + } else { + line.addMouseListener(new ArrayObjectListener(line, frame)); + lines.add(line); + + for (int i = 0; i < node.getSize(); i++) { + Line valueLine = new Line(new Node("", Type.NULL), depth + 1); + + if (node.get(i).isNode()) { + callNextNodes(node, depth); + } else { + String valueString = indentation + Parameters.IHM_INDENTATION; + valueLine.add(valueString, Parameters.STRING_COLOR); + createValue(valueLine, node.get(i)); + + if (i != node.getSize() - 1) { + valueLine.add(","); + } + } + + lines.add(valueLine); + } + + Line endLine; + if (!php) { + endLine = new Line(node, indentation + "]", depth); + } else { + endLine = new Line(node, indentation + ")", depth); + } + endLine.setClosingElement(); + + if (virgule) { + endLine.add(","); + } + + lines.add(endLine); + } + } + + + /** + * Affiche la valeur d'un noeud + * @param line la ligne sur laquelle afficher la valeur + * @param value la valeur à afficher + */ + private void createValue(Line line, Value value) { + if (value.isNumber()) { + line.add("" + value.getValue(), Parameters.NUMBER_COLOR); + } else if (value.isString()) { + line.add("\"" + value.getValue() + "\"", Parameters.STRING_COLOR); + } else { + line.add("" + value.getValue(), Parameters.OTHER_COLOR); + } + } + + + /** + * Appelle les fils d'un noeud père + * @param node le noeud père + * @param depth la profondeur dans l'arbre + */ + private void callNextNodes(Node node, int depth) { + boolean virgule; + + for (int i = 0; i < node.getSize(); i++) { + // si l'élément afficher est le dernier à son niveau "virgule" est faux + // donc il n'y aura pas de virgule en fin ligne + virgule = i != node.getSize() - 1; + + if (node.get(i).isNode()) { + createFileRecursive((Node) node.get(i).getValue(), depth + 1, virgule); + } + } + } + + + /** + * Affiche les lignes dans l'ordre en prenant compte de leur statut de visibilité + */ + private void displayLines() { + boolean inArrayObject = false, array, object; + Node openedArrayObject = lines.get(0).getNode(); + removeAllClosingLabel(); + + for (int i = 0; i < lines.size(); i++) { + if (!inArrayObject) { + array = lines.get(i).getNode().isArray(); + object = lines.get(i).getNode().isObject(); + + // Vérifie si le noeud est du type ARRAY ou du type OBJECT et s'il doit être affiché + if ((array || object) && !lines.get(i).isShow()) { + inArrayObject = true; + openedArrayObject = lines.get(i).getNode(); + + if (openedArrayObject.isArray()) { + displayOneHidedLine(i, Parameters.ARRAY_CLOSING); + } else { + displayOneHidedLine(i, Parameters.OBJECT_ELEMENT_CLOSING); + } + + //Sinon affiche la ligne normalement + } else { + displayOneLine(i); + } + + } else if (lines.get(i).getNode().equals(openedArrayObject)) { + inArrayObject = false; + } + } + } + + + /** + * Affiche une ligne normalement + * @param index le numéro de la ligne + */ + private void displayOneLine(int index) { + gbc.gridy = index; + + gbc.gridx = 0; + alignementPanel.add(lines.get(index), gbc); + } + + + /** + * Affiche un ligne cacher + * @param index le numéro de la ligne + * @param endOfLine le texte à afficher en fin de ligne + */ + private void displayOneHidedLine(int index, String endOfLine) { + gbc.gridy = index; + + gbc.gridx = 0; + lines.get(index).add(endOfLine); + alignementPanel.add(lines.get(index), gbc); + } + + + /** + * Change tous les statuts de visibilités à vrai + */ + public void showAll() { + for (Line line : lines) { + if (!line.isShow()) { + line.removeClosingLabel(); + } + line.unfold(); + } + } + + + /** + * Change tous les statuts de visibilité à faux pour les éléments que l'on peut cacher + */ + public void retreatAll() { + for (Line line : lines) { + if (line.getNode().isArrayObjectElement()) { + if (0 < line.getDepth() && 0 < line.getNode().getSize() && !line.isClosingElement()) { + line.retreat(); + } + } + } + } + + + /** + * Enlève tous les caractères fermants + */ + private void removeAllClosingLabel() { + for(Line line : lines) { + line.removeClosingLabel(); + } + } + + + /** + * + * @return la liste des lignes du fichier + */ + public ArrayList getLines() { + return lines; + } +} diff --git a/src/fr/sae/JSonInspector/Graphics/Line.java b/src/fr/sae/JSonInspector/Graphics/Line.java index 8b9b9d6..d6630a6 100644 --- a/src/fr/sae/JSonInspector/Graphics/Line.java +++ b/src/fr/sae/JSonInspector/Graphics/Line.java @@ -1,83 +1,125 @@ -package fr.sae.JSonInspector.Graphics; - -import fr.sae.JSonInspector.Graphics.MyJLabel; -import fr.sae.JSonInspector.Graphics.MyJPanel; -import fr.sae.JSonInspector.Storage.Node; - -import java.awt.*; - -public class Line extends MyJPanel { - private boolean show = true; - private final int depth; - private final Node node; - private MyJLabel lastElement; - private boolean closingElement = false; - - public Line(Node node, int depth) { - super(); - this.node = node; - this.depth = depth; - } - - public Line(Node node, String str, int depth) { - super(); - this.add(new MyJLabel(str)); - this.node = node; - this.depth = depth; - } - - public Line(Node node, String str, Color color, int depth) { - super(); - this.add(new MyJLabel(str, color)); - this.node = node; - this.depth = depth; - } - - public void add(String string) { - lastElement = new MyJLabel(string); - this.add(lastElement); - } - - public void add(String string, Color color) { - lastElement = new MyJLabel(string, color); - this.add(lastElement); - } - - public Node getNode() { - return node; - } - - public int getDepth() { - return depth; - } - - public boolean isShow() { - return show; - } - - public void unfold() { - show = true; - } - - public void retreat() { - show = false; - } - - public void setClosingElement() { - closingElement = true; - } - - public boolean isClosingElement() { - return closingElement; - } - - public void removeClosingLabel() { - try { - if (lastElement.getText().equals("...]") || lastElement.getText().equals("...}")) { - this.remove(lastElement); - } - } catch (NullPointerException e) { - // System.out.println("La ligne est vide"); - } - } -} +package JsonInspector.Graphics; + +import JsonInspector.Storage.Node; + +import java.awt.*; + +/** + * Représente une ligne dans l'IHM + */ +public class Line extends MyJPanel { + private boolean show = true; + private final int depth; + private final Node node; + private MyJLabel lastElement; + private boolean closingElement = false; + + + /** + * + * @param node le noeud représenté par cette ligne + * @param depth la profondeur dans l'arbre + */ + public Line(Node node, int depth) { + super(); + this.node = node; + this.depth = depth; + } + + + /** + * + * @param node le noeud représenté par cette ligne + * @param str le texte à afficher sur la ligne + * @param depth profondeur dans l'arbre + */ + public Line(Node node, String str, int depth) { + super(); + this.add(new MyJLabel(str)); + this.node = node; + this.depth = depth; + } + + + /** + * Ajoute du texte sur la ligne + * @param string le texte à ajouter + */ + public void add(String string) { + lastElement = new MyJLabel(string); + this.add(lastElement); + } + + + /** + * Ajoute du texte sur la ligne + * @param string le texte à ajouter + * @param color la couleur du texte + */ + public void add(String string, Color color) { + lastElement = new MyJLabel(string, color); + this.add(lastElement); + } + + + public Node getNode() { + return node; + } + + + public int getDepth() { + return depth; + } + + + public boolean isShow() { + return show; + } + + + /** + * Change le statut de visibilité de la ligne à 'vrai' + */ + public void unfold() { + show = true; + } + + + /** + * Change le statut de visibilité de la ligne à 'faux' + */ + public void retreat() { + show = false; + } + + + /** + * Définit si la ligne représente la fin d'un noeud + */ + public void setClosingElement() { + closingElement = true; + } + + + /** + * Test si la ligne représente la fin d'un noeud + * @return + */ + public boolean isClosingElement() { + return closingElement; + } + + + /** + * Enlève le dernier élément de la ligne + */ + public void removeClosingLabel() { + try { + if (lastElement.getText().equals("...]") || lastElement.getText().equals("...}")) { + this.remove(lastElement); + } + } catch (NullPointerException e) { + //System.out.println("La ligne est vide"); + } + } +} diff --git a/src/fr/sae/JSonInspector/Graphics/MyJLabel.java b/src/fr/sae/JSonInspector/Graphics/MyJLabel.java index c7e4235..c84529c 100644 --- a/src/fr/sae/JSonInspector/Graphics/MyJLabel.java +++ b/src/fr/sae/JSonInspector/Graphics/MyJLabel.java @@ -1,20 +1,27 @@ -package fr.sae.JSonInspector.Graphics; - -import fr.sae.JSonInspector.Settings.Parameters; - -import javax.swing.*; -import java.awt.*; - -public class MyJLabel extends JLabel { - public MyJLabel(String text, Color color) { - super(text); - // this.setFont(Parameters.FILE_FONT); - this.setForeground(color); - } - - public MyJLabel(String text) { - super(text); - // this.setFont(Parameters.FILE_FONT); - this.setForeground(Parameters.DEFAULT_TEXT_COLOR); - } -} +package JsonInspector.Graphics; + +import JsonInspector.Settings.Parameters; + +import javax.swing.*; +import java.awt.*; + +public class MyJLabel extends JLabel { + /** + * + * @param text le texte à afficher + * @param color la couleur du texte + */ + public MyJLabel(String text, Color color) { + super(text); + this.setForeground(color); + } + + /** + * + * @param text le texte à afficher + */ + public MyJLabel(String text) { + super(text); + this.setForeground(Parameters.DEFAULT_TEXT_COLOR); + } +} diff --git a/src/fr/sae/JSonInspector/Graphics/MyJPanel.java b/src/fr/sae/JSonInspector/Graphics/MyJPanel.java index c511617..84a810c 100644 --- a/src/fr/sae/JSonInspector/Graphics/MyJPanel.java +++ b/src/fr/sae/JSonInspector/Graphics/MyJPanel.java @@ -1,26 +1,27 @@ -package fr.sae.JSonInspector.Graphics; - -import fr.sae.JSonInspector.Settings.Parameters; - -import javax.swing.*; -import java.awt.*; - -public class MyJPanel extends JPanel { - public MyJPanel(Color color) { - super(); - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - this.setBackground(color); - } - - public MyJPanel() { - super(); - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - this.setBackground(Parameters.BACKGROUND_COLOR); - } - - public MyJPanel(boolean isTransparent) { - super(); - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - this.setOpaque(isTransparent); - } -} +package JsonInspector.Graphics; + +import JsonInspector.Settings.Parameters; + +import javax.swing.*; +import java.awt.*; + +public class MyJPanel extends JPanel { + /** + * Construit un JPanel qui aligne tous ses éléments sur la gauche + * @param color la couleur de fond du panel + */ + public MyJPanel(Color color) { + super(); + this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + this.setBackground(color); + } + + /** + * Construit un JPanel qui aligne tous ses éléments sur la gauche + */ + public MyJPanel() { + super(); + this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + this.setBackground(Parameters.BACKGROUND_COLOR); + } +}