| /* |
| * 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; |
| |
| import com.intellij.uiDesigner.UIFormXmlConstants; |
| import org.jdom.Attribute; |
| import org.jdom.Element; |
| |
| import java.awt.*; |
| import java.lang.reflect.Method; |
| |
| public final class LwXmlReader { |
| private LwXmlReader() { |
| } |
| |
| /** |
| * @return can be <code>null</code>. |
| */ |
| public static Element getChild(final Element element, final String childName) { |
| return element.getChild(childName, element.getNamespace()); |
| } |
| |
| /** |
| * @return never <code>null</code>. |
| */ |
| public static Element getRequiredChild(final Element element, final String childName) { |
| final Element child = getChild(element, childName); |
| if(child == null){ |
| throw new IllegalArgumentException("subtag '" + childName + "' is required: "+element); |
| } |
| return child; |
| } |
| |
| /** |
| * @return <code>null</code> or trimmed attribute value. |
| */ |
| public static String getString(final Element element, final String attributeName){ |
| final String value = element.getAttributeValue(attributeName); |
| return value != null ? value.trim() : null; |
| } |
| |
| /** |
| * @return never <code>null</code> trimmed attribute value. |
| */ |
| public static String getRequiredString(final Element element, final String attributeName) { |
| final String value = getString(element, attributeName); |
| if(value != null){ |
| return value; |
| } |
| else{ |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is required: "+element); |
| } |
| } |
| |
| public static String getOptionalString(final Element element, final String attributeName, final String defaultValue) { |
| final String value = element.getAttributeValue(attributeName); |
| return value != null ? value.trim() : defaultValue; |
| } |
| |
| public static int getRequiredInt(final Element element, final String attributeName) { |
| final String str = getRequiredString(element, attributeName); |
| try { |
| return Integer.parseInt(str); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper integer: " + str); |
| } |
| } |
| |
| public static int getOptionalInt(final Element element, final String attributeName, final int defaultValue) { |
| final String str = element.getAttributeValue(attributeName); |
| if (str == null) { |
| return defaultValue; |
| } |
| try { |
| return Integer.parseInt(str); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper integer: " + str); |
| } |
| } |
| |
| public static boolean getOptionalBoolean(final Element element, final String attributeName, final boolean defaultValue) { |
| final String str = element.getAttributeValue(attributeName); |
| if (str == null) { |
| return defaultValue; |
| } |
| return Boolean.valueOf(str).booleanValue(); |
| } |
| |
| public static double getRequiredDouble(final Element element, final String attributeName) { |
| final String str = getRequiredString(element, attributeName); |
| try { |
| return Double.parseDouble(str); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper double: " + str); |
| } |
| } |
| |
| public static double getOptionalDouble(final Element element, final String attributeName, double defaultValue) { |
| final String str = element.getAttributeValue(attributeName); |
| if (str == null) { |
| return defaultValue; |
| } |
| try { |
| return Double.parseDouble(str); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper double: " + str); |
| } |
| } |
| |
| public static float getRequiredFloat(final Element element, final String attributeName) { |
| final String str = getRequiredString(element, attributeName); |
| try { |
| return Float.parseFloat(str); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper float: " + str); |
| } |
| } |
| |
| public static Object getRequiredPrimitiveTypeValue(final Element element, final String attributeName, final Class valueClass) { |
| final String str = getRequiredString(element, attributeName); |
| try { |
| final Method method = valueClass.getMethod("valueOf", new Class[]{String.class}); |
| //noinspection unchecked |
| return method.invoke(null, new Object[]{str}); |
| } |
| catch (NumberFormatException e) { |
| throw new IllegalArgumentException("attribute '" + attributeName + "' is not a proper float: " + str); |
| } |
| catch (Exception e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public static StringDescriptor getStringDescriptor(final Element element, final String valueAttr, |
| final String bundleAttr, final String keyAttr) { |
| final String title = element.getAttributeValue(valueAttr); |
| if (title != null) { |
| StringDescriptor descriptor = StringDescriptor.create(title); |
| descriptor.setNoI18n(getOptionalBoolean(element, UIFormXmlConstants.ATTRIBUTE_NOI18N, false)); |
| return descriptor; |
| } |
| else { |
| final String bundle = element.getAttributeValue(bundleAttr); |
| if (bundle != null) { |
| final String key = getRequiredString(element, keyAttr); |
| return new StringDescriptor(bundle, key); |
| } |
| } |
| |
| return null; |
| } |
| |
| public static FontDescriptor getFontDescriptor(final Element element) { |
| String swingFont = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_SWING_FONT); |
| if (swingFont != null) { |
| return FontDescriptor.fromSwingFont(swingFont); |
| } |
| |
| String fontName = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_NAME); |
| int fontStyle = getOptionalInt(element, UIFormXmlConstants.ATTRIBUTE_STYLE, -1); |
| int fontSize = getOptionalInt(element, UIFormXmlConstants.ATTRIBUTE_SIZE, -1); |
| return new FontDescriptor(fontName, fontStyle, fontSize); |
| } |
| |
| public static ColorDescriptor getColorDescriptor(final Element element) throws Exception { |
| Attribute attr = element.getAttribute(UIFormXmlConstants.ATTRIBUTE_COLOR); |
| if (attr != null) { |
| return new ColorDescriptor(new Color(attr.getIntValue())); |
| } |
| String swingColor = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_SWING_COLOR); |
| if (swingColor != null) { |
| return ColorDescriptor.fromSwingColor(swingColor); |
| } |
| String systemColor = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_SYSTEM_COLOR); |
| if (systemColor != null) { |
| return ColorDescriptor.fromSystemColor(systemColor); |
| } |
| String awtColor = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_AWT_COLOR); |
| if (awtColor != null) { |
| return ColorDescriptor.fromAWTColor(awtColor); |
| } |
| return new ColorDescriptor(null); |
| } |
| |
| public static ColorDescriptor getOptionalColorDescriptor(final Element element) { |
| if (element == null) return null; |
| try { |
| return getColorDescriptor(element); |
| } |
| catch(Exception ex) { |
| return null; |
| } |
| } |
| |
| public static Insets readInsets(final Element element) { |
| final int top = getRequiredInt(element, UIFormXmlConstants.ATTRIBUTE_TOP); |
| final int left = getRequiredInt(element, UIFormXmlConstants.ATTRIBUTE_LEFT); |
| final int bottom = getRequiredInt(element, UIFormXmlConstants.ATTRIBUTE_BOTTOM); |
| final int right = getRequiredInt(element, UIFormXmlConstants.ATTRIBUTE_RIGHT); |
| return new Insets(top, left, bottom, right); |
| } |
| } |