Katholieke Universiteit Leuven by nyut545e2

VIEWS: 3 PAGES: 183

									Dependency analysis of the GatorMail
       webmail application

Lieven Desmet     Frank Piessens         Wouter Joosen
                 Pierre Verbaeten

         Report CW 427, September 2005




         Katholieke Universiteit Leuven
         Department of Computer Science
         Celestijnenlaan 200A – B-3001 Heverlee (Belgium)
 Dependency analysis of the GatorMail
        webmail application

 Lieven Desmet              Frank Piessens              Wouter Joosen
                           Pierre Verbaeten

                Report CW 427, September 2005




           Department of Computer Science, K.U.Leuven



                                  Abstract
         Nowadays, software systems are evolving towards modular com-
     posed applications, in which existing, loosely-coupled software com-
     ponents are reused in new compositions. In practice, these loosely-
     coupled software components tend to have quite often a set of hidden
     dependencies on other components in software systems. In this re-
     port, we illustrate the complexity of inter-component dependencies
     in loosely-coupled software systems by exploring the dependencies in
     an existing component-based webmail application, GatorMail. We
     identify four types of dependencies in the GatorMail webmail ap-
     plication, resulting in more that 2000 dependencies. By creating a
     better understanding of dependencies in software compositions, we
     hope to come to a better management of dependencies and to achieve
     more reliable software compositions.
         Two versions of this report are available: a technical report and
     a shrinked version without the appendices.



Keywords : Dependency analysis, Component-based software engineering, Gator-
Mail, software composition, software evolution, software maintainance
CR Subject Classification : D.2.9, D.2.13
   Dependency analysis of the GatorMail webmail application
           Lieven Desmet, Frank Piessens, Wouter Joosen, Pierre Verbaeten
                 DistriNet Research Group, Dept. Computer Science
                   Celestijnenlaan 200A, B-3001 Leuven, Belgium

                               Lieven.Desmet@cs.kuleuven.be


Contents
1 Introduction                                                                                                                                                13

2 GatorMail                                                                                                                                                   13
  2.1 Java Servlets . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  2.2 JavaServer Pages . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  2.3 The Struts Framework        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  2.4 Composition example         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16

3 Dependency analysis                                                                                                                                         19
  3.1 Exploring dependencies . . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
      3.1.1 Internal viewpoint . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.1.2 External viewpoint . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  3.2 Practical identification of dependencies                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      3.2.1 Internal viewpoint . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      3.2.2 External viewpoint . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
  3.3 Abstract application model . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26

4 Results                                                                                                                                                     28
  4.1 Overview of dependencies .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      4.1.1 Internal viewpoint .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      4.1.2 External viewpoint .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
  4.2 Some properties . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
  4.3 Roadmap to the appendices               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33

5 Conclusion                                                                                                                                                  33

A Components in GatorMail                                                                                                                                     35
  A.1 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                  35
  A.2 JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                   36




                                                              1
B Struts action dependencies                                                                                                          38
  B.1 AddressBkAction . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
       B.1.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
       B.1.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
  B.2 CheckCookiesAction . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
       B.2.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
       B.2.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
  B.3 AttachmentAction . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       B.3.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       B.3.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
  B.4 ChangeSubscribedAction . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       B.4.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       B.4.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
  B.5 CheckSessionAction . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
       B.5.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
       B.5.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
  B.6 ComposeAction . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
       B.6.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
       B.6.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
  B.7 ComposeResumeAction . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
       B.7.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
       B.7.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
  B.8 CreateFolderAction . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
       B.8.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
       B.8.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
  B.9 DeleteAddressAction . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
       B.9.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
       B.9.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
  B.10 DeleteFolderAction . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
       B.10.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
       B.10.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
  B.11 DeleteMessageAction . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
       B.11.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
       B.11.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
  B.12 DeleteMessagesAction . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
       B.12.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
       B.12.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
  B.13 EmptyTrashAction . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
       B.13.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
       B.13.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  B.14 FolderAction . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
       B.14.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
       B.14.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  B.15 FolderManageAction . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
       B.15.1 Internal control flow dependencies       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
       B.15.2 Internal dataflow dependencies . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
  B.16 FolderManageModifyAction . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47

                                             2
       B.16.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
       B.16.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
B.17   ForwardAction . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
       B.17.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
       B.17.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
B.18   LoginAction . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
       B.18.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
       B.18.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
B.19   LogoutAction . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.19.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.19.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
B.20   ModifyFolderAction . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.20.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.20.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
B.21   ModifyMessageAction . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.21.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       B.21.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
B.22   MessageAction . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       B.22.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       B.22.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
B.23   ModifyComposeAction . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       B.23.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
       B.23.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
B.24   MoveCopyAction . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51
       B.24.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51
       B.24.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51
B.25   NextMessageAction . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
       B.25.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
       B.25.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
B.26   PerformDeleteFolderAction . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
       B.26.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
       B.26.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
B.27   PreferencesAction . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
       B.27.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
       B.27.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
B.28   PrevMessageAction . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
       B.28.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
       B.28.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
B.29   PrinterFriendlyAction . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
       B.29.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
       B.29.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
B.30   RawMessageAction . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
       B.30.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
       B.30.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
B.31   RenameFolderAction . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
       B.31.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
       B.31.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55

                                              3
   B.32 ReplyAction . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
        B.32.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
        B.32.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
   B.33 SaveAddressAction . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
        B.33.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
        B.33.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
   B.34 SaveAddressesAction . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
        B.34.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
        B.34.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
   B.35 SelectAddressesAction . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
        B.35.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
        B.35.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
   B.36 SendAction . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
        B.36.1 Internal control flow dependencies        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
        B.36.2 Internal dataflow dependencies . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59

C JSP view dependencies                                                                                                                 60
  C.1 about.jsp . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
       C.1.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
       C.1.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
  C.2 addAddress.jsp . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
       C.2.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60
       C.2.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
  C.3 addressbook.jsp . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
       C.3.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
       C.3.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
  C.4 compose.jsp . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
       C.4.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
       C.4.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
  C.5 confirmDeleteFolder.jsp . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
       C.5.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
       C.5.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
  C.6 cookiesDisabled.jsp . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
       C.6.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
       C.6.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
  C.7 errorBasic.jsp . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       C.7.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       C.7.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
  C.8 errorCopy.jsp . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       C.8.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
       C.8.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
  C.9 errorCopyToSent.jsp . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       C.9.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       C.9.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
  C.10 errorCopyToTrash.jsp . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       C.10.1 External control flow dependencies         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       C.10.2 Internal dataflow dependencies . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66

                                               4
C.11 errorLogout.jsp . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
     C.11.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
     C.11.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
C.12 errorUncaught.jsp . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
     C.12.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
     C.12.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
C.13 feedback.jsp . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
     C.13.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
     C.13.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
C.14 folder.jsp . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
     C.14.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
     C.14.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
C.15 folderManage.jsp . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
     C.15.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
     C.15.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
C.16 folderManageModify.jsp . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
     C.16.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
     C.16.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
C.17 help.jsp . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
     C.17.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
     C.17.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
C.18 login.jsp . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
     C.18.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
     C.18.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
C.19 loginMessage.jsp . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
     C.19.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
     C.19.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
C.20 noInbox.jsp . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
     C.20.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
     C.20.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
C.21 preferences.jsp . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
     C.21.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
     C.21.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
C.22 message.jsp . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
     C.22.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
     C.22.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
C.23 printerFriendly.jsp . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
     C.23.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
     C.23.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
C.24 selectAddresses.jsp . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
     C.24.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
     C.24.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
C.25 stats.jsp . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
     C.25.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
     C.25.2 Internal dataflow dependencies . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
C.26 structure.jsp . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
     C.26.1 External control flow dependencies          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78

                                              5
        C.26.2 Internal dataflow dependencies . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
   C.27 style.css.jsp . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
        C.27.1 External control flow dependencies                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
        C.27.2 Internal dataflow dependencies . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
   C.28 test.jsp . . . . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
        C.28.1 External control flow dependencies                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
        C.28.2 Internal dataflow dependencies . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79

D Compositions in GatorMail                                                                                                                                80
  D.1 /login.do . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  D.2 /checkCookies.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  D.3 /logout.do . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  D.4 /folder.do . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  D.5 /emptyTrash.do . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  D.6 /modifyFolder.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81
  D.7 /folderManage.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81
  D.8 /folderManageModify.do .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81
  D.9 /createFolder.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81
  D.10 /renameFolder.do . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81
  D.11 /changeSubscribed.do . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
  D.12 /deleteFolder.do . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
  D.13 /performDeleteFolder.do .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
  D.14 /deleteMessage.do . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
  D.15 /deleteMessages.do . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   82
  D.16 /modifyMessage.do . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  D.17 /moveMessage.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  D.18 /copyMessage.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  D.19 /moveMessages.do . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  D.20 /copyMessages.do . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.21 /message.do . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.22 /rawMessage.do . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.23 /nextMessage.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.24 /prevMessage.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.25 /printerFriendly.do . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84
  D.26 /attachment.do . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.27 /addressbook.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.28 /addAddress.do . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.29 /saveAddress.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.30 /deleteAddress.do . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.31 /selectAddresses.do . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   85
  D.32 /saveAddresses.do . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.33 /errorCopy.do . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.34 /errorCopyToSent.do . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.35 /errorCopyToTrash.do . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.36 /compose.do . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.37 /composeResume.do . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86
  D.38 /forward.do . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87

                                                           6
   D.39 /reply.do . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87
   D.40 /modifyCompose.do         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87
   D.41 /send.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   87
   D.42 /errorBasic.do . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.43 /errorUncaught.do .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.44 /errorLogout.do . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.45 /noInbox.do . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.46 /about.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.47 /help.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.48 /feedback.do . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.49 /preferences.do . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.50 /CSS.do . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   88
   D.51 /failMessage.do . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   89
   D.52 /failMessageList.do .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   89

E Reuse of components in different compositions                                                                                                                    90
  E.1 Usage of servlets in different compositions . . . . . . . . . . . . . . . . . . . .                                                                          90
  E.2 Usage of JSP in different compositions . . . . . . . . . . . . . . . . . . . . . .                                                                           92

F Composition dependencies in                     GatorMail                                                                                                        95
  F.1 /login.do . . . . . . . . . . .             . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    95
      F.1.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    95
      F.1.2 Internal dataflow . .                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    95
      F.1.3 External control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
      F.1.4 External dataflow .                    . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
  F.2 /checkCookies.do . . . . . .                . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
      F.2.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
      F.2.2 Internal dataflow . .                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
      F.2.3 External control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
      F.2.4 External dataflow .                    . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
  F.3 /logout.do . . . . . . . . . .              . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
      F.3.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
      F.3.2 Internal dataflow . .                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
      F.3.3 External control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    97
      F.3.4 External dataflow .                    . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    98
  F.4 /folder.do . . . . . . . . . .              . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    98
      F.4.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    98
      F.4.2 Internal dataflow . .                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    98
      F.4.3 External control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    99
      F.4.4 External dataflow .                    . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100
  F.5 /emptyTrash.do . . . . . . .                . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100
      F.5.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100
      F.5.2 Internal dataflow . .                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100
      F.5.3 External control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   101
      F.5.4 External dataflow .                    . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   102
  F.6 /modifyFolder.do . . . . . .                . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   102
      F.6.1 Internal control flow                  . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   102


                                                                  7
       F.6.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   102
       F.6.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   104
       F.6.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
F.7    /folderManage.do . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
       F.7.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
       F.7.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
       F.7.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   106
       F.7.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
F.8    /folderManageModify.do . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
       F.8.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
       F.8.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
       F.8.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
       F.8.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
F.9    /createFolder.do . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
       F.9.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
       F.9.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
       F.9.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   109
       F.9.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
F.10   /renameFolder.do . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
       F.10.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
       F.10.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
       F.10.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
       F.10.4 External dataflow .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
F.11   /changeSubscribed.do . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
       F.11.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
       F.11.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
       F.11.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   113
       F.11.4 External dataflow .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
F.12   /deleteFolder.do . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
       F.12.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
       F.12.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
       F.12.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   115
       F.12.4 External dataflow .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   115
F.13   /performDeleteFolder.do . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   116
       F.13.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   116
       F.13.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   116
       F.13.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   117
       F.13.4 External dataflow .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   117
F.14   /deleteMessage.do . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   117
       F.14.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   117
       F.14.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   117
       F.14.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
       F.14.4 External dataflow .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
F.15   /deleteMessages.do . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
       F.15.1 Internal control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
       F.15.2 Internal dataflow . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   119
       F.15.3 External control flow    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   121

                                                      8
       F.15.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   121
F.16   /modifyMessage.do . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   121
       F.16.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   121
       F.16.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   121
       F.16.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   123
       F.16.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
F.17   /moveMessage.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
       F.17.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
       F.17.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
       F.17.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   125
       F.17.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
F.18   /copyMessage.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
       F.18.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
       F.18.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
       F.18.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   127
       F.18.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   127
F.19   /moveMessages.do . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   128
       F.19.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   128
       F.19.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   128
       F.19.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   129
       F.19.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   129
F.20   /copyMessages.do . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   130
       F.20.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   130
       F.20.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   130
       F.20.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   131
       F.20.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   131
F.21   /message.do . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   132
       F.21.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   132
       F.21.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   132
       F.21.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   133
       F.21.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   134
F.22   /rawMessage.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   134
       F.22.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   134
       F.22.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   134
       F.22.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   135
       F.22.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   135
F.23   /nextMessage.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
       F.23.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
       F.23.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
       F.23.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
       F.23.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
F.24   /prevMessage.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   138
       F.24.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   138
       F.24.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   138
       F.24.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   139
       F.24.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140
F.25   /printerFriendly.do . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140

                                                       9
       F.25.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140
       F.25.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140
       F.25.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
       F.25.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
F.26   /attachment.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
       F.26.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
       F.26.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
       F.26.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   142
       F.26.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   142
F.27   /addressbook.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   142
       F.27.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   142
       F.27.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   142
       F.27.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   143
       F.27.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
F.28   /addAddress.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
       F.28.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
       F.28.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
       F.28.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
       F.28.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
F.29   /saveAddress.do . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
       F.29.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
       F.29.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
       F.29.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
       F.29.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
F.30   /deleteAddress.do . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
       F.30.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
       F.30.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
       F.30.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   147
       F.30.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   148
F.31   /selectAddresses.do . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   148
       F.31.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   148
       F.31.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   148
       F.31.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   150
       F.31.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   150
F.32   /saveAddresses.do . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
       F.32.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
       F.32.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
       F.32.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
       F.32.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
F.33   /errorCopy.do . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
       F.33.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
       F.33.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
       F.33.3 External control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
       F.33.4 External dataflow .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
F.34   /errorCopyToSent.do . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
       F.34.1 Internal control flow     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
       F.34.2 Internal dataflow . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   155

                                                       10
       F.34.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
       F.34.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
F.35   /errorCopyToTrash.do . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
       F.35.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
       F.35.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
       F.35.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
       F.35.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
F.36   /compose.do . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
       F.36.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
       F.36.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
       F.36.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   158
       F.36.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   158
F.37   /composeResume.do . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   159
       F.37.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   159
       F.37.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   159
       F.37.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   159
       F.37.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
F.38   /forward.do . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
       F.38.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
       F.38.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
       F.38.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   161
       F.38.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   161
F.39   /reply.do . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   162
       F.39.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   162
       F.39.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   162
       F.39.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   163
       F.39.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   163
F.40   /modifyCompose.do . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   164
       F.40.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   164
       F.40.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   164
       F.40.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   165
       F.40.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
F.41   /send.do . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
       F.41.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
       F.41.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
       F.41.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
       F.41.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
F.42   /errorBasic.do . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
       F.42.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
       F.42.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
       F.42.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
       F.42.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
F.43   /errorUncaught.do . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
       F.43.1 Internal control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
       F.43.2 Internal dataflow . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
       F.43.3 External control flow       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
       F.43.4 External dataflow .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   170

                                                         11
F.44 /errorLogout.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   170
     F.44.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   170
     F.44.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   170
     F.44.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   170
     F.44.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
F.45 /noInbox.do . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.45.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.45.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.45.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.45.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
F.46 /about.do . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.46.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171
     F.46.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   172
     F.46.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   172
     F.46.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   173
F.47 /help.do . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   173
     F.47.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   173
     F.47.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   173
     F.47.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   173
     F.47.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   174
F.48 /feedback.do . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   174
     F.48.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   174
     F.48.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   174
     F.48.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   175
     F.48.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   175
F.49 /preferences.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   175
     F.49.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   175
     F.49.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   176
     F.49.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   176
     F.49.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   177
F.50 /CSS.do . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   177
     F.50.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   177
     F.50.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   177
     F.50.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   177
     F.50.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   178
F.51 /failMessage.do . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   178
     F.51.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   178
     F.51.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   178
     F.51.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   179
     F.51.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   179
F.52 /failMessageList.do . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   180
     F.52.1 Internal control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   180
     F.52.2 Internal dataflow . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   180
     F.52.3 External control flow      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   181
     F.52.4 External dataflow .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   181




                                                      12
1    Introduction
Nowadays, software systems are evolving towards modular composed applications, in which
existing, loosely-coupled software components are reused in new compositions. These loosely-
coupled components have typically very few dependencies on other components, in order to
better promote reuse in different compositions and applications. In addition, modern software
systems become more and more mission critical, requesting for a high availability and a reliable
functioning of the system.
    In practice however, reusable software components tend to have quite often a set of de-
pendencies on other components in software systems. In most cases, these dependencies are
even not well documented, and remain completely implicit in the software system. In order
to achieve a reliable functioning of the software system, the software composer needs to take
care of all those inter-component dependencies within the software system and make sure
they are well satisfied.
    In this report, we illustrate the complexity of inter-component dependencies in loosely-
coupled software systems by exploring the dependencies in an existing component-based web-
mail application, GatorMail. Both explicit and implicit dependencies are taken into account
in this case study. By creating a better understanding of dependencies in software composi-
tions, we hope to come to a better management of dependencies and to achieve more reliable
software compositions.
    The remainder of this report is structured as follows. Section 2 introduces the webmail
application GatorMail and briefly explains underlying technologies such as Java Servlets,
JavaServer Pages and the Struts Framework. In section 3, the dependencies within the
GatorMail application are explored. Firstly, four different types of dependencies are identified
within the case study. Secondly, for each type, a practical approach is presented to reveal all
dependencies based upon the source code and configuration files of the webmail application.
Finally, an abstract model of the webmail application is constructed with respect to the
identified dependencies. The results of the dependency exploration are discussed in section 4.
Section 5 summarizes this practical dependency study of the GatorMail webmail application.
Section 4.3 presents a roadmap to the appendices A to F. These appendices include the
detailed results of the conducted dependency study.
    Two versions of this report are available: this technical report [3] and a shrinked version
without the appendices [2].


2    GatorMail
GatorMail [4] is an open-source webmail application built on the Struts framework [10], using
the Java Servlet and JavaServer Pages technologies. It was originally developed to meet the
needs of the University of Florida [1]. The project has 4 active developers (Drake Emko,
Sandy McArthur, Todd Williams, Stephen L. Ulmer), and is housed on the SourceForge
development platform [9].
   As in most webmail systems, the system’s functionality can be divided in five subsystems:
authentication, folder actions, message actions, addressbook actions and settings.

    • The authentication subsystem allows users to log in and to log off of the webmail service
      using password credentials.



                                              13
   • The folder subsystem consist of actions for creating, removing and modifying mail folders
     as well as actions for listing messages in a mail folder. Folder modifications include
     renaming and changing the subscription status of the folder.

   • The message subsystem enables retrieving and displaying messages (including attach-
     ments) as raw messages, or in a standard or printerfriendly layout. Messages can be
     deleted, moved or copied to another mail folder. Besides message housekeeping, also new
     outgoing messages, replies to previous messages or message forwards can be composed
     and sent out.

   • The addressbook subsystem allows users to add, remove and modify mail contacts in
     their addressbook. When composing a new message, the appropriate contact(s) can be
     selected from the addressbook.

   • The settings subsystem enables setting and modifying user preferences. Typical prefer-
     ences are account information (such as the mail signature and the preferred from and
     reply-to header fields) and user interface settings.

   The GatorMail software project consists of about 14.350 lines of Java code, combined with
about 6.100 lines of JSP formatting. This results in 36 different Strut action elements and 29
JSP views (both listed in appendix A). These actions and views are frequently reused and
hereby composed in 52 compositions, each representing the processing logic for one URL of
the web application.
   Subsections 2.1, 2.2 and 2.3 give a brief introduction to the underlying technologies:
Java Servlets, JavaServer Pages and the Struts Framework. Subsection 2.4 illustrates how
components and views are composed in GatorMail using these technologies.

2.1   Java Servlets
The Java Servlet technology is part of the J2EE specification and provides mechanisms for
extending the functionality of a Web server and for accessing existing business systems [7, 6].
Java Servlets are functional units of the web tier. A J2EE web application is typically a
collection of Java Servlets and is deployed in a servlet-based webcontainer such as Tomcat,
JBoss or WebSphere. The webcontainer offers infrastructural support for using servlets.
Extra-functional properties such as load-balancing and security are added to the webcontainer
rather than to the servlets themselves.
    The core functionality of the container is to handle incoming webrequests and to use
(chains of) servlets for processing the requests. The container casts incoming HTTP requests
into an object-oriented form (HTTPServletRequest) and checks to see if there is a servlet
registered for processing that request. If there is a match, the request is given to the servlet.
    In general, servlets are pure functional units of the web tier. The web deployment descrip-
tor of a webcontainer contains the deployment information of the web application, including
extra-functional properties and a list of servlets with their corresponding URL mapping.
    Within a web application, servlets are loosely-coupled with each other and support for
dispatching between servlets is provided by the webcontainer. The servlets can communicate
anonymously by means of a shared data repository. In fact, five instances of shared repositories
are provided to the servlet: a data repository associated with the dynamic webpage (1), with
the web request (2), with the user session (3), the web context (4) and the application (5).


                                               14
Hence, servlet-based applications are data-centered compositions [8], and the application
composer must pay special attention to the dataflow dependencies.

2.2   JavaServer Pages
The JavaServer Pages (JSP) technology is also part of the J2EE specification and is built upon
Java Servlets. JSP enables separation of content from presentation in developing dynamic
websites. In JSP, Java code can be embedded into the markup language similar to other
technologies such as ASP and PHP. Next to embedding plain Java code, also JSP Tags
can be used within the markup language. JSP Tags encapsulate simple programming logic
(such as iterators and boolean tests) and provide an abstract interface to the model of the
application. By doing so, website designers can create the website user interface without deep
knowledge of the underlying web technology. JSP also allows to define custom tag libraries
to enrich the set of logical tags that can be used by the website designer.
    JSP files are also deployed in a servlet-based webcontainer and are compiled into Java
Servlets the first time they are requested within an application. This implies that JavaServer
Pages inherit the strengths of Java Servlets, while providing a better separation between logic
and markup.
    In general, JSP files are used to develop the user interface (or view) of a web application.
They are loosely coupled, and can communicate anonymously with other JSP files or servlets
using shared data repositories.

2.3   The Struts Framework
Apache Struts is an open-source application framework on top of the Java Servlets and
JavaServer Pages technologies. Struts encourages developers to use the JavaServer Pages
Model 2 architecture, which is a variation on the Model-View-Controller design pattern for
building web applications.
    In a Struts application (illustrated in figure 1), incoming HTTP requests are encapsulated
