replaced <code></code> with more concise {@code}
[idea/community.git] / plugins / ui-designer / src / com / intellij / uiDesigner / componentTree / ComponentPtr.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.uiDesigner.componentTree;
17
18 import com.intellij.uiDesigner.FormEditingUtil;
19 import com.intellij.uiDesigner.radComponents.RadComponent;
20 import com.intellij.uiDesigner.radComponents.RadContainer;
21 import com.intellij.uiDesigner.designSurface.GuiEditor;
22 import org.jetbrains.annotations.NotNull;
23
24 /**
25  * @author Anton Katilin
26  * @author Vladimir Kondratyev
27  */
28 public final class ComponentPtr{
29   private final GuiEditor myEditor;
30   private final String myId;
31   private RadComponent myComponent;
32
33   /**
34    * @param component
35    */
36   public ComponentPtr(@NotNull final GuiEditor editor, @NotNull final RadComponent component) {
37     this(editor, component, true);
38   }
39
40   /**
41    * @param component
42    * @param validate
43    */
44   public ComponentPtr(@NotNull final GuiEditor editor, @NotNull final RadComponent component, final boolean validate){
45     myEditor=editor;
46     myId=component.getId();
47
48     if (validate) {
49       validate();
50       if(!isValid()){
51       throw new IllegalArgumentException("invalid component: "+component);
52       }
53     }
54     else {
55       myComponent = component;
56     }
57   }
58
59   /**
60    * @return {@code RadComponent} which was calculated by the last
61    * {@code validate} method.
62    */
63   public RadComponent getComponent(){
64     return myComponent;
65   }
66
67   /**
68    * @return {@code true} if and only if the pointer is valid.
69    * It means that last {@code validate} call was successful and
70    * pointer refers to live component.
71    */
72   public boolean isValid(){
73     return myComponent!=null;
74   }
75
76   /**
77    * Validates (updates) the state of the pointer
78    */
79   public void validate(){
80     // Try to find component with myId starting from root container
81     final RadContainer container=myEditor.getRootContainer();
82     myComponent= (RadComponent)FormEditingUtil.findComponent(container,myId);
83   }
84
85   public boolean equals(final Object obj){
86     if(!(obj instanceof ComponentPtr)){
87       return false;
88     }
89     return myId.equals(((ComponentPtr)obj).myId);
90   }
91
92   public int hashCode(){
93     return myId.hashCode();
94   }
95 }