org.apache.tapestry.contrib.inspector.ShowSpecification Maven / Gradle / Ivy
// 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