001 /* 002 * ---------------------------------------------------------------------- 003 * Copyright (C) 2009 Enrique Lara (k957@68k.org) 004 * 005 * TinLizard is free software; you can redistribute it and/or 006 * modify it under the terms of the GNU Lesser General Public License 007 * as published by the Free Software Foundation; either version 3.0 008 * of the License, or (at your option) any later version. 009 * 010 * TinLizard is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with TinLizard. If not, see http://www.gnu.org/licenses/. 017 * ---------------------------------------------------------------------- 018 */ 019 package tinlizard.web; 020 021 import tinlizard.annotation.security.RolesAllowed; 022 023 import tinlizard.model.Codeline; 024 import tinlizard.model.User; 025 026 import tinlizard.util.Messages; 027 028 import java.util.Collection; 029 import java.util.Date; 030 031 import javax.servlet.http.HttpServletResponse; 032 033 import org.codehaus.plexus.util.StringUtils; 034 035 import org.kohsuke.stapler.StaplerRequest; 036 import org.kohsuke.stapler.StaplerResponse; 037 import org.kohsuke.stapler.export.Exported; 038 039 /** 040 * Decorate User for Stapler. 041 */ 042 public final class UserWeb extends ObjectWeb<User> { 043 private final User subject; 044 045 public UserWeb(final User user) { 046 if (user == null) { 047 throw new IllegalStateException(Messages.error_1016()); 048 } 049 050 this.subject = user; 051 } 052 053 protected User getSubject() { 054 return this.subject; 055 } 056 057 public Integer getId() { 058 return subject.getId(); 059 } 060 061 public String getName() { 062 return subject.getName(); 063 } 064 065 @Exported 066 public String getEmail() { 067 return subject.getEmail(); 068 } 069 070 @Exported 071 public Date getCreated() { 072 return subject.getCreated(); 073 } 074 075 @Exported 076 public String getCreatedBy() { 077 return subject.getCreatedBy(); 078 } 079 080 @Exported 081 public Date getLastModified() { 082 return subject.getLastModified(); 083 } 084 085 @Exported 086 public String getLastModifiedBy() { 087 return subject.getLastModifiedBy(); 088 } 089 090 @Exported(visibility = 1) 091 public CodelineCollectionWeb getCodelines() { 092 Collection<Codeline> codelines = this.subject.getCodelines(); 093 094 if (codelines != null) { 095 return new CodelineCollectionWeb(codelines, Messages._Codelines()); 096 } else { 097 return null; 098 } 099 } 100 101 @RolesAllowed(RoleNames.ADMIN) 102 public void doDelete(final StaplerRequest request, final StaplerResponse response) throws Exception { 103 subject.delete(); 104 response.sendRedirect(request.getContextPath()); 105 } 106 107 //XXX prevent updating id? 108 @RolesAllowed(RoleNames.USER) 109 public void doUpdate(final StaplerRequest request, final StaplerResponse response) throws Exception { 110 if (StringUtils.equals(request.getUserPrincipal().getName(), subject.getName()) || request.isUserInRole(RoleNames.ADMIN)) { 111 request.bindParameters(subject, "user."); 112 subject.update(); 113 gotoMyIndex(request, response); 114 } else { 115 response.sendError(HttpServletResponse.SC_FORBIDDEN); 116 } 117 } 118 }