/*******************************************************************************
 * Copyright (c) 2004, 2012 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.context.ui.state;

import org.eclipse.core.runtime.Assert;
import org.eclipse.mylyn.context.core.IInteractionContext;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.XMLMemento;

/**
 * Stores workspace specific settings for a context.
 * 
 * @author Steffen Pingel
 */
public class ContextState {

	private boolean dirty;

	private final IInteractionContext context;

	private String contextHandle;

	private final XMLMemento memento;

	public ContextState(IInteractionContext context, String contextHandle, XMLMemento memento) {
		Assert.isNotNull(memento);
		Assert.isNotNull(contextHandle);
		this.context = context;
		this.contextHandle = contextHandle;
		this.memento = memento;
	}

	void setContextHandle(String contextHandle) {
		this.contextHandle = contextHandle;
	}

	// XXX equals and hashcode should probably use the handle to determine equality
	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof ContextState)) {
			return false;
		}
		return context.equals(((ContextState) obj).context);
	}

	@Override
	public int hashCode() {
		return context.hashCode();
	}

	public String getContextHandle() {
		return contextHandle;
	}

	public IInteractionContext getContext() {
		return context;
	}

	XMLMemento getMemento() {
		return memento;
	}

	public IMemento getMemento(String type) {
		return memento.getChild(type);
	}

	public IMemento createMemento(String type) {
		dirty = true;
		return memento.createChild(type);
	}

	public boolean isDirty() {
		return dirty;
	}

	public void removeMemento(String type) {
		memento.createChild(type);
	}

	public void setDirty(boolean dirty) {
		this.dirty = dirty;
	}

}
