org.webcat.core.git.GitTreeEntry.java Source code

Java tutorial

Introduction

Here is the source code for org.webcat.core.git.GitTreeEntry.java

Source

/*==========================================================================*\
 |  $Id: GitTreeEntry.java,v 1.3 2012/03/28 13:48:08 stedwar2 Exp $
 |*-------------------------------------------------------------------------*|
 |  Copyright (C) 2011-2012 Virginia Tech
 |
 |  This file is part of Web-CAT.
 |
 |  Web-CAT is free software; you can redistribute it and/or modify
 |  it under the terms of the GNU Affero General Public License as published
 |  by the Free Software Foundation; either version 3 of the License, or
 |  (at your option) any later version.
 |
 |  Web-CAT is distributed in the hope that it will be useful,
 |  but WITHOUT ANY WARRANTY; without even the implied warranty of
 |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 |  GNU General Public License for more details.
 |
 |  You should have received a copy of the GNU Affero General Public License
 |  along with Web-CAT; if not, see <http://www.gnu.org/licenses/>.
\*==========================================================================*/

package org.webcat.core.git;

import java.io.IOException;
import org.apache.log4j.Logger;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.treewalk.TreeWalk;
import com.webobjects.foundation.NSKeyValueCoding;
import com.webobjects.foundation.NSKeyValueCodingAdditions;

//-------------------------------------------------------------------------
/**
 * TODO real description
 *
 * @author  Tony Allevato
 * @author  Last changed by $Author: stedwar2 $
 * @version $Revision: 1.3 $, $Date: 2012/03/28 13:48:08 $
 */
public class GitTreeEntry implements NSKeyValueCodingAdditions {
    //~ Constructors ..........................................................

    // ----------------------------------------------------------
    protected GitTreeEntry(GitRepository repository, ObjectId objectId, boolean isTree, String name, String path,
            long size) {
        this.repository = repository;
        this.objectId = objectId;
        this.isTree = isTree;
        this.name = name;
        this.path = path;
        this.size = size;
    }

    //~ Methods ...............................................................

    // ----------------------------------------------------------
    public static GitTreeEntry fromTreeWalk(TreeWalk walk, GitRepository repository) {
        return fromTreeWalk(walk, repository, null);
    }

    // ----------------------------------------------------------
    public static GitTreeEntry fromTreeWalk(TreeWalk walk, GitRepository repository, String pathPrefix) {
        ObjectId oid = walk.getObjectId(0);
        boolean isTree = (walk.getFileMode(0) == FileMode.TREE);
        String name = walk.getNameString();
        String path = (pathPrefix == null) ? walk.getPathString() : pathPrefix + "/" + walk.getPathString();
        long size = 0;

        if (!isTree) {
            try {
                size = walk.getObjectReader().getObjectSize(oid, ObjectReader.OBJ_ANY);
            } catch (IOException e) {
                log.warn("There was an error getting the size of the object " + oid.getName(), e);
            }
        }

        return new GitTreeEntry(repository, oid, isTree, name, path, size);
    }

    // ----------------------------------------------------------
    public GitRepository repository() {
        return repository;
    }

    // ----------------------------------------------------------
    public ObjectId objectId() {
        return objectId;
    }

    // ----------------------------------------------------------
    public boolean isTree() {
        return isTree;
    }

    // ----------------------------------------------------------
    public String name() {
        return name;
    }

    // ----------------------------------------------------------
    public String path() {
        return path;
    }

    // ----------------------------------------------------------
    public long size() {
        return size;
    }

    // ----------------------------------------------------------
    @Override
    public int hashCode() {
        return 0xFACEBEEF ^ objectId.hashCode();
    }

    // ----------------------------------------------------------
    @Override
    public boolean equals(Object other) {
        if (other instanceof GitTreeEntry) {
            GitTreeEntry otherEntry = (GitTreeEntry) other;
            return path.equals(otherEntry.path) && name.equals(otherEntry.name)
                    && objectId.equals(otherEntry.objectId);
        } else {
            return false;
        }
    }

    // ----------------------------------------------------------
    @Override
    public String toString() {
        return "<" + (isTree ? "tree" : "blob") + ": " + path + " [" + objectId.abbreviate(10).name() + "]>";
    }

    // ----------------------------------------------------------
    public void takeValueForKeyPath(Object value, String keyPath) {
        NSKeyValueCodingAdditions.DefaultImplementation.takeValueForKeyPath(this, value, keyPath);
    }

    // ----------------------------------------------------------
    public Object valueForKeyPath(String keyPath) {
        return NSKeyValueCodingAdditions.DefaultImplementation.valueForKeyPath(this, keyPath);
    }

    // ----------------------------------------------------------
    public void takeValueForKey(Object value, String key) {
        NSKeyValueCoding.DefaultImplementation.takeValueForKey(this, value, key);
    }

    // ----------------------------------------------------------
    public Object valueForKey(String key) {
        return NSKeyValueCoding.DefaultImplementation.valueForKey(this, key);
    }

    //~ Static/instance variables .............................................

    private GitRepository repository;
    private ObjectId objectId;
    private boolean isTree;
    private String name;
    private String path;
    private long size;

    private static final Logger log = Logger.getLogger(GitTreeEntry.class);
}