All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tapestry.contrib.inspector.ShowSpecification Maven / Gradle / Ivy

There is a newer version: 4.1.6
Show newest version
// Copyright 2004, 2005 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package org.apache.tapestry.contrib.inspector;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import org.apache.tapestry.BaseComponent;
import org.apache.tapestry.IAsset;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEndRenderListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.spec.IBeanSpecification;
import org.apache.tapestry.spec.IComponentSpecification;
import org.apache.tapestry.spec.IParameterSpecification;

/**
 * Component of the {@link Inspector} page used to display the specification, parameters and
 * bindings and assets of the inspected component.
 * 
 * @author Howard Lewis Ship
 */

public abstract class ShowSpecification extends BaseComponent implements PageBeginRenderListener,
        PageEndRenderListener
{
    private IComponent _inspectedComponent;

    private IComponentSpecification _inspectedSpecification;

    private String _parameterName;

    private String _assetName;

    private List _sortedComponents;

    private List _assetNames;

    private List _formalParameterNames;

    private List _informalParameterNames;

    private List _sortedPropertyNames;

    private String _propertyName;

    private List _beanNames;

    private String _beanName;

    private IBeanSpecification _beanSpecification;

    /**
     * 
     * @author hls
     */
    private static class ComponentComparitor implements Comparator
    {
        public int compare(Object left, Object right)
        {
            IComponent leftComponent;
            String leftId;
            IComponent rightComponent;
            String rightId;

            if (left == right)
                return 0;

            leftComponent = (IComponent) left;
            rightComponent = (IComponent) right;

            leftId = leftComponent.getId();
            rightId = rightComponent.getId();

            return leftId.compareTo(rightId);
        }
    }

    /**
     * Clears all cached information about the component and such after each render (including the
     * rewind phase render used to process the tab view).
     * 
     * @since 1.0.5
     */

    public void pageEndRender(PageEvent event)
    {
        _inspectedComponent = null;
        _inspectedSpecification = null;
        _parameterName = null;
        _assetName = null;
        _sortedComponents = null;
        _assetNames = null;
        _formalParameterNames = null;
        _informalParameterNames = null;
        _sortedPropertyNames = null;
        _propertyName = null;
        _beanNames = null;
        _beanName = null;
        _beanSpecification = null;
    }

    /**
     * Gets the inspected component and specification from the {@link Inspector} page.
     * 
     * @since 1.0.5
     */

    public void pageBeginRender(PageEvent event)
    {
        Inspector inspector = (Inspector) getPage();

        _inspectedComponent = inspector.getInspectedComponent();
        _inspectedSpecification = _inspectedComponent.getSpecification();
    }

    public IComponent getInspectedComponent()
    {
        return _inspectedComponent;
    }

    public IComponentSpecification getInspectedSpecification()
    {
        return _inspectedSpecification;
    }

    /**
     * Returns a sorted list of formal parameter names.
     */

    public List getFormalParameterNames()
    {
        if (_formalParameterNames == null)
            _formalParameterNames = sort(_inspectedSpecification.getParameterNames());

        return _formalParameterNames;
    }

    /**
     * Returns a sorted list of informal parameter names. This is the list of all bindings, with the
     * list of parameter names removed, sorted.
     */

    public List getInformalParameterNames()
    {
        if (_informalParameterNames != null)
            return _informalParameterNames;

        Collection names = _inspectedComponent.getBindingNames();
        if (names != null && names.size() > 0)
        {
            _informalParameterNames = new ArrayList(names);

            // Remove the names of any formal parameters. This leaves
            // just the names of informal parameters (informal parameters
            // are any parameters/bindings that don't match a formal parameter
            // name).

            names = _inspectedSpecification.getParameterNames();
            if (names != null)
                _informalParameterNames.removeAll(names);

            Collections.sort(_informalParameterNames);
        }

        return _informalParameterNames;
    }

    public String getParameterName()
    {
        return _parameterName;
    }

    public void setParameterName(String value)
    {
        _parameterName = value;
    }

    /**
     * Returns the {@link org.apache.tapestry.spec.ParameterSpecification} corresponding to the
     * value of the parameterName property.
     */

    public IParameterSpecification getParameterSpecification()
    {
        return _inspectedSpecification.getParameter(_parameterName);
    }

    /**
     * Returns the {@link IBinding} corresponding to the value of the parameterName property.
     */

    public IBinding getBinding()
    {
        return _inspectedComponent.getBinding(_parameterName);
    }

    public void setAssetName(String value)
    {
        _assetName = value;
    }

    public String getAssetName()
    {
        return _assetName;
    }

    /**
     * Returns the {@link IAsset} corresponding to the value of the assetName property.
     */

    public IAsset getAsset()
    {
        return (IAsset) _inspectedComponent.getAssets().get(_assetName);
    }

    /**
     * Returns a sorted list of asset names, or null if the component contains no assets.
     */

    public List getAssetNames()
    {
        if (_assetNames == null)
            _assetNames = sort(_inspectedComponent.getAssets().keySet());

        return _assetNames;
    }

    public List getSortedComponents()
    {
        if (_sortedComponents != null)
            return _sortedComponents;

        Inspector inspector = (Inspector) getPage();
        IComponent inspectedComponent = inspector.getInspectedComponent();

        // Get a Map of the components and simply return null if there
        // are none.

        Map components = inspectedComponent.getComponents();

        _sortedComponents = new ArrayList(components.values());

        Collections.sort(_sortedComponents, new ComponentComparitor());

        return _sortedComponents;
    }

    public abstract void setCurrentComponent(IComponent value);

    public abstract IComponent getCurrentComponent();

    /**
     * Returns a list of the properties for the component (from its specification), or null if the
     * component has no properties.
     */

    public List getSortedPropertyNames()
    {
        if (_sortedPropertyNames == null)
            _sortedPropertyNames = sort(_inspectedSpecification.getPropertyNames());

        return _sortedPropertyNames;
    }

    public void setPropertyName(String value)
    {
        _propertyName = value;
    }

    public String getPropertyName()
    {
        return _propertyName;
    }

    public String getPropertyValue()
    {
        return _inspectedSpecification.getProperty(_propertyName);
    }

    public List getBeanNames()
    {
        if (_beanNames == null)
            _beanNames = sort(_inspectedSpecification.getBeanNames());

        return _beanNames;
    }

    public void setBeanName(String value)
    {
        _beanName = value;
        _beanSpecification = _inspectedSpecification.getBeanSpecification(_beanName);
    }

    public String getBeanName()
    {
        return _beanName;
    }

    public IBeanSpecification getBeanSpecification()
    {
        return _beanSpecification;
    }

    private List sort(Collection c)
    {
        if (c == null || c.size() == 0)
            return null;

        List result = new ArrayList(c);

        Collections.sort(result);

        return result;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy