| /******************************************************************************* |
| * Copyright (c) 2005 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: |
| * Ian Trimble - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.core.jsfappconfig; |
| |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.jst.jsf.facesconfig.emf.ComponentClassType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ComponentType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ComponentTypeType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ConverterClassType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ConverterForClassType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ConverterIdType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ConverterType; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigFactory; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ValidatorClassType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ValidatorIdType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ValidatorType; |
| |
| /** |
| * ImplicitRuntimeJSFAppConfigProvider provides an application configuration |
| * model that contains implicit configuration objects provided by a JSF |
| * implementation at runtime. |
| * |
| * <p><b>Provisional API - subject to change</b></p> |
| * |
| * @author Ian Trimble - Oracle |
| */ |
| public class ImplicitRuntimeJSFAppConfigProvider extends AbstractJSFAppConfigProvider { |
| |
| /** |
| * Cached {@link FacesConfigType} instance. |
| */ |
| protected FacesConfigType facesConfig = null; |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.core.jsfappconfig.IJSFAppConfigProvider#getFacesConfigModel() |
| */ |
| public FacesConfigType getFacesConfigModel() { |
| if (facesConfig == null) { |
| createModel(); |
| if (facesConfig != null) { |
| jsfAppConfigLocater.getJSFAppConfigManager().addFacesConfigChangeAdapter(facesConfig); |
| } |
| } |
| return facesConfig; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.core.jsfappconfig.IJSFAppConfigProvider#releaseFacesConfigModel() |
| */ |
| public void releaseFacesConfigModel() { |
| jsfAppConfigLocater.getJSFAppConfigManager().removeFacesConfigChangeAdapter(facesConfig); |
| facesConfig = null; |
| } |
| |
| /** |
| * Creates the application configuration model and assigns it to the |
| * facesConfig property. |
| */ |
| protected void createModel() { |
| facesConfig = FacesConfigFactory.eINSTANCE.createFacesConfigType(); |
| //create and add converters by id |
| EList converters = facesConfig.getConverter(); |
| converters.add(createConverter("BigDecimal")); //$NON-NLS-1$ |
| converters.add(createConverter("BigInteger")); //$NON-NLS-1$ |
| converters.add(createConverter("Boolean")); //$NON-NLS-1$ |
| converters.add(createConverter("Byte")); //$NON-NLS-1$ |
| converters.add(createConverter("Character")); //$NON-NLS-1$ |
| converters.add(createConverter("DateTime")); //$NON-NLS-1$ |
| converters.add(createConverter("Double")); //$NON-NLS-1$ |
| converters.add(createConverter("Float")); //$NON-NLS-1$ |
| converters.add(createConverter("Integer")); //$NON-NLS-1$ |
| converters.add(createConverter("Long")); //$NON-NLS-1$ |
| converters.add(createConverter("Number")); //$NON-NLS-1$ |
| converters.add(createConverter("Short")); //$NON-NLS-1$ |
| // converters by for-class (see spec 3.3.3 -- Standard Converter Implementions |
| converters.add(createForClassConverter("java.lang.Boolean", "javax.faces.convert.BooleanConverter")); |
| converters.add(createForClassConverter("java.lang.Byte", "javax.faces.convert.ByteConverter")); |
| converters.add(createForClassConverter("java.lang.Character", "javax.faces.convert.CharacterConverter")); |
| converters.add(createForClassConverter("java.lang.Double", "javax.faces.convert.DoubleConverter")); |
| converters.add(createForClassConverter("java.lang.Float", "javax.faces.convert.FloatConverter")); |
| converters.add(createForClassConverter("java.lang.Integer", "javax.faces.convert.IntegerConverter")); |
| converters.add(createForClassConverter("java.lang.Long", "javax.faces.convert.LongConverter")); |
| converters.add(createForClassConverter("java.lang.Short", "javax.faces.converter.ShortConverter")); |
| //create and add validators |
| EList validators = facesConfig.getValidator(); |
| validators.add(createValidator("DoubleRange")); //$NON-NLS-1$ |
| validators.add(createValidator("Length")); //$NON-NLS-1$ |
| validators.add(createValidator("LongRange")); //$NON-NLS-1$ |
| //create and add UI components |
| EList components = facesConfig.getComponent(); |
| components.add(createUIComponent("Column")); //$NON-NLS-1$ |
| components.add(createUIComponent("Command")); //$NON-NLS-1$ |
| components.add(createUIComponent("Data")); //$NON-NLS-1$ |
| components.add(createUIComponent("Form")); //$NON-NLS-1$ |
| components.add(createUIComponent("Graphic")); //$NON-NLS-1$ |
| components.add(createUIComponent("Input")); //$NON-NLS-1$ |
| components.add(createUIComponent("Message")); //$NON-NLS-1$ |
| components.add(createUIComponent("Messages")); //$NON-NLS-1$ |
| components.add(createUIComponent("NamingContainer")); //$NON-NLS-1$ |
| components.add(createUIComponent("Output")); //$NON-NLS-1$ |
| components.add(createUIComponent("Panel")); //$NON-NLS-1$ |
| components.add(createUIComponent("Parameter")); //$NON-NLS-1$ |
| components.add(createUIComponent("SelectBoolean")); //$NON-NLS-1$ |
| components.add(createUIComponent("SelectItem")); //$NON-NLS-1$ |
| components.add(createUIComponent("SelectItems")); //$NON-NLS-1$ |
| components.add(createUIComponent("SelectMany")); //$NON-NLS-1$ |
| components.add(createUIComponent("SelectOne")); //$NON-NLS-1$ |
| components.add(createUIComponent("ViewRoot")); //$NON-NLS-1$ |
| //create and add HTML components |
| components.add(createHTMLComponent("HtmlCommandButton")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlCommandLink")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlDataTable")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlForm")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlGraphicImage")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlInputHidden")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlInputSecret")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlInputText")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlInputTextarea")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlMessage")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlMessages")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlOutputFormat")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlOutputLabel")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlOutputLink")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlOutputText")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlPanelGrid")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlPanelGroup")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectBooleanCheckbox")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectManyCheckbox")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectManyListbox")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectManyMenu")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectOneListbox")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectOneMenu")); //$NON-NLS-1$ |
| components.add(createHTMLComponent("HtmlSelectOneRadio")); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Creates a {@link ConverterType} instance. |
| * |
| * @param name Base name of converter from which converter-id and |
| * converter-class are formed. |
| * @return {@link ConverterType} instance. |
| */ |
| protected ConverterType createConverter(String name) { |
| ConverterType converterType = FacesConfigFactory.eINSTANCE.createConverterType(); |
| //set converter-id |
| ConverterIdType converterIdType = FacesConfigFactory.eINSTANCE.createConverterIdType(); |
| StringBuffer sb = new StringBuffer(); |
| sb.append("javax.faces."); //$NON-NLS-1$ |
| sb.append(name); |
| converterIdType.setTextContent(sb.toString()); |
| converterType.setConverterId(converterIdType); |
| //set converter-class |
| ConverterClassType converterClassType = FacesConfigFactory.eINSTANCE.createConverterClassType(); |
| sb = new StringBuffer(); |
| sb.append("javax.faces.convert."); //$NON-NLS-1$ |
| sb.append(name); |
| sb.append("Converter"); //$NON-NLS-1$ |
| converterClassType.setTextContent(sb.toString()); |
| converterType.setConverterClass(converterClassType); |
| return converterType; |
| } |
| |
| private ConverterType createForClassConverter(String forClass, String converterClass) |
| { |
| ConverterType converterType = FacesConfigFactory.eINSTANCE.createConverterType(); |
| //set converter-id |
| ConverterForClassType converterForClass = FacesConfigFactory.eINSTANCE.createConverterForClassType(); |
| converterForClass.setTextContent(forClass); |
| converterType.setConverterForClass(converterForClass); |
| //set converter-class |
| ConverterClassType converterClassType = FacesConfigFactory.eINSTANCE.createConverterClassType(); |
| converterClassType.setTextContent(converterClass); |
| converterType.setConverterClass(converterClassType); |
| return converterType; |
| } |
| |
| /** |
| * Creates a {@link ValidatorType} instance. |
| * |
| * @param name Base name of validator from which validator-id and |
| * validator-class are formed. |
| * @return {@link ValidatorType} instance. |
| */ |
| protected ValidatorType createValidator(String name) { |
| ValidatorType validatorType = FacesConfigFactory.eINSTANCE.createValidatorType(); |
| //set validator-id |
| ValidatorIdType validatorIdType = FacesConfigFactory.eINSTANCE.createValidatorIdType(); |
| StringBuffer sb = new StringBuffer(); |
| sb.append("javax.faces."); //$NON-NLS-1$ |
| sb.append(name); |
| validatorIdType.setTextContent(sb.toString()); |
| validatorType.setValidatorId(validatorIdType); |
| //set validator-class |
| ValidatorClassType validatorClassType = FacesConfigFactory.eINSTANCE.createValidatorClassType(); |
| sb = new StringBuffer(); |
| sb.append("javax.faces.validator."); //$NON-NLS-1$ |
| sb.append(name); |
| sb.append("Validator"); //$NON-NLS-1$ |
| validatorClassType.setTextContent(sb.toString()); |
| validatorType.setValidatorClass(validatorClassType); |
| return validatorType; |
| } |
| |
| /** |
| * Creates a {@link ComponentType} instance to represent a standard UI |
| * component. |
| * |
| * @param name Base name of component from which component-type and |
| * component-class are formed. |
| * @return {@link ComponentType} instance. |
| */ |
| protected ComponentType createUIComponent(String name) { |
| ComponentType componentType = FacesConfigFactory.eINSTANCE.createComponentType(); |
| //set component-type |
| ComponentTypeType componentTypeType = FacesConfigFactory.eINSTANCE.createComponentTypeType(); |
| StringBuffer sb = new StringBuffer(); |
| sb.append("javax.faces."); //$NON-NLS-1$ |
| sb.append(name); |
| componentTypeType.setTextContent(sb.toString()); |
| componentType.setComponentType(componentTypeType); |
| //set component-class |
| ComponentClassType componentClassType = FacesConfigFactory.eINSTANCE.createComponentClassType(); |
| sb = new StringBuffer(); |
| sb.append("javax.faces.component.UI"); //$NON-NLS-1$ |
| sb.append(name); |
| componentClassType.setTextContent(sb.toString()); |
| componentType.setComponentClass(componentClassType); |
| return componentType; |
| } |
| |
| /** |
| * Creates a {@link ComponentType} instance to represent a concrete HTML |
| * component. |
| * |
| * @param name Base name of component from which component-type and |
| * component-class are formed. |
| * @return {@link ComponentType} instance. |
| */ |
| protected ComponentType createHTMLComponent(String name) { |
| ComponentType componentType = FacesConfigFactory.eINSTANCE.createComponentType(); |
| //set component-type |
| ComponentTypeType componentTypeType = FacesConfigFactory.eINSTANCE.createComponentTypeType(); |
| StringBuffer sb = new StringBuffer(); |
| sb.append("javax.faces."); //$NON-NLS-1$ |
| sb.append(name); |
| componentTypeType.setTextContent(sb.toString()); |
| componentType.setComponentType(componentTypeType); |
| //set component-class |
| ComponentClassType componentClassType = FacesConfigFactory.eINSTANCE.createComponentClassType(); |
| sb = new StringBuffer(); |
| sb.append("javax.faces.component.html."); //$NON-NLS-1$ |
| sb.append(name); |
| componentClassType.setTextContent(sb.toString()); |
| componentType.setComponentClass(componentClassType); |
| return componentType; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see java.lang.Object#equals(java.lang.Object) |
| */ |
| public boolean equals(Object otherObject) { |
| boolean equals = false; |
| if (otherObject instanceof ImplicitRuntimeJSFAppConfigProvider) { |
| equals = true; |
| } |
| return equals; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see java.lang.Object#hashCode() |
| */ |
| public int hashCode() { |
| return ImplicitRuntimeJSFAppConfigProvider.class.getName().hashCode(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see java.lang.Object#toString() |
| */ |
| public String toString() { |
| return "ImplicitRuntimeJSFAppConfigProvider[]"; //$NON-NLS-1$ |
| } |
| |
| } |