blob: 73818099d501a4beea5e098b7f9e7a60e236c037 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.ui.internal.component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo.ComponentBeanProperty;
import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ComponentDecorator;
import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.FacetDecorator;
import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
import org.eclipse.jst.jsf.common.ui.internal.form.AbstractXMLSectionsDetailsForm;
import org.eclipse.jst.jsf.ui.internal.common.ViewObjectPresenter;
import org.eclipse.jst.jsf.ui.internal.common.ViewObjectPresenter.TitleValuePair;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
/**
* Detail section for a component instance.
*
* @author cbateman
*
*/
/* package */class ComponentInstanceDetailsForm extends
AbstractXMLSectionsDetailsForm
{
private static final String COMPONENT_SECTION_KEY = "componentSection"; //$NON-NLS-1$
private final static String COMPONENT_TYPE_SECTION_KEY = "componentTypeSection"; //$NON-NLS-1$
private static final String COMPONENT_INTERFACES_KEY = "componentInterfacesSection"; //$NON-NLS-1$
private static final String COMPONENT_DECORATORS_KEY = "componentDecorators"; //$NON-NLS-1$
private static final String COMPONENT_PROPERTIES_KEY = "componentProperties"; //$NON-NLS-1$
private final LabelProvider _labelProvider = new MyLabelProvider();
private XMLTextSection _componentTypeSection;
private XMLTextSection _componentSection;
private XMLTextSection _componentInterfacesSection;
private XMLTextSection _componentDecoratorsSection;
private XMLTextSection _componentPropertiesSection;
@Override
protected void doUpdateSelection(final Object newSelection)
{
if (newSelection instanceof ComponentInfo)
{
final ComponentInfo compInfo = (ComponentInfo) newSelection;
updateComponentSection(compInfo);
updateComponentDecoratorsSection(compInfo);
updateComponentPropertiesSection(compInfo);
final ComponentTypeInfo typeInfo = compInfo.getComponentTypeInfo();
if (typeInfo != null)
{
updateComponentTypeSection(typeInfo);
updateComponentInterfacesSection(compInfo, typeInfo);
}
}
}
private void updateComponentSection(final ComponentInfo compInfo)
{
final String formatText = "<form>%s</form>"; //$NON-NLS-1$
final String className = compInfo.getComponentTypeInfo().getClassName();
final String id = compInfo.getId();
final ComponentInfo parent = compInfo.getParent();
final List<TitleValuePair> values = new ArrayList<TitleValuePair>();
values.add(new TitleValuePair(Messages.ComponentInstanceDetailsForm_Name, className != null ? Signature
.getSimpleName(className) : "")); //$NON-NLS-1$
values.add(new TitleValuePair(Messages.ComponentInstanceDetailsForm_Id, id != null ? id : Messages.ComponentInstanceDetailsForm_None));
values
.add(new TitleValuePair(Messages.ComponentInstanceDetailsForm_ParentId, (parent != null && parent.getId() != null)
? parent.getId()
: Messages.ComponentInstanceDetailsForm_None));
_componentSection.setText(String
.format(formatText, ViewObjectPresenter.createLines(values)), true, false);
_componentSection.refresh();
}
private void updateComponentTypeSection(final ComponentTypeInfo typeInfo)
{
_componentTypeSection.setText(ViewObjectPresenter.present(typeInfo),
true, false);
_componentTypeSection.refresh();
}
private void updateComponentInterfacesSection(final ComponentInfo compInfo,
final ComponentTypeInfo typeInfo)
{
_componentInterfacesSection.setText(ViewObjectPresenter
.presentCompInterfaces(typeInfo, compInfo), true, false);
_componentInterfacesSection.refresh();
}
private void updateComponentDecoratorsSection(final ComponentInfo compInfo)
{
List<TitleValuePair> decoratorLines = new ArrayList<TitleValuePair>();
String text = ""; //$NON-NLS-1$
for (final ComponentDecorator decorator : (List<ComponentDecorator>) compInfo
.getAllDecorators())
{
String labelText = _labelProvider.getText(decorator);
if (labelText != null)
{
//text += ViewObjectPresenter.createLine(null, labelText);
decoratorLines.add(new TitleValuePair(null, labelText));
}
}
Collections.sort(decoratorLines);
text = ViewObjectPresenter.createLines(decoratorLines);
_componentDecoratorsSection.setText(String.format("<form>%s</form>", //$NON-NLS-1$
text), true, false);
_componentDecoratorsSection.refresh();
}
private void updateComponentPropertiesSection(final ComponentInfo compInfo)
{
List<TitleValuePair> propertyLines = new ArrayList<TitleValuePair>();
String text = ""; //$NON-NLS-1$
Set<String> propNames = compInfo.getAttributeNames();
for (final String propName : propNames)
{
final ComponentBeanProperty propValue = compInfo
.getAttribute(propName);
if (propValue != null)
{
Object value = propValue.getValue();
if (value != null)
{
propertyLines.add(new TitleValuePair(propName, value.toString()));
}
}
}
Collections.sort(propertyLines);
text = ViewObjectPresenter.createLines(propertyLines);
_componentPropertiesSection.setText(String.format("<form>%s</form>", //$NON-NLS-1$
text), true, false);
_componentPropertiesSection.refresh();
}
@Override
protected Map<? extends Object, XMLTextSection> createXMLTextSections(
final Composite parent)
{
final Map<String, XMLTextSection> sections = new HashMap<String, XMLTextSection>();
_componentSection = new XMLTextSection(getToolkit(), parent,
Messages.ComponentInstanceDetailsForm_InstanceInfo);
sections.put(COMPONENT_SECTION_KEY, _componentSection);
_componentTypeSection = new XMLTextSection(getToolkit(), parent,
Messages.ComponentInstanceDetailsForm_TypeInstanceInfo);
sections.put(COMPONENT_TYPE_SECTION_KEY, _componentTypeSection);
_componentInterfacesSection = new XMLTextSection(getToolkit(), parent,
Messages.ComponentInstanceDetailsForm_Interfaces);
sections.put(COMPONENT_INTERFACES_KEY, _componentInterfacesSection);
_componentDecoratorsSection = new XMLTextSection(getToolkit(), parent,
Messages.ComponentInstanceDetailsForm_Decorators);
sections.put(COMPONENT_DECORATORS_KEY, _componentDecoratorsSection);
_componentPropertiesSection = new XMLTextSection(getToolkit(), parent,
Messages.ComponentInstanceDetailsForm_Properties);
sections.put(COMPONENT_PROPERTIES_KEY, _componentPropertiesSection);
return sections;
}
@Override
protected Set<XMLTextSection> getInitiallyExpanded(
final Map<Object, XMLTextSection> sections)
{
return Collections.singleton(_componentSection);
}
private static class MyLabelProvider extends LabelProvider
{
@Override
public String getText(Object element)
{
if (element instanceof ComponentDecorator)
{
if (element instanceof ConverterDecorator)
{
final ConverterDecorator converter = (ConverterDecorator) element;
return NLS.bind(Messages.ComponentInstanceDetailsForm_Converter, converter.getTypeInfo().getConverterId(), converter.getTypeInfo().getClassName());
}
else if (element instanceof ValidatorDecorator)
{
final ValidatorDecorator validator = (ValidatorDecorator) element;
return NLS.bind(Messages.ComponentInstanceDetailsForm_Validator, validator.getTypeInfo().getValidatorId(), validator.getTypeInfo().getClassName());
}
else if (element instanceof FacetDecorator)
{
final FacetDecorator decorator = (FacetDecorator) element;
return NLS.bind(Messages.ComponentInstanceDetailsForm_Facet, decorator.getName(), decorator.getDecorates().getId());
}
}
return null;
}
}
}