c39f97b9f50fbbfeb70e337a38e3e35f04165f9c
[idea/community.git] / java / compiler / forms-compiler / src / com / intellij / uiDesigner / lw / LwIntrospectedProperty.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.lw;
17
18 import org.jdom.Element;
19
20 public abstract class LwIntrospectedProperty implements IProperty {
21
22   private final String myName;
23   private final String myPropertyClassName;
24   private String myDeclaringClassName;
25
26   public LwIntrospectedProperty(
27     final String name,
28     final String propertyClassName
29   ){
30     if (name == null){
31       throw new IllegalArgumentException("name cannot be null");
32     }
33     if (propertyClassName == null){
34       throw new IllegalArgumentException("propertyClassName cannot be null");
35     }
36
37     myName = name;
38     myPropertyClassName = propertyClassName;
39   }
40
41   /**
42    * @return never null
43    */ 
44   public final String getName(){
45     return myName;
46   }
47
48   /**
49    * @return never null
50    */ 
51   public final String getPropertyClassName(){
52     return myPropertyClassName;
53   }
54   
55   public final String getReadMethodName() {
56     return "get" + Character.toUpperCase(myName.charAt(0)) + myName.substring(1);
57   }
58
59   public final String getWriteMethodName() {
60     return "set" + Character.toUpperCase(myName.charAt(0)) + myName.substring(1);
61   }
62
63   public String getDeclaringClassName() {
64     return myDeclaringClassName;
65   }
66
67   public void setDeclaringClassName(final String definingClassName) {
68     myDeclaringClassName = definingClassName;
69   }
70
71   /**
72    * @param element element that contains serialized property data. This element was
73    * written by {@link com.intellij.uiDesigner.propertyInspector.IntrospectedProperty#write(Object, com.intellij.uiDesigner.XmlWriter)}
74    * method. So <code>read</code> and <code>write</code> methods should be consistent.
75    *
76    * @return property value. Should never return <code>null</code>. For example,
77    * value can be <code>java.lang.Integer</code> for <code>IntroIntProperty</code>.
78    *
79    */
80   public abstract Object read(Element element) throws Exception;
81
82   public Object getPropertyValue(final IComponent component) {
83     return ((LwComponent) component).getPropertyValue(this);
84   }
85
86   public String getCodeGenPropertyClassName() {
87     return getPropertyClassName();
88   }
89 }