1 package org.apache.maven.continuum.web.view;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
46
47
48
49
50
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
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 }