/*
* Disc.java
*
* Copyright (c) 2007 Vreixo Formoso
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See COPYING file for details.
*/
package org.pykix.libburnia.libburn;
import org.pykix.libburnia.bindings.Proxy;
/**
* References a whole disc.
*
* @author Vreixo Formoso
* @since 0.1
*/
public class Disc extends Proxy {
public static final int POS_END = 100;
/**
* Create a new disc.
*/
public Disc() {
super( burn_disc_create() );
}
Disc(long ptr) {
super(ptr);
}
/**
* Add a session to disc at a specific position.
*
* @param session
* Session to add to the disc.
* @param pos
* position to add at ({@link #POS_END} is "at the end").
* @return
* true
on success, false
on failure.
*/
public boolean addSession(Session session, int pos) {
if ( pos > POS_END ) {
return false;
}
return burn_disc_add_session( pointerOf(this), pointerOf(session), pos);
}
/**
* Remove a session from a disc.
*
* @param session
* Session to find and remove.
* @return
* true
on success, false
on failure,
* for example if session was not previously added to disc.
*/
public boolean removeSession(Session session) {
return burn_disc_remove_session( pointerOf(this), pointerOf(session));
}
/**
* Gets an array of all the sessions for the disc.
*
*
* THIS IS NO LONGER VALID AFTER YOU ADD OR REMOVE A SESSION. * * FIXME same problem as in {@link Session#getTracks()} * * @return * An array with the sessions. */ public Session[] getSessions() { long[] sessionPtrs = burn_disc_get_sessions(pointerOf(this)); Session[] sessions = new Session[sessionPtrs.length]; for ( int i = 0; i < sessionPtrs.length; ++i ) { long ptr = sessionPtrs[i]; Session session = (Session) proxyFor(ptr); if (session == null) { session = new Session(ptr); } sessions[i] = session; } return sessions; } /** * Get how much long the disc will be. * * @return * Number of sectors of the disc. */ public int getSectors() { return burn_disc_get_sectors( pointerOf(this) ); } @Override protected void finalize() throws Throwable { super.finalize(); burn_disc_free( pointerOf(this) ); } private static native long burn_disc_create(); private static native void burn_disc_free(long d); private static native boolean burn_disc_add_session( long d, long s, int pos); private static native boolean burn_disc_remove_session(long d, long s); private static native long[] burn_disc_get_sessions(long d); private static native int burn_disc_get_sectors(long d); }