1/*
2 * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25package com.sun.beans.decoder;
26
27/**
28 * This class is intended to handle <var> element.
29 * This element retrieves the value of specified variable.
30 * For example:<pre>
31 * &lt;var id="id1" idref="id2"/&gt;</pre>
32 * is equivalent to {@code id1 = id2} in Java code.
33 * <p>The following attributes are supported:
34 * <dl>
35 * <dt>idref
36 * <dd>the identifier to refer to the variable
37 * <dt>id
38 * <dd>the identifier of the variable that is intended to store the result
39 * </dl>
40 *
41 * @since 1.7
42 *
43 * @author Sergey A. Malenkov
44 */
45final class VarElementHandler extends ElementHandler {
46    private ValueObject value;
47
48    /**
49     * Parses attributes of the element.
50     * The following attributes are supported:
51     * <dl>
52     * <dt>idref
53     * <dd>the identifier to refer to the variable
54     * <dt>id
55     * <dd>the identifier of the variable that is intended to store the result
56     * </dl>
57     *
58     * @param name   the attribute name
59     * @param value  the attribute value
60     */
61    @Override
62    public void addAttribute(String name, String value) {
63        if (name.equals("idref")) { // NON-NLS: the attribute name
64            this.value = ValueObjectImpl.create(getVariable(value));
65        } else {
66            super.addAttribute(name, value);
67        }
68    }
69
70    /**
71     * Returns the value of this element.
72     *
73     * @return the value of this element
74     */
75    @Override
76    protected ValueObject getValueObject() {
77        if (this.value == null) {
78            throw new IllegalArgumentException("Variable name is not set");
79        }
80        return this.value;
81    }
82}
83