4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
P2MessagesCreator.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Author: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz
4  * File: P2MessagesCreator.java
5  * Description: Class provides methods for transforming objects to messages.
6  */
7 
8 /**
9  * @file P2MessagesCreator.java
10  *
11  * @brief Class provides methods for transforming objects to messages.
12  */
13 
14 package cz.vutbr.fit.knot.annotations.comet.protocolV2_0;
15 
20 import java.util.ArrayList;
21 import java.util.Iterator;
22 
23 /**
24  * Class provides methods for transforming objects to messages.
25  *
26  * @brief Class provides methods for transforming objects to messages
27  * @author Martin Petr (xpetrm05)
28  */
29 public class P2MessagesCreator {
30 
31  /**
32  * Method makes string with XML line element.
33  *
34  * @param elementName name of lemeent
35  * @param params paramethers of element
36  *
37  * @return string with element
38  */
39  public static String lineXMLElement(String elementName, String params){
40  StringBuilder result = new StringBuilder();
41  result.append('<');
42  result.append(elementName);
43  result.append(' ');
44  result.append(params);
45  result.append("/>");
46  return result.toString();
47  }
48 
49  /**
50  * Method makes string with XML block element.
51  *
52  * @param elementName name of lemeent
53  * @param params paramethers of element
54  * @param value value of element
55  *
56  * @return string with element
57  */
58  public static String blockXMLElement(String elementName, String params, String value){
59  StringBuilder result = new StringBuilder();
60  result.append('<');
61  result.append(elementName);
62 
63  if(params != null){
64  result.append(" ");
65  result.append(params);
66  }
67 
68  result.append('>');
69  result.append(value);
70  result.append("</");
71  result.append(elementName);
72  result.append('>');
73  return result.toString();
74  }
75 
76  /**
77  * Method make string with XML parameter of element.
78  *
79  * @param name name of parameter
80  * @param value value of parameter
81  *
82  * @return string with paramether
83  */
84  public static String XMLParam(String name, String value){
85  StringBuilder result = new StringBuilder();
86  result.append(name);
87  result.append("=\"");
88  result.append(value);
89  result.append("\" ");
90  return result.toString();
91  }
92 
93  /**
94  * Method create XML message "logged" message with informations about user as
95  * parameters. Here is example of message:
96  *
97  * @verbatim
98  * <logged uri="{user uri}"
99  * login="{user login}"
100  * name="{user name}"
101  * email="{user email address}"
102  * image="{URI of image of user}"/>
103  * @endverbatim
104  *
105  * @param user user that will be transform to message
106  * @return string with message
107  */
108  public static String getXMLLoggedUser(User user){
109  StringBuilder paramsString = new StringBuilder();
110 
111  paramsString.append(XMLParam("uri",user.getURIV2()));
112  paramsString.append(XMLParam("login",user.getLogin()));
113  paramsString.append(XMLParam("name",user.getName()));
114  paramsString.append(XMLParam("email",user.getEmail()));
115  paramsString.append(XMLParam("image",user.getImage()));
116 
117  return lineXMLElement("logged",paramsString.toString());
118  }
119 
120  /**
121  * Method create XML message "user" element with informations about user as
122  * parameters. Displayed parameters can be restricted. Here is example of message:
123  *
124  * @verbatim
125  * <user uri="{user uri}"
126  * login="{user login}"
127  * name="{user name}"
128  * email="{user email address}"
129  * image="{URI of image of user}"/>
130  *
131  * or:
132  *
133  * <user uri="{user uri}"
134  * login="{user login}"
135  * name="{user name}"
136  * email="{user email address}"
137  * image="{URI of image of user}">
138  * <groups>
139  * {list of groups}
140  * </groups>
141  * </user>
142  * @endverbatim
143  *
144  * @param user user that will be transform to message
145  * @param params boolean array that inform which parameter will be include in
146  * final message if it's null all parameters will be include
147  * @return string with message
148  */
149  public static String getXMLUser(User user, boolean params[]){
150  StringBuilder paramsString = new StringBuilder();
151 
152  if(params == null || params[P2Constants.USER_URI_ATTR]){
153  paramsString.append(XMLParam("uri",AppBean.getBaseUserUriV2() + user.getId().toString()));
154  }
155 
156  if(params == null || params[P2Constants.USER_LOGIN_ATTR]){
157  paramsString.append(XMLParam("login",user.getLogin()));
158  }
159 
160  if(params == null || params[P2Constants.USER_NAME_ATTR]){
161  paramsString.append(XMLParam("name",user.getName()));
162  }
163 
164  if(params == null || params[P2Constants.USER_EMAIL_ATTR]){
165  paramsString.append(XMLParam("email",user.getEmail()));
166  }
167 
168  if(params == null || params[P2Constants.USER_IMAGE_ATTR]){
169  paramsString.append(XMLParam("image",user.getImage()));
170  }
171 
172  if(params[P2Constants.USER_GROUPS_ATTR]){
173  Iterator<UserGroup> groupsList = user.getGroups().iterator();
174  StringBuilder groups = new StringBuilder();
175 
176  while(groupsList.hasNext()){
177  UserGroup currentGroup = groupsList.next();
178  String groupParam = XMLParam("uri",currentGroup.getUri());
179  groups.append(lineXMLElement("group",groupParam));
180  }
181 
182  return blockXMLElement("user",paramsString.toString(),groups.toString());
183  }else{
184  return lineXMLElement("user",paramsString.toString());
185  }
186  }
187 
188  /**
189  * The method creates a XML message with a list of users. Here is example
190  * of message:
191  *
192  * @verbatim
193  * <users>
194  * {list of users}
195  * </users>
196  * @endverbatim
197  *
198  * @param users list of users
199  * @param params restrictions for users parameters
200  * @return message with a list of users
201  */
202  public static String getXMLUsersList(ArrayList<User> users, boolean params[]){
203  StringBuilder result = new StringBuilder();
204  Iterator<User> usersIt = users.iterator();
205 
206  while(usersIt.hasNext()){
207  result.append(getXMLUser(usersIt.next(),params));
208  }
209 
210  return blockXMLElement("users",null,result.toString());
211  }
212 
213  /**
214  * The method creates a XML message with a list of users groups. Here is example
215  * of message:
216  *
217  * @verbatim
218  * <userGroups>
219  * {list of users groups}
220  * </userGroups>
221  * @endverbatim
222  *
223  * @param groups list of users groups
224  * @param params restrictions for users parameters in groups
225  * @param withUsers users in group will be included if value is true
226  * @return message with a list of users groups
227  */
228  public static String getXMLGroupsList(ArrayList<UserGroup> groups, boolean withUsers, boolean params[]){
229  StringBuilder result = new StringBuilder();
230  Iterator<UserGroup> groupsIt = groups.iterator();
231 
232  while(groupsIt.hasNext()){
233  result.append(getXMLGroup(groupsIt.next(),withUsers,params));
234  }
235 
236  return blockXMLElement("userGroups",null,result.toString());
237  }
238 
239  /**
240  * Method create XML message "group" element with informations about users group
241  * as parameters wit or without users in group. Displayed parameters of users
242  * can be restricted. Here is example of message:
243  *
244  * @verbatim
245  * <group name="{group name}"
246  * uri="{URI of group}">
247  * {list of users in group}
248  * </group>
249  * @endverbatim
250  *
251  * @param group users group
252  * @param withUsers users in group will be included if value is true
253  * @param params restrictions for users parameters in groups
254  * @return XML message with users group
255  */
256  public static String getXMLGroup(UserGroup group, boolean withUsers, boolean params[]){
257  StringBuilder value = new StringBuilder();
258  StringBuilder groupParams = new StringBuilder();
259 
260  // make parameters
261  groupParams.append(XMLParam("name",group.getName()));
262  groupParams.append(XMLParam("uri",group.getUri()));
263 
264  if(withUsers){
265  // get all users in current group
266  Iterator<User> usersIt = group.getUsers().iterator();
267  while(usersIt.hasNext()){
268  value.append(getXMLUser(usersIt.next(),params));
269  }
270 
271  String elementValue = blockXMLElement("users",null,value.toString());
272  return blockXMLElement("group",groupParams.toString(),elementValue);
273  }else{
274  return lineXMLElement("group", groupParams.toString());
275  }
276  }
277 
278  /**
279  * Method create XML message "settings" element with informations about users
280  * settings. Here is example of message:
281  *
282  * @verbatim
283  * <settings>
284  * {list of users settings}
285  * </settings>
286  * @endverbatim
287  *
288  * @param settings array with user settings
289  * @return XML message with users settings
290  */
291  public static String getXMLUserSettings(ArrayList<Settings> settings){
292  StringBuilder result = new StringBuilder("<settings>");
293 
294  Iterator<Settings> settingsIt = settings.iterator();
295  while(settingsIt.hasNext()){
296  result.append(settingsIt.next().toXMLString());
297  }
298  result.append("</settings>");
299  return result.toString();
300  }
301 } // public class P2MessagesCreator
static String blockXMLElement(String elementName, String params, String value)
Singleton for storing global variables.
Definition: AppBean.java:47
static String getXMLGroupsList(ArrayList< UserGroup > groups, boolean withUsers, boolean params[])
static String lineXMLElement(String elementName, String params)
Class representing user group.
Definition: UserGroup.java:47
Class representing parameter of user settings.
Definition: Settings.java:45
Class representing user.
Definition: User.java:51
static String getXMLGroup(UserGroup group, boolean withUsers, boolean params[])
static String getXMLUsersList(ArrayList< User > users, boolean params[])
Class provides methods for transforming objects to messages.
static String getXMLUserSettings(ArrayList< Settings > settings)