SoftwarePractice.org: Home | Courseware | Wiki | Archive

10600171 David

From SoftwarePractice.org

Contents

Inception

August 20

  • Reviewed possible ideas for Topic B: Sound Effects Wand. Unable to come up with any ideas that were both innovative and practical
  • Reviewed team wiki as set up by Steven
  • Read user guide to wikimedia
  • wiki contribution - T8#Meeting_Time: added additional points
  • wiki contribution - T8#Project_Logs: created headline
  • wiki contribution - T8#Project_Logs: created for all team members a Project Log book wiki internal link
  • wiki contribution - T8#Fare_Evasion:
    • researched online the following topics: RFID, smart-cards, Tcard, Department of Transport & Regional Services
    • updated topic description
    • added stakeholder information
  • wiki contribution - T8#Usage_scenarios: added fare evasion scenario
  • Emailed group members:
    • Hey guys,

      I've just added some new protocols to our team wiki as suggestions. If you don't like them or would like to modify them, please feel free to do so. Modify the wiki directly and state why and what so the rest of the group learns from it.

      Kind regards, David

      PS. Just a reminder, i'll be in NZ this week. Can you guys please put up on the wiki what is needed to be done for the next phase? that is, by next week when i am back? i will start it as soon as i get back.

August 31

  • Reviewed entries by other team members
  • wiki contribution - T8#Archive: created section to move all information that is no longer needed due to iterative concept and design
  • wiki contribution - T8#Stakeholders: published surgical instrument tracking concept
    • researched online the following topics: CSD, SRACA, BSE, Children's Hospital Westmead
  • wiki contribution - T8#Usage_scenarios: published surgical instrument tracking usage scenarios
  • wiki contribution - T8#References: created section and added references
  • Emailed group members:
    • Hi guys,

      I've added our new concept onto the wiki, i've also created the following new sections:
      - References: record of all sources of information
      - Archive: storage for early concepts which are no longer applicable

      Steve, can you please send me a scanned image of the conceptual CRC and class diagrams so i may review them?

      Have a great weekend,
      David

September 6

  • Checked team wiki - no updates
  • Emailed group members:
    • Want to meet up next Thursday from 10 - 12AM to get this assignment sorted? There have been no updates to the wiki...

      Have a great weekend,
      David

September 12

  • Checked team wiki - no updates
  • Emailed group members:
    • Hi guys,

      Just confirming our group meeting tomorrow from 10AM - 12PM?

      Is the library convenient for everyone?

      Kind regards,
      David

September 13

  • Checked team wiki - no updates
  • Formatted main page to remove team information and administrative issues to seperate wiki: allows for readability of project

September 14

September 19

  • Started and completed sequence diagram for use case to be used in presentation - emailed to group members

September 20

  • Modified and updated presentation slides
  • Added Brendan's section to the slide
  • Emailed group members:
    • Hi guys,

      I've added a reference page to our presentation, we don't have to show it but it may be good to have there. I have also fixed up the first and third slides, intro and usage scenarios.

      I was thinking maybe we can divide the presentation up into the following aspects:

      • slide 2 - scope and functionality: David
      • slide 3 - prototype scope: Brendan
      • slide 4 - usage scenarios: David
      • slide 5 - use cases: Brendan
      • slide 6 - class diagram: Steven
      • slide 7 - sequence diagram: Steven (only because this relates directly to the class diagram that you did so it may flow smoother)
      • slide 8 - GUI: Steven
      • slide 9 - Design issues: Brendan

      What do you guys think?

      Steven, thanks for your extra hard work today, we really appreciate it.

      Kind regards,
      David

September 21

  • Created group web site to host files for wiki
  • Uploaded latest presentation to web site
  • Emailed group members:
    • Hi all,

      Can we please upload all wiki files to the following location from now on and have the wiki reference them.

      http://pages.google.com/
      username: team8.ood
      password: <refer to email>

      Brendan and I have already uploaded the latest presentation, same name, different hosting location; some modifications added.

      Cheers,
      David

