replaced <code></code> with more concise {@code}
[idea/community.git] / java / compiler / forms-compiler / src / com / intellij / uiDesigner / lw / StringDescriptor.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 /**
19  * @author Vladimir Kondratyev
20  */
21 public final class StringDescriptor {
22   /**
23    * Name of resource bundle
24    */
25   private final String myBundleName;
26   /**
27    * Key in the resource bundle
28    */
29   private final String myKey;
30   /**
31    * Value has sense if it's calculated not via resource bundle
32    */
33   private final String myValue;
34   /**
35    * Cached resolved value. We need it here to speed up property inspector
36    * painting.
37    */
38   private String myResolvedValue;
39
40   /**
41    * Marker for string values which do not need internationalization
42    */
43   private boolean myNoI18n;
44
45   private StringDescriptor(final String value){
46     if (value == null) {
47       throw new IllegalArgumentException("value cannot be null");
48     }
49     myBundleName = null;
50     myKey = null;
51     myValue = value;
52   }
53
54   public StringDescriptor(final String bundleName, final String key) {
55     if (bundleName == null) {
56       throw new IllegalArgumentException("bundleName cannot be null");
57     }
58     if (key == null) {
59       throw new IllegalArgumentException("key cannot be null");
60     }
61     myBundleName = bundleName.replace('.', '/');
62     myKey = key;
63     myValue = null;
64   }
65
66   /**
67    * Creates "trivial" StringDescriptor.
68    */
69   public static StringDescriptor create(final String value){
70     return value != null ? new StringDescriptor(value) : null;
71   }
72
73   /**
74    * @return not {@code null} value if this is "trivial" StringDescriptor.
75    * If StringDescriptor is "trivial" then {@link #getBundleName()} and {@link #getKey()}
76    * return {@code null}.
77    */
78   public String getValue(){
79     return myValue;
80   }
81
82   /**
83    * @return not {@code null} value if this is non "trivial" StringDescriptor.
84    */
85   public String getBundleName() {
86     return myBundleName;
87   }
88
89   public String getDottedBundleName() {
90     return myBundleName == null ? null : myBundleName.replace('/', '.');
91   }
92
93   /**
94    * @return not {@code null} value if this is non "trivial" StringDescriptor.
95    */
96   public String getKey() {
97     return myKey;
98   }
99
100   /**
101    * @return can be null
102    */
103   public String getResolvedValue() {
104     return myResolvedValue;
105   }
106
107   /**
108    * @param resolvedValue can be null
109    */
110   public void setResolvedValue(final String resolvedValue) {
111     myResolvedValue = resolvedValue;
112   }
113
114   public boolean isNoI18n() {
115     return myNoI18n;
116   }
117
118   public void setNoI18n(final boolean noI18n) {
119     myNoI18n = noI18n;
120   }
121
122   public boolean equals(final Object o) {
123     if (this == o) return true;
124     if (!(o instanceof StringDescriptor)) return false;
125
126     final StringDescriptor descriptor = (StringDescriptor)o;
127
128     if (myBundleName != null ? !myBundleName.equals(descriptor.myBundleName) : descriptor.myBundleName != null) return false;
129     if (myKey != null ? !myKey.equals(descriptor.myKey) : descriptor.myKey != null) return false;
130     if (myValue != null ? !myValue.equals(descriptor.myValue) : descriptor.myValue != null) return false;
131     if (myNoI18n != descriptor.myNoI18n) return false;
132
133     return true;
134   }
135
136   public int hashCode() {
137     int result;
138     result = (myBundleName != null ? myBundleName.hashCode() : 0);
139     result = 29 * result + (myKey != null ? myKey.hashCode() : 0);
140     result = 29 * result + (myValue != null ? myValue.hashCode() : 0);
141     return result;
142   }
143
144   public String toString() {
145     if (myValue != null) {
146       return "[StringDescriptor:" + myValue + "]";
147     }
148     return "[StringDescriptor" + myBundleName + ":" + myKey + "]";
149   }
150 }