package de.cinovo.cloudconductor.server.repo.indexer; import java.io.IOException; import java.nio.charset.Charset; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StreamUtils; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.CollectionType; import com.fasterxml.jackson.databind.type.SimpleType; import de.cinovo.cloudconductor.api.lib.helper.MapperFactory; import de.cinovo.cloudconductor.api.model.PackageVersion; import de.cinovo.cloudconductor.server.repo.RepoEntry; import de.cinovo.cloudconductor.server.repo.provider.IRepoProvider; /** * Copyright 2014 Hoegernet<br> * <br> * * @author Thorsten Hoeger * */ public class IndexFileIndexer implements IRepoIndexer { /** * Cloudconductor Index file */ public static final String INDEX_FILE = "index.c2"; private RepoEntry latest; @Autowired private ObjectMapper mapper = MapperFactory.createDefault(); @Override public Set<PackageVersion> getRepoIndex(IRepoProvider provider) { RepoEntry indexEntry = provider.getEntry(IndexFileIndexer.INDEX_FILE); if (indexEntry != null) { if (!indexEntry.hasChanged(this.latest)) { return null; } this.latest = indexEntry; try { String indexString = StreamUtils.copyToString(provider.getEntryStream(IndexFileIndexer.INDEX_FILE), Charset.forName("UTF-8")); CollectionType indexType = CollectionType.construct(Set.class, SimpleType.construct(PackageVersion.class)); return this.mapper.readValue(indexString, indexType); } catch (IOException e) { throw new RuntimeException("Failed to read index", e); } } throw new RuntimeException("Didn't find index file"); } }