/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.uiDesigner.lw; /** * @author Vladimir Kondratyev */ public final class StringDescriptor { /** * Name of resource bundle */ private final String myBundleName; /** * Key in the resource bundle */ private final String myKey; /** * Value has sense if it's calculated not via resource bundle */ private final String myValue; /** * Cached resolved value. We need it here to speed up property inspector * painting. */ private String myResolvedValue; /** * Marker for string values which do not need internationalization */ private boolean myNoI18n; private StringDescriptor(final String value){ if (value == null) { throw new IllegalArgumentException("value cannot be null"); } myBundleName = null; myKey = null; myValue = value; } public StringDescriptor(final String bundleName, final String key) { if (bundleName == null) { throw new IllegalArgumentException("bundleName cannot be null"); } if (key == null) { throw new IllegalArgumentException("key cannot be null"); } myBundleName = bundleName.replace('.', '/'); myKey = key; myValue = null; } /** * Creates "trivial" StringDescriptor. */ public static StringDescriptor create(final String value){ return value != null ? new StringDescriptor(value) : null; } /** * @return not <code>null</code> value if this is "trivial" StringDescriptor. * If StringDescriptor is "trivial" then {@link #getBundleName()} and {@link #getKey()} * return <code>null</code>. */ public String getValue(){ return myValue; } /** * @return not <code>null</code> value if this is non "trivial" StringDescriptor. */ public String getBundleName() { return myBundleName; } public String getDottedBundleName() { return myBundleName == null ? null : myBundleName.replace('/', '.'); } /** * @return not <code>null</code> value if this is non "trivial" StringDescriptor. */ public String getKey() { return myKey; } /** * @return can be null */ public String getResolvedValue() { return myResolvedValue; } /** * @param resolvedValue can be null */ public void setResolvedValue(final String resolvedValue) { myResolvedValue = resolvedValue; } public boolean isNoI18n() { return myNoI18n; } public void setNoI18n(final boolean noI18n) { myNoI18n = noI18n; } public boolean equals(final Object o) { if (this == o) return true; if (!(o instanceof StringDescriptor)) return false; final StringDescriptor descriptor = (StringDescriptor)o; if (myBundleName != null ? !myBundleName.equals(descriptor.myBundleName) : descriptor.myBundleName != null) return false; if (myKey != null ? !myKey.equals(descriptor.myKey) : descriptor.myKey != null) return false; if (myValue != null ? !myValue.equals(descriptor.myValue) : descriptor.myValue != null) return false; if (myNoI18n != descriptor.myNoI18n) return false; return true; } public int hashCode() { int result; result = (myBundleName != null ? myBundleName.hashCode() : 0); result = 29 * result + (myKey != null ? myKey.hashCode() : 0); result = 29 * result + (myValue != null ? myValue.hashCode() : 0); return result; } public String toString() { if (myValue != null) { return "[StringDescriptor:" + myValue + "]"; } return "[StringDescriptor" + myBundleName + ":" + myKey + "]"; } }