/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.update.internal.core;
import java.io.*;

import org.eclipse.update.configuration.*;
import org.eclipse.update.core.model.*;

/**
 * Default implementation of a IVolume
 */
public class Volume extends ModelObject implements IVolume {

	private long size;
	private int type;
	private String label;
	private File root;

	/**
	 * Constructor for Volume.
	 */
	public Volume(File root,String label,int type,long size) {
		super();
		this.root = root;
		this.label = label;
		this.type = type;
		this.size = size;
	}

	/**
	 * @see IVolume#getFreeSpace()
	 */
	public long getFreeSpace() {
		return size;
	}

	/**
	 * @see IVolume#getLabel()
	 */
	public String getLabel() {
		return label;
	}

	/**
	 * @see IVolume#getType()
	 */
	public int getType() {
		return type;
	}

	/**
	 * @see IVolume#getFile()
	 */
	public File getFile() {
		return root;
	}

	/**
	 * @see IAdaptable#getAdapter(Class)
	 */
	public Object getAdapter(Class arg0) {
		return null;
	}

}
