org.eclipse.mylyn.internal.git.core.GitArtifact.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.internal.git.core.GitArtifact.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Research Group for Industrial Software (INSO), Vienna University of Technology
 * 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
 *
 * Contributors:
 *     Kilian Matt (Research Group for Industrial Software (INSO), Vienna University of Technology) - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.internal.git.core;

import java.io.InputStream;

import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.mylyn.versions.core.ScmArtifact;
import org.eclipse.team.core.history.IFileRevision;
import org.eclipse.team.core.history.provider.FileRevision;

/**
 * ScmArtifact implementation for git
 * 
 * @author mattk
 */
public class GitArtifact extends ScmArtifact {

    private final GitRepository repository;

    public GitArtifact(String id, String path, GitRepository repository) {
        super(id, path);
        this.repository = repository;
    }

    @Override
    public IFileRevision getFileRevision(IProgressMonitor monitor) {
        try {
            final IPath path = Path.fromPortableString(getPath());
            return new FileRevision() {

                public IFileRevision withAllProperties(IProgressMonitor monitor) throws CoreException {
                    return this;
                }

                public boolean isPropertyMissing() {
                    return false;
                }

                public IStorage getStorage(IProgressMonitor monitor) throws CoreException {
                    return new IStorage() {

                        @SuppressWarnings("rawtypes")
                        public Object getAdapter(Class adapter) {
                            return null;
                        }

                        public boolean isReadOnly() {
                            return true;
                        }

                        public String getName() {
                            return path.lastSegment();
                        }

                        public IPath getFullPath() {
                            return path;
                        }

                        public InputStream getContents() throws CoreException {
                            try {
                                return repository.getRepository()
                                        .open(ObjectId.fromString(getId()), Constants.OBJ_BLOB).openStream();
                            } catch (Exception e) {
                                e.printStackTrace();
                                throw new CoreException(
                                        new Status(IStatus.ERROR, GitConnector.PLUGIN_ID, e.getMessage()));
                            }
                        }
                    };
                }

                public String getName() {
                    return path.lastSegment();
                }
            };

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public IFileRevision[] getContributors(IProgressMonitor monitor) {
        throw new UnsupportedOperationException();
    }

    @Override
    public IFileRevision[] getTargets(IProgressMonitor monitor) {
        throw new UnsupportedOperationException();
    }

}