September 30

  • Downloaded scplugin for source control
  • Read documentation and attempted to use it with the SVN that Steven set up
  • Emailed group members:
    • Hey Steven,

      What is the username and password I am supposed to enter for SVN?

      Cheers,
      David

November 5

  • Added inception phase from MUP to main Wiki
  • Researched risks involved with RFID and hospital implementations and concept adoptions
  • wiki contribution - T8#System_Elements: created section
  • wiki contribution - T8#Risks: created section

Construction

September 28

  • Group decision to program application using NetBeans because Brendan was most comfortable with it
  • Group decision to allow Steve to come up with initial class and method signatures based on groups class designs as he was most familiar with object-oriented coding using C++ which is closest to Java development
  • Asked Lian if we were able to incorporate third party database to link the application to - at this time it was thought that the application would communicate with a database through wireless; Lian said that this was not necessary
  • Would have liked to incorporate database idea to utilise object-oriented principles to database technology through post-relational database implementation
  • Explored NetBeans to start development of code

October 3

  • Started development in NetBeans on the MainFrame.java file
  • Responsible for the Unfound Items and Found Items screens
  • Developed the GUI for the Unfound Items screen

October 5

  • Developed the GUI for the Found Items screen

October 10

  • Coded the table model for the Unfound Items screen
  • Got the table model and the table control to ineract with one another
  • Managed to display the list of items that were unfound

October 13

  • Got the "Select" and "Unselect" buttons to work with the table control on the Unfound Items screen
  • Finding it difficult to work with lists. This is a primitive method of manipulating information. Use to connecting to databases and having SQL and procedures for performing such operations

October 16

  • Got the "Mark as Found" button to work with the table control on the Unfound Items screen
  • This feature successfully marks an item in the Unfound list as found, placing the item into the Found list

October 20

  • Replicated Unfound Item screen functionality to teh Found Item screen
  • Select and Unselect buttons do not function properly in the Found Item screen; need to fix this

October 25

  • Debugging Found Item screen to find why the buttons do not function as desired
  • Found typos in the table model and table controls being used
  • Fixed bug

October 30

  • Created final class diagram based on Java design

November 5

  • Made adjustments to final class diagram
  • Uploaded argo file to group hosting pages
  • wiki contribution - T8#Final_Class_Diagrams: Uploaded final class diagram to wiki

November 6

Below are the screens that I designed for the final application.

Found Items Screen

Image:FoundItems.png

Unfound Items Screen

Image:UnfoundItems.png

Transition

October 30

  • Unable to merge source into version control as SVN is not working on laptop anymore

November 1

  • Group meeting
  • Attempted to merge source for presentation - ran into difficulties merging source from all group members
  • Unsuccessful at merging in code that was written for project due to issues with merging source
  • Presentation was done without showing Lian personal code; informed that this would be updated onto version control once done in afternoon
  • Source merging was a difficult task because a group member did not adhere to programming standards of naming conventions
  • Manage to merge source in and upload to source control

November 4

  • Found some bugs in personal program relating to the filing of the records; rectified and uploaded source
  • Consulted with Steve that these issues were fixed correctly
  • Fixed some GUI issues relating to consistency such as button font sizes

November 6

November 6

Below is a copy of all the code that was contributed on my behalf to the project found in MainFrame.java.

