| /******************************************************************************* |
| * Copyright (C) 2015, Obeo. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.egit.internal.storage; |
| |
| import org.eclipse.jgit.lib.ObjectId; |
| import org.eclipse.jgit.lib.Repository; |
| import org.eclipse.team.core.variants.IResourceVariant; |
| |
| // CHECKSTYLE:OFF |
| /** |
| * Base class of the git-related resource variants. |
| * |
| * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> |
| */ |
| public abstract class AbstractGitResourceVariant implements IResourceVariant { |
| /** Repository in which this variant's content will be accessed. */ |
| protected final Repository repository; |
| |
| /** Repository-relative path of this resource. */ |
| protected final String path; |
| |
| /** |
| * Whether this resource is a container or not in this particular variant. This may be different than the |
| * local resource's state (if there is a file/folder conflict for example). |
| */ |
| protected final boolean isContainer; |
| |
| /** Object id of this variant in its repository. */ |
| protected final ObjectId objectId; |
| |
| /** Raw mode bits of this variant. */ |
| protected final int rawMode; |
| |
| /** |
| * @param repository |
| * Repository in which this variant's content will be accessed. |
| * @param path |
| * Repository-relative path of this resource. |
| * @param isContainer |
| * Whether this resource is a container or not in this particular variant. |
| * @param objectId |
| * Object id of this variant in its repository. |
| * @param rawMode |
| * Raw mode bits of this variant. |
| */ |
| protected AbstractGitResourceVariant(Repository repository, String path, boolean isContainer, |
| ObjectId objectId, int rawMode) { |
| this.repository = repository; |
| this.path = path; |
| this.isContainer = isContainer; |
| this.objectId = objectId; |
| this.rawMode = rawMode; |
| } |
| |
| public String getName() { |
| int lastSeparator = path.lastIndexOf('/'); |
| return path.substring(lastSeparator + 1); |
| } |
| |
| public String getPath() { |
| return path; |
| } |
| |
| public boolean isContainer() { |
| return isContainer; |
| } |
| |
| public String getContentIdentifier() { |
| return objectId.name(); |
| } |
| |
| public byte[] asBytes() { |
| return objectId.name().getBytes(); |
| } |
| |
| /** |
| * @return the object id of this variant in its backing repository. |
| */ |
| public ObjectId getObjectId() { |
| return objectId; |
| } |
| |
| /** |
| * @return the raw mode of this variant. |
| */ |
| public int getRawMode() { |
| return rawMode; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (obj == this) { |
| return true; |
| } |
| if (obj instanceof AbstractGitResourceVariant) { |
| AbstractGitResourceVariant other = (AbstractGitResourceVariant)obj; |
| return this.path.equals(other.path) && this.repository.equals(other.repository) |
| && this.objectId.equals(other.objectId); |
| } |
| return false; |
| } |
| |
| @Override |
| public int hashCode() { |
| int hash = 37; |
| hash = 37 * hash + (path != null ? path.hashCode() : 0); |
| hash = 37 * hash + (repository != null ? repository.hashCode() : 0); |
| hash = 37 * hash + (objectId != null ? objectId.hashCode() : 0); |
| return hash; |
| } |
| } |
| // CHECKSTYLE:ON |