001package org.apache.maven.scm.provider.accurev.cli;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *    http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.Date;
023import java.util.List;
024import java.util.Map;
025
026import org.apache.maven.scm.log.ScmLogger;
027import org.apache.maven.scm.provider.accurev.Transaction;
028
029public class HistoryConsumer
030    extends XppStreamConsumer
031{
032
033    private List<Transaction> transactions;
034
035    private Transaction currentTran;
036
037    private Long elementId;
038
039    private String elementName;
040
041    public HistoryConsumer( ScmLogger logger, List<Transaction> transactions )
042    {
043        super( logger );
044        this.transactions = transactions;
045    }
046
047    @Override
048    protected void startTag( List<String> tagPath, Map<String, String> attributes )
049    {
050        String tagName = getTagName( tagPath );
051        if ( "transaction".equals( tagName ) )
052        {
053            Long id = Long.parseLong( attributes.get( "id" ) );
054            Date when = new Date( Long.parseLong( attributes.get( "time" ) ) * 1000 );
055            String tranType = attributes.get( "type" );
056            String user = attributes.get( "user" );
057            currentTran = new Transaction( id, when, tranType, user );
058            transactions.add( currentTran );
059
060        }
061        else if ( "version".equals( tagName ) )
062        {
063            if ( currentTran != null )
064            {
065
066                if ( attributes.containsKey( "eid" ) )
067                {
068                    elementId = Long.parseLong( attributes.get( "eid" ) );
069                    elementName = attributes.get( "path" );
070                }
071
072                String virtualSpec = attributes.get( "virtual" );
073                String realSpec = attributes.get( "real" );
074                String ancestor = attributes.get( "ancestor" );
075
076                currentTran.addVersion( elementId, elementName, virtualSpec, realSpec, ancestor );
077            }
078        }
079        else if ( "element".equals( tagName ) )
080        {
081            elementId = Long.parseLong( attributes.get( "eid" ) );
082            elementName = attributes.get( "name" );
083        }
084    }
085
086    @Override
087    protected void endTag( List<String> tagPath )
088    {
089        String tagName = getTagName( tagPath );
090        if ( "element".equals( tagName ) )
091        {
092            elementId = null;
093            elementName = null;
094        }
095        else if ( "transaction".equals( tagName ) )
096        {
097            currentTran = null;
098        }
099
100    }
101
102    @Override
103    protected void text( List<String> tagPath, String text )
104    {
105        String tagName = getTagName( tagPath );
106        if ( currentTran != null && "comment".equals( tagName ) )
107        {
108            currentTran.setComment( text );
109        }
110
111    }
112
113}