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.Dependency;
025 import tinlizard.model.Policy;
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.commons.lang.StringUtils;
035
036 import org.kohsuke.stapler.StaplerRequest;
037 import org.kohsuke.stapler.StaplerResponse;
038 import org.kohsuke.stapler.export.Exported;
039
040 /**
041 * Decorate Codeline for Stapler.
042 */
043 public final class CodelineWeb extends ObjectWeb<Codeline> {
044 private Codeline subject;
045
046 public CodelineWeb(final Codeline pb) {
047 if (pb == null) {
048 throw new IllegalStateException(Messages.error_1011());
049 }
050
051 this.subject = pb;
052 }
053
054 protected Codeline getSubject() {
055 return this.subject;
056 }
057
058 public Integer getId() {
059 return this.subject.getId();
060 }
061
062 public String getName() {
063 return this.subject.getName();
064 }
065
066 @Exported
067 public String getScmConnection() {
068 return this.subject.getScmConnection();
069 }
070
071 @Exported
072 public String getGroupId() {
073 return this.subject.getGroupId();
074 }
075
076 @Exported
077 public String getArtifactId() {
078 return this.subject.getArtifactId();
079 }
080
081 @Exported
082 public String getVersion() {
083 return this.subject.getVersion();
084 }
085
086 @Exported
087 public ProjectWeb getProject() {
088 return new ProjectWeb(this.subject.getProject());
089 }
090
091 @Exported
092 public UserWeb getOwner() {
093 return new UserWeb(subject.getOwner());
094 }
095
096 @Exported
097 public PolicyWeb getPolicy() {
098 return new PolicyWeb(subject.getPolicy());
099 }
100
101 public boolean isMainLine() {
102 return this.subject.isMainLine();
103 }
104
105 @Exported
106 public Boolean getMainLine() {
107 return this.subject.getMainLine();
108 }
109
110 @Exported
111 public String getDescription() {
112 return subject.getDescription();
113 }
114
115 @Exported
116 public Date getCreated() {
117 return subject.getCreated();
118 }
119
120 @Exported
121 public String getCreatedBy() {
122 return subject.getCreatedBy();
123 }
124
125 @Exported
126 public Date getLastModified() {
127 return subject.getLastModified();
128 }
129
130 @Exported
131 public String getLastModifiedBy() {
132 return subject.getLastModifiedBy();
133 }
134
135 @Exported(visibility = 1)
136 public ViewWeb getView() {
137 return new ViewWeb(this.subject.getView());
138 }
139
140 @Exported(visibility = 1)
141 public CodelineCollectionWeb getConsumers() {
142 Collection<Codeline> allCodelines = this.subject.findAllConsumers(true);
143
144 if (allCodelines != null) {
145 return new CodelineCollectionWeb(allCodelines, Messages._Consumers());
146 } else {
147 return null;
148 }
149 }
150
151 @Exported(name = "dependencys")
152 public DependencyCollectionWeb getDependencies() {
153 Collection<Dependency> dependencies = subject.findAllDependencies();
154
155 if (dependencies != null) {
156 return new DependencyCollectionWeb(dependencies, Messages._Dependencies());
157 } else {
158 return null;
159 }
160 }
161
162 public DependencyWeb getDependency(final String name) {
163 if (StringUtils.isNotBlank(name)) {
164 Collection<Dependency> dependencies = subject.findAllDependencies();
165
166 if (dependencies != null) {
167 for (Dependency dependency : dependencies) {
168 if (name.equals(dependency.getName())) {
169 return new DependencyWeb(dependency);
170 }
171 }
172 }
173 }
174
175 return null;
176 }
177
178 @RolesAllowed(RoleNames.USER)
179 public void doDelete(final StaplerRequest request, final StaplerResponse response) throws Exception {
180 String projectName = subject.getProject().getName();
181 subject.delete();
182 response.sendRedirect(request.getContextPath() + "/project/" + projectName);
183 }
184
185 //XXX prevent updating id?
186 @RolesAllowed(RoleNames.USER)
187 public void doUpdate(final StaplerRequest request, final StaplerResponse response) throws Exception {
188 request.bindParameters(subject, "codeline.");
189
190 View view = new View();
191 request.bindParameters(view, "view.");
192
193 if (StringUtils.isNotBlank(view.getName())) {
194 view = View.findByName(view.getName());
195
196 if (view != null) {
197 subject.setView(view);
198 }
199 }
200
201 User user = new User();
202 request.bindParameters(user, "owner.");
203
204 if (StringUtils.isNotBlank(user.getName())) {
205 user = User.getUserByName(user.getName(), true);
206
207 if (user != null) {
208 subject.setOwner(user);
209 }
210 }
211
212 Policy policy = new Policy();
213 request.bindParameters(policy, "policy.");
214
215 if (StringUtils.isNotBlank(policy.getName())) {
216 policy = Policy.findByName(policy.getName());
217
218 if (policy != null) {
219 subject.setPolicy(policy);
220 }
221 }
222
223 subject.update();
224 gotoMyIndex(request, response);
225 }
226
227 @RolesAllowed(RoleNames.USER)
228 public void doRefresh(final StaplerRequest request, final StaplerResponse response) throws Exception {
229 subject.refresh();
230 gotoMyIndex(request, response);
231 }
232 }