]> source.dussan.org Git - archiva.git/blob
3b4c115464e35b57b4665b03333013f069388e6d
[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 java.util.ArrayList;
23 import java.util.Calendar;
24 import java.util.Collections;
25 import java.util.Date;
26 import java.util.List;
27
28 import javax.servlet.http.HttpServletRequest;
29
30 import org.apache.commons.lang.StringUtils;
31 import org.apache.commons.lang.time.DateUtils;
32 import org.apache.maven.archiva.database.ArchivaAuditLogsDao;
33 import org.apache.maven.archiva.database.ArchivaDAO;
34 import org.apache.maven.archiva.database.ArchivaDatabaseException;
35 import org.apache.maven.archiva.database.ObjectNotFoundException;
36 import org.apache.maven.archiva.database.SimpleConstraint;
37 import org.apache.maven.archiva.database.constraints.ArchivaAuditLogsConstraint;
38 import org.apache.maven.archiva.database.constraints.MostRecentArchivaAuditLogsConstraint;
39 import org.apache.maven.archiva.model.ArchivaAuditLogs;
40 import org.apache.maven.archiva.repository.audit.AuditEvent;
41 import org.apache.maven.archiva.security.AccessDeniedException;
42 import org.apache.maven.archiva.security.ArchivaSecurityException;
43 import org.apache.maven.archiva.security.PrincipalNotFoundException;
44 import org.apache.maven.archiva.security.UserRepositories;
45 import org.apache.maven.archiva.web.action.PlexusActionSupport;
46 import org.apache.struts2.interceptor.ServletRequestAware;
47 import org.codehaus.redback.integration.interceptor.SecureAction;
48 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
49 import org.codehaus.redback.integration.interceptor.SecureActionException;
50
51 import com.opensymphony.xwork2.Preparable;
52
53 /**
54  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="viewAuditLogReport"
55  *                   instantiation-strategy="per-lookup"
56  */
57 public class ViewAuditLogReportAction
58     extends PlexusActionSupport
59     implements SecureAction, ServletRequestAware, Preparable
60 {
61     protected HttpServletRequest request;
62
63     /**
64      * @plexus.requirement
65      */
66     private UserRepositories userRepositories;
67
68     /**
69      * @plexus.requirement role-hint="jdo"
70      */
71     private ArchivaAuditLogsDao auditLogsDao;
72
73     /**
74      * @plexus.requirement role-hint="jdo"
75      */
76     private ArchivaDAO dao;
77
78     private String repository;
79
80     private List<String> repositories;
81
82     private String groupId;
83
84     private String artifactId;
85
86     private String startDate;
87
88     private String endDate;
89     
90     private int rowCount = 30;
91
92     private int page = 1;
93
94     private String prev;
95
96     private String next;
97
98     protected boolean isLastPage = true;
99
100     private List<ArchivaAuditLogs> auditLogs;
101
102     private static final String ALL_REPOSITORIES = "all";
103
104     protected int[] range = new int[2];
105     
106     private String initial = "true";
107     
108     private String headerName;
109     
110     private static final String HEADER_LATEST_EVENTS = "Latest Events";
111     
112     private static final String HEADER_RESULTS = "Results";
113     
114     private String[] datePatterns = new String[] { "MM/dd/yy", "MM/dd/yyyy", "MMMMM/dd/yyyy", "MMMMM/dd/yy", 
115         "dd MMMMM yyyy", "dd/MM/yy", "dd/MM/yyyy", "yyyy/MM/dd", "yyyy-MM-dd", "yyyy-dd-MM", "MM-dd-yyyy",
116         "MM-dd-yy" };
117
118     public SecureActionBundle getSecureActionBundle()
119         throws SecureActionException
120     {
121         return null;
122     }
123
124     public void setServletRequest( HttpServletRequest request )
125     {
126         this.request = request;
127     }
128
129     @SuppressWarnings( "unchecked" )
130     public void prepare()
131         throws Exception
132     {
133         repositories = new ArrayList<String>();
134         repositories.add( ALL_REPOSITORIES );
135         repositories.addAll( getObservableRepositories() );
136
137         auditLogs = null;
138         groupId = "";
139         artifactId = "";
140         repository = "";
141                 
142         if( Boolean.parseBoolean( initial ) )
143         {
144             headerName = HEADER_LATEST_EVENTS;
145         }
146         else
147         {
148             headerName = HEADER_RESULTS;
149         }
150
151         SimpleConstraint constraint = new MostRecentArchivaAuditLogsConstraint();
152         auditLogs = (List<ArchivaAuditLogs>) dao.query( constraint );
153     }
154
155     public String execute()
156         throws Exception
157     {
158         auditLogs = null;
159         String artifact = "";
160         
161         if ( groupId != null && !"".equals( groupId.trim() ) )
162         {
163             artifact = groupId + ( ( artifactId != null  && !"".equals( artifactId.trim() ) ) ? ( ":" + artifactId + ":%" ) : ":%" );
164         }
165         else
166         {               
167             artifact = ( artifactId != null  && !"".equals( artifactId.trim() ) ) ? ( "%:" + artifactId + ":%" ) : "";
168         }        
169                 
170         Date startDateInDF = null;
171         Date endDateInDF = null;        
172         if ( startDate == null || "".equals( startDate ) )
173         {            
174             Calendar cal = Calendar.getInstance();
175             cal.set( Calendar.HOUR, 0 );
176             cal.set( Calendar.MINUTE, 0 );
177             cal.set( Calendar.SECOND, 0 );
178
179             startDateInDF = cal.getTime();
180         }
181         else
182         {
183             startDateInDF = DateUtils.parseDate( startDate, datePatterns );
184         }
185
186         if ( endDate == null || "".equals( endDate ) )
187         {
188             endDateInDF = Calendar.getInstance().getTime();
189         } 
190         else
191         {
192             endDateInDF = DateUtils.parseDate( endDate, datePatterns );     
193             if( endDate.equals( startDate ) )
194             {
195                 Calendar cal = Calendar.getInstance();
196                 cal.setTime( endDateInDF );
197                 cal.set( Calendar.HOUR, 23 );
198                 cal.set( Calendar.MINUTE, 59 );
199                 cal.set( Calendar.SECOND, 59 );
200                 
201                 endDateInDF = cal.getTime();
202             }
203         }
204
205         range[0] = ( page - 1 ) * rowCount;
206         range[1] = ( page * rowCount ) + 1;
207         
208         ArchivaAuditLogsConstraint constraint = null;
209         if ( !repository.equals( ALL_REPOSITORIES ) )
210         {
211             constraint =
212                 new ArchivaAuditLogsConstraint( range, artifact, repository, AuditEvent.UPLOAD_FILE, startDateInDF, endDateInDF );
213         }
214         else
215         {
216             constraint =
217                 new ArchivaAuditLogsConstraint( range, artifact, null, AuditEvent.UPLOAD_FILE, startDateInDF, endDateInDF );
218         }
219
220         try
221         {
222             auditLogs = auditLogsDao.queryAuditLogs( constraint );            
223             if( auditLogs.isEmpty() )
224             {
225                 addActionError( "No audit logs found." );
226                 initial = "true";                
227             }
228             else
229             {   
230                 initial = "false";
231             }
232             
233             headerName = HEADER_RESULTS;         
234             paginate();
235         }
236         catch ( ObjectNotFoundException e )
237         {
238             addActionError( "No audit logs found." );
239             return ERROR;
240         }
241         catch ( ArchivaDatabaseException e )
242         {
243             addActionError( "Error occurred while querying audit logs." );
244             return ERROR;
245         }
246
247         return SUCCESS;
248     }
249     
250     private void paginate()
251     {
252         if ( auditLogs.size() <= rowCount )
253         {
254             isLastPage = true;
255         }
256         else
257         {   
258             isLastPage = false;
259             auditLogs.remove( rowCount );
260         }
261
262         prev =
263             request.getRequestURL() + "?page=" + ( page - 1 ) + "&rowCount=" + rowCount + "&groupId=" + groupId +
264                 "&artifactId=" + artifactId + "&repository=" + repository + "&startDate=" + startDate + "&endDate=" +
265                 endDate;
266         
267         next =
268             request.getRequestURL() + "?page=" + ( page + 1 ) + "&rowCount=" + rowCount + "&groupId=" + groupId +
269                 "&artifactId=" + artifactId + "&repository=" + repository + "&startDate=" + startDate + "&endDate=" +
270                 endDate;
271         
272         prev = StringUtils.replace( prev, " ", "%20" );
273         next = StringUtils.replace( next, " ", "%20" );
274     }
275
276     private List<String> getObservableRepositories()
277     {
278         try
279         {
280             return userRepositories.getObservableRepositoryIds( getPrincipal() );
281         }
282         catch ( PrincipalNotFoundException e )
283         {
284             log.warn( e.getMessage(), e );
285         }
286         catch ( AccessDeniedException e )
287         {
288             log.warn( e.getMessage(), e );
289         }
290         catch ( ArchivaSecurityException e )
291         {
292             log.warn( e.getMessage(), e );
293         }
294         return Collections.emptyList();
295     }
296
297     public String getRepository()
298     {
299         return repository;
300     }
301
302     public void setRepository( String repository )
303     {
304         this.repository = repository;
305     }
306
307     public List<String> getRepositories()
308     {
309         return repositories;
310     }
311
312     public void setRepositories( List<String> repositories )
313     {
314         this.repositories = repositories;
315     }
316
317     public String getGroupId()
318     {
319         return groupId;
320     }
321
322     public void setGroupId( String groupId )
323     {
324         this.groupId = groupId;
325     }
326
327     public String getArtifactId()
328     {
329         return artifactId;
330     }
331
332     public void setArtifactId( String artifactId )
333     {
334         this.artifactId = artifactId;
335     }
336
337     public List<ArchivaAuditLogs> getAuditLogs()
338     {
339         return auditLogs;
340     }
341
342     public void setAuditLogs( List<ArchivaAuditLogs> auditLogs )
343     {
344         this.auditLogs = auditLogs;
345     }
346
347     public int getRowCount()
348     {
349         return rowCount;
350     }
351
352     public void setRowCount( int rowCount )
353     {
354         this.rowCount = rowCount;
355     }
356
357     public String getStartDate()
358     {
359         return startDate;
360     }
361
362     public void setStartDate( String startDate )
363     {
364         this.startDate = startDate;
365     }
366
367     public String getEndDate()
368     {
369         return endDate;
370     }
371
372     public void setEndDate( String endDate )
373     {
374         this.endDate = endDate;
375     }
376
377     public int getPage()
378     {
379         return page;
380     }
381
382     public void setPage( int page )
383     {
384         this.page = page;
385     }
386
387     public boolean getIsLastPage()
388     {
389         return isLastPage;
390     }
391
392     public void setIsLastPage( boolean isLastPage )
393     {
394         this.isLastPage = isLastPage;
395     }
396     
397     public String getPrev()
398     {
399         return prev;
400     }
401
402     public void setPrev( String prev )
403     {
404         this.prev = prev;
405     }
406
407     public String getNext()
408     {
409         return next;
410     }
411
412     public void setNext( String next )
413     {
414         this.next = next;
415     }
416     
417     public String getInitial()
418     {
419         return initial;
420     }
421
422     public void setInitial( String initial )
423     {
424         this.initial = initial;
425     }
426
427     public String getHeaderName()
428     {
429         return headerName;
430     }
431
432     public void setHeaderName( String headerName )
433     {
434         this.headerName = headerName;
435     }
436 }