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.Policy;
025
026 import tinlizard.util.Messages;
027
028 import java.util.Collection;
029 import java.util.Date;
030
031 import org.kohsuke.stapler.StaplerRequest;
032 import org.kohsuke.stapler.StaplerResponse;
033 import org.kohsuke.stapler.export.Exported;
034
035 /**
036 * Decorate Policy for Stapler.
037 */
038 public final class PolicyWeb extends ObjectWeb<Policy> {
039 private final Policy subject;
040
041 public PolicyWeb(final Policy c) {
042 if (c == null) {
043 throw new IllegalStateException(Messages.error_1010());
044 }
045
046 this.subject = c;
047 }
048
049 protected Policy getSubject() {
050 return this.subject;
051 }
052
053 public Integer getId() {
054 return subject.getId();
055 }
056
057 public String getName() {
058 return subject.getName();
059 }
060
061 @Exported
062 public String getDescription() {
063 return subject.getDescription();
064 }
065
066 public boolean isActive() {
067 return this.subject.isActive();
068 }
069
070 @Exported
071 public Boolean getActive() {
072 return this.subject.getActive();
073 }
074
075 @Exported
076 public Date getCreated() {
077 return subject.getCreated();
078 }
079
080 @Exported
081 public String getCreatedBy() {
082 return subject.getCreatedBy();
083 }
084
085 @Exported
086 public Date getLastModified() {
087 return subject.getLastModified();
088 }
089
090 @Exported
091 public String getLastModifiedBy() {
092 return subject.getLastModifiedBy();
093 }
094
095 @Exported(visibility = 1)
096 public CodelineCollectionWeb getCodelines() {
097 Collection<Codeline> allCodelines = this.subject.getCodelines();
098
099 //ArrayUtils?XXX
100 if (((allCodelines != null) && !allCodelines.isEmpty())) {
101 return new CodelineCollectionWeb(allCodelines, Messages._Codelines());
102 } else {
103 return null;
104 }
105 }
106
107 @RolesAllowed(RoleNames.ADMIN)
108 public void doDelete(final StaplerRequest request, final StaplerResponse response) throws Exception {
109 //XXX add check for matching codelines/views
110 subject.delete();
111 response.sendRedirect(request.getContextPath());
112 }
113
114 //XXX prevent updating id?
115 @RolesAllowed(RoleNames.ADMIN)
116 public void doUpdate(final StaplerRequest request, final StaplerResponse response) throws Exception {
117 request.bindParameters(subject, "policy.");
118 subject.update();
119 gotoMyIndex(request, response);
120 }
121 }