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 import tinlizard.model.Project;
026 import tinlizard.model.User;
027 import tinlizard.model.View;
028
029 import tinlizard.util.Messages;
030
031 import java.util.Collection;
032 import java.util.Date;
033
034 import org.apache.log4j.Logger;
035
036 import org.kohsuke.stapler.StaplerRequest;
037 import org.kohsuke.stapler.StaplerResponse;
038 import org.kohsuke.stapler.export.Exported;
039
040 /**
041 * Decorate Project for Stapler.
042 */
043 public final class ProjectWeb extends ObjectWeb<Project> {
044 private static final Logger LOG = Logger.getLogger(ProjectWeb.class);
045 private final Project subject;
046
047 public ProjectWeb(final Project p) {
048 if (p == null) {
049 throw new IllegalStateException(Messages.error_1012());
050 }
051
052 this.subject = p;
053 }
054
055 protected Class<Project> getManagedClass() {
056 return Project.class;
057 }
058
059 protected Project getSubject() {
060 return this.subject;
061 }
062
063 public Integer getId() {
064 return this.subject.getId();
065 }
066
067 public String getName() {
068 return this.subject.getName();
069 }
070
071 @Exported
072 public String getDescription() {
073 return this.subject.getDescription();
074 }
075
076 @Exported
077 public Date getCreated() {
078 return subject.getCreated();
079 }
080
081 @Exported
082 public String getCreatedBy() {
083 return subject.getCreatedBy();
084 }
085
086 @Exported
087 public Date getLastModified() {
088 return subject.getLastModified();
089 }
090
091 @Exported
092 public String getLastModifiedBy() {
093 return subject.getLastModifiedBy();
094 }
095
096 @Exported
097 public String getScmConnection() {
098 Codeline codeline = subject.findMainLine();
099
100 if (codeline != null) {
101 return codeline.getScmConnection();
102 } else {
103 return null;
104 }
105 }
106
107 @Exported(visibility = 1)
108 public CodelineCollectionWeb getCodelines() {
109 Collection<Codeline> codelines = this.subject.getCodelines();
110
111 if (codelines != null) {
112 return new CodelineCollectionWeb(codelines, Messages._AllCodelines());
113 } else {
114 return null;
115 }
116 }
117
118 public CodelineCollectionWeb getActiveCodelines() {
119 Collection<Codeline> codelines = this.subject.getActiveCodelines();
120
121 if (codelines != null) {
122 return new CodelineCollectionWeb(codelines, Messages._ActiveCodelines());
123 } else {
124 return null;
125 }
126 }
127
128 public CodelineWeb getMainline() {
129 Codeline codeline = subject.findMainLine();
130
131 if (codeline != null) {
132 return new CodelineWeb(codeline);
133 } else {
134 return null;
135 }
136 }
137
138 public CodelineWeb getCodeline(final String name) {
139 if (LOG.isDebugEnabled()) {
140 LOG.debug(name);
141 }
142
143 Codeline codeline = subject.getCodeline(name);
144
145 if (codeline != null) {
146 return new CodelineWeb(codeline);
147 } else {
148 return null;
149 }
150 }
151
152 @RolesAllowed(RoleNames.USER)
153 public void doDelete(final StaplerRequest request, final StaplerResponse response) throws Exception {
154 subject.delete();
155 response.sendRedirect(request.getContextPath());
156 }
157
158 //XXX prevent updating id?
159 @RolesAllowed(RoleNames.USER)
160 public void doUpdate(final StaplerRequest request, final StaplerResponse response) throws Exception {
161 request.bindParameters(subject, "project.");
162 subject.update();
163 gotoMyIndex(request, response);
164 }
165
166 @RolesAllowed(RoleNames.USER)
167 public void doAddCodeline(final StaplerRequest request, final StaplerResponse response) throws Exception {
168 Codeline f = new Codeline();
169 request.bindParameters(f, "codeline.");
170
171 View view = new View();
172 request.bindParameters(view, "view.");
173 f.setView(View.findByName(view.getName()));
174
175 User user = new User();
176 request.bindParameters(user, "owner.");
177 user = User.getUserByName(user.getName(), true);
178 f.setOwner(user);
179
180 String policyName = request.getParameter("policy.name");
181 f.setPolicy(Policy.findByName(policyName));
182
183 subject.addCodeline(f);
184
185 response.sendRedirect(request.getContextPath() + "/project/" + subject.getName() + "/codeline/" + f.getName());
186 }
187 }