package sk.stuba.fiit.perconik.activity.serializers.git; import org.eclipse.core.resources.IResource; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer; import sk.stuba.fiit.perconik.data.content.StructuredContent; import sk.stuba.fiit.perconik.eclipse.jgit.lib.GitRepositories; import static sk.stuba.fiit.perconik.activity.serializers.git.RepositorySerializer.putRepositoryBranch; import static sk.stuba.fiit.perconik.activity.serializers.git.RepositorySerializer.putRepositoryDirectories; import static sk.stuba.fiit.perconik.activity.serializers.git.RepositorySerializer.putRepositoryRemotes; import static sk.stuba.fiit.perconik.data.content.StructuredContents.key; public final class MappedResourceSerializer extends AbstractConfigurableMultiSerializer<IResource> { public MappedResourceSerializer(final Option ... options) { super(options); } public MappedResourceSerializer(final Iterable<Option> options) { super(options); } static void putMappedResource(final StructuredContent content, final IResource resource) { Repository repository = EGitAccess.getRepository(resource); if (repository != null) { putRepositoryDirectories(content, repository); putRepositoryRemotes(content, repository); putRepositoryBranch(content, repository); String path = EGitAccess.getRelativePath(resource); if (path != null) { RevCommit commit = GitRepositories.getMostRecentCommit(repository, path); content.put(key("mostRecentCommit", "name"), commit != null ? commit.getName() : null); } } } @Override protected void put(final StructuredContent content, final IResource resource) { putMappedResource(content, resource); } }