/* * Copyright (c) 2013 Andrew Fontaine, James Finlay, Jesse Tucker, Jacob Viau, and * Evan DeGraff * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package ca.cmput301f13t03.adventure_datetime.model.Interfaces; import ca.cmput301f13t03.adventure_datetime.model.Comment; import ca.cmput301f13t03.adventure_datetime.model.Image; import ca.cmput301f13t03.adventure_datetime.model.Story; import ca.cmput301f13t03.adventure_datetime.model.StoryFragment; import java.util.List; import java.util.UUID; public interface IWebStorage { /** * Gets a story from ES * @param storyId ID of the story to retrieve * @return The Story object * @throws Exception, connection errors, etc. See JestClient */ public abstract Story getStory(UUID storyId) throws Exception; /** * Tries to get "size" stories, starting at "from" from ES. * May return less than "size" if end of stories is reached. * @param from the start index to return stories from * @param size the amount of stories to try to return * @return List of stories * @throws Exception, connection errors, etc. See JestClient */ public abstract List<Story> getStories(int from, int size) throws Exception; /** * Queries elasticsearch with the provided filter for matching stories * Searches across Author, title, tags, and synposis fields * @param filter the filter to search for. * @param from the start index to return stories from * @param size the amount of stories to try to return * @return List of stories * @throws Exception, connection errors, etc. See JestClient */ public List<Story> queryStories(String filter, int from, int size) throws Exception; /** * Gets a fragment from ES * All fragments are UUID so story reference is not needed * @param fragmentId ID of the fragment to retrieve * @return The StoryFragment object * @throws Exception, connection errors, etc. See JestClient */ public abstract StoryFragment getFragment(UUID fragmentId) throws Exception; /** * Gets fragments for a given story. * Will return up to size fragments starting at from. * @param storyId ID of the story to retrieve all fragments for * @param from the start index to return fragments from * @param size the amount of fragments to try to return * @return List of StoryFragments * @throws Exception, connection errors, etc. See JestClient */ public abstract List<StoryFragment> getFragmentsForStory(UUID storyId, int from, int size) throws Exception; /** * Gets comments for the targetId. May be a StoryId or FragmentId. * Will return up to size comments starting at from. * Loads images if a comment contains one as well. * @param targetId The Story or StoryFragment to retrieve comments for. * @param from the start index to return comments from * @param size the amount of comments to try to return * @return A List of comments * @throws Exception, connection errors, etc. See JestClient */ public abstract List<Comment> getComments(UUID targetId, int from, int size) throws Exception; /** * Puts a comment to ES. If a comment contains an image, it puts * that in ES as well. * @param comment the Comment to save to ES * @return True if succeeded, false otherwise. * @throws Exception, connection errors, etc. See JestClient */ public abstract boolean putComment(Comment comment) throws Exception; /** * Deletes a comment from ES. * Does not delete a comments image if it contains one. * @param commentId ID of the comment to delete * @return True if succeeded, false otherwise * @throws Exception, connection errors, etc. See JestClient */ public abstract boolean deleteComment(UUID commentId) throws Exception; /** * Publishes a Story to ES. Overwrites if already exists. * Note: this does NOT check if the StoryFragments actually belong to the Story * @param story the Story object to publish * @param fragments List of StoryFragments to publish * @return True if succeeded, false otherwise * @throws Exception, connection errors, etc. See JestClient */ public abstract boolean publishStory(Story story, List<StoryFragment> fragments) throws Exception; /** * Gets an image from elasticsearch * @param imageId the image to get * @return The retrieved Image object * @throws Exception, connection errors, etc. See JestClient */ public Image getImage(UUID imageId) throws Exception; /** * Gets images in bulk * @param imageIds the list of images to retrieve * @return A list of images * @throws Exception, connection errors, etc. See JestClient */ public List<Image> getImages(List<UUID> imageIds) throws Exception; /** * Puts an image into elasticsearch. * Updates it if it already exists. * @param image the image to put * @return True if succeeded, false otherwise. * @throws Exception, connection errors, etc. See JestClient */ public boolean putImage(Image image) throws Exception; /** * Deletes an image from elasticsearch * @param imageId the image to delete * @return True if succeeded, false otherwise * @throws Exception, connection errors, etc. See JestClient */ public boolean deleteImage(UUID imageId) throws Exception; /** * Deletes a story from the web service. * @param storyId the story Id. * @return True if succeeded, false otherwise. * @throws Exception, connection errors, etc. See JestClient */ public boolean deleteStory(UUID storyId) throws Exception; /** * Deletes a fragment from the web service. * @param fragId the fragment Id. * @return True if succeeded, false otherwise. * @throws Exception, connection errors, etc. See JestClient */ public boolean deleteFragment(UUID fragId) throws Exception; }