| /* |
| ***************************************************************************** |
| * Copyright (C) 2000-2004, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ***************************************************************************** |
| */ |
| package com.ibm.rbm; |
| |
| import java.io.IOException; |
| import java.io.PrintStream; |
| import java.io.Writer; |
| import java.util.*; |
| |
| /** |
| * A class representing a group of BundleItems and the meta data associated with that group |
| * |
| * @author Jared Jackson |
| * @see com.ibm.rbm.RBManager |
| */ |
| public class BundleGroup { |
| private String name; // The name of the group |
| private String comment; // A comment describing this group |
| private TreeSet items; // The NLS items contained in this group |
| private Bundle bundle; // The parent Bundle object of this group |
| |
| /** |
| * Basic data constructor. |
| * Creates a BundleGroup with a parent bundle and a given name. |
| */ |
| public BundleGroup(Bundle parent, String name) { |
| bundle = parent; |
| this.name = name; |
| comment = null; |
| items = new TreeSet(new Comparator(){ |
| public boolean equals(Object o) { return false; } |
| public int compare(Object o1, Object o2) { |
| if (!(o1 instanceof BundleItem) || !(o2 instanceof BundleItem)) |
| return 0; |
| BundleItem i1 = (BundleItem)o1; |
| BundleItem i2 = (BundleItem)o2; |
| return i1.getKey().compareTo(i2.getKey()); |
| } |
| }); |
| } |
| |
| /** |
| * Two bundle groups are considered equal iff their names are the same. |
| */ |
| public boolean equals(Object o) { |
| return (o instanceof BundleGroup && ((BundleGroup)o).getName().equals(name)); |
| } |
| |
| // This should be changed anywhere it is used |
| |
| public Vector getItemsAsVector() { |
| Vector v = new Vector(); |
| Iterator iter = items.iterator(); |
| while (iter.hasNext()) { |
| v.addElement(iter.next()); |
| } |
| return v; |
| } |
| |
| /** |
| * Adds a BundleItem to the group as long as that item is not currently in the group. |
| * If the item.group is not equal to this group, then it is changed to be this group. |
| * This method should, in most cases, only be called from the Bundle class. |
| */ |
| public void addBundleItem(BundleItem item) { |
| if (items.contains(item)) { |
| items.remove(item); |
| } |
| item.setParentGroup(this); |
| items.add(item); |
| } |
| |
| /** |
| * Remove an item of the given name from the group |
| */ |
| public void removeBundleItem(String itemName) { |
| Iterator iter = items.iterator(); |
| while(iter.hasNext()) { |
| BundleItem item = (BundleItem)iter.next(); |
| if (item.getKey().equals(itemName)) { |
| items.remove(item); |
| break; |
| } |
| } |
| } |
| |
| /** |
| * Returns the number of items stored in the group |
| */ |
| public int getItemCount() { |
| return items.size(); |
| } |
| |
| /** |
| * Returns a BundleItem from the set of items at a particular index point. |
| * If the index is greater than or equal to the number of items in the set, |
| * null is returned. |
| */ |
| public BundleItem getBundleItem(int index) { |
| if (index >= items.size()) |
| return null; |
| Iterator iter = items.iterator(); |
| for (int i=0; i < index; i++) |
| iter.next(); |
| return (BundleItem)iter.next(); |
| } |
| |
| /** |
| * Returns the bundle to which this group belongs |
| */ |
| public Bundle getParentBundle() { |
| return bundle; |
| } |
| |
| /** |
| * Returns the comment associated with this bundle |
| */ |
| public String getComment() { |
| return comment; |
| } |
| |
| /** |
| * Returns the name of the bundle |
| */ |
| public String getName() { |
| return name; |
| } |
| |
| protected void setParentBundle(Bundle bundle) { |
| this.bundle = bundle; |
| } |
| |
| public void setComment(String comment) { |
| this.comment = comment; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| /** |
| * The translation to a string returns the name of the group |
| */ |
| public String toString() { |
| return name; |
| } |
| |
| /** |
| * Returns the output for a group heading. |
| * This will be found in comment lines above the group items |
| */ |
| public String toOutputString() { |
| String retStr = "\n#\n# @group " + name + "\n#\n"; |
| if (comment != null) |
| retStr += "# @groupComment " + comment + "\n"; |
| return retStr; |
| } |
| |
| /** |
| * Writes the output contents to a particular PrintStream. |
| * The output will be suitable for a properly formatted .properties file. |
| */ |
| public void writeContents(PrintStream ps) { |
| if (!name.equals("Ungrouped Items")) |
| ps.println(this.toOutputString()); |
| Iterator iter = items.iterator(); |
| while (iter.hasNext()) { |
| ((BundleItem) iter.next()).writeContents(ps); |
| } |
| } |
| |
| /** |
| * Writes the output contents to a particular Writer. |
| * The output will be suitable for a properly formatted .properties file. |
| */ |
| public void writeContents(Writer w) throws IOException { |
| if (!name.equals("Ungrouped Items")) |
| w.write(this.toOutputString() + "\n"); |
| Iterator iter = items.iterator(); |
| while (iter.hasNext()) { |
| ((BundleItem) iter.next()).writeContents(w); |
| } |
| } |
| } |