<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FComposite_Pattern</id>
		<title>Java/Design Pattern/Composite Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FComposite_Pattern"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Composite_Pattern&amp;action=history"/>
		<updated>2026-04-22T02:09:53Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/Composite_Pattern&amp;diff=7783&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Composite_Pattern&amp;diff=7783&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:37Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/Composite_Pattern&amp;diff=7782&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Composite_Pattern&amp;diff=7782&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Composite Pattern 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
public class RunCompositePattern {&lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the Composite pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;This code sample will propagate a method call throughout&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; a tree structure. The tree represents a project, and is&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; composed of three kinds of ProjectItems - Project, Task,&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; and Deliverable. Of these three classes, Project and Task&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; can store an ArrayList of ProjectItems. This means that&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; they can act as branch nodes for our tree. The Deliverable&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; is a terminal node, since it cannot hold any ProjectItems.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;In this example, the method defined by ProjectItem,&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; getTimeRequired, provides the method to demonstrate the&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; pattern. For branch nodes, the method will be passed on&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; to the children. For terminal nodes (Deliverables), a&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; single value will be returned.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;Note that it is possible to make this method call ANYWHERE&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; in the tree, since all classes implement the getTimeRequired&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; method. This means that you are able to calculate the time&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; required to complete the whole project OR any part of it.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Deserializing a test Project for the Composite pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        if (!(new File(&amp;quot;data.ser&amp;quot;).exists())){&lt;br /&gt;
            DataCreator.serialize(&amp;quot;data.ser&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        Project project = (Project)(DataRetriever.deserializeData(&amp;quot;data.ser&amp;quot;));&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Calculating total time estimate for the project&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;\t&amp;quot; + project.getDescription());&lt;br /&gt;
        System.out.println(&amp;quot;Time Required: &amp;quot; + project.getTimeRequired());&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface Contact extends Serializable{&lt;br /&gt;
    public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
    public String getFirstName();&lt;br /&gt;
    public String getLastName();&lt;br /&gt;
    public String getTitle();&lt;br /&gt;
    public String getOrganization();&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName);&lt;br /&gt;
    public void setLastName(String newLastName);&lt;br /&gt;
    public void setTitle(String newTitle);&lt;br /&gt;
    public void setOrganization(String newOrganization);&lt;br /&gt;
}&lt;br /&gt;
class ContactImpl implements Contact{&lt;br /&gt;
    private String firstName;&lt;br /&gt;
    private String lastName;&lt;br /&gt;
    private String title;&lt;br /&gt;
    private String organization;&lt;br /&gt;
    &lt;br /&gt;
    public ContactImpl(){}&lt;br /&gt;
    public ContactImpl(String newFirstName, String newLastName,&lt;br /&gt;
        String newTitle, String newOrganization){&lt;br /&gt;
            firstName = newFirstName;&lt;br /&gt;
            lastName = newLastName;&lt;br /&gt;
            title = newTitle;&lt;br /&gt;
            organization = newOrganization;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getFirstName(){ return firstName; }&lt;br /&gt;
    public String getLastName(){ return lastName; }&lt;br /&gt;
    public String getTitle(){ return title; }&lt;br /&gt;
    public String getOrganization(){ return organization; }&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName){ firstName = newFirstName; }&lt;br /&gt;
    public void setLastName(String newLastName){ lastName = newLastName; }&lt;br /&gt;
    public void setTitle(String newTitle){ title = newTitle; }&lt;br /&gt;
    public void setOrganization(String newOrganization){ organization = newOrganization; }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return firstName + SPACE + lastName;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class DataCreator{&lt;br /&gt;
    private static final String DEFAULT_FILE = &amp;quot;data.ser&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String [] args){&lt;br /&gt;
        String fileName;&lt;br /&gt;
        if (args.length == 1){&lt;br /&gt;
            fileName = args[0];&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            fileName = DEFAULT_FILE;&lt;br /&gt;
        }&lt;br /&gt;
        serialize(fileName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void serialize(String fileName){&lt;br /&gt;
        try{&lt;br /&gt;
            serializeToFile(createData(), fileName);&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static Serializable createData(){&lt;br /&gt;
        Contact contact1 = new ContactImpl(&amp;quot;Dennis&amp;quot;, &amp;quot;Moore&amp;quot;, &amp;quot;Managing Director&amp;quot;, &amp;quot;Highway Man, LTD&amp;quot;);&lt;br /&gt;
        Contact contact2 = new ContactImpl(&amp;quot;Joseph&amp;quot;, &amp;quot;Mongolfier&amp;quot;, &amp;quot;High Flyer&amp;quot;, &amp;quot;Lighter than Air Productions&amp;quot;);&lt;br /&gt;
        Contact contact3 = new ContactImpl(&amp;quot;Erik&amp;quot;, &amp;quot;Njoll&amp;quot;, &amp;quot;Nomad without Portfolio&amp;quot;, &amp;quot;Nordic Trek, Inc.&amp;quot;);&lt;br /&gt;
        Contact contact4 = new ContactImpl(&amp;quot;Lemming&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Principal Investigator&amp;quot;, &amp;quot;BDA&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        Project project = new Project(&amp;quot;IslandParadise&amp;quot;, &amp;quot;Acquire a personal island paradise&amp;quot;);&lt;br /&gt;
        Deliverable deliverable1 = new Deliverable(&amp;quot;Island Paradise&amp;quot;, &amp;quot;&amp;quot;, contact1);&lt;br /&gt;
        Task task1 = new Task(&amp;quot;Fortune&amp;quot;, &amp;quot;Acquire a small fortune&amp;quot;, contact4, 11.0);&lt;br /&gt;
        Task task2 = new Task(&amp;quot;Isle&amp;quot;, &amp;quot;Locate an island for sale&amp;quot;, contact2, 7.5);&lt;br /&gt;
        Task task3 = new Task(&amp;quot;Name&amp;quot;, &amp;quot;Decide on a name for the island&amp;quot;, contact3, 3.2);&lt;br /&gt;
        project.addProjectItem(deliverable1);&lt;br /&gt;
        project.addProjectItem(task1);&lt;br /&gt;
        project.addProjectItem(task2);&lt;br /&gt;
        project.addProjectItem(task3);&lt;br /&gt;
        &lt;br /&gt;
        Deliverable deliverable11 = new Deliverable(&amp;quot;$1,000,000&amp;quot;, &amp;quot;(total net worth after taxes)&amp;quot;, contact1);&lt;br /&gt;
        Task task11 = new Task(&amp;quot;Fortune1&amp;quot;, &amp;quot;Use psychic hotline to predict winning lottery numbers&amp;quot;, contact4, 2.5);&lt;br /&gt;
        Task task12 = new Task(&amp;quot;Fortune2&amp;quot;, &amp;quot;Invest winnings to ensure 50% annual interest&amp;quot;, contact1, 14.0);&lt;br /&gt;
        task1.addProjectItem(task11);&lt;br /&gt;
        task1.addProjectItem(task12);&lt;br /&gt;
        task1.addProjectItem(deliverable11);&lt;br /&gt;
        &lt;br /&gt;
        Task task21 = new Task(&amp;quot;Isle1&amp;quot;, &amp;quot;Research whether climate is better in the Atlantic or Pacific&amp;quot;, contact1, 1.8);&lt;br /&gt;
        Task task22 = new Task(&amp;quot;Isle2&amp;quot;, &amp;quot;Locate an island for auction on EBay&amp;quot;, contact4, 5.0);&lt;br /&gt;
        Task task23 = new Task(&amp;quot;Isle2a&amp;quot;, &amp;quot;Negotiate for sale of the island&amp;quot;, contact3, 17.5);&lt;br /&gt;
        task2.addProjectItem(task21);&lt;br /&gt;
        task2.addProjectItem(task22);&lt;br /&gt;
        task2.addProjectItem(task23);&lt;br /&gt;
        &lt;br /&gt;
        Deliverable deliverable31 = new Deliverable(&amp;quot;Island Name&amp;quot;, &amp;quot;&amp;quot;, contact1);&lt;br /&gt;
        task3.addProjectItem(deliverable31);&lt;br /&gt;
        return project;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void serializeToFile(Serializable content, String fileName) throws IOException{&lt;br /&gt;
        ObjectOutputStream serOut = new ObjectOutputStream(new FileOutputStream(fileName));&lt;br /&gt;
        serOut.writeObject(content);&lt;br /&gt;
        serOut.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class DataRetriever{&lt;br /&gt;
    public static Object deserializeData(String fileName){&lt;br /&gt;
        Object returnValue = null;&lt;br /&gt;
        try{&lt;br /&gt;
            File inputFile = new File(fileName);&lt;br /&gt;
            if (inputFile.exists() &amp;amp;&amp;amp; inputFile.isFile()){&lt;br /&gt;
                ObjectInputStream readIn = new ObjectInputStream(new FileInputStream(fileName));&lt;br /&gt;
                returnValue = readIn.readObject();&lt;br /&gt;
                readIn.close();&lt;br /&gt;
            }else{&lt;br /&gt;
                System.err.println(&amp;quot;Unable to locate the file &amp;quot; + fileName);&lt;br /&gt;
            }&lt;br /&gt;
        }catch (ClassNotFoundException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
            &lt;br /&gt;
        }catch (IOException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
        return returnValue;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Deliverable implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private String description;&lt;br /&gt;
    private Contact owner;&lt;br /&gt;
    &lt;br /&gt;
    public Deliverable(){ }&lt;br /&gt;
    public Deliverable(String newName, String newDescription,&lt;br /&gt;
        Contact newOwner){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        description = newDescription;&lt;br /&gt;
        owner = newOwner;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public String getDescription(){ return description; }&lt;br /&gt;
    public Contact getOwner(){ return owner; }&lt;br /&gt;
    public double getTimeRequired(){ return 0; }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setDescription(String newDescription){ description = newDescription; }&lt;br /&gt;
    public void setOwner(Contact newOwner){ owner = newOwner; }&lt;br /&gt;
}&lt;br /&gt;
class Project implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private String description;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    &lt;br /&gt;
    public Project(){ }&lt;br /&gt;
    public Project(String newName, String newDescription){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        description = newDescription;&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public String getDescription(){ return description; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    public double getTimeRequired(){&lt;br /&gt;
        double totalTime = 0;&lt;br /&gt;
        Iterator items = projectItems.iterator();&lt;br /&gt;
        while(items.hasNext()){&lt;br /&gt;
            ProjectItem item = (ProjectItem)items.next();&lt;br /&gt;
            totalTime += item.getTimeRequired();&lt;br /&gt;
        }&lt;br /&gt;
        return totalTime;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setDescription(String newDescription){ description = newDescription; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface ProjectItem extends Serializable{&lt;br /&gt;
    public double getTimeRequired();&lt;br /&gt;
}&lt;br /&gt;
class Task implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private String details;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    private Contact owner;&lt;br /&gt;
    private double timeRequired;&lt;br /&gt;
    &lt;br /&gt;
    public Task(){ }&lt;br /&gt;
    public Task(String newName, String newDetails,&lt;br /&gt;
        Contact newOwner, double newTimeRequired){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        details = newDetails;&lt;br /&gt;
        owner = newOwner;&lt;br /&gt;
        timeRequired = newTimeRequired;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public String getDetails(){ return details; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    public Contact getOwner(){ return owner; }&lt;br /&gt;
    public double getTimeRequired(){&lt;br /&gt;
        double totalTime = timeRequired;&lt;br /&gt;
        Iterator items = projectItems.iterator();&lt;br /&gt;
        while(items.hasNext()){&lt;br /&gt;
            ProjectItem item = (ProjectItem)items.next();&lt;br /&gt;
            totalTime += item.getTimeRequired();&lt;br /&gt;
        }&lt;br /&gt;
        return totalTime;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setDetails(String newDetails){ details = newDetails; }&lt;br /&gt;
    public void setOwner(Contact newOwner){ owner = newOwner; }&lt;br /&gt;
    public void setTimeRequired(double newTimeRequired){ timeRequired = newTimeRequired; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Composite pattern in Java ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.util.Enumeration;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTree;&lt;br /&gt;
import javax.swing.border.BevelBorder;&lt;br /&gt;
import javax.swing.event.TreeSelectionEvent;&lt;br /&gt;
import javax.swing.event.TreeSelectionListener;&lt;br /&gt;
import javax.swing.tree.DefaultMutableTreeNode;&lt;br /&gt;
import javax.swing.tree.TreePath;&lt;br /&gt;
public class EmpTree extends JFrame implements TreeSelectionListener {&lt;br /&gt;
  Employee boss, marketVP, prodVP;&lt;br /&gt;
  Employee salesMgr, advMgr;&lt;br /&gt;
  Employee prodMgr, shipMgr;&lt;br /&gt;
  JScrollPane sp;&lt;br /&gt;
  JPanel treePanel;&lt;br /&gt;
  JTree tree;&lt;br /&gt;
  DefaultMutableTreeNode troot;&lt;br /&gt;
  JLabel cost;&lt;br /&gt;
  public EmpTree() {&lt;br /&gt;
    super(&amp;quot;Employee tree&amp;quot;);&lt;br /&gt;
    addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    makeEmployees();&lt;br /&gt;
    setGUI();&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  private void setGUI() {&lt;br /&gt;
    treePanel = new JPanel();&lt;br /&gt;
    getContentPane().add(treePanel);&lt;br /&gt;
    treePanel.setLayout(new BorderLayout());&lt;br /&gt;
    sp = new JScrollPane();&lt;br /&gt;
    treePanel.add(&amp;quot;Center&amp;quot;, sp);&lt;br /&gt;
    treePanel.add(&amp;quot;South&amp;quot;, cost = new JLabel(&amp;quot;          &amp;quot;));&lt;br /&gt;
    treePanel.setBorder(new BevelBorder(BevelBorder.RAISED));&lt;br /&gt;
    troot = new DefaultMutableTreeNode(boss.getName());&lt;br /&gt;
    tree = new JTree(troot);&lt;br /&gt;
    tree.setBackground(Color.lightGray);&lt;br /&gt;
    loadTree(boss);&lt;br /&gt;
    /* Put the Tree in a scroller. */&lt;br /&gt;
    sp.getViewport().add(tree);&lt;br /&gt;
    setSize(new Dimension(200, 300));&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //------------------------------------&lt;br /&gt;
  public void loadTree(Employee topDog) {&lt;br /&gt;
    DefaultMutableTreeNode troot;&lt;br /&gt;
    troot = new DefaultMutableTreeNode(topDog.getName());&lt;br /&gt;
    treePanel.remove(tree);&lt;br /&gt;
    tree = new JTree(troot);&lt;br /&gt;
    tree.addTreeSelectionListener(this);&lt;br /&gt;
    sp.getViewport().add(tree);&lt;br /&gt;
    addNodes(troot, topDog);&lt;br /&gt;
    tree.expandRow(0);&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  private void addNodes(DefaultMutableTreeNode pnode, Employee emp) {&lt;br /&gt;
    DefaultMutableTreeNode node;&lt;br /&gt;
    Enumeration e = emp.elements();&lt;br /&gt;
    while (e.hasMoreElements()) {&lt;br /&gt;
      Employee newEmp = (Employee) e.nextElement();&lt;br /&gt;
      node = new DefaultMutableTreeNode(newEmp.getName());&lt;br /&gt;
      pnode.add(node);&lt;br /&gt;
      addNodes(node, newEmp);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  private void makeEmployees() {&lt;br /&gt;
    boss = new Employee(&amp;quot;CEO&amp;quot;, 200000);&lt;br /&gt;
    boss.add(marketVP = new Employee(&amp;quot;Marketing VP&amp;quot;, 100000));&lt;br /&gt;
    boss.add(prodVP = new Employee(&amp;quot;Production VP&amp;quot;, 100000));&lt;br /&gt;
    marketVP.add(salesMgr = new Employee(&amp;quot;Sales Mgr&amp;quot;, 50000));&lt;br /&gt;
    marketVP.add(advMgr = new Employee(&amp;quot;Advt Mgr&amp;quot;, 50000));&lt;br /&gt;
    for (int i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
      salesMgr.add(new Employee(&amp;quot;Sales &amp;quot; + new Integer(i).toString(),&lt;br /&gt;
          30000.0F + (float) (Math.random() - 0.5) * 10000));&lt;br /&gt;
    advMgr.add(new Employee(&amp;quot;Secy&amp;quot;, 20000));&lt;br /&gt;
    prodVP.add(prodMgr = new Employee(&amp;quot;Prod Mgr&amp;quot;, 40000));&lt;br /&gt;
    prodVP.add(shipMgr = new Employee(&amp;quot;Ship Mgr&amp;quot;, 35000));&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++)&lt;br /&gt;
      prodMgr.add(new Employee(&amp;quot;Manuf &amp;quot; + new Integer(i).toString(),&lt;br /&gt;
          25000.0F + (float) (Math.random() - 0.5) * 5000));&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
      shipMgr.add(new Employee(&amp;quot;ShipClrk &amp;quot; + new Integer(i).toString(),&lt;br /&gt;
          20000.0F + (float) (Math.random() - 0.5) * 5000));&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public void valueChanged(TreeSelectionEvent evt) {&lt;br /&gt;
    TreePath path = evt.getPath();&lt;br /&gt;
    String selectedTerm = path.getLastPathComponent().toString();&lt;br /&gt;
    Employee emp = boss.getChild(selectedTerm);&lt;br /&gt;
    if (emp != null)&lt;br /&gt;
      cost.setText(new Float(emp.getSalaries()).toString());&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new EmpTree();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Employee {&lt;br /&gt;
  String name;&lt;br /&gt;
  float salary;&lt;br /&gt;
  Vector subordinates;&lt;br /&gt;
  boolean isLeaf;&lt;br /&gt;
  Employee parent = null;&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public Employee(String _name, float _salary) {&lt;br /&gt;
    name = _name;&lt;br /&gt;
    salary = _salary;&lt;br /&gt;
    subordinates = new Vector();&lt;br /&gt;
    isLeaf = false;&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public Employee(Employee _parent, String _name, float _salary) {&lt;br /&gt;
    name = _name;&lt;br /&gt;
    salary = _salary;&lt;br /&gt;
    parent = _parent;&lt;br /&gt;
    subordinates = new Vector();&lt;br /&gt;
    isLeaf = false;&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public void setLeaf(boolean b) {&lt;br /&gt;
    isLeaf = b; //if true, do not allow children&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public float getSalary() {&lt;br /&gt;
    return salary;&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public boolean add(Employee e) {&lt;br /&gt;
    if (!isLeaf)&lt;br /&gt;
      subordinates.addElement(e);&lt;br /&gt;
    return isLeaf; //false if unsuccessful&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public void remove(Employee e) {&lt;br /&gt;
    if (!isLeaf)&lt;br /&gt;
      subordinates.removeElement(e);&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public Enumeration elements() {&lt;br /&gt;
    return subordinates.elements();&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public Employee getChild(String s) {&lt;br /&gt;
    Employee newEmp = null;&lt;br /&gt;
    if (getName().equals(s))&lt;br /&gt;
      return this;&lt;br /&gt;
    else {&lt;br /&gt;
      boolean found = false;&lt;br /&gt;
      Enumeration e = elements();&lt;br /&gt;
      while (e.hasMoreElements() &amp;amp;&amp;amp; (!found)) {&lt;br /&gt;
        newEmp = (Employee) e.nextElement();&lt;br /&gt;
        found = newEmp.getName().equals(s);&lt;br /&gt;
        if (!found) {&lt;br /&gt;
          newEmp = newEmp.getChild(s);&lt;br /&gt;
          found = (newEmp != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (found)&lt;br /&gt;
        return newEmp;&lt;br /&gt;
      else&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //--------------------------------------&lt;br /&gt;
  public float getSalaries() {&lt;br /&gt;
    float sum = salary;&lt;br /&gt;
    for (int i = 0; i &amp;lt; subordinates.size(); i++) {&lt;br /&gt;
      sum += ((Employee) subordinates.elementAt(i)).getSalaries();&lt;br /&gt;
    }&lt;br /&gt;
    return sum;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Composite Patterns in Java 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Software Architecture Design Patterns in Java&lt;br /&gt;
by Partha Kuchana &lt;br /&gt;
Auerbach Publications&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.util.Enumeration;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
public class CompositeDemo {&lt;br /&gt;
  public static final String SEPARATOR = &amp;quot;, &amp;quot;;&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    FileSystemComponent mainFolder = new DirComponent(&amp;quot;Year2000&amp;quot;);&lt;br /&gt;
    FileSystemComponent subFolder1 = new DirComponent(&amp;quot;Jan&amp;quot;);&lt;br /&gt;
    FileSystemComponent subFolder2 = new DirComponent(&amp;quot;Feb&amp;quot;);&lt;br /&gt;
    FileSystemComponent folder1File1 = new FileComponent(&lt;br /&gt;
        &amp;quot;Jan1DataFile.txt&amp;quot;, 1000);&lt;br /&gt;
    FileSystemComponent folder1File2 = new FileComponent(&lt;br /&gt;
        &amp;quot;Jan2DataFile.txt&amp;quot;, 2000);&lt;br /&gt;
    FileSystemComponent folder2File1 = new FileComponent(&lt;br /&gt;
        &amp;quot;Feb1DataFile.txt&amp;quot;, 3000);&lt;br /&gt;
    FileSystemComponent folder2File2 = new FileComponent(&lt;br /&gt;
        &amp;quot;Feb2DataFile.txt&amp;quot;, 4000);&lt;br /&gt;
    try {&lt;br /&gt;
      mainFolder.addComponent(subFolder1);&lt;br /&gt;
      mainFolder.addComponent(subFolder2);&lt;br /&gt;
      subFolder1.addComponent(folder1File1);&lt;br /&gt;
      subFolder1.addComponent(folder1File2);&lt;br /&gt;
      subFolder2.addComponent(folder2File1);&lt;br /&gt;
      subFolder2.addComponent(folder2File2);&lt;br /&gt;
    } catch (CompositeException ex) {&lt;br /&gt;
      //&lt;br /&gt;
    }&lt;br /&gt;
    //Client refers to both composite &amp;amp;&lt;br /&gt;
    //individual components in a uniform manner&lt;br /&gt;
    System.out.println(&amp;quot; Main Folder Size= &amp;quot;&lt;br /&gt;
        + mainFolder.getComponentSize() + &amp;quot;kb&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; Sub Folder1 Size= &amp;quot;&lt;br /&gt;
        + subFolder1.getComponentSize() + &amp;quot;kb&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; File1 in Folder1 size= &amp;quot;&lt;br /&gt;
        + folder1File1.getComponentSize() + &amp;quot;kb&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class FileComponent extends FileSystemComponent {&lt;br /&gt;
  private long size;&lt;br /&gt;
  public FileComponent(String cName, long sz) {&lt;br /&gt;
    super(cName);&lt;br /&gt;
    size = sz;&lt;br /&gt;
  }&lt;br /&gt;
  public long getComponentSize() {&lt;br /&gt;
    return size;&lt;br /&gt;
  }&lt;br /&gt;
} // End of class&lt;br /&gt;
abstract class FileSystemComponent {&lt;br /&gt;
  String name;&lt;br /&gt;
  public FileSystemComponent(String cName) {&lt;br /&gt;
    name = cName;&lt;br /&gt;
  }&lt;br /&gt;
  public void addComponent(FileSystemComponent component)&lt;br /&gt;
      throws CompositeException {&lt;br /&gt;
    throw new CompositeException(&amp;quot;Invalid Operation. Not Supported&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public FileSystemComponent getComponent(int componentNum)&lt;br /&gt;
      throws CompositeException {&lt;br /&gt;
    throw new CompositeException(&amp;quot;Invalid Operation. Not Supported&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public abstract long getComponentSize();&lt;br /&gt;
} // End of class FileSystemComponent&lt;br /&gt;
class CompositeException extends Exception {&lt;br /&gt;
  public CompositeException(String msg) {&lt;br /&gt;
    super(msg);&lt;br /&gt;
  }&lt;br /&gt;
} // End of class&lt;br /&gt;
class DirComponent extends FileSystemComponent {&lt;br /&gt;
  Vector dirContents = new Vector();&lt;br /&gt;
  //individual files/sub folders collection&lt;br /&gt;
  public DirComponent(String cName) {&lt;br /&gt;
    super(cName);&lt;br /&gt;
  }&lt;br /&gt;
  public void addComponent(FileSystemComponent fc) throws CompositeException {&lt;br /&gt;
    dirContents.add(fc);&lt;br /&gt;
  }&lt;br /&gt;
  public FileSystemComponent getComponent(int location)&lt;br /&gt;
      throws CompositeException {&lt;br /&gt;
    return (FileSystemComponent) dirContents.elementAt(location);&lt;br /&gt;
  }&lt;br /&gt;
  public long getComponentSize() {&lt;br /&gt;
    long sizeOfAllFiles = 0;&lt;br /&gt;
    Enumeration e = dirContents.elements();&lt;br /&gt;
    while (e.hasMoreElements()) {&lt;br /&gt;
      FileSystemComponent component = (FileSystemComponent) e&lt;br /&gt;
          .nextElement();&lt;br /&gt;
      sizeOfAllFiles = sizeOfAllFiles + (component.getComponentSize());&lt;br /&gt;
    }&lt;br /&gt;
    return sizeOfAllFiles;&lt;br /&gt;
  }&lt;br /&gt;
} // End of class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>