package org.greenstone.gatherer.feedback; import java.io.*; import java.awt.image.*; import javax.swing.*; import java.awt.*; import java.util.*; import javax.swing.event.MouseInputAdapter; import java.awt.event.*; import javax.swing.border.*; import java.util.Locale; import java.util.ResourceBundle; import java.text.MessageFormat; import javax.swing.tree.*; /** * This class can give preview of all the history of actions user did or give preview of all the * xml files that are ready to be send and it also can give preview of all the screen shot of * all window taken when user did the actions. * If user select Details button then they will view all xml files that are going to be send. * If user select View History then they will see the history record that we took so far. * @author Veronica Liesaputra */ public class ReportDetails extends WindowAdapter { /** * This is the tree that will be used to hold the feedback form,the history stored inside the vector * at the moment, and hold the comment user did when they recreating the event. * This tree's data partly will be supplied from whats inside vector. */ private JTree tree; /** * This is the root node for tree. */ private DefaultMutableTreeNode rootNode; /** * This hold the parent node of the current node that is currently just being added to tree. */ private DefaultMutableTreeNode parentNode; /** * This hold the current node that is currently just being added to tree. */ private DefaultMutableTreeNode currNode; /** * This is the tree model for tree. */ private DefaultTreeModel treeModel; /** * This is the tree that will be used to hold the commands (actions) done by the user inside the vector * at the moment.This tree builds from partial data of tree and which data entered to this tree * is signed by the value of comm_bool and comm_start. */ private JTree tree2; /** * This is the root node for tree2. */ private DefaultMutableTreeNode rootNode2; /** * This is the parent node of the current node that is currently just being added to tree2. */ private DefaultMutableTreeNode parentNode2; /** * This is the current node that is currently just being added to tree2. */ private DefaultMutableTreeNode currNode2; /** * This is the tree model for tree2. */ private DefaultTreeModel treeModel2; /** * This is the tree that will be used to hold the history of all the actions * done by the user before they choose to do the Reporting Feedback sequence. */ private JTree tree3; /** * This is the root node for tree3. */ private DefaultMutableTreeNode rootNode3; /** * This is the parent node for the current node that is currently just being added to tree3. */ private DefaultMutableTreeNode parentNode3; /** * This is the current node that is currently just being added to tree3. */ private DefaultMutableTreeNode currNode3; /** * This is the tree model for tree3. */ private DefaultTreeModel treeModel3; /** * This is the tree that will be used to hold the commands (actions) done by the user * before they choose to do the Reporting Feedback sequence.This tree builds from partial data of tree3 * and which data entered to this tree2 is signed by the value of comm_bool and comm_start. */ private JTree tree4; /** * This is the root node for tree4. */ private DefaultMutableTreeNode rootNode4; /** * This is the parent node for the current node that is currently just being added to tree4. */ private DefaultMutableTreeNode parentNode4; /** * This is the current node that is currently just being added to tree4. */ private DefaultMutableTreeNode currNode4; /** * This is the tree model for tree4. */ private DefaultTreeModel treeModel4; /** * This is the panel to display tree4. */ private JPanel pane4; /** * This is the scroll pane for displaying tree3, so it is scrollable. */ private JScrollPane scroll3; /** * This is the scroll pane for displaying tree4, so it is scrollable. */ private JScrollPane scroll4; /** * This is the panel to display tree2. */ private JPanel pane2; /** * This is the scroll pane for displaying tree2, so it is scrollable. */ private JScrollPane scroll2; /** * This is the scroll pane for displaying tree, so it is scrollable. */ private JScrollPane scroll; /** * This is all the information taken from the Feedback form and information that * was taken from the system. */ private String[] err_details; /** * This is the vector that hold all information about the history of all * the actions user did. * If rec = true, it means it hold the history of all the actions and information * of all the windows were open when user did the actions during reporting feedback * sequence. * If rec = false, it means it hold the history of all the actions and information * of all the windows were open when user did the actions before and after * reporting feedback sequence. */ private Vector vector; /** * This is a variable to know which tag xml data that wants to be added to the JTree. */ private int count; /** * This is a flag variable to sign whether or not the next data is to be added to * the command JTree. */ private boolean comm_bool = false; /** * This is a flag variable to sign whether or not the next history is to be added to * the command JTree. */ private boolean comm_start = false; /** * This is a flag variable to sign whether or not at the moment we building a new tree * or build from the existing tree. */ private boolean new_tree = false; /** * This is a flag variable to sign which type of preview that user wants at the moment. * If its true, then its means user will view all the 6 xml files that will be send. * If its false, then its means user only wants to view the history and command user just did * before and after the reporting feedback sequence. */ private boolean rec = false; /** * This is array list of all the image icons that are inside all the command JTree. */ private ArrayList movie; /** * This variable will hold the resource of the words that is stored in Messages.properties file. * The calling using messages.getString(someString) will caused someString to be translated * into some other string that is hold in that file.usually it will caused it to be translated * to the language that the user use or choose to have as stated in Locale. */ private static ResourceBundle messages; private String[] img; /** * This constructor will be seeting up the data member to its appropriate value. * (Precondition : (msg != null) && (bool != null)) * @param stack this is all vector to be supplied to tree. * @param err_array holding all the information taken when user doing the FeedbackInterface form. * @param imgFile holding all the information inside all the panels in the FeedbackInterface form. * @param msg hold the resource of the words that is stored in Messages.properties file. * @param bool hold the falg value of rec. */ public ReportDetails(Vector stack,String[] err_array,String[] imgFile,ResourceBundle msg,boolean bool) { img = imgFile; vector = stack; err_details = err_array; messages = msg; rec = bool; movie = new ArrayList(); makeNewWindow(); } /** * This method will make a modal-dialog window that will display all the preview. */ public void makeNewWindow() { JDialog frame; frame = new View (this); frame.setModal(true); frame.setVisible(true); } /** * This class is the dialog window that will give the preview. */ class View extends JDialog implements ActionListener { /** * This variable is holding the current window that display the preview. */ private JDialog frame; /** * This variable holding the owner of this window. */ private ReportDetails framework = null; /** * This constructor will make the dialog window for previewing and setting up the * content pane of this window. * @param controller is the owner of this window. */ public View (ReportDetails controller) { super(); framework = controller; frame = this; setTitle(messages.getString("ViewReport")); setBackground(new Color(176,208,176)); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setDefaultLookAndFeelDecorated(true); JPanel cont; cont = new JPanel(); cont.setLayout(new BoxLayout(cont,BoxLayout.PAGE_AXIS)); cont.setBackground(new Color(176,208,176)); JTabbedPane tab; tab = new JTabbedPane(); tab.setBackground(new Color(176,208,176)); new_tree = false; if (err_details != null) { tab.addTab(messages.getString("ViewFeedbackForm"), createFeedback_UI(err_details,img)); } if (rec == true) { tab.addTab(messages.getString("ViewFeedbackHistoryState"), createFeedbackHistory_UI(vector)); tab.addTab(messages.getString("ViewFeedbackCommandState"),pane2); /*tab.addTab(messages.getString("ViewHistoryState"), createHistory_UI());*/ createHistory_UI(); tab.addTab(messages.getString("ViewCommandState"),pane4); } else { /*tab.addTab(messages.getString("ViewHistoryState"), createFeedbackHistory_UI(vector));*/ createFeedbackHistory_UI(vector); tab.addTab(messages.getString("ViewCommandState"),pane2); } cont.add(tab); JLabel lbl; lbl = new JLabel(" "); lbl.setBackground(new Color(176,208,176)); cont.add(lbl); JPanel pane3; pane3 = new JPanel(); pane3.setBackground(new Color(176,208,176)); JButton button; button = new JButton(messages.getString("Close")); button.setActionCommand(messages.getString("Close")); button.addActionListener(this); button.setDefaultCapable(true); button.setToolTipText(messages.getString("ClosePreview")); button.setBackground(new Color(176,208,176)); /*JButton button2; button2 = new JButton(messages.getString("ViewMovie")); button2.setActionCommand(messages.getString("ViewMovie")); button2.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { JDialog.setDefaultLookAndFeelDecorated(true); JDialog frame; frame = new Movie(messages,movie); frame.setContentPane(((Movie)frame).create_UI()); frame.pack(); frame.setVisible(true); } }); button2.setToolTipText(messages.getString("ViewMovieText")); button2.setBackground(new Color(176,208,176)); pane3.add(button2);*/ pane3.add(button); pane3.setBorder(new EmptyBorder(new Insets(0,10,10,10))); cont.add(pane3); cont.setBorder(new EmptyBorder(new Insets(5,5,5,5))); getContentPane().add(cont); tab.setAlignmentX(Component.LEFT_ALIGNMENT); lbl.setAlignmentX(Component.LEFT_ALIGNMENT); pane3.setAlignmentX(Component.LEFT_ALIGNMENT); addWindowListener(framework); Toolkit kit; kit = Toolkit.getDefaultToolkit(); Dimension screenSize; screenSize = kit.getScreenSize(); int screenHeight; screenHeight = screenSize.height; int screenWidth; screenWidth = screenSize.width; Dimension size; size = this.getSize(); setLocation((screenWidth -size.width)/ 4, (screenHeight - size.height)/ 4); pack(); setResizable(false); } /** * This method will get the vector that is stored inside temp_feedbackhist.log * if rec is true, and will get the vector that is stored inside temp_history.log * if rec is false. If file is not exist then it will return null. * @return vector that is stored in the file. */ public Vector getPrev_log() { Vector stack = null; try { File f; if (rec == true) { f = new File("temp_feedbackhist.log"); } else { f = new File("temp_history.log"); } if (f.exists() == true) { FileInputStream fis = new FileInputStream(f); ObjectInputStream ois = new ObjectInputStream(fis); stack = (Vector) ois.readObject(); ois.close(); return stack; } else stack = null; } catch (IOException exp) {exp.printStackTrace();} catch (ClassNotFoundException exp2) { System.out.println("class exp");} return stack; } /** * This method will update the graphics of this window and it will * set variable finish in Conformation to true. * @param g is the graphics for this window. */ public void paint (Graphics g) { super.paint(g); FeedbackInterface.setFinish(true); } /** * This method will close the preview window if user select close button. * @param e action event user did. */ public void actionPerformed (ActionEvent e) { if(messages.getString("Close").equals(e.getActionCommand())) { dispose(); } } /** * This method will add a record to history tree and the command tree. * @param log is the record to be added. */ public void getHist(History log) { comm_bool = true; startContent(10); startContent(7); saveContent(log.getDate()); closeContent(7); startContent(2); saveContent(log.getTitle()); closeContent(2); startContent(8); saveContent(log.getCommand()); closeContent(8); String image; image = log.getImage(); if (image != null) { byte[] img; img = Base64.decode(image); String width,height; width = log.getWidth(); height = log.getHeight(); int w,h; w = Integer.parseInt(width); h = Integer.parseInt(height); ImageIcon icon,small_icon; small_icon = new ImageIcon(img); icon = new ImageIcon (small_icon.getImage().getScaledInstance(w,h,Image.SCALE_SMOOTH)); movie.add(0,icon); startContent(6); saveImage(log.getImageName(),width,height); closeContent(6); } comm_bool = false; ArrayList component; component = log.getArray(); int j; for (j = 0 ; j < component.size() ; j++) { startContent(9); CompGroup comp; comp = (CompGroup) component.get(j); startContent(8); saveContent(comp.getStatus()); closeContent(8); startContent(0); UserComponent cmp; cmp = comp.getComponent(); showReport(cmp); closeContent(0); closeContent(9); } comm_bool = true; closeContent(10); comm_bool = false; } /** * This method will make the tree that contains the history and the commands of all the actions and window * open when user did the action that stored in vector. * @param vector the vector that contains the information need to be display in tree. * @return the panel that display tree and tree2. */ public JPanel createFeedbackHistory_UI(Vector vector) { scroll = null; int k; tree = null; rootNode = null; currNode = null; parentNode = null; treeModel = null; tree2 = null; rootNode2 = null; currNode2 = null; parentNode2 = null; treeModel2 = null; comm_bool = true; comm_start = true; new_tree = false; startElement(messages.getString("HISTORY")); for (k = 0 ; k < vector.size() ; k++) { History log; log = (History) vector.get(k); getHist(log); } Vector stack; stack = getPrev_log(); if (stack != null) { for (k = 0 ; k < stack.size() ; k++) { History log; log = (History) stack.get(k); getHist(log); } stack.removeAllElements(); System.gc(); stack = null; } comm_bool = true; endElement(messages.getString("HISTORY")); comm_bool = false; comm_start = false; pane2 = new JPanel(); pane2.add(scroll2); pane2.setBackground(new Color(176,208,176)); pane2.setBorder(new EmptyBorder(new Insets(10,10,10,10))); JPanel pane; pane = new JPanel(); pane.add(scroll); pane.setBackground(new Color(176,208,176)); pane.setBorder(new EmptyBorder(new Insets(10,10,10,10))); return pane; } /** * This method will make the tree that contains the history and the commands of all the actions and window * open when user did the action before user choose the reporting feedback sequence. * @return the panel contains the preview of this history and commands before user choose to start * the reporting feedback sequence. */ public JPanel createHistory_UI() { scroll3 = null; int k; tree3 = null; rootNode3 = null; currNode3 = null; parentNode3 = null; treeModel3 = null; tree4 = null; rootNode4 = null; currNode4 = null; parentNode4 = null; treeModel4 = null; comm_bool = true; comm_start = true; new_tree = true; startElement(messages.getString("HISTORY")); try { File f = new File("history.log"); FileInputStream fis = new FileInputStream(f); ObjectInputStream ois = new ObjectInputStream(fis); Vector stack; stack = (Vector) ois.readObject(); if (stack != null) { for (k = 0 ; k < stack.size() ; k++) { History log; log = (History) stack.get(k); getHist(log); } stack.removeAllElements(); System.gc(); stack = null; } stack = (Vector) ois.readObject(); if (stack != null) { for (k = 0 ; k < stack.size() ; k++) { History log; log = (History) stack.get(k); getHist(log); } stack.removeAllElements(); System.gc(); stack = null; } ois.close(); } catch (IOException exp) {exp.printStackTrace();} catch (ClassNotFoundException exp2) { System.out.println("class exp");} comm_bool = true; endElement(messages.getString("HISTORY")); comm_bool = false; comm_start = false; pane4 = new JPanel(); pane4.add(scroll4); pane4.setBackground(new Color(176,208,176)); pane4.setBorder(new EmptyBorder(new Insets(10,10,10,10))); JPanel pane; pane = new JPanel(); pane.add(scroll3); pane.setBackground(new Color(176,208,176)); pane.setBorder(new EmptyBorder(new Insets(10,10,10,10))); return pane; } /** * This method display all the information taken when user did the Feedback form. * @param err_details is the information taken when user did the Feedback form. * @param img is the information from all the panels inside the Feedback form. * @return panel displaying the information. */ public JPanel createFeedback_UI(String[] err_details,String[] img) { scroll = null; tree = null; rootNode = null; currNode = null; parentNode = null; treeModel = null; tree2 = null; rootNode2 = null; currNode2 = null; parentNode2 = null; treeModel2 = null; startElement(messages.getString("BUGS")); startElement(messages.getString("IDCode")); characters(err_details[0].toCharArray(),0,err_details[0].length()); endElement(messages.getString("IDCode")); startElement(messages.getString("LastViewedWindow")); characters(err_details[1].toCharArray(),0,err_details[1].length()); endElement(messages.getString("LastViewedWindow")); startElement(messages.getString("Optionals")); startElement(messages.getString("Type")); characters(err_details[3].toCharArray(),0,err_details[3].length()); endElement(messages.getString("Type")); startElement(messages.getString("Urgency")); characters(err_details[4].toCharArray(),0,err_details[4].length()); endElement(messages.getString("Urgency")); endElement(messages.getString("Optionals")); startElement(messages.getString("User")); startElement(messages.getString("Name")); characters(err_details[5].toCharArray(),0,err_details[5].length()); endElement(messages.getString("Name")); startElement(messages.getString("HomeDirectory")); characters(err_details[6].toCharArray(),0,err_details[6].length()); endElement(messages.getString("HomeDirectory")); startElement(messages.getString("WorkingDirectory")); characters(err_details[7].toCharArray(),0,err_details[7].length()); endElement(messages.getString("WorkingDirectory")); startElement(messages.getString("SMTP")); characters(err_details[19].toCharArray(),0,err_details[19].length()); endElement(messages.getString("SMTP")); startElement(messages.getString("Email")); characters(err_details[20].toCharArray(),0,err_details[20].length()); endElement(messages.getString("Email")); endElement(messages.getString("User")); startElement(messages.getString("OpenFormTime")); characters(err_details[8].toCharArray(),0,err_details[8].length()); endElement(messages.getString("OpenFormTime")); startElement(messages.getString("SendFormTime")); characters(err_details[9].toCharArray(),0,err_details[9].length()); endElement(messages.getString("SendFormTime")); startElement(messages.getString("OperatingSystem")); characters(err_details[10].toCharArray(),0,err_details[10].length()); endElement(messages.getString("OperatingSystem")); startElement(messages.getString("Java")); startElement(messages.getString("JavaInformation")); characters(err_details[11].toCharArray(),0,err_details[11].length()); endElement(messages.getString("JavaInformation")); startElement(messages.getString("TotalMemory")); characters(err_details[21].toCharArray(),0,err_details[21].length()); endElement(messages.getString("TotalMemory")); startElement(messages.getString("MaxMemory")); characters(err_details[22].toCharArray(),0,err_details[22].length()); endElement(messages.getString("MaxMemory")); startElement(messages.getString("FreeMemory")); characters(err_details[23].toCharArray(),0,err_details[23].length()); endElement(messages.getString("FreeMemory")); startElement(messages.getString("DefaultLocale")); characters(err_details[12].toCharArray(),0,err_details[12].length()); endElement(messages.getString("DefaultLocale")); endElement(messages.getString("Java")); startElement(messages.getString("Browser")); characters(err_details[13].toCharArray(),0,err_details[13].length()); endElement(messages.getString("Browser")); startElement(messages.getString("LocalHostName")); characters(err_details[14].toCharArray(),0,err_details[14].length()); endElement(messages.getString("LocalHostName")); startElement(messages.getString("LocalHostAddress")); characters(err_details[15].toCharArray(),0,err_details[15].length()); endElement(messages.getString("LocalHostAddress")); startElement(messages.getString("ScreenResolution")); characters(err_details[16].toCharArray(),0,err_details[16].length()); endElement(messages.getString("ScreenResolution")); if (img!=null) { startElement("Sequences"); int i; for ( i = 0 ; i < img.length ; i= i + 10) { startElement("Sequence"); startElement("Title"); characters(img[i].toCharArray(),0,img[i].length()); endElement("Title"); startElement("Details"); characters(img[i+9].toCharArray(),0,img[i+9].length()); endElement("Details"); startElement("ImageDescription"); startElement("ScreenShot"); startElement("Image"); saveImage(img[i+2],img[i+7],img[i+8]); endElement("Image"); endElement("ScreenShot"); startElement("ErrorLineAndScreenShot"); startElement("Image"); saveImage(img[i+4],img[i+7],img[i+8]); endElement("Image"); endElement("ErrorLineAndScreenShot"); startElement("ErrorLineForScreenShot"); startElement("Image"); saveImage(img[i+6],img[i+7],img[i+8]); endElement("Image"); endElement("ErrorLineForScreenShot"); endElement("ImageDescription"); endElement("Sequence"); } endElement("Sequences"); } endElement(messages.getString("BUGS")); JPanel pane; pane = new JPanel(); pane.add(scroll); pane.setBackground(new Color(176,208,176)); pane.setBorder(new EmptyBorder(new Insets(10,10,10,10))); return pane; } /** * This will add the UserComponent to the tree. * @param sx is the UserComponent to be added. */ public void showReport (UserComponent sx) { String type; type = sx.getType(); String title; title = sx.getTitle(); ArrayList content; content = sx.getContent(); String selected; selected = sx.getSelected(); String visible; visible = sx.getVisible(); String image; image = sx.getImage(); String img; img = sx.getImageFileName(); String width; width = sx.getWidth(); String height; height = sx.getHeight(); String tooltip; tooltip = sx.getToolTip(); if (type != null) { startContent(1); saveContent(type); closeContent(1); } if (title != null) { startContent(2); saveContent(title); closeContent(2); } if (content != null) { startContent(3); int j; for ( j = 0 ; j < content.size() ; j++) { if (content.get(j) instanceof String) saveContent((String) content.get(j)); else if (content.get(j) instanceof UserComponent) { startContent(0); UserComponent cmp; cmp = (UserComponent) content.get(j); showReport(cmp); closeContent(0); } } closeContent(3); } if (selected != null) { startContent(4); saveContent(selected); closeContent(4); } if (visible != null) { startContent(5); saveContent(visible); closeContent(5); } if (img != null) { startContent(6); saveImage(img,width,height); closeContent(6); } else { if (image != null) { startContent(11); saveContent(image); closeContent(11); } } if (tooltip != null) { startContent(12); saveContent(tooltip); closeContent(12); } } /** * This method will give what type of information this node hold according the number * @param num the number that describe what type of information it hold. */ public void startContent (int num) { switch(num) { case 0: startElement(messages.getString("COMPONENT")); break; case 1: startElement(messages.getString("Type")); break; case 2: startElement(messages.getString("Title")); break; case 3: startElement(messages.getString("Content")); break; case 4: startElement(messages.getString("Selected")); break; case 5: startElement(messages.getString("Visible")); break; case 6: startElement(messages.getString("Image")); break; case 7: startElement(messages.getString("Date")); break; case 8: startElement(messages.getString("Command")); break; case 9: startElement(messages.getString("COMPONENTS")); break; case 10:startElement(messages.getString("LOG")); break; case 11:startElement(messages.getString("Icon")); break; case 12:startElement(messages.getString("ToolTipText")); break; case 13:startElement(messages.getString("Comment")); break; } } /** * This will add the text content to the current node. * @param text is the text content of the current node. */ public void saveContent (String text) { if (text == null) text = "\t"; characters(text.toCharArray(),0,text.length()); } /** * This will say that what type of information that has been finished added * accroding its number. * @param num the number that describe what type of information it hold. */ public void closeContent (int num) { switch(num) { case 0: endElement(messages.getString("COMPONENT")); break; case 1: endElement(messages.getString("Type")); break; case 2: endElement(messages.getString("Title")); break; case 3: endElement(messages.getString("Content")); break; case 4: endElement(messages.getString("Selected")); break; case 5: endElement(messages.getString("Visible")); break; case 6: endElement(messages.getString("Image")); break; case 7: endElement(messages.getString("Date")); break; case 8: endElement(messages.getString("Command")); break; case 9: endElement(messages.getString("COMPONENTS")); break; case 10:endElement(messages.getString("LOG")); break; case 11:endElement(messages.getString("Icon")); break; case 12:endElement(messages.getString("ToolTipText")); break; case 13:endElement(messages.getString("Comment")); break; } } /** * This method will add the this string to the appropriate place in the tree. * @param type its the type to be added to the tree. */ public void startElement (String type) { if ((comm_bool == true)&&(comm_start == true)) { if (new_tree == true) { if (type == messages.getString("HISTORY")) { rootNode4 = new DefaultMutableTreeNode(messages.getString("HISTORYCOMMANDS")); treeModel4 = new DefaultTreeModel(rootNode4); parentNode4 = rootNode4; tree4 = new JTree(treeModel4); tree4.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree4.setBackground(new Color(224,240,224)); tree4.setEditable(false); tree4.setShowsRootHandles(true); } else { currNode4 = new DefaultMutableTreeNode(type + " : "); treeModel4.insertNodeInto(currNode4,parentNode4,parentNode4.getChildCount()); parentNode4 = currNode4; } } else { if (type == messages.getString("HISTORY")) { rootNode2 = new DefaultMutableTreeNode(messages.getString("HISTORYCOMMANDS")); treeModel2 = new DefaultTreeModel(rootNode2); parentNode2 = rootNode2; tree2 = new JTree(treeModel2); tree2.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree2.setBackground(new Color(224,240,224)); tree2.setEditable(false); tree2.setShowsRootHandles(true); } else { currNode2 = new DefaultMutableTreeNode(type + " : "); treeModel2.insertNodeInto(currNode2,parentNode2,parentNode2.getChildCount()); parentNode2 = currNode2; } } } if ((type == messages.getString("COMMENTS"))||(type == messages.getString("BUGS"))|| (type == messages.getString("HISTORY"))) { if (new_tree == true) { rootNode3 = new DefaultMutableTreeNode(type); treeModel3 = new DefaultTreeModel(rootNode3); parentNode3 = rootNode3; tree3 = new JTree(treeModel3); tree3.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree3.setBackground(new Color(224,240,224)); tree3.setEditable(false); tree3.setShowsRootHandles(true); } else { rootNode = new DefaultMutableTreeNode(type); treeModel = new DefaultTreeModel(rootNode); parentNode = rootNode; tree = new JTree(treeModel); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setBackground(new Color(224,240,224)); tree.setEditable(false); tree.setShowsRootHandles(true); } } else { if (new_tree == true) { currNode3 = new DefaultMutableTreeNode(type + " : "); treeModel3.insertNodeInto(currNode3,parentNode3,parentNode3.getChildCount()); parentNode3 = currNode3; } else { currNode = new DefaultMutableTreeNode(type + " : "); treeModel.insertNodeInto(currNode,parentNode,parentNode.getChildCount()); parentNode = currNode; } } } /** * This method is to mark that we finished adding the type to the tree. * @param type type that finished added to the tree. */ public void endElement (String type) { if ((type == messages.getString("HISTORY"))||(type == messages.getString("BUGS"))|| (type == messages.getString("COMMENTS"))) { if (new_tree == true) { scroll3 = new JScrollPane(tree3); scroll3.setPreferredSize(new Dimension(600,600)); if (comm_bool == true) { scroll4 = new JScrollPane(tree4); scroll4.setPreferredSize(new Dimension(600,600)); } } else { scroll = new JScrollPane(tree); scroll.setPreferredSize(new Dimension(600,600)); if (comm_bool == true) { scroll2 = new JScrollPane(tree2); scroll2.setPreferredSize(new Dimension(600,600)); } } } else { if (new_tree == true) { parentNode3 = (DefaultMutableTreeNode) parentNode3.getParent(); if ((comm_bool == true)&&(comm_start == true)) { if (parentNode4 == null) return; parentNode4 = (DefaultMutableTreeNode) parentNode4.getParent(); } } else { parentNode = (DefaultMutableTreeNode) parentNode.getParent(); if ((comm_bool == true)&&(comm_start == true)) { if (parentNode2 == null) return; parentNode2 = (DefaultMutableTreeNode) parentNode2.getParent(); } } } } /*public BufferedImage iconToImage(Icon icon, Component targetComponent) { int w = icon.getIconWidth(); int h = icon.getIconHeight(); GraphicsConfiguration gc = targetComponent.getGraphicsConfiguration(); BufferedImage image = gc.createCompatibleImage(w, h); Graphics2D g = image.createGraphics(); icon.paintIcon(targetComponent,g,0,0); g.dispose(); return image; } public BufferedImage savingImage (ImageIcon img) { JFrame f = new JFrame(); f.setVisible(false); BufferedImage image = iconToImage(img,f); f.dispose(); return image; }*/ /** * This will add the image filename,width and height to the tree. * @param filename image's filename * @param width image's width * @param height image's height */ public void saveImage (String filename,String width,String height) { startElement(messages.getString("Title")); characters(filename.toCharArray(),0,filename.length()); endElement(messages.getString("Title")); startElement(messages.getString("Size")); startElement(messages.getString("Width")); characters(width.toCharArray(),0,width.length()); endElement(messages.getString("Width")); startElement(messages.getString("Height")); characters(height.toCharArray(),0,height.length()); endElement(messages.getString("Height")); endElement(messages.getString("Size")); /*JFrame f = new JFrame(); f.setVisible(false); BufferedImage image = savingImage(img); BufferedImage bi = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi.createGraphics(); big.drawImage(image.getScaledInstance(400,400,Image.SCALE_SMOOTH),0,0,f); f.dispose(); JLabel label = new JLabel(new ImageIcon(bi)); label.setPreferredSize(new Dimension(400,400)); currNode = new DefaultMutableTreeNode(label); treeModel.insertNodeInto(currNode,parentNode,parentNode.getChildCount());*/ } /** * This method will add the characters to the current node's type. * @param ch is the char[] that is need to be added to the current node's type. * @param start is where we should start taking from ch. * @param len is the length of charcacters we should take from ch */ public void characters (char[] ch, int start, int len) { String text; text = new String(ch,start,len); String text1; text1 = text.trim(); if (text1.length() > 0) { if ((comm_bool == true)&&(comm_start == true)) { if (new_tree == true) { String txt2; txt2 = (String) currNode4.getUserObject(); currNode4.setUserObject(txt2 + text1); } else { String txt2; txt2 = (String) currNode2.getUserObject(); currNode2.setUserObject(txt2 + text1); } } if (new_tree == true) { String txt; txt = (String) currNode3.getUserObject(); currNode3.setUserObject(txt + text1); } else { String txt; txt = (String) currNode.getUserObject(); currNode.setUserObject(txt + text1); } } } } }