| /******************************************************************************* |
| * Copyright (c) 2001, 2007 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.validation.internal.appconfig; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector; |
| import org.eclipse.jst.jsf.common.util.JDTBeanProperty; |
| import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage; |
| import org.eclipse.jst.jsf.facesconfig.emf.PropertyNameType; |
| |
| /** |
| * Validates property's |
| * |
| */ |
| public class PropertyValidationVisitor extends EObjectValidationVisitor |
| { |
| private final EStructuralFeature _parentClassName; |
| |
| /** |
| * @param feature |
| * @param parentClassName |
| * @param version |
| */ |
| public PropertyValidationVisitor(EStructuralFeature feature, EStructuralFeature parentClassName, String version) { |
| // this validator can be attached to numerous parents so it |
| // cannot hard-code its feature |
| super(feature,version); |
| _parentClassName = parentClassName; |
| } |
| |
| protected void doValidate(EObject object, List messages, IFile file) { |
| // validate the class type here because we need knowledge |
| // of the property name to do it |
| //TODO: |
| // final PropertyType property = (PropertyType) object; |
| // final String propertyClass = |
| // property.getPropertyClass().getTextContent(); |
| // final String propertySignature = |
| // validateProperty(property.getPropertyName() |
| // , file.getProject(), _parentClassType); |
| // |
| // if (propertySignature != null |
| // && Signature.) |
| // { |
| // Signature.create |
| // } |
| } |
| |
| protected EObjectValidationVisitor[] getChildNodeValidators() { |
| return new EObjectValidationVisitor[] |
| { |
| new PropertyNameValidationVisitor(FacesConfigPackage.eINSTANCE.getPropertyType_PropertyName(), |
| _parentClassName, getVersion()) |
| }; |
| } |
| |
| static String validateProperty(PropertyNameType object, IProject project, String parentClassType) |
| { |
| String signatureBeanProperty = null; |
| try |
| { |
| IJavaProject javaProject = JavaCore.create(project); |
| IType type = javaProject.findType(parentClassType); |
| |
| if (type != null) |
| { |
| final JDTBeanIntrospector introspector = |
| new JDTBeanIntrospector(type); |
| |
| final Map properties = introspector.getProperties(); |
| |
| final String propertyName = object.getTextContent(); |
| if (properties.containsKey(propertyName)) |
| { |
| final JDTBeanProperty beanProperty = |
| (JDTBeanProperty) properties.get(propertyName); |
| signatureBeanProperty = |
| beanProperty.getTypeSignature(); |
| } |
| } |
| } |
| catch(JavaModelException jme) |
| { |
| JSFCorePlugin |
| .log(new Exception(jme), |
| "Problem validating on parent: "+parentClassType); |
| } |
| |
| return signatureBeanProperty; |
| } |
| } |