1 | package org.apache.maven.continuum.web.view; |
2 | |
3 | /* |
4 | * Licensed to the Apache Software Foundation (ASF) under one |
5 | * or more contributor license agreements. See the NOTICE file |
6 | * distributed with this work for additional information |
7 | * regarding copyright ownership. The ASF licenses this file |
8 | * to you under the Apache License, Version 2.0 (the |
9 | * "License"); you may not use this file except in compliance |
10 | * with the License. You may obtain a copy of the License at |
11 | * |
12 | * http://www.apache.org/licenses/LICENSE-2.0 |
13 | * |
14 | * Unless required by applicable law or agreed to in writing, |
15 | * software distributed under the License is distributed on an |
16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
17 | * KIND, either express or implied. See the License for the |
18 | * specific language governing permissions and limitations |
19 | * under the License. |
20 | */ |
21 | |
22 | import com.opensymphony.xwork2.ActionContext; |
23 | |
24 | import java.util.HashMap; |
25 | |
26 | import org.apache.continuum.model.project.ProjectScmRoot; |
27 | import org.apache.maven.continuum.project.ContinuumProjectState; |
28 | import org.apache.maven.continuum.security.ContinuumRoleConstants; |
29 | import org.apache.maven.continuum.web.model.ProjectSummary; |
30 | import org.apache.maven.continuum.web.util.StateGenerator; |
31 | import org.apache.struts2.ServletActionContext; |
32 | import org.apache.struts2.views.util.UrlHelper; |
33 | import org.codehaus.plexus.PlexusConstants; |
34 | import org.codehaus.plexus.PlexusContainer; |
35 | import org.codehaus.plexus.component.repository.exception.ComponentLookupException; |
36 | import org.codehaus.plexus.redback.authorization.AuthorizationException; |
37 | import org.codehaus.plexus.redback.system.SecuritySession; |
38 | import org.codehaus.plexus.redback.system.SecuritySystem; |
39 | import org.codehaus.plexus.redback.system.SecuritySystemConstants; |
40 | import org.extremecomponents.table.bean.Column; |
41 | import org.extremecomponents.table.cell.DisplayCell; |
42 | import org.extremecomponents.table.core.TableModel; |
43 | |
44 | /** |
45 | * Used in Summary view |
46 | * |
47 | * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a> |
48 | * @version $Id: StateCell.java 765340 2009-04-15 20:22:00Z evenisse $ |
49 | * @deprecated use of cells is discouraged due to lack of i18n and design in java code. |
50 | * Use jsp:include instead. |
51 | */ |
52 | public class StateCell |
53 | extends DisplayCell |
54 | { |
55 | protected String getCellValue( TableModel tableModel, Column column ) |
56 | { |
57 | if ( tableModel.getCurrentRowBean() instanceof ProjectSummary ) |
58 | { |
59 | ProjectSummary project = (ProjectSummary) tableModel.getCurrentRowBean(); |
60 | |
61 | switch ( project.getState() ) |
62 | { |
63 | case ContinuumProjectState.NEW: |
64 | case ContinuumProjectState.OK: |
65 | case ContinuumProjectState.FAILED: |
66 | case ContinuumProjectState.ERROR: |
67 | case ContinuumProjectState.BUILDING: |
68 | case ContinuumProjectState.UPDATING: |
69 | case ContinuumProjectState.CHECKING_OUT: |
70 | { |
71 | String state = |
72 | StateGenerator.generate( project.getState(), tableModel.getContext().getContextPath() ); |
73 | |
74 | if ( project.getLatestBuildId() != -1 && !StateGenerator.NEW.equals( state ) && |
75 | project.getState() != ContinuumProjectState.UPDATING ) |
76 | { |
77 | if ( isAuthorized( project.getProjectGroupName() ) ) |
78 | { |
79 | return createActionLink( "buildResult", project, state ); |
80 | } |
81 | else |
82 | { |
83 | return state; |
84 | } |
85 | } |
86 | else |
87 | { |
88 | return state; |
89 | } |
90 | } |
91 | |
92 | default: |
93 | { |
94 | return " "; |
95 | } |
96 | } |
97 | } |
98 | else |
99 | { |
100 | ProjectScmRoot projectScmRoot = (ProjectScmRoot) tableModel.getCurrentRowBean(); |
101 | |
102 | switch ( projectScmRoot.getState() ) |
103 | { |
104 | case ContinuumProjectState.UPDATING: |
105 | case ContinuumProjectState.UPDATED: |
106 | case ContinuumProjectState.ERROR: |
107 | { |
108 | String state = |
109 | StateGenerator.generate( projectScmRoot.getState(), tableModel.getContext().getContextPath() ); |
110 | |
111 | if ( !StateGenerator.NEW.equals( state ) ) |
112 | { |
113 | if ( isAuthorized( projectScmRoot.getProjectGroup().getName() ) && |
114 | projectScmRoot.getState() == ContinuumProjectState.ERROR ) |
115 | { |
116 | return createActionLink( "scmResult", projectScmRoot, state ); |
117 | } |
118 | else |
119 | { |
120 | return state; |
121 | } |
122 | } |
123 | else |
124 | { |
125 | return state; |
126 | } |
127 | } |
128 | |
129 | default: |
130 | { |
131 | return " "; |
132 | } |
133 | } |
134 | } |
135 | } |
136 | |
137 | private static String createActionLink( String action, ProjectSummary project, String state ) |
138 | { |
139 | HashMap<String, Object> params = new HashMap<String, Object>(); |
140 | |
141 | params.put( "projectId", project.getId() ); |
142 | |
143 | params.put( "projectName", project.getName() ); |
144 | |
145 | params.put( "buildId", project.getLatestBuildId() ); |
146 | |
147 | params.put( "projectGroupId", project.getProjectGroupId() ); |
148 | |
149 | String url = UrlHelper.buildUrl( "/" + action + ".action", ServletActionContext.getRequest(), |
150 | ServletActionContext.getResponse(), params ); |
151 | |
152 | return "<a href=\"" + url + "\">" + state + "</a>"; |
153 | } |
154 | |
155 | private static String createActionLink( String action, ProjectScmRoot scmRoot, String state ) |
156 | { |
157 | HashMap<String, Object> params = new HashMap<String, Object>(); |
158 | |
159 | params.put( "projectGroupId", scmRoot.getProjectGroup().getId() ); |
160 | |
161 | params.put( "projectScmRootId", scmRoot.getId() ); |
162 | |
163 | String url = UrlHelper.buildUrl( "/" + action + ".action", ServletActionContext.getRequest(), |
164 | ServletActionContext.getResponse(), params ); |
165 | |
166 | return "<a href=\"" + url + "\">" + state + "</a>"; |
167 | } |
168 | |
169 | private boolean isAuthorized( String projectGroupName ) |
170 | { |
171 | // do the authz bit |
172 | ActionContext context = ActionContext.getContext(); |
173 | |
174 | PlexusContainer container = (PlexusContainer) context.getApplication().get( PlexusConstants.PLEXUS_KEY ); |
175 | SecuritySession securitySession = |
176 | (SecuritySession) context.getSession().get( SecuritySystemConstants.SECURITY_SESSION_KEY ); |
177 | |
178 | try |
179 | { |
180 | SecuritySystem securitySystem = (SecuritySystem) container.lookup( SecuritySystem.ROLE ); |
181 | |
182 | if ( !securitySystem.isAuthorized( securitySession, ContinuumRoleConstants.CONTINUUM_VIEW_GROUP_OPERATION, |
183 | projectGroupName ) ) |
184 | { |
185 | return false; |
186 | } |
187 | } |
188 | catch ( ComponentLookupException cle ) |
189 | { |
190 | return false; |
191 | } |
192 | catch ( AuthorizationException ae ) |
193 | { |
194 | return false; |
195 | } |
196 | |
197 | return true; |
198 | } |
199 | } |