in HTTPServletRequest objects and dispatched to the Struts’ ActionServlet. This Action-
Servlet is the Controller of the Struts application. All input parameters are encapsulated
in an ActionForm data container and additional input validation checks can be performed.
Next, according to the requested URL, an appropriate action is selected and the HTTPServle-
tRequest (Req in figure 1) and ActionForm are given to this action for further processing. An
action interacts with the Model and fetches the necessary data for the View. After processing
the request, an ActionForward object(AF in figure 1) is returned to the ActionServlet, indi-
cating which action or view has to be processed next. This recursion continues until a JSP
view is reached and output is sent back to the web browser.
    Instead of using several servlets for the different functional blocks, Struts deploys only one
standard Servlet, the ActionServlet, in combination with several actions. Actions resemble to
Java Servlets in the way that they both process a HTTPServletRequest and are able to use
the associated shared data repositories. New actions can be easily implemented by extending
the org.apache.struts.action.Action class. Actions return an ActionForward object to the
ActionServlet after processing the request.
    In order to achieve reusable actions, an extra forward indirection is used in Struts. Actions
uses logical names to identify forwards, whereas the Struts configuration file (which is specific
for each configuration) specifies the declarative mapping between logical forwards and actual


                                               15
                                                                               Req        Action
                                                           ActionServlet
                                                                               AF
                                     HTTP request
                                                                                          JSP
                                                                               Req
           Web browser
                                                        Web application

                              Figure 1: Request processing in Struts


forwards. In this way, the logical names are mapped to actual forwards during run-time using
the ActionMapping class.
    ActionForms are created by extending the org.apache.struts.action.ActionForm class. Ac-
tionForms are data containers and are populated with the input parameters of the given
request, such as the input field of a web form. Before they are given to an action, they are
validated. Instead of coding ActionForms for each web form, also a DynaActionForm can
be used. This is a generic ActionForm that can be configured declaratively in the Struts
configuration file.

2.4   Composition example
In order to clarify the different technologies used in GatorMail, a small composition example
from the webmail application is now explained in more detail.
    In GatorMail, each user can configure some web mail preferences, such as his default name
and replyTo address, his mail signature, his threshold for junkmail. Saving these preferences
is done by filling in a preferences web form (preferences.jsp) and submitting the fields to the
/preferences.do URL. The server-side processing composition is shown in figure 2. First, the
ActionServlet dispatches the request to the PreferencesAction. Next, the PreferencesAction
return either a input or success forward, both resulting in forwarding the request to the JSP
view preferences.jsp. Finally, the output of the JSP page is sent back to the user.
    In figure 2, the rounded rectangles represent the Struts actions and JSP views. The black
arrows between the rectangles express the control flow in the composition. When a control
flow transition is the result of a forward, the transition is labelled with the logical forward
name (or forward names in case several forwards result in the same transition).

                                                control flow



                      /preferences
                                                                      input/
                                              PreferencesAction                     /preferences.jsp
                                                                     success




             url: /preferences.do              Struts Action                          JSP View


                            Figure 2: Composition example in Struts


                                                      16
        Listing 1 shows the according Struts configuration with three sections: the form beans,
     the global forwards and the action mappings.

                          Listing 1: Struts configuration file: struts-config.xml
 1   <struts−config>
 2     <!−− Form Bean Definitions −−>
 3     <form−beans>
 4         <form−bean name="preferencesForm" type="edu.ufl.osg.webmail.forms.PreferencesForm"/>
 5     </form−beans>
 6     <!−− Global Forward Definitions −−>
 7     <global−forwards>
 8         <forward name="folder" path="/folder.do"/>
 9         <forward name="inbox" path="/folder.do?folder=INBOX" redirect="true"/>
10        <forward name="login" path="/login.do"/>
11     </global−forwards>
12     <!−− Action Mapping Definitions −−>
13     <action−mappings>
14        <action path="/preferences" name="preferencesForm" scope="request" input="input"
15                          validate="true" type="edu.ufl.osg.webmail.actions.PreferencesAction">
16            <forward name="input" path="/preferences.jsp"/>
17            <forward name="success" path="/preferences.jsp"/>
18        </action>
19     </action−mappings>
20   </struts−config>

         In the form beans section, one ActionForm is defined, namely the preferencesForm. This
     ActionForm is a data container (conform the JavaBean specification) with appropriate get-
     ters and setters for the fields of the preferences web form (username, replyTo, signature,
     junkThreshold, . . . ). Next to getters and setters, also a reset and a validate method are
     implemented to clear the web form and to validate the input parameters on submission. A
     shrunk implementation of this ActionForm is shown in listing 2.
         The struts configuration describes two types of forwards: global forwards and local for-
     wards. Global forwards can be used by all actions and are listed in the global forwards section.
     Local forwards are action-specific and are part of the action description. These local forwards
     either introduce a new forward or override the global forward for this action only.
         The action mappings section lists the different actions of the application. Each action is
     described by means of the action implementation, a name and a path on which the action has
     to be deployed. Also an ActionForm can be requested, together with the scope of the data
     repository where the ActionForm can be retrieved. The validate parameter indicates whether
     or not the ActionForm should be validated, and in case the input fields for the ActionForm
     are missing or the validation fails, the logical forward described by the input parameter is
     automatically followed.
         Listings 3 and 4 illustrate with simplified code fragments how the PreferencesAction and
     preferences.jsp view are implemented.

                  Listing 2: Implementation of an ActionForm: PreferencesForm.java
 1   public class PreferencesForm extends ActionForm {
 2     private String replyTo;
 3     private String signature;
 4     // reset and validate method
 5     public void reset(final ActionMapping actionMapping, final HttpServletRequest request) {
 6        super.reset(actionMapping, request);


                                                     17
 7         setReplyTo(null);
 8         setSignature(null);
 9       }
10       public ActionErrors validate(final ActionMapping actionMapping, final HttpServletRequest request) {
11          ActionErrors errors = super.validate(actionMapping, request);
12          if ( errors == null) { errors = new ActionErrors(); }
13          final String replyTo = getReplyTo();
14          if (replyTo != null && replyTo.length() > 0) {
15             try {
16                 new InternetAddress(replyTo).validate();
17             } catch (AddressException ae) {
18                 errors .add("replyTo", new ActionError("preferences.replyTo.invalid", ae.getMessage()));
19             }
20          }
21          return errors;
22       }
23       // getters and setters
24       public String getReplyTo() { return replyTo; }
25       public void setReplyTo(final String replyTo) { this.replyTo = replyTo; }
26       public String getSignature() { return signature; }
27       public void setSignature(final String signature) { this.signature = signature; }
28   }


                      Listing 3: Implementation of an Action: PreferencesAction.java
 1   public final class PreferencesAction extends Action {
 2     public final ActionForward execute(final ActionMapping mapping, final ActionForm form,
 3                final HttpServletRequest request, final HttpServletResponse response) throws Exception {
 4        ActionsUtil.checkSession(request );
 5        final HttpSession session = request.getSession ();
 6        final PreferencesForm prefsForm = (PreferencesForm)form;
 7        final User user = Util.getUser(session );
 8        final Properties prefs = (PreferencesProvider)getServlet (). getServletContext().
 9                   getAttribute(Constants.PREFERENCES PROVIDER).getPreferences(user, session);
10        // Update preferences from the form bean.
11        final String replyTo = prefsForm.getReplyTo();
12         if (replyTo == null && prefs.getProperty("compose.replyTo") != null) {
13            prefs .remove("compose.replyTo");
14        } else if (replyTo != null && !replyTo.equals(prefs.getProperty("compose.replyTo"))) {
15            prefs .setProperty("compose.replyTo", replyTo);
16        }
17        final String signature = prefsForm.getSignature();
18         if (signature == null && prefs.getProperty("compose.signature") != null) {
19            prefs .remove("compose.signature");
20        } else if (signature != null && !signature.equals(prefs .getProperty("compose.signature"))) {
21            prefs .setProperty("compose.signature", signature);
22        }
23        return mapping.findForward("success");
24     }
25   }


                         Listing 4: Implementation of a JSP view: preferences.jsp
 1   <%@page contentType="text/html" import="java.util.List,
 2                                     edu.ufl.osg.webmail.util.Util,
 3                                     edu.ufl.osg.webmail.Constants,
 4                                     java.util.ArrayList"%>


                                                        18
 5   <%@taglib   uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 6   <%@taglib   uri="/tags/struts-html" prefix="html"%>
 7   <%@taglib   uri="/tags/struts-bean" prefix="bean"%>
 8   <%@taglib   uri="/tags/webmail" prefix="wm"%>
 9
10   <html:form action="preferences">
11   <table class="headerTable" cellpadding="3" cellspacing="0" width="100%">
12    <tr class="altrow">
13      <th width="20%" align="right" valign="top">Reply To address:</th>
14      <td>
15        <html:errors property="replyTo"/>
16        <html:text property="replyTo" size="40"/>
17        <div class="tip">The address you want people to reply to if different than this one.</div>
18      </td>
19    </tr>
20    <tr>
21      <th wdith="20%" align="right" valign="top">Signature:</th>
22      <td>
23        <html:errors property="signature"/>
24        <html:textarea property="signature" cols="78" rows="5"/>
25        <div class="tip">
26           Enter a custom signature to be attached when you compose messages.
27           <p>
28             You are encouraged to keep the "cut line", the two dashes and then a space. <br/>
29             Many email clients reconize this as the start of your signature.
30           </p>
31        </div>
32      </td>
33    </tr>
34    <tr>
35      <td>&nbsp;</td>
36      <td>
37        <html:submit property="action"><bean:message key="button.savePreferences"/></html:submit>
38      </td>
39    </tr>
40   </table>
41   </html:form>



     3     Dependency analysis
     In this section the different types of dependencies within the GatorMail are firstly explored
     within the case study. Secondly, for each type of dependencies a practical approach is pre-
     sented to reveal these dependencies within the case study. Finally, an abstract model of the
     webmail application is constructed with respect to the identified dependencies. The results
     of this dependency exploration will be discussed in section 4.

     3.1   Exploring dependencies
     In exploring different types of dependencies within the GatorMail application, two viewpoints
     are used: an internal and an external viewpoint. In the internal viewpoint, all dependencies
     within the server-side application are taken into account. The external viewpoint considers
     the complete interaction between the user and the application for exploring dependencies.
     Both viewpoints are now further discussed.

                                                   19
3.1.1   Internal viewpoint
The internal viewpoint explores dependencies within the different server-side compositions
for processing the different requests. Hereby, dependencies due to control flow and dataflow
are distinguished.
Control flow dependencies
The control flow of an application is the description how the computational control moves
around through a running instance of the application or, in other words, which executing
method invokes another method and passes hereby the control to the latter one.
    Within the server-side processing, each URL consist of a composition of components. The
control flow within such a composition is the way control flows passes through the composition,
from one action or JSP view to another. In figure 2, the control flow is indicated with black
arrows between actions or views. The ActionServlet gives control to the PreferencesAction,
and after processing the PreferencesAction forwards control (by means of the forward label
input or success) to the preferences.jsp view.
    In reality, the ActionServlet also manages the control flow during the forwards since each
action or View returns control to the ActionServlet after processing the request. In this report
we abstract the control flow to the dispatching between the different actions and JSP views
without the management of the ActionServlet in between.
Dataflow dependencies
The dataflow describes how data moves through a collection of computations. Dataflow may
follow the control flow (e.g. in passing arguments through methods), but dataflow and control
flow can have separate paths within an application, as is the case in indirect data sharing.
    In the GatorMail webmail application, the arguments passed through method invocations
are fixed for all components. Servlets (and consequently also JSP pages) have a HTTPServle-
tRequest and HTTPServletResponse parameter in their process method. Struts actions ad-
ditionally receive an ActionForm and an ActionMapping parameter.
    What is more interesting in exploring dataflow dependencies between components, are the
shared objects that are attached to the HTTPServletRequest. As already said earlier, actions
and JSP views can communicate anonymously by means of five shared data repositories. In
figure 3 three shared repositories are shown for the given composition. In the request scope for
example, the PreferencesAction does have both read and write interactions with the repository
for the requestStartTime object, whereas later on in the composition the preferences.jsp page
does only read the requestStartTime object while processing the request.
    For each request, the shared data repository on the request scope is newly created (and
thus empty) at the start of the request. The repositories on the session and context scope
remain for the lifetime of respectively the user session and the application context. Every user
has his own shared repository for the session scope, while all users share a common shared
repository for the context scope.
    Not all repository interactions shown in figure 3 have to occur in processing a request. The
actual set of interactions for a particular request may be a subset of the shown interaction. If
interaction statements for example occur in a conditional block (e.g. if-then-else structure),
their execution may among others depend on user’s input parameters, the state of the request
or the state of the application. Listing 5 illustrates that the PreferencesAction does write the
requestStartTime object to the repository only if the object does not exist already.




                                              20
                       Figure 3: Internal dataflow dependencies in Struts

                          Listing 5: Conditional repository interaction
if (request.getAttribute("requestStartTime") == null) {
   request. setAttribute("requestStartTime", new Long(System.currentTimeMillis()));
}



3.1.2   External viewpoint
The external viewpoint considers the interaction between the user and the application for
exploring dependencies. Similarly, the dependencies are split up in control flow and dataflow
dependencies.
Control flow dependencies
Similar to other client-server applications, a protocol exists between the user and the web
application, expressing which messages in which order can be exchanged (figure 4). More
specifically for web applications, the order in which URLs can be requested to the server may
be constrained: adding an attachment is only meaningful after constructing a new message,
and retrieving sensitive information is only allowed after successfully passing the authentica-
tion page.
    In a normal usage of a web application, the responses of the web server contain the
possible URLs that can be requested next. In figure 5 for example all views that have
pointers to the /preferences.do URL are showed in rounded rectangles on the left side of
the figure. The rectangles on the right side hold all URLs (of the web application) that
can be reached by following pointers from the preferences.jsp view (which is part of the
/preferences.do composition). Users however can also request bookmarked URLs or choose
an URL by entering the URL manually in their browser. So, extra entry points to certain
URLs of the application might also be allowed.
Dataflow dependencies
In the interaction between user and application, also dataflows exist. In requesting an URL


                                                  21
                      Figure 4: Interaction between client and server




                     Figure 5: Protocol transitions for /preferences.do


from the application, the browser can send extra input parameters together with the request
(figure 6). These input parameters could be input fields from a web form, hidden fields in a
web page or parameters attached to the URL. For example, sending the preferences form to
the application in order to save the user preferences, eight input parameters are attached to
the request.
    Data is also flowing from the application to the user in the responses, but this dataflow
is not considered within this analysis.




                     Figure 6: Data sharing between client and server




                                             22
3.2     Practical identification of dependencies
In this subsection a practical approach for finding the different dependencies in the GatorMail
webmail application is described. Hereby existing configuration files and tools for matching
regular expressions are used. The approach does not give guarantees about the completeness
of the dependencies, but the approach already reveals most of the existing dependencies
within GatorMail. Similar or even better results can also be achieved by using more advanced
techniques such as an appropriate metamodel representing the software system [11].
    The presented practical approach lists both control flow and dataflow dependencies in the
internal and external viewpoint.

3.2.1    Internal viewpoint
Control flow dependencies
The control flow dependencies in the internal viewpoint can easily be identified thanks to the
explicit forwarding concept in Struts. In a first step, the different logical forwards are listed
that can be returned by each action. In a second step, these logical forwards are for each
action mapped to actual forwards. Both steps are now further described.
    Listing the logical forwards for each action is done by applying a simple search pattern
on the Java source code of the actions. Since each ActionForwards is created by calling
the findForward method on the ActionMapping parameter, searching for the findForward
pattern does return the logical forwards of a particular action.
$ grep ’findForward’ edu/ufl/osg/webmail/actions/PreferencesAction.java
   return mapping.findForward("success");

    In order to map the logical forwards to actual forwards, the global and local forwards are
inspected in the Struts configuration file. In case of the PreferencesAction, two local forwards
(input and success) are listed, both associated with the /preferences.jsp URL.
<action path="/preferences" name="preferencesForm" scope="request" input="input"
              validate="true" type="edu.ufl.osg.webmail.actions.PreferencesAction">
  <forward name="input" path="/preferences.jsp"/>
  <forward name="success" path="/preferences.jsp"/>
</action>

    In this example, also a mismatch can be noticed between the described local forwards in
the configuration file, and the actual used logical forward names in the implementation. Since
the pattern search can not guarantee completeness, the union between both sets is used in
this report as possible control flows starting from the inspected action.
Dataflow dependencies
Since dataflow dependencies within the server-side application are not specified within the
GatorMail application, searching the dataflow dependencies requires much more effort. Main
idea here is again to use search patterns on the Java source code of the different actions to
identify their interactions with the shared repositories. Servlets and actions can interact with
shared repositories using the getAttribute and setAttribute methods on the request, session or
scope object. The used regular expression for finding these interactions is [gs]etAttribute.
$ grep ’[gs]etAttribute’ edu/ufl/osg/webmail/actions/PreferencesAction.java
   final PreferencesProvider pp = (PreferencesProvider)getServlet().
                getServletContext().getAttribute(Constants.PREFERENCES PROVIDER);
   request. setAttribute("X-Image-Url", imageUrl);


                                                 23
        request. setAttribute("X-Image-Url", prefs.getProperty("compose.X-Image-Url"));

         However, using this naive approach, some catches did occur. The actions in the GatorMail
     application for example use singletons and static methods for some checks and recurring
     activities, such as checking the user’s session. Listing 6 shows the ActionsUtil class with its
     static method checkSession. This method checks the user’s session by interacting with the
     shared repository (lines 6-8) and throwing exceptions if needed. To do so, the request object
     is used as input parameter of the method.
         To also list these repository interactions, the search pattern is extended with methods
     known to interact with shared repositories. The regular expression (tailored to the GatorMail
     application) then looks like:
     getAttribute|setAttribute |checkSession|getFolder|getUser|getAddressList|getAttachList|getMailStore
                                                        |removeAttachList|generateComposeKey|getMailSession


                             Listing 6: Use of static methods: ActionsUtil.java
 1   final class ActionsUtil {
 2     public static void checkSession(final HttpServletRequest request) throws SessionExpiredException,
 3                                                      InvalidSessionException, NoSuchProviderException {
 4        final HttpSession session = request.getSession ();
 5        // Cheeze hack to let us track how long a request took.
 6        if (request.getAttribute("requestStartTime") == null) {
 7           request. setAttribute("requestStartTime", new Long(System.currentTimeMillis()));
 8        }
 9        // check if the user was working on or trying to send a message
10        // when his/her session timed out
11        if ( session .isNew()) {
12           throw new SessionExpiredException("New session created");
13        }
14        if (Boolean.TRUE.equals(session.getAttribute(Constants.LOGGING IN))) {
15           throw new InvalidSessionException("User trying to login in concurrently.");
16        }
17     }
18   }

         Also in identifying the interactions between JSP views and the shared repositories, the
     naive search pattern turned out to be insufficient. Two noteworthy problems are now shortly
     discussed: the use of Struts Tiles and the use of the JSTL Expression Language (EL).
         Struts Tiles enable web designers to use some kind of layout manager in constructing JSP
     views, similar to layout managers in GUIs for stand-alone applications. A layout designs a
     view in an abstract way, after which the different parts (or tiles) can be filled in to create
     a concrete instance of the view. The preferences.jsp view for example is an instance of the
     defaultLayout, and is built up as shown in figure 7. One can also think of Tiles as the
     server-side alternative of using frames in a web page.
         To identify the repository interactions of a JSP view using Struts Tiles, the interactions
     of the layout and the included tiles need to be analyzed as well.1
         Another difficulty in identifying repository interactions is the use of the JSTL Expression
     Language (EL). The EL provides web designers a simple interface to access web application
     data, such as data in the shared repositories. EL expressions are surrounded by delimiters ${
        1
          Actually the same behavior also occurs when JSP views or Servlets include other pages with the include
     statement or tag.


                                                         24
                        Figure 7: Structure of preferences.jsp using Struts Tiles


     and } and can also contain operators. EL expressions are run-time evaluated and are mostly
     used to output shared data and to construct test conditions. In listing 7, the focus of the login
     web form depends on the outcome of two tests (lines 4-5), expressed with EL: the existence
     of the loginForm object at the request scope and the username property of this object.
         EL expressions can be easily found with the search pattern ${.*}. Interpreting these ELs
     correctly however requires much more effort since there is no information available to indicate
     with which shared repository the JSP view is interacting. The data objects in EL are only at
     run-time searched in the different shared repositories in a cascading way. For this analysis,
     these EL expressions are processed manually.

                   Listing 7: Use of the JSTL Expression Language: loginForm.jsp
 1   <%
 2   String loginFocus = "username";
 3   %>
 4   <c:if test="${! empty loginForm}">
 5    <c:if test="${! empty loginForm.username}">
 6   <%
 7     loginFocus = "password";
 8   %>
 9    </c:if>
10   </c:if>
11   <html:form action="login" focus="<%= loginFocus %>">
12   Username: <html:text property="username" size="16"/><BR/>
13   Password: <html:password property="password" size="16" redisplay="false"/><BR/>
14   <html:submit property="action" styleClass="button">Login</html:submit>
15   </html:form>



     3.2.2   External viewpoint
     Control flow dependencies
     Identifying control flow dependencies in het external viewpoint is based on finding the set
     of hyperlinks that are created within each JSP view. To do so, two methods for defining
     hyperlinks in GatorMail are inspected.
         Firstly, hyperlinks can be constructed by directly outputting the anchor HTML-tag. The
     according search pattern herefore is a href. In applying this search pattern, only hyperlinks
     pointing to the GatorMail application are considered.
         Secondly, hyperlinks can be created by using the struts-html tag library. Three tags
     are important in identifying the hyperlinks, resulting in the search pattern html:link|html:
     rewrite|html:form. The <html:link> tag represents a HTML anchor with a hyperlink, with


                                                    25
     as forward attribute the logical forward within Struts (line 5 of listing 8). The <html:rewrite>
     writes out a hyperlink without inserting the anchor tag (line 9 of listing 8). The action
     attribute of the <html:form> tag indicates to which URL the webform has to be sent in
     order to be processed (line 10 of listing 4).

                        Listing 8: Extract from the navigation tile: navBar.jsp
 1   <%@page contentType="text/html"%>
 2   <%@taglib uri="/tags/struts-html" prefix="html"%>
 3   <table>
 4    <tr>
 5     <td background="<html:rewrite page="/navbg.jpg"/>">&nbsp;</td>
 6    </tr>
 7    <tr>
 8     <td>
 9     <html:link forward="compose">Compose a new message</html:link>
10     </td>
11    </tr>
12   </table>

     Dataflow dependencies
     The dataflow dependencies in the external viewpoint can easily be identified thanks to the
     explicit ActionForm concept in Struts. In the Struts configuration file (listing 1), the name at-
     tribute of an action defines the ActionForm that is constructed and validated before executing
     the given action.
         In addition to the ActionForms, input paramters can also be read by using the getPa-
     rameter method of the HTTPServletRequest. Identifying these datalofows is as simple as
     searching for the getParameter pattern.

     3.3   Abstract application model
     With the identified types of dependencies in mind, an abstract model of the webmail appli-
     cation can be constructed. This abstract model captures all the relevant information about
     the application structure and the control flow and dataflow dependencies, while abstracting
     programming details. This model allows to store all identified dependencies from section 3.2
     for further analysis or dependency management. Also, based on this abstract model, all
     data presented in appendices A to F of this report can easily be regenerated. The abstract
     application model is shown in figure 8 and is now further explained.
         A composition represent the server-side logic for processing a URL and is a chain of Com-
     positionItems. These CompositionItems are pointers to components of the application, either
     an Struts action or a JSP view. A composition can also have an ActionForm for encapsu-
     lating the input parameters of the request. A component also specifies its interactions with
     the shared data repositories by means of SharedDataItems. A link between the Component
     and InputData lists the input parameters that are read directly from the request (instead of
     using an ActionForm).
         In addition, also the internal structure of a JSPView is included in the abstract model.
     A tiled JSP view (JSPComponent) is constructed by selecting a Layout, and overriding some
     of the predefined Tiles in the Layout. Layouts and Tiles specify their interactions with the
     shared data repositories by means of SharedDataItems. Similarly, the express external control
     flow (i.e. the URL hyperlinks in the view) by means of UrlForwards.


                                                   26
