/*
* Copyright 2014 Artem Chikin
* Copyright 2014 Artem Herasymchuk
* Copyright 2014 Tom Krywitsky
* Copyright 2014 Henry Pabst
* Copyright 2014 Bradley Simons
*
* 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 ca.ualberta.cmput301w14t08.geochan.tasks;
import ca.ualberta.cmput301w14t08.geochan.fragments.ThreadListFragment;
import ca.ualberta.cmput301w14t08.geochan.interfaces.GetThreadCommentsRunnableInterface;
import ca.ualberta.cmput301w14t08.geochan.interfaces.TaskInterface;
import ca.ualberta.cmput301w14t08.geochan.managers.ThreadManager;
import ca.ualberta.cmput301w14t08.geochan.runnables.GetThreadCommentsRunnable;
/**
* Responsible for the task that downloads all the Comments for a particular
* ThreadComment from ElasticSearch.
*
* @author Artem Herasymchuk
*
*/
public class GetThreadCommentsTask implements TaskInterface, GetThreadCommentsRunnableInterface {
private Runnable getThreadCommentsRunnable;
private ThreadListFragment fragment;
private ThreadManager manager;
private Thread thread;
/**
* Constructs an instance of the task and its runnables.
*/
public GetThreadCommentsTask() {
this.getThreadCommentsRunnable = new GetThreadCommentsRunnable(this);
}
/**
* Initializes the instance of the task with the parameters needed to run it.
* @param manager the ThreadManager
* @param fragment the ThreadListFragment
*/
public void initGetThreadCommentsTask(ThreadManager manager, ThreadListFragment fragment) {
this.manager = manager;
this.fragment = fragment;
}
/**
* {@inheritDoc}
*/
@Override
public void handleGetThreadCommentsState(int state) {
int outState;
switch(state) {
case GetThreadCommentsRunnable.STATE_GET_THREADS_COMPLETE:
outState = ThreadManager.GET_THREADS_COMPLETE;
break;
case GetThreadCommentsRunnable.STATE_GET_THREADS_FAILED:
outState = ThreadManager.GET_THREADS_FAILED;
break;
default:
outState = ThreadManager.GET_THREADS_RUNNING;
break;
}
handleState(outState);
}
/**
* {@inheritDoc}
*/
@Override
public void handleState(int state) {
manager.handleGetThreadCommentsState(this, state);
}
/**
* {@inheritDoc}
*/
@Override
public void setCurrentThread(Thread thread) {
synchronized (manager) {
this.thread = thread;
}
}
/**
* {@inheritDoc}
*/
@Override
public Thread getCurrentThread() {
synchronized (manager) {
return thread;
}
}
/**
* {@inheritDoc}
*/
@Override
public void recycle() {
this.manager = null;
this.fragment = null;
}
/* Getters/setters for the interfaces this task impements */
@Override
public void setGetThreadCommentsThread(Thread thread) {
setCurrentThread(thread);
}
/* Basic getters/setters below */
public ThreadListFragment getFragment() {
return fragment;
}
public Runnable getGetThreadCommentsRunnable() {
return getThreadCommentsRunnable;
}
}