package sk.stuba.fiit.perconik.eclipse.core.resources;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import sk.stuba.fiit.perconik.utilities.constant.IntegralConstant;
import sk.stuba.fiit.perconik.utilities.constant.IntegralConstantSupport;
import sk.stuba.fiit.perconik.utilities.constant.TypeConstant;
import sk.stuba.fiit.perconik.utilities.constant.TypeConstantSupport;
/**
* Resource types.
*
* @see IResource
*
* @author Pavol Zbell
* @since 1.0
*/
public enum ResourceType implements IntegralConstant, TypeConstant<IResource> {
/**
* @see IResource#FILE
*/
FILE(IResource.FILE, IFile.class),
/**
* @see IResource#FOLDER
*/
FOLDER(IResource.FOLDER, IFolder.class),
/**
* @see IResource#PROJECT
*/
PROJECT(IResource.PROJECT, IProject.class),
/**
* @see IResource#ROOT
*/
ROOT(IResource.ROOT, IWorkspaceRoot.class);
private static final IntegralConstantSupport<ResourceType> integers = IntegralConstantSupport.of(ResourceType.class);
private static final TypeConstantSupport<ResourceType, IResource> types = TypeConstantSupport.of(ResourceType.class);
private final int value;
private final Class<? extends IResource> type;
private ResourceType(final int value, final Class<? extends IResource> type) {
assert type != null;
this.value = value;
this.type = type;
}
public static Set<Integer> valuesAsIntegers() {
return integers.getIntegers();
}
public static Set<Class<? extends IResource>> valuesAsTypes() {
return types.getTypes();
}
public static ResourceType valueOf(final int value) {
return integers.getConstant(value);
}
public static ResourceType valueOf(final Class<? extends IResource> type) {
return types.getConstant(type);
}
public int getValue() {
return this.value;
}
public Class<? extends IResource> getType() {
return this.type;
}
}