// Copyright 2012 Georg-August-Universität Göttingen, Germany
//
// 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 de.ugoe.cs.autoquest.tasktrees.treeifc;
import java.util.ArrayList;
import java.util.List;
/**
*
* TODO comment
*
*
* @author Patrick Harms
*/
public class TaskPath {
/** */
private List taskList;
/**
*
*
*/
public TaskPath() {
super();
taskList = new ArrayList();
}
/**
*
*/
public TaskPath(TaskPath path) {
this();
taskList.addAll(path.taskList);
}
/**
*
*/
public TaskPath subPath(int fromIndex, int toIndex) {
TaskPath result = new TaskPath();
result.taskList.addAll(taskList.subList(fromIndex, toIndex));
return result;
}
/**
*
*/
public ITask removeLast() {
Entry last = taskList.remove(taskList.size() - 1);
if (last != null) {
return last.getTask();
}
else {
return null;
}
}
/**
*
*/
public ITask getLast() {
Entry last = taskList.get(taskList.size() - 1);
if (last != null) {
return last.getTask();
}
else {
return null;
}
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return taskList.toString();
}
/**
*
*/
public int size() {
return taskList.size();
}
/**
*
*/
public boolean isEmpty() {
return taskList.isEmpty();
}
/**
*
*/
public void add(ITask task, int index) {
taskList.add(new Entry(task, index));
}
/**
*
*/
public ITask getTask(int index) {
Entry last = taskList.get(index);
if (last != null) {
return last.getTask();
}
else {
return null;
}
}
/**
*
*/
public Entry get(int index) {
return taskList.get(index);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
ITask last = getLast();
if (last != null) {
return last.hashCode();
}
else {
return 0;
}
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
else if (obj instanceof TaskPath) {
TaskPath other = (TaskPath) obj;
if (this.size() == other.size()) {
for (int i = 0; i < this.size(); i++) {
if (!this.get(i).equals(other.get(i))) {
return false;
}
}
return true;
}
}
return false;
}
/**
*
*/
public static class Entry {
/** */
private ITask task;
/** */
private int index;
/**
*
*/
private Entry(ITask task, int index) {
this.task = task;
this.index = index;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "(" + task + "," + index + ")";
}
/**
* @return the task
*/
public ITask getTask() {
return task;
}
/**
* @return the index
*/
public int getIndex() {
return index;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return task.hashCode();
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
else if (obj instanceof TaskPath.Entry) {
return (this.getIndex() == ((TaskPath.Entry) obj).getIndex()) &&
(this.getTask().equals(((TaskPath.Entry) obj).getTask()));
}
return false;
}
}
}