/*******************************************************************************
 * Copyright (c) 2016 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/

package com.openshift.restclient.capability.resources;

import java.util.Map;

import com.openshift.restclient.capability.ICapability;

/**
 * A mechanism to access the underlying content of a json structure
 * 
 * Relies on a dot delimited path to indentify the root of the entity being
 * returned (e.g. 'metadata.labels'). This does not provide a mechanism to
 * retrieve properties across an array kind.
 * 
 *
 */
public interface IPropertyAccessCapability extends ICapability {

    /**
     * 
     * 
     * @throws @{@link
     *             UnresolvablePathException} when the path does not resolve to an
     *             existing node
     */
    Map<String, Object> asMap(String path);

    /**
     * Return the string value to the path
     * 
     * @throws @{@link
     *             UnresolvablePathException} when the path does not resolve to an
     *             existing node
     */
    String asString(String path);

    /**
     * The exception thrown when a path given to the capability is unresolvable
     * 
     * @author jeff.cantrill
     *
     */
    public static class UnresolvablePathException extends RuntimeException {

        /**
         * 
         */
        private static final long serialVersionUID = 2422016683166925224L;

    }
}
