replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / wm / impl / HierarchyWatcher.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.wm.impl;
17
18 import java.awt.*;
19 import java.awt.event.ContainerEvent;
20 import java.awt.event.ContainerListener;
21
22 /**
23  * @author Anton Katilin
24  * @author Vladimir Kondratyev
25  */
26 public abstract class HierarchyWatcher implements ContainerListener{
27   public final void componentAdded(final ContainerEvent e){
28     install(e.getChild());
29     hierarchyChanged(e);
30   }
31
32   public final void componentRemoved(final ContainerEvent e){
33     final Component removedChild=e.getChild();
34     deinstall(removedChild);
35     hierarchyChanged(e);
36   }
37
38   private void install(final Component component){
39     if(component instanceof Container){
40       final Container container=(Container)component;
41       final int componentCount=container.getComponentCount();
42       for(int i=0;i<componentCount;i++){
43         install(container.getComponent(i));
44       }
45       container.addContainerListener(this);
46     }
47   }
48
49   private void deinstall(final Component component){
50     if(component instanceof Container){
51       final Container container=(Container)component;
52       final int componentCount=container.getComponentCount();
53       for(int i=0;i<componentCount;i++){
54         deinstall(container.getComponent(i));
55       }
56       container.removeContainerListener(this);
57     }
58   }
59
60   /**
61    * Override this method to get notifications abot changes in component hierarchy.
62    * {@code HierarchyWatcher} invokes this method each time one of the populated container changes.
63    * @param e event which describes the changes.
64    */
65   protected abstract void hierarchyChanged(ContainerEvent e);
66 }