/*
* 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.controller;
import ca.cmput301f13t03.adventure_datetime.model.Interfaces.IStoryModelDirector;
import ca.cmput301f13t03.adventure_datetime.model.Story;
import ca.cmput301f13t03.adventure_datetime.model.StoryFragment;
import java.util.Collection;
import java.util.HashSet;
import java.util.UUID;
/**
* Controller for aspects of authoring a story
*
* @author Evan DeGraff
* @author Jesse Tucker
*/
public class AuthorController {
private IStoryModelDirector m_storyDirector = null;
/**
* Constructor for the AuthorController
*
* @param director The director managing transactions with local and online storage
*/
public AuthorController(IStoryModelDirector director) {
m_storyDirector = director;
}
/**
* Passes a new story created by the director to the view
*
* @return A new Story
*/
public Story CreateStory()
{
return m_storyDirector.CreateNewStory();
}
public StoryFragment CreateFragment()
{
return m_storyDirector.CreateNewStoryFragment();
}
/**
* Saves a story to the local storage
* @return Whether or not the save was successful
*/
public boolean saveStory()
{
return m_storyDirector.SaveStory();
}
/**
* Gets a story from the director
*
* @param storyId UUID of the Story to get
*
* @return The Story, if found. Null, otherwise.
*/
public Story getStory(UUID storyId) {
return m_storyDirector.getStory(storyId);
}
/**
* Deletes a Story and all StoryFragments from local and online storage.
*
* @param storyId UUID of the story to delete
*/
public void deleteStory(UUID storyId) {
Story story = m_storyDirector.getStory(storyId);
if (story == null) return;
HashSet<UUID> fragments = story.getFragmentIds();
for(UUID fragment : fragments) {
deleteFragment(fragment);
}
m_storyDirector.deleteStory(storyId);
}
/**
* Deletes a fragment from local or online storage
*
* @param fragmentId UUID of the fragment to delete
*/
public void deleteFragment(UUID fragmentId) {
m_storyDirector.deleteFragment(fragmentId);
}
public void deleteImage(UUID imageId) {
m_storyDirector.deleteImage(imageId);
}
/**
* Selects a Story from the local or online storage.
*
* @param storyId UUID of the story
*/
public void selectStory(UUID storyId)
{
m_storyDirector.selectStory(storyId);
}
/**
* Selects a StoryFragment from the local or online storage
*
* @param fragmentId UUID of the fragment
*/
public void selectFragment(UUID fragmentId)
{
m_storyDirector.selectFragment(fragmentId);
}
/**
* Uploads a story to the server
*/
public void upload(){
m_storyDirector.uploadCurrentStory();
}
/**
* Changes a downloaded story to author mode
* @param storyId
* @param username The new author name
*/
public void setStoryToAuthor(UUID storyId, String username) {
m_storyDirector.setStoryToAuthor(storyId, username);
}
/**
* Checks the list of stories to see if the user authored them
* @param stories - list of stories to be checked
* @return list of authored stories
*/
public Collection<Story> checkIfAuthored(Collection<Story> stories) {
Collection<Story> authoredStories = new HashSet<Story>();
for(Story story : stories) {
if(m_storyDirector.isAuthored(story.getId()))
authoredStories.add(story);
}
return authoredStories;
}
/**
* Checks the list of stories to see if the user didn't author them
* @param stories - list of stories to be checked
* @return list of non-authored stories
*/
public Collection<Story> checkIfNotAuthored(Collection<Story> stories) {
Collection<Story> authoredStories = new HashSet<Story>();
for(Story story : stories) {
if(!m_storyDirector.isAuthored(story.getId()))
authoredStories.add(story);
}
return authoredStories;
}
}