public MainFrame()

        // initialising tableUnfound
       tableUnfoundModel = new DefaultTableModel(null, new Object [] {"", "ID", "Name", "Description", "Type"})
       {
           public boolean isCellEditable(int rowIndex, int columnIndex)
           {
               return columnIndex == 0; // allow editing to set checkbox only
           }
           public Class getColumnClass(int column)
           {
               if(column == 0)
               {
                   return Boolean.class;
               }
               else
               {
                   return getValueAt(0, column).getClass();
               }
           }
       };
       tableUnfound.setModel(tableUnfoundModel);
       tableUnfound.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));
       tableUnfound.getColumnModel().getColumn(0).setMaxWidth(20);
       tableUnfound.getColumnModel().getColumn(0).setMinWidth(20);
       // initialising tableUnfound
       tableFoundModel = new DefaultTableModel(null, new Object [] {"", "ID", "Name", "Description", "Type"})
       {
           public boolean isCellEditable(int rowIndex, int columnIndex)
           {
               return columnIndex == 0; // allow editing to set checkbox only
           }
           public Class getColumnClass(int column)
           {
               if(column == 0)
               {
                   return Boolean.class;
               }
               else
               {
                   return getValueAt(0, column).getClass();
               }
           }
       };
       tableFound.setModel(tableFoundModel);
       tableFound.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));
       tableFound.getColumnModel().getColumn(0).setMaxWidth(20);
       tableFound.getColumnModel().getColumn(0).setMinWidth(20);


   private void UnfoundBackBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UnfoundBackBtnActionPerformed
       hidePanels();
       m_pnMain.setVisible(true);
   }//GEN-LAST:event_UnfoundBackBtnActionPerformed
   private void FoundBackBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FoundBackBtnActionPerformed
       hidePanels();
       m_pnMain.setVisible(true);
   }//GEN-LAST:event_FoundBackBtnActionPerformed
   // Mark the selected item(s) as unfound
   private void MarkAsUnfoundBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MarkAsUnfoundBtnActionPerformed
       List<String> remove = new Vector<String>();
       for (int i=0; i<tableFoundModel.getRowCount(); i++)
       {
           if (tableFoundModel.getValueAt(i, 0).equals(true))
           {
               String ID = tableFoundModel.getValueAt(i, 1).toString();
               m_tagManager.markItemAsUnfound(ID, true);
               remove.add(ID);
           }
       }
       // remove from table
       for (int i=0; i<remove.size(); i++)
       {
           int iRow = findFoundTableRow(remove.get(i));
           if (iRow >=0)
           {
               tableFoundModel.removeRow(findFoundTableRow(remove.get(i)));
           }
       }
   }//GEN-LAST:event_MarkAsUnfoundBtnActionPerformed
   /* Find the selected row for tableFound*/
   private int findFoundTableRow(String ID)
   {
       for (int i=0; i<tableFoundModel.getRowCount(); i++)
       {
           if (tableFoundModel.getValueAt(i, 1).equals(ID))
           {
               return i;
           }
       }
       return -1;
   }
   
   private void FoundUnselectAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FoundUnselectAllBtnActionPerformed
       // Unselect all records
       for (int i=0; i<tableFoundModel.getRowCount(); i++)
       {
           tableFoundModel.setValueAt(false, i, 0);
       }
   }//GEN-LAST:event_FoundUnselectAllBtnActionPerformed
   private void FoundSelectAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FoundSelectAllBtnActionPerformed
       // Select all records
       for (int i=0; i<tableFoundModel.getRowCount(); i++)
       {
           tableFoundModel.setValueAt(true, i, 0);
       }
   }//GEN-LAST:event_FoundSelectAllBtnActionPerformed
   // Mark the selected item(s) as found
   private void MarkAsFoundBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MarkAsFoundBtnActionPerformed
       List<String> remove = new Vector<String>();
       for (int i=0; i<tableUnfoundModel.getRowCount(); i++)
       {
           if (tableUnfoundModel.getValueAt(i, 0).equals(true))
           {
               String ID = tableUnfoundModel.getValueAt(i, 1).toString();
               m_tagManager.markItemAsFound(ID, true);
               remove.add(ID);
           }
       }
       // remove from table
       for (int i=0; i<remove.size(); i++)
       {
           int iRow = findUnfoundTableRow(remove.get(i));
           if (iRow >=0)
           {
               tableUnfoundModel.removeRow(findUnfoundTableRow(remove.get(i)));
           }
       }
   }//GEN-LAST:event_MarkAsFoundBtnActionPerformed
   
   /* Find the selected row for tableUnfound*/
   private int findUnfoundTableRow(String ID)
   {
       for (int i=0; i<tableUnfoundModel.getRowCount(); i++)
       {
           if (tableUnfoundModel.getValueAt(i, 1).equals(ID))
           {
               return i;
           }
       }
       return -1;
   }
   
   private void UnselectAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UnselectAllBtnActionPerformed
       // Unselect all records
       for (int i=0; i<tableUnfoundModel.getRowCount(); i++)
       {
           tableUnfoundModel.setValueAt(false, i, 0);
       }
   }//GEN-LAST:event_UnselectAllBtnActionPerformed
   private void SelectAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SelectAllBtnActionPerformed
       // Unselect all records
       for (int i=0; i<tableUnfoundModel.getRowCount(); i++)
       {
           tableUnfoundModel.setValueAt(true, i, 0);
       }
   }//GEN-LAST:event_SelectAllBtnActionPerformed
   private void MarkAsFoundButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MarkAsFoundButtonActionPerformed
       //calls markItemAsFound(ID)
       String ID = ItemDescID.getText();
       m_tagManager.markItemAsFound(ID, true);
       hidePanels();
       m_pnMain.setVisible(true);
   }//GEN-LAST:event_MarkAsFoundButtonActionPerformed
   private void onShowFoundItems()
   {
       List<String> items = m_tagManager.getFoundItems();
       
       // update table contents
       Iterator<String> itr = items.iterator();
       while (itr.hasNext())
       {
           Item item = m_tagManager.getItem(itr.next());
           tableFoundModel.addRow(new Object[]{false, item.ID, item.name, item.desc,item.type});
       }
       hidePanels();
       m_pnFoundItems.setVisible(true);
   }
   public void markItemAsFound(String ID)
   {
       m_tagManager.markItemAsFound(ID, true);
   }
   private DefaultTableModel tableUnfoundModel;
   private DefaultTableModel tableFoundModel;