Figure 8: Abstract application model




                27
4     Results
This section shortly discusses the results of the dependency analysis conducted on the Gator-
Mail webmail application. Firstly, an overview of the identified dependencies is given. Sec-
ondly, some properties of these dependencies are discussed.

4.1     Overview of dependencies
4.1.1    Internal viewpoint
Table 1 shows an overview of the dependencies in the internal viewpoint. 36 Struts actions
and 29 JSP views were reused in 52 compositions, each representing the processing logic for
one URL of the web application. Some components are even reused several times within
one composition. The composition processing the /modifyMessage.do request for example
consists of 11 components of which 6 are unique (figure 9).




                   Figure 9: Composition processing /modifyMessage.do

    1369 dataflow dependencies are identified. For each composition and scope (request,
session and context) the number of data items and the number of read, write and read/write
interactions are summarized in table 1. In addition, 147 control flow transitions were identified
within the 52 compositions.

4.1.2    External viewpoint
In the external viewpoint 133 dataflow dependencies are identified, next to 549 control flow
dependencies (table 2). The dataflow dependencies are a combination of the data fields
encapsulated in ActionForms and input parameters directly read by the components. The
counted control flow dependencies are the URL pointers that are generated by the different
views of a composition. In addition also the number of compositions referring to the given
composition are listed in table 2.




                                              28
                               # comp.               request                      session                      context           # data-    # control
     url                       log (fys)   # items   #r # w     # r/w   # items   #r   # w   # r/w   # items   #r # w    # r/w   flow dep.   flow dep.
     /login.do                    6 (6)        4      7     0     2        7       6     0     7        1      2     0     0        24          5
     /checkCookies.do             1 (1)        2      1     0     1        3       1     0     2        0      0     0     0         5          0
     /logout.do                   1 (1)        0      0     0     0        3       3     0     0        0      0     0     0         3          0
     /folder.do                   2 (2)        9      5     6     2        4       2     0     3        1      2     0     0        20          1
     /emptyTrash.do               3 (3)        9      6     6     3        4       3     0     5        1      2     0     0        25          2
     /modifyFolder.do            11 (8)       14     20    21     8        4      10     0    14        1      6     0     0        79         11
     /folderManage.do             2 (2)        6      5     4     1        3       2     0     2        1      1     0     0        15          1
     /folderManageModify.do      2 (2)        6       5     4     1        3       2     0     2        1      1     0     0        15          1
     /createFolder.do             5 (5)        8     11     9     3        3       5     0     6        1      2     0     0        36          4
     /renameFolder.do             5 (5)        8     11     9     3        3       5     0     6        1      2     0     0        36          4
     /changeSubscribed.do        5 (5)        8      11     9     3        3       5     0     6        1      2     0     0        36          4
     /deleteFolder.do             4 (4)        8     10     8     2        3       4     0     4        1      2     0     0        30          3
     /performDeleteFolder.do     3 (3)         7      6     5     2        3       3     0     4        1      1     0     0        21          4
     /deleteMessage.do            6 (6)       17     12    10    10        3       6     0     6        2      4     0     0        48          5
     /deleteMessages.do           5 (5)       12     10    10     4        4       5     0     7        1      3     0     0        39          4
     /modifyMessage.do           11 (6)       12     20    18     8        4      10     0    14        1      6     0     0        76         12
     /moveMessage.do              5 (5)       12     10     9     4        4       5     0     7        1      3     0     0        38          5
     /copyMessage.do              5 (5)       12     10     9     4        4       5     0     7        1      3     0     0        38          5
     /moveMessages.do             5 (5)       12     10     9     4        4       5     0     7        1      3     0     0        38          5
     /copyMessages.do             5 (5)       12     10     9     4        4       5     0     7        1      3     0     0        38          5
29




     /message.do                  4 (4)       17      8     9    10        4       4     0     5        2      4     0     0        40          3
     /rawMessage.do               3 (3)       10      6     8     3        4       3     0     5        1      2     0     0        27          2
     /nextMessage.do              4 (4)       17      8     9    10        4       4     0     5        2      4     0     0        40          3
     /prevMessage.do              4 (4)       17      8     9    10        4       4     0     5        2      4     0     0        40          3
     /printerFriendly.do          2 (2)        9      2     3     6        3       2     0     2        2      2     0     0        17          1
     /attachment.do               1 (1)        4      1     2     1        3       1     0     2        0      0     0     0         7          0
     /addressbook.do              2 (2)        5      5     2     1        4       2     0     3        1      1     0     0        14          1
     /addAddress.do               2 (2)        2      2     0     1        3       2     0     2        1      1     0     0         8          1
     /saveAddress.do              5 (5)        6      8     3     3        4       5     0     8        1      2     0     0        29          4
     /deleteAddress.do            3 (3)        6      6     3     2        4       3     0     6        1      1     0     0        21          3
     /selectAddresses.do          6 (6)       21     15    13    12        4       8     0     7        2      5     0     0        60          5
     /saveAddresses.do           11 (7)       22     24    23    23        4      13     0    15        2      9     0     0       107         10
     /errorCopy.do                2 (2)        4      4     0     1        3       2     0     2        1      1     0     0        10          1
     /errorCopyToSent.do         2 (2)         2      2     0     1        3       2     0     2        1      1     0     0         8          1
     /errorCopyToTrash.do        2 (2)        4      4      0     1        3       2     0     2        1      1     0     0        10          1
     /compose.do                  2 (2)        3      4     0     1        4       2     0     4        1      2     0     0        13          1
     /composeResume.do            2 (2)        3      4     0     1        4       2     0     3        1      1     0     0        11          1
     /forward.do                  4 (4)       11      9     8     3        5       4     0     7        1      4     0     0        35          3
     /reply.do                    4 (4)       11      9     8     3        5       4     0     7        1      4     0     0        35          3
     /modifyCompose.do           8 (7)        11     15     7     5        5       8     1    12        1      6     0     0        54          8
     /send.do                     6 (6)       11     11     7     4        5       6     1     8        1      5     0     0        42          5
     /errorBasic.do               1 (1)        1      1     0     0        1       1     0     0        1      1     0     0         3          0
                                 # comp.                 request                           session                              context                # data-     # control
     url                         log (fys)   # items     #r # w      # r/w     # items     #r   # w       # r/w       # items   #r # w      # r/w     flow dep.     flow dep.
     /errorUncaught.do             1 (1)        2        2     0       0          1        1      0         0            1      1     0       0            4            0
     /errorLogout.do               2 (2)        1        1     0       0          3        4      0         0            1      1     0       0            6            1
     /noInbox.do                   1 (1)        1        1     0       0          1        1      0         0            1      1     0       0            3            0
     /about.do                     1 (1)        1        1     0       0          1        1      0         0            1      1     0       0            3            0
     /help.do                      1 (1)        1        1     0       0          1        1      0         0            1      1     0       0            3            0
     /feedback.do                  2 (2)        2        2     0       1          3        2      0         2            1      1     0       0            8            1
     /preferences.do               2 (2)        3        3     1       1          3        2      0         2            1      2     0       0           11            2
     /CSS.do                       1 (1)        0        0     0       0          0        0      0         0            0      0     0       0            0            0
     /failMessage.do               2 (2)        9        5     6       2          4        2      0         3            1      2     0       0           20            1
     /failMessageList.do           2 (2)        9        5     6       2          4        2      0         3            1      2     0       0           20            1
                                                                                                                                                      Total dependencies: 1516
                                                                Table 1: Dependencies overview (internal viewpoint)

                                   # Action-    # data    # referring     # URL                                   # Action-     # data   # referring    # URL
       url                          Forms       items       URLs          pointers    url                          Forms        items      URLs        pointers
       /login.do                      1            3           3             12       /checkCookies.do               0             0          0             0
       /logout.do                     0            0          39              0       /folder.do                     1             5         48            13
       /emptyTrash.do                 1            1          21             13       /modifyFolder.do               1             3         21            13
       /folderManage.do               0            0          38             12       /folderManageModify.do         1             4          7            13
       /createFolder.do               1            1           4             15       /renameFolder.do               1             1          4            15
30




       /changeSubscribed.do           1            1           4             15       /deleteFolder.do               1             4          7            13
       /performDeleteFolder.do        1            4           1             12       /deleteMessage.do              1             1          0            18
       /deleteMessages.do             1            2           0             13       /modifyMessage.do              1             2          6            13
       /moveMessage.do                1            2           0             13       /copyMessage.do                1             2          0            13
       /moveMessages.do               1            2           0             13       /copyMessages.do               1             2          0            13
       /message.do                    1            3          21             19       /rawMessage.do                 1             3          6            13
       /nextMessage.do                1            3           6             19       /prevMessage.do                1             3          6            19
       /printerFriendly.do            1            2           6              4       /attachment.do                 1             2          0             0
       /addressbook.do                0            0          37             12       /addAddress.do                 0             0          3            11
       /saveAddress.do                1            2           2             13       /deleteAddress.do              1             2          3            12
       /selectAddresses.do            1            4           7             20       /saveAddresses.do              1             5          2            20
       /errorCopy.do                  0            0           0              2       /errorCopyToSent.do            0             0          0             2
       /errorCopyToTrash.do           0            0           0             2        /compose.do                    1             8         38            11
       /composeResume.do              1            8           0             11       /forward.do                    1             9          0            14
       /reply.do                      1            9           0             14       /modifyCompose.do              1            10          7            14
       /send.do                       1            9           0             14       /errorBasic.do                 0             0          0             3
       /errorUncaught.do              0            0           0              3       /errorLogout.do                0             0          0             3
       /noInbox.do                    0            0           0              4       /about.do                      0             0         37             3
       /help.do                       0            0          42              5       /feedback.do                   0             0         38             4
       /preferences.do                1            9          37             10       /CSS.do                        0             0         48             0
       /failMessage.do                0            1           0             13       /failMessageList.do            0             1          0            13
                                                                                                                                          Total dependencies: 682
                                                           Table 2: Dependencies overview (external viewpoint)
4.2   Some properties
In this subsection some properties of the identified dependencies are shortly discussed: the
crosscuttingness, the number of dependencies, the ease of identification and the complemen-
tarity of the dependencies.
Crosscuttingness
The dataflow interactions with the shared repositories crosscut the implementation of the
Struts actions and JSP views in the GatorMail webmail application. Figure 10 shows the
result of the Aspect Browser [5], run on the edu.ufl.osg.webmail.actions package. Each
column represents the implementation of an action, and the marked code lines visualize
dataflow interactions with the shared repositories.
    Similarly, the control flow pointers in the external viewpoint also crosscut the implemen-
tation of the JSP views. The external dataflow and internal control flow at the other hand,
have much more cohesion and lower coupling to the implementation, since they are both
described in the struts configuration file.




                 Figure 10: Crosscuttingness of dependencies in GatorMail

Number of dependencies
The number of dependencies for the GatorMail webmail application is quite high. With 1369
dataflow dependencies and 147 control flow interactions in the internal view, and 133 dataflow
and 549 control flow dependencies in the external view, one can say that the dependency
management for a simple application as GatorMail is already quite complex.
   The /saveAddresses.do composition for example contains 11 components, of which 7 are
unique (figure 11). Next to 10 control flow transistions, also 107 dataflow interactions with
the shared repository can be identified. Hence, modifying or extending such a composition
without breaking any of the existing dependencies is quite hard without a proper dependency
management.
Ease of identification
The ease of identification of the different dependencies strongly depends on their explicitness
and crosscuttingness. The more explicitly they are described within the application, the easier


                                              31
                   Figure 11: Composition processing /saveAddresses.do


dependencies can be identified and taken into account. The explicit concept of global and
local forwards for declaratively specifying the internal control flow is a good example of how
explicitly described dependencies can easily be identified. Similarly the external dataflow
dependencies are explicitly described by the concept of ActionForms.
    The internal dataflows and external control flows however remain completely implicit
within the application. Since they also strongly crosscut the implementation, identifying these
dependencies is not obvious. In these cases achieving a proper dependency management in
case of software evolution is a challenging task for software developers.
Complementarity
In this analysis, four types of dependencies are identified: internal dataflows, internal con-
trol flows, external data flows and external control flows. Although each type has its merit
on its own, the different types also seem to be very complementary in achieving a better
understanding of the dependencies.
    Combining the internal and external dependencies results in a global dependency view,
both for control flow and dataflow. A single control flow graph can be constructed, combining
the internal and external control flow transitions. Similarly, the internal and external dataflow
can be coupled to express the impact of input parameters on the internal data flow.
    Also the combination of data flow and control flow can be useful. Since for each request,
the shared data repositories are transported along the control flow transitions, it is necessary
to take the control flow into account in managing the data flow dependencies. If one want
to check for example that any read interaction on a shared object only occurs after a write
operation for that object is completed, a combination of control flow and dataflow is necessary.
For objects on the request scope, combining internal dataflow and control flow is sufficient,
but for objects on the session and context scope, external control flow must also be taken into
account.




                                              32
4.3   Roadmap to the appendices
Appendices A to F contain the detailed results of the dependency analysis. In this subsection,
the different appendices are shortly introduced.
    Appendix A briefly lists all the Stuts actions and JSP views used in the GatorMail appli-
cation. Subsequently, their dependencies are specified in respectively appendix B and C. For
Struts actions, both the local forwards they can return (internal control flow) and their inter-
actions with the shared data repositories (internal dataflow) are included. For JSP views, the
listed dependencies are their interactions with the shared data repositories (internal dataflow)
and the URL pointers they generate (external control flow).
    Appendix D displays the 52 GatorMail compositions. Actions and views are composed
by labeled arrows representing the internal control flow within the composition. How actions
and views are reused within the different compositions is recorded in appendix E.
    Finally, appendix F gives for each composition all identified dependencies. For the in-
ternal viewpoint, the control flow of each composition is given together with all the internal
dataflows. A dataflow for a shared data item is described by listing all interacting components
for the given shared object together with their needed permission (read, write or read/write).
For the external viewpoint, input parameters and URL forwards are listed for each composi-
tion. The input parameters are split up into data fields encapsulated in an ActionForm and
input parameters directly read by components of the composition. Also two lists of URL
forwards are included: a list of compositions pointing to the given compositions, and a list of
compositions to which one of the associated views points.


5     Conclusion
The dependency analysis conducted in this report identified four types of dependencies in
the GatorMail webmail application, resulting in more that 2000 dependencies. Most of these
dependencies exist implicitly within the application, and are difficult to find due to their
crosscuttingness. Others are explicitly described in configuration files, which makes them
much easier to find.
    Although the presented, practical approaches to identify these dependencies do not give
guarantees about completeness, the conducted analysis reveals already most of the existing
dependencies within GatorMail and also reveals the complexity of identifying them.
    The dependency analysis also shows that managing dependencies within a quite simple
application as GatorMail is not that obvious. Since most of the dependencies remain implicit
in current software development, and due to their multitude, modifying or extending such
applications without breaking any of the existing dependencies is quite hard to achieve without
a proper dependency management.
    Identifying dependencies is only a first step towards a better dependency management is
software development. Automatic reasoning and verification of the identified dependencies
could help in building more reliable software systems and better support software evolution,
without sacrificing the benefits of reusable, loosely-coupled software components.




                                              33
References
 [1] GatorMail, Webmail at the University of Florida. http://webmail.ufl.edu/.

 [2] Lieven Desmet, Frank Piessens, Wouter Joosen, and Pierre                   Verbaeten.
     Dependency analysis of the Gatormail webmail application.                   URL =
     http://www.cs.kuleuven.ac.be/publicaties/rapporten/cw/CW427b.pdf.

 [3] Lieven Desmet, Frank Piessens, Wouter Joosen, and Pierre Verbaeten. Depen-
     dency analysis of the Gatormail webmail application. Report CW 427, Depart-
     ment of Computer Science, K.U.Leuven, Leuven, Belgium, September 2005. URL =
     http://www.cs.kuleuven.ac.be/publicaties/rapporten/cw/CW427.pdf.

 [4] Drake Emko, Sandy McArthur, Todd Williams, and Stephen L. Ulmer. GatorMail Web-
     Mail. http://sourceforge.net/projects/gatormail/.

 [5] William G. Griswold, Jimmy J. Yuan, and Yoshikiyo Kato. Exploiting the map metaphor
     in a tool for software evolution. In ICSE ’01: Proceedings of the 23rd International
     Conference on Software Engineering, pages 265–274, Washington, DC, USA, 2001. IEEE
     Computer Society.

 [6] J. Hunter and W. Crawford. Java Servlet Programming. O’Reilly, second edition, April
     2001.

 [7] Java servlet technology. http://java.sun.com/products/servlet/.

 [8] M. Shaw and D. Garlan. Software Architecture - Perspectives on an emerging discipline.
     Prentice-Hall, 1996.

 [9] SourceForge.net. The world’s largest development and download repository of Open
     Source code and applications. http://sourceforge.net.

[10] The Struts Framework. http://jakarta.apache.org/struts/.

[11] Sander Tichelaar. Modeling Object-Oriented Software for Reverse Engineering and Refac-
     toring. PhD thesis, University of Berne, December 2001.




                                            34
A     Components in GatorMail
A.1    Servlets
    • AddressBkAction

    • CheckCookiesAction

    • AttachmentAction

    • ChangeSubscribedAction

    • CheckSessionAction

    • ComposeAction

    • ComposeResumeAction

    • CreateFolderAction

    • DeleteAddressAction

    • DeleteFolderAction

    • DeleteMessageAction

    • DeleteMessagesAction

    • EmptyTrashAction

    • FolderAction

    • FolderManageAction

    • FolderManageModifyAction

    • ForwardAction

    • LoginAction

    • LogoutAction

    • ModifyFolderAction

    • ModifyMessageAction

    • MessageAction

    • ModifyComposeAction

    • MoveCopyAction

    • NextMessageAction

    • PerformDeleteFolderAction

    • PreferencesAction

                                  35
  • PrevMessageAction

  • PrinterFriendlyAction

  • RawMessageAction

  • RenameFolderAction

  • ReplyAction

  • SaveAddressAction

  • SaveAddressesAction

  • SelectAddressesAction

  • SendAction

A.2   JSP
  • about.jsp

  • addAddress.jsp

  • addressbook.jsp

  • compose.jsp

  • confirmDeleteFolder.jsp

  • cookiesDisabled.jsp

  • errorBasic.jsp

  • errorCopy.jsp

  • errorCopyToSent.jsp

  • errorCopyToTrash.jsp

  • errorLogout.jsp

  • errorUncaught.jsp

  • feedback.jsp

  • folder.jsp

  • folderManage.jsp

  • folderManageModify.jsp

  • help.jsp

  • login.jsp


                             36
• loginMessage.jsp

• noInbox.jsp

• preferences.jsp

• message.jsp

• printerFriendly.jsp

• selectAddresses.jsp

• stats.jsp

• structure.jsp

• style.css.jsp

• test.jsp




                        37
B     Struts action dependencies
B.1     AddressBkAction
B.1.1    Internal control flow dependencies
    • success

B.1.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       addressBkUsage     write
                       composeForm        read
                       addressBkLimit     write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     addressList          read/write
                     savedComposeForm     read/write

On the context scope


B.2     CheckCookiesAction
B.2.1    Internal control flow dependencies
B.2.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write


                                          38
                     savedComposeForm     read/write

On the context scope


B.3     AttachmentAction
B.3.1    Internal control flow dependencies
B.3.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read
                       part               write
                       folder             write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.4     ChangeSubscribedAction
B.4.1    Internal control flow dependencies
  • success

  • fail

B.4.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read



                                          39
On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.5     CheckSessionAction
B.5.1    Internal control flow dependencies
  • success

B.5.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.6     ComposeAction
B.6.1    Internal control flow dependencies
  • success

B.6.2    Internal dataflow dependencies
On the request scope


                       data item          required permission


                                          40
                       requestStartTime    read/write
                       composeForm         read

On the session scope


                     data item              required permission
                     logging in             read
                     attachMap              read/write
                     user                   read/write
                     savedComposeForm       read/write

On the context scope


                     data item             required permission
                     preferencesProvider   read


B.7     ComposeResumeAction
B.7.1    Internal control flow dependencies
  • success

B.7.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read/write
                       composeForm         read

On the session scope


                     data item              required permission
                     logging in             read
                     user                   read/write
                     savedComposeForm       read/write

On the context scope




                                           41
B.8     CreateFolderAction
B.8.1    Internal control flow dependencies
  • success

  • fail

B.8.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.9     DeleteAddressAction
B.9.1    Internal control flow dependencies
  • success

  • fail

B.9.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope




                                          42
                      data item            required permission
                      logging in           read
                      user                 read/write
                      addressList          read/write
                      savedComposeForm     read/write

On the context scope


B.10     DeleteFolderAction
B.10.1     Internal control flow dependencies
  • success

  • fail

B.10.2     Internal dataflow dependencies
On the request scope


                       data item           required permission
                       result              write
                       requestStartTime    read/write
                       affectedFolderList   write
                       composeForm         read
                       folder              write

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      savedComposeForm     read/write

On the context scope


B.11     DeleteMessageAction
B.11.1     Internal control flow dependencies
  • folder

  • errorCopyToTrash

  • success

                                           43
B.11.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       folderBeanList     write
                       deleteAction       write
                       composeForm        read
                       message            write
                       messageList        write
                       folder             write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.12     DeleteMessagesAction
B.12.1    Internal control flow dependencies
  • success

  • errorCopyToTrash

B.12.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       deleteAction       write
                       composeForm        read
                       messageList        write
                       folder             write

On the session scope


                                          44
                     data item             required permission
                     logging in            read
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


B.13     EmptyTrashAction
B.13.1    Internal control flow dependencies
  • success

B.13.2    Internal dataflow dependencies
On the request scope


                        data item          required permission
                        requestStartTime   read/write
                        composeForm        read

On the session scope


                     data item             required permission
                     logging in            read
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


B.14     FolderAction
B.14.1    Internal control flow dependencies
  • success

B.14.2    Internal dataflow dependencies
On the request scope


                     data item              required permission
                     requestStartTime       read/write
                     folderBeanList         write


                                           45
                     folderListFilter        write
                     composeForm             read
                     quotaList               write
                     messages                write
                     folder                  write
                     folderListFilterType    write

On the session scope


                     data item              required permission
                     logging in             read
                     user                   read/write
                     addressList            read/write
                     savedComposeForm       read/write

On the context scope


                     data item              required permission
                     preferencesProvider    read


B.15     FolderManageAction
B.15.1    Internal control flow dependencies
  • success

B.15.2    Internal dataflow dependencies
On the request scope


                       data item            required permission
                       requestStartTime     read/write
                       folderBeanList       write
                       composeForm          read
                       quotaList            write
                       folder               write

On the session scope


                     data item              required permission
                     logging in             read
                     user                   read/write
                     savedComposeForm       read/write


                                            46
On the context scope


B.16     FolderManageModifyAction
B.16.1    Internal control flow dependencies
  • success

B.16.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read
                       isSubscribed       write
                       quotaList          write
                       folder             write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.17     ForwardAction
B.17.1    Internal control flow dependencies
  • success

  • folder

B.17.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read
                       message            write
                       folder             write

                                          47
On the session scope


                       data item             required permission
                       logging in            read
                       attachMap             read/write
                       user                  read/write
                       savedComposeForm      read/write

