]> source.dussan.org Git - archiva.git/blob
17c84ada688db8682f1cdeedc843db0041b86fb5
[archiva.git] /
1 package org.apache.maven.archiva.web.action.reports;
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.webwork.interceptor.ServletRequestAware;
23 import org.apache.maven.archiva.database.ArchivaDAO;
24 import org.apache.maven.archiva.database.Constraint;
25 import org.apache.maven.archiva.database.constraints.RangeConstraint;
26 import org.apache.maven.archiva.database.constraints.RepositoryProblemByGroupIdConstraint;
27 import org.apache.maven.archiva.database.constraints.RepositoryProblemByRepositoryIdConstraint;
28 import org.apache.maven.archiva.database.constraints.RepositoryProblemConstraint;
29 import org.apache.maven.archiva.model.RepositoryProblem;
30 import org.apache.maven.archiva.model.RepositoryProblemReport;
31 import org.apache.maven.archiva.security.ArchivaRoleConstants;
32 import org.codehaus.plexus.redback.rbac.Resource;
33 import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
34 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
35 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
36 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
37
38 import javax.servlet.http.HttpServletRequest;
39 import java.util.ArrayList;
40 import java.util.List;
41
42 /**
43  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="generateReportAction"
44  */
45 public class GenerateReportAction
46     extends PlexusActionSupport
47     implements SecureAction, ServletRequestAware
48 {
49     /**
50      * @plexus.requirement role-hint="jdo"
51      */
52     protected ArchivaDAO dao;
53
54     protected Constraint constraint;
55
56     protected HttpServletRequest request;
57
58     protected List reports = new ArrayList();
59
60     protected String groupId;
61
62     protected String repositoryId;
63
64     protected String prev;
65
66     protected String next;
67
68     protected int[] range = new int[2];
69
70     protected int page = 1;
71
72     protected int rowCount = 100;
73
74     protected boolean isLastPage = false;
75
76     public static final String BLANK = "blank";
77
78     public static final String BASIC = "basic";
79
80     private static Boolean jasperPresent;
81
82     public String execute()
83         throws Exception
84     {
85         List problemArtifacts = dao.getRepositoryProblemDAO().queryRepositoryProblems( configureConstraint() );
86
87         String contextPath =
88             request.getRequestURL().substring( 0, request.getRequestURL().indexOf( request.getRequestURI() ) );
89         RepositoryProblem problemArtifact;
90         RepositoryProblemReport problemArtifactReport;
91         for ( int i = 0; i < problemArtifacts.size(); i++ )
92         {
93             problemArtifact = (RepositoryProblem) problemArtifacts.get( i );
94             problemArtifactReport = new RepositoryProblemReport( problemArtifact );
95
96             problemArtifactReport.setGroupURL( contextPath + "/browse/" + problemArtifact.getGroupId() );
97             problemArtifactReport.setArtifactURL(
98                 contextPath + "/browse/" + problemArtifact.getGroupId() + "/" + problemArtifact.getArtifactId() );
99
100             reports.add( problemArtifactReport );
101         }
102
103         if ( reports.size() <= rowCount )
104         {
105             isLastPage = true;
106         }
107         else
108         {
109             reports.remove( rowCount );
110         }
111
112         prev = request.getRequestURL() + "?page=" + ( page - 1 ) + "&rowCount=" + rowCount + "&groupId=" + groupId +
113             "&repositoryId=" + repositoryId;
114         next = request.getRequestURL() + "?page=" + ( page + 1 ) + "&rowCount=" + rowCount + "&groupId=" + groupId +
115             "&repositoryId=" + repositoryId;
116
117         if ( reports.size() == 0 && page == 1 )
118         {
119             return BLANK;
120         }
121         else if ( !isJasperPresent() )
122         {
123             return BASIC;
124         }
125         else
126         {
127             return SUCCESS;
128         }
129     }
130
131     private static boolean isJasperPresent()
132     {
133         if ( jasperPresent == null )
134         {
135             try
136             {
137                 Class.forName( "net.sf.jasperreports.engine.JRExporterParameter" );
138                 jasperPresent = Boolean.TRUE;
139             }
140             catch ( ClassNotFoundException e )
141             {
142                 jasperPresent = Boolean.FALSE;
143             }
144         }
145         return jasperPresent.booleanValue();
146     }
147
148     private Constraint configureConstraint()
149     {
150         Constraint constraint;
151
152         range[0] = ( page - 1 ) * rowCount;
153         range[1] = ( page * rowCount ) + 1; // Add 1 to check if it's the last page or not.
154
155         if ( groupId != null && ( !groupId.equals( "" ) ) )
156         {
157             if ( repositoryId != null && ( !repositoryId.equals( "" ) ) )
158             {
159                 constraint = new RepositoryProblemConstraint( range, groupId, repositoryId );
160             }
161             else
162             {
163                 constraint = new RepositoryProblemByGroupIdConstraint( range, groupId );
164             }
165         }
166         else if ( repositoryId != null && ( !repositoryId.equals( "" ) ) )
167         {
168             constraint = new RepositoryProblemByRepositoryIdConstraint( range, repositoryId );
169         }
170         else
171         {
172             constraint = new RangeConstraint( range );
173         }
174
175         return constraint;
176     }
177
178     public void setServletRequest( HttpServletRequest request )
179     {
180         this.request = request;
181     }
182
183     public List getReports()
184     {
185         return reports;
186     }
187
188     public String getGroupId()
189     {
190         return groupId;
191     }
192
193     public void setGroupId( String groupId )
194     {
195         this.groupId = groupId;
196     }
197
198     public String getRepositoryId()
199     {
200         return repositoryId;
201     }
202
203     public void setRepositoryId( String repositoryId )
204     {
205         this.repositoryId = repositoryId;
206     }
207
208     public String getPrev()
209     {
210         return prev;
211     }
212
213     public String getNext()
214     {
215         return next;
216     }
217
218     public int getPage()
219     {
220         return page;
221     }
222
223     public void setPage( int page )
224     {
225         this.page = page;
226     }
227
228     public int getRowCount()
229     {
230         return rowCount;
231     }
232
233     public void setRowCount( int rowCount )
234     {
235         this.rowCount = rowCount;
236     }
237
238     public boolean getIsLastPage()
239     {
240         return isLastPage;
241     }
242
243     public SecureActionBundle getSecureActionBundle()
244         throws SecureActionException
245     {
246         SecureActionBundle bundle = new SecureActionBundle();
247
248         bundle.setRequiresAuthentication( true );
249         bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_ACCESS_REPORT, Resource.GLOBAL );
250
251         return bundle;
252     }
253 }