November 7

Reflections

The following is a personal reflection of the major group project.

Benefits

Team Work

I have done a lot of team work with other groups in different subjects in the past and I have also worked in the IT industry for several years and worked with small to moderate sized teams. However, the experience gained in OOD was a unique one as I was able to contribute to every aspect of the MUP which is usually unaccomplished in the industry due to time constraints and ignorance.

I enjoyed being able to work on the several UML designs and follow it through to the construction and implementation of the project.

In the industry, we use to do a very brief design and only include a class diagram. After doing this project, I was enlightened to the advantages of the analysis tools we used to define the scope of our project which paved the way for implementation.

The team consisted of three engineers of different disciplines which was also enjoyable. We utilized the strengths of each individual by gaining help and assistance from the group member who was strongest in that part of the project. This allowed every group member to not only contribute to every aspect of the project but to also be taught by their peer who was most experienced in the stage of the project.

New Technology

Having to keep an online document in the form of a wiki was a great experience as this was the first time I had to use it. It showed me the power and ease of use of a wiki and will encourage me to use it in the future. It is also a great tool for collaboration.

Concerns

Deadlines

The deadlines compounded with the additional stress of other assessments from other subjects caught every group member off guard. Further to that, the group had a misconception that the amount of work needed to be done was a lot less than what was actually needed.

This caused some panic and changes in attitude amongst the group. However, we worked through it and developed professionally from this experience as we learned to compromise, act and accomplish what we needed to for the project.

Accomplishments

Java Programming

I have worked with many object oriented programming languages and databases in the past several years of industry experience but I have never used Java before. As the requirement of this project was to create an application in Java, this was a welcoming experience.

It was especially helpful that one of the group members was at an advanced level of C++ development and managed to adapt his skillsets for this project. This was a great learning experience as it provided me with an insight as to the ease of development with Java and all the possible libraries that it contained. Furthermore, I have been investigating open-source non-platform dependent programming languages work purposes so this was beneficial on more than an academic level.

Documentation Standards

My initial career ambition is to become a business analyst. In order to do this it is essential to understand UML, in particular, different approaches to requirements gathering and analysis of problems. This course has demonstrated one methodology, the Miniature Unified Process (MUP). To further extend this knowledge, we were required to provide extensive documentation to support our MUP analysis and design.

The practice obtained from the sequence diagrams, CRC's and use case diagrams will be most beneficial and something I can take with me when I begin working in my desired industry.

Version Control

I haven't worked with any open-source version control in the past and found SVN to be a great and easy tool. Particularly the web add-on to allow the viewing of the source and the revisions through any standard web browser.

This is definitely a tool that I will be able to use in future projects.