On the context scope


                       data item             required permission
                       preferencesProvider   read


B.18     LoginAction
B.18.1    Internal control flow dependencies
  • login

  • errorLogout

  • composeResume

B.18.2    Internal dataflow dependencies
On the request scope


                        data item            required permission
                        requestStartTime     read/write
                        composeForm          read

On the session scope


                       data item             required permission
                       logging in            read/write
                       user                  read/write
                       addressList           read/write
                       savedComposeForm      read/write

On the context scope




                                             48
B.19     LogoutAction
B.19.1    Internal control flow dependencies
  • success

B.19.2    Internal dataflow dependencies
On the request scope
On the session scope


                         data item    required permission
                         *            read
                         user         read
                         attachList   read

On the context scope


B.20     ModifyFolderAction
B.20.1    Internal control flow dependencies
  • deleteMessages

  • moveMessages

  • copyMessages

B.20.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope


B.21     ModifyMessageAction
B.21.1    Internal control flow dependencies
  • moveMessage

  • copyMessage

B.21.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope



                                        49
B.22     MessageAction
B.22.1     Internal control flow dependencies
  • success

  • folder

B.22.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       folderBeanList     write
                       composeForm        read
                       message            write
                       folder             write

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      savedComposeForm     read/write

On the context scope


B.23     ModifyComposeAction
B.23.1     Internal control flow dependencies
  • success

  • fail

  • send

B.23.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read

On the session scope

                                          50
                    data item             required permission
                    logging in            read
                    user                  read/write
                    addressList           read/write
                    savedComposeForm      read/write

On the context scope


B.24     MoveCopyAction
B.24.1   Internal control flow dependencies
  • folder

  • errorCopy

  • success

  • errorCoy

B.24.2   Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read
                       messageList        write
                       folderName         write

On the session scope


                    data item             required permission
                    logging in            read
                    user                  read/write
                    savedComposeForm      read/write

On the context scope




                                          51
B.25     NextMessageAction
B.25.1     Internal control flow dependencies
  • success

  • folder

B.25.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       folderBeanList     write
                       composeForm        read
                       message            write
                       folder             write

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      savedComposeForm     read/write

On the context scope


B.26     PerformDeleteFolderAction
B.26.1     Internal control flow dependencies
  • success

  • cancel

  • fail

B.26.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read


                                          52
On the session scope


                     data item             required permission
                     logging in            read
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


B.27     PreferencesAction
B.27.1    Internal control flow dependencies
  • input

  • success

B.27.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read/write
                       X-Image-Url         write
                       composeForm         read

On the session scope


                     data item             required permission
                     logging in            read
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


                     data item             required permission
                     preferencesProvider   read


B.28     PrevMessageAction
B.28.1    Internal control flow dependencies
  • success

  • folder

                                           53
B.28.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       folderBeanList     write
                       composeForm        read
                       message            write
                       folder             write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write

On the context scope


B.29     PrinterFriendlyAction
B.29.1    Internal control flow dependencies
  • success

B.29.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read
                       printerFriendly    write
                       message            write
                       folder             write

On the session scope


                     data item            required permission
                     logging in           read
                     user                 read/write
                     savedComposeForm     read/write



                                          54
On the context scope


B.30     RawMessageAction
B.30.1     Internal control flow dependencies
  • folder

B.30.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       requestStartTime   read/write
                       composeForm        read
                       message            write
                       folder             write

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      savedComposeForm     read/write

On the context scope


B.31     RenameFolderAction
B.31.1     Internal control flow dependencies
  • success

  • fail

B.31.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope

                                          55
                     data item             required permission
                     logging in            read
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


B.32     ReplyAction
B.32.1    Internal control flow dependencies
  • success

  • folder

B.32.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read/write
                       composeForm         read
                       message             write
                       folder              write

On the session scope


                     data item             required permission
                     logging in            read
                     attachMap             read/write
                     user                  read/write
                     savedComposeForm      read/write

On the context scope


                     data item             required permission
                     preferencesProvider   read


B.33     SaveAddressAction
B.33.1    Internal control flow dependencies
  • success


                                           56
  • fail

B.33.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      addressList          read/write
                      savedComposeForm     read/write

On the context scope


B.34     SaveAddressesAction
B.34.1     Internal control flow dependencies
  • success

  • fail

B.34.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      addressList          read/write


                                          57
                      savedComposeForm     read/write

On the context scope


B.35     SelectAddressesAction
B.35.1     Internal control flow dependencies
  • success

  • fail

B.35.2     Internal dataflow dependencies
On the request scope


                       data item          required permission
                       addressBkUsage     write
                       requestStartTime   read/write
                       composeForm        read
                       addressBkLimit     read/write
                       folderFullName     write
                       saveAddressList    write
                       messageParams      write

On the session scope


                      data item            required permission
                      logging in           read
                      user                 read/write
                      addressList          read
                      savedComposeForm     read/write

On the context scope


B.36     SendAction
B.36.1     Internal control flow dependencies
  • success

  • fail

  • errorCopyToSent



                                          58
B.36.2   Internal dataflow dependencies
On the request scope


                       data item          required permission
                       result             write
                       requestStartTime   read/write
                       composeForm        read

On the session scope


                    data item             required permission
                    logging in            read
                    attachMap             write
                    user                  read/write
                    savedComposeForm      read/write

On the context scope


                    data item             required permission
                    preferencesProvider   read




                                          59
C     JSP view dependencies
C.1     about.jsp
C.1.1    External control flow dependencies
    • /folder.do

    • /help.do

    • /CSS.do

C.1.2    Internal dataflow dependencies
On the request scope


                          data item            required permission
                          requestStartTime     read

On the session scope


                             data item    required permission
                             user         read

On the context scope


                         data item             required permission
                         preferencesProvider   read


C.2     addAddress.jsp
C.2.1    External control flow dependencies
    • /folder.do

    • /help.do

    • /CSS.do

    • /saveAddress.do

    • /addressbook.do

    • /compose.do

    • /folderManage.do

    • /preferences.do

    • /logout.do

                                               60
  • /about.do

  • /feedback.do

C.2.2    Internal dataflow dependencies
On the request scope


                         data item            required permission
                         requestStartTime     read

On the session scope


                            data item    required permission
                            user         read

On the context scope


                        data item             required permission
                        preferencesProvider   read


C.3     addressbook.jsp
C.3.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /addAddress.do

  • /compose.do

  • /deleteAddress.do

  • /addressbook.do

  • /folderManage.do

  • /preferences.do

  • /logout.do

  • /about.do

  • /feedback.do



                                              61
C.3.2    Internal dataflow dependencies
On the request scope


                        data item            required permission
                        addressBkUsage       read
                        requestStartTime     read
                        addressList          read
                        addressBkLimit       read

On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.4     compose.jsp
C.4.1    External control flow dependencies
  • /folder.do
  • /help.do
  • /CSS.do
  • /modifyCompose.do
  • /compose.do
  • /addressbook.do
  • /folderManage.do
  • /preferences.do
  • /logout.do
  • /about.do
  • /feedback.do

C.4.2    Internal dataflow dependencies
On the request scope



                                             62
                        data item            required permission
                        requestStartTime     read
                        composeForm          read
                        addressList          read

On the session scope


                           data item    required permission
                           attachMap    read/write
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.5     confirmDeleteFolder.jsp
C.5.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /performDeleteFolder.do

  • /compose.do

  • /addressbook.do

  • /folderManage.do

  • /preferences.do

  • /logout.do

  • /about.do

  • /feedback.do

C.5.2    Internal dataflow dependencies
On the request scope


                       data item             required permission
                       requestStartTime      read

                                             63
                       currentRootFolder   write
                       affectedFolderList   read
                       quotaList           read
                       folder              read

On the session scope


                          data item   required permission
                          user        read

On the context scope


                     data item             required permission
                     preferencesProvider   read


C.6     cookiesDisabled.jsp
C.6.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /login.do

C.6.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read

On the session scope


                          data item   required permission
                          user        read

On the context scope


                     data item             required permission
                     preferencesProvider   read


                                           64
C.7     errorBasic.jsp
C.7.1    External control flow dependencies
  • /CSS.do

  • /folder.do

  • /logout.do

C.7.2    Internal dataflow dependencies
On the request scope


                         data item            required permission
                         requestStartTime     read

On the session scope


                            data item    required permission
                            user         read

On the context scope


                        data item             required permission
                        preferencesProvider   read


C.8     errorCopy.jsp
C.8.1    External control flow dependencies
  • /CSS.do

  • /folder.do

C.8.2    Internal dataflow dependencies
On the request scope


                         data item            required permission
                         requestStartTime     read
                         messageList          read
                         folderName           read

On the session scope




                                              65
                         data item    required permission
                         user         read

On the context scope


                     data item             required permission
                     preferencesProvider   read


C.9     errorCopyToSent.jsp
C.9.1    External control flow dependencies
  • /CSS.do

  • /folder.do

C.9.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read

On the session scope


                         data item    required permission
                         user         read

On the context scope


                     data item             required permission
                     preferencesProvider   read


C.10     errorCopyToTrash.jsp
C.10.1    External control flow dependencies
  • /CSS.do
  • /folder.do

C.10.2    Internal dataflow dependencies
On the request scope



                                           66
                       data item           required permission
                       requestStartTime    read
                       deleteAction        read
                       messageList         read

On the session scope


                           data item   required permission
                           user        read

On the context scope


                     data item             required permission
                     preferencesProvider   read


C.11     errorLogout.jsp
C.11.1    External control flow dependencies
  • /CSS.do

  • /login.do

  • /folder.do

C.11.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read

On the session scope


                           data item   required permission
                           user        read

On the context scope


                     data item             required permission
                     preferencesProvider   read




                                           67
C.12     errorUncaught.jsp
C.12.1    External control flow dependencies
  • /CSS.do

  • /folder.do

  • /logout.do

C.12.2    Internal dataflow dependencies
On the request scope


                         data item            required permission
                         requestStartTime     read
                         exceptionKey         read

On the session scope


                            data item    required permission
                            user         read

On the context scope


                        data item             required permission
                        preferencesProvider   read


C.13     feedback.jsp
C.13.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /compose.do

C.13.2    Internal dataflow dependencies
On the request scope


                         data item            required permission
                         requestStartTime     read



                                              68
On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.14     folder.jsp
C.14.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /emptyTrash.do

  • /compose.do

  • /addressbook.do

  • /folderManage.do

  • /preferences.do

  • /logout.do

  • /about.do

  • /feedback.do

  • /modifyFolder.do

  • /message.do

C.14.2    Internal dataflow dependencies
On the request scope


                       data item             required permission
                       requestStartTime      read
                       currentRootFolder     read/write
                       quotaList             read
                       messages              read
                       folder                read

                                             69
On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.15     folderManage.jsp
C.15.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /folderManageModify.do

  • /deleteFolder.do

  • /compose.do

  • /addressbook.do

  • /folderManage.do

  • /preferences.do

  • /logout.do

  • /about.do

  • /feedback.do

C.15.2    Internal dataflow dependencies
On the request scope


                       data item             required permission
                       requestStartTime      read
                       folderBeanList        read
                       currentRootFolder     write
                       quotaList             read
                       folder                read



                                             70
On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.16     folderManageModify.jsp
C.16.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /createFolder.do

  • /renameFolder.do

  • /changeSubscribed.do

  • /folderManage.do

  • /compose.do

  • /addressbook.do

  • /preferences.do

  • /logout.do

  • /about.do

  • /feedback.do

C.16.2    Internal dataflow dependencies
On the request scope


                       data item             required permission
                       requestStartTime      read
                       currentRootFolder     write
                       isSubscribed          read
                       quotaList             read
                       folder                read

                                             71
On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.17     help.jsp
C.17.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /folderManage.do

  • /feedback.do

C.17.2    Internal dataflow dependencies
On the request scope


                        data item            required permission
                        requestStartTime     read

On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read




                                             72
C.18     login.jsp
C.18.1    External control flow dependencies
  • /CSS.do

  • /login.do

C.18.2    Internal dataflow dependencies
On the request scope


                         data item    required permission
                         loginForm    read

On the session scope
On the context scope


C.19     loginMessage.jsp
C.19.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

C.19.2    Internal dataflow dependencies
On the request scope


                       data item           required permission
                       requestStartTime    read

On the session scope


                         data item    required permission
                         user         read

On the context scope


                     data item             required permission
                     preferencesProvider   read




                                           73
C.20     noInbox.jsp
C.20.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /login.do

C.20.2    Internal dataflow dependencies
On the request scope


                        data item            required permission
                        requestStartTime     read

On the session scope


                           data item    required permission
                           user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.21     preferences.jsp
C.21.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /preferences.do

  • /compose.do

  • /addressbook.do

  • /folderManage.do

  • /logout.do

  • /about.do

                                             74
  • /feedback.do

C.21.2    Internal dataflow dependencies
On the request scope


                          data item          required permission
                          requestStartTime   read
                          X-Image-Url        read

On the session scope


                            data item    required permission
                            user         read

On the context scope


                       data item             required permission
                       preferencesProvider   read


C.22     message.jsp
C.22.1    External control flow dependencies
  • /folder.do

  • /prevMessage.do

  • /nextMessage.do

  • /help.do

  • /printerFriendly.do

  • /rawMessage.do

  • /CSS.do

  • /selectAddresses.do

  • /compose.do

  • /addressbook.do

  • /folderManage.do

  • /preferences.do

  • /logout.do


                                             75
  • /about.do

  • /feedback.do

  • /modifyMessage.do

C.22.2    Internal dataflow dependencies
On the request scope


                       data item          required permission
                       part               read/write
                       requestStartTime   read
                       messageFolder      read/write
                       printerFriendly    read
                       body               read/write
                       messageParams      read/write
                       realMessage        read/write
                       realFolder         read/write
                       message            read/write

On the session scope


                          data item   required permission
                          user        read

On the context scope


                 data item                      required permission
                 preferencesProvider            read
                 Tiles.DEFINITIONS FACTORY      read


C.23     printerFriendly.jsp
C.23.1    External control flow dependencies
  • /folder.do

  • /help.do

  • /CSS.do

  • /selectAddresses.do




                                          76
C.23.2    Internal dataflow dependencies
On the request scope


                        data item          required permission
                        body               read/write
                        requestStartTime   read
                        part               read/write
                        realMessage        read/write
                        message            read/write
                        realFolder         read/write

On the session scope


                          data item    required permission
                          user         read

On the context scope


                 data item                       required permission
                 preferencesProvider             read
                 Tiles.DEFINITIONS FACTORY       read


C.24     selectAddresses.jsp
C.24.1    External control flow dependencies
  • /folder.do
  • /help.do
  • /CSS.do
  • /saveAddresses.do
  • /message.do
  • /compose.do
  • /addressbook.do
  • /folderManage.do
  • /preferences.do
  • /logout.do
  • /about.do
  • /feedback.do

                                           77
C.24.2    Internal dataflow dependencies
On the request scope


                         data item          required permission
                         addressBkUsage     read
                         requestStartTime   read
                         addressBkLimit     read
                         folderFullName     read
                         saveAddressList    read
                         messageParams      read

On the session scope


                           data item     required permission
                           user          read
                           addressList   read

On the context scope


                     data item              required permission
                     preferencesProvider    read


C.25     stats.jsp
C.25.1    External control flow dependencies
C.25.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope


C.26     structure.jsp
C.26.1    External control flow dependencies
C.26.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope




                                            78
C.27     style.css.jsp
C.27.1    External control flow dependencies
C.27.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope


C.28     test.jsp
C.28.1    External control flow dependencies
C.28.2    Internal dataflow dependencies
On the request scope
On the session scope
On the context scope




                                      79
D     Compositions in GatorMail
D.1   /login.do




D.2   /checkCookies.do




D.3   /logout.do




D.4   /folder.do




D.5   /emptyTrash.do




                              80
D.6    /modifyFolder.do




D.7    /folderManage.do




D.8    /folderManageModify.do




D.9    /createFolder.do




D.10    /renameFolder.do




                                81
D.11   /changeSubscribed.do




D.12   /deleteFolder.do




D.13   /performDeleteFolder.do




D.14   /deleteMessage.do




D.15   /deleteMessages.do




                                 82
D.16   /modifyMessage.do




D.17   /moveMessage.do




D.18   /copyMessage.do




D.19   /moveMessages.do




                           83
D.20   /copyMessages.do




D.21   /message.do




D.22   /rawMessage.do




D.23   /nextMessage.do




D.24   /prevMessage.do




D.25   /printerFriendly.do




                             84
D.26   /attachment.do




D.27   /addressbook.do




D.28   /addAddress.do




D.29   /saveAddress.do




D.30   /deleteAddress.do




D.31   /selectAddresses.do




                             85
D.32   /saveAddresses.do




D.33   /errorCopy.do




D.34   /errorCopyToSent.do




D.35   /errorCopyToTrash.do




D.36   /compose.do




D.37   /composeResume.do




                              86
D.38   /forward.do




D.39   /reply.do




D.40   /modifyCompose.do




D.41   /send.do




                           87
D.42   /errorBasic.do




D.43   /errorUncaught.do




D.44   /errorLogout.do




D.45   /noInbox.do




D.46   /about.do




D.47   /help.do




D.48   /feedback.do




D.49   /preferences.do




D.50   /CSS.do




                           88
D.51   /failMessage.do




D.52   /failMessageList.do




                             89
E     Reuse of components in different compositions
E.1   Usage of servlets in different compositions

               component                     composition
               AddressBkAction               /addressbook.do
                                             /saveAddress.do
                                             /deleteAddress.do
               CheckCookiesAction            /checkCookies.do
               AttachmentAction              /attachment.do
               ChangeSubscribedAction        /changeSubscribed.do
               CheckSessionAction            /modifyFolder.do
                                             /deleteMessage.do
                                             /deleteMessages.do
                                             /modifyMessage.do
                                             /moveMessage.do
                                             /copyMessage.do
                                             /moveMessages.do
                                             /copyMessages.do
                                             /addAddress.do
                                             /saveAddress.do
                                             /errorCopy.do
                                             /errorCopyToSent.do
                                             /errorCopyToTrash.do
                                             /modifyCompose.do
                                             /send.do
                                             /feedback.do
               ComposeAction                 /compose.do
               ComposeResumeAction           /login.do
                                             /composeResume.do
               CreateFolderAction            /createFolder.do
               DeleteAddressAction           /deleteAddress.do
               DeleteFolderAction            /deleteFolder.do
               DeleteMessageAction           /modifyFolder.do
                                             /deleteMessage.do
               DeleteMessagesAction          /deleteMessages.do
               EmptyTrashAction              /emptyTrash.do
               FolderAction                  /folder.do
                                             /emptyTrash.do
                                             /modifyFolder.do
                                             /deleteMessages.do
                                             /modifyMessage.do
                                             /moveMessage.do
                                             /copyMessage.do
                                             /moveMessages.do
                                             /copyMessages.do


                                        90
                             /message.do
                             /rawMessage.do
                             /nextMessage.do
                             /prevMessage.do
                             /selectAddresses.do
                             /saveAddresses.do
                             /forward.do
                             /reply.do
                             /modifyCompose.do
                             /send.do
                             /failMessage.do
                             /failMessageList.do
FolderManageAction           /folderManage.do
                             /createFolder.do
                             /renameFolder.do
                             /changeSubscribed.do
                             /deleteFolder.do
                             /performDeleteFolder.do
                             /deleteMessage.do
FolderManageModifyAction     /folderManageModify.do
                             /createFolder.do
                             /renameFolder.do
                             /changeSubscribed.do
ForwardAction                /forward.do
LoginAction                  /login.do
LogoutAction                 /login.do
                             /logout.do
                             /errorLogout.do
ModifyFolderAction           /modifyFolder.do
ModifyMessageAction          /modifyMessage.do
MessageAction                /message.do
                             /selectAddresses.do
                             /saveAddresses.do
ModifyComposeAction          /modifyCompose.do
MoveCopyAction               /modifyFolder.do
                             /modifyMessage.do
                             /moveMessage.do
                             /copyMessage.do
                             /moveMessages.do
                             /copyMessages.do
NextMessageAction            /nextMessage.do
PerformDeleteFolderAction    /performDeleteFolder.do
PreferencesAction            /preferences.do
PrevMessageAction            /prevMessage.do
PrinterFriendlyAction        /printerFriendly.do
RawMessageAction             /rawMessage.do


                        91
               RenameFolderAction             /renameFolder.do
               ReplyAction                    /reply.do
               SaveAddressAction              /saveAddress.do
               SaveAddressesAction            /saveAddresses.do
               SelectAddressesAction          /selectAddresses.do
                                              /saveAddresses.do
               SendAction                     /modifyCompose.do
                                              /send.do

E.2   Usage of JSP in different compositions

                component                 composition
                about.jsp                 /about.do
                addAddress.jsp            /addAddress.do
                                          /saveAddress.do
                addressbook.jsp           /addressbook.do
                                          /saveAddress.do
                                          /deleteAddress.do
                compose.jsp               /login.do
                                          /compose.do
                                          /composeResume.do
                                          /forward.do
                                          /reply.do
                                          /modifyCompose.do
                                          /send.do
                confirmDeleteFolder.jsp    /deleteFolder.do
                cookiesDisabled.jsp
                errorBasic.jsp            /errorBasic.do
                errorCopy.jsp             /modifyFolder.do
                                          /modifyMessage.do
                                          /moveMessage.do
                                          /copyMessage.do
                                          /moveMessages.do
                                          /copyMessages.do
                                          /errorCopy.do
                errorCopyToSent.jsp       /errorCopyToSent.do
                                          /modifyCompose.do
                                          /send.do
                errorCopyToTrash.jsp      /modifyFolder.do
                                          /deleteMessage.do
                                          /deleteMessages.do
                                          /errorCopyToTrash.do
                errorLogout.jsp           /login.do
                                          /errorLogout.do
                errorUncaught.jsp         /errorUncaught.do


                                         92
feedback.jsp              /feedback.do
folder.jsp                /folder.do
                          /emptyTrash.do
                          /modifyFolder.do
                          /deleteMessages.do
                          /modifyMessage.do
                          /moveMessage.do
                          /copyMessage.do
                          /moveMessages.do
                          /copyMessages.do
                          /message.do
                          /rawMessage.do
                          /nextMessage.do
                          /prevMessage.do
                          /selectAddresses.do
                          /saveAddresses.do
                          /forward.do
                          /reply.do
                          /modifyCompose.do
                          /send.do
                          /failMessage.do
                          /failMessageList.do
folderManage.jsp          /folderManage.do
                          /createFolder.do
                          /renameFolder.do
                          /changeSubscribed.do
                          /deleteFolder.do
                          /performDeleteFolder.do
                          /deleteMessage.do
folderManageModify.jsp    /folderManageModify.do
                          /createFolder.do
                          /renameFolder.do
                          /changeSubscribed.do
help.jsp                  /help.do
login.jsp                 /login.do
loginMessage.jsp
noInbox.jsp               /noInbox.do
preferences.jsp           /preferences.do
message.jsp               /deleteMessage.do
                          /message.do
                          /nextMessage.do
                          /prevMessage.do
                          /selectAddresses.do
                          /saveAddresses.do
printerFriendly.jsp       /printerFriendly.do


                         93
selectAddresses.jsp    /selectAddresses.do
                       /saveAddresses.do
stats.jsp
structure.jsp
style.css.jsp          /CSS.do
test.jsp




                      94
F     Composition dependencies in GatorMail
F.1     /login.do
F.1.1    Internal control flow




