/*******************************************************************************
 * Copyright (c) 2004, 2008 Tasktop Technologies and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Tasktop Technologies - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.internal.sandbox.ui.context;

import java.util.Collections;
import java.util.List;

import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
import org.eclipse.mylyn.tasks.core.IRepositoryElement;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.ui.TasksUi;

/**
 * @author Mik Kersten
 */
public class TaskStructureBridge extends AbstractContextStructureBridge {

	public static final String CONTENT_TYPE = "meta/task"; //$NON-NLS-1$

	@Override
	public String getContentType() {
		return CONTENT_TYPE;
	}

	@Override
	public String getHandleIdentifier(Object object) {
		if (object instanceof ITask) {
			return ((ITask) object).getHandleIdentifier();
		} else {
			return null;
		}
	}

	@Override
	public String getParentHandle(String handle) {
		return null;
	}

	@Override
	public Object getObjectForHandle(String handle) {
		return TasksUi.getRepositoryModel().getTask(handle);
	}

	@Override
	public List<String> getChildHandles(String handle) {
		return Collections.emptyList();
	}

	@Override
	public String getLabel(Object object) {
		if (object instanceof ITask) {
			return ((ITask) object).getSummary();
		} else {
			return null;
		}
	}

	@Override
	public boolean canBeLandmark(String handle) {
		return false;
	}

	@Override
	public boolean acceptsObject(Object object) {
		return object instanceof IRepositoryElement;
	}

	@Override
	public boolean canFilter(Object object) {
		return object instanceof ITask;
	}

	@Override
	public boolean isDocument(String handle) {
		return getObjectForHandle(handle) instanceof ITask;
	}

	@Override
	public String getHandleForOffsetInObject(Object resource, int offset) {
		return null;
	}

	@Override
	public String getContentType(String elementHandle) {
		return getContentType();
	}
}
