Підсистема реєстрації потрібна для того, щоб у систему можна було додавати користувачів. На даному етапі розробки системи, користувача можна зареєструвати двома способами:
а) реєстрація користувачем;
б) реєстрація системним адміністратором.
При першому варіанті реєстрації користувач заходить на форму реєстрації за посиланням, вводить свої особисті дані та дані для майбутньої авторизації. Після цього йому присвоюється роль користувача і він може приступати до користування системою.
У другому випадку, системний адміністратор самостійно вводить дані користувача, задає йому роль у системі(на даному етапі присутні лише дві ролі – юзер та адміністратор, причому один користувач може об’єднувати у собі обидві ці ролі). Після додавання всієї інформації про користувача та успішної реєстрації користувач, після авторизації, може приступати до роботи у системі.
Програмний код реєстрації користувача приведено нижче:
String name = (String) req.getParameter("name");
UserManagerImpl um = new UserManagerImpl();
|
|
User user = um.load(name);
if (user == null) {
req.getSession().setAttribute("show_pass_error", "");
user = new User();
user.setName(name);
Date d = new Date();
boolean er = false;
List errors_date = new ArrayList();
user.setBirth(d);
user.setEmail(req.getParameter("eMail"));
user.setFirstName(req.getParameter("firstName"));
user.setLastName(req.getParameter("lastName"));
user.setPassword(req.getParameter("password"));
try {
StringTokenizer st = new StringTokenizer(req
.getParameter("birthDay"), "-");
d.setDate(Integer.parseInt(st.nextToken()));
d.setMonth(Integer.parseInt(st.nextToken()) - 1);
d.setYear(Integer.parseInt(st.nextToken()) - 1900);
} catch (Exception e) {
errors_date.add("error in date");
er = true;
}
if (!er) {
UserValidator valid = new UserValidator();
List errors = valid.vilidateFields(user);
if (errors.size() > 0) {
System.out.println("have errors");
req.getSession().setAttribute("errors", errors);
resp.sendRedirect("regestry.jsp");
} else {
RoleManagerImpl rm = new RoleManagerImpl();
Role role = rm.getRole("user");
user.addRole(role);
um.create(user);
role = (Role) req.getSession().getAttribute("role");
if (role!= null) {
try {
if (role.getRole().equals("admin")) {
resp.sendRedirect("getallusers.jsp");
} else { resp.sendRedirect("registergood.jsp");
}
} catch (Exception e) { resp.sendRedirect("registergood.jsp");
}
} else {
resp.sendRedirect("registergood.jsp");
}
}
} else {
user.setBirth(null);
req.getSession().setAttribute("erruser", user);
req.getSession().setAttribute("errors", errors_date);
resp.sendRedirect("regestry.jsp");
}
} else {
String error = "Error, same login has exist already";
req.getSession().setAttribute("show_pass_error", error);
resp.sendRedirect("regestry.jsp"); }
Адміністратор та користувач, під час реєстрації повинні ввести вісі дані коректно, тому варіація та зберігання даних про користувача однакове. Приведений вище код буде виконаний при будь-якому з видів реєстрації.
Підсистема додавання електронного документу
В основу концепцій роботи підсистеми документообігу покладено принцип, який можна описати наступними кроками:
а) користувач завантажує за допомогою форми на сервер деякий документ;
|
|
б) документ зберігається на жорсткому диску сервера;
в) документ реєструється у реєстрі документів, що було завантажено;
г) користувачу, що завантажив документ надаються права на редагування документу;
д) користувачу, що завантажив документ надаються права на надання прав доступу до цього документу.
Завдяки тому, що данні про електронний документ зберігаються у БД, а сам документ на жорсткому диску, дана система виграє час на пошуку документів(оскільки БД не засмічується великими за обсягами документами), і водночас виграє час на доступі до файлів, за рахунок майже прямих посилань(детальніше це описано в описі підсистеми ведення статистики редагування документів).
Програмний код завантаження документу має вигляд:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setSizeThreshold(1 * 1024); // 1 KB
fileItemFactory.setRepository(tmpDir);
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
try {
List items = uploadHandler.parseRequest(request);
Iterator itr = items.iterator();
User user = (User)request.getSession().getAttribute("user");
request.getSession().setAttribute("user", user);
DocumentManagerImpl documentManagerImpl = new DocumentManagerImpl();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (!item.isFormField()) {
File file = new File(destinationDir, item.getName());
item.write(file);
Document document = new Document();
document.setName(item.getName());
document.setPath(DESTINATION_DIR_PATH+"//"+item.getName());
Set<User> userSet = new HashSet<User>();
userSet.add(user);
document.setUser(userSet);
documentManagerImpl.create(document);
}
}
response.sendRedirect("index.jsp");
} catch (FileUploadException ex) {
log("Error encountered while parsing the request", ex);
} catch (Exception ex) {
log("Error encountered while uploading file", ex);
}}
Менеджер роботи з документами DocumentManagerImpl під час додавання до системи документу присвоює йому версію номер один, та задає ім’я влсника.