content: package eu.the5zig.mod.manager.itunes.com;
  
  import com.jacob.com.Dispatch;
  
  /**
   * Defines a source, playlist or track.
   * <p>
   * An ITObject uniquely identifies a source, playlist, or track in iTunes using
   * four separate IDs. These are runtime IDs, they are only valid while the
   * current instance of iTunes is running.
   * <p>
   * As of iTunes 7.7, you can also identify an ITObject using a 64-bit persistent
   * ID, which is valid across multiple invocations of iTunes.
   * <p>
   * The main use of the ITObject interface is to allow clients to track iTunes
   * database changes using
   * <code>iTunesEventsInterface.onDatabaseChangedEvent()</code>.
   * <p>
   * You can retrieve an ITObject with a specified runtime ID using
   * <code>iTunes.getITObjectByID()</code>.
   * <p>
   * An ITObject will always have a valid, non-zero source ID.
   * <p>
   * An ITObject corresponding to a playlist or track will always have a valid
   * playlist ID. The playlist ID will be zero for a source.
   * <p>
   * An ITObject corresponding to a track will always have a valid track and
   * track database ID. These IDs will be zero for a source or playlist.
   * <p>
   * A track ID is unique within the track's playlist. A track database ID is
   * unique across all playlists. For example, if the same music file is in two
   * different playlists, each of the tracks could have different track IDs, but
   * they will have the same track database ID.
   * <p>
   * An ITObject also has a 64-bit persistent ID which can be used to identify
   * the ITObject across multiple invocations of iTunes.
   */
  public class IITObject {
  
  	protected Dispatch object;
  
  	public IITObject(Dispatch d) {
  		object = d;
  	}
  
  	/**
  	 * Returns the JACOB Dispatch object for this object.
  	 *
  	 * @return Returns the JACOB Dispatch object for this object.
  	 */
  	public Dispatch fetchDispatch() {
  		return object;
  	}
  
  	/**
  	 * Set the name of the object.
  	 *
  	 * @param name The new name of the object.
  	 */
  	public void setName(String name) {
  		Dispatch.put(object, "Name", name);
  	}
  
  	/**
  	 * Returns the name of the object.
  	 *
  	 * @return Returns the name of the object.
  	 */
  	public String getName() {
  		return Dispatch.get(object, "Name").getString();
  	}
  
  	/**
  	 * Returns the index of the object in internal application order.
  	 *
  	 * @return The index of the object in internal application order.
  	 */
  	public int getIndex() {
  		return Dispatch.get(object, "Index").getInt();
  	}
  
  	/**
  	 * Returns the ID that identifies the source.
  	 *
  	 * @return Returns the ID that identifies the source.
  	 */
  	public int getSourceID() {
  		return Dispatch.get(object, "SourceID").getInt();
  	}
  
  	/**
  	 * Returns the ID that identifies the playlist.
  	 *
  	 * @return Returns the ID that identifies the playlist.
  	 */
  	public int getPlaylistID() {
  		return Dispatch.get(object, "PlaylistID").getInt();
  	}
  
  	/**
  	 * Returns the ID that identifies the track within the playlist.
  	 *
  	 * @return Returns the ID that identifies the track within the playlist.
  	 */
  	public int getTrackID() {
  		return Dispatch.get(object, "TrackID").getInt();
  	}
  
  	/**
  	 * Returns the ID that identifies the track, independent of its playlist.
  	 *
  	 * @return Returns the ID that identifies the track, independent of its playlist.
  	 */
  	public int getTrackDatabaseID() {
  		return Dispatch.get(object, "TrackDatabaseID").getInt();
  	}
  
  }
  