F.1.2    Internal dataflow
On the request scope


                    data item          producer/consumer
                    addressList        compose.jsp (read)
                    composeForm        LoginAction (read)
                                       ComposeResumeAction (read)
                                       compose.jsp (read)
                    loginForm          login.jsp (read)
                    requestStartTime   LoginAction (read/write)
                                       errorLogout.jsp (read)
                                       ComposeResumeAction (read/write)
                                       compose.jsp (read)

On the session scope


                data item              producer/consumer
                *                      LogoutAction (read)
                addressList            LoginAction (read/write)
                attachList             LogoutAction (read)
                attachMap              compose.jsp (read/write)
                logging in             LoginAction (read/write)
                                       ComposeResumeAction (read)
                savedComposeForm       LoginAction (read/write)
                                       ComposeResumeAction (read/write)
                user                   LoginAction (read/write)
                                       LogoutAction (read)
                                       errorLogout.jsp (read)
                                       ComposeResumeAction (read/write)
                                       compose.jsp (read)

On the context scope


                                             95
                      data item             producer/consumer
                      preferencesProvider   errorLogout.jsp (read)
                                            compose.jsp (read)


F.1.3    External control flow
Forwards leading to this composition


                            /login.do       /errorLogout.do
                            /noInbox.do

Forwards starting from this composition


                        /CSS.do                  /login.do
                        /folder.do               /help.do
                        /modifyCompose.do        /compose.do
                        /addressbook.do          /folderManage.do
                        /preferences.do          /logout.do
                        /about.do                /feedback.do


F.1.4    External dataflow

                                ActionForm: loginForm
                                username password
                                action

F.2     /checkCookies.do
F.2.1    Internal control flow




F.2.2    Internal dataflow
On the request scope


                  data item          producer/consumer
                  composeForm        CheckCookiesAction (read)
                  requestStartTime   CheckCookiesAction (read/write)



                                            96
On the session scope


                 data item               producer/consumer
                 logging in              CheckCookiesAction (read)
                 savedComposeForm        CheckCookiesAction (read/write)
                 user                    CheckCookiesAction (read/write)

On the context scope


F.2.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


F.2.4    External dataflow
F.3     /logout.do
F.3.1    Internal control flow




F.3.2    Internal dataflow
On the request scope
On the session scope


                            data item     producer/consumer
                            *             LogoutAction (read)
                            attachList    LogoutAction (read)
                            user          LogoutAction (read)

On the context scope


F.3.3    External control flow
Forwards leading to this composition


                     /login.do                    /folder.do
                     /emptyTrash.do               /modifyFolder.do
                     /folderManage.do             /folderManageModify.do


                                             97
                     /createFolder.do               /renameFolder.do
                     /changeSubscribed.do           /deleteFolder.do
                     /performDeleteFolder.do        /deleteMessage.do
                     /deleteMessages.do             /modifyMessage.do
                     /moveMessage.do                /copyMessage.do
                     /moveMessages.do               /copyMessages.do
                     /message.do                    /rawMessage.do
                     /nextMessage.do                /prevMessage.do
                     /addressbook.do                /addAddress.do
                     /saveAddress.do                /deleteAddress.do
                     /selectAddresses.do            /saveAddresses.do
                     /compose.do                    /composeResume.do
                     /forward.do                    /reply.do
                     /modifyCompose.do              /send.do
                     /errorBasic.do                 /errorUncaught.do
                     /preferences.do                /failMessage.do
                     /failMessageList.do

Forwards starting from this composition


F.3.4    External dataflow
F.4     /folder.do
F.4.1    Internal control flow




F.4.2    Internal dataflow
On the request scope


                      data item              producer/consumer
                      composeForm            FolderAction (read)
                      currentRootFolder      folder.jsp (read/write)
                      folder                 FolderAction (write)
                                             folder.jsp (read)
                      folderBeanList         FolderAction (write)
                      folderListFilter       FolderAction (write)
                      folderListFilterType   FolderAction (write)
                      messages               FolderAction (write)
                                             folder.jsp (read)


                                               98
                   quotaList                 FolderAction (write)
                                             folder.jsp (read)
                   requestStartTime          FolderAction (read/write)
                                             folder.jsp (read)

On the session scope


                   data item                 producer/consumer
                   addressList               FolderAction (read/write)
                   logging in                FolderAction (read)
                   savedComposeForm          FolderAction (read/write)
                   user                      FolderAction (read/write)
                                             folder.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)


F.4.3   External control flow
Forwards leading to this composition


                 /login.do                        /folder.do
                 /emptyTrash.do                   /modifyFolder.do
                 /folderManage.do                 /folderManageModify.do
                 /createFolder.do                 /renameFolder.do
                 /changeSubscribed.do             /deleteFolder.do
                 /performDeleteFolder.do          /deleteMessage.do
                 /deleteMessages.do               /modifyMessage.do
                 /moveMessage.do                  /copyMessage.do
                 /moveMessages.do                 /copyMessages.do
                 /message.do                      /rawMessage.do
                 /nextMessage.do                  /prevMessage.do
                 /printerFriendly.do              /addressbook.do
                 /addAddress.do                   /saveAddress.do
                 /deleteAddress.do                /selectAddresses.do
                 /saveAddresses.do                /errorCopy.do
                 /errorCopyToSent.do              /errorCopyToTrash.do
                 /compose.do                      /composeResume.do
                 /forward.do                      /reply.do
                 /modifyCompose.do                /send.do


                                             99
                   /errorBasic.do             /errorUncaught.do
                   /errorLogout.do            /noInbox.do
                   /about.do                  /help.do
                   /feedback.do               /preferences.do
                   /failMessage.do            /failMessageList.do

Forwards starting from this composition


                           /folder.do         /help.do
                           /CSS.do            /emptyTrash.do
                           /compose.do        /addressbook.do
                           /folderManage.do   /preferences.do
                           /logout.do         /about.do
                           /feedback.do       /modifyFolder.do
                           /message.do


F.4.4    External dataflow

                                ActionForm: folderForm
                                folder   filter
                                fullName filterType

Input parameters: folder

F.5     /emptyTrash.do
F.5.1    Internal control flow




F.5.2    Internal dataflow
On the request scope


                  data item            producer/consumer
                  composeForm          EmptyTrashAction (read)
                                       FolderAction (read)
                  currentRootFolder    folder.jsp (read/write)
                  folder               FolderAction (write)
                                       folder.jsp (read)
                  folderBeanList       FolderAction (write)


                                          100
                folderListFilter        FolderAction (write)
                folderListFilterType    FolderAction (write)
                messages                FolderAction (write)
                                        folder.jsp (read)
                quotaList               FolderAction (write)
                                        folder.jsp (read)
                requestStartTime        EmptyTrashAction (read/write)
                                        FolderAction (read/write)
                                        folder.jsp (read)

On the session scope


                data item              producer/consumer
                addressList            FolderAction (read/write)
                logging in             EmptyTrashAction (read)
                                       FolderAction (read)
                savedComposeForm       EmptyTrashAction (read/write)
                                       FolderAction (read/write)
                user                   EmptyTrashAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)


F.5.3   External control flow
Forwards leading to this composition


                        /folder.do             /emptyTrash.do
                        /modifyFolder.do       /deleteMessages.do
                        /modifyMessage.do      /moveMessage.do
                        /copyMessage.do        /moveMessages.do
                        /copyMessages.do       /message.do
                        /rawMessage.do         /nextMessage.do
                        /prevMessage.do        /selectAddresses.do
                        /saveAddresses.do      /forward.do
                        /reply.do              /modifyCompose.do
                        /send.do               /failMessage.do
                        /failMessageList.do


                                             101
Forwards starting from this composition


                           /folder.do         /help.do
                           /CSS.do            /emptyTrash.do
                           /compose.do        /addressbook.do
                           /folderManage.do   /preferences.do
                           /logout.do         /about.do
                           /feedback.do       /modifyFolder.do
                           /message.do


F.5.4    External dataflow

                            ActionForm: emptyTrashForm

Input parameters: folder

F.6     /modifyFolder.do
F.6.1    Internal control flow




F.6.2    Internal dataflow
On the request scope


                 data item            producer/consumer
                 composeForm          DeleteMessageAction (read)
                                      FolderAction (read)
                                      CheckSessionAction (read)
                                      MoveCopyAction (read)
                                      FolderAction (read)
                                      CheckSessionAction (read)


                                          102
              currentRootFolder      folder.jsp (read/write)
                                     folder.jsp (read/write)
              deleteAction           DeleteMessageAction (write)
                                     errorCopyToTrash.jsp (read)
              folder                 DeleteMessageAction (write)
                                     FolderAction (write)
                                     folder.jsp (read)
                                     FolderAction (write)
                                     folder.jsp (read)
              folderBeanList         DeleteMessageAction (write)
                                     FolderAction (write)
                                     FolderAction (write)
              folderListFilter       FolderAction (write)
                                     FolderAction (write)
              folderListFilterType   FolderAction (write)
                                     FolderAction (write)
              folderName             MoveCopyAction (write)
                                     errorCopy.jsp (read)
              message                DeleteMessageAction (write)
              messageList            DeleteMessageAction (write)
                                     errorCopyToTrash.jsp (read)
                                     MoveCopyAction (write)
                                     errorCopy.jsp (read)
              messages               FolderAction (write)
                                     folder.jsp (read)
                                     FolderAction (write)
                                     folder.jsp (read)
              quotaList              FolderAction (write)
                                     folder.jsp (read)
                                     FolderAction (write)
                                     folder.jsp (read)
              requestStartTime       DeleteMessageAction (read/write)
                                     FolderAction (read/write)
                                     folder.jsp (read)
                                     CheckSessionAction (read/write)
                                     errorCopyToTrash.jsp (read)
                                     MoveCopyAction (read/write)
                                     FolderAction (read/write)
                                     folder.jsp (read)
                                     CheckSessionAction (read/write)
                                     errorCopy.jsp (read)
              result                 DeleteMessageAction (write)
                                     MoveCopyAction (write)

On the session scope


                                        103
               data item            producer/consumer
               addressList          FolderAction (read/write)
                                    FolderAction (read/write)
               logging in           DeleteMessageAction (read)
                                    FolderAction (read)
                                    CheckSessionAction (read)
                                    MoveCopyAction (read)
                                    FolderAction (read)
                                    CheckSessionAction (read)
               savedComposeForm     DeleteMessageAction (read/write)
                                    FolderAction (read/write)
                                    CheckSessionAction (read/write)
                                    MoveCopyAction (read/write)
                                    FolderAction (read/write)
                                    CheckSessionAction (read/write)
               user                 DeleteMessageAction (read/write)
                                    FolderAction (read/write)
                                    folder.jsp (read)
                                    CheckSessionAction (read/write)
                                    errorCopyToTrash.jsp (read)
                                    MoveCopyAction (read/write)
                                    FolderAction (read/write)
                                    folder.jsp (read)
                                    CheckSessionAction (read/write)
                                    errorCopy.jsp (read)

On the context scope


                  data item             producer/consumer
                  preferencesProvider   FolderAction (read)
                                        folder.jsp (read)
                                        errorCopyToTrash.jsp (read)
                                        FolderAction (read)
                                        folder.jsp (read)
                                        errorCopy.jsp (read)


F.6.3   External control flow
Forwards leading to this composition


                       /folder.do            /emptyTrash.do
                       /modifyFolder.do      /deleteMessages.do
                       /modifyMessage.do     /moveMessage.do
                       /copyMessage.do       /moveMessages.do


                                           104
                           /copyMessages.do      /message.do
                           /rawMessage.do        /nextMessage.do
                           /prevMessage.do       /selectAddresses.do
                           /saveAddresses.do     /forward.do
                           /reply.do             /modifyCompose.do
                           /send.do              /failMessage.do
                           /failMessageList.do

Forwards starting from this composition


                             /folder.do          /help.do
                             /CSS.do             /emptyTrash.do
                             /compose.do         /addressbook.do
                             /folderManage.do    /preferences.do
                             /logout.do          /about.do
                             /feedback.do        /modifyFolder.do
                             /message.do


F.6.4    External dataflow

                             ActionForm: modifyFolderForm
                             toFolder deleteForever

Input parameters: folder

F.7     /folderManage.do
F.7.1    Internal control flow




F.7.2    Internal dataflow
On the request scope


                  data item              producer/consumer
                  composeForm            FolderManageAction (read)
                  currentRootFolder      folderManage.jsp (write)
                  folder                 FolderManageAction (write)
                                         folderManage.jsp (read)
                  folderBeanList         FolderManageAction (write)
                                         folderManage.jsp (read)



                                             105
                quotaList          FolderManageAction (write)
                                   folderManage.jsp (read)
                requestStartTime   FolderManageAction (read/write)
                                   folderManage.jsp (read)

On the session scope


                data item           producer/consumer
                logging in          FolderManageAction (read)
                savedComposeForm    FolderManageAction (read/write)
                user                FolderManageAction (read/write)
                                    folderManage.jsp (read)

On the context scope


                    data item              producer/consumer
                    preferencesProvider    folderManage.jsp (read)


F.7.3   External control flow
Forwards leading to this composition


                 /login.do                   /folder.do
                 /emptyTrash.do              /modifyFolder.do
                 /folderManage.do            /folderManageModify.do
                 /createFolder.do            /renameFolder.do
                 /changeSubscribed.do        /deleteFolder.do
                 /performDeleteFolder.do     /deleteMessage.do
                 /deleteMessages.do          /modifyMessage.do
                 /moveMessage.do             /copyMessage.do
                 /moveMessages.do            /copyMessages.do
                 /message.do                 /rawMessage.do
                 /nextMessage.do             /prevMessage.do
                 /addressbook.do             /addAddress.do
                 /saveAddress.do             /deleteAddress.do
                 /selectAddresses.do         /saveAddresses.do
                 /compose.do                 /composeResume.do
                 /forward.do                 /reply.do
                 /modifyCompose.do           /send.do
                 /help.do                    /preferences.do
                 /failMessage.do             /failMessageList.do

Forwards starting from this composition

                                          106
                       /folder.do          /help.do
                       /CSS.do             /folderManageModify.do
                       /deleteFolder.do    /compose.do
                       /addressbook.do     /folderManage.do
                       /preferences.do     /logout.do
                       /about.do           /feedback.do


F.7.4    External dataflow
F.8     /folderManageModify.do
F.8.1    Internal control flow




F.8.2    Internal dataflow
On the request scope


              data item           producer/consumer
              composeForm         FolderManageModifyAction (read)
              currentRootFolder   folderManageModify.jsp (write)
              folder              FolderManageModifyAction (write)
                                  folderManageModify.jsp (read)
              isSubscribed        FolderManageModifyAction (write)
                                  folderManageModify.jsp (read)
              quotaList           FolderManageModifyAction (write)
                                  folderManageModify.jsp (read)
              requestStartTime    FolderManageModifyAction (read/write)
                                  folderManageModify.jsp (read)

On the session scope


              data item            producer/consumer
              logging in           FolderManageModifyAction (read)
              savedComposeForm     FolderManageModifyAction (read/write)
              user                 FolderManageModifyAction (read/write)
                                   folderManageModify.jsp (read)

On the context scope


                  data item               producer/consumer
                  preferencesProvider     folderManageModify.jsp (read)

                                            107
F.8.3    External control flow
Forwards leading to this composition


                     /folderManage.do     /createFolder.do
                     /renameFolder.do     /changeSubscribed.do
                     /deleteFolder.do     /performDeleteFolder.do
                     /deleteMessage.do

Forwards starting from this composition


                       /folder.do          /help.do
                       /CSS.do             /createFolder.do
                       /renameFolder.do    /changeSubscribed.do
                       /folderManage.do    /compose.do
                       /addressbook.do     /preferences.do
                       /logout.do          /about.do
                       /feedback.do


F.8.4    External dataflow

                                ActionForm: folderForm
                                folder   filter
                                fullName filterType

F.9     /createFolder.do
F.9.1    Internal control flow




