Changeset 1562


Ignore:
Timestamp:
03/13/2012 10:39:14 AM (8 years ago)
Author:
myl
Message:

Interface interaction changed, now we don't collect user data anymore

Location:
scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface/InterfaceCompetency.java

    r1203 r1562  
    11package teambuddyInterface; 
     2 
     3import ion.Meta.EventHandler; 
     4import ion.Meta.IEvent; 
    25 
    36import java.util.HashMap; 
     
    710import cmion.architecture.IArchitecture; 
    811import cmion.level2.CompetencyCancelledException; 
     12import cmion.storage.EventPropertyChanged; 
    913 
    1014public class InterfaceCompetency extends cmion.level2.Competency { 
    1115 
     16        private InterfaceHandler handler; 
     17         
    1218        public InterfaceCompetency(IArchitecture architecture) { 
    1319                super(architecture); 
     20                handler = new InterfaceHandler(this); 
    1421                this.competencyName = "InterfaceCompetency"; 
    1522                this.competencyType = "InterfaceCompetency";             
     
    2330         
    2431        @Override 
     32        public void registerHandlers() 
     33        { 
     34                super.registerHandlers(); 
     35                HandleBlackBoardPropChange handler = new HandleBlackBoardPropChange(); 
     36                architecture.getBlackBoard().getEventHandlers().add(handler); 
     37        } 
     38         
     39        @Override 
    2540        public boolean runsInBackground() { 
    2641                return true; 
     
    3247                try { 
    3348                        Server server = new Server(8080); 
    34                         server.setHandler(new InterfaceHandler(this)); 
     49                        server.setHandler(handler); 
    3550                        server.start(); 
    3651                        server.join(); 
     
    4156        } 
    4257 
     58        public void resetAll(){ 
     59                handler.resetAll(); 
     60        } 
     61         
     62        /** internal event handler class for listening to blackboard property changes */ 
     63         private class HandleBlackBoardPropChange extends EventHandler  
     64         { 
    4365 
     66             public HandleBlackBoardPropChange() { 
     67                 super(EventPropertyChanged.class); 
     68             } 
    4469 
     70             @Override 
     71             public void invoke(IEvent evt)  
     72             { 
     73              if (evt instanceof EventPropertyChanged) 
     74              { 
     75                  EventPropertyChanged evt1 = (EventPropertyChanged) evt; 
     76                  if (evt1.getPropertyName().equals(DisplayRemark.PROPERTY_NAME)) 
     77                  { 
     78                          HashMap<String,String> parameters = (HashMap<String, String>) evt1.getPropertyValue();  
     79                          String target = parameters.get(DisplayRemark.PARAMETER_TARGET); 
     80                          String remark = parameters.get(DisplayRemark.PARAMETER_REMARK);        
     81                          String remarkText = parameters.get(DisplayRemark.PARAMETER_REMARKTEXT); 
     82                          handler.setRemark(target,remark,remarkText); 
     83                  } 
     84              } 
     85            }    
     86         } 
    4587} 
  • scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface/InterfaceHandler.java

    r1490 r1562  
    2424 
    2525public class InterfaceHandler extends AbstractHandler { 
    26  
     26         
    2727        private InterfaceCompetency interfaceCompetency; 
    2828 
     
    5959        private UserData userData; 
    6060 
    61         private User loginUser; 
     61        //private User loginUser; 
     62        private String loginUser; 
    6263 
    6364        private static final String WM_USERDATA = "UserData"; 
     
    7172        private Timer timer; 
    7273 
    73         private static final long INTERACTION_TIMEOUT = 60000; 
     74        private static final long INTERACTION_TIMEOUT = 20000; 
     75        private static final long NON_INTERACTION_TIMEOUT = 15000; 
    7476 
    7577        private static final String WM_INTERFACE_INTERACTION = "interfaceInteraction"; 
     78        private static int nextID = 0; 
    7679 
    7780        private Random random; 
    78  
     81         
     82        private WorldModel wm; 
     83         
     84        private String remarkUser; 
     85        private String remark; 
     86        private String remarkText; 
     87        private long remarkTimeStamp; 
     88        private ArrayList<Interaction> interactions; 
     89 
     90        //private String interactionFile = "fatima-bin/data/characters/minds/Interactions.xml"; 
     91         
    7992        public InterfaceHandler(InterfaceCompetency interfaceCompetency) { 
    8093                this.interfaceCompetency = interfaceCompetency; 
     
    8295                setWMObjectProperty(WM_CURRENT_PLATFORM, WM_INTERFACE_INTERACTION, "False"); 
    8396                timer = new Timer(); 
    84  
     97                wm = interfaceCompetency.getArchitecture().getWorldModel(); 
    8598                xmlAccess = new XMLAccess(); 
    86                 userData = xmlAccess.loadXML(XML_FILENAME); 
    87  
     99                interactions = new ArrayList<Interaction>(); 
     100                interactions = xmlAccess.loadInteractionsXML(); 
     101                nextID = xmlAccess.getMaxID() + 1; 
     102                userData = new UserData(wm);     
     103                 
     104                remarkUser = ""; 
     105                remark = ""; 
     106                remarkText = ""; 
     107                remarkTimeStamp = 0; 
     108                loginUser = ""; 
    88109                // write to WorldModel 
    89                 for (User user : userData.getUsers()) { 
     110                /*for (User user : userData.getUsers()) { 
    90111                        for (InformationItem informationItem : user.getInformationItems()) { 
    91                                 setWMObjectProperty(WM_USERDATA, user.getUsername() + "," + informationItem.getTypename() + "," + informationItem.getId(), informationItem.getContent().replace(" ", "_")); 
    92                         } 
    93                 } 
     112                                //setWMObjectProperty(WM_USERDATA, user.getUsername() + "," + informationItem.getTypename() + "," + informationItem.getId(), informationItem.getContent().replace(" ", "_")); 
     113                                setWMObjectProperty(user.getUsername(), informationItem.getTypename(), informationItem.getContent().replace(" ", "_")); 
     114                        } 
     115                }*/ 
    94116                // Make sure the container for the UserData exists in the WorldModel, 
    95117                // otherwise some items will not go to the WorldModel when loading sequentially. 
     
    101123        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
    102124 
     125                System.out.println("Interaction timer set "); 
    103126                // schedule timeout task 
    104127                timer.cancel(); 
     
    110133                // process action 
    111134                String action = request.getParameter("action"); 
    112  
    113                 if (action == null) { 
    114                         // do nothing 
    115  
    116                 } else if (action.equals("login")) { 
    117                         // login 
    118  
    119                         String loginUsername = request.getParameter("loginUsername"); 
    120                         String loginPassword = request.getParameter("loginPassword"); 
    121                         if (userData.getGuestUser().getUsername().equals(loginUsername)) { 
    122  
    123                                 // guest login 
    124                                 if (userData.getGuestUser().getPassword().equals(loginPassword)) { 
    125                                         loginUser = userData.getGuestUser(); 
    126                                 } 
    127  
    128                         } else { 
    129  
    130                                 // user login 
    131                                 for (User user : userData.getUsers()) { 
    132                                         if (user.getUsername().equals(loginUsername)) { 
    133                                                 if (user.getPassword().equals(loginPassword)) { 
    134                                                         loginUser = user; 
     135                // page 
     136                String page = request.getParameter("page"); 
     137 
     138                if (!loginUser.equals("")){ 
     139                        if (action == null) { 
     140                                // do nothing 
     141         
     142                        } else if (action.equals("logout")) { 
     143                                // logout 
     144         
     145                                // raise remote action 
     146                                ArrayList<String> parameters = new ArrayList<String>(); 
     147                                parameters.add("SELF"); 
     148                                raiseMindAction(loginUser, "logout", parameters); 
     149                                loginUser = "";                                                  
     150                        } else if (action.equals("sendHome")) { 
     151                                // send Teambuddy back to home position 
     152         
     153                                // raise remote action 
     154                                ArrayList<String> parameters = new ArrayList<String>(); 
     155                                parameters.add("SELF"); 
     156                                raiseMindAction(loginUser, "sendHome", parameters); 
     157         
     158                        } else if (action.equals("leaveMessage")) { 
     159                                // leave a message 
     160                                String messageFromRealname = request.getParameter("messageFromRealname"); 
     161                                String messageFromUsername = request.getParameter("messageFromUsername"); 
     162                                String messageToUsername = request.getParameter("messageToUsername"); 
     163                                String messageText = request.getParameter("messageText"); 
     164                                if (messageText == null || messageText.trim().equals("")) { 
     165                                        ArrayList<String> parameters = new ArrayList<String>(); 
     166                                        parameters.add("SELF"); 
     167                                        raiseMindAction(messageFromUsername, "leaveEmptyMessage", parameters); 
     168                                } else { 
     169                                        if (messageFromUsername.equals(userData.getGuestUser())) { 
     170                                                // problem with FAtiMA event when name contains spaces 
     171                                                //msgReceived(messageFromRealname, messageToUsername, messageText); 
     172                                                leaveMessage(messageFromRealname.replace(" ", "_"), messageToUsername, messageText); 
     173                                        } else { 
     174                                                leaveMessage(messageFromUsername, messageToUsername, messageText); 
     175                                        } 
     176                                } 
     177         
     178                        } else if (action.equals("askIsAround")) { 
     179                                 
     180                                //check if the user is around 
     181                                String username = request.getParameter("username"); 
     182                                String utterance = ""; 
     183         
     184                                // check if the user is around 
     185                                if (userData.userIsAround(username)) { 
     186                                        utterance = userData.getUsername(username) + " is around today."; 
     187                                } else { 
     188                                        utterance = "I have not seen " + userData.getUsername(username) + " today."; 
     189                                } 
     190         
     191                                System.out.println(utterance); 
     192                                // write utterance to blackboard 
     193                                setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
     194         
     195                                // raise remote action 
     196                                ArrayList<String> parameters = new ArrayList<String>(); 
     197                                parameters.add("SELF"); 
     198                                parameters.add(username); 
     199                                raiseMindAction(loginUser, "askIsAround", parameters); 
     200                        } else if (action.equals("askWhereabout")) { 
     201                                 
     202                                //check for the user's location 
     203                                String username = request.getParameter("username"); 
     204                                String utterance = ""; 
     205                                String userWhereabout = userData.getUserWhereabout(username); 
     206         
     207                                // check if the user is around 
     208                                if (userWhereabout.equals("Unknown")){ 
     209                                        utterance = "I am sorry, I don't know where " + userData.getUsername(username) + " is."; 
     210                                } 
     211                                else if (userWhereabout.equals("Office")){ 
     212                                        utterance = userData.getUsername(username) + " is in the office."; 
     213                                } 
     214                                else { 
     215                                        if (userWhereabout.equals("Others")) { 
     216                                                utterance = "I am sorry, " + userData.getUsername(username) + " didn't leave a note."; 
     217                                        } 
     218                                        else { 
     219                                                utterance = userData.getUsername(username) + " is at " + userWhereabout + "."; 
     220                                        } 
     221                                } 
     222         
     223                                System.out.println(utterance); 
     224                                // write utterance to blackboard 
     225                                setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
     226         
     227                                // raise remote action 
     228                                ArrayList<String> parameters = new ArrayList<String>(); 
     229                                parameters.add("SELF"); 
     230                                parameters.add(username); 
     231                                raiseMindAction(loginUser, "askWhereabout", parameters); 
     232                        } else if (action.equals("informWhereabout")) { 
     233                                 
     234                                //check for the user's location 
     235                                String whereabout = request.getParameter("whereabout").toLowerCase(); 
     236                                String utterance = ""; 
     237         
     238                                // check if the user is around 
     239                                if (!whereabout.equals("")) { 
     240                                        if (whereabout.equals("Others")) { 
     241                                                utterance = "Thanks for telling me that you will be away."; 
     242                                        } 
     243                                        else { 
     244                                                utterance = "Thanks for telling me that you will be at " + whereabout + "."; 
     245                                        } 
     246                                        userData.setUserWhereabout(loginUser,whereabout); 
     247                                } 
     248         
     249                                System.out.println(utterance); 
     250                                // write utterance to blackboard 
     251                                setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
     252         
     253                                // raise remote action 
     254                                ArrayList<String> parameters = new ArrayList<String>(); 
     255                                parameters.add("SELF"); 
     256                                parameters.add(whereabout); 
     257                                raiseMindAction(loginUser, "informWhereabout", parameters); 
     258         
     259                        } else if (action.equals("reply")) { 
     260                                // answer to team buddy's remark 
     261                                String reply = request.getParameter("answer"); 
     262                                String utterance = ""; 
     263         
     264                                // check if content is empty 
     265                                if (reply == null || reply.trim().equals("")) { 
     266                                        utterance = "You didn't provide any comment.";           
     267                                } else { 
     268                                        utterance = "You said " + reply + "."; 
     269                                } 
     270         
     271                                // write utterance to blackboard 
     272                                setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
     273         
     274                                // create the interaction to be logged 
     275                                Interaction interaction = new Interaction(nextID, loginUser, remark, reply); 
     276                                interactions.add(interaction); 
     277                                 
     278                                // raise remote action 
     279                                ArrayList<String> parameters = new ArrayList<String>(); 
     280                                parameters.add("SELF"); 
     281                                parameters.add(remark); 
     282                                parameters.add(String.valueOf(nextID++)); 
     283                                raiseMindAction(loginUser, "reply", parameters);                         
     284                                 
     285                                // reset the remark time stamp 
     286                                remarkTimeStamp = 0; 
     287                                xmlAccess.saveInteractionsXML(interactions);     
     288                        } else if (action.equals("charging")) { 
     289                                // set charging status 
     290         
     291                                String chargingStatus = request.getParameter("chargingStatus"); 
     292                                if (chargingStatus.equals("true")) { 
     293                                        setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "True"); 
     294                                } else if (chargingStatus.equals("false")) { 
     295                                        setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "False"); 
     296                                } 
     297         
     298                                // wait for property to be changed 
     299                                try { 
     300                                        Thread.sleep(500); 
     301                                } catch (Exception e) { 
     302                                        e.printStackTrace(); 
     303                                } 
     304         
     305                                // raise remote action 
     306                                ArrayList<String> parameters = new ArrayList<String>(); 
     307                                parameters.add("SELF"); 
     308                                parameters.add(chargingStatus); 
     309                                raiseMindAction(loginUser, "setCharging", parameters); 
     310         
     311                        } else if (action.equals("sendDocking")) { 
     312                                // send to dock in docking station 
     313         
     314                                // raise remote action 
     315                                ArrayList<String> parameters = new ArrayList<String>(); 
     316                                parameters.add("SELF"); 
     317                                raiseMindAction(loginUser, "sendDocking", parameters); 
     318         
     319                        } else if (action.equals("sendUndocking")) { 
     320                                // send to undock from docking station 
     321         
     322                                // raise remote action 
     323                                ArrayList<String> parameters = new ArrayList<String>(); 
     324                                parameters.add("SELF"); 
     325                                raiseMindAction(loginUser, "sendUndocking", parameters); 
     326                        } 
     327                } else { 
     328                        if (action == null) { 
     329                                // do nothing 
     330                        } else if (action.equals("login")) { 
     331                                // login 
     332                                 
     333                                String loginUsername = request.getParameter("loginUsername"); 
     334                                String loginPassword = request.getParameter("loginPassword"); 
     335                                 
     336                                //User login 
     337                                if (userData.getGuestUser().equals(loginUsername)) { 
     338                                        // guest login 
     339                                        if (userData.getPassword(userData.getGuestUser()).equals(loginPassword)) { 
     340                                                loginUser = userData.getGuestUser(); 
     341                                        } 
     342         
     343                                } else { 
     344                                        for (String user : userData.getUsers()) { 
     345                                                if (user.equals(loginUsername)) { 
     346                                                        if (userData.getPassword(user).equals(loginPassword)) { 
     347                                                                loginUser = user; 
     348                                                        } 
    135349                                                } 
    136350                                        } 
    137351                                } 
    138  
    139                         } 
    140  
    141                         if (loginUser != null) { 
    142                                 // a user is logged in 
    143  
    144                                 // raise remote action 
    145                                 ArrayList<String> parameters = new ArrayList<String>(); 
    146                                 parameters.add("SELF"); 
    147                                 raiseMindAction(loginUser.getUsername(), "login", parameters); 
    148  
    149                                 loginUser.setTimeLastLogin(Calendar.getInstance().getTimeInMillis()); 
    150  
    151                                 xmlAccess.saveXML(userData, XML_FILENAME); 
    152                         } 
    153  
    154                 } else if (action.equals("logout")) { 
    155                         // logout 
    156  
    157                         // raise remote action 
    158                         ArrayList<String> parameters = new ArrayList<String>(); 
    159                         parameters.add("SELF"); 
    160                         raiseMindAction(loginUser.getUsername(), "logout", parameters); 
    161  
    162                         loginUser.setTimeLastLogout(Calendar.getInstance().getTimeInMillis()); 
    163  
    164                         xmlAccess.saveXML(userData, XML_FILENAME); 
    165  
    166                         loginUser = null; 
    167  
    168                 } else if (action.equals("sendHome")) { 
    169                         // send Teambuddy back to home position 
    170  
    171                         // raise remote action 
    172                         String sendHomeUsername = USERNAME_UNKNOWN; 
    173                         if (loginUser != null) { 
    174                                 sendHomeUsername = loginUser.getUsername(); 
    175                         } 
    176                         ArrayList<String> parameters = new ArrayList<String>(); 
    177                         parameters.add("SELF"); 
    178                         raiseMindAction(sendHomeUsername, "sendHome", parameters); 
    179  
    180                 } else if (action.equals("leaveMessage")) { 
    181                         // leave a message 
    182  
    183                         //String messageFromRealname = request.getParameter("messageFromRealname"); 
    184                         String messageFromUsername = request.getParameter("messageFromUsername"); 
    185                         String messageToUsername = request.getParameter("messageToUsername"); 
    186                         String messageText = request.getParameter("messageText"); 
    187                         if (messageText == null || messageText.trim().equals("")) { 
    188                                 ArrayList<String> parameters = new ArrayList<String>(); 
    189                                 parameters.add("SELF"); 
    190                                 raiseMindAction(messageFromUsername, "leaveEmptyMessage", parameters); 
    191                         } else { 
    192                                 if (messageFromUsername.equals(userData.getGuestUser().getUsername())) { 
    193                                         // problem with FAtiMA event when name contains spaces 
    194                                         //msgReceived(messageFromRealname, messageToUsername, messageText); 
    195                                         leaveMessage(messageFromUsername, messageToUsername, messageText); 
    196                                 } else { 
    197                                         leaveMessage(messageFromUsername, messageToUsername, messageText); 
    198                                 } 
    199                         } 
    200  
    201                 } else if (action.equals("requestInfo")) { 
    202                         // request information 
    203  
    204                         String infoUsername = request.getParameter("infoUsername"); 
    205                         String infoTypename = request.getParameter("infoTypename"); 
    206  
    207                         String utterance = ""; 
    208  
    209                         // check if information exists 
    210                         LinkedList<InformationItem> informationItems = userData.getInformationItems(infoUsername, infoTypename); 
    211                         if (informationItems.size() > 0) { 
    212                                 // information exists 
    213  
    214                                 // check if authorised information exists 
    215                                 LinkedList<InformationItem> informationItemsAuthorised = userData.requestAuthorisedInformationItems(infoUsername, infoTypename, loginUser.getUsername()); 
    216                                 if (informationItemsAuthorised.size() > 0) { 
    217                                         // authorised information exists 
    218  
    219                                         utterance = "'" + userData.getTypeRealname(infoTypename) + "' for '" + userData.getUserRealname(infoUsername) + "':"; 
    220                                         for (InformationItem informationItemAuthorised : informationItemsAuthorised) { 
    221                                                 utterance += " " + informationItemAuthorised.getContent() + "."; 
    222                                         } 
    223  
    224                                 } else { 
    225                                         // no authorised information exists 
    226                                         utterance = "I am not authorised to give this information."; 
    227  
    228                                 } 
    229  
    230                         } else { 
    231                                 // no information exists 
    232  
    233                                 if (infoUsername.equals(loginUser.getUsername())) { 
    234                                         utterance = "I have not remembered any information of type '" + userData.getTypeRealname(infoTypename) + "' for you."; 
    235  
    236                                 } else { 
    237                                         utterance = "I cannot give this information."; 
    238  
    239                                         // register as needed information 
    240                                         // attention: gatherInformation can disrupt current iPad interaction when activated to early 
    241                                         needInformation(loginUser.getUsername(), infoUsername, userData.getTypeRealname(infoTypename)); 
    242                                 } 
    243  
    244                         } 
    245  
    246                         // write utterance to blackboard 
    247                         setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
    248  
    249                         // raise remote action 
    250                         ArrayList<String> parameters = new ArrayList<String>(); 
    251                         parameters.add("SELF"); 
    252                         parameters.add(infoUsername); 
    253                         raiseMindAction(loginUser.getUsername(), "requestInformation", parameters); 
    254  
    255                         xmlAccess.saveXML(userData, XML_FILENAME); 
    256  
    257                 } else if (action.equals("provideInfo")) { 
    258                         // provide information 
    259  
    260                         String infoUsername = request.getParameter("infoUsername"); 
    261                         String infoTypename = request.getParameter("infoTypename"); 
    262                         String infoContent = request.getParameter("infoContent"); 
    263                         String[] infoAuthorisedRoles = request.getParameterValues("infoAuthorisedRoles"); 
    264                         String[] infoAuthorisedUsers = request.getParameterValues("infoAuthorisedUsers"); 
    265                         String utterance = ""; 
    266  
    267                         // check if content is empty 
    268                         if (infoContent == null || infoContent.trim().equals("")) { 
    269  
    270                                 utterance = "This information did not contain any content."; 
    271  
    272                         } else { 
    273  
    274                                 // try to add the information item 
    275                                 InformationItem informationItem = userData.provideInformationItem(infoUsername, infoTypename, infoContent, infoAuthorisedRoles, infoAuthorisedUsers); 
    276                                 if (informationItem != null) { 
    277                                         utterance = "I have remembered this information of type '" + userData.getTypeRealname(infoTypename) + "'."; 
    278                                         xmlAccess.saveXML(userData, XML_FILENAME); 
    279                                         setWMObjectProperty(WM_USERDATA, infoUsername + "," + infoTypename + "," + informationItem.getId(), infoContent.replace(" ", "_")); 
    280                                 } else { 
    281                                         utterance = "I could not remember this information."; 
    282                                 } 
    283  
    284                         } 
    285  
    286                         // write utterance to blackboard 
    287                         setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
    288  
    289                         // raise remote action 
    290                         ArrayList<String> parameters = new ArrayList<String>(); 
    291                         parameters.add("SELF"); 
    292                         parameters.add(infoUsername); 
    293                         raiseMindAction(loginUser.getUsername(), "provideInformation", parameters); 
    294  
    295                 } else if (action.equals("deleteInfo")) { 
    296                         // delete information 
    297  
    298                         String infoUsername = request.getParameter("infoUsername"); 
    299                         String infoTypename = request.getParameter("infoTypename"); 
    300                         String[] infoIds = request.getParameterValues("infoId"); 
    301                         String utterance = ""; 
    302  
    303                         if (infoIds != null) { 
    304                                 int deletedCount = 0; 
    305                                 for (String infoId : infoIds) { 
    306                                         long deleteId = Long.valueOf(infoId); 
    307                                         if (userData.deleteInformationItem(infoUsername, deleteId)) { 
    308                                                 deletedCount++; 
    309                                                 xmlAccess.saveXML(userData, XML_FILENAME); 
    310                                                 removeWMObjectProperty(WM_USERDATA, infoUsername + "," + infoTypename + "," + deleteId); 
    311                                         } 
    312                                 } 
    313                                 if (deletedCount > 0) { 
    314                                         utterance = "I have forgotten " + deletedCount + " items of type '" + userData.getTypeRealname(infoTypename) + "'."; 
    315                                 } else { 
    316                                         utterance = "I have not forgotten any information."; 
    317                                 } 
    318  
    319                         } else { 
    320                                 utterance = "I have not forgotten any information."; 
    321                         } 
    322  
    323                         // write utterance to blackboard 
    324                         setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
    325  
    326                         // raise remote action 
    327                         ArrayList<String> parameters = new ArrayList<String>(); 
    328                         parameters.add("SELF"); 
    329                         parameters.add(infoUsername); 
    330                         raiseMindAction(loginUser.getUsername(), "deleteInformation", parameters); 
    331  
    332                 } else if (action.equals("charging")) { 
    333                         // set charging status 
    334  
    335                         String chargingStatus = request.getParameter("chargingStatus"); 
    336                         if (chargingStatus.equals("true")) { 
    337                                 setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "True"); 
    338                         } else if (chargingStatus.equals("false")) { 
    339                                 setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "False"); 
    340                         } 
    341  
    342                         // wait for property to be changed 
    343                         try { 
    344                                 Thread.sleep(500); 
    345                         } catch (Exception e) { 
    346                                 e.printStackTrace(); 
    347                         } 
    348  
    349                         // raise remote action 
    350                         ArrayList<String> parameters = new ArrayList<String>(); 
    351                         parameters.add("SELF"); 
    352                         parameters.add(chargingStatus); 
    353                         raiseMindAction(loginUser.getUsername(), "setCharging", parameters); 
    354  
    355                 } else if (action.equals("sendDocking")) { 
    356                         // send to dock in docking station 
    357  
    358                         // raise remote action 
    359                         ArrayList<String> parameters = new ArrayList<String>(); 
    360                         parameters.add("SELF"); 
    361                         raiseMindAction(loginUser.getUsername(), "sendDocking", parameters); 
    362  
    363                 } else if (action.equals("sendUndocking")) { 
    364                         // send to undock from docking station 
    365  
    366                         // raise remote action 
    367                         ArrayList<String> parameters = new ArrayList<String>(); 
    368                         parameters.add("SELF"); 
    369                         raiseMindAction(loginUser.getUsername(), "sendUndocking", parameters); 
    370  
    371                 } else if (action.equals("history")) { 
    372                         // view history of requests 
    373  
    374                         // raise remote action 
    375                         ArrayList<String> parameters = new ArrayList<String>(); 
    376                         parameters.add("SELF"); 
    377                         parameters.add(loginUser.getUsername()); 
    378                         raiseMindAction(loginUser.getUsername(), "viewRequestHistory", parameters); 
    379  
    380                 } else if (action.equals("report")) { 
    381                         // view report 
    382  
    383                         // raise remote action 
    384                         ArrayList<String> parameters = new ArrayList<String>(); 
    385                         parameters.add("SELF"); 
    386                         parameters.add(loginUser.getUsername()); 
    387                         raiseMindAction(loginUser.getUsername(), "viewUpdateReport", parameters); 
    388  
    389                 } else if (action.equals("reportInfo")) { 
    390                         // request information item from report                  
    391  
    392                         String infoUsername = request.getParameter("infoUsername"); 
    393                         String infoTypename = request.getParameter("infoTypename"); 
    394                         String infoId = request.getParameter("infoId"); 
    395                         long id = Long.valueOf(infoId); 
    396  
    397                         // the following checks are normally not required here 
    398                         // normally only an information item (via id) should be passed 
    399                         // which exists and which the logged in user is authorised to receive 
    400  
    401                         String utterance = ""; 
    402  
    403                         // check if information exists 
    404                         InformationItem informationItem = userData.getInformationItem(infoUsername, id); 
    405                         if (informationItem != null) { 
    406                                 // information exists 
    407  
    408                                 // check if authorised information exists 
    409                                 InformationItem informationItemAuthorised = userData.requestAuthorisedInformationItem(loginUser.getUsername(), infoUsername, id); 
    410                                 if (informationItemAuthorised != null) { 
    411                                         // authorised information exists 
    412  
    413                                         utterance = "New information item of type '" + userData.getTypeRealname(infoTypename) + "' for '" + userData.getUserRealname(infoUsername) + "':"; 
    414                                         utterance += " " + informationItemAuthorised.getContent() + "."; 
    415  
    416                                 } else { 
    417                                         // no authorised information exists 
    418                                         utterance = "I am not authorised to give this information."; 
    419  
    420                                 } 
    421  
    422                         } else { 
    423                                 // no information exists 
    424  
    425                                 if (infoUsername.equals(loginUser.getUsername())) { 
    426                                         utterance = "I have not remembered this information for you."; 
    427  
    428                                 } else { 
    429                                         utterance = "I cannot give this information."; 
    430  
    431                                 } 
    432  
    433                         } 
    434  
    435                         // write utterance to blackboard 
    436                         setBBProperty(BB_INTERFACE_UTTERANCE, utterance); 
    437  
    438                         // raise remote action 
    439                         ArrayList<String> parameters = new ArrayList<String>(); 
    440                         parameters.add("SELF"); 
    441                         parameters.add(infoUsername); 
    442                         raiseMindAction(loginUser.getUsername(), "requestInformation", parameters); 
    443  
    444                         xmlAccess.saveXML(userData, XML_FILENAME); 
    445  
    446                 } else if (action.equals("publicInfo")) { 
    447  
    448                         String utterance = ""; 
    449  
    450                         // get public information items 
    451                         LinkedList<InformationItem> informationItems = userData.getInformationItemsPublic(); 
    452  
    453                         if (informationItems.size() > 0) { 
    454  
    455                                 // choose one item randomly 
    456                                 int index = Math.abs(random.nextInt()) % informationItems.size(); 
    457                                 InformationItem informationItem = informationItems.get(index); 
    458  
    459                                 // build utterance               
    460                                 String typeRealname = userData.getTypeRealname(informationItem.getTypename()); 
    461                                 String userRealname = userData.getUser(informationItem).getRealname(); 
    462                                 utterance = "Did you know about the " + typeRealname + " of " + userRealname + "? For example " + informationItem.getContent(); 
    463  
    464                         } 
    465  
    466                         response.setContentType("text/plain"); 
    467                         PrintWriter out = response.getWriter(); 
    468                         out.println(utterance); 
    469                         out.close(); 
    470  
    471                         return; 
    472                 } 
    473  
     352                         
     353                                if (!(loginUser.equals(""))) { 
     354                                        // a user is logged in 
     355                                        // raise remote action 
     356                                        ArrayList<String> parameters = new ArrayList<String>(); 
     357                                        parameters.add("SELF"); 
     358                                        raiseMindAction(loginUser, "login", parameters); 
     359                                } 
     360                        } else if (action.equals("sendHome")) { 
     361                                        // send Teambuddy back to home position 
     362                                        ArrayList<String> parameters = new ArrayList<String>(); 
     363                                        parameters.add("SELF"); 
     364                                        raiseMindAction(USERNAME_UNKNOWN, "sendHome", parameters); 
     365                 
     366                        } 
     367                        else if (action.equals("charging")) { 
     368                                // set charging status 
     369         
     370                                String chargingStatus = request.getParameter("chargingStatus"); 
     371                                if (chargingStatus.equals("true")) { 
     372                                        setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "True"); 
     373                                } else if (chargingStatus.equals("false")) { 
     374                                        setWMObjectProperty(WM_CURRENT_PLATFORM, WM_CHARGING, "False"); 
     375                                } 
     376         
     377                                // wait for property to be changed 
     378                                try { 
     379                                        Thread.sleep(500); 
     380                                } catch (Exception e) { 
     381                                        e.printStackTrace(); 
     382                                } 
     383         
     384                                // raise remote action 
     385                                ArrayList<String> parameters = new ArrayList<String>(); 
     386                                parameters.add("SELF"); 
     387                                parameters.add(chargingStatus); 
     388                                raiseMindAction(USERNAME_UNKNOWN, "setCharging", parameters); 
     389         
     390                        } else if (action.equals("sendDocking")) { 
     391                                // send to dock in docking station 
     392         
     393                                // raise remote action 
     394                                ArrayList<String> parameters = new ArrayList<String>(); 
     395                                parameters.add("SELF"); 
     396                                raiseMindAction(USERNAME_UNKNOWN, "sendDocking", parameters); 
     397         
     398                        } else if (action.equals("sendUndocking")) { 
     399                                // send to undock from docking station 
     400         
     401                                // raise remote action 
     402                                ArrayList<String> parameters = new ArrayList<String>(); 
     403                                parameters.add("SELF"); 
     404                                raiseMindAction(USERNAME_UNKNOWN, "sendUndocking", parameters); 
     405                        } 
     406                }  
     407                 
    474408                // start html response 
    475409                response.setContentType("text/html"); 
     
    479413 
    480414                // process page 
    481                 if (loginUser == null) { 
     415                if (loginUser.equals("")){ 
    482416                        out.println(getLoginRequestPage()); 
    483417                } else { 
    484                         String page = request.getParameter("page"); 
    485418                        if (page == null) { 
    486                                 out.println(getStartPage()); 
     419                                out.println(getLoginRequestPage()); 
     420                                /*if (remarkTimeStamp > 0) 
     421                                { 
     422                                        out.println(getDisplayRemarkPage()); 
     423                                } 
     424                                else 
     425                                { 
     426                                        out.println(getStartPage()); 
     427                                        //out.println(getLoginRequestPage()); 
     428                                }*/ 
    487429                        } else if (page.equals("start")) { 
    488430                                out.println(getStartPage()); 
     
    495437                                String messageText = request.getParameter("messageText"); 
    496438                                out.println(getMessageLeftPage(messageFromRealname, messageToRealname, messageText)); 
    497                         } else if (page.equals("requestUser")) { 
    498                                 out.println(getRequestUserPage()); 
    499                         } else if (page.equals("requestType")) { 
    500                                 String infoUsername = request.getParameter("infoUsername"); 
    501                                 out.println(getRequestTypePage(infoUsername)); 
    502                         } else if (page.equals("requestInfo")) { 
    503                                 String infoUsername = request.getParameter("infoUsername"); 
    504                                 String infoTypename = request.getParameter("infoTypename"); 
    505                                 out.println(getRequestInfoPage(infoUsername, infoTypename)); 
    506                         } else if (page.equals("provide")) { 
    507                                 out.println(getProvidePage()); 
    508                         } else if (page.equals("provideInfo")) { 
    509                                 String infoUsername = request.getParameter("infoUsername"); 
    510                                 String infoTypename = request.getParameter("infoTypename"); 
    511                                 out.println(getProvideInfoPage(infoUsername, infoTypename)); 
    512                         } else if (page.equals("providedInfo")) { 
    513                                 String infoUsername = request.getParameter("infoUsername"); 
    514                                 String infoTypename = request.getParameter("infoTypename"); 
    515                                 out.println(getProvidedInfoPage(infoUsername, infoTypename)); 
    516                         } else if (page.equals("delete")) { 
    517                                 out.println(getDeletePage()); 
    518                         } else if (page.equals("deleteInfo")) { 
    519                                 String infoUsername = request.getParameter("infoUsername"); 
    520                                 String infoTypename = request.getParameter("infoTypename"); 
    521                                 out.println(getDeleteInfoPage(infoUsername, infoTypename)); 
    522                         } else if (page.equals("deletedInfo")) { 
    523                                 String infoUsername = request.getParameter("infoUsername"); 
    524                                 String infoTypename = request.getParameter("infoTypename"); 
    525                                 out.println(getDeletedInfoPage(infoUsername, infoTypename)); 
    526                         } else if (page.equals("history")) { 
    527                                 out.println(getHistoryPage()); 
    528                         } else if (page.equals("historyInfo")) { 
    529                                 String infoUsername = request.getParameter("infoUsername"); 
    530                                 String infoTypename = request.getParameter("infoTypename"); 
    531                                 out.println(getHistoryInfoPage(infoUsername, infoTypename)); 
    532                         } else if (page.equals("charging")) { 
     439                        } else if (page.equals("askIsAround")) { 
     440                                out.println(getUsernamesPage("askIsAround")); 
     441                        } else if (page.equals("askWhereabout")) { 
     442                                out.println(getUsernamesPage("askWhereabout")); 
     443                        } else if (page.equals("informWhereabout")) { 
     444                                out.println(getWhereaboutPage()); 
     445                        } else if (page.equals("displayRemark")) { 
     446                                out.println(getDisplayRemarkPage()); 
     447                        } else if (page.equals("reply")) { 
     448                                String reply = request.getParameter("answer"); 
     449                                out.println(getReplyPage(reply)); 
     450                        }else if (page.equals("charging")) { 
    533451                                out.println(getChargingPage()); 
    534452                        } else if (page.equals("docking")) { 
    535453                                out.println(getDockingPage()); 
    536                         } else if (page.equals("report")) { 
    537                                 out.println(getReportPage()); 
    538                         } else if (page.equals("reportInfo")) { 
    539                                 String infoUsername = request.getParameter("infoUsername"); 
    540                                 String infoTypename = request.getParameter("infoTypename"); 
    541                                 String infoTimeProvided = request.getParameter("infoTimeProvided"); 
    542                                 long timeProvided = Long.valueOf(infoTimeProvided); 
    543                                 out.println(getReportInfoPage(infoUsername, infoTypename, timeProvided)); 
    544                         } 
    545                 } 
    546  
     454                        } 
     455                } 
    547456                out.println(getFooter()); 
    548457                out.close(); 
    549458        } 
    550  
     459         
     460        public void setRemark(String username, String remark, String remarkText) { 
     461                this.remarkTimeStamp = System.currentTimeMillis(); 
     462                /*if (!(loginUser.equals("")) && (previousUser.equals(""))) 
     463                        previousUser = loginUser; 
     464                this.loginUser = username;*/ 
     465                this.remarkUser = username; 
     466                this.remark = remark; 
     467                this.remarkText = remarkText; 
     468                userData.setMadeRemark(username,"True"); 
     469                 
     470                System.out.println("Remark timer set "); 
     471                timer.cancel(); 
     472                timer.purge(); 
     473                timer = new Timer(); 
     474                timer.schedule(new TimeoutTask(interfaceCompetency, WM_CURRENT_PLATFORM, WM_INTERFACE_INTERACTION), NON_INTERACTION_TIMEOUT); 
     475                setWMObjectProperty(WM_CURRENT_PLATFORM, WM_INTERFACE_INTERACTION, "True"); 
     476        } 
     477 
     478        // reset all values in case the previous user didn't log out 
     479        public void resetAll(){ 
     480                System.out.println("Reset all!"); 
     481                timer.cancel(); 
     482                timer.purge(); 
     483                loginUser = ""; 
     484                remarkTimeStamp = 0; 
     485                remarkUser = ""; 
     486                remark = ""; 
     487                remarkText = ""; 
     488        } 
     489         
    551490        private String getHeader() { 
    552491                String html = ""; 
    553492                html += "<html>\n"; 
    554493                html += "  <head>\n"; 
     494                //html += "<META HTTP-EQUIV=\"refresh\" CONTENT=\"8\">"; 
    555495                html += "    <title>Teambuddy Information Sharing Interface</title>\n"; 
    556496                // disable caching 
     
    570510                return html; 
    571511        } 
    572  
     512         
    573513        private String getLoginForm() { 
    574514                String html = ""; 
     
    576516                html += "  <tr>\n"; 
    577517                html += "    <td valign=\"bottom\">\n"; 
    578                 if (loginUser == null) { 
     518                 
     519                if (!loginUser.equals("")) { 
    579520                        html += "      <form action=\"\" method=\"POST\">\n"; 
    580  
    581                         if (LOGIN_USERNAME_SELECT) { 
    582                                 html += "        <a class=\"small\">Username: </a>\n"; 
    583                                 html += "        <select class=\"small\" name=\"loginUsername\">\n"; 
    584                                 for (User user : userData.getUsers()) { 
    585                                         html += "          <option class=\"small\" value=\"" + user.getUsername() + "\">" + user.getUsername() + "</option>\n"; 
    586                                 } 
    587                                 html += "        </select>\n"; 
    588                         } else { 
    589                                 html += "        <a class=\"small\">Username: </a><input class=\"small\" name=\"loginUsername\" type=\"text\" />\n"; 
    590                         } 
    591  
    592                         html += "        <a class=\"small\">Password: </a><input class=\"small\" name=\"loginPassword\" type=\"password\" />\n"; 
    593                         html += "        <input class=\"small\" name=\"submit\" type=\"submit\" value=\"Login\" />\n"; 
    594                         html += "        <input class=\"small\" name=\"action\" type=\"hidden\" value=\"login\" />\n"; 
    595                         html += "        <input class=\"small\" name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    596                         html += "      </form>\n"; 
    597                 } else { 
    598                         html += "      <form action=\"\" method=\"POST\">\n"; 
    599                         html += "        <a class=\"small\">logged in as: " + loginUser.getRealname() + " (" + userData.getRoleRealname(loginUser.getRolename()) + ")</a>\n"; 
    600                         html += "        <input class=\"small\" name=\"submit\" type=\"submit\" value=\"Logout\" />\n"; 
    601                         html += "        <input class=\"small\" name=\"action\" type=\"hidden\" value=\"logout\" />\n"; 
    602                         html += "        <input class=\"small\" name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    603                         html += "      </form>\n"; 
    604                 } 
    605                 html += "    </td>\n"; 
    606                 html += "    <td valign=\"bottom\">\n"; 
    607                 html += "      <form action=\"\" method=\"POST\">\n"; 
    608                 html += "        <input class=\"small\" name=\"submit\" type=\"submit\" value=\"Go to start page\" />\n"; 
    609                 html += "        <input class=\"small\" name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    610                 html += "      </form>\n"; 
     521                        if (!loginUser.equals(USERNAME_UNKNOWN)){ 
     522                                html += "        <a class=\"small\">You are " + loginUser + " (" + userData.getUserRealname(loginUser).replace("_", " ") + ")</a>\n"; 
     523                                html += "        <input class=\"small\" name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
     524                                html += "        <input class=\"small\" name=\"action\" type=\"hidden\" value=\"logout\" />\n"; 
     525                                html += "        <input class=\"small\" name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     526                                html += "      </form>\n"; 
     527                        } 
     528                } 
    611529                html += "    </td>\n"; 
    612530                html += "  </tr>\n"; 
    613531                html += "</table>\n"; 
     532                 
    614533                return html; 
    615534        } 
     
    623542        private String getLoginRequestPage() { 
    624543                String html = ""; 
    625  
    626                 html += "<p>Welcome to the Teambuddy iPad interface!</p>\n"; 
    627                 html += "<p>In order to interact with the Teambuddy, please log in with your username and password!</p>\n"; 
    628  
     544                 
     545                html += "<p>In order to interact with me, please click on your name!</p>\n"; 
     546                html += "<table>\n"; 
     547                html += "  <tr>\n"; 
     548         
     549                for (int i = 0; i < userData.getUsers().size(); i++) {   
     550                        if (i == userData.getUsers().size()/2){ 
     551                                html += "  </tr>\n"; 
     552                                html += "  <tr>\n"; 
     553                        } 
     554                        String user = userData.getUsers().get(i); 
     555                        html += "    <td>\n";    
     556                        html += "  <form action=\"\" method=\"POST\">\n"; 
     557                        html += "    <input name=\"submit\" type=\"submit\" value=\"" + userData.getUserRealname(user).replace("_", " ") + "\" />\n"; 
     558                        html += "    <input name=\"action\" type=\"hidden\" value=\"login\" />\n"; 
     559                        html += "    <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     560                        html += "    <input name=\"loginUsername\" type=\"hidden\" value=\"" + userData.getUsername(user) + "\" /></td>\n"; 
     561                        html += "    <input name=\"loginPassword\" type=\"hidden\" value=\"" + userData.getPassword(user) + "\" /></td>\n"; 
     562                        html += "  </form>\n"; 
     563                        html += "    </td>\n"; 
     564                }                
     565                html += "  </tr>\n"; 
     566                html += "</table>\n";    
     567                 
    629568                html += "<p>\n"; 
    630569                html += "  <form action=\"\" method=\"POST\">\n"; 
    631                 html += "    For a guest login, please click here: \n"; 
     570                html += "    If you are guest, please click here: \n"; 
    632571                html += "    <input name=\"submit\" type=\"submit\" value=\"Guest Login\" />\n"; 
    633572                html += "    <input name=\"action\" type=\"hidden\" value=\"login\" />\n"; 
    634573                html += "    <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    635                 html += "    <input name=\"loginUsername\" type=\"hidden\" value=\"" + userData.getGuestUser().getUsername() + "\" /></td>\n"; 
    636                 html += "    <input name=\"loginPassword\" type=\"hidden\" value=\"" + userData.getGuestUser().getPassword() + "\" /></td>\n"; 
     574                html += "    <input name=\"loginUsername\" type=\"hidden\" value=\"" + userData.getGuestUser() + "\" /></td>\n"; 
     575                html += "    <input name=\"loginPassword\" type=\"hidden\" value=\"" + userData.getPassword(userData.getGuestUser()) + "\" /></td>\n"; 
    637576                html += "  </form>\n"; 
    638577                html += "</p>\n"; 
    639  
     578         
    640579                if (ENABLE_SEND_HOME) { 
    641580                        html += "<p>\n"; 
    642581                        html += "  <form action=\"\" method=\"POST\">\n"; 
    643                         html += "    For sending the Teambuddy back, please click here: \n"; 
     582                        html += "    For sending the me back, please click here: \n"; 
    644583                        html += "    <input name=\"submit\" type=\"submit\" value=\"Send Home\" />\n"; 
    645584                        html += "    <input name=\"action\" type=\"hidden\" value=\"sendHome\" />\n"; 
     
    666605                html += "        <input name=\"page\" type=\"hidden\" value=\"message\" />\n"; 
    667606                html += "      </form>\n"; 
    668  
    669                 html += "      <form action=\"\" method=\"POST\">\n"; 
    670                 html += "        <input name=\"submit\" type=\"submit\" value=\"Request information\" />\n"; 
    671                 html += "        <input name=\"page\" type=\"hidden\" value=\"requestUser\" />\n"; 
    672                 html += "      </form>\n"; 
    673  
    674                 html += "    </td>\n"; 
    675  
    676                 if (loginUser != userData.getGuestUser()) { 
    677  
    678                         html += "    <td valign=\"top\">\n"; 
    679  
    680                         html += "      <form action=\"\" method=\"POST\">\n"; 
    681                         html += "        <input name=\"submit\" type=\"submit\" value=\"Provide information\" />\n"; 
    682                         html += "        <input name=\"page\" type=\"hidden\" value=\"provide\" />\n"; 
    683                         html += "      </form>\n"; 
    684  
    685                         html += "      <form action=\"\" method=\"POST\">\n"; 
    686                         html += "        <input name=\"submit\" type=\"submit\" value=\"Delete information\" />\n"; 
    687                         html += "        <input name=\"page\" type=\"hidden\" value=\"delete\" />\n"; 
    688                         html += "      </form>\n"; 
    689  
    690                         html += "      <form action=\"\" method=\"POST\">\n"; 
    691                         html += "        <input name=\"submit\" type=\"submit\" value=\"View history of requests\" />\n"; 
    692                         html += "        <input name=\"action\" type=\"hidden\" value=\"history\" />\n"; 
    693                         html += "        <input name=\"page\" type=\"hidden\" value=\"history\" />\n"; 
    694                         html += "      </form>\n"; 
    695  
    696                         html += "      <form action=\"\" method=\"POST\">\n"; 
    697                         html += "        <input name=\"submit\" type=\"submit\" value=\"View report of updates\" />\n"; 
    698                         html += "        <input name=\"action\" type=\"hidden\" value=\"report\" />\n"; 
    699                         html += "        <input name=\"page\" type=\"hidden\" value=\"report\" />\n"; 
    700                         html += "      </form>\n"; 
    701  
    702                         html += "    </td>\n"; 
    703  
    704                         html += "    <td valign=\"top\">\n"; 
    705  
    706                         html += "      <form action=\"\" method=\"POST\">\n"; 
    707                         html += "        <input name=\"submit\" type=\"submit\" value=\"Set charging status\" />\n"; 
    708                         html += "        <input name=\"page\" type=\"hidden\" value=\"charging\" />\n"; 
    709                         html += "      </form>\n"; 
    710  
    711                         html += "      <form action=\"\" method=\"POST\">\n"; 
    712                         html += "        <input name=\"submit\" type=\"submit\" value=\"Send docking/undocking\" />\n"; 
    713                         html += "        <input name=\"page\" type=\"hidden\" value=\"docking\" />\n"; 
    714                         html += "      </form>\n"; 
    715  
    716                         html += "    </td>\n"; 
    717  
    718                 } 
     607                 
     608                html += "    </td>\n"; 
     609 
     610                html += "    <td valign=\"top\">\n"; 
     611 
     612                html += "      <form action=\"\" method=\"POST\">\n"; 
     613                html += "        <input name=\"submit\" type=\"submit\" value=\"Have you seen ...\" />\n"; 
     614                html += "        <input name=\"page\" type=\"hidden\" value=\"askIsAround\" />\n"; 
     615                html += "      </form>\n"; 
     616 
     617                html += "      <form action=\"\" method=\"POST\">\n"; 
     618                html += "        <input name=\"submit\" type=\"submit\" value=\"Where is ...\" />\n"; 
     619                html += "        <input name=\"page\" type=\"hidden\" value=\"askWhereabout\" />\n"; 
     620                html += "      </form>\n"; 
     621                 
     622                html += "      <form action=\"\" method=\"POST\">\n"; 
     623                html += "        <input name=\"submit\" type=\"submit\" value=\"I will be at ...\" />\n"; 
     624                html += "        <input name=\"page\" type=\"hidden\" value=\"informWhereabout\" />\n"; 
     625                html += "      </form>\n"; 
     626                 
     627                html += "    </td>\n"; 
     628 
     629                html += "    <td valign=\"top\">\n"; 
     630 
     631                html += "      <form action=\"\" method=\"POST\">\n"; 
     632                html += "        <input name=\"submit\" type=\"submit\" value=\"Set charging status\" />\n"; 
     633                html += "        <input name=\"page\" type=\"hidden\" value=\"charging\" />\n"; 
     634                html += "      </form>\n"; 
     635 
     636                html += "      <form action=\"\" method=\"POST\">\n"; 
     637                html += "        <input name=\"submit\" type=\"submit\" value=\"Send docking/undocking\" />\n"; 
     638                html += "        <input name=\"page\" type=\"hidden\" value=\"docking\" />\n"; 
     639                html += "      </form>\n"; 
     640 
     641                html += "    </td>\n"; 
    719642 
    720643                html += "  </tr>\n"; 
    721644                html += "</table>\n"; 
     645                 
     646                html += "       <p>To reply to my remark, please click here: </p> "; 
     647                html += "      <form action=\"\" method=\"POST\">\n"; 
     648                html += "        <input name=\"submit\" type=\"submit\" value=\"Reply Me\" />\n"; 
     649                //html += "        <input name=\"action\" type=\"hidden\" value=\"interact\" />\n"; 
     650                html += "        <input name=\"page\" type=\"hidden\" value=\"displayRemark\" />\n"; 
     651                html += "      </form>\n"; 
    722652 
    723653                return html; 
     
    736666                } else { 
    737667                        html += "    <td>\n"; 
    738                         html += "      <input name=\"messageFromRealname\" type=\"text\" value=\"" + loginUser.getRealname() + "\" readonly=\"readonly\" />\n"; 
    739                 } 
    740                 html += "      <input name=\"messageFromUsername\" type=\"hidden\" value=\"" + loginUser.getUsername() + "\" />\n"; 
     668                        html += "      <input name=\"messageFromRealname\" type=\"text\" value=\"" + userData.getUserRealname(loginUser).replace("_", " ") + "\" readonly=\"readonly\" />\n"; 
     669                } 
     670                html += "      <input name=\"messageFromUsername\" type=\"hidden\" value=\"" + loginUser + "\" />\n"; 
    741671                html += "    </td>\n"; 
    742672                html += "  </tr>\n"; 
     
    745675                html += "    <td>\n"; 
    746676                html += "      <select name=\"messageToUsername\">\n"; 
    747                 for (User user : userData.getUsers()) { 
    748                         if (user != loginUser) { 
    749                                 String username = user.getUsername(); 
    750                                 String realname = user.getRealname(); 
    751                                 html += "        <option value=\"" + username + "\">" + realname + "</option>\n"; 
     677                for (String user : userData.getUsers()) { 
     678                        if (!user.equals(loginUser)) { 
     679                                String username = userData.getUsername(user); 
     680                                String realname = userData.getUserRealname(user); 
     681                                html += "        <option value=\"" + username + "\">" + realname.replace("_", " ") + "</option>\n"; 
    752682                        } 
    753683                } 
     
    789719        } 
    790720 
    791         private String getRequestUserPage() { 
    792                 String html = ""; 
    793  
    794                 html += "<p>For which person do you want to request information?</p>\n"; 
     721        private String getUsernamesPage(String question) { 
     722                String html = ""; 
     723 
     724                html += "<p>Who are you looking for?</p>\n"; 
    795725 
    796726                html += "<table>\n"; 
     
    799729 
    800730                for (int i = 0; i < userData.getUsers().size(); i++) { 
    801                         User user = userData.getUsers().get(i); 
     731                        String user = userData.getUsers().get(i); 
    802732 
    803733                        if (i == Math.round((double) userData.getUsers().size() / 2)) { 
     
    807737 
    808738                        html += "      <form action=\"\" method=\"POST\">\n"; 
    809                         html += "        <input name=\"submit\" type=\"submit\" value=\"" + user.getRealname() + "\" />\n"; 
    810                         html += "        <input name=\"page\" type=\"hidden\" value=\"requestType\" />\n"; 
    811                         html += "        <input name=\"infoUsername\" type=\"hidden\" value=\"" + user.getUsername() + "\" />\n"; 
     739                        html += "        <input name=\"submit\" type=\"submit\" value=\"" + userData.getUserRealname(user).replace("_", " ") + "\" />\n"; 
     740                        html += "        <input name=\"action\" type=\"hidden\" value=\"" + question + "\" />\n"; 
     741                        html += "        <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     742                        html += "        <input name=\"username\" type=\"hidden\" value=\"" + userData.getUsername(user) + "\" />\n"; 
    812743                        html += "      </form>\n"; 
    813744                } 
     
    820751        } 
    821752 
    822         private String getRequestTypePage(String username) { 
    823                 String html = ""; 
    824  
    825                 html += "<p>Which type of information do you want to request?</p>\n"; 
     753        private String getWhereaboutPage() { 
     754                String html = ""; 
     755                ArrayList<String> whereabout = new ArrayList<String>(); 
     756                whereabout.add("A meeting"); 
     757                whereabout.add("Coffee"); 
     758                whereabout.add("Others"); 
     759 
     760                html += "<p>Where will you be?</p>\n"; 
    826761 
    827762                html += "<table>\n"; 
    828763                html += "  <tr>\n"; 
    829                 html += "    <td>\n"; 
    830  
    831                 for (int i = 0; i < userData.getInformationTypes().size(); i++) { 
    832                         InformationType informationType = userData.getInformationTypes().get(i); 
    833  
    834                         if (i == Math.round((double) userData.getInformationTypes().size() / 2)) { 
    835                                 html += "    </td>\n"; 
    836                                 html += "    <td valign=\"top\">\n"; 
    837                         } 
    838  
     764 
     765                html += "    <td valign=\"top\">\n"; 
     766 
     767                for (String at: whereabout) { 
    839768                        html += "      <form action=\"\" method=\"POST\">\n"; 
    840                         html += "        <input name=\"submit\" type=\"submit\" value=\"" + informationType.getRealname() + "\" />\n"; 
    841                         html += "        <input name=\"action\" type=\"hidden\" value=\"requestInfo\" />\n"; 
    842                         html += "        <input name=\"page\" type=\"hidden\" value=\"requestInfo\" />\n"; 
    843                         html += "        <input name=\"infoUsername\" type=\"hidden\" value=\"" + username + "\" />\n"; 
    844                         html += "        <input name=\"infoTypename\" type=\"hidden\" value=\"" + informationType.getTypename() + "\" />\n"; 
     769                        html += "        <input name=\"submit\" type=\"submit\" value=\"" + at  + "\" />\n"; 
     770                        html += "        <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     771                        html += "        <input name=\"action\" type=\"hidden\" value=\"informWhereabout\" />\n"; 
     772                        html += "        <input name=\"whereabout\" type=\"hidden\" value=\"" + at  + "\" />\n"; 
    845773                        html += "      </form>\n"; 
    846774                } 
    847  
    848                 html += "    </td>\n"; 
     775                 
     776                html += "    </td>\n"; 
     777 
    849778                html += "  </tr>\n"; 
    850779                html += "</table>\n"; 
     
    852781                return html; 
    853782        } 
    854  
    855         private String getRequestInfoPage(String username, String typename) { 
    856                 String html = ""; 
    857  
    858                 html += "<p>Requesting <i>" + userData.getTypeRealname(typename) + "</i> for <i>" + userData.getUserRealname(username) + "</i>...</p>\n"; 
    859                 html += "<form action=\"\" method=\"POST\">\n"; 
    860                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    861                 html += "  <input name=\"page\" type=\"hidden\" value=\"requestType\" />\n"; 
    862                 html += "  <input name=\"infoUsername\" type=\"hidden\" value=\"" + username + "\" />\n"; 
    863                 html += "</form>\n"; 
    864  
    865                 return html; 
    866         } 
    867  
    868         private String getProvidePage() { 
    869                 String html = ""; 
    870  
    871                 html += "<p>Which type of information do you want to provide?</p>\n"; 
    872  
    873                 html += "<table>\n"; 
    874                 html += "  <tr>\n"; 
    875                 html += "    <td>\n"; 
    876  
    877                 for (int i = 0; i < userData.getInformationTypes().size(); i++) { 
    878                         InformationType informationType = userData.getInformationTypes().get(i); 
    879  
    880                         if (i == Math.round((double) userData.getInformationTypes().size() / 2)) { 
    881                                 html += "    </td>\n"; 
    882                                 html += "    <td valign=\"top\">\n"; 
    883                         } 
    884  
    885                         html += "      <form action=\"\" method=\"POST\">\n"; 
    886                         html += "        <input name=\"submit\" type=\"submit\" value=\"" + informationType.getRealname() + "\" />\n"; 
    887                         html += "        <input name=\"page\" type=\"hidden\" value=\"provideInfo\" />\n"; 
    888                         html += "        <input name=\"infoUsername\" type=\"hidden\" value=\"" + loginUser.getUsername() + "\" />\n"; 
    889                         html += "        <input name=\"infoTypename\" type=\"hidden\" value=\"" + informationType.getTypename() + "\" />\n"; 
    890                         html += "      </form>\n"; 
    891                 } 
    892  
    893                 html += "    </td>\n"; 
    894                 html += "  </tr>\n"; 
    895                 html += "</table>\n"; 
    896  
    897                 return html; 
    898         } 
    899  
    900         private String getProvideInfoPage(String username, String typename) { 
    901                 String html = ""; 
    902  
    903                 html += "<p>Which information of type '" + userData.getTypeRealname(typename) + "' do you want to provide?</p>\n"; 
    904  
    905                 html += "<form action=\"\" method=\"POST\">\n"; 
    906                 html += "  <textarea name=\"infoContent\" rows=\"2\" cols=\"40\"></textarea><br/>\n"; 
    907                 html += "<table>\n"; 
    908                 html += "  <tr>\n"; 
    909                 html += "    <td>Authorised roles:</td>\n"; 
    910                 html += "    <td width=\"50\"></td>\n"; 
    911                 html += "    <td>Authorised users:</td>\n"; 
    912                 html += "  </tr>\n"; 
    913                 html += "  <tr>\n"; 
    914                 html += "    <td valign=\"top\">\n"; 
    915                 for (Role role : userData.getRoles()) { 
    916                         if (userData.getType(typename).getAuthorisedRolesDefault().contains(role.getRolename())) { 
    917                                 html += "  <input name=\"infoAuthorisedRoles\" type=\"checkbox\" value=\"" + role.getRolename() + "\" checked=\"checked\" />" + role.getRealname() + "<br/>\n"; 
    918                         } else { 
    919                                 html += "  <input name=\"infoAuthorisedRoles\" type=\"checkbox\" value=\"" + role.getRolename() + "\" />" + role.getRealname() + "<br/>\n"; 
    920                         } 
    921                 } 
    922                 html += "    </td>\n"; 
    923                 html += "    <td>\n"; 
    924                 html += "    </td>\n"; 
    925                 html += "    <td valign=\"top\">\n"; 
    926                 for (User user : userData.getUsers()) { 
    927                         if (!user.getUsername().equals(loginUser.getUsername())) { 
    928                                 html += "  <input name=\"infoAuthorisedUsers\" type=\"checkbox\" value=\"" + user.getUsername() + "\" />" + user.getRealname() + "<br/>\n"; 
    929                         } 
    930                 } 
    931                 html += "    </td>\n"; 
    932                 html += "  </tr>\n"; 
    933                 html += "</table>\n"; 
    934                 html += "<table>\n"; 
    935                 html += "  <tr>\n"; 
    936                 html += "    <td valign=\"top\">\n"; 
    937                 html += "  <input name=\"submit\" type=\"submit\" value=\"Provide information\" />\n"; 
    938                 html += "  <input name=\"action\" type=\"hidden\" value=\"provideInfo\" />\n"; 
    939                 html += "  <input name=\"page\" type=\"hidden\" value=\"providedInfo\" />\n"; 
    940                 html += "  <input name=\"infoUsername\" type=\"hidden\" value=\"" + username + "\" />\n"; 
    941                 html += "  <input name=\"infoTypename\" type=\"hidden\" value=\"" + typename + "\" />\n"; 
    942                 html += "</form>\n"; 
    943                 html += "    </td>\n"; 
    944                 html += "    <td valign=\"top\">\n"; 
    945                 html += "      <form action=\"\" method=\"POST\">\n"; 
    946                 html += "        <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    947                 html += "        <input name=\"page\" type=\"hidden\" value=\"provide\" />\n"; 
    948                 html += "      </form>\n"; 
    949                 html += "    </td>\n"; 
    950                 html += "  </tr>\n"; 
    951                 html += "</table>\n"; 
    952                 return html; 
    953         } 
    954  
    955         private String getProvidedInfoPage(String username, String typename) { 
    956                 String html = ""; 
    957  
    958                 html += "<p>Provided information of type <i>" + userData.getTypeRealname(typename) + "</i> for <i>" + userData.getUserRealname(username) + "</i>.</p>\n"; 
    959                 html += "<form action=\"\" method=\"POST\">\n"; 
    960                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    961                 html += "  <input name=\"page\" type=\"hidden\" value=\"provide\" />\n"; 
    962                 html += "</form>\n"; 
    963  
    964                 return html; 
    965         } 
    966  
    967         private String getDeletePage() { 
    968                 String html = ""; 
    969  
    970                 html += "<p>From which type of information do you want to delete?</p>\n"; 
    971  
    972                 html += "<table>\n"; 
    973                 html += "  <tr>\n"; 
    974                 html += "    <td>\n"; 
    975  
    976                 for (int i = 0; i < userData.getInformationTypes().size(); i++) { 
    977                         InformationType informationType = userData.getInformationTypes().get(i); 
    978  
    979                         if (i == Math.round((double) userData.getInformationTypes().size() / 2)) { 
    980                                 html += "    </td>\n"; 
    981                                 html += "    <td valign=\"top\">\n"; 
    982                         } 
    983  
    984                         html += "      <form action=\"\" method=\"POST\">\n"; 
    985                         html += "        <input name=\"submit\" type=\"submit\" value=\"" + informationType.getRealname() + "\" />\n"; 
    986                         html += "        <input name=\"page\" type=\"hidden\" value=\"deleteInfo\" />\n"; 
    987                         html += "        <input name=\"infoUsername\" type=\"hidden\" value=\"" + loginUser.getUsername() + "\" />\n"; 
    988                         html += "        <input name=\"infoTypename\" type=\"hidden\" value=\"" + informationType.getTypename() + "\" />\n"; 
    989                         html += "      </form>\n"; 
    990                 } 
    991  
    992                 html += "    </td>\n"; 
    993                 html += "  </tr>\n"; 
    994                 html += "</table>\n"; 
    995  
    996                 return html; 
    997         } 
    998  
    999         private String getDeleteInfoPage(String username, String typename) { 
    1000                 String html = ""; 
    1001  
    1002                 LinkedList<InformationItem> informationItems = userData.getInformationItems(username, typename); 
    1003                 if (informationItems.size() > 0) { 
    1004  
    1005                         html += "<p>Which information of type '" + userData.getTypeRealname(typename) + "' do you want to delete?</p>\n"; 
    1006                         html += "<form action=\"\" method=\"POST\">\n"; 
    1007  
    1008                         html += "<table>\n"; 
    1009                         for (InformationItem informationItem : informationItems) { 
    1010                                 html += "  <tr>\n"; 
    1011                                 html += "    <td>\n"; 
    1012                                 html += "  <input name=\"infoId\" type=\"checkbox\" value=\"" + informationItem.getId() + "\" />\n"; 
    1013                                 html += "    </td>\n"; 
    1014                                 //html += "    <td>" + informationItem.getContent() + "</td>\n"; 
    1015                                 html += "    <td>" + informationItem.getContent().replaceAll("\n", "<br/>") + "</td>\n"; 
    1016                                 html += "  </tr>\n"; 
    1017                         } 
    1018                         html += "</table>\n"; 
    1019  
    1020                         html += "<table>\n"; 
    1021                         html += "  <tr>\n"; 
    1022                         html += "    <td valign=\"top\">\n"; 
    1023                         html += "  <input name=\"submit\" type=\"submit\" value=\"Delete information\" />\n"; 
    1024                         html += "  <input name=\"action\" type=\"hidden\" value=\"deleteInfo\" />\n"; 
    1025                         html += "  <input name=\"page\" type=\"hidden\" value=\"deletedInfo\" />\n"; 
    1026                         html += "  <input name=\"infoUsername\" type=\"hidden\" value=\"" + username + "\" />\n"; 
    1027                         html += "  <input name=\"infoTypename\" type=\"hidden\" value=\"" + typename + "\" />\n"; 
    1028                         html += "</form>\n"; 
    1029  
    1030                         html += "    </td>\n"; 
    1031                         html += "    <td valign=\"top\">\n"; 
     783         
     784        private String getDisplayRemarkPage() { 
     785                String html = ""; 
     786         
     787                /*if (System.currentTimeMillis() - remarkTimeStamp > 5 * 60 * 1000){ 
     788                        html += "<p>I have no pending question for you.</p>\n"; 
    1032789                        html += "      <form action=\"\" method=\"POST\">\n"; 
    1033790                        html += "        <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1034                         html += "        <input name=\"page\" type=\"hidden\" value=\"delete\" />\n"; 
     791                        html += "        <input name=\"action\" type=\"hidden\" value=\"endInteract\" />\n"; 
     792                        html += "        <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    1035793                        html += "      </form>\n"; 
    1036                         html += "    </td>\n"; 
    1037                         html += "  </tr>\n"; 
    1038                         html += "</table>\n"; 
    1039  
    1040                 } else { 
    1041  
    1042                         html += "<p>No corresponding information exists.</p>\n"; 
    1043                         html += "<form action=\"\" method=\"POST\">\n"; 
    1044                         html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1045                         html += "  <input name=\"page\" type=\"hidden\" value=\"delete\" />\n"; 
    1046                         html += "</form>\n"; 
    1047                 } 
    1048  
    1049                 return html; 
    1050         } 
    1051  
    1052         private String getDeletedInfoPage(String username, String typename) { 
    1053                 String html = ""; 
    1054  
    1055                 html += "<p>Deleted information of type <i>" + userData.getTypeRealname(typename) + "</i> for <i>" + userData.getUserRealname(username) + "</i>.</p>\n"; 
    1056                 html += "<form action=\"\" method=\"POST\">\n"; 
    1057                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1058                 html += "  <input name=\"page\" type=\"hidden\" value=\"delete\" />\n"; 
    1059                 html += "</form>\n"; 
    1060  
    1061                 return html; 
    1062         } 
    1063  
    1064         private String getHistoryPage() { 
    1065                 String html = ""; 
    1066  
    1067                 html += "<p>For which type of information do you want to view the history of requests?</p>\n"; 
    1068  
     794                } else {*/ 
     795                 
     796                // Displaying the remark if there is one 
     797                if (remarkTimeStamp > 0 && remarkUser.equals(loginUser)) 
     798                        html += "<p>Hi " + loginUser + ", " + remarkText + "</p>\n"; 
     799                else 
     800                        html += "<p>Hi " + loginUser + ", what would you like to tell me? </p>\n"; 
     801                 
    1069802                html += "<table>\n"; 
    1070803                html += "  <tr>\n"; 
     804 
     805                html += "    <td valign=\"top\">\n"; 
     806                 
     807                // User's reply 
     808                html += "      <form action=\"\" method=\"POST\">\n"; 
     809 
     810                html += "  <tr>\n"; 
     811                html += "    <td valign=\"top\">Reply:</td>\n"; 
    1071812                html += "    <td>\n"; 
    1072  
    1073                 for (int i = 0; i < userData.getInformationTypes().size(); i++) { 
    1074                         InformationType informationType = userData.getInformationTypes().get(i); 
    1075  
    1076                         if (i == Math.round((double) userData.getInformationTypes().size() / 2)) { 
    1077                                 html += "    </td>\n"; 
    1078                                 html += "    <td valign=\"top\">\n"; 
    1079                         } 
    1080  
    1081                         html += "      <form action=\"\" method=\"POST\">\n"; 
    1082                         html += "        <input name=\"submit\" type=\"submit\" value=\"" + informationType.getRealname() + "\" />\n"; 
    1083                         html += "        <input name=\"page\" type=\"hidden\" value=\"historyInfo\" />\n"; 
    1084                         html += "        <input name=\"infoUsername\" type=\"hidden\" value=\"" + loginUser.getUsername() + "\" />\n"; 
    1085                         html += "        <input name=\"infoTypename\" type=\"hidden\" value=\"" + informationType.getTypename() + "\" />\n"; 
    1086                         html += "      </form>\n"; 
    1087                 } 
    1088  
    1089                 html += "    </td>\n"; 
     813                html += "      <textarea name=\"answer\" rows=\"5\" cols=\"40\"></textarea>\n"; 
     814                html += "    </td>\n"; 
     815                html += "  </tr>\n"; 
     816                html += "  <tr>\n"; 
     817                html += "    <td></td>\n"; 
     818                html += "    <td>\n"; 
     819                html += "      <input name=\"submit\" type=\"submit\" value=\"Submit\" />\n"; 
     820                html += "      <input name=\"action\" type=\"hidden\" value=\"reply\" />\n"; 
     821                html += "      <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     822                html += "    </td>\n"; 
     823                html += "  </tr>\n"; 
     824                html += "      </form>\n"; 
     825                 
     826                html += "    </td>\n"; 
     827 
    1090828                html += "  </tr>\n"; 
    1091829                html += "</table>\n"; 
    1092  
    1093                 return html; 
    1094         } 
    1095  
    1096         private String getHistoryInfoPage(String username, String typename) { 
    1097                 String html = ""; 
    1098                 html += "<p>History of requests for information of type <i>" + userData.getTypeRealname(typename) + "</i>:</p>\n"; 
    1099                 LinkedList<InformationItem> informationItems = userData.getInformationItems(username, typename); 
    1100                 if (informationItems.size() > 0) { 
    1101                         for (InformationItem informationItem : informationItems) { 
    1102                                 html += "<p>\n"; 
    1103                                 //html += informationItem.getContent() + "<br/>\n"; 
    1104                                 html += informationItem.getContent().replaceAll("\n", "<br/>") + "<br/>\n"; 
    1105                                 Calendar calendar = Calendar.getInstance(); 
    1106                                 calendar.setTimeInMillis(informationItem.getTimeProvided()); 
    1107                                 html += "  <a class=\"small\">\n"; 
    1108                                 html += "    Provided at: " + SIMPLE_DATE_FORMAT.format(calendar.getTime()) + "<br/>\n"; 
    1109                                 html += "    Authorised roles: "; 
    1110                                 if (informationItem.getAuthorisedRoles().size() > 0) { 
    1111                                         for (String authorisedRole : informationItem.getAuthorisedRoles()) { 
    1112                                                 if (authorisedRole != informationItem.getAuthorisedRoles().get(0)) { 
    1113                                                         html += ", "; 
    1114                                                 } 
    1115                                                 html += userData.getRoleRealname(authorisedRole); 
    1116                                         } 
    1117                                 } else { 
    1118                                         html += "-"; 
    1119                                 } 
    1120                                 html += "<br/>\n"; 
    1121                                 html += "    Authorised users: "; 
    1122                                 if (informationItem.getAuthorisedUsers().size() > 0) { 
    1123                                         for (String authorisedUser : informationItem.getAuthorisedUsers()) { 
    1124                                                 if (authorisedUser != informationItem.getAuthorisedUsers().get(0)) { 
    1125                                                         html += ", "; 
    1126                                                 } 
    1127                                                 html += userData.getUserRealname(authorisedUser); 
    1128                                         } 
    1129                                 } else { 
    1130                                         html += "-"; 
    1131                                 } 
    1132                                 html += "<br/>\n"; 
    1133                                 if (informationItem.getRequests().size() > 0) { 
    1134                                         for (teambuddyInterface.Request request : informationItem.getRequests()) { 
    1135                                                 calendar.setTimeInMillis(request.getTime()); 
    1136                                                 String strTimeRequested = SIMPLE_DATE_FORMAT.format(calendar.getTime()); 
    1137                                                 html += "    &raquo; requested " + strTimeRequested + " by " + userData.getUserRealname(request.getUsername()); 
    1138                                                 if (!request.isAuthorised()) { 
    1139                                                         html += " <i class=\"small\">(not authorised)</i>"; 
    1140                                                 } 
    1141                                                 html += "<br/>\n"; 
    1142                                         } 
    1143                                 } else { 
    1144                                         html += "    <i class=\"small\">No requests</i>\n"; 
    1145                                 } 
    1146                                 html += "  </a>\n"; 
    1147                                 html += "</p>\n"; 
    1148                         } 
    1149                 } else { 
    1150                         html += "<p>No corresponding information exists.</p>\n"; 
    1151                 } 
    1152                 html += "<form action=\"\" method=\"POST\">\n"; 
    1153                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1154                 html += "  <input name=\"page\" type=\"hidden\" value=\"history\" />\n"; 
    1155                 html += "</form>\n"; 
    1156                 return html; 
    1157         } 
    1158  
     830         
     831                return html; 
     832        } 
     833         
     834        private String getReplyPage(String reply) { 
     835                String html = ""; 
     836         
     837                html += "<p>You said: </p>\n"; 
     838                html += "<p>" + reply + "</p>\n"; 
     839                html += "      <form action=\"\" method=\"POST\">\n"; 
     840                html += "        <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
     841                html += "        <input name=\"action\" type=\"hidden\" value=\"logout\" />\n"; 
     842                html += "        <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
     843                html += "      </form>\n"; 
     844                loginUser = ""; 
     845                return html; 
     846        } 
     847         
    1159848        private String getChargingPage() { 
    1160849                String html = ""; 
     
    1257946 
    1258947                return html; 
    1259         } 
    1260  
    1261         private String getReportPage() { 
    1262                 String html = ""; 
    1263  
    1264                 // calculate time difference since last logout 
    1265                 Calendar calendar = Calendar.getInstance(); 
    1266                 long timeNow = calendar.getTimeInMillis(); 
    1267                 long timeLastLogout = loginUser.getTimeLastLogout(); 
    1268                 long hoursDiff = Math.round((double) (timeNow - timeLastLogout) / 1000 / 60 / 60); 
    1269  
    1270                 // build difference string 
    1271                 String strDiff = null; 
    1272                 if (hoursDiff < 24) { 
    1273                         strDiff = hoursDiff + " hour"; 
    1274                         if (hoursDiff != 1) { 
    1275                                 strDiff += "s"; 
    1276                         } 
    1277                 } else { 
    1278                         long daysDiff = Math.round((double) hoursDiff / 24); 
    1279                         strDiff = daysDiff + " day"; 
    1280                         if (daysDiff != 1) { 
    1281                                 strDiff += "s"; 
    1282                         } 
    1283                 } 
    1284  
    1285                 // format last logout time 
    1286                 calendar.setTimeInMillis(timeLastLogout); 
    1287                 String strTimeLastLogout = SIMPLE_DATE_FORMAT.format(calendar.getTime()); 
    1288  
    1289                 // get information items and requests since last logout 
    1290                 String loginUsername = loginUser.getUsername(); 
    1291                 LinkedList<InformationItem> newInformationItems = userData.getAuthorisedInformationItemsProvidedSince(loginUsername, timeLastLogout); 
    1292                 LinkedList<InformationItem> informationItemsNewRequests = userData.getInformationItemsRequestedSince(loginUsername, timeLastLogout); 
    1293  
    1294                 html += "<p>Your last session ended <b>" + strTimeLastLogout + " (about " + strDiff + " ago)</b>.</p>\n"; 
    1295  
    1296                 html += "<hr/>\n"; 
    1297  
    1298                 html += "<p>\n"; 
    1299                 html += "Since then <b>" + newInformationItems.size() + " information items</b> were provided.<br/>\n"; 
    1300                 html += "<a class=\"small\">This excludes information you are not authorised to receive.</a>\n"; 
    1301                 html += "</p>\n"; 
    1302  
    1303                 html += "<p>Since then <b>" + userData.countRequestsSince(informationItemsNewRequests, timeLastLogout) + " requests</b> happened on information provided by you.</p>\n"; 
    1304  
    1305                 html += "<hr/>\n"; 
    1306                 html += "<b>New information:</b>\n"; 
    1307  
    1308                 for (InformationItem newInformationItem : newInformationItems) { 
    1309                         User userProvided = userData.getUserProvided(newInformationItem); 
    1310                         html += "<form action=\"\" method=\"POST\">\n"; 
    1311                         html += "<p>\n"; 
    1312                         calendar.setTimeInMillis(newInformationItem.getTimeProvided()); 
    1313                         html += "  Information of type '" + userData.getTypeRealname(newInformationItem.getTypename()) + "'<br/>\n"; 
    1314                         html += "  <a class=\"small\">"; 
    1315                         String strTimeProvided = SIMPLE_DATE_FORMAT.format(calendar.getTime()); 
    1316                         html += "    &raquo; provided " + strTimeProvided + " by " + userProvided.getRealname(); 
    1317                         html += "  </a>\n"; 
    1318                         html += "  <br/>\n"; 
    1319                         html += "  <input name=\"submit\" type=\"submit\" value=\"Request this information\" />\n"; 
    1320                         html += "  <input name=\"action\" type=\"hidden\" value=\"reportInfo\" />\n"; 
    1321                         html += "  <input name=\"page\" type=\"hidden\" value=\"reportInfo\" />\n"; 
    1322                         html += "  <input name=\"infoUsername\" type=\"hidden\" value=\"" + userProvided.getUsername() + "\" />\n"; 
    1323                         html += "  <input name=\"infoTypename\" type=\"hidden\" value=\"" + newInformationItem.getTypename() + "\" />\n"; 
    1324                         html += "  <input name=\"infoId\" type=\"hidden\" value=\"" + newInformationItem.getId() + "\" />\n"; 
    1325                         html += "  <input name=\"infoTimeProvided\" type=\"hidden\" value=\"" + newInformationItem.getTimeProvided() + "\" />\n"; 
    1326                         html += "</p>\n"; 
    1327                         html += "</form>\n"; 
    1328                 } 
    1329  
    1330                 html += "<hr/>\n"; 
    1331                 html += "<b>New requests:</b>\n"; 
    1332  
    1333                 for (InformationItem informationItemNewRequests : informationItemsNewRequests) { 
    1334                         html += "<p>\n"; 
    1335                         html += "  <a class=\"small\">" + userData.getTypeRealname(informationItemNewRequests.getTypename()) + "</a><br/>\n"; 
    1336                         //html += informationItemNewRequests.getContent() + "<br/>\n"; 
    1337                         html += informationItemNewRequests.getContent().replaceAll("\n", "<br/>") + "<br/>\n"; 
    1338                         html += "  <a class=\"small\">\n"; 
    1339                         for (teambuddyInterface.Request newRequest : userData.getRequestsSince(informationItemNewRequests, timeLastLogout)) { 
    1340                                 calendar.setTimeInMillis(newRequest.getTime()); 
    1341                                 String strTimeRequested = SIMPLE_DATE_FORMAT.format(calendar.getTime()); 
    1342                                 html += "    &raquo; requested " + strTimeRequested + " by " + userData.getUserRealname(newRequest.getUsername()); 
    1343                                 if (!newRequest.isAuthorised()) { 
    1344                                         html += " <i class=\"small\">(not authorised)</i>"; 
    1345                                 } 
    1346                                 html += "<br/>\n"; 
    1347                         } 
    1348                         html += "  </a>\n"; 
    1349                         html += "</p>\n"; 
    1350                 } 
    1351  
    1352                 html += "<hr/>\n"; 
    1353  
    1354                 html += "<form action=\"\" method=\"POST\">\n"; 
    1355                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1356                 html += "  <input name=\"page\" type=\"hidden\" value=\"start\" />\n"; 
    1357                 html += "</form>\n"; 
    1358  
    1359                 return html; 
    1360         } 
    1361  
    1362         private String getReportInfoPage(String username, String typename, long timeProvided) { 
    1363                 String html = ""; 
    1364  
    1365                 Calendar calendar = Calendar.getInstance(); 
    1366                 calendar.setTimeInMillis(timeProvided); 
    1367                 String strTimeProvided = SIMPLE_DATE_FORMAT.format(calendar.getTime()); 
    1368  
    1369                 html += "<p>\n"; 
    1370                 html += "  Requesting new information item of type <i>" + userData.getTypeRealname(typename) + "</i>...<br/>\n"; 
    1371                 html += "  <a class=\"small\">\n"; 
    1372                 html += "  &raquo; provided " + strTimeProvided + " by " + userData.getUserRealname(username) + "</p>\n"; 
    1373                 html += "  </a>\n"; 
    1374                 html += "</p>\n"; 
    1375                 html += "<form action=\"\" method=\"POST\">\n"; 
    1376                 html += "  <input name=\"submit\" type=\"submit\" value=\"Back\" />\n"; 
    1377                 html += "  <input name=\"page\" type=\"hidden\" value=\"report\" />\n"; 
    1378                 html += "</form>\n"; 
    1379  
    1380                 return html; 
    1381         } 
    1382  
    1383         private void needInformation(String loginUsername, String username, String typeRealname) { 
    1384                 if (interfaceCompetency != null) { 
    1385  
    1386                         // obtain an id for the needed information               
    1387                         informationNeedId++; 
    1388                         String id = new Integer(informationNeedId).toString(); 
    1389  
    1390                         // write needed information to blackboard 
    1391                         setBBObjectProperty(BB_INFORMATION_NEEDS, id, typeRealname); 
    1392  
    1393                         // write requester to WorldModel 
    1394                         setWMObjectProperty(WM_INFORMATION_REQUESTERS, id, loginUsername); 
    1395  
    1396                         // write provider to WorldModel 
    1397                         setWMObjectProperty(WM_INFORMATION_PROVIDERS, id, username); 
    1398  
    1399                         // raise remote action 
    1400                         ArrayList<String> parameters = new ArrayList<String>(); 
    1401                         parameters.add(username); 
    1402                         parameters.add(id); 
    1403                         raiseMindAction(loginUsername, "needInformation", parameters); 
    1404                 } 
    1405948        } 
    1406949 
     
    14881031        } 
    14891032 
     1033         
    14901034} 
  • scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface/TimeoutTask.java

    r1263 r1562  
    2121        public void run() { 
    2222                setWMObjectProperty(wmCurrentPlatform, wmInterfaceInteraction, "False"); 
     23                interfaceCompetency.resetAll(); 
    2324        } 
    2425 
  • scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface/UserData.java

    r1490 r1562  
    33import java.util.ArrayList; 
    44import java.util.Calendar; 
     5import java.util.HashMap; 
    56import java.util.LinkedList; 
     7import java.util.StringTokenizer; 
     8 
     9import cmion.storage.WorldModel; 
    610 
    711public class UserData { 
     
    913        private long nextId; 
    1014 
    11         private ArrayList<InformationType> informationTypes; 
     15        //private ArrayList<InformationType> informationTypes; 
    1216 
    13         private ArrayList<Role> roles; 
     17        //private ArrayList<Role> roles; 
    1418 
    15         private ArrayList<User> users; 
     19        //private ArrayList<User> users; 
    1620 
    17         private User guestUser; 
    18  
    19         public UserData() { 
    20                 informationTypes = new ArrayList<InformationType>(); 
    21                 roles = new ArrayList<Role>(); 
    22                 users = new ArrayList<User>(); 
     21        //private User guestUser; 
     22        private static final String GUEST = "Guest"; 
     23        //private static final String INFOID = "infoId"; 
     24        //private static final String NEXTID = "nextId"; 
     25         
     26        private ArrayList<String> informationTypes; 
     27        private ArrayList<String> roles; 
     28        private ArrayList<String> users; 
     29         
     30        private WorldModel wm; 
     31         
     32        public UserData(WorldModel wm) { 
     33                this.wm = wm; 
     34                informationTypes = new ArrayList<String>(); 
     35                roles = new ArrayList<String>(); 
     36                users = new ArrayList<String>(); 
     37                /*if (this.getWMObjectProperty(INFOID, NEXTID) != null) 
     38                        nextId = (Long)this.getWMObjectProperty(INFOID, NEXTID); 
     39                else 
     40                        nextId = 0;*/ 
     41        } 
     42         
     43        public ArrayList<String> getUsers() { 
     44                ArrayList<String> agents = wm.getAgentNames(); 
     45                users = new ArrayList<String>(); 
     46                 
     47                for (String agent : agents) 
     48                { 
     49                        String isUser = (String)this.getWMAgentProperty(agent, "isUser"); 
     50                        if(Boolean.valueOf(isUser) && !agent.equals("Guest")) 
     51                        { 
     52                                users.add(agent); 
     53                        }                                
     54                } 
     55                return users; 
     56        } 
     57         
     58        public ArrayList<String> getRoles() { 
     59                ArrayList<String> objects = wm.getObjectNames(); 
     60                roles = new ArrayList<String>(); 
     61                 
     62                for (String object: objects) 
     63                { 
     64                        if (Boolean.valueOf((String)this.getWMObjectProperty(object, "isRole"))) { 
     65                                roles.add(object); 
     66                        }                                
     67                } 
     68                return roles; 
     69        } 
     70         
     71        public String getUsername(String user) { 
     72                if (this.getWMAgentProperty(user, "username") != null) { 
     73                        return (String)this.getWMAgentProperty(user, "username"); 
     74                } 
     75                return ""; 
    2376        } 
    2477 
    25         public long getNextId() { 
    26                 return nextId; 
     78        public void setUsername(String user, String username) { 
     79                this.setWMAgentProperty(user, "username", username); 
    2780        } 
    2881 
    29         public void setNextId(long nextId) { 
    30                 this.nextId = nextId; 
     82        public boolean userIsAround(String user) { 
     83                if (this.getWMAgentProperty(user, "around") != null) { 
     84                        return Boolean.valueOf((String)this.getWMAgentProperty(user, "around")); 
     85                } 
     86                return false; 
     87        } 
     88         
     89        public String getUserWhereabout(String user) { 
     90                if (this.getWMAgentProperty(user, "whereabout") != null) { 
     91                        return (String)this.getWMAgentProperty(user, "whereabout"); 
     92                } 
     93                return ""; 
    3194        } 
    3295 
    33         public ArrayList<InformationType> getInformationTypes() { 
    34                 return informationTypes; 
     96        public void setUserWhereabout(String user, String whereabout) { 
     97                this.setWMAgentProperty(user, "whereabout", whereabout); 
    3598        } 
    3699 
    37         public void setInformationTypes(ArrayList<InformationType> informationTypes) { 
    38                 this.informationTypes = informationTypes; 
     100        public String getPassword(String user) { 
     101                if (this.getWMAgentProperty(user, "password") != null) { 
     102                        return (String)this.getWMAgentProperty(user, "password"); 
     103                } 
     104                return ""; 
     105        } 
     106         
     107        public void setPassword(String user, String password) { 
     108                this.setWMAgentProperty(user, "password", password); 
    39109        } 
    40110 
    41         public ArrayList<Role> getRoles() { 
    42                 return roles; 
     111        public String getGuestUser() { 
     112                return GUEST; 
     113        } 
     114         
     115        public String getUserRealname(String user) { 
     116                if (this.getWMAgentProperty(user, "realname") != null) { 
     117                        return (String)this.getWMAgentProperty(user, "realname"); 
     118                } 
     119                return ""; 
    43120        } 
    44121 
    45         public void setRoles(ArrayList<Role> roles) { 
    46                 this.roles = roles; 
     122        public void setUserRealname(String user, String realname) { 
     123                this.setWMAgentProperty(user, "realname", realname); 
    47124        } 
    48125 
    49         public ArrayList<User> getUsers() { 
    50                 return users; 
     126        public String getRolename(String user) { 
     127                if (this.getWMAgentProperty(user, "rolename") != null) { 
     128                        return (String)this.getWMAgentProperty(user, "rolename"); 
     129                } 
     130                return ""; 
    51131        } 
    52132 
    53         public void setUsers(ArrayList<User> users) { 
    54                 this.users = users; 
     133        public String getRoleRealname(String role) { 
     134                if (this.getWMObjectProperty(role, "realname") != null) { 
     135                        return (String)this.getWMObjectProperty(role, "realname"); 
     136                } 
     137                return ""; 
     138        } 
     139         
     140        public void setMadeRemark(String user, String madeRemark) { 
     141                this.setWMAgentProperty(user, "madeRemark", madeRemark); 
    55142        } 
    56143 
    57         public User getGuestUser() { 
    58                 return guestUser; 
     144        public String getMadeRemark(String user) { 
     145                if (this.getWMAgentProperty(user, "madeRemark") != null) { 
     146                        return (String)this.getWMAgentProperty(user, "madeRemark"); 
     147                } 
     148                return ""; 
     149        } 
     150         
     151        public long getTimeLastLogin(String user) { 
     152                if (this.getWMAgentProperty(user, "timeLastLogin") != null){ 
     153                        return (Long)this.getWMAgentProperty(user, "timeLastLogin"); 
     154                } 
     155                return -1; 
    59156        } 
    60157 
    61         public void setGuestUser(User guestUser) { 
    62                 this.guestUser = guestUser; 
     158        public void setTimeLastLogin(String user, long timeLastLogin) { 
     159                this.setWMAgentProperty(user, "timeLastLogin", timeLastLogin); 
    63160        } 
    64161 
    65         public User getUser(String username) { 
    66                 if (guestUser.getUsername().equals(username)) { 
    67                         return guestUser; 
    68                 } else { 
    69                         for (User user : users) { 
    70                                 if (user.getUsername().equals(username)) { 
    71                                         return user; 
    72                                 } 
    73                         } 
     162        public long getTimeLastLogout(String user) { 
     163                if (this.getWMAgentProperty(user, "timeLastLogout") != null){ 
     164                        return (Long)this.getWMAgentProperty(user, "timeLastLogout"); 
     165                } 
     166                return -1; 
     167        } 
     168 
     169        public void setTimeLastLogout(String user, long timeLastLogout) { 
     170                this.setWMAgentProperty(user, "timeLastLogout", timeLastLogout); 
     171        } 
     172 
     173        private Object getWMObjectProperty(String objectName, String propertyName) { 
     174                if (wm.hasObject(objectName)) { 
     175                        return wm.getObject(objectName).getPropertyValue(propertyName); 
    74176                } 
    75177                return null; 
    76178        } 
    77  
    78         public String getUserRealname(String username) { 
    79                 if (guestUser.getUsername().equals(username)) { 
    80                         return guestUser.getRealname(); 
     179         
     180        private void setWMAgentProperty(String agentName, String propertyName, Object propertyValue) { 
     181                if (wm.hasAgent(agentName)) { 
     182                        wm.getAgent(agentName).requestSetProperty(propertyName, propertyValue); 
    81183                } else { 
    82                         for (User user : users) { 
    83                                 if (user.getUsername().equals(username)) { 
    84                                         return user.getRealname(); 
    85                                 } 
    86                         } 
     184                        HashMap<String, Object> properties = new HashMap<String, Object>(); 
     185                        properties.put(propertyName, propertyValue); 
     186                        wm.requestAddAgent(agentName, properties); 
     187                }                
     188        } 
     189         
     190        private Object getWMAgentProperty(String agentName, String propertyName) { 
     191                if (wm.hasAgent(agentName)) { 
     192                        return wm.getAgent(agentName).getPropertyValue(propertyName); 
    87193                } 
    88194                return null; 
    89         } 
    90  
    91         public String getUserRolename(String username) { 
    92                 if (guestUser.getUsername().equals(username)) { 
    93                         return guestUser.getRolename(); 
    94                 } else { 
    95                         for (User user : users) { 
    96                                 if (user.getUsername().equals(username)) { 
    97                                         return user.getRolename(); 
    98                                 } 
    99                         } 
    100                 } 
    101                 return null; 
    102         } 
    103  
    104         public String getRoleRealname(String rolename) { 
    105                 for (Role role : roles) { 
    106                         if (role.getRolename().equals(rolename)) { 
    107                                 return role.getRealname(); 
    108                         } 
    109                 } 
    110                 return null; 
    111         } 
    112  
    113         public String getTypeRealname(String typename) { 
    114                 for (InformationType informationType : informationTypes) { 
    115                         if (informationType.getTypename().equals(typename)) { 
    116                                 return informationType.getRealname(); 
    117                         } 
    118                 } 
    119                 return null; 
    120         } 
    121  
    122         public InformationType getType(String typename) { 
    123                 for (InformationType informationType : informationTypes) { 
    124                         if (informationType.getTypename().equals(typename)) { 
    125                                 return informationType; 
    126                         } 
    127                 } 
    128                 return null; 
    129         } 
    130  
    131         // return user who provided informationItem 
    132         public User getUserProvided(InformationItem informationItem) { 
    133  
    134                 // loop over users 
    135                 for (User user : users) { 
    136                         if (user.getInformationItems().contains(informationItem)) { 
    137                                 return user; 
    138                         } 
    139                 } 
    140  
    141                 return null; 
    142         } 
    143  
    144         // request information items of typename provided by username for which loginUser is authorised (creates a request)  
    145         public LinkedList<InformationItem> requestAuthorisedInformationItems(String username, String typename, String loginUsername) { 
    146                 LinkedList<InformationItem> authorisedInformationItems = new LinkedList<InformationItem>(); 
    147  
    148                 for (InformationItem informationItem : getUser(username).getInformationItems()) { 
    149                         if (informationItem.getTypename().equals(typename)) { 
    150  
    151                                 // add request 
    152                                 Request request = new Request(); 
    153                                 request.setTime(Calendar.getInstance().getTimeInMillis()); 
    154                                 request.setUsername(loginUsername); 
    155                                 request.setAuthorised(false); 
    156                                 informationItem.getRequests().add(request); 
    157  
    158                                 // check for authorisation 
    159                                 boolean authorised = false; 
    160                                 if (username.equals(loginUsername)) { 
    161                                         authorised = true; 
    162                                 } else { 
    163                                         for (String authorisedRole : informationItem.getAuthorisedRoles()) { 
    164                                                 if (authorisedRole.equals(getUserRolename(loginUsername))) { 
    165                                                         authorised = true; 
    166                                                 } 
    167                                         } 
    168                                         for (String authorisedUser : informationItem.getAuthorisedUsers()) { 
    169                                                 if (authorisedUser.equals(loginUsername)) { 
    170                                                         authorised = true; 
    171                                                 } 
    172                                         } 
    173                                 } 
    174  
    175                                 if (authorised) { 
    176                                         authorisedInformationItems.add(informationItem); 
    177                                         request.setAuthorised(true); 
    178                                 } 
    179                         } 
    180                 } 
    181  
    182                 return authorisedInformationItems; 
    183         } 
    184  
    185         // provide information item for username 
    186         public InformationItem provideInformationItem(String username, String typename, String content, String[] authorisedRoles, String[] authorisedUsers) { 
    187  
    188                 // create information item 
    189                 InformationItem informationItem = new InformationItem(); 
    190                 informationItem.setId(nextId++); 
    191                 informationItem.setTypename(typename); 
    192                 informationItem.setTimeProvided(Calendar.getInstance().getTimeInMillis()); 
    193  
    194                 // authorised roles 
    195                 if (authorisedRoles != null) { 
    196                         for (String authorisedRole : authorisedRoles) { 
    197                                 informationItem.getAuthorisedRoles().add(authorisedRole); 
    198                         } 
    199                 } 
    200  
    201                 // authorised users 
    202                 if (authorisedUsers != null) { 
    203                         for (String authorisedUser : authorisedUsers) { 
    204                                 informationItem.getAuthorisedUsers().add(authorisedUser); 
    205                         } 
    206                 } 
    207  
    208                 // content 
    209                 informationItem.setContent(content); 
    210  
    211                 // add information item 
    212                 getUser(username).getInformationItems().add(informationItem); 
    213  
    214                 return informationItem; 
    215         } 
    216  
    217         // delete information item for username  
    218         public boolean deleteInformationItem(String username, long deleteId) { 
    219                 User user = getUser(username); 
    220                 for (InformationItem informationItem : user.getInformationItems()) { 
    221                         if (deleteId == informationItem.getId()) { 
    222                                 user.getInformationItems().remove(informationItem); 
    223                                 return true; 
    224                         } 
    225                 } 
    226                 return false; 
    227         } 
    228  
    229         // delete information items for username  
    230         public int deleteInformationItems(String username, LinkedList<Long> deleteIds) { 
    231                 int deletedCount = 0; 
    232  
    233                 User user = getUser(username); 
    234                 for (int i = user.getInformationItems().size() - 1; i >= 0; i--) { 
    235                         InformationItem informationItem = user.getInformationItems().get(i); 
    236                         if (deleteIds.contains(informationItem.getId())) { 
    237                                 user.getInformationItems().remove(informationItem); 
    238                                 deletedCount++; 
    239                         } 
    240                 } 
    241  
    242                 return deletedCount; 
    243         } 
    244  
    245         // get information items of typename for username 
    246         public LinkedList<InformationItem> getInformationItems(String username, String typename) { 
    247                 LinkedList<InformationItem> informationItems = new LinkedList<InformationItem>(); 
    248  
    249                 for (InformationItem informationItem : getUser(username).getInformationItems()) { 
    250                         if (informationItem.getTypename().equals(typename)) { 
    251                                 informationItems.add(informationItem); 
    252                         } 
    253                 } 
    254  
    255                 return informationItems; 
    256         } 
    257  
    258         // return information items provided since timeSince for which loginUsername is authorised 
    259         public LinkedList<InformationItem> getAuthorisedInformationItemsProvidedSince(String loginUsername, long timeSince) { 
    260                 LinkedList<InformationItem> authorisedInformationItemsSince = new LinkedList<InformationItem>(); 
    261  
    262                 // loop over users 
    263                 for (User user : users) { 
    264                         String username = user.getUsername(); 
    265  
    266                         // loop over information items                   
    267                         for (InformationItem informationItem : user.getInformationItems()) { 
    268  
    269                                 // check if information was provided after timeSince 
    270                                 if (informationItem.getTimeProvided() > timeSince) { 
    271  
    272                                         // check for authorisation 
    273                                         boolean authorised = false; 
    274                                         if (username.equals(loginUsername)) { 
    275                                                 authorised = true; 
    276                                         } else { 
    277                                                 for (String authorisedRole : informationItem.getAuthorisedRoles()) { 
    278                                                         if (authorisedRole.equals(getUserRolename(loginUsername))) { 
    279                                                                 authorised = true; 
    280                                                         } 
    281                                                 } 
    282                                                 for (String authorisedUser : informationItem.getAuthorisedUsers()) { 
    283                                                         if (authorisedUser.equals(loginUsername)) { 
    284                                                                 authorised = true; 
    285                                                         } 
    286                                                 } 
    287                                         } 
    288  
    289                                         if (authorised) { 
    290                                                 authorisedInformationItemsSince.add(informationItem); 
    291                                         } 
    292  
    293                                 } 
    294                         } 
    295  
    296                 } 
    297  
    298                 return authorisedInformationItemsSince; 
    299         } 
    300  
    301         // return information items requested since timeSince which were provided by username 
    302         public LinkedList<InformationItem> getInformationItemsRequestedSince(String username, long timeSince) { 
    303                 LinkedList<InformationItem> informationItemsRequestedSince = new LinkedList<InformationItem>(); 
    304  
    305                 // loop over information items 
    306                 for (InformationItem informationItem : getUser(username).getInformationItems()) { 
    307  
    308                         // loop over requests 
    309                         for (Request request : informationItem.getRequests()) { 
    310  
    311                                 // check if requests happened after timeSince 
    312                                 if (request.getTime() > timeSince) { 
    313                                         informationItemsRequestedSince.add(informationItem); 
    314                                         // add information item only once 
    315                                         break; 
    316                                 } 
    317  
    318                         } 
    319                 } 
    320  
    321                 return informationItemsRequestedSince; 
    322         } 
    323  
    324         // return information item with id provided by username 
    325         public InformationItem getInformationItem(String username, long id) { 
    326  
    327                 // loop over information items 
    328                 for (InformationItem informationItem : getUser(username).getInformationItems()) { 
    329  
    330                         if (informationItem.getId() == id) { 
    331                                 return informationItem; 
    332                         } 
    333                 } 
    334  
    335                 return null; 
    336         } 
    337  
    338         // return information items which are authorised to all roles 
    339         public LinkedList<InformationItem> getInformationItemsPublic() { 
    340                 LinkedList<InformationItem> informationItemsPublic = new LinkedList<InformationItem>(); 
    341  
    342                 // loop over users 
    343                 for (User user : users) { 
    344  
    345                         // loop over information items 
    346                         for (InformationItem informationItem : user.getInformationItems()) { 
    347  
    348                                 boolean authorised = true; 
    349  
    350                                 // loop over roles  
    351                                 for (Role role : roles) { 
    352                                         if (!informationItem.getAuthorisedRoles().contains(role.getRolename())) { 
    353                                                 authorised = false; 
    354                                                 break; 
    355                                         } 
    356                                 } 
    357  
    358                                 if (authorised) { 
    359                                         informationItemsPublic.add(informationItem); 
    360                                 } 
    361  
    362                         } 
    363  
    364                 } 
    365  
    366                 return informationItemsPublic; 
    367         } 
    368  
    369         // returns the user for a specific information item 
    370         public User getUser(InformationItem informationItem) { 
    371                 for (User user : users) { 
    372                         for (InformationItem informationItemCurrent : user.getInformationItems()) { 
    373                                 if (informationItemCurrent == informationItem) { 
    374                                         return user; 
    375                                 } 
    376                         } 
    377                 } 
    378                 return null; 
    379         } 
    380  
    381         // request information item with id provided by username for which loginUsername is authorised (creates a request) 
    382         public InformationItem requestAuthorisedInformationItem(String loginUsername, String username, long id) { 
    383  
    384                 // loop over information items 
    385                 for (InformationItem informationItem : getUser(username).getInformationItems()) { 
    386  
    387                         if (informationItem.getId() == id) { 
    388  
    389                                 // add request 
    390                                 Request request = new Request(); 
    391                                 request.setTime(Calendar.getInstance().getTimeInMillis()); 
    392                                 request.setUsername(loginUsername); 
    393                                 request.setAuthorised(false); 
    394                                 informationItem.getRequests().add(request); 
    395  
    396                                 // check for authorisation 
    397                                 boolean authorised = false; 
    398                                 if (username.equals(loginUsername)) { 
    399                                         authorised = true; 
    400                                 } else { 
    401                                         for (String authorisedRole : informationItem.getAuthorisedRoles()) { 
    402                                                 if (authorisedRole.equals(getUserRolename(loginUsername))) { 
    403                                                         authorised = true; 
    404                                                 } 
    405                                         } 
    406                                         for (String authorisedUser : informationItem.getAuthorisedUsers()) { 
    407                                                 if (authorisedUser.equals(loginUsername)) { 
    408                                                         authorised = true; 
    409                                                 } 
    410                                         } 
    411                                 } 
    412  
    413                                 if (authorised) { 
    414                                         request.setAuthorised(true); 
    415                                         return informationItem; 
    416                                 } 
    417  
    418                         } 
    419  
    420                 } 
    421  
    422                 return null; 
    423         } 
    424  
    425         // return requests since timeSince for informationItem 
    426         public LinkedList<Request> getRequestsSince(InformationItem informationItem, long timeSince) { 
    427                 LinkedList<Request> requestsSince = new LinkedList<Request>(); 
    428  
    429                 // loop over requests 
    430                 for (Request request : informationItem.getRequests()) { 
    431  
    432                         // check if requests happened after timeSince 
    433                         if (request.getTime() > timeSince) { 
    434                                 requestsSince.add(request); 
    435                         } 
    436                 } 
    437  
    438                 return requestsSince; 
    439         } 
    440  
    441         // return request count since timeSince for informationItems 
    442         public int countRequestsSince(LinkedList<InformationItem> informationItems, long timeSince) { 
    443                 int count = 0; 
    444  
    445                 // loop over information items 
    446                 for (InformationItem informationItem : informationItems) { 
    447  
    448                         // loop over requests 
    449                         for (Request request : informationItem.getRequests()) { 
    450  
    451                                 // check if requests happened after timeSince 
    452                                 if (request.getTime() > timeSince) { 
    453                                         count++; 
    454                                 } 
    455                         } 
    456                 } 
    457  
    458                 return count; 
    459         } 
    460  
     195        }        
    461196} 
  • scenarios/TeamBuddy/TeambuddyInterface/src/teambuddyInterface/XMLAccess.java

    r1203 r1562  
    22 
    33import java.io.*; 
     4import java.text.SimpleDateFormat; 
     5import java.util.ArrayList; 
     6import java.util.Calendar; 
     7import java.util.HashMap; 
     8import java.util.Iterator; 
     9 
    410import org.w3c.dom.*; 
    511import javax.xml.parsers.*; 
     
    1016public class XMLAccess { 
    1117 
     18        public static final String INTERACTION_FILENAME = "data/characters/minds/Interactions.xml"; 
     19        public static final String REMARKS_FILENAME = "data/characters/minds/Remarks.xml"; 
    1220        private final static boolean WRITE_BAK = true; 
    1321        private final static String SUFFIX_BAK = ".bak"; 
    14  
    15         public UserData loadXML(String inputFilename) { 
     22        private final static String GUEST = "Guest"; 
     23        private int maxID; 
     24         
     25        public HashMap<String,String> loadRemarksXML() { 
     26                HashMap<String,String> remarks = new HashMap<String,String>(); 
     27                 
     28                try { 
     29                        File file = new File(REMARKS_FILENAME); 
     30                        if (file.exists()){ 
     31                                DocumentBuilderFactory dbFac = DocumentBuilderFactory.newInstance(); 
     32                                DocumentBuilder docBuilder = dbFac.newDocumentBuilder(); 
     33                                Document doc = docBuilder.parse(file); 
     34                                remarks = readRemarksDocument(doc); 
     35                        } 
     36                } catch (Exception e) { 
     37                        e.printStackTrace(); 
     38                } 
     39                return remarks; 
     40        } 
     41 
     42        public ArrayList<Interaction> loadInteractionsXML() { 
     43                ArrayList<Interaction> interactions = new ArrayList<Interaction>(); 
     44                maxID = -1; 
     45         
     46                try { 
     47                        File file = new File(INTERACTION_FILENAME); 
     48                        if (file.exists()){ 
     49                                DocumentBuilderFactory dbFac = DocumentBuilderFactory.newInstance(); 
     50                                DocumentBuilder docBuilder = dbFac.newDocumentBuilder(); 
     51                                Document doc = docBuilder.parse(file); 
     52                                interactions = readInteractionsDocument(doc); 
     53                        } 
     54                } catch (Exception e) { 
     55                        e.printStackTrace(); 
     56                } 
     57                return interactions; 
     58        } 
     59         
     60        private HashMap<String,String> readRemarksDocument(Document doc) { 
     61 
     62                String remarkName = ""; 
     63                String remarkText = ""; 
     64                 
     65                HashMap<String,String> remarks = new HashMap<String,String>(); 
     66                Node remarksNode = doc.getElementsByTagName("Remarks").item(0); 
     67         
     68                // parse remarks children nodes 
     69                NodeList remarkChildNodes = remarksNode.getChildNodes(); 
     70                for (int i = 0; i < remarkChildNodes.getLength(); i++) { 
     71                        Node remarkChildNode = remarkChildNodes.item(i); 
     72                                // parse remark 
     73                                if (remarkChildNode.getNodeName().equals("Remark")) { 
     74                                        // parse remark attributes 
     75                                        NamedNodeMap remarkAttributes = remarkChildNode.getAttributes(); 
     76                                        for (int k = 0; k < remarkAttributes.getLength(); k++) { 
     77                                                Node remarkAttributeNode = remarkAttributes.item(k); 
     78                                                if (remarkAttributeNode.getNodeName().equals("name")) { 
     79                                                        remarkName = remarkAttributeNode.getNodeValue(); 
     80                                                } else if (remarkAttributeNode.getNodeName().equals("text")) { 
     81                                                        remarkText = remarkAttributeNode.getNodeValue(); 
     82                                                } 
     83                                        } 
     84                                } 
     85                                 
     86                                if (!remarkName.equals("") && !remarkText.equals("")){ 
     87                                        System.out.println("Remark " + remarkName + ": " + remarkText); 
     88                                        remarks.put(remarkName, remarkText); 
     89                                        remarkName = ""; 
     90                                        remarkText = ""; 
     91                                }                                
     92                        } 
     93                return remarks; 
     94        } 
     95         
     96        private ArrayList<Interaction> readInteractionsDocument(Document doc) { 
     97                 
     98                ArrayList<Interaction> interactions = new ArrayList<Interaction>(); 
     99                Node interactionsNode = doc.getElementsByTagName("Interactions").item(0); 
     100         
     101                // parse remarks children nodes 
     102                NodeList interactionsChildNodes = interactionsNode.getChildNodes(); 
     103                for (int i = 0; i < interactionsChildNodes.getLength(); i++) { 
     104                        Node interactionChildNode = interactionsChildNodes.item(i); 
     105                                // parse remark 
     106                                Interaction interaction = new Interaction(); 
     107                                if (interactionChildNode.getNodeName().equals("Interaction")) { 
     108                                        // parse remark attributes 
     109                                        NamedNodeMap interactionAttributes = interactionChildNode.getAttributes(); 
     110                                        for (int k = 0; k < interactionAttributes.getLength(); k++) { 
     111                                                Node interactionAttributeNode = interactionAttributes.item(k); 
     112                                                if (interactionAttributeNode.getNodeName().equals("id")) { 
     113                                                        interaction.setID(Integer.valueOf(interactionAttributeNode.getNodeValue())); 
     114                                                } else if (interactionAttributeNode.getNodeName().equals("user")) { 
     115                                                        interaction.setUser(interactionAttributeNode.getNodeValue()); 
     116                                                } else if (interactionAttributeNode.getNodeName().equals("remark")) { 
     117                                                        interaction.setRemark(interactionAttributeNode.getNodeValue()); 
     118                                                } else if (interactionAttributeNode.getNodeName().equals("reply")) { 
     119                                                        interaction.setReply(interactionAttributeNode.getNodeValue()); 
     120                                                } else if (interactionAttributeNode.getNodeName().equals("timeStamp")) { 
     121                                                        interaction.setTimeStamp(interactionAttributeNode.getNodeValue()); 
     122                                                } 
     123                                                 
     124                                                if(interaction.getID() > maxID) 
     125                                                        maxID = interaction.getID(); 
     126                                        } 
     127                                } 
     128                                 
     129                                if ((interaction != null) && !(interactions.contains(interaction))){ 
     130                                        interactions.add(interaction); 
     131                                }                                
     132                        } 
     133                return interactions; 
     134        } 
     135         
     136        public int getMaxID(){ 
     137                return maxID; 
     138        } 
     139         
     140        public void saveInteractionsXML(ArrayList<Interaction> interactions) { 
     141                try { 
     142                        TransformerFactory transFac = TransformerFactory.newInstance(); 
     143                        Transformer transformer = transFac.newTransformer(); 
     144                        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
     145                        transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     146                        StringWriter stringWriter = new StringWriter(); 
     147                        StreamResult result = new StreamResult(stringWriter); 
     148                        Document doc = writeInteractionsDocument(interactions); 
     149                        DOMSource source = new DOMSource(doc); 
     150                        transformer.transform(source, result); 
     151                        String xmlString = stringWriter.toString(); 
     152                        BufferedWriter out = new BufferedWriter(new FileWriter(INTERACTION_FILENAME)); 
     153                        out.write(xmlString); 
     154                        out.close(); 
     155                } catch (Exception e) { 
     156                        e.printStackTrace(); 
     157                } 
     158                if (WRITE_BAK) { 
     159                        copyFile(INTERACTION_FILENAME, INTERACTION_FILENAME + SUFFIX_BAK); 
     160                } 
     161        } 
     162         
     163        private Document writeInteractionsDocument(ArrayList<Interaction> interactions) { 
     164 
     165                // document 
     166                Document doc = null; 
     167 
     168                try { 
     169                        DocumentBuilderFactory dbFac = DocumentBuilderFactory.newInstance(); 
     170                        DocumentBuilder docBuilder = dbFac.newDocumentBuilder(); 
     171                        doc = docBuilder.newDocument(); 
     172                } catch (Exception e) { 
     173                        e.printStackTrace(); 
     174                } 
     175 
     176                // user replies          
     177                Element userRepliesElement = doc.createElement("Interactions"); 
     178                doc.appendChild(userRepliesElement); 
     179 
     180                // replies 
     181                for (Interaction interaction: interactions){ 
     182                        Element replyElement = doc.createElement("Interaction"); 
     183                        replyElement.setAttribute("id", String.valueOf(interaction.getID())); 
     184                        replyElement.setAttribute("user", interaction.getUser()); 
     185                        replyElement.setAttribute("remark", interaction.getRemark()); 
     186                        replyElement.setAttribute("reply", interaction.getReply()); 
     187                        replyElement.setAttribute("timeStamp", interaction.getTimeStamp()); 
     188                        userRepliesElement.appendChild(replyElement);                                            
     189                } 
     190                return doc;      
     191        } 
     192 
     193        private void copyFile(String filenameSrc, String filenameDst) { 
     194                try { 
     195                        BufferedReader in = new BufferedReader(new FileReader(filenameSrc)); 
     196                        BufferedWriter out = new BufferedWriter(new FileWriter(filenameDst)); 
     197                        String line; 
     198                        while ((line = in.readLine()) != null) { 
     199                                out.write(line); 
     200                                out.newLine(); 
     201                        } 
     202                        out.close(); 
     203                        in.close(); 
     204                } catch (Exception e) { 
     205                        e.printStackTrace(); 
     206                } 
     207        } 
     208 
     209         
     210        /*public UserData loadXML(String inputFilename) { 
    16211                UserData userData = null; 
    17212                try { 
     
    30225                // create user data 
    31226                Node userDataNode = doc.getElementsByTagName("UserData").item(0); 
    32                 UserData userData = new UserData(); 
     227                UserData userData = null; //new UserData(); 
    33228 
    34229                // parse user data 
     
    38233                        if (userDataAttributeNode.getNodeName().equals("nextId")) { 
    39234                                long nextId = Long.valueOf(userDataAttributeNode.getNodeValue()); 
    40                                 userData.setNextId(nextId); 
     235                                //userData.setNextId(nextId); 
    41236                        } 
    42237                } 
     
    62257                                                Node roleNode = rolesChildNode; 
    63258                                                Role role = new Role(); 
    64                                                 userData.getRoles().add(role); 
     259                                                //**userData.getRoles().add(role); 
    65260 
    66261                                                // parse role attributes 
     
    94289                                                Node informationTypeNode = informationTypesChildNode; 
    95290                                                InformationType informationType = new InformationType(); 
    96                                                 userData.getInformationTypes().add(informationType); 
     291                                                //**userData.getInformationTypes().add(informationType); 
    97292 
    98293                                                // parse information type attributes 
     
    142337                                                Node guestUserNode = usersChildNode; 
    143338                                                User guestUser = new User(); 
    144                                                 userData.setGuestUser(guestUser); 
     339                                                //**userData.setGuestUser(guestUser); 
    145340 
    146341                                                // parse guest user attributes 
     
    170365                                                Node userNode = usersChildNode; 
    171366                                                User user = new User(); 
    172                                                 userData.getUsers().add(user); 
     367                                                //Meiyii 
     368                                                //userData.getUsers().add(user); 
    173369 
    174370                                                // parse user attributes 
     
    305501                // user data 
    306502                Element userDataElement = doc.createElement("UserData"); 
    307                 userDataElement.setAttribute("nextId", String.valueOf(userData.getNextId())); 
     503                //userDataElement.setAttribute("nextId", String.valueOf(userData.getNextId())); 
    308504                doc.appendChild(userDataElement); 
    309505 
     
    311507                Element rolesElement = doc.createElement("Roles"); 
    312508                userDataElement.appendChild(rolesElement); 
    313                 for (Role role : userData.getRoles()) { 
     509                for (String role : userData.getRoles()) { 
    314510                        Element roleElement = doc.createElement("Role"); 
    315                         roleElement.setAttribute("rolename", role.getRolename()); 
    316                         roleElement.setAttribute("realname", role.getRealname()); 
     511                        roleElement.setAttribute("rolename", userData.getRolename(role)); 
     512                        roleElement.setAttribute("realname", userData.getRoleRealname(role)); 
    317513                        rolesElement.appendChild(roleElement); 
    318                 } 
    319  
    320                 // information types 
    321                 Element informationTypesElement = doc.createElement("InformationTypes"); 
    322                 userDataElement.appendChild(informationTypesElement); 
    323                 for (InformationType informationType : userData.getInformationTypes()) { 
    324                         Element informationTypeElement = doc.createElement("InformationType"); 
    325                         informationTypeElement.setAttribute("typename", informationType.getTypename()); 
    326                         informationTypeElement.setAttribute("realname", informationType.getRealname()); 
    327                         informationTypesElement.appendChild(informationTypeElement); 
    328  
    329                         // default authorised roles 
    330                         for (String authorisedRoleDefault : informationType.getAuthorisedRolesDefault()) { 
    331                                 Element authorisedRoleDefaultElement = doc.createElement("AuthorisedRoleDefault"); 
    332                                 authorisedRoleDefaultElement.setTextContent(authorisedRoleDefault); 
    333                                 informationTypeElement.appendChild(authorisedRoleDefaultElement); 
    334                         } 
    335514                } 
    336515 
     
    340519                // guest user 
    341520                Element guestUserElement = doc.createElement("GuestUser"); 
    342                 guestUserElement.setAttribute("username", userData.getGuestUser().getUsername()); 
    343                 guestUserElement.setAttribute("password", userData.getGuestUser().getPassword()); 
    344                 guestUserElement.setAttribute("realname", userData.getGuestUser().getRealname()); 
    345                 guestUserElement.setAttribute("rolename", userData.getGuestUser().getRolename()); 
    346                 guestUserElement.setAttribute("timeLastLogin", String.valueOf(userData.getGuestUser().getTimeLastLogin())); 
    347                 guestUserElement.setAttribute("timeLastLogout", String.valueOf(userData.getGuestUser().getTimeLastLogout())); 
     521                guestUserElement.setAttribute("username", userData.getUsername(GUEST)); 
     522                guestUserElement.setAttribute("password", userData.getPassword(GUEST)); 
     523                guestUserElement.setAttribute("realname", userData.getUserRealname(GUEST)); 
     524                guestUserElement.setAttribute("rolename", userData.getRolename(GUEST)); 
     525                guestUserElement.setAttribute("timeLastLogin", String.valueOf(userData.getTimeLastLogin(GUEST))); 
     526                guestUserElement.setAttribute("timeLastLogout", String.valueOf(userData.getTimeLastLogout(GUEST))); 
    348527                usersElement.appendChild(guestUserElement); 
    349528 
    350529                // users 
    351                 for (User user : userData.getUsers()) { 
     530                //Meiyii 
     531                for (String user : userData.getUsers()) { 
    352532                        Element userElement = doc.createElement("User"); 
    353                         userElement.setAttribute("username", user.getUsername()); 
    354                         userElement.setAttribute("password", user.getPassword()); 
    355                         userElement.setAttribute("realname", user.getRealname()); 
    356                         userElement.setAttribute("rolename", user.getRolename()); 
    357                         userElement.setAttribute("timeLastLogin", String.valueOf(user.getTimeLastLogin())); 
    358                         userElement.setAttribute("timeLastLogout", String.valueOf(user.getTimeLastLogout())); 
     533                        userElement.setAttribute("username", user); 
     534                        userElement.setAttribute("password", userData.getPassword(user)); 
     535                        userElement.setAttribute("realname", userData.getUserRealname(user)); 
     536                        userElement.setAttribute("rolename", userData.getRolename(user)); 
     537                        userElement.setAttribute("timeLastLogin", String.valueOf(userData.getTimeLastLogin(user))); 
     538                        userElement.setAttribute("timeLastLogout", String.valueOf(userData.getTimeLastLogout(user))); 
    359539                        usersElement.appendChild(userElement); 
    360540 
    361                         // information items 
     541                } 
     542                /* // information items 
    362543                        for (InformationItem informationItem : user.getInformationItems()) { 
    363544                                Element informationItemElement = doc.createElement("InformationItem"); 
     
    437618                        e.printStackTrace(); 
    438619                } 
    439         } 
    440  
     620        }*/ 
    441621} 
Note: See TracChangeset for help on using the changeset viewer.