/*
 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * Contributors:
 *     Nuxeo - initial API and implementation
 *
 * $Id$
 */

package org.nuxeo.common.xmap;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author  <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
 *
 */
public class Context extends ArrayList<Object> {

    private static final long serialVersionUID = 1L;

    // Declare as a HashMap so that it is considered serializable
    @SuppressWarnings({"CollectionDeclaredAsConcreteClass"})
    private final HashMap<String, Object> properties = new HashMap<String, Object>();


    public Class loadClass(String className) throws ClassNotFoundException {
        return Thread.currentThread().getContextClassLoader().loadClass(className);
    }

    public URL getResource(String name) {
        return Thread.currentThread().getContextClassLoader().getResource(name);
    }

    public Object getObject() {
        int size = size();
        if (size > 0) {
            return get(size - 1);
        }
        return null;
    }

    public Object getParent() {
        int size = size();
        if (size > 1) {
            return get(size - 2);
        }
        return null;
    }

    public void push(Object object) {
        add(object);
    }

    public Object pop() {
        int size = size();
        if (size > 0) {
            return remove(size - 1);
        }
        return null;
    }

    public Object getProperty(String key) {
        return properties.get(key);
    }

    public void setProperty(String key, Object value) {
        properties.put(key, value);
    }

}

@@ -21,17 +21,17 @@
 2006-201
-1
+3
  Nuxeo S
@@ -630,17 +630,16 @@
 ense.%0A *
- 
 %0A * Cont
@@ -700,16 +700,55 @@
 n%0A *
-%0A * $Id$
+     Bogdan Stefanescu%0A *     Benjamin JALON%0A *
 %0A */
@@ -1040,135 +1040,8 @@
 L;%0A%0A
-    // Declare as a HashMap so that it is considered serializable%0A    @SuppressWarnings(%7B%22CollectionDeclaredAsConcreteClass%22%7D)%0A
     
@@ -1140,16 +1140,19 @@
 ic Class
+%3C?%3E
  loadCla
@@ -1204,16 +1204,166 @@
 ption %7B%0A
+        if (className.startsWith(%22%5B%22)) %7B%0A            return Class.forName(className, true, Thread.currentThread().getContextClassLoader());%0A        %7D%0A
         

Improve Class mapper in XMAP to manage Array