dmolony-DiskBrowser/src/com/bytezone/diskbrowser/infocom/AttributeManager.java

95 lines
3.0 KiB
Java
Raw Normal View History

2015-06-01 09:35:51 +00:00
package com.bytezone.diskbrowser.infocom;
import java.util.ArrayList;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;
import com.bytezone.diskbrowser.applefile.AbstractFile;
import com.bytezone.diskbrowser.disk.DefaultAppleFileSource;
import com.bytezone.diskbrowser.disk.FormattedDisk;
2020-02-09 13:02:48 +00:00
// -----------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
class AttributeManager extends AbstractFile
2020-02-09 13:02:48 +00:00
// -----------------------------------------------------------------------------------//
2015-06-01 09:35:51 +00:00
{
2019-11-01 03:30:19 +00:00
List<Statistic> list = new ArrayList<> ();
2016-03-23 23:37:59 +00:00
Header header;
2015-06-01 09:35:51 +00:00
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
public AttributeManager (String name, byte[] buffer, Header header)
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
{
super (name, buffer);
this.header = header;
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
for (int attrNo = 0; attrNo < 32; attrNo++)
list.add (new Statistic (attrNo));
}
2015-06-01 09:35:51 +00:00
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
public void addNodes (DefaultMutableTreeNode node, FormattedDisk disk)
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
{
node.setAllowsChildren (true);
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
int count = 0;
for (Statistic stat : list)
{
DefaultMutableTreeNode child = new DefaultMutableTreeNode (
new DefaultAppleFileSource (("Attribute " + count++), stat.getText (), disk));
node.add (child);
child.setAllowsChildren (false);
}
}
2015-06-01 09:35:51 +00:00
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
@Override
public String getText ()
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
{
StringBuilder text = new StringBuilder ("Attribute Frequency\n");
text.append ("--------- ---------\n");
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
for (Statistic stat : list)
text.append (String.format ("%s%n", stat));
if (text.length () > 0)
text.deleteCharAt (text.length () - 1);
return text.toString ();
}
2015-06-01 09:35:51 +00:00
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
private class Statistic
2020-02-09 13:02:48 +00:00
// ---------------------------------------------------------------------------------//
2016-03-23 23:37:59 +00:00
{
int id;
2019-11-01 03:30:19 +00:00
List<ZObject> list = new ArrayList<> ();
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
public Statistic (int id)
{
this.id = id;
for (ZObject o : header.objectManager)
if (o.attributes.get (id))
list.add (o);
}
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
String getText ()
{
StringBuilder text =
new StringBuilder ("Objects with attribute " + id + " set:\n\n");
for (ZObject o : list)
{
2019-04-22 04:35:50 +00:00
text.append (String.format ("%3d %-28s%n", o.getId (), o.getName ()));
2016-03-23 23:37:59 +00:00
}
if (text.length () > 0)
text.deleteCharAt (text.length () - 1);
return text.toString ();
}
2015-06-01 09:35:51 +00:00
2016-03-23 23:37:59 +00:00
@Override
public String toString ()
{
return String.format (" %2d %3d", id, list.size ());
}
}
2015-06-01 09:35:51 +00:00
}