javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/M2GSVGElement.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 56 abc41079b313
child 87 1627c337e51e
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     3
* All rights reserved.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     8
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    11
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    12
* Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    13
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    14
* Description:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    15
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    16
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    17
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
package com.nokia.microedition.m2g;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
import org.w3c.dom.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
import org.w3c.dom.svg.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
import org.w3c.dom.events.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
//import com.nokia.mj.impl.rt.legacy.ToolkitInvoker;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
import java.io.IOException;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
import org.eclipse.swt.widgets.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
//import org.eclipse.swt.widgets.Display;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
import com.nokia.mj.impl.utils.Logger;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
public class M2GSVGElement extends M2GObject implements SVGElement
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
    // STATIC CONSTANTS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
    // Error constants
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
    static final String TYPE_IS_NULL_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
        "The type is null.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
    static final String LISTENER_IS_NULL_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
        "The listener is null.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
    static final String CAPTURE_NOT_SUPPORTED_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
        "The capture phase is not supported in SVG Tiny.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
    //static final String ESWT_PACKAGE =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
       // "org.eclipse.swt.widgets.Display" ;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
    /* Optimization: static finals changed to local variables
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
    static final String TRAIT_IS_NULL_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
      "The trait is null.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
    static final String TRAIT_NOT_SUPPORTED_ON_ELEM_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
      "The trait is not supported on this element.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
    static final String TRAIT_NOT_SUPPORTED_IN_NS_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
      "The trait is not supported in this namespace.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
    static final String GET_FLOAT_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
      "Trait's computed value cannot be converted to a float.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
    static final String SET_FLOAT_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
      "Trait's value cannot be specified as a float.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
    static final String GET_MATRIX_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
      "Trait's computed value cannot be converted to a SVGMatrix.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
    static final String SET_MATRIX_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
      "Trait's value cannot be specified as a SVGMatrix.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
    static final String GET_PATH_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
      "Trait's computed value cannot be converted to a SVGPath.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
    static final String SET_PATH_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
      "Trait's value cannot be specified as a SVGPath.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
    static final String GET_RECT_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
      "Trait's computed value cannot be converted to a SVGRect.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
    static final String SET_RECT_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
      "Trait's value cannot be specified as a SVGRect.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
    static final String GET_RGB_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
      "Trait's computed value cannot be converted to a SVGRGBColor.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
    static final String SET_RGB_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
      "Trait's value cannot be specified as a SVGRGBColor.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
    static final String NS_NOT_SUPPORTED_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
      "The namespace is not supported.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
    static final String GET_TRAIT_NS_STRING_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
      "Trait's computed value cannot be converted to a String.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
    static final String SET_TRAIT_NS_STRING_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
      "Trait's value cannot be specified as a String.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
    static final String ID_IS_NULL_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
      "The id is null.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
    static final String EXISTING_ELEM_ID_CHANGE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
      "Existing element id cannot be changed.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
    static final String ELEM_ID_EXIST_IN_DOCUMENT_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
      "Element id already exists in the document.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
    static final String INVALID_INPUT_VALUE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
      "The input value is an invalid value for the given trait.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
    static final String VALUE_IS_NULL_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
      "Value cannot be set to null.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
    static final String SET_READONLY_MISMATCH_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
      "Attempt to change readonly trait.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
    static final String INVALID_VALUE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
      "The value is invalid.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    static final String INVALID_USE_ELEMENT_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
      "The <use> element is hooked into the document tree and the the value of xlink:href is set invalid.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
    static final String CANNOT_REMOVE_NODE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
      "Cannot remove this type of node.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
    static final String CANNOT_REMOVE_NOT_CHILD_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
      "Not a child of this node.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
    static final String CANNOT_REMOVE_NON_NULL_ID_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
      "The element being removed or one of its decendants have non-null id.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
    static final String INSERT_NODE_OF_THAT_TYPE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
      "Cannot insert node of that type.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
    static final String APPEND_DOCUMENT_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
      "Cannot append Document elements.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
    static final String DOCUMENT_HIERARCHY_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
      "Hierarchy request error in Document.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
    static final String CHILD_IS_WRONG_TYPE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
      "Child is wrong type (Document).";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
    static final String CHILD_BELONG_TO_DIFFERENT_DOCUMENT_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
      "Child belongs to different document.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
    static final String CHILD_NOT_FOUND_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
      "The child to insert before doesn't exist in this current node.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
    static final String INVALID_ELEMENT_ID_VALUE =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
      "Invalid element id value.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
    */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
    // VARIABLES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
    protected M2GDocument iDocument;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
    protected short iElementTypeId;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
    // METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
     * Constructor
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
     * @param aHandle is native element handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
     * @param aDocument is a reference to a document that owns this element.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
    M2GSVGElement(int aElementHandle, M2GDocument aDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
        super(aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
        iDocument = aDocument;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
        doConstruct();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
     * @see org.w3c.dom.events.EventTarget#addEventListener()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
    public void addEventListener(String type, EventListener listener, boolean useCapture)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
        if (type == null || type.equals(""))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
            throw new NullPointerException(TYPE_IS_NULL_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
        if (listener == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
            throw new NullPointerException(LISTENER_IS_NULL_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
        if (useCapture == true)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   155
                CAPTURE_NOT_SUPPORTED_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   156
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   157
        iDocument.register(this, type, listener);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   158
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   159
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   160
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   161
     * @see org.w3c.dom.Node#appendChild()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   162
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   163
    public Node appendChild(Node newChild)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   164
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   165
        // If refChild is null, newChild is inserted at the end of the list
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   166
        return insertBefore(newChild, null);  // will inform about DOM changes
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   167
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   168
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   169
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   170
     * Checks attribute validity
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   171
     * @param aAttributeTypeName
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   172
     * @return attribute's type id
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   173
     * @throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   174
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   175
    protected short check(String aAttributeTypeName) throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   176
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   177
        short attributeTypeId = M2GSVGConstants.AT_UNDEFINED;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   178
        if (aAttributeTypeName == null || aAttributeTypeName.equals(""))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   179
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   180
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   181
                        "check() exception: " + /*SF*/"The trait is null."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   182
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   183
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   184
                /*SF*/"The trait is null."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   185
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   186
        // Converts attribute's name
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   187
        attributeTypeId = M2GSVGConstants.parseAttributeTypeId(aAttributeTypeName);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   188
        // Checks that element has this attribute
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   189
        if (!M2GSVGConstants.checkElementAttribute(attributeTypeId, iElementTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   190
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   191
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   192
                        "check() exception: " + /*SF*/"The trait is not supported on this element."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   193
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   194
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   195
                /*SF*/"The trait is not supported on this element."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   196
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   197
        return attributeTypeId;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   198
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   199
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   200
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   201
     * @see com.nokia.microedition.m2g.M2GObject#doCheckValidity()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   202
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   203
    public boolean doCheckValidity()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   204
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   205
        try
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   206
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   207
            if (super.doCheckValidity() &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   208
                    (iDocument != null) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   209
                    (iElementTypeId != M2GSVGConstants.EL_UNDEFINED))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   210
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   211
                return true;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   212
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   213
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   214
        catch (IOException e)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   215
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   216
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   217
        return false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   218
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   219
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   220
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   221
     * @see com.nokia.microedition.m2g.M2GObject#doCleanup()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   222
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   223
    protected void doCleanup()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   224
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   225
        iDocument = null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   226
        iElementTypeId = M2GSVGConstants.EL_UNDEFINED;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   227
        resetHandles();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   228
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   229
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   230
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   231
     * @see com.nokia.microedition.m2g.M2GObject#doConstruct()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   232
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   233
    public void doConstruct()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   234
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   235
        // No need to register for finalization
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   236
        // super.doConstruct();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   237
        iElementTypeId = _getElementTypeId(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   238
                             getNativeSVGProxyHandle(), getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   239
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   240
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   241
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   242
     * Returns a document
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   243
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   244
    public M2GDocument getDocument()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   245
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   246
        return iDocument;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   247
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   248
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   249
    /*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   250
     * Retuns element's type id
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   251
     * @return  element's type id
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   252
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   253
    public short getElementTypeId()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   254
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   255
        return iElementTypeId;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   256
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   257
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   258
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   259
     * @see org.w3c.dom.svg.SVGElement#getFirstElementChild()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   260
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   261
    public Element getFirstElementChild() throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   262
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   263
        // Get child element's handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   264
        int childHandle = _getFirstElementChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   265
                               getNativeSVGProxyHandle(), getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   266
        if (M2GObject.checkHandle(childHandle))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   267
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   268
            return (Element)M2GSVGElement.buildElement(childHandle, iDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   269
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   270
        return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   271
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   272
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   273
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   274
     * @see org.w3c.dom.svg.SVGElement#getFloatTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   275
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   276
    public float getFloatTrait(String name) throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   277
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   278
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   279
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   280
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   281
            Logger.ELOG(Logger.EJavaUI, "getFloatTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   282
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   283
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   284
        short attributeTypeId = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   285
        if (!M2GSVGConstants.isGetFloatTraitAllowed(attributeTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   286
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   287
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   288
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   289
                /*SF*/"Trait's computed value cannot be converted to a float."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   290
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   291
        return _getFloatTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   292
                   getNativeSVGProxyHandle(), getHandle(), attributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   293
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   294
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   295
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   296
     * @see org.w3c.dom.svg.SVGElement#getId()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   297
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   298
    public String getId()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   299
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   300
        return _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   301
                   getNativeSVGProxyHandle(), getHandle(), M2GSVGConstants.AT_ID);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   302
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   303
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   304
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   305
     * @see org.w3c.dom.Node#getLocalName()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   306
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   307
    public String getLocalName()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   308
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   309
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   310
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   311
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   312
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   313
                        "getLocalName() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   314
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   315
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   316
        return M2GSVGConstants.parseElementTypeName(iElementTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   317
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   318
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   319
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   320
     * @see org.w3c.dom.svg.SVGElement#getMatrixTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   321
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   322
    public SVGMatrix getMatrixTrait(String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   323
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   324
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   325
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   326
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   327
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   328
                        "getMatrixTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   329
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   330
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   331
        short attributeTypeId = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   332
        if (!M2GSVGConstants.isGetMatrixTraitAllowed(attributeTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   333
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   334
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   335
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   336
                /*SF*/"Trait's computed value cannot be converted to a SVGMatrix."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   337
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   338
        M2GSVGMatrix matrix = new M2GSVGMatrix();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   339
        // If an error is occurred, then no values are put in the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   340
        // matrix array by the native method
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   341
        _getMatrixTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   342
            getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   343
            getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   344
            attributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   345
            matrix.getComponents());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   346
        return matrix;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   347
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   348
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   349
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   350
     * @see org.w3c.dom.Node#getNamespaceURI()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   351
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   352
    public String getNamespaceURI()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   353
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   354
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   355
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   356
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   357
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   358
                        "getNamespaceURI() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   359
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   360
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   361
        return M2GSVGConstants.SVG_NAMESPACE_URI;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   362
        /*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   363
          return _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   364
                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   365
                getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   366
                id);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   367
        */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   368
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   369
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   370
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   371
     * @see org.w3c.dom.svg.SVGElement#getNextElementSibling()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   372
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   373
    public Element getNextElementSibling()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   374
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   375
        int elementHandle = _getNextElementSibling(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   376
                                 getNativeSVGProxyHandle(), getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   377
        if (M2GObject.checkHandle(elementHandle))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   378
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   379
            return M2GSVGElement.buildElement(elementHandle, iDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   380
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   381
        return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   382
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   383
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   384
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   385
     * @see org.w3c.dom.svg.SVGElement#getParentNode()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   386
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   387
    public Node getParentNode()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   388
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   389
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   390
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   391
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   392
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   393
                        "getParentNode() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   394
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   395
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   396
        int parentHandle = _getParent(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   397
                                getNativeSVGProxyHandle(), getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   398
        if (M2GObject.checkHandle(parentHandle))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   399
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   400
            return M2GSVGElement.buildElement(parentHandle, iDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   401
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   402
        return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   403
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   404
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   405
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   406
     * @see org.w3c.dom.svg.SVGElement#getPathTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   407
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   408
    public SVGPath getPathTrait(String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   409
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   410
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   411
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   412
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   413
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   414
                        "getPathTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   415
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   416
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   417
        short attributeTypeId = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   418
        if (!M2GSVGConstants.isGetPathTraitAllowed(attributeTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   419
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   420
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   421
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   422
                /*SF*/"Trait's computed value cannot be converted to a SVGPath."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   423
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   424
        int pathHandle = _getPathTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   425
                             getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   426
                             getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   427
                             attributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   428
        if (pathHandle != 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   429
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   430
            // Path doesn't own the native object
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   431
            return new M2GSVGPath(pathHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   432
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   433
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   434
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   435
            return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   436
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   437
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   438
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   439
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   440
     * @see org.w3c.dom.svg.SVGElement#getRectTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   441
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   442
    public SVGRect getRectTrait(String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   443
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   444
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   445
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   446
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   447
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   448
                        "getRectTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   449
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   450
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   451
        short attributeTypeId = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   452
        if (!M2GSVGConstants.isGetRectTraitAllowed(attributeTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   453
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   454
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   455
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   456
                /*SF*/"Trait's computed value cannot be converted to a SVGRect."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   457
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   458
        M2GSVGRect rect = new M2GSVGRect();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   459
        if (_getRectTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   460
                    getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   461
                    getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   462
                    attributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   463
                    rect.getComponents()) == -1)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   464
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   465
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   466
                       "getRectTrait() - returns null!!");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   467
            return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   468
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   469
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   470
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   471
            return rect;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   472
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   473
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   474
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   475
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   476
     * @see org.w3c.dom.svg.SVGElement#getRGBColorTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   477
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   478
    public SVGRGBColor getRGBColorTrait(String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   479
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   480
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   481
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   482
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   483
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   484
                        "getRGBColorTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   485
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   486
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   487
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   488
        short attributeTypeId = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   489
        if (!M2GSVGConstants.isGetRgbColorTraitAllowed(attributeTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   490
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   491
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   492
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   493
                /*SF*/"Trait's computed value cannot be converted to a SVGRGBColor."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   494
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   495
        M2GSVGRGBColor rgb = new M2GSVGRGBColor(0, 0, 0);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   496
        int result = _getColorTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   497
                         getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   498
                         getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   499
                         attributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   500
                         rgb.getComponents());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   501
        if (result == -1)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   502
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   503
            if ((attributeTypeId == M2GSVGConstants.AT_FILL) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   504
                    (attributeTypeId == M2GSVGConstants.AT_COLOR))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   505
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   506
                return new M2GSVGRGBColor(0, 0, 0);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   507
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   508
            else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   509
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   510
                return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   511
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   512
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   513
        else if (result == 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   514
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   515
            return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   516
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   517
        return rgb;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   518
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   519
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   520
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   521
     * Get trait
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   522
     * @see org.w3c.dom.svg.SVGElement#getTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   523
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   524
    public String getTrait(String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   525
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   526
        return getTraitNS(null, name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   527
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   528
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   529
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   530
     * Get trait
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   531
     * @see org.w3c.dom.svg.SVGElement#getTraitNS()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   532
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   533
    public String getTraitNS(String namespaceURI, String name)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   534
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   535
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   536
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   537
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   538
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   539
                        "getTraitNS() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   540
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   541
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   542
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   543
        // Checks name validity
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   544
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   545
        String value = null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   546
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   547
        // SVG traits are in the so-called element's 'per-element type partitions namespaces'
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   548
        // namespace must be always null
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   549
        // except for HREF traits which are from XLINK namespace?
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   550
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   551
        // XLINK_NAMESPACE
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   552
        if (namespaceURI != null &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   553
                namespaceURI.equals(M2GSVGConstants.XLINK_NAMESPACE_URI))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   554
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   555
            if (!M2GSVGConstants.isGetTraitNSAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   556
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   557
                Logger.ELOG(Logger.EJavaUI, "getTraitNS() XLINK eception: " +
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   558
                            "Trait's computed value cannot be converted to a String.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   559
                throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   560
                    DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   561
                    "Trait's computed value cannot be converted to a String.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   562
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   563
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   564
            value = _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   565
                        getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   566
                        getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   567
                        id);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   568
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   569
            if (value == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   570
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   571
                value = "";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   572
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   573
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   574
            return value;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   575
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   576
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   577
        // Checks namespace validity: namespace must be null
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   578
        if (namespaceURI != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   579
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   580
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   581
                        "getTraitNS() - namespace IS NOT xlink but something else.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   582
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   583
                        "getTraitNS() exception: " + /*SF*/"The namespace is not supported."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   584
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   585
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   586
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   587
                "The namespace is not supported.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   588
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   589
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   590
        // Checks that attribute is obtaineable as a string
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   591
        if (!M2GSVGConstants.isGetTraitNSStringAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   592
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   593
            Logger.ELOG(Logger.EJavaUI, "getTraitNS() exception: " +
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   594
                        "Trait's computed value cannot be converted to a String.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   595
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   596
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   597
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   598
                "Trait's computed value cannot be converted to a String.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   599
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   600
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   601
        if (id == M2GSVGConstants.AT_XLINKHREF)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   602
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   603
            Logger.ELOG(Logger.EJavaUI, "getTraitNS() exception: "
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   604
                        + "The trait is not supported in this namespace.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   605
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   606
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   607
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   608
                "The trait is not supported in this namespace.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   609
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   610
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   611
        // Checks if attribute is in string format
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   612
        if ((id == M2GSVGConstants.AT_STRING) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   613
                (id == M2GSVGConstants.AT_VERSION) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   614
                (id == M2GSVGConstants.AT_BASEPROFILE) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   615
                (id == M2GSVGConstants.AT_TARGET) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   616
                (id == M2GSVGConstants.AT_FONTFAMILY))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   617
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   618
            value = _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   619
                        getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   620
                        getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   621
                        id);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   622
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   623
        // Reads enum attribute
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   624
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   625
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   626
            short valueId = _getEnumTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   627
                                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   628
                                getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   629
                                id);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   630
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   631
            // Convert value id to string
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   632
            value = M2GSVGConstants.parseAttributeValueName(id, valueId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   633
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   634
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   635
        if (value == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   636
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   637
            value = "";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   638
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   639
        return value;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   640
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   641
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   642
    /*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   643
     * Get element used from this element
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   644
     * @return Element.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   645
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   646
    public SVGElement getUsedFromElement()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   647
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   648
        int elementHandle = _getUsedFromElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   649
                                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   650
                                getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   651
        if (M2GObject.checkHandle(elementHandle))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   652
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   653
            return M2GSVGElement.buildElement(elementHandle, iDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   654
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   655
        return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   656
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   657
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   658
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   659
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   660
     * @see org.w3c.dom.Node#insertBefore
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   661
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   662
    public Node insertBefore(Node newChild, Node refChild)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   663
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   664
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   665
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   666
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   667
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   668
                        "insertBefore() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   669
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   670
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   671
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   672
        if (newChild == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   673
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   674
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   675
                        "insertBefore() exception - new child is null");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   676
            throw new NullPointerException();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   677
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   678
        if (newChild instanceof M2GDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   679
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   680
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   681
                        "insertBefore() exception - child is document");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   682
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   683
                DOMException.HIERARCHY_REQUEST_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   684
                /*SF*/"Child is wrong type (Document)."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   685
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   686
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   687
        if (!M2GSVGConstants.isAllowedToInsertElement(((M2GSVGElement)newChild).iElementTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   688
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   689
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   690
                        "insertBefore() exception - cannot insert this node type");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   691
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   692
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   693
                /*SF*/"Cannot insert node of that type."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   694
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   695
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   696
        if (!M2GSVGConstants.checkElementAsChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   697
                    iElementTypeId, ((M2GSVGElement)newChild).iElementTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   698
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   699
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   700
                        "insertBefore() exception - invalid parent-child relation");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   701
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   702
                DOMException.HIERARCHY_REQUEST_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   703
                /*SF*/"Cannot insert node of that type."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   704
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   705
        // Ensure that the new child candidate wouldn't be an ancestor of this element
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   706
        if (IsAncestor(newChild, this))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   707
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   708
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   709
                        "insertBefore() exception - is ancestor");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   710
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   711
                DOMException.HIERARCHY_REQUEST_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   712
                /*SF*/"Hierarchy request error in Document."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   713
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   714
        // Check that the child and this element belong to the same Document
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   715
        if (((M2GSVGElement)newChild).getDocument().getHandle() != iDocument.getHandle())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   716
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   717
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   718
                        "insertBefore() exception - document is not the same");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   719
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   720
                DOMException.WRONG_DOCUMENT_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   721
                /*SF*/"Child belongs to different document."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   722
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   723
        if ((refChild != null) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   724
                (((M2GSVGElement)refChild.getParentNode()).getHandle() != getHandle()))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   725
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   726
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   727
                        "insertBefore() exception - ref child is not found");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   728
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   729
                DOMException.NOT_FOUND_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   730
                /*SF*/"The child to insert before doesn't exist in this current node."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   731
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   732
        // check that if <use> then xlink:href is an existing element id
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   733
        if (((M2GSVGElement)newChild).iElementTypeId == M2GSVGConstants.EL_USE)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   734
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   735
            String value = ((M2GSVGElement)newChild).getTraitNS(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   736
                               M2GSVGConstants.XLINK_NAMESPACE_URI, "href");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   737
            if (value.length() != 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   738
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   739
                if (!value.startsWith("#") ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   740
                        ((M2GSVGElement)newChild).iDocument.getElementById(value.substring(1)) == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   741
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   742
                    Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   743
                                "insertBefore() exception - \"href\" trait value="
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   744
                                + value + " is invalid");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   745
                    throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   746
                        DOMException.INVALID_STATE_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   747
                        /*SF*/"Invalid element id value."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   748
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   749
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   750
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   751
        if (refChild == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   752
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   753
            _appendChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   754
                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   755
                getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   756
                ((M2GSVGElement)newChild).getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   757
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   758
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   759
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   760
            _insertBefore(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   761
                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   762
                getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   763
                ((M2GSVGElement)newChild).getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   764
                ((M2GSVGElement) refChild).getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   765
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   766
        String href = _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   767
                          getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   768
                          ((M2GSVGElement)newChild).getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   769
                          M2GSVGConstants.AT_XLINKHREF);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   770
        // Need to call resource handler if element is elementindom, image,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   771
        // and if it has an href attribute
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   772
        if ((href != null) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   773
                (((M2GSVGElement)newChild).iElementTypeId == M2GSVGConstants.EL_IMAGE) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   774
                iDocument.isElementInDOM(((M2GSVGElement)newChild).getHandle()))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   775
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   776
            // Call resource handler here
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   777
            iDocument.invokeResourceHandler(href);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   778
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   779
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   780
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   781
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   782
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   783
        return newChild;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   784
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   785
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   786
    /*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   787
     * Check if used
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   788
     * @return True if used.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   789
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   790
    public boolean isUsed()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   791
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   792
        return (_isUsed(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   793
                    getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   794
                    getHandle()) > 0 ? true : false);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   795
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   796
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   797
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   798
     * @see org.w3c.dom.events.EventTarget#removeEventListener()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   799
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   800
    public void removeEventListener(String type, EventListener listener, boolean useCapture)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   801
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   802
        if (type == null || type.equals("") || listener == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   803
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   804
            throw new NullPointerException();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   805
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   806
        if (useCapture == true)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   807
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   808
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   809
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   810
                CAPTURE_NOT_SUPPORTED_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   811
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   812
        iDocument.unregister(this, type, listener);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   813
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   814
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   815
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   816
     * @see org.w3c.dom.svg.SVGElement#setId()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   817
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   818
    public void setId(String id) throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   819
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   820
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   821
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   822
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   823
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   824
                        "setId() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   825
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   826
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   827
        if (id == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   828
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   829
            throw new NullPointerException(/*SF*/"The id is null."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   830
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   831
        if (getId() != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   832
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   833
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   834
                DOMException.NO_MODIFICATION_ALLOWED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   835
                /*SF*/"Existing element id cannot be changed."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   836
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   837
        if (iDocument.containsElement(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   838
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   839
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   840
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   841
                /*SF*/"Element id already exists in the document."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   842
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   843
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   844
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   845
            _setStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   846
                getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   847
                getHandle(), M2GSVGConstants.AT_ID, id);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   848
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   849
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   850
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   851
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   852
     * @see org.w3c.dom.svg.SVGElement#setFloatTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   853
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   854
    public void setFloatTrait(String name, float value)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   855
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   856
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   857
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   858
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   859
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   860
                        "setFloatTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   861
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   862
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   863
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   864
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   865
        if (!M2GSVGConstants.isSetFloatTraitAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   866
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   867
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   868
                        "setFloatTrait() exception - set float (id=" + id + ") not allowed");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   869
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   870
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   871
                /*SF*/"Trait's value cannot be specified as a float."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   872
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   873
        if ((Float.isNaN(value)) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   874
                // value must be >= 1
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   875
                (value < 1 && (id == M2GSVGConstants.AT_STROKEMITERLIMIT)) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   876
                // value must be >= 0
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   877
                (value < 0 && (id == M2GSVGConstants.AT_FONTSIZE ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   878
                               id == M2GSVGConstants.AT_STROKEWIDTH ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   879
                               id == M2GSVGConstants.AT_HEIGHT ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   880
                               id == M2GSVGConstants.AT_WIDTH ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   881
                               id == M2GSVGConstants.AT_RX ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   882
                               id == M2GSVGConstants.AT_RY ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   883
                               id == M2GSVGConstants.AT_R)))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   884
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   885
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   886
                        "setFloatTrait() exception - invalid value=" + value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   887
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   888
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   889
                /*SF*/"The input value is an invalid value for the given trait."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   890
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   891
        _setFloatTrait(getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   892
                       getHandle(), id, value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   893
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   894
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   895
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   896
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   897
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   898
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   899
     * @see org.w3c.dom.svg.SVGElement#setMatrixTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   900
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   901
    public void setMatrixTrait(String name, SVGMatrix matrix)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   902
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   903
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   904
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   905
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   906
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   907
                        "setMatrixTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   908
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   909
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   910
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   911
        if (!M2GSVGConstants.isSetMatrixTraitAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   912
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   913
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   914
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   915
                /*SF*/"Trait's value cannot be specified as a SVGMatrix."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   916
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   917
        if ((matrix == null) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   918
                !(matrix instanceof M2GSVGMatrix))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   919
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   920
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   921
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   922
                /*SF*/"The input value is an invalid value for the given trait."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   923
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   924
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   925
        _setMatrixTrait(getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   926
                        getHandle(), id,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   927
                        ((M2GSVGMatrix)matrix).getComponents());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   928
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   929
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   930
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   931
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   932
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   933
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   934
     * @see org.w3c.dom.svg.SVGElement#setPathTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   935
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   936
    public void setPathTrait(String name, SVGPath path)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   937
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   938
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   939
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   940
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   941
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   942
                        "setPathTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   943
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   944
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   945
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   946
        if (!M2GSVGConstants.isSetPathTraitAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   947
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   948
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   949
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   950
                /*SF*/"Trait's value cannot be specified as a SVGPath."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   951
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   952
        if ((path == null) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   953
                !(path instanceof M2GSVGPath) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   954
                !((M2GSVGPath)path).doCheckValidity())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   955
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   956
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   957
                        "setPathTrait() - exception M2GSVGPath not valid");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   958
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   959
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   960
                /*SF*/"The input value is an invalid value for the given trait."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   961
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   962
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   963
        _setPathTrait( getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   964
                      getHandle(), id, ((M2GSVGPath)path).getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   965
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   966
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   967
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   968
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   969
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   970
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   971
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   972
     * @see org.w3c.dom.svg.SVGElement#setPathTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   973
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   974
    public void setRectTrait(String name, SVGRect rect)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   975
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   976
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   977
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   978
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   979
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   980
                        "setRectTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   981
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   982
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   983
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   984
        if (!M2GSVGConstants.isSetRectTraitAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   985
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   986
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   987
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   988
                /*SF*/"Trait's value cannot be specified as a SVGRect."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   989
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   990
        if ((rect == null) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   991
                (rect.getWidth() < 0 || rect.getHeight() < 0))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   992
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   993
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   994
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   995
                /*SF*/"The input value is an invalid value for the given trait."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   996
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   997
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   998
        _setRectTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   999
            getNativeSVGProxyHandle(), getHandle(), id,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1000
            rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1001
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1002
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1003
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1004
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1005
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1006
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1007
     * @see org.w3c.dom.svg.SVGElement#setRGBColorTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1008
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1009
    public void setRGBColorTrait(String name, SVGRGBColor color)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1010
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1011
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1012
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1013
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1014
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1015
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1016
                        "setRGBColorTrait() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1017
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1018
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1019
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1020
        if (!M2GSVGConstants.isSetRgbColorTraitAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1021
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1022
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1023
                        "setRGBColorTrait() - exception: " + DOMException.TYPE_MISMATCH_ERR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1024
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1025
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1026
                /*SF*/"Trait's value cannot be specified as a SVGRGBColor."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1027
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1028
        if (color == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1029
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1030
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1031
                        "setRGBColorTrait() - exception: " + DOMException.INVALID_ACCESS_ERR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1032
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1033
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1034
                /*SF*/"The trait is null."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1035
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1036
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1037
        _setColorTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1038
            getNativeSVGProxyHandle(), getHandle(), id,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1039
            color.getRed(), color.getGreen(), color.getBlue());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1040
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1041
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1042
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1043
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1044
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1045
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1046
     * @see org.w3c.dom.svg.SVGElement#setTrait()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1047
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1048
    public void setTrait(String name, String value)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1049
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1050
        setTraitNS(null, name, value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1051
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1052
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1053
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1054
     * @see org.w3c.dom.svg.SVGElement#setTraitNS()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1055
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1056
    public void setTraitNS(String namespaceURI, String name, String value)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1057
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1058
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1059
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1060
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1061
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1062
                        "setTraitNS() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1063
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1064
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1065
        if (value == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1066
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1067
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1068
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1069
                /*SF*/"Value cannot be set to null."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1070
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1071
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1072
        short id = check(name);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1073
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1074
        // SVG traits are in the so-called element's 'per-element type partitions namespaces'
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1075
        // namespace must be always null
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1076
        // except for HREF traits which are from XLINK namespace?
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1077
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1078
        if (namespaceURI != null &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1079
                namespaceURI.equals(M2GSVGConstants.XLINK_NAMESPACE_URI))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1080
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1081
            if (!M2GSVGConstants.isGetTraitNSAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1082
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1083
                throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1084
                    DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1085
                    "Trait's value cannot be specified as a String.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1086
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1087
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1088
            // check that if <use> then xlink:href is an existing element id
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1089
            if ((iElementTypeId == M2GSVGConstants.EL_USE) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1090
                    (iDocument.isElementInDOM(getHandle())))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1091
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1092
                if ((value.length() <= 1) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1093
                        !value.startsWith("#") ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1094
                        (iDocument.getElementById(value.substring(1)) == null))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1095
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1096
                    Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1097
                                "setTraitNS() - DOMException");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1098
                    throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1099
                        DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1100
                        /*SF*/"The <use> element is hooked into the document tree and the the value of xlink:href is set invalid."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1101
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1102
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1103
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1104
            _setStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1105
                getNativeSVGProxyHandle(), getHandle(), id, value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1106
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1107
            // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1108
            iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1109
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1110
            // Check if element is in DOM and in that case invokes
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1111
            // resource handler
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1112
            if ((iElementTypeId == M2GSVGConstants.EL_IMAGE) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1113
                    (id == M2GSVGConstants.AT_XLINKHREF) &&
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1114
                    (iDocument.isElementInDOM(getHandle())))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1115
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1116
                if (!iDocument.containsExternalResourceURI(value))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1117
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1118
                    iDocument.invokeResourceHandler(value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1119
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1120
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1121
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1122
            return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1123
        } // namespaceURI != null &&  namespaceURI.equals(M2GSVGConstants.XLINK_NAMESPACE_URI)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1124
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1125
        // all traits except HREF must have no namespace
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1126
        if (namespaceURI != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1127
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1128
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1129
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1130
                "The namespace is not supported.");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1131
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1132
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1133
        if ((id == M2GSVGConstants.AT_VERSION) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1134
                (id == M2GSVGConstants.AT_BASEPROFILE))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1135
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1136
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1137
                DOMException.NO_MODIFICATION_ALLOWED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1138
                /*SF*/"Attempt to change readonly trait."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1139
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1140
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1141
        if (id == M2GSVGConstants.AT_XLINKHREF)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1142
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1143
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1144
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1145
                /*SF*/"The trait is not supported in this namespace."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1146
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1147
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1148
        if (!M2GSVGConstants.isSetTraitNSStringAllowed(id))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1149
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1150
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1151
                DOMException.TYPE_MISMATCH_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1152
                /*SF*/"Trait's value cannot be specified as a String."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1153
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1154
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1155
        short valueId = M2GSVGConstants.parseAttributeValueNameId(id, value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1156
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1157
        if (valueId == M2GSVGConstants.SVG_ERROR)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1158
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1159
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1160
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1161
                /*SF*/"The value is invalid."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1162
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1163
        else if (valueId == M2GSVGConstants.TEXT_NOT_SHORT)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1164
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1165
            _setStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1166
                getNativeSVGProxyHandle(), getHandle(), id, value);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1167
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1168
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1169
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1170
            _setEnumTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1171
                getNativeSVGProxyHandle(), getHandle(), id, valueId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1172
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1173
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1174
        // inform observer about changes in DOM only if element is in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1175
        iDocument.notifyDOMChangeObserver(iNativeHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1176
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1177
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1178
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1179
     * @see org.w3c.dom.Node#removeChild
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1180
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1181
    public Node removeChild(Node oldChild) throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1182
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1183
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1184
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1185
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1186
            Logger.ELOG(Logger.EJavaUI,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1187
                        "removeChild() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1188
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1189
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1190
        if (oldChild == null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1191
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1192
            throw new NullPointerException();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1193
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1194
        if (oldChild instanceof M2GDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1195
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1196
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1197
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1198
                /*SF*/"Cannot remove this type of node."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1199
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1200
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1201
        M2GSVGElement removableChild = (M2GSVGElement)oldChild;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1202
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1203
        if (!M2GSVGConstants.isAllowedToRemoveElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1204
                    removableChild.iElementTypeId))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1205
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1206
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1207
                DOMException.NOT_SUPPORTED_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1208
                /*SF*/"Cannot remove this type of node."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1209
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1210
        M2GSVGElement parent = (M2GSVGElement)removableChild.getParentNode();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1211
        if ((parent == null) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1212
                (parent.getHandle() != getHandle()))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1213
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1214
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1215
                DOMException.NOT_FOUND_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1216
                /*SF*/"Not a child of this node."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1217
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1218
        // Check if removable
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1219
        int result = _checkRemoveable(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1220
                         getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1221
                         removableChild.getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1222
        if (result <= 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1223
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1224
            throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1225
                DOMException.INVALID_ACCESS_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1226
                /*SF*/"The element being removed or one of its decendants have non-null id."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1227
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1228
        // The removedChildHandle handle should be same as the removableChild handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1229
        int removedChildHandle  = removedChildHandle = _removeChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1230
                                      getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1231
                                      getHandle(), removableChild.getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1232
        // Remove the element from the live elements
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1233
        removableChild.getDocument().unregisterLiveElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1234
            new Integer(removableChild.getHandle()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1235
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1236
        iDocument.notifyDOMChangeObserver(getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1237
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1238
        return removableChild;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1239
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1240
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1241
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1242
    // STATIC METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1243
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1244
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1245
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1246
     * Creates SVGElement instance according to the element type.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1247
     * Possible element types are: SVGElement, SVGLocatableElement,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1248
     * SVGSVGElement, SVGAnimationElement
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1249
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1250
    public static SVGElement buildElement(int aElementHandle, M2GDocument aDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1251
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1252
        // Check native handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1253
        if (!M2GObject.checkHandle(aElementHandle) || (aDocument == null))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1254
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1255
            return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1256
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1257
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1258
        // Check if the element already exists
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1259
        SVGElement svgElement = aDocument.findLiveElement(new Integer(aElementHandle));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1260
        if (svgElement != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1261
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1262
            return svgElement;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1263
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1264
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1265
        String typeName = M2GSVGElement.getElementTypeName(aElementHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1266
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1267
        if (M2GSVGConstants.isRootElement(typeName))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1268
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1269
            svgElement = M2GSVGSVGElement.buildRootElement(aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1270
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1271
        else if (M2GSVGConstants.isLocatableElement(typeName))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1272
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1273
            svgElement = new M2GSVGLocatableElement(aElementHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1274
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1275
        else if (M2GSVGConstants.isAnimatableElement(typeName))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1276
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1277
            svgElement = new M2GSVGAnimationElement(aElementHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1278
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1279
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1280
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1281
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1282
            String id = M2GSVGElement._getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1283
                            M2GManager.getInstance().getSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1284
                            aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1285
                            M2GSVGConstants.AT_ID );
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1286
            if ((id != null) && id.equals("text_use_svg_default_font"))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1287
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1288
                return buildElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1289
                           M2GSVGElement._getNextElementSibling(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1290
                               aDocument.getNativeSVGProxyHandle(), aElementHandle),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1291
                           aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1292
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1293
            else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1294
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1295
                svgElement = new M2GSVGElement(aElementHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1296
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1297
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1298
        aDocument.registerLiveElement(svgElement, new Integer(aElementHandle));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1299
        return svgElement;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1300
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1301
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1302
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1303
     * Helper function for appendChild and insertBefore
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1304
     * returns true if "ancestor" is the same node as "child" or
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1305
     * if "ancestor" is parent/ancestor of "child" else returns false
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1306
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1307
    private static final boolean IsAncestor(Node aAncestor, Node aChild) throws DOMException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1308
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1309
        boolean result = false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1310
        if (aAncestor != null && aChild != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1311
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1312
            if (aChild instanceof M2GDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1313
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1314
                throw new DOMException(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1315
                    DOMException.HIERARCHY_REQUEST_ERR,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1316
                    /*SF*/"Cannot append Document elements."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1317
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1318
            if ((aChild instanceof M2GSVGElement) && (aAncestor instanceof M2GSVGElement))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1319
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1320
                // Should check all types or just parent type???
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1321
                if (((M2GSVGElement)aAncestor).getHandle() == ((M2GSVGElement)aChild).getHandle())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1322
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1323
                    result = true;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1324
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1325
                else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1326
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1327
                    result = IsAncestor(aAncestor, aChild.getParentNode());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1328
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1329
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1330
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1331
        return result;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1332
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1333
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1334
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1335
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1336
     * Helper function for removeChild.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1337
     * @returns false if the node "child" and all its children have non-null ids
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1338
     * else returns true
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1339
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1340
    private static final boolean IsReadOnly(Node aChild)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1341
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1342
        if (aChild != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1343
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1344
            // Should check all types or just parent type???
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1345
            if ((aChild instanceof M2GSVGElement) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1346
                    (aChild instanceof SVGLocatableElement) ||
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1347
                    (aChild instanceof SVGSVGElement))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1348
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1349
                if (M2GSVGConstants.isElementReadOnly(((M2GSVGElement)aChild).getLocalName()))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1350
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1351
                    return true;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1352
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1353
                return IsReadOnly(aChild.getParentNode());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1354
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1355
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1356
        return false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1357
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1358
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1359
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1360
     * Get element's type name
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1361
     * @param aElementHandle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1362
     * @param aDocument
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1363
     * @return element's type name
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1364
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1365
    public static String getElementTypeName(int aElementHandle, M2GDocument aDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1366
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1367
        short elemenTypeId = M2GSVGConstants.EL_UNDEFINED;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1368
        if (aDocument != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1369
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1370
            elemenTypeId = M2GSVGElement._getElementTypeId(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1371
                               aDocument.getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1372
                               aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1373
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1374
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1375
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1376
            elemenTypeId = M2GSVGElement._getElementTypeId(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1377
                               M2GManager.getInstance().getSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1378
                               aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1379
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1380
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1381
        return M2GSVGConstants.parseElementTypeName(elemenTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1382
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1383
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1384
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1385
    // NATIVE METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1386
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1387
    private static native void _appendChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1388
        int aSvgProxyHandle, int aElementHandle, int aNewChild);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1389
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1390
    private static native int _checkRemoveable(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1391
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1392
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1393
    static native int _getBBox(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1394
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1395
        short aAttributeTypeId, float[] aComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1396
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1397
    private static native int _getColorTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1398
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1399
        short aAttributeTypeId, int[] aColorComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1400
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1401
    private static native short _getElementTypeId(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1402
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1403
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1404
    static native short _getEnumTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1405
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1406
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1407
    private static native int _getFirstElementChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1408
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1409
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1410
    private static native float _getFloatTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1411
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1412
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1413
    static native int _getMatrixTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1414
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1415
        short aAttributeTypeId, float[] aComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1416
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1417
    private static native int _getNextElementSibling(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1418
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1419
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1420
    private static native int _getParent(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1421
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1422
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1423
    private static native int _getPathTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1424
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1425
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1426
    static native int _getRectTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1427
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1428
        short aAttributeTypeId, float[] aComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1429
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1430
    native static int _getRootElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1431
        int aSvgProxyHandle, int aDocumentHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1432
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1433
    static native void _getScreenBBox(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1434
        int aSvgProxyHandle, int aElementHandle, float[] aComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1435
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1436
    protected static native String _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1437
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1438
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1439
    private static native int _getUsedFromElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1440
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1441
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1442
    private static native void _insertBefore(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1443
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1444
        int aChildElementHandle, int aReferenceElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1445
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1446
    private static native int _isUsed(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1447
        int aSvgProxyHandle, int aElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1448
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1449
    private static native int _removeChild(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1450
        int aSvgProxyHandle, int aElementHandle, int aChildElementHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1451
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1452
    private static native void _setColorTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1453
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1454
        int aRed, int aGreen, int aBlue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1455
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1456
    private static native void _setEnumTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1457
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1458
        short aValue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1459
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1460
    private static native void _setFloatTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1461
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId, float aValue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1462
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1463
    static native void _setMatrixTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1464
        int aSvgProxyHandle, int aElementHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1465
        short aAttributeTypeId, float[] aComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1466
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1467
    private static native void _setPathTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1468
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId, int aPathHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1469
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1470
    private static native void _setRectTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1471
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1472
        float aX, float aY, float aWidth, float aHeight);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1473
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1474
    private static native void _setStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1475
        int aSvgProxyHandle, int aElementHandle, short aAttributeTypeId, String aValue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1476
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
  1477
}