/******************************************************************************* * Copyright (c) 2008 Oracle Corporation. * 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: * Cameron Bateman - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsf.designtime.internal.view.model.jsp; import java.util.HashMap; import java.util.Map; import org.eclipse.jst.jsf.common.dom.TagIdentifier; import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ComponentPropertyHandler; import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagAttribute; import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagAttributeHandler; import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.TagAttributeHandler; import org.eclipse.jst.jsf.designtime.internal.view.mapping.ViewMetadataLoader; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.AttributeToPropertyMapping; import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDAttributeDeclaration; import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration; import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; /* package */class MetadataAttributeAdvisor implements IAttributeAdvisor { private final TagIdentifier _tagId; private final ViewMetadataLoader _loader; private final TLDElementDeclaration _tldElement; public MetadataAttributeAdvisor(final TagIdentifier tagId, final ViewMetadataLoader loader, TLDElementDeclaration tldElement) { _tagId = tagId; _loader = loader; _tldElement = tldElement; } public ITagAttributeHandler createAttributeHandler(final String name) throws UnknownAttributeException { final AttributeToPropertyMapping mapping = _loader.getAttributeMapping( _tagId, name); if (mapping != null) { final String customHandler = mapping.getCustomConversionFactoryId(); final boolean isELAllowed = mapping.isElAllowed(); final String propertyName = mapping.getPropertyName(); if (propertyName != null) { return new ComponentPropertyHandler(customHandler, name, isELAllowed, propertyName); } return new TagAttributeHandler(customHandler, name, isELAllowed); } return new TagAttributeHandler(null, name, false); } public Map<String, ? extends ITagAttribute> getAttributes() { final Map<String, TLDTagAttribute> attributes = new HashMap<String, TLDTagAttribute>(); for (int i = 0; i < _tldElement.getAttributes().getLength(); i++) { CMNode item = _tldElement.getAttributes().item(i); if (item instanceof TLDAttributeDeclaration) { TLDTagAttribute attr = new TLDTagAttribute((TLDAttributeDeclaration) item); attributes.put(attr.getName(), attr); } } return attributes; } }