directorycomparebean.java

来自「web版的SVN客户端」· Java 代码 · 共 152 行

JAVA
152
字号
/*
 * Copyright (c) 2004, 2005 Polarion Software, All rights reserved.
 * Email: community@polarion.org
 *
 * This program and the accompanying materials are made available under the
 * terms of the Apache License, Version 2.0 (the "License"). You may not use
 * this file except in compliance with the License. Copy of the License is
 * located in the file LICENSE.txt in the project distribution. You may also
 * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 *
 * POLARION SOFTWARE MAKES NO REPRESENTATIONS OR WARRANTIES
 * ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESSED OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. POLARION SOFTWARE
 * SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT
 * OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
package org.polarion.svnwebclient.web.controller.directory;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.polarion.svnwebclient.SVNWebClientException;
import org.polarion.svnwebclient.data.DataProviderException;
import org.polarion.svnwebclient.data.IDataProvider;
import org.polarion.svnwebclient.data.model.DataDirectoryCompareItem;
import org.polarion.svnwebclient.data.model.DataDirectoryElement;
import org.polarion.svnwebclient.data.model.DataRepositoryElement;
import org.polarion.svnwebclient.data.model.DataRevision;
import org.polarion.svnwebclient.web.controller.AbstractBean;
import org.polarion.svnwebclient.web.model.Navigation;
import org.polarion.svnwebclient.web.model.data.RevisionDetails;
import org.polarion.svnwebclient.web.model.data.directory.DirectoryCompare;
import org.polarion.svnwebclient.web.model.sort.DirectoryCompareSortManager;
import org.polarion.svnwebclient.web.support.AbstractRequestHandler;
import org.polarion.svnwebclient.web.support.RequestException;
import org.polarion.svnwebclient.web.support.RequestHandler;
import org.polarion.svnwebclient.web.support.RequestParameters;

/**
 * 
 * @author <A HREF="mailto:svnbrowser@polarion.org">Polarion Software </A>
 */
public class DirectoryCompareBean extends AbstractBean {
    protected long headRevision;    
    protected long revision;
    protected List compareItems;
    protected DataRevision startRevision;
    protected DataRevision endRevision;
    protected DirectoryCompareSortManager sortManager;
    
    public DirectoryCompareBean() {
    }
    
    protected boolean executeSVNOperation(IDataProvider dataProvider) throws SVNWebClientException {
        this.headRevision = dataProvider.getHeadRevision();
        if (this.requestHandler.getPegRevision() != -1) {
            this.revision = this.requestHandler.getPegRevision(); 
        } else if (this.requestHandler.getCurrentRevision() != -1) {
            this.revision = this.requestHandler.getCurrentRevision();
        } else {
            this.revision = this.headRevision;
        }    
        
        this.sortManager = new DirectoryCompareSortManager();
        
        if (this.requestHandler.getStartRevision() != -1) {
            this.startRevision = dataProvider.getRevisionInfo(this.requestHandler.getStartRevision());
        }
        if (this.requestHandler.getEndRevision() != -1) {
            this.endRevision = dataProvider.getRevisionInfo(this.requestHandler.getEndRevision());
        }
        
        if ((this.requestHandler.getStartRevision() != -1) && (this.requestHandler.getEndRevision() != -1)) {
            String location = dataProvider.getLocation(this.requestHandler.getUrl(), this.revision, this.requestHandler.getStartRevision());
            this.compareItems = dataProvider.compareDirectoryRevisions(location, this.requestHandler.getStartRevision(), this.requestHandler.getEndRevision());
        } else {
            if (this.requestHandler.getStartRevision() == -1) {
                this.compareItems = this.getDirectoryContent(dataProvider, this.requestHandler.getUrl(), this.requestHandler.getEndRevision(), true);
            } else if (this.requestHandler.getEndRevision() == -1) {
                this.compareItems = this.getDirectoryContent(dataProvider, this.requestHandler.getUrl(), this.requestHandler.getStartRevision(), false);
            }
        }
        
        return true;
    }

    protected List getDirectoryContent(IDataProvider dataProvider, String url, long revision, boolean added) throws DataProviderException {
        List ret = new ArrayList();
        DataDirectoryElement directory = dataProvider.getDirectory(url, revision, true);
        for (Iterator i = directory.getChildElements().iterator(); i.hasNext(); ) {
            DataRepositoryElement element = (DataRepositoryElement) i.next();
            DataDirectoryCompareItem compareItem = null;
            if (added) {
                compareItem = new DataDirectoryCompareItem(element.getName(), DataDirectoryCompareItem.OPERATION_ADD);
                compareItem.setDirectory(element.isDirectory());
                compareItem.setOldRevision(-1);
                compareItem.setNewRevision(revision);
            } else {
                compareItem = new DataDirectoryCompareItem(element.getName(), DataDirectoryCompareItem.OPERATION_DELETE);
                compareItem.setDirectory(element.isDirectory());                
                compareItem.setOldRevision(revision);
                compareItem.setNewRevision(-1);                
            }
            ret.add(compareItem);
        }
        return ret;
    }
    
    public RevisionDetails getStartRevisionInfo() {
        if (this.startRevision == null) {
            return null;
        }        
        return new RevisionDetails(this.startRevision, this.headRevision, null, null, null);
    }
    
    public RevisionDetails getEndRevisionInfo() {
        if (this.endRevision == null) {
            return null;
        }        
        return new RevisionDetails(this.endRevision, this.headRevision, null, null, null);
    }
    
    public DirectoryCompare getCompareResult() {
        DirectoryCompare ret = new DirectoryCompare(this.compareItems, this.requestHandler, this.requestHandler.getUrl(), this.requestHandler.getStartRevision(), this.requestHandler.getEndRevision());        
        ret.applySort(this.sortManager.getComparator());
        return ret;
    }
    
    protected AbstractRequestHandler getRequestHandler(HttpServletRequest request) {
        return new RequestHandler(request) {
            public void check() throws RequestException {
                this.checkLong(RequestParameters.STARTREV);
                this.checkLong(RequestParameters.ENDREV);
            }
        };
    }

    public Navigation getNavigation() {
        return new Navigation(this.requestHandler.getUrl(), this.requestHandler.getLocation(),this.requestHandler.getCurrentRevision(), true);
    }

    public List getActions() {
        List ret = new ArrayList();
        return ret;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?