/*******************************************************************************
 * Copyright (c) 2005, 2007 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.jee.archive;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * {@link ArchiveOptions} is a means for passing data pertaining to opening and
 * saving {@link IArchive}s. This class is simply a wrapper around {@link Map}
 * and a few well defined OptionKeys. Clients are welcome to define and set/get
 * any options deemed necessary.
 * 
 * This class is not intended to be subclassed by clients.
 */
public class ArchiveOptions {

	// TODO add debug tracing support

	/**
	 * An OptionKey used for specifying an {@link IArchiveLoadAdapter}.
	 */
	public static final String LOAD_ADAPTER = "LOAD_ADAPTER"; //$NON-NLS-1$

	/**
	 * An OptionKey used for specifying an {@link IArchiveSaveAdapter}.
	 */
	public static final String SAVE_ADAPTER = "SAVE_ADAPTER"; //$NON-NLS-1$
	
	/**
	 * An OptionKey used for specifying the path for the Archive.
	 */
	public static final String ARCHIVE_PATH = "ARCHIVE_PATH"; //$NON-NLS-1$
	
	/**
	 * An OptionKey used to specify the parent Archive used when opening nested Archives.
	 */
	public static final String PARENT_ARCHIVE = "PARENT_ARCHIVE"; //$NON-NLS-1$
	
	private Map optionsMap = new HashMap();

	public ArchiveOptions() {
	}

	public boolean hasOption(Object optionKey) {
		return optionsMap.containsKey(optionKey);
	}

	public Object getOption(Object optionKey) {
		return optionsMap.get(optionKey);
	}

	@SuppressWarnings("unchecked")
	public void setOption(Object optionKey, Object optionValue) {
		optionsMap.put(optionKey, optionValue);
	}
	
	public void removeOption(Object optionKey){
		optionsMap.remove(optionKey);
	}
	
	public Set keySet(){
		return optionsMap.keySet();
	}

}
