dmolony-DiskBrowser/src/com/bytezone/diskbrowser/disk/DefaultAppleFileSource.java

101 lines
2.5 KiB
Java
Raw Normal View History

2015-06-01 09:35:51 +00:00
package com.bytezone.diskbrowser.disk;
import java.util.List;
import com.bytezone.diskbrowser.applefile.AppleFileSource;
import com.bytezone.diskbrowser.gui.DataSource;
/*
* Most AppleFileSource objects are CatalogEntry types. In order to allow Disk
* and Volume nodes in the tree to show some text in the centre panel, use a
* DefaultAppleFileSource which returns a DefaultDataSource (just some text).
*/
public class DefaultAppleFileSource implements AppleFileSource
{
final String title;
final DataSource file;
final FormattedDisk owner;
List<DiskAddress> blocks;
public DefaultAppleFileSource (String text, FormattedDisk owner)
{
this ("", text, owner);
}
public DefaultAppleFileSource (String title, String text, FormattedDisk owner)
{
this (title, new DefaultDataSource (text), owner);
}
public DefaultAppleFileSource (String title, DataSource file, FormattedDisk owner)
{
this.title = title;
this.file = file;
this.owner = owner;
}
public DefaultAppleFileSource (String title, DataSource file, FormattedDisk owner,
2016-02-25 21:49:22 +00:00
List<DiskAddress> blocks)
2015-06-01 09:35:51 +00:00
{
this (title, file, owner);
this.blocks = blocks;
if (file instanceof DefaultDataSource)
((DefaultDataSource) file).buffer = owner.getDisk ().readSectors (blocks);
}
public void setSectors (List<DiskAddress> blocks)
{
this.blocks = blocks;
if (file instanceof DefaultDataSource)
((DefaultDataSource) file).buffer = owner.getDisk ().readSectors (blocks);
}
2016-02-25 21:49:22 +00:00
@Override
2015-06-01 09:35:51 +00:00
public DataSource getDataSource ()
{
return file;
}
2016-02-25 21:49:22 +00:00
@Override
2015-06-01 09:35:51 +00:00
public FormattedDisk getFormattedDisk ()
{
return owner;
}
2016-02-25 21:49:22 +00:00
@Override
2015-06-01 09:35:51 +00:00
public List<DiskAddress> getSectors ()
{
return blocks;
}
/*
* See similar routine in CatalogPanel.DiskNode
*/
@Override
public String toString ()
{
final int MAX_NAME_LENGTH = 40;
final int SUFFIX_LENGTH = 12;
final int PREFIX_LENGTH = MAX_NAME_LENGTH - SUFFIX_LENGTH - 3;
if (title.length () > MAX_NAME_LENGTH)
return title.substring (0, PREFIX_LENGTH) + "..."
2016-02-25 21:49:22 +00:00
+ title.substring (title.length () - SUFFIX_LENGTH);
2015-06-01 09:35:51 +00:00
return title;
}
2016-02-25 21:49:22 +00:00
@Override
2015-06-01 09:35:51 +00:00
public String getUniqueName ()
{
return title;
}
2016-02-25 21:49:22 +00:00
@Override
public boolean contains (DiskAddress diskAddress)
{
for (DiskAddress da : blocks)
if (da.matches (diskAddress))
2016-02-25 21:49:22 +00:00
return true;
return false;
}
2015-06-01 09:35:51 +00:00
}