/*******************************************************************************
 * Copyright (c) 2003, 2006 Fosclipse project 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:
 *     Fosclipse project committers - initial API and implementation
 ******************************************************************************/
package org.fossil_scm.fosclipse.core;

import org.eclipse.core.runtime.IProgressMonitor;

/**
 * The Fossil analog of a directory. Fossil folders have access to synchronization information that describes the association
 * between the folder and the remote repository.
 * 
 * @see IFossilResource
 * @see IFossilFile
 */
public interface IFossilFolder extends IFossilResource {

	public static final int FILE_MEMBERS = 1;
	public static final int FOLDER_MEMBERS = 2;
	public static final int IGNORED_MEMBERS = 4;
	public static final int UNMANAGED_MEMBERS = 8;
	public static final int MANAGED_MEMBERS = 16;
	public static final int EXISTING_MEMBERS = 32;
	public static final int PHANTOM_MEMBERS = 64;
	public static final int ALL_MEMBERS = FILE_MEMBERS
			| FOLDER_MEMBERS
			| IGNORED_MEMBERS
			| UNMANAGED_MEMBERS
			| MANAGED_MEMBERS
			| EXISTING_MEMBERS
			| PHANTOM_MEMBERS;
	public static final int ALL_EXISTING_MEMBERS = FILE_MEMBERS
			| FOLDER_MEMBERS
			| IGNORED_MEMBERS
			| UNMANAGED_MEMBERS
			| MANAGED_MEMBERS
			| EXISTING_MEMBERS;
	public static final int ALL_UNIGNORED_MEMBERS = FILE_MEMBERS
			| FOLDER_MEMBERS
			| UNMANAGED_MEMBERS
			| MANAGED_MEMBERS
			| EXISTING_MEMBERS
			| PHANTOM_MEMBERS;
	public static final int ALL_EXISTING_UNIGNORED_MEMBERS = FILE_MEMBERS
			| FOLDER_MEMBERS
			| UNMANAGED_MEMBERS
			| MANAGED_MEMBERS
			| EXISTING_MEMBERS;

	/**
	 * Answer the immediate children of the resource The flags indicate the type of members to be included. Here are the rules for
	 * specifying just one flag:
	 * 
	 * a) FILE_MEMBERS and FOLDER_MEMBERS will return managed and unmanaged resource of the corresponding type b) IGNORED_MEMBERS,
	 * MANAGED_RESOURCES and UNMANAGED_RESOURCES will return files and folders of the given type c) EXISTING_MEMBERS and
	 * PHANTOM_MEMBERS will return existing and phatom resource of the corresponding type
	 * 
	 * Note: Unmanaged resources are those that are neither managed or ignored.
	 * 
	 * If all of the flags from either group a), group b) or group c) are not present, the same rule for default types applies. For
	 * example, - FILE_MEMBERS | FOLDER_MEMBERS will return all managed and unmanaged, existing and phantom files and folders. -
	 * IGNORED_MEMBERS | UNMANAGED_MEMBERS will return all ignored or unmanaged, existing or phantom files and folders If a flag
	 * from each group is present, the result is the union of the sets. For example, - FILE_MEMBERS | IGNORED_MEMBERS |
	 * EXISTING_MEMBERS will return all existing ignored files.
	 */
	public IFossilResource[] members(IProgressMonitor monitor, int flags) throws FossilException;

}
