00001 using System;
00002 using System.Collections.Generic;
00003 using System.Text;
00004 using Shared;
00005
00009 namespace Server.Net
00010 {
00017 public class RMIAccessHandler : MarshalByRefObject, IAccessHandler
00018 {
00019 #region Constructor, properties and private variables
00020
00021 private Person user = null;
00022 private Catalogue catalogue;
00023
00028 public RMIAccessHandler(Catalogue catalogue)
00029 {
00030 this.catalogue = catalogue;
00031 }
00035 public string WhoAmI
00036 {
00037 get
00038 {
00039 if (user == null)
00040 return null;
00041 return user.UserName;
00042 }
00043 }
00044
00045 #endregion
00046
00047 #region Projects
00053 public ProjectInfo GetProjectInfo(int id)
00054 {
00055 if (user == null)
00056 return new ProjectInfo();
00057
00058 return catalogue.GetProjectInfo(id);
00059 }
00064 public ProjectInfo[] ListProjects()
00065 {
00066 if (user == null)
00067 return null;
00068
00069 return catalogue.ListProjects();
00070 }
00077 public Messages CreateProject(ProjectInfo pi, out int id)
00078 {
00079 id = -1;
00080 if (user == null)
00081 return Messages.OperationNotAllowed;
00082
00083 return catalogue.CreateProject(pi, user.UserName, out id);
00084 }
00090 public Messages UpdateProject(ProjectInfo info)
00091 {
00092 if (user == null)
00093 return Messages.OperationNotAllowed;
00094
00095 Project p = catalogue.GetProject(info.id);
00096 if (p == null)
00097 return Messages.Fail;
00098
00099 Role person = p.GetPerson(user.UserName);
00100 if (person == null)
00101 return Messages.OperationNotAllowed;
00102
00103 return catalogue.UpdateProject(info);
00104 }
00110 public Messages DeleteProject(int id)
00111 {
00112 if (user == null)
00113 return Messages.OperationNotAllowed;
00114
00115 if (user.Moderator == true) return catalogue.DeleteProject(id);
00116
00117 Project p = catalogue.GetProject(id);
00118 Role r = p.GetPerson(user.UserName);
00119
00120 if (r != null && r.Person == user && r.Type == RoleType.Creator)
00121 {
00122 return catalogue.DeleteProject(id);
00123 }
00124 else
00125 {
00126 return Messages.OperationNotAllowed;
00127 }
00128 }
00134 public ProjectInfo[] GetUsersProjects(string username)
00135 {
00136 return catalogue.GetUsersProjects(username);
00137 }
00138 #endregion
00139
00140 #region Literature
00141
00146 public LiteratureInfo[] ListLiterature()
00147 {
00148 if (user == null)
00149 return new LiteratureInfo[0];
00150
00151 return catalogue.ListLiterature();
00152 }
00158 public LiteratureInfo GetLiteratureInfo(int id)
00159 {
00160 if (user == null)
00161 return new LiteratureInfo();
00162
00163 return catalogue.GetLiteratureInfo(id);
00164
00165 }
00173 public Messages CreateLiterature(out int id, LiteratureInfo info)
00174 {
00175 id = -1;
00176 if (user == null)
00177 return Messages.OperationNotAllowed;
00178
00179 info.creator = user.UserName;
00180
00181 return catalogue.CreateLiterature(info, out id);
00182 }
00188 public Messages UpdateLiterature(LiteratureInfo info)
00189 {
00190 if (user == null)
00191 return Messages.OperationNotAllowed;
00192
00193 LiteratureInfo l = GetLiteratureInfo(info.id);
00194 if (l.creator == user.UserName)
00195 return catalogue.UpdateLiterature(info);
00196
00197 return Messages.OperationNotAllowed;
00198 }
00205 public Messages DeleteLiterature(int id)
00206 {
00207 if (user == null)
00208 return Messages.OperationNotAllowed;
00209
00210 if (user.Moderator == true) return catalogue.DeleteLiterature(id);
00211
00212 LiteratureInfo li = catalogue.GetLiteratureInfo(id);
00213 if (li.creator == user.UserName)
00214 return catalogue.DeleteLiterature(id);
00215 else
00216 return Messages.OperationNotAllowed;
00217 }
00218
00219 #endregion
00220
00221 #region References
00222
00228 public ReferenceInfo[] ListReferences(int project)
00229 {
00230 if (user == null)
00231 return null;
00232
00233 return catalogue.ListReferences(project);
00234 }
00241 public ReferenceInfo GetReferenceInfo(int project, int literature)
00242 {
00243 if (user == null)
00244 return new ReferenceInfo();
00245
00246 return catalogue.GetReferenceInfo(project, literature);
00247 }
00253 public Messages CreateReference(ReferenceInfo ri)
00254 {
00255 if (user == null)
00256 return Messages.OperationNotAllowed;
00257
00258 Role m = catalogue.GetRole(ri.project, user.UserName);
00259 if (m == null || m.Type == RoleType.Supervisor)
00260 return Messages.OperationNotAllowed;
00261
00262 return catalogue.CreateReference(ri);
00263 }
00269 public Messages UpdateReference(ReferenceInfo ri)
00270 {
00271 if (user == null)
00272 return Messages.OperationNotAllowed;
00273
00274 Role m = catalogue.GetRole(ri.project, user.UserName);
00275 if (m == null || m.Type == RoleType.Supervisor)
00276 return Messages.OperationNotAllowed;
00277
00278 return catalogue.UpdateReference(ri);
00279 }
00287 public Messages DeleteReference(int project, int literature)
00288 {
00289 if (user == null)
00290 return Messages.OperationNotAllowed;
00291
00292 Role m = catalogue.GetRole(project, user.UserName);
00293 if (m == null || m.Type == RoleType.Supervisor)
00294 return Messages.OperationNotAllowed;
00295
00296 return catalogue.DeleteReference(project, literature);
00297 }
00298
00299 #endregion
00300
00301 #region Search
00302
00308 public List<SearchResult> Search(string query)
00309 {
00310 if (user == null)
00311 return null;
00312
00313 return catalogue.Search(query, ResultType.All);
00314 }
00321 public List<SearchResult> Search(string query, ResultType searchTypes)
00322 {
00323 if (user == null)
00324 return null;
00325
00326 return catalogue.Search(query, searchTypes);
00327 }
00333 public List<SearchResult> SearchByTag(string tag)
00334 {
00335 if (user == null)
00336 return null;
00337
00338 return catalogue.SearchByTag(tag);
00339 }
00345 public ISearchable[] ListItems(ResultType type)
00346 {
00347 if (user == null)
00348 return new ISearchable[0];
00349
00350 return catalogue.ListItems(type);
00351 }
00357 public ISearchable[] ListItems(ResultType type, string creator)
00358 {
00359 if (user == null)
00360 return new ISearchable[0];
00361
00362 return catalogue.ListItems(type,creator);
00363 }
00364
00365
00366
00367 #endregion
00368
00369 #region Suggestions
00370
00376 public SuggestionInfo[] ListSuggestions(int project)
00377 {
00378 if (user == null)
00379 return null;
00380
00381 return catalogue.ListSuggestions(project);
00382 }
00389 public SuggestionInfo GetSuggestionInfo(int project, int literature)
00390 {
00391 if (user == null)
00392 return new SuggestionInfo();
00393
00394 return catalogue.GetSuggestionInfo(project, literature);
00395 }
00401 public Messages CreateSuggestion(SuggestionInfo si)
00402 {
00403 if (user == null)
00404 return Messages.OperationNotAllowed;
00405
00406 Role m = catalogue.GetRole(si.project, user.UserName);
00407 if (m == null || m.Type != RoleType.Supervisor)
00408 return Messages.OperationNotAllowed;
00409
00410 return catalogue.CreateSuggestion(si);
00411 }
00417 public Messages UpdateSuggestion(SuggestionInfo si)
00418 {
00419 if (user == null)
00420 return Messages.OperationNotAllowed;
00421
00422 Role m = catalogue.GetRole(si.project, user.UserName);
00423 if (m == null)
00424 return Messages.OperationNotAllowed;
00425
00426 return catalogue.UpdateSuggestion(si);
00427 }
00428
00429
00430 #endregion
00431
00432 #region Reviews
00433
00440 public ReviewInfo GetReviewInfo(int project, int literature)
00441 {
00442 if (user == null)
00443 return new ReviewInfo();
00444
00445 return catalogue.GetReviewInfo(project, literature);
00446 }
00452 public ReviewInfo[] ListReviews(int project)
00453 {
00454 if (user == null)
00455 return null;
00456
00457 return catalogue.ListReviews(project);
00458 }
00464 public Messages CreateReview(ReviewInfo ri)
00465 {
00466 ri.person = this.user.UserName;
00467 if (user == null)
00468 return Messages.OperationNotAllowed;
00469
00470 Role m = catalogue.GetRole(ri.project, user.UserName);
00471 if (m == null || m.Type == RoleType.Supervisor)
00472 return Messages.OperationNotAllowed;
00473
00474 return catalogue.CreateReview(ri);
00475 }
00481 public Messages UpdateReview(ReviewInfo ri)
00482 {
00483 if (user == null)
00484 return Messages.OperationNotAllowed;
00485
00486 Role m = catalogue.GetRole(ri.project, user.UserName);
00487 if (m == null || m.Type == RoleType.Supervisor)
00488 return Messages.OperationNotAllowed;
00489
00490 return catalogue.UpdateReview(ri);
00491 }
00492
00493
00494 #endregion
00495
00496 #region Tags
00497
00503 public TagInfo[] GetAllTags()
00504 {
00505 return GetTags(null, -1, null);
00506 }
00514 public TagInfo[] GetTags(string tag, int id, string username)
00515 {
00516 if (user == null)
00517 return new TagInfo[0];
00518
00519 return catalogue.GetTags(tag, id, username);
00520 }
00527 public Messages AddTag(string tag, int id)
00528 {
00529 if (user != null)
00530 {
00531 catalogue.AddTag(tag, id, user.UserName);
00532 return Messages.OK;
00533 }
00534 else return Messages.OperationNotAllowed;
00535 }
00542 public Messages RemoveTag(string tag, int id)
00543 {
00544 if (user != null)
00545 {
00546 catalogue.RemoveTag(tag, id, user.UserName);
00547 return Messages.OK;
00548 }
00549 else return Messages.OperationNotAllowed;
00550 }
00551
00552
00553 #endregion
00554
00555 #region Persons & Roles
00556
00562 public PersonInfo GetPersonInfo(string username)
00563 {
00564 if (user == null)
00565 return new PersonInfo();
00566 return catalogue.GetPersonInfo(username);
00567 }
00577 public Messages Register(string user, string password, string name, string department, string email)
00578 {
00579 return catalogue.RegisterUser(user, password, name, department, email);
00580 }
00587 public Messages Login(string user, string password)
00588 {
00589 Person p = catalogue.GetUser(user);
00590 if (p == null)
00591 return Messages.LoginFailed;
00592
00593 if (p.Password == password)
00594 {
00595 this.user = p;
00596 return Messages.OK;
00597 }
00598
00599 return Messages.LoginFailed;
00600 }
00607 public Messages UpdatePerson(PersonInfo pi)
00608 {
00609 if (user == null)
00610 return Messages.OperationNotAllowed;
00611
00612 if (pi.username != user.UserName)
00613 return Messages.OperationNotAllowed;
00614
00615 return catalogue.UpdatePerson(pi);
00616
00617
00618 }
00624 public RoleInfo[] GetRoles(int id)
00625 {
00626 if (user == null)
00627 return null;
00628
00629 return catalogue.GetRoles(id);
00630 }
00639 public Messages AssignUser(string username, int project, RoleType role)
00640 {
00641 if (username == null)
00642 return Messages.Fail;
00643 if (role == RoleType.Creator)
00644 return Messages.OperationNotAllowed;
00645
00646 Project p = catalogue.GetProject(project);
00647 if (p == null)
00648 return Messages.Fail;
00649
00650 Role r = p.GetPerson(user.UserName);
00651 if (r == null || r.Type != RoleType.Creator)
00652 return Messages.OperationNotAllowed;
00653
00654 return catalogue.AssignUser(username, project, role);
00655 }
00663 public Messages UnassignUser(string username, int project)
00664 {
00665 if (username == null)
00666 return Messages.Fail;
00667
00668 Project p = catalogue.GetProject(project);
00669 if (p == null)
00670 return Messages.Fail;
00671
00672 Role r = p.GetPerson(user.UserName);
00673 if (r == null || r.Type != RoleType.Creator)
00674 return Messages.OperationNotAllowed;
00675
00676 Role role = p.GetPerson(username);
00677 if (role == null)
00678 return Messages.Fail;
00679
00680 p.Roles.Remove(role);
00681
00682 return Messages.OK;
00683 }
00684
00685 #endregion
00686
00687 #region Comments
00688
00695 public CommentInfo[] GetComments(int literatureID, int projectID)
00696 {
00697 return catalogue.GetComments(literatureID, projectID);
00698 }
00704 public CommentInfo[] GetComments(int literatureID)
00705 {
00706 return catalogue.GetComments(literatureID);
00707 }
00714 public Messages CreateComment(CommentInfo ci, out int id)
00715 {
00716 return catalogue.CreateComment(ci, out id);
00717 }
00718
00719 #endregion
00720
00725 public StatisticsInfo GetStatistics()
00726 {
00727 if (user == null)
00728 return new StatisticsInfo();
00729 return catalogue.GetStatistics();
00730 }
00731
00736 public List<SearchResult> ShowRelated(int id)
00737 {
00738 if (user == null)
00739 return null;
00740
00741 return catalogue.ShowRelated(id);
00742 }
00743 }
00744 }