1 package org.apache.maven.scm.provider.perforce.command.blame;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.log.ScmLogger;
23 import org.apache.maven.scm.util.AbstractConsumer;
24 import org.apache.regexp.RE;
25
26 import java.util.Date;
27 import java.util.HashMap;
28 import java.util.Map;
29
30
31
32
33
34 public class PerforceFilelogConsumer
35 extends AbstractConsumer
36 {
37 private static final String PERFORCE_TIMESTAMP_PATTERN = "yyyy/MM/dd";
38
39 private static final String LINE_PATTERN = "#(\\d+).*on (.*) by (.*)@";
40
41 private RE lineRegexp;
42
43 private Map<String, Date> dates = new HashMap<String,Date>();
44
45 private Map<String,String> authors = new HashMap<String,String>();
46
47 public PerforceFilelogConsumer( ScmLogger logger )
48 {
49 super( logger );
50 lineRegexp = new RE( LINE_PATTERN );
51 }
52
53
54 public void consumeLine( String line )
55 {
56 if ( lineRegexp.match( line ) )
57 {
58 String revision = lineRegexp.getParen( 1 );
59 String dateTimeStr = lineRegexp.getParen( 2 );
60 String author = lineRegexp.getParen( 3 );
61
62 Date dateTime = parseDate( dateTimeStr, null, PERFORCE_TIMESTAMP_PATTERN );
63
64 dates.put( revision, dateTime );
65 authors.put( revision, author );
66 }
67 }
68
69 public String getAuthor( String revision )
70 {
71 return (String) authors.get( revision );
72 }
73
74 public Date getDate( String revision )
75 {
76 return (Date) dates.get( revision );
77 }
78 }