package org.eclipse.jst.jsf.designtime.internal.view.mapping; import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo; import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo; import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo; import org.eclipse.jst.jsf.common.runtime.internal.model.types.ClassTypeInfo; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ClassTypeInfo_; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ComponentMappingFactory; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ComponentTypeInfo_; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ConverterTypeInfo_; import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ValidatorTypeInfo_; /** * Maps meta-data to and from common.runtime data. In future, we may eliminate * this class by making the EMF meta-data structures into the common.runtime * data. * * @author cbateman * */ public final class ViewMetadataMapper { /** * The default trait id where meta-data will annotated */ public final static String DEFAULT_MAPPING_TRAIT_ID = "viewElementMapping"; //$NON-NLS-1$ /** * The default trait id where meta-data will be annotated. */ public final static String DEFAULT_ATTRIBUTE_TRAIT_ID = "attributeMapping"; //$NON-NLS-1$ /** * @param classTypeInfo * @return a framework ClassTypeInfo equivalent to classTypeInfo or null if * none. */ public ClassTypeInfo mapToFrameworkData(final ClassTypeInfo_ classTypeInfo) { if (classTypeInfo instanceof ComponentTypeInfo_) { return createComponentTypeInfo_((ComponentTypeInfo_) classTypeInfo); } else if (classTypeInfo instanceof ConverterTypeInfo_) { return createConverterTypeInfo_((ConverterTypeInfo_) classTypeInfo); } else if (classTypeInfo instanceof ValidatorTypeInfo_) { return createValidatorTypeInfo_((ValidatorTypeInfo_) classTypeInfo); } return null; } private ClassTypeInfo createValidatorTypeInfo_( ValidatorTypeInfo_ classTypeInfo) { final String[] superClasses = classTypeInfo.getSuperClasses().toArray( new String[0]); final String[] interfaces = classTypeInfo.getInterfaces().toArray( new String[0]); if (classTypeInfo.getClassName()==null && classTypeInfo.getValidatorId() == null) { return ValidatorTypeInfo.UNKNOWN; } return new ValidatorTypeInfo(classTypeInfo.getClassName(), superClasses, interfaces, classTypeInfo.getValidatorId()); } private ClassTypeInfo createConverterTypeInfo_( ConverterTypeInfo_ classTypeInfo) { final String[] superClasses = classTypeInfo.getSuperClasses().toArray( new String[0]); final String[] interfaces = classTypeInfo.getInterfaces().toArray( new String[0]); if (classTypeInfo.getClassName() == null && classTypeInfo.getConverterId() == null) { return ConverterTypeInfo.UNKNOWN; } final String[] forClasses = classTypeInfo.getForClasses().toArray( new String[0]); return new ConverterTypeInfo(classTypeInfo.getClassName(), superClasses, interfaces, classTypeInfo.getConverterId(), forClasses); } private ClassTypeInfo createComponentTypeInfo_( ComponentTypeInfo_ classTypeInfo) { final String[] superClasses = classTypeInfo.getSuperClasses().toArray( new String[0]); final String[] interfaces = classTypeInfo.getInterfaces().toArray( new String[0]); return new ComponentTypeInfo(classTypeInfo.getComponentType(), classTypeInfo.getClassName(), superClasses, interfaces, classTypeInfo.getComponentFamily(), classTypeInfo .getRenderType()); } /** * @param classTypeInfo * @return a metadata type info matching classTypeInfo or null if * classTypeInfo isn't of a supported concrete type. */ public ClassTypeInfo_ mapToMetadata(final ClassTypeInfo classTypeInfo) { if (classTypeInfo instanceof ComponentTypeInfo) { return createComponentTypeInfo((ComponentTypeInfo) classTypeInfo); } else if (classTypeInfo instanceof ConverterTypeInfo) { return createConverterTypeInfo((ConverterTypeInfo) classTypeInfo); } else if (classTypeInfo instanceof ValidatorTypeInfo) { return createValidatorTypeInfo((ValidatorTypeInfo) classTypeInfo); } return null; } private ClassTypeInfo_ createComponentTypeInfo( final ComponentTypeInfo typeInfo) { final ComponentTypeInfo_ metadata = ComponentMappingFactory.eINSTANCE .createComponentTypeInfo_(); metadata.setComponentFamily(typeInfo.getComponentFamily()); metadata.setComponentType(typeInfo.getComponentType()); metadata.setRenderType(typeInfo.getRenderFamily()); copy(typeInfo, metadata); return metadata; } private ClassTypeInfo_ createConverterTypeInfo( final ConverterTypeInfo typeInfo) { final ConverterTypeInfo_ metadata = ComponentMappingFactory.eINSTANCE .createConverterTypeInfo_(); copy(typeInfo, metadata); metadata.setConverterId(typeInfo.getConverterId()); return metadata; } private ClassTypeInfo_ createValidatorTypeInfo( final ValidatorTypeInfo typeInfo) { final ValidatorTypeInfo_ metadata = ComponentMappingFactory.eINSTANCE .createValidatorTypeInfo_(); copy(typeInfo, metadata); metadata.setValidatorId(typeInfo.getValidatorId()); return metadata; } private void copy(ClassTypeInfo source, ClassTypeInfo_ dest) { dest.setClassName(source.getClassName()); for (final String interfaze : source.getInterfaces()) { dest.getInterfaces().add(interfaze); } for (final String superClass : source.getSuperClasses()) { dest.getSuperClasses().add(superClass); } } }