F.9.2    Internal dataflow
On the request scope


              data item            producer/consumer
              composeForm          CreateFolderAction (read)
                                   FolderManageAction (read)
                                   FolderManageModifyAction (read)
              currentRootFolder    folderManage.jsp (write)


                                          108
                                   folderManageModify.jsp (write)
             folder                FolderManageAction (write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             folderBeanList        FolderManageAction (write)
                                   folderManage.jsp (read)
             isSubscribed          FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             quotaList             FolderManageAction (write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             requestStartTime      CreateFolderAction (read/write)
                                   FolderManageAction (read/write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (read/write)
                                   folderManageModify.jsp (read)
             result                CreateFolderAction (write)

On the session scope


             data item              producer/consumer
             logging in             CreateFolderAction (read)
                                    FolderManageAction (read)
                                    FolderManageModifyAction (read)
             savedComposeForm       CreateFolderAction (read/write)
                                    FolderManageAction (read/write)
                                    FolderManageModifyAction (read/write)
             user                   CreateFolderAction (read/write)
                                    FolderManageAction (read/write)
                                    folderManage.jsp (read)
                                    FolderManageModifyAction (read/write)
                                    folderManageModify.jsp (read)

On the context scope


                    data item             producer/consumer
                    preferencesProvider   folderManage.jsp (read)
                                          folderManageModify.jsp (read)


F.9.3   External control flow
Forwards leading to this composition



                                            109
                       /folderManageModify.do       /createFolder.do
                       /renameFolder.do             /changeSubscribed.do

Forwards starting from this composition


                       /folder.do              /help.do
                       /CSS.do                 /folderManageModify.do
                       /deleteFolder.do        /compose.do
                       /addressbook.do         /folderManage.do
                       /preferences.do         /logout.do
                       /about.do               /feedback.do
                       /createFolder.do        /renameFolder.do
                       /changeSubscribed.do


F.9.4    External dataflow

                              ActionForm: newFolderForm
                              newFolder

F.10     /renameFolder.do
F.10.1    Internal control flow




F.10.2    Internal dataflow
On the request scope


              data item             producer/consumer
              composeForm           RenameFolderAction (read)
                                    FolderManageAction (read)
                                    FolderManageModifyAction (read)
              currentRootFolder     folderManage.jsp (write)
                                    folderManageModify.jsp (write)
              folder                FolderManageAction (write)
                                    folderManage.jsp (read)
                                    FolderManageModifyAction (write)
                                    folderManageModify.jsp (read)



                                              110
             folderBeanList        FolderManageAction (write)
                                   folderManage.jsp (read)
             isSubscribed          FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             quotaList             FolderManageAction (write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             requestStartTime      RenameFolderAction (read/write)
                                   FolderManageAction (read/write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (read/write)
                                   folderManageModify.jsp (read)
             result                RenameFolderAction (write)

On the session scope


             data item              producer/consumer
             logging in             RenameFolderAction (read)
                                    FolderManageAction (read)
                                    FolderManageModifyAction (read)
             savedComposeForm       RenameFolderAction (read/write)
                                    FolderManageAction (read/write)
                                    FolderManageModifyAction (read/write)
             user                   RenameFolderAction (read/write)
                                    FolderManageAction (read/write)
                                    folderManage.jsp (read)
                                    FolderManageModifyAction (read/write)
                                    folderManageModify.jsp (read)

On the context scope


                    data item             producer/consumer
                    preferencesProvider   folderManage.jsp (read)
                                          folderManageModify.jsp (read)


F.10.3   External control flow
Forwards leading to this composition


                      /folderManageModify.do      /createFolder.do
                      /renameFolder.do            /changeSubscribed.do



                                            111
Forwards starting from this composition


                       /folder.do              /help.do
                       /CSS.do                 /folderManageModify.do
                       /deleteFolder.do        /compose.do
                       /addressbook.do         /folderManage.do
                       /preferences.do         /logout.do
                       /about.do               /feedback.do
                       /createFolder.do        /renameFolder.do
                       /changeSubscribed.do


F.10.4    External dataflow

                              ActionForm: newFolderForm
                              newFolder

F.11     /changeSubscribed.do
F.11.1    Internal control flow




F.11.2    Internal dataflow
On the request scope


              data item             producer/consumer
              composeForm           ChangeSubscribedAction (read)
                                    FolderManageAction (read)
                                    FolderManageModifyAction (read)
              currentRootFolder     folderManage.jsp (write)
                                    folderManageModify.jsp (write)
              folder                FolderManageAction (write)
                                    folderManage.jsp (read)
                                    FolderManageModifyAction (write)
                                    folderManageModify.jsp (read)
              folderBeanList        FolderManageAction (write)
                                    folderManage.jsp (read)
              isSubscribed          FolderManageModifyAction (write)
                                    folderManageModify.jsp (read)



                                              112
             quotaList             FolderManageAction (write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (write)
                                   folderManageModify.jsp (read)
             requestStartTime      ChangeSubscribedAction (read/write)
                                   FolderManageAction (read/write)
                                   folderManage.jsp (read)
                                   FolderManageModifyAction (read/write)
                                   folderManageModify.jsp (read)
             result                ChangeSubscribedAction (write)

On the session scope


             data item              producer/consumer
             logging in             ChangeSubscribedAction (read)
                                    FolderManageAction (read)
                                    FolderManageModifyAction (read)
             savedComposeForm       ChangeSubscribedAction (read/write)
                                    FolderManageAction (read/write)
                                    FolderManageModifyAction (read/write)
             user                   ChangeSubscribedAction (read/write)
                                    FolderManageAction (read/write)
                                    folderManage.jsp (read)
                                    FolderManageModifyAction (read/write)
                                    folderManageModify.jsp (read)

On the context scope


                    data item             producer/consumer
                    preferencesProvider   folderManage.jsp (read)
                                          folderManageModify.jsp (read)


F.11.3   External control flow
Forwards leading to this composition


                      /folderManageModify.do      /createFolder.do
                      /renameFolder.do            /changeSubscribed.do

Forwards starting from this composition


                      /folder.do              /help.do
                      /CSS.do                 /folderManageModify.do

                                            113
                    /deleteFolder.do        /compose.do
                    /addressbook.do         /folderManage.do
                    /preferences.do         /logout.do
                    /about.do               /feedback.do
                    /createFolder.do        /renameFolder.do
                    /changeSubscribed.do


F.11.4    External dataflow

                          ActionForm: folderActionForm
                          action

F.12     /deleteFolder.do
F.12.1    Internal control flow




F.12.2    Internal dataflow
On the request scope


                 data item           producer/consumer
                 affectedFolderList   DeleteFolderAction (write)
                                     confirmDeleteFolder.jsp (read)
                 composeForm         DeleteFolderAction (read)
                                     FolderManageAction (read)
                 currentRootFolder   confirmDeleteFolder.jsp (write)
                                     folderManage.jsp (write)
                 folder              DeleteFolderAction (write)
                                     confirmDeleteFolder.jsp (read)
                                     FolderManageAction (write)
                                     folderManage.jsp (read)
                 folderBeanList      FolderManageAction (write)
                                     folderManage.jsp (read)
                 quotaList           confirmDeleteFolder.jsp (read)
                                     FolderManageAction (write)
                                     folderManage.jsp (read)
                 requestStartTime    DeleteFolderAction (read/write)
                                     confirmDeleteFolder.jsp (read)
                                     FolderManageAction (read/write)
                                     folderManage.jsp (read)

                                           114
                result                 DeleteFolderAction (write)

On the session scope


               data item               producer/consumer
               logging in              DeleteFolderAction (read)
                                       FolderManageAction (read)
               savedComposeForm        DeleteFolderAction (read/write)
                                       FolderManageAction (read/write)
               user                    DeleteFolderAction (read/write)
                                       confirmDeleteFolder.jsp (read)
                                       FolderManageAction (read/write)
                                       folderManage.jsp (read)

On the context scope


                 data item                producer/consumer
                 preferencesProvider      confirmDeleteFolder.jsp (read)
                                          folderManage.jsp (read)


F.12.3   External control flow
Forwards leading to this composition


                      /folderManage.do      /createFolder.do
                      /renameFolder.do      /changeSubscribed.do
                      /deleteFolder.do      /performDeleteFolder.do
                      /deleteMessage.do

Forwards starting from this composition


                      /folder.do           /help.do
                      /CSS.do              /performDeleteFolder.do
                      /compose.do          /addressbook.do
                      /folderManage.do     /preferences.do
                      /logout.do           /about.do
                      /feedback.do         /folderManageModify.do
                      /deleteFolder.do


F.12.4   External dataflow

                              ActionForm: folderForm


                                            115
                                folder        filter
                                fullName      filterType

F.13     /performDeleteFolder.do
F.13.1    Internal control flow




F.13.2    Internal dataflow
On the request scope


               data item            producer/consumer
               composeForm          PerformDeleteFolderAction (read)
                                    FolderManageAction (read)
               currentRootFolder    folderManage.jsp (write)
               folder               FolderManageAction (write)
                                    folderManage.jsp (read)
               folderBeanList       FolderManageAction (write)
                                    folderManage.jsp (read)
               quotaList            FolderManageAction (write)
                                    folderManage.jsp (read)
               requestStartTime     PerformDeleteFolderAction (read/write)
                                    FolderManageAction (read/write)
                                    folderManage.jsp (read)
               result               PerformDeleteFolderAction (write)

On the session scope


              data item              producer/consumer
              logging in             PerformDeleteFolderAction (read)
                                     FolderManageAction (read)
              savedComposeForm       PerformDeleteFolderAction (read/write)
                                     FolderManageAction (read/write)
              user                   PerformDeleteFolderAction (read/write)
                                     FolderManageAction (read/write)
                                     folderManage.jsp (read)

On the context scope


                        data item              producer/consumer
                        preferencesProvider    folderManage.jsp (read)


                                              116
F.13.3    External control flow
Forwards leading to this composition


                                   /deleteFolder.do

Forwards starting from this composition


                       /folder.do         /help.do
                       /CSS.do            /folderManageModify.do
                       /deleteFolder.do   /compose.do
                       /addressbook.do    /folderManage.do
                       /preferences.do    /logout.do
                       /about.do          /feedback.do


F.13.4    External dataflow

                              ActionForm: folderForm
                              folder   filter
                              fullName filterType

F.14     /deleteMessage.do
F.14.1    Internal control flow




F.14.2    Internal dataflow
On the request scope


                 data item           producer/consumer
                 body                message.jsp (read/write)
                 composeForm         DeleteMessageAction (read)
                                     FolderManageAction (read)
                                     CheckSessionAction (read)
                 currentRootFolder   folderManage.jsp (write)
                 deleteAction        DeleteMessageAction (write)
                                     errorCopyToTrash.jsp (read)


                                          117
               folder             DeleteMessageAction (write)
                                  FolderManageAction (write)
                                  folderManage.jsp (read)
               folderBeanList     DeleteMessageAction (write)
                                  FolderManageAction (write)
                                  folderManage.jsp (read)
               message            DeleteMessageAction (write)
                                  message.jsp (read/write)
               messageFolder      message.jsp (read/write)
               messageList        DeleteMessageAction (write)
                                  errorCopyToTrash.jsp (read)
               messageParams      message.jsp (read/write)
               part               message.jsp (read/write)
               printerFriendly    message.jsp (read)
               quotaList          FolderManageAction (write)
                                  folderManage.jsp (read)
               realFolder         message.jsp (read/write)
               realMessage        message.jsp (read/write)
               requestStartTime   DeleteMessageAction (read/write)
                                  message.jsp (read)
                                  FolderManageAction (read/write)
                                  folderManage.jsp (read)
                                  CheckSessionAction (read/write)
                                  errorCopyToTrash.jsp (read)
               result             DeleteMessageAction (write)

On the session scope


               data item          producer/consumer
               logging in         DeleteMessageAction (read)
                                  FolderManageAction (read)
                                  CheckSessionAction (read)
               savedComposeForm   DeleteMessageAction (read/write)
                                  FolderManageAction (read/write)
                                  CheckSessionAction (read/write)
               user               DeleteMessageAction (read/write)
                                  message.jsp (read)
                                  FolderManageAction (read/write)
                                  folderManage.jsp (read)
                                  CheckSessionAction (read/write)
                                  errorCopyToTrash.jsp (read)

On the context scope




                                      118
             data item                        producer/consumer
             Tiles.DEFINITIONS FACTORY        message.jsp (read)
             preferencesProvider              message.jsp (read)
                                              folderManage.jsp (read)
                                              errorCopyToTrash.jsp (read)


F.14.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                     /folder.do               /prevMessage.do
                     /nextMessage.do          /help.do
                     /printerFriendly.do      /rawMessage.do
                     /CSS.do                  /selectAddresses.do
                     /compose.do              /addressbook.do
                     /folderManage.do         /preferences.do
                     /logout.do               /about.do
                     /feedback.do             /modifyMessage.do
                     /folderManageModify.do   /deleteFolder.do


F.14.4    External dataflow

                        ActionForm: deleteMessageForm
                        deleteForever

F.15     /deleteMessages.do
F.15.1    Internal control flow




F.15.2    Internal dataflow
On the request scope


                data item           producer/consumer
                composeForm         DeleteMessagesAction (read)
                                    FolderAction (read)
                                    CheckSessionAction (read)


                                        119
              currentRootFolder      folder.jsp (read/write)
              deleteAction           DeleteMessagesAction (write)
                                     errorCopyToTrash.jsp (read)
              folder                 DeleteMessagesAction (write)
                                     FolderAction (write)
                                     folder.jsp (read)
              folderBeanList         FolderAction (write)
              folderListFilter       FolderAction (write)
              folderListFilterType   FolderAction (write)
              messageList            DeleteMessagesAction (write)
                                     errorCopyToTrash.jsp (read)
              messages               FolderAction (write)
                                     folder.jsp (read)
              quotaList              FolderAction (write)
                                     folder.jsp (read)
              requestStartTime       DeleteMessagesAction (read/write)
                                     FolderAction (read/write)
                                     folder.jsp (read)
                                     CheckSessionAction (read/write)
                                     errorCopyToTrash.jsp (read)
              result                 DeleteMessagesAction (write)

On the session scope


              data item              producer/consumer
              addressList            FolderAction (read/write)
              logging in             DeleteMessagesAction (read)
                                     FolderAction (read)
                                     CheckSessionAction (read)
              savedComposeForm       DeleteMessagesAction (read/write)
                                     FolderAction (read/write)
                                     CheckSessionAction (read/write)
              user                   DeleteMessagesAction (read/write)
                                     FolderAction (read/write)
                                     folder.jsp (read)
                                     CheckSessionAction (read/write)
                                     errorCopyToTrash.jsp (read)

On the context scope


                 data item             producer/consumer
                 preferencesProvider   FolderAction (read)
                                       folder.jsp (read)
                                       errorCopyToTrash.jsp (read)


                                         120
F.15.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do         /help.do
                           /CSS.do            /emptyTrash.do
                           /compose.do        /addressbook.do
                           /folderManage.do   /preferences.do
                           /logout.do         /about.do
                           /feedback.do       /modifyFolder.do
                           /message.do


F.15.4    External dataflow

                           ActionForm: deleteMessagesForm
                           deleteForever

Input parameters: folder

F.16     /modifyMessage.do
F.16.1    Internal control flow




F.16.2    Internal dataflow
On the request scope


                 data item             producer/consumer
                 composeForm           MoveCopyAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
                                       MoveCopyAction (read)


                                          121
                                      FolderAction (read)
                                      CheckSessionAction (read)
               currentRootFolder      folder.jsp (read/write)
                                      folder.jsp (read/write)
               folder                 FolderAction (write)
                                      folder.jsp (read)
                                      FolderAction (write)
                                      folder.jsp (read)
               folderBeanList         FolderAction (write)
                                      FolderAction (write)
               folderListFilter       FolderAction (write)
                                      FolderAction (write)
               folderListFilterType   FolderAction (write)
                                      FolderAction (write)
               folderName             MoveCopyAction (write)
                                      errorCopy.jsp (read)
                                      MoveCopyAction (write)
                                      errorCopy.jsp (read)
               messageList            MoveCopyAction (write)
                                      errorCopy.jsp (read)
                                      MoveCopyAction (write)
                                      errorCopy.jsp (read)
               messages               FolderAction (write)
                                      folder.jsp (read)
                                      FolderAction (write)
                                      folder.jsp (read)
               quotaList              FolderAction (write)
                                      folder.jsp (read)
                                      FolderAction (write)
                                      folder.jsp (read)
               requestStartTime       MoveCopyAction (read/write)
                                      FolderAction (read/write)
                                      folder.jsp (read)
                                      CheckSessionAction (read/write)
                                      errorCopy.jsp (read)
                                      MoveCopyAction (read/write)
                                      FolderAction (read/write)
                                      folder.jsp (read)
                                      CheckSessionAction (read/write)
                                      errorCopy.jsp (read)
               result                 MoveCopyAction (write)
                                      MoveCopyAction (write)

On the session scope


               data item              producer/consumer

                                         122
                addressList            FolderAction (read/write)
                                       FolderAction (read/write)
                logging in             MoveCopyAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
                                       MoveCopyAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
                savedComposeForm       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       CheckSessionAction (read/write)
                                       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       CheckSessionAction (read/write)
                user                   MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)
                                       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     FolderAction (read)
                                               folder.jsp (read)
                                               errorCopy.jsp (read)
                                               FolderAction (read)
                                               folder.jsp (read)
                                               errorCopy.jsp (read)


F.16.3   External control flow
Forwards leading to this composition


                         /deleteMessage.do         /message.do
                         /nextMessage.do           /prevMessage.do
                         /selectAddresses.do       /saveAddresses.do

Forwards starting from this composition


                                             123
                           /folder.do         /help.do
                           /CSS.do            /emptyTrash.do
                           /compose.do        /addressbook.do
                           /folderManage.do   /preferences.do
                           /logout.do         /about.do
                           /feedback.do       /modifyFolder.do
                           /message.do


F.16.4    External dataflow

                             ActionForm: moveCopyForm
                             toFolder

Input parameters: folder

F.17     /moveMessage.do
F.17.1    Internal control flow




F.17.2    Internal dataflow
On the request scope


                 data item              producer/consumer
                 composeForm            MoveCopyAction (read)
                                        FolderAction (read)
                                        CheckSessionAction (read)
                 currentRootFolder      folder.jsp (read/write)
                 folder                 FolderAction (write)
                                        folder.jsp (read)
                 folderBeanList         FolderAction (write)
                 folderListFilter       FolderAction (write)
                 folderListFilterType   FolderAction (write)
                 folderName             MoveCopyAction (write)
                                        errorCopy.jsp (read)
                 messageList            MoveCopyAction (write)
                                        errorCopy.jsp (read)



                                           124
                messages               FolderAction (write)
                                       folder.jsp (read)
                quotaList              FolderAction (write)
                                       folder.jsp (read)
                requestStartTime       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)
                result                 MoveCopyAction (write)

On the session scope


                data item              producer/consumer
                addressList            FolderAction (read/write)
                logging in             MoveCopyAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
                savedComposeForm       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       CheckSessionAction (read/write)
                user                   MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)
                                              errorCopy.jsp (read)


F.17.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do          /help.do
                           /CSS.do             /emptyTrash.do
                           /compose.do         /addressbook.do
                           /folderManage.do    /preferences.do


                                             125
                            /logout.do          /about.do
                            /feedback.do        /modifyFolder.do
                            /message.do


F.17.4    External dataflow

                             ActionForm: moveCopyForm
                             toFolder

Input parameters: folder

F.18     /copyMessage.do
F.18.1    Internal control flow




F.18.2    Internal dataflow
On the request scope


                 data item                 producer/consumer
                 composeForm               MoveCopyAction (read)
                                           FolderAction (read)
                                           CheckSessionAction (read)
                 currentRootFolder         folder.jsp (read/write)
                 folder                    FolderAction (write)
                                           folder.jsp (read)
                 folderBeanList            FolderAction (write)
                 folderListFilter          FolderAction (write)
                 folderListFilterType      FolderAction (write)
                 folderName                MoveCopyAction (write)
                                           errorCopy.jsp (read)
                 messageList               MoveCopyAction (write)
                                           errorCopy.jsp (read)
                 messages                  FolderAction (write)
                                           folder.jsp (read)
                 quotaList                 FolderAction (write)
                                           folder.jsp (read)
                 requestStartTime          MoveCopyAction (read/write)
                                           FolderAction (read/write)

                                              126
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)
                result                 MoveCopyAction (write)

On the session scope


                data item              producer/consumer
                addressList            FolderAction (read/write)
                logging in             MoveCopyAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
                savedComposeForm       MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       CheckSessionAction (read/write)
                user                   MoveCopyAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopy.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)
                                              errorCopy.jsp (read)


F.18.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                          /folder.do           /help.do
                          /CSS.do              /emptyTrash.do
                          /compose.do          /addressbook.do
                          /folderManage.do     /preferences.do
                          /logout.do           /about.do
                          /feedback.do         /modifyFolder.do
                          /message.do


F.18.4   External dataflow




                                             127
                             ActionForm: moveCopyForm
                             toFolder

Input parameters: folder

F.19     /moveMessages.do
F.19.1    Internal control flow




F.19.2    Internal dataflow
On the request scope


                 data item              producer/consumer
                 composeForm            MoveCopyAction (read)
                                        FolderAction (read)
                                        CheckSessionAction (read)
                 currentRootFolder      folder.jsp (read/write)
                 folder                 FolderAction (write)
                                        folder.jsp (read)
                 folderBeanList         FolderAction (write)
                 folderListFilter       FolderAction (write)
                 folderListFilterType   FolderAction (write)
                 folderName             MoveCopyAction (write)
                                        errorCopy.jsp (read)
                 messageList            MoveCopyAction (write)
                                        errorCopy.jsp (read)
                 messages               FolderAction (write)
                                        folder.jsp (read)
                 quotaList              FolderAction (write)
                                        folder.jsp (read)
                 requestStartTime       MoveCopyAction (read/write)
                                        FolderAction (read/write)
                                        folder.jsp (read)
                                        CheckSessionAction (read/write)
                                        errorCopy.jsp (read)
                 result                 MoveCopyAction (write)

On the session scope


                                           128
                  data item              producer/consumer
                  addressList            FolderAction (read/write)
                  logging in             MoveCopyAction (read)
                                         FolderAction (read)
                                         CheckSessionAction (read)
                  savedComposeForm       MoveCopyAction (read/write)
                                         FolderAction (read/write)
                                         CheckSessionAction (read/write)
                  user                   MoveCopyAction (read/write)
                                         FolderAction (read/write)
                                         folder.jsp (read)
                                         CheckSessionAction (read/write)
                                         errorCopy.jsp (read)

On the context scope


                         data item              producer/consumer
                         preferencesProvider    FolderAction (read)
                                                folder.jsp (read)
                                                errorCopy.jsp (read)


F.19.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                            /folder.do           /help.do
                            /CSS.do              /emptyTrash.do
                            /compose.do          /addressbook.do
                            /folderManage.do     /preferences.do
                            /logout.do           /about.do
                            /feedback.do         /modifyFolder.do
                            /message.do


F.19.4   External dataflow

                              ActionForm: moveCopyForm
                              toFolder

Input parameters: folder




                                               129
F.20     /copyMessages.do
F.20.1    Internal control flow




F.20.2    Internal dataflow
On the request scope


                 data item              producer/consumer
                 composeForm            MoveCopyAction (read)
                                        FolderAction (read)
                                        CheckSessionAction (read)
                 currentRootFolder      folder.jsp (read/write)
                 folder                 FolderAction (write)
                                        folder.jsp (read)
                 folderBeanList         FolderAction (write)
                 folderListFilter       FolderAction (write)
                 folderListFilterType   FolderAction (write)
                 folderName             MoveCopyAction (write)
                                        errorCopy.jsp (read)
                 messageList            MoveCopyAction (write)
                                        errorCopy.jsp (read)
                 messages               FolderAction (write)
                                        folder.jsp (read)
                 quotaList              FolderAction (write)
                                        folder.jsp (read)
                 requestStartTime       MoveCopyAction (read/write)
                                        FolderAction (read/write)
                                        folder.jsp (read)
                                        CheckSessionAction (read/write)
                                        errorCopy.jsp (read)
                 result                 MoveCopyAction (write)

On the session scope


                 data item              producer/consumer
                 addressList            FolderAction (read/write)
                 logging in             MoveCopyAction (read)
                                        FolderAction (read)
                                        CheckSessionAction (read)

                                           130
                  savedComposeForm       MoveCopyAction (read/write)
                                         FolderAction (read/write)
                                         CheckSessionAction (read/write)
                  user                   MoveCopyAction (read/write)
                                         FolderAction (read/write)
                                         folder.jsp (read)
                                         CheckSessionAction (read/write)
                                         errorCopy.jsp (read)

On the context scope


                         data item              producer/consumer
                         preferencesProvider    FolderAction (read)
                                                folder.jsp (read)
                                                errorCopy.jsp (read)


F.20.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                            /folder.do           /help.do
                            /CSS.do              /emptyTrash.do
                            /compose.do          /addressbook.do
                            /folderManage.do     /preferences.do
                            /logout.do           /about.do
                            /feedback.do         /modifyFolder.do
                            /message.do


F.20.4   External dataflow

                              ActionForm: moveCopyForm
                              toFolder

Input parameters: folder




                                               131
F.21     /message.do
F.21.1    Internal control flow




F.21.2    Internal dataflow
On the request scope


                   data item              producer/consumer
                   body                   message.jsp (read/write)
                   composeForm            MessageAction (read)
                                          FolderAction (read)
                   currentRootFolder      folder.jsp (read/write)
                   folder                 MessageAction (write)
                                          FolderAction (write)
                                          folder.jsp (read)
                   folderBeanList         MessageAction (write)
                                          FolderAction (write)
                   folderListFilter       FolderAction (write)
                   folderListFilterType   FolderAction (write)
                   message                MessageAction (write)
                                          message.jsp (read/write)
                   messageFolder          message.jsp (read/write)
                   messageParams          message.jsp (read/write)
                   messages               FolderAction (write)
                                          folder.jsp (read)
                   part                   message.jsp (read/write)
                   printerFriendly        message.jsp (read)
                   quotaList              FolderAction (write)
                                          folder.jsp (read)
                   realFolder             message.jsp (read/write)
                   realMessage            message.jsp (read/write)
                   requestStartTime       MessageAction (read/write)
                                          message.jsp (read)
                                          FolderAction (read/write)
                                          folder.jsp (read)

On the session scope



                                          132
                  data item               producer/consumer
                  addressList             FolderAction (read/write)
                  logging in              MessageAction (read)
                                          FolderAction (read)
                  savedComposeForm        MessageAction (read/write)
                                          FolderAction (read/write)
                  user                    MessageAction (read/write)
                                          message.jsp (read)
                                          FolderAction (read/write)
                                          folder.jsp (read)

On the context scope


               data item                            producer/consumer
               Tiles.DEFINITIONS FACTORY            message.jsp (read)
               preferencesProvider                  message.jsp (read)
                                                    FolderAction (read)
                                                    folder.jsp (read)


F.21.3   External control flow
Forwards leading to this composition


                       /folder.do              /emptyTrash.do
                       /modifyFolder.do        /deleteMessages.do
                       /modifyMessage.do       /moveMessage.do
                       /copyMessage.do         /moveMessages.do
                       /copyMessages.do        /message.do
                       /rawMessage.do          /nextMessage.do
                       /prevMessage.do         /selectAddresses.do
                       /saveAddresses.do       /forward.do
                       /reply.do               /modifyCompose.do
                       /send.do                /failMessage.do
                       /failMessageList.do

Forwards starting from this composition


                         /folder.do            /prevMessage.do
                         /nextMessage.do       /help.do
                         /printerFriendly.do   /rawMessage.do
                         /CSS.do               /selectAddresses.do
                         /compose.do           /addressbook.do
                         /folderManage.do      /preferences.do


                                           133
                           /logout.do         /about.do
                           /feedback.do       /modifyMessage.do
                           /emptyTrash.do     /modifyFolder.do
                           /message.do


F.21.4    External dataflow

                               ActionForm: messageForm
                               messageNumber uid

Input parameters: folder

F.22     /rawMessage.do
F.22.1    Internal control flow




F.22.2    Internal dataflow
On the request scope


                  data item              producer/consumer
                  composeForm            RawMessageAction (read)
                                         FolderAction (read)
                  currentRootFolder      folder.jsp (read/write)
                  folder                 RawMessageAction (write)
                                         FolderAction (write)
                                         folder.jsp (read)
                  folderBeanList         FolderAction (write)
                  folderListFilter       FolderAction (write)
                  folderListFilterType   FolderAction (write)
                  message                RawMessageAction (write)
                  messages               FolderAction (write)
                                         folder.jsp (read)
                  quotaList              FolderAction (write)
                                         folder.jsp (read)
                  requestStartTime       RawMessageAction (read/write)
                                         FolderAction (read/write)
                                         folder.jsp (read)

On the session scope


                                            134
                  data item              producer/consumer
                  addressList            FolderAction (read/write)
                  logging in             RawMessageAction (read)
                                         FolderAction (read)
                  savedComposeForm       RawMessageAction (read/write)
                                         FolderAction (read/write)
                  user                   RawMessageAction (read/write)
                                         FolderAction (read/write)
                                         folder.jsp (read)

On the context scope


                         data item               producer/consumer
                         preferencesProvider     FolderAction (read)
                                                 folder.jsp (read)


F.22.3   External control flow
Forwards leading to this composition


                           /deleteMessage.do         /message.do
                           /nextMessage.do           /prevMessage.do
                           /selectAddresses.do       /saveAddresses.do

Forwards starting from this composition


                            /folder.do            /help.do
                            /CSS.do               /emptyTrash.do
                            /compose.do           /addressbook.do
                            /folderManage.do      /preferences.do
                            /logout.do            /about.do
                            /feedback.do          /modifyFolder.do
                            /message.do


F.22.4   External dataflow

                                ActionForm: messageForm
                                messageNumber uid

Input parameters: folder




                                               135
F.23     /nextMessage.do
F.23.1    Internal control flow




F.23.2    Internal dataflow
On the request scope


                 data item              producer/consumer
                 body                   message.jsp (read/write)
                 composeForm            NextMessageAction (read)
                                        FolderAction (read)
                 currentRootFolder      folder.jsp (read/write)
                 folder                 NextMessageAction (write)
                                        FolderAction (write)
                                        folder.jsp (read)
                 folderBeanList         NextMessageAction (write)
                                        FolderAction (write)
                 folderListFilter       FolderAction (write)
                 folderListFilterType   FolderAction (write)
                 message                NextMessageAction (write)
                                        message.jsp (read/write)
                 messageFolder          message.jsp (read/write)
                 messageParams          message.jsp (read/write)
                 messages               FolderAction (write)
                                        folder.jsp (read)
                 part                   message.jsp (read/write)
                 printerFriendly        message.jsp (read)
                 quotaList              FolderAction (write)
                                        folder.jsp (read)
                 realFolder             message.jsp (read/write)
                 realMessage            message.jsp (read/write)
                 requestStartTime       NextMessageAction (read/write)
                                        message.jsp (read)
                                        FolderAction (read/write)
                                        folder.jsp (read)

On the session scope




                                           136
                data item             producer/consumer
                addressList           FolderAction (read/write)
                logging in            NextMessageAction (read)
                                      FolderAction (read)
                savedComposeForm      NextMessageAction (read/write)
                                      FolderAction (read/write)
                user                  NextMessageAction (read/write)
                                      message.jsp (read)
                                      FolderAction (read/write)
                                      folder.jsp (read)

On the context scope


               data item                           producer/consumer
               Tiles.DEFINITIONS FACTORY           message.jsp (read)
               preferencesProvider                 message.jsp (read)
                                                   FolderAction (read)
                                                   folder.jsp (read)


F.23.3   External control flow
Forwards leading to this composition


                       /deleteMessage.do       /message.do
                       /nextMessage.do         /prevMessage.do
                       /selectAddresses.do     /saveAddresses.do

Forwards starting from this composition


                       /folder.do            /prevMessage.do
                       /nextMessage.do       /help.do
                       /printerFriendly.do   /rawMessage.do
                       /CSS.do               /selectAddresses.do
                       /compose.do           /addressbook.do
                       /folderManage.do      /preferences.do
                       /logout.do            /about.do
                       /feedback.do          /modifyMessage.do
                       /emptyTrash.do        /modifyFolder.do
                       /message.do


F.23.4   External dataflow




                                         137
                              ActionForm: messageForm
                              messageNumber uid

Input parameters: folder

F.24     /prevMessage.do
F.24.1    Internal control flow




F.24.2    Internal dataflow
On the request scope


                  data item              producer/consumer
                  body                   message.jsp (read/write)
                  composeForm            PrevMessageAction (read)
                                         FolderAction (read)
                  currentRootFolder      folder.jsp (read/write)
                  folder                 PrevMessageAction (write)
                                         FolderAction (write)
                                         folder.jsp (read)
                  folderBeanList         PrevMessageAction (write)
                                         FolderAction (write)
                  folderListFilter       FolderAction (write)
                  folderListFilterType   FolderAction (write)
                  message                PrevMessageAction (write)
                                         message.jsp (read/write)
                  messageFolder          message.jsp (read/write)
                  messageParams          message.jsp (read/write)
                  messages               FolderAction (write)
                                         folder.jsp (read)
                  part                   message.jsp (read/write)
                  printerFriendly        message.jsp (read)
                  quotaList              FolderAction (write)
                                         folder.jsp (read)
                  realFolder             message.jsp (read/write)
                  realMessage            message.jsp (read/write)
                  requestStartTime       PrevMessageAction (read/write)
                                         message.jsp (read)


                                            138
                                      FolderAction (read/write)
                                      folder.jsp (read)

On the session scope


                data item             producer/consumer
                addressList           FolderAction (read/write)
                logging in            PrevMessageAction (read)
                                      FolderAction (read)
                savedComposeForm      PrevMessageAction (read/write)
                                      FolderAction (read/write)
                user                  PrevMessageAction (read/write)
                                      message.jsp (read)
                                      FolderAction (read/write)
                                      folder.jsp (read)

On the context scope


               data item                           producer/consumer
               Tiles.DEFINITIONS FACTORY           message.jsp (read)
               preferencesProvider                 message.jsp (read)
                                                   FolderAction (read)
                                                   folder.jsp (read)


F.24.3   External control flow
Forwards leading to this composition


                       /deleteMessage.do       /message.do
                       /nextMessage.do         /prevMessage.do
                       /selectAddresses.do     /saveAddresses.do

Forwards starting from this composition


                       /folder.do            /prevMessage.do
                       /nextMessage.do       /help.do
                       /printerFriendly.do   /rawMessage.do
                       /CSS.do               /selectAddresses.do
                       /compose.do           /addressbook.do
                       /folderManage.do      /preferences.do
                       /logout.do            /about.do
                       /feedback.do          /modifyMessage.do
                       /emptyTrash.do        /modifyFolder.do


                                         139
                           /message.do


F.24.4    External dataflow

                               ActionForm: messageForm
                               messageNumber uid

Input parameters: folder

F.25     /printerFriendly.do
F.25.1    Internal control flow




F.25.2    Internal dataflow
On the request scope


                  data item              producer/consumer
                  body                   printerFriendly.jsp (read/write)
                  composeForm            PrinterFriendlyAction (read)
                  folder                 PrinterFriendlyAction (write)
                  message                PrinterFriendlyAction (write)
                                         printerFriendly.jsp (read/write)
                  part                   printerFriendly.jsp (read/write)
                  printerFriendly        PrinterFriendlyAction (write)
                  realFolder             printerFriendly.jsp (read/write)
                  realMessage            printerFriendly.jsp (read/write)
                  requestStartTime       PrinterFriendlyAction (read/write)
                                         printerFriendly.jsp (read)

On the session scope


                 data item                producer/consumer
                 logging in               PrinterFriendlyAction (read)
                 savedComposeForm         PrinterFriendlyAction (read/write)
                 user                     PrinterFriendlyAction (read/write)
                                          printerFriendly.jsp (read)

On the context scope




                                              140
               data item                             producer/consumer
               Tiles.DEFINITIONS FACTORY             printerFriendly.jsp (read)
               preferencesProvider                   printerFriendly.jsp (read)


F.25.3    External control flow
Forwards leading to this composition


                        /deleteMessage.do          /message.do
                        /nextMessage.do            /prevMessage.do
                        /selectAddresses.do        /saveAddresses.do

Forwards starting from this composition


                             /folder.do     /help.do
                             /CSS.do        /selectAddresses.do


F.25.4    External dataflow

                               ActionForm: messageForm
                               messageNumber uid

F.26     /attachment.do
F.26.1    Internal control flow




F.26.2    Internal dataflow
On the request scope


                   data item              producer/consumer
                   composeForm            AttachmentAction (read)
                   folder                 AttachmentAction (write)
                   part                   AttachmentAction (write)
                   requestStartTime       AttachmentAction (read/write)

On the session scope


                  data item                producer/consumer
                  logging in               AttachmentAction (read)


                                             141
                  savedComposeForm    AttachmentAction (read/write)
                  user                AttachmentAction (read/write)

On the context scope


F.26.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


F.26.4    External dataflow

                           ActionForm: attachmentForm
                           cid part

F.27     /addressbook.do
F.27.1    Internal control flow




F.27.2    Internal dataflow
On the request scope


                   data item          producer/consumer
                   addressBkLimit     AddressBkAction (write)
                                      addressbook.jsp (read)
                   addressBkUsage     AddressBkAction (write)
                                      addressbook.jsp (read)
                   addressList        addressbook.jsp (read)
                   composeForm        AddressBkAction (read)
                   requestStartTime   AddressBkAction (read/write)
                                      addressbook.jsp (read)

On the session scope


                  data item            producer/consumer
                  addressList          AddressBkAction (read/write)
                  logging in           AddressBkAction (read)
                  savedComposeForm     AddressBkAction (read/write)
                  user                 AddressBkAction (read/write)


                                         142
                                     addressbook.jsp (read)

On the context scope


                    data item              producer/consumer
                    preferencesProvider    addressbook.jsp (read)


F.27.3   External control flow
Forwards leading to this composition


                 /login.do                  /folder.do
                 /emptyTrash.do             /modifyFolder.do
                 /folderManage.do           /folderManageModify.do
                 /createFolder.do           /renameFolder.do
                 /changeSubscribed.do       /deleteFolder.do
                 /performDeleteFolder.do    /deleteMessage.do
                 /deleteMessages.do         /modifyMessage.do
                 /moveMessage.do            /copyMessage.do
                 /moveMessages.do           /copyMessages.do
                 /message.do                /rawMessage.do
                 /nextMessage.do            /prevMessage.do
                 /addressbook.do            /addAddress.do
                 /saveAddress.do            /deleteAddress.do
                 /selectAddresses.do        /saveAddresses.do
                 /compose.do                /composeResume.do
                 /forward.do                /reply.do
                 /modifyCompose.do          /send.do
                 /preferences.do            /failMessage.do
                 /failMessageList.do

Forwards starting from this composition


                       /folder.do          /help.do
                       /CSS.do             /addAddress.do
                       /compose.do         /deleteAddress.do
                       /addressbook.do     /folderManage.do
                       /preferences.do     /logout.do
                       /about.do           /feedback.do




                                          143
F.27.4    External dataflow
F.28     /addAddress.do
F.28.1    Internal control flow




F.28.2    Internal dataflow
On the request scope


                  data item           producer/consumer
                  composeForm         CheckSessionAction (read)
                  requestStartTime    CheckSessionAction (read/write)
                                      addAddress.jsp (read)

On the session scope


                 data item             producer/consumer
                 logging in            CheckSessionAction (read)
                 savedComposeForm      CheckSessionAction (read/write)
                 user                  CheckSessionAction (read/write)
                                       addAddress.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    addAddress.jsp (read)


F.28.3    External control flow
Forwards leading to this composition


                          /addressbook.do          /saveAddress.do
                          /deleteAddress.do

Forwards starting from this composition


                          /folder.do               /help.do
                          /CSS.do                  /saveAddress.do
                          /addressbook.do          /compose.do
                          /folderManage.do         /preferences.do


                                             144
                           /logout.do              /about.do
                           /feedback.do


F.28.4    External dataflow
F.29     /saveAddress.do
F.29.1    Internal control flow




F.29.2    Internal dataflow
On the request scope


                  data item           producer/consumer
                  addressBkLimit      AddressBkAction (write)
                                      addressbook.jsp (read)
                  addressBkUsage      AddressBkAction (write)
                                      addressbook.jsp (read)
                  addressList         addressbook.jsp (read)
                  composeForm         SaveAddressAction (read)
                                      AddressBkAction (read)
                                      CheckSessionAction (read)
                  requestStartTime    SaveAddressAction (read/write)
                                      AddressBkAction (read/write)
                                      addressbook.jsp (read)
                                      CheckSessionAction (read/write)
                                      addAddress.jsp (read)
                  result              SaveAddressAction (write)

On the session scope


                 data item                producer/consumer
                 addressList              SaveAddressAction (read/write)
                                          AddressBkAction (read/write)
                 logging in               SaveAddressAction (read)
                                          AddressBkAction (read)
                                          CheckSessionAction (read)
                 savedComposeForm         SaveAddressAction (read/write)
                                          AddressBkAction (read/write)


                                             145
                                        CheckSessionAction (read/write)
                 user                   SaveAddressAction (read/write)
                                        AddressBkAction (read/write)
                                        addressbook.jsp (read)
                                        CheckSessionAction (read/write)
                                        addAddress.jsp (read)

On the context scope


                        data item              producer/consumer
                        preferencesProvider    addressbook.jsp (read)
                                               addAddress.jsp (read)


F.29.3    External control flow
Forwards leading to this composition


                            /addAddress.do      /saveAddress.do

Forwards starting from this composition


                           /folder.do          /help.do
                           /CSS.do             /addAddress.do
                           /compose.do         /deleteAddress.do
                           /addressbook.do     /folderManage.do
                           /preferences.do     /logout.do
                           /about.do           /feedback.do
                           /saveAddress.do


F.29.4    External dataflow

                               ActionForm: addressForm
                               email name

F.30     /deleteAddress.do
F.30.1    Internal control flow




F.30.2    Internal dataflow
On the request scope


                                              146
                data item              producer/consumer
                addressBkLimit         AddressBkAction (write)
                                       addressbook.jsp (read)
                addressBkUsage         AddressBkAction (write)
                                       addressbook.jsp (read)
                addressList            addressbook.jsp (read)
                composeForm            DeleteAddressAction (read)
                                       AddressBkAction (read)
                requestStartTime       DeleteAddressAction (read/write)
                                       AddressBkAction (read/write)
                                       addressbook.jsp (read)
                result                 DeleteAddressAction (write)

On the session scope


               data item                producer/consumer
               addressList              DeleteAddressAction (read/write)
                                        AddressBkAction (read/write)
               logging in               DeleteAddressAction (read)
                                        AddressBkAction (read)
               savedComposeForm         DeleteAddressAction (read/write)
                                        AddressBkAction (read/write)
               user                     DeleteAddressAction (read/write)
                                        AddressBkAction (read/write)
                                        addressbook.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    addressbook.jsp (read)


F.30.3   External control flow
Forwards leading to this composition


                          /addressbook.do          /saveAddress.do
                          /deleteAddress.do

Forwards starting from this composition


                          /folder.do          /help.do
                          /CSS.do             /addAddress.do


                                             147
                          /compose.do        /deleteAddress.do
                          /addressbook.do    /folderManage.do
                          /preferences.do    /logout.do
                          /about.do          /feedback.do


F.30.4    External dataflow

                              ActionForm: addressForm
                              email name

F.31     /selectAddresses.do
F.31.1    Internal control flow




F.31.2    Internal dataflow
On the request scope


                data item            producer/consumer
                addressBkLimit       SelectAddressesAction (read/write)
                                     selectAddresses.jsp (read)
                addressBkUsage       SelectAddressesAction (write)
                                     selectAddresses.jsp (read)
                body                 message.jsp (read/write)
                composeForm          SelectAddressesAction (read)
                                     MessageAction (read)
                                     FolderAction (read)
                currentRootFolder    folder.jsp (read/write)
                folder               MessageAction (write)
                                     FolderAction (write)
                                     folder.jsp (read)
                folderBeanList       MessageAction (write)
                                     FolderAction (write)
                folderFullName       SelectAddressesAction (write)
                                     selectAddresses.jsp (read)



                                            148
              folderListFilter       FolderAction (write)
              folderListFilterType   FolderAction (write)
              message                MessageAction (write)
                                     message.jsp (read/write)
              messageFolder          message.jsp (read/write)
              messageParams          SelectAddressesAction (write)
                                     selectAddresses.jsp (read)
                                     message.jsp (read/write)
              messages               FolderAction (write)
                                     folder.jsp (read)
              part                   message.jsp (read/write)
              printerFriendly        message.jsp (read)
              quotaList              FolderAction (write)
                                     folder.jsp (read)
              realFolder             message.jsp (read/write)
              realMessage            message.jsp (read/write)
              requestStartTime       SelectAddressesAction (read/write)
                                     selectAddresses.jsp (read)
                                     MessageAction (read/write)
                                     message.jsp (read)
                                     FolderAction (read/write)
                                     folder.jsp (read)
              saveAddressList        SelectAddressesAction (write)
                                     selectAddresses.jsp (read)

On the session scope


              data item              producer/consumer
              addressList            SelectAddressesAction (read)
                                     selectAddresses.jsp (read)
                                     FolderAction (read/write)
              logging in             SelectAddressesAction (read)
                                     MessageAction (read)
                                     FolderAction (read)
              savedComposeForm       SelectAddressesAction (read/write)
                                     MessageAction (read/write)
                                     FolderAction (read/write)
              user                   SelectAddressesAction (read/write)
                                     selectAddresses.jsp (read)
                                     MessageAction (read/write)
                                     message.jsp (read)
                                     FolderAction (read/write)
                                     folder.jsp (read)

On the context scope

                                         149
               data item                          producer/consumer
               Tiles.DEFINITIONS FACTORY          message.jsp (read)
               preferencesProvider                selectAddresses.jsp (read)
                                                  message.jsp (read)
                                                  FolderAction (read)
                                                  folder.jsp (read)


F.31.3   External control flow
Forwards leading to this composition


                         /deleteMessage.do     /message.do
                         /nextMessage.do       /prevMessage.do
                         /printerFriendly.do   /selectAddresses.do
                         /saveAddresses.do

Forwards starting from this composition


                         /folder.do            /help.do
                         /CSS.do               /saveAddresses.do
                         /message.do           /compose.do
                         /addressbook.do       /folderManage.do
                         /preferences.do       /logout.do
                         /about.do             /feedback.do
                         /prevMessage.do       /nextMessage.do
                         /printerFriendly.do   /rawMessage.do
                         /selectAddresses.do   /modifyMessage.do
                         /emptyTrash.do        /modifyFolder.do


F.31.4   External dataflow

                               ActionForm: messageForm
                               messageNumber uid

Input parameters: isSelected, folder




                                           150
F.32     /saveAddresses.do
F.32.1    Internal control flow




F.32.2    Internal dataflow
On the request scope


                data item           producer/consumer
                addressBkLimit      SelectAddressesAction (read/write)
                                    selectAddresses.jsp (read)
                addressBkUsage      SelectAddressesAction (write)
                                    selectAddresses.jsp (read)
                body                message.jsp (read/write)
                                    message.jsp (read/write)
                composeForm         SaveAddressesAction (read)
                                    MessageAction (read)
                                    FolderAction (read)
                                    SelectAddressesAction (read)
                                    MessageAction (read)
                                    FolderAction (read)
                currentRootFolder   folder.jsp (read/write)
                                    folder.jsp (read/write)
                folder              MessageAction (write)
                                    FolderAction (write)
                                    folder.jsp (read)
                                    MessageAction (write)
                                    FolderAction (write)
                                    folder.jsp (read)
                folderBeanList      MessageAction (write)
                                    FolderAction (write)


                                        151
                       MessageAction (write)
                       FolderAction (write)
folderFullName         SelectAddressesAction (write)
                       selectAddresses.jsp (read)
folderListFilter       FolderAction (write)
                       FolderAction (write)
folderListFilterType   FolderAction (write)
                       FolderAction (write)
message                MessageAction (write)
                       message.jsp (read/write)
                       MessageAction (write)
                       message.jsp (read/write)
messageFolder          message.jsp (read/write)
                       message.jsp (read/write)
messageParams          message.jsp (read/write)
                       SelectAddressesAction (write)
                       selectAddresses.jsp (read)
                       message.jsp (read/write)
messages               FolderAction (write)
                       folder.jsp (read)
                       FolderAction (write)
                       folder.jsp (read)
part                   message.jsp (read/write)
                       message.jsp (read/write)
printerFriendly        message.jsp (read)
                       message.jsp (read)
quotaList              FolderAction (write)
                       folder.jsp (read)
                       FolderAction (write)
                       folder.jsp (read)
realFolder             message.jsp (read/write)
                       message.jsp (read/write)
realMessage            message.jsp (read/write)
                       message.jsp (read/write)
requestStartTime       SaveAddressesAction (read/write)
                       MessageAction (read/write)
                       message.jsp (read)
                       FolderAction (read/write)
                       folder.jsp (read)
                       SelectAddressesAction (read/write)
                       selectAddresses.jsp (read)
                       MessageAction (read/write)
                       message.jsp (read)
                       FolderAction (read/write)
                       folder.jsp (read)
result                 SaveAddressesAction (write)


                           152
              saveAddressList      SelectAddressesAction (write)
                                   selectAddresses.jsp (read)

On the session scope


              data item            producer/consumer
              addressList          SaveAddressesAction (read/write)
                                   FolderAction (read/write)
                                   SelectAddressesAction (read)
                                   selectAddresses.jsp (read)
                                   FolderAction (read/write)
              logging in           SaveAddressesAction (read)
                                   MessageAction (read)
                                   FolderAction (read)
                                   SelectAddressesAction (read)
                                   MessageAction (read)
                                   FolderAction (read)
              savedComposeForm     SaveAddressesAction (read/write)
                                   MessageAction (read/write)
                                   FolderAction (read/write)
                                   SelectAddressesAction (read/write)
                                   MessageAction (read/write)
                                   FolderAction (read/write)
              user                 SaveAddressesAction (read/write)
                                   MessageAction (read/write)
                                   message.jsp (read)
                                   FolderAction (read/write)
                                   folder.jsp (read)
                                   SelectAddressesAction (read/write)
                                   selectAddresses.jsp (read)
                                   MessageAction (read/write)
                                   message.jsp (read)
                                   FolderAction (read/write)
                                   folder.jsp (read)

On the context scope


             data item                       producer/consumer
             Tiles.DEFINITIONS FACTORY       message.jsp (read)
                                             message.jsp (read)
             preferencesProvider             message.jsp (read)
                                             FolderAction (read)
                                             folder.jsp (read)
                                             selectAddresses.jsp (read)


                                       153
                                                   message.jsp (read)
                                                   FolderAction (read)
                                                   folder.jsp (read)


F.32.3    External control flow
Forwards leading to this composition


                          /selectAddresses.do    /saveAddresses.do

Forwards starting from this composition


                         /folder.do             /prevMessage.do
                         /nextMessage.do        /help.do
                         /printerFriendly.do    /rawMessage.do
                         /CSS.do                /selectAddresses.do
                         /compose.do            /addressbook.do
                         /folderManage.do       /preferences.do
                         /logout.do             /about.do
                         /feedback.do           /modifyMessage.do
                         /emptyTrash.do         /modifyFolder.do
                         /message.do            /saveAddresses.do


F.32.4    External dataflow

                              ActionForm: addressesForm
                              email      name
                              isSelected

Input parameters: isSelected, folder

F.33     /errorCopy.do
F.33.1    Internal control flow




F.33.2    Internal dataflow
On the request scope


                   data item           producer/consumer
                   composeForm         CheckSessionAction (read)


                                           154
                  folderName          errorCopy.jsp (read)
                  messageList         errorCopy.jsp (read)
                  requestStartTime    CheckSessionAction (read/write)
                                      errorCopy.jsp (read)

On the session scope


                 data item             producer/consumer
                 logging in            CheckSessionAction (read)
                 savedComposeForm      CheckSessionAction (read/write)
                 user                  CheckSessionAction (read/write)
                                       errorCopy.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    errorCopy.jsp (read)


F.33.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                  /CSS.do     /folder.do


F.33.4    External dataflow
F.34     /errorCopyToSent.do
F.34.1    Internal control flow




F.34.2    Internal dataflow
On the request scope


                  data item           producer/consumer
                  composeForm         CheckSessionAction (read)
                  requestStartTime    CheckSessionAction (read/write)
                                      errorCopyToSent.jsp (read)

On the session scope

                                             155
                 data item            producer/consumer
                 logging in           CheckSessionAction (read)
                 savedComposeForm     CheckSessionAction (read/write)
                 user                 CheckSessionAction (read/write)
                                      errorCopyToSent.jsp (read)

On the context scope


                    data item             producer/consumer
                    preferencesProvider   errorCopyToSent.jsp (read)


F.34.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                 /CSS.do     /folder.do


F.34.4    External dataflow
F.35     /errorCopyToTrash.do
F.35.1    Internal control flow




F.35.2    Internal dataflow
On the request scope


                  data item          producer/consumer
                  composeForm        CheckSessionAction (read)
                  deleteAction       errorCopyToTrash.jsp (read)
                  messageList        errorCopyToTrash.jsp (read)
                  requestStartTime   CheckSessionAction (read/write)
                                     errorCopyToTrash.jsp (read)

On the session scope


                 data item            producer/consumer
                 logging in           CheckSessionAction (read)
                 savedComposeForm     CheckSessionAction (read/write)


                                           156
                 user                    CheckSessionAction (read/write)
                                         errorCopyToTrash.jsp (read)

On the context scope


                   data item              producer/consumer
                   preferencesProvider    errorCopyToTrash.jsp (read)


F.35.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                  /CSS.do     /folder.do


F.35.4    External dataflow
F.36     /compose.do
F.36.1    Internal control flow




F.36.2    Internal dataflow
On the request scope


                    data item            producer/consumer
                    addressList          compose.jsp (read)
                    composeForm          ComposeAction (read)
                                         compose.jsp (read)
                    requestStartTime     ComposeAction (read/write)
                                         compose.jsp (read)

On the session scope


                   data item              producer/consumer
                   attachMap              ComposeAction (read/write)
                                          compose.jsp (read/write)
                   logging in             ComposeAction (read)
                   savedComposeForm       ComposeAction (read/write)
                   user                   ComposeAction (read/write)
                                          compose.jsp (read)


                                            157
On the context scope


                    data item              producer/consumer
                    preferencesProvider    ComposeAction (read)
                                           compose.jsp (read)


F.36.3   External control flow
Forwards leading to this composition


                 /login.do                  /folder.do
                 /emptyTrash.do             /modifyFolder.do
                 /folderManage.do           /folderManageModify.do
                 /createFolder.do           /renameFolder.do
                 /changeSubscribed.do       /deleteFolder.do
                 /performDeleteFolder.do    /deleteMessage.do
                 /deleteMessages.do         /modifyMessage.do
                 /moveMessage.do            /copyMessage.do
                 /moveMessages.do           /copyMessages.do
                 /message.do                /rawMessage.do
                 /nextMessage.do            /prevMessage.do
                 /addressbook.do            /addAddress.do
                 /saveAddress.do            /deleteAddress.do
                 /selectAddresses.do        /saveAddresses.do
                 /compose.do                /composeResume.do
                 /forward.do                /reply.do
                 /modifyCompose.do          /send.do
                 /feedback.do               /preferences.do
                 /failMessage.do            /failMessageList.do

Forwards starting from this composition


                       /folder.do          /help.do
                       /CSS.do             /modifyCompose.do
                       /compose.do         /addressbook.do
                       /folderManage.do    /preferences.do
                       /logout.do          /about.do
                       /feedback.do


F.36.4   External dataflow

                            ActionForm: composeForm
                            subject to


                                          158
                             body       cc
                             bcc        attachment
                             action     composeKey

F.37     /composeResume.do
F.37.1    Internal control flow




F.37.2    Internal dataflow
On the request scope


                data item             producer/consumer
                addressList           compose.jsp (read)
                composeForm           ComposeResumeAction (read)
                                      compose.jsp (read)
                requestStartTime      ComposeResumeAction (read/write)
                                      compose.jsp (read)

On the session scope


                data item             producer/consumer
                attachMap             compose.jsp (read/write)
                logging in            ComposeResumeAction (read)
                savedComposeForm      ComposeResumeAction (read/write)
                user                  ComposeResumeAction (read/write)
                                      compose.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    compose.jsp (read)


F.37.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                         /folder.do           /help.do
                         /CSS.do              /modifyCompose.do



                                             159
                        /compose.do         /addressbook.do
                        /folderManage.do    /preferences.do
                        /logout.do          /about.do
                        /feedback.do


F.37.4    External dataflow

                               ActionForm: composeForm
                               subject to
                               body    cc
                               bcc     attachment
                               action  composeKey

F.38     /forward.do
F.38.1    Internal control flow




F.38.2    Internal dataflow
On the request scope


                   data item              producer/consumer
                   addressList            compose.jsp (read)
                   composeForm            ForwardAction (read)
                                          compose.jsp (read)
                                          FolderAction (read)
                   currentRootFolder      folder.jsp (read/write)
                   folder                 ForwardAction (write)
                                          FolderAction (write)
                                          folder.jsp (read)
                   folderBeanList         FolderAction (write)
                   folderListFilter       FolderAction (write)
                   folderListFilterType   FolderAction (write)
                   message                ForwardAction (write)
                   messages               FolderAction (write)
                                          folder.jsp (read)
                   quotaList              FolderAction (write)
                                          folder.jsp (read)


                                           160
                  requestStartTime           ForwardAction (read/write)
                                             compose.jsp (read)
                                             FolderAction (read/write)
                                             folder.jsp (read)

On the session scope


                  data item              producer/consumer
                  addressList            FolderAction (read/write)
                  attachMap              ForwardAction (read/write)
                                         compose.jsp (read/write)
                  logging in             ForwardAction (read)
                                         FolderAction (read)
                  savedComposeForm       ForwardAction (read/write)
                                         FolderAction (read/write)
                  user                   ForwardAction (read/write)
                                         compose.jsp (read)
                                         FolderAction (read/write)
                                         folder.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     ForwardAction (read)
                                               compose.jsp (read)
                                               FolderAction (read)
                                               folder.jsp (read)


F.38.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                         /folder.do            /help.do
                         /CSS.do               /modifyCompose.do
                         /compose.do           /addressbook.do
                         /folderManage.do      /preferences.do
                         /logout.do            /about.do
                         /feedback.do          /emptyTrash.do
                         /modifyFolder.do      /message.do


F.38.4   External dataflow



                                             161
                             ActionForm: composeForm
                             subject to
                             body    cc
                             bcc     attachment
                             action  composeKey

Input parameters: folder

F.39     /reply.do
F.39.1    Internal control flow




F.39.2    Internal dataflow
On the request scope


                     data item              producer/consumer
                     addressList            compose.jsp (read)
                     composeForm            ReplyAction (read)
                                            compose.jsp (read)
                                            FolderAction (read)
                     currentRootFolder      folder.jsp (read/write)
                     folder                 ReplyAction (write)
                                            FolderAction (write)
                                            folder.jsp (read)
                     folderBeanList         FolderAction (write)
                     folderListFilter       FolderAction (write)
                     folderListFilterType   FolderAction (write)
                     message                ReplyAction (write)
                     messages               FolderAction (write)
                                            folder.jsp (read)
                     quotaList              FolderAction (write)
                                            folder.jsp (read)
                     requestStartTime       ReplyAction (read/write)
                                            compose.jsp (read)
                                            FolderAction (read/write)
                                            folder.jsp (read)

On the session scope


                                            162
                     data item                producer/consumer
                     addressList              FolderAction (read/write)
                     attachMap                ReplyAction (read/write)
                                              compose.jsp (read/write)
                     logging in               ReplyAction (read)
                                              FolderAction (read)
                     savedComposeForm         ReplyAction (read/write)
                                              FolderAction (read/write)
                     user                     ReplyAction (read/write)
                                              compose.jsp (read)
                                              FolderAction (read/write)
                                              folder.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     ReplyAction (read)
                                               compose.jsp (read)
                                               FolderAction (read)
                                               folder.jsp (read)


F.39.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do          /help.do
                           /CSS.do             /modifyCompose.do
                           /compose.do         /addressbook.do
                           /folderManage.do    /preferences.do
                           /logout.do          /about.do
                           /feedback.do        /emptyTrash.do
                           /modifyFolder.do    /message.do


F.39.4   External dataflow

                               ActionForm: composeForm
                               subject to
                               body    cc
                               bcc     attachment
                               action  composeKey

Input parameters: folder

                                              163
F.40     /modifyCompose.do
F.40.1    Internal control flow




F.40.2    Internal dataflow
On the request scope


                data item              producer/consumer
                addressList            compose.jsp (read)
                                       compose.jsp (read)
                composeForm            ModifyComposeAction (read)
                                       compose.jsp (read)
                                       SendAction (read)
                                       FolderAction (read)
                                       compose.jsp (read)
                                       CheckSessionAction (read)
                currentRootFolder      folder.jsp (read/write)
                folder                 FolderAction (write)
                                       folder.jsp (read)
                folderBeanList         FolderAction (write)
                folderListFilter       FolderAction (write)
                folderListFilterType   FolderAction (write)
                messages               FolderAction (write)
                                       folder.jsp (read)
                quotaList              FolderAction (write)
                                       folder.jsp (read)
                requestStartTime       ModifyComposeAction (read/write)
                                       compose.jsp (read)
                                       SendAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       compose.jsp (read)
                                       CheckSessionAction (read/write)

                                           164
                                       errorCopyToSent.jsp (read)
              result                   SendAction (write)

On the session scope


               data item               producer/consumer
               addressList             ModifyComposeAction (read/write)
                                       FolderAction (read/write)
               attachMap               compose.jsp (read/write)
                                       SendAction (write)
                                       compose.jsp (read/write)
               logging in              ModifyComposeAction (read)
                                       SendAction (read)
                                       FolderAction (read)
                                       CheckSessionAction (read)
               savedComposeForm        ModifyComposeAction (read/write)
                                       SendAction (read/write)
                                       FolderAction (read/write)
                                       CheckSessionAction (read/write)
               user                    ModifyComposeAction (read/write)
                                       compose.jsp (read)
                                       SendAction (read/write)
                                       FolderAction (read/write)
                                       folder.jsp (read)
                                       compose.jsp (read)
                                       CheckSessionAction (read/write)
                                       errorCopyToSent.jsp (read)

On the context scope


                      data item             producer/consumer
                      preferencesProvider   compose.jsp (read)
                                            SendAction (read)
                                            FolderAction (read)
                                            folder.jsp (read)
                                            compose.jsp (read)
                                            errorCopyToSent.jsp (read)


F.40.3   External control flow
Forwards leading to this composition


                         /login.do             /compose.do
                         /composeResume.do     /forward.do


                                            165
                       /reply.do               /modifyCompose.do
                       /send.do

Forwards starting from this composition


                         /folder.do           /help.do
                         /CSS.do              /modifyCompose.do
                         /compose.do          /addressbook.do
                         /folderManage.do     /preferences.do
                         /logout.do           /about.do
                         /feedback.do         /emptyTrash.do
                         /modifyFolder.do     /message.do


F.40.4    External dataflow

                             ActionForm: composeForm
                             subject to
                             body    cc
                             bcc     attachment
                             action  composeKey

Input parameters: deleteAttachment, folder

F.41     /send.do
F.41.1    Internal control flow




F.41.2    Internal dataflow
On the request scope


                 data item             producer/consumer
                 addressList           compose.jsp (read)
                 composeForm           SendAction (read)
                                       FolderAction (read)


                                             166
                                        compose.jsp (read)
                                        CheckSessionAction (read)
               currentRootFolder        folder.jsp (read/write)
               folder                   FolderAction (write)
                                        folder.jsp (read)
               folderBeanList           FolderAction (write)
               folderListFilter         FolderAction (write)
               folderListFilterType     FolderAction (write)
               messages                 FolderAction (write)
                                        folder.jsp (read)
               quotaList                FolderAction (write)
                                        folder.jsp (read)
               requestStartTime         SendAction (read/write)
                                        FolderAction (read/write)
                                        folder.jsp (read)
                                        compose.jsp (read)
                                        CheckSessionAction (read/write)
                                        errorCopyToSent.jsp (read)
               result                   SendAction (write)

On the session scope


               data item              producer/consumer
               addressList            FolderAction (read/write)
               attachMap              SendAction (write)
                                      compose.jsp (read/write)
               logging in             SendAction (read)
                                      FolderAction (read)
                                      CheckSessionAction (read)
               savedComposeForm       SendAction (read/write)
                                      FolderAction (read/write)
                                      CheckSessionAction (read/write)
               user                   SendAction (read/write)
                                      FolderAction (read/write)
                                      folder.jsp (read)
                                      compose.jsp (read)
                                      CheckSessionAction (read/write)
                                      errorCopyToSent.jsp (read)

On the context scope


                  data item               producer/consumer
                  preferencesProvider     SendAction (read)
                                          FolderAction (read)
                                          folder.jsp (read)

                                           167
                                              compose.jsp (read)
                                              errorCopyToSent.jsp (read)


F.41.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do           /help.do
                           /CSS.do              /emptyTrash.do
                           /compose.do          /addressbook.do
                           /folderManage.do     /preferences.do
                           /logout.do           /about.do
                           /feedback.do         /modifyFolder.do
                           /message.do          /modifyCompose.do


F.41.4    External dataflow

                                ActionForm: composeForm
                                subject to
                                body    cc
                                bcc     attachment
                                action  composeKey

Input parameters: folder

F.42     /errorBasic.do
F.42.1    Internal control flow




F.42.2    Internal dataflow
On the request scope


                           data item           producer/consumer
                           requestStartTime    errorBasic.jsp (read)

On the session scope


                             data item    producer/consumer
                             user         errorBasic.jsp (read)


                                              168
On the context scope


                       data item               producer/consumer
                       preferencesProvider     errorBasic.jsp (read)


F.42.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                 /CSS.do        /folder.do
                                 /logout.do


F.42.4    External dataflow
F.43     /errorUncaught.do
F.43.1    Internal control flow




F.43.2    Internal dataflow
On the request scope


                      data item              producer/consumer
                      exceptionKey           errorUncaught.jsp (read)
                      requestStartTime       errorUncaught.jsp (read)

On the session scope


                          data item    producer/consumer
                          user         errorUncaught.jsp (read)

On the context scope


                     data item               producer/consumer
                     preferencesProvider     errorUncaught.jsp (read)


F.43.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                             169
                                 /CSS.do        /folder.do
                                 /logout.do


F.43.4    External dataflow
F.44     /errorLogout.do
F.44.1    Internal control flow




F.44.2    Internal dataflow
On the request scope


                        data item            producer/consumer
                        requestStartTime     errorLogout.jsp (read)

On the session scope


                           data item    producer/consumer
                           *            LogoutAction (read)
                           attachList   LogoutAction (read)
                           user         LogoutAction (read)
                                        errorLogout.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     errorLogout.jsp (read)


F.44.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                  /CSS.do       /login.do
                                  /folder.do




                                             170
F.44.4    External dataflow
F.45     /noInbox.do
F.45.1    Internal control flow




F.45.2    Internal dataflow
On the request scope


                        data item            producer/consumer
                        requestStartTime     noInbox.jsp (read)

On the session scope


                           data item    producer/consumer
                           user         noInbox.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     noInbox.jsp (read)


F.45.3    External control flow
Forwards leading to this composition
Forwards starting from this composition


                                  /folder.do    /help.do
                                  /CSS.do       /login.do


F.45.4    External dataflow
F.46     /about.do
F.46.1    Internal control flow




                                             171
F.46.2   Internal dataflow
On the request scope


                        data item            producer/consumer
                        requestStartTime     about.jsp (read)

On the session scope


                           data item    producer/consumer
                           user         about.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    about.jsp (read)


F.46.3   External control flow
Forwards leading to this composition


                 /login.do                     /folder.do
                 /emptyTrash.do                /modifyFolder.do
                 /folderManage.do              /folderManageModify.do
                 /createFolder.do              /renameFolder.do
                 /changeSubscribed.do          /deleteFolder.do
                 /performDeleteFolder.do       /deleteMessage.do
                 /deleteMessages.do            /modifyMessage.do
                 /moveMessage.do               /copyMessage.do
                 /moveMessages.do              /copyMessages.do
                 /message.do                   /rawMessage.do
                 /nextMessage.do               /prevMessage.do
                 /addressbook.do               /addAddress.do
                 /saveAddress.do               /deleteAddress.do
                 /selectAddresses.do           /saveAddresses.do
                 /compose.do                   /composeResume.do
                 /forward.do                   /reply.do
                 /modifyCompose.do             /send.do
                 /preferences.do               /failMessage.do
                 /failMessageList.do

Forwards starting from this composition




                                             172
                                  /folder.do       /help.do
                                  /CSS.do


F.46.4    External dataflow
F.47     /help.do
F.47.1    Internal control flow




F.47.2    Internal dataflow
On the request scope


                        data item            producer/consumer
                        requestStartTime     help.jsp (read)

On the session scope


                           data item    producer/consumer
                           user         help.jsp (read)

On the context scope


                       data item               producer/consumer
                       preferencesProvider     help.jsp (read)


F.47.3    External control flow
Forwards leading to this composition


                    /login.do                   /folder.do
                    /emptyTrash.do              /modifyFolder.do
                    /folderManage.do            /folderManageModify.do
                    /createFolder.do            /renameFolder.do
                    /changeSubscribed.do        /deleteFolder.do
                    /performDeleteFolder.do     /deleteMessage.do
                    /deleteMessages.do          /modifyMessage.do
                    /moveMessage.do             /copyMessage.do
                    /moveMessages.do            /copyMessages.do
                    /message.do                 /rawMessage.do
                    /nextMessage.do             /prevMessage.do

                                             173
                   /printerFriendly.do         /addressbook.do
                   /addAddress.do              /saveAddress.do
                   /deleteAddress.do           /selectAddresses.do
                   /saveAddresses.do           /compose.do
                   /composeResume.do           /forward.do
                   /reply.do                   /modifyCompose.do
                   /send.do                    /noInbox.do
                   /about.do                   /help.do
                   /feedback.do                /preferences.do
                   /failMessage.do             /failMessageList.do

Forwards starting from this composition


                             /folder.do     /help.do
                             /CSS.do        /folderManage.do
                             /feedback.do


F.47.4    External dataflow
F.48     /feedback.do
F.48.1    Internal control flow




F.48.2    Internal dataflow
On the request scope


                  data item           producer/consumer
                  composeForm         CheckSessionAction (read)
                  requestStartTime    CheckSessionAction (read/write)
                                      feedback.jsp (read)

On the session scope


                 data item               producer/consumer
                 logging in              CheckSessionAction (read)
                 savedComposeForm        CheckSessionAction (read/write)
                 user                    CheckSessionAction (read/write)
                                         feedback.jsp (read)

On the context scope


                                            174
                      data item                producer/consumer
                      preferencesProvider      feedback.jsp (read)


F.48.3    External control flow
Forwards leading to this composition


                   /login.do                    /folder.do
                   /emptyTrash.do               /modifyFolder.do
                   /folderManage.do             /folderManageModify.do
                   /createFolder.do             /renameFolder.do
                   /changeSubscribed.do         /deleteFolder.do
                   /performDeleteFolder.do      /deleteMessage.do
                   /deleteMessages.do           /modifyMessage.do
                   /moveMessage.do              /copyMessage.do
                   /moveMessages.do             /copyMessages.do
                   /message.do                  /rawMessage.do
                   /nextMessage.do              /prevMessage.do
                   /addressbook.do              /addAddress.do
                   /saveAddress.do              /deleteAddress.do
                   /selectAddresses.do          /saveAddresses.do
                   /compose.do                  /composeResume.do
                   /forward.do                  /reply.do
                   /modifyCompose.do            /send.do
                   /help.do                     /preferences.do
                   /failMessage.do              /failMessageList.do

Forwards starting from this composition


                                 /folder.do    /help.do
                                 /CSS.do       /compose.do


F.48.4    External dataflow
F.49     /preferences.do
F.49.1    Internal control flow




                                              175
F.49.2   Internal dataflow
On the request scope


                  data item          producer/consumer
                  X-Image-Url        PreferencesAction (write)
                                     preferences.jsp (read)
                  composeForm        PreferencesAction (read)
                  requestStartTime   PreferencesAction (read/write)
                                     preferences.jsp (read)

On the session scope


                 data item            producer/consumer
                 logging in           PreferencesAction (read)
                 savedComposeForm     PreferencesAction (read/write)
                 user                 PreferencesAction (read/write)
                                      preferences.jsp (read)

On the context scope


                   data item             producer/consumer
                   preferencesProvider   PreferencesAction (read)
                                         preferences.jsp (read)


F.49.3   External control flow
Forwards leading to this composition


                 /login.do                 /folder.do
                 /emptyTrash.do            /modifyFolder.do
                 /folderManage.do          /folderManageModify.do
                 /createFolder.do          /renameFolder.do
                 /changeSubscribed.do      /deleteFolder.do
                 /performDeleteFolder.do   /deleteMessage.do
                 /deleteMessages.do        /modifyMessage.do
                 /moveMessage.do           /copyMessage.do
                 /moveMessages.do          /copyMessages.do
                 /message.do               /rawMessage.do
                 /nextMessage.do           /prevMessage.do
                 /addressbook.do           /addAddress.do
                 /saveAddress.do           /deleteAddress.do
                 /selectAddresses.do       /saveAddresses.do



                                         176
                   /compose.do               /composeResume.do
                   /forward.do               /reply.do
                   /modifyCompose.do         /send.do
                   /preferences.do           /failMessage.do
                   /failMessageList.do

Forwards starting from this composition


                          /folder.do           /help.do
                          /CSS.do              /preferences.do
                          /compose.do          /addressbook.do
                          /folderManage.do     /logout.do
                          /about.do            /feedback.do


F.49.4    External dataflow

                           ActionForm:   preferencesForm
                        action           username
                        replyTo          signature
                        imageUrl         maxInactiveMultiplier
                        threading        hideHeader
                        junkThreashold

F.50     /CSS.do
F.50.1    Internal control flow




F.50.2    Internal dataflow
On the request scope
On the session scope
On the context scope


F.50.3    External control flow
Forwards leading to this composition


                   /login.do                 /folder.do
                   /emptyTrash.do            /modifyFolder.do
                   /folderManage.do          /folderManageModify.do



                                         177
                   /createFolder.do          /renameFolder.do
                   /changeSubscribed.do      /deleteFolder.do
                   /performDeleteFolder.do   /deleteMessage.do
                   /deleteMessages.do        /modifyMessage.do
                   /moveMessage.do           /copyMessage.do
                   /moveMessages.do          /copyMessages.do
                   /message.do               /rawMessage.do
                   /nextMessage.do           /prevMessage.do
                   /printerFriendly.do       /addressbook.do
                   /addAddress.do            /saveAddress.do
                   /deleteAddress.do         /selectAddresses.do
                   /saveAddresses.do         /errorCopy.do
                   /errorCopyToSent.do       /errorCopyToTrash.do
                   /compose.do               /composeResume.do
                   /forward.do               /reply.do
                   /modifyCompose.do         /send.do
                   /errorBasic.do            /errorUncaught.do
                   /errorLogout.do           /noInbox.do
                   /about.do                 /help.do
                   /feedback.do              /preferences.do
                   /failMessage.do           /failMessageList.do

Forwards starting from this composition


F.50.4    External dataflow
F.51     /failMessage.do
F.51.1    Internal control flow




F.51.2    Internal dataflow
On the request scope


                    data item            producer/consumer
                    composeForm          FolderAction (read)
                    currentRootFolder    folder.jsp (read/write)
                    folder               FolderAction (write)
                                         folder.jsp (read)
                    folderBeanList       FolderAction (write)


                                         178
                     folderListFilter        FolderAction (write)
                     folderListFilterType    FolderAction (write)
                     messages                FolderAction (write)
                                             folder.jsp (read)
                     quotaList               FolderAction (write)
                                             folder.jsp (read)
                     requestStartTime        FolderAction (read/write)
                                             folder.jsp (read)

On the session scope


                     data item               producer/consumer
                     addressList             FolderAction (read/write)
                     logging in              FolderAction (read)
                     savedComposeForm        FolderAction (read/write)
                     user                    FolderAction (read/write)
                                             folder.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)


F.51.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do           /help.do
                           /CSS.do              /emptyTrash.do
                           /compose.do          /addressbook.do
                           /folderManage.do     /preferences.do
                           /logout.do           /about.do
                           /feedback.do         /modifyFolder.do
                           /message.do


F.51.4   External dataflow
Input parameters: folder




                                             179
F.52     /failMessageList.do
F.52.1    Internal control flow




F.52.2    Internal dataflow
On the request scope


                    data item                producer/consumer
                    composeForm              FolderAction (read)
                    currentRootFolder        folder.jsp (read/write)
                    folder                   FolderAction (write)
                                             folder.jsp (read)
                    folderBeanList           FolderAction (write)
                    folderListFilter         FolderAction (write)
                    folderListFilterType     FolderAction (write)
                    messages                 FolderAction (write)
                                             folder.jsp (read)
                    quotaList                FolderAction (write)
                                             folder.jsp (read)
                    requestStartTime         FolderAction (read/write)
                                             folder.jsp (read)

On the session scope


                    data item                producer/consumer
                    addressList              FolderAction (read/write)
                    logging in               FolderAction (read)
                    savedComposeForm         FolderAction (read/write)
                    user                     FolderAction (read/write)
                                             folder.jsp (read)

On the context scope


                       data item              producer/consumer
                       preferencesProvider    FolderAction (read)
                                              folder.jsp (read)




                                             180
F.52.3   External control flow
Forwards leading to this composition
Forwards starting from this composition


                           /folder.do         /help.do
                           /CSS.do            /emptyTrash.do
                           /compose.do        /addressbook.do
                           /folderManage.do   /preferences.do
                           /logout.do         /about.do
                           /feedback.do       /modifyFolder.do
                           /message.do


F.52.4   External dataflow
Input parameters: folder




                                          181

								
To top