/* * Copyright 2012 GitHub Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.mobile.core.gist; import static java.lang.String.CASE_INSENSITIVE_ORDER; import com.github.mobile.core.ItemStore; import java.io.IOException; import java.util.Map; import java.util.TreeMap; import org.eclipse.egit.github.core.Gist; import org.eclipse.egit.github.core.GistFile; import org.eclipse.egit.github.core.service.GistService; /** * Store of Gists */ public class GistStore extends ItemStore { private final ItemReferences<Gist> gists = new ItemReferences<Gist>(); private final GistService service; /** * Create gist store * * @param service */ public GistStore(final GistService service) { this.service = service; } /** * Get gist * * @param id * @return gist or null if not in store */ public Gist getGist(String id) { return gists.get(id); } /** * Sort files in {@link Gist} * * @param gist * @return sorted files */ protected Map<String, GistFile> sortFiles(final Gist gist) { Map<String, GistFile> files = gist.getFiles(); if (files == null || files.size() < 2) return files; Map<String, GistFile> sorted = new TreeMap<String, GistFile>( CASE_INSENSITIVE_ORDER); sorted.putAll(files); return sorted; } /** * Add gist to store * * @param gist * @return gist */ public Gist addGist(Gist gist) { Gist current = getGist(gist.getId()); if (current != null) { current.setComments(gist.getComments()); current.setDescription(gist.getDescription()); current.setFiles(sortFiles(gist)); current.setUpdatedAt(gist.getUpdatedAt()); return current; } else { gist.setFiles(sortFiles(gist)); gists.put(gist.getId(), gist); return gist; } } /** * Refresh gist * * @param id * @return refreshed gist * @throws IOException */ public Gist refreshGist(String id) throws IOException { return addGist(service.getGist(id)); } /** * Edit gist * * @param gist * @return edited gist * @throws IOException */ public Gist editGist(Gist gist) throws IOException { return addGist(service.updateGist(gist)); } }