| /******************************************************************************* |
| * Copyright (c) 2006 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: |
| * Gerry Kessler/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| package org.eclipse.jst.jsf.taglibprocessing.attributevalues; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jdt.core.Signature; |
| import org.eclipse.jst.jsf.common.internal.types.CompositeType; |
| import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor; |
| import org.eclipse.jst.jsf.metadataprocessors.features.ELIsNotValidException; |
| import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue; |
| import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues; |
| import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues; |
| import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues; |
| import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage; |
| |
| /** |
| * Abstract meta-data processing type representing an enumeration attribute value runtime type |
| * |
| * <p><b>Provisional API - subject to change</b></p> |
| * @author Gerry Kessler - Oracle |
| */ |
| public abstract class EnumerationType extends AbstractRootTypeDescriptor implements IValidValues, IDefaultValue, IValidELValues{ |
| private List validationMessages; |
| |
| /** |
| * An empty list |
| */ |
| protected static List EMPTY_LIST = new ArrayList(0); |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.metadataprocessors.features.IValidValues#getValidationMessages() |
| */ |
| public List getValidationMessages() { |
| if (validationMessages == null){ |
| validationMessages = new ArrayList(); |
| } |
| return validationMessages; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue#getDefaultValue() |
| */ |
| public String getDefaultValue() { |
| return getTraitValueAsString(IDefaultValue.DEFAULT_VALUE_PROP_NAME); |
| } |
| |
| /** |
| * @return possible values of type as list of Strings using |
| * {@link IPossibleValues}.POSSIBLE_VALUES_PROP_NAME trait name |
| */ |
| protected List getMDPossibleValues() { |
| return getTraitValueAsListOfStrings(IPossibleValues.POSSIBLE_VALUES_PROP_NAME); |
| } |
| |
| /** |
| * @return possible values of type to dislay as list of Strings using |
| * {@link IPossibleValues}.POSSIBLE_VALUES_FOR_DISPLAY_PROP_NAME trait name |
| */ |
| protected List getMDPossibleValuesForDisplay() { |
| return getTraitValueAsListOfStrings(IPossibleValues.POSSIBLE_VALUES_FOR_DISPLAY_PROP_NAME); |
| } |
| |
| /** |
| * @return list of valid values as list of Strings using |
| * {@link IValidValues}.VALID_VALUES_PROP_NAME trait name |
| */ |
| protected List getMDValidValues() { |
| return getTraitValueAsListOfStrings(IValidValues.VALID_VALUES_PROP_NAME); |
| } |
| |
| /** |
| * @return Validation message for type using |
| * {@link IValidValues}.VALID_VALUES_MESSAGE_PROP_NAME trait name |
| */ |
| protected String getMDValidationMessage() { |
| return getTraitValueAsString(IValidValues.VALID_VALUES_MESSAGE_PROP_NAME); |
| } |
| |
| /** |
| * @return Validation severity int value for type using |
| * {@link IValidValues}.VALID_VALUES_SEVERITY_PROP_NAME trait name |
| */ |
| protected int getMDValidationSeverity() { |
| String val = getTraitValueAsString(IValidValues.VALID_VALUES_SEVERITY_PROP_NAME); |
| if (val == null) |
| return IStatus.WARNING; |
| |
| int severity = Integer.valueOf(val).intValue(); |
| return severity; |
| } |
| |
| /** |
| * @return Validation code as String value for type using |
| * {@link IValidValues}.VALID_VALUES_CODE_PROP_NAME trait name |
| */ |
| protected String getMDValidationCode() { |
| return getTraitValueAsString(IValidValues.VALID_VALUES_CODE_PROP_NAME); |
| } |
| |
| /** |
| * Create a {@link ValidationMessage} from metadata or use default message |
| * and add it to the collection of validation messages |
| * @param defaultMsg |
| */ |
| protected void addNewValidationMessage(String defaultMsg) { |
| String msg = getMDValidationMessage(); |
| if (msg == null || msg.equals("")) //$NON-NLS-1$ |
| msg = defaultMsg; |
| |
| String code = getMDValidationCode(); |
| int severity = getMDValidationSeverity(); |
| ValidationMessage val = new ValidationMessage(msg, code, severity); |
| getValidationMessages().add(val); |
| } |
| |
| /** |
| * @return return Java type as string (i.e. boolean, java.lang.String, etc.) |
| * Must not be null. |
| */ |
| protected abstract String getReturnType(); |
| |
| /** |
| * @return the value of {@link org.eclipse.jst.jsf.common.internal.types.IAssignable}.ASSIGNMENT_TYPE_NONE. Subclasses to override. |
| */ |
| protected int getAssignmentType(){ |
| return 0; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues#getExpectedRuntimeType() |
| */ |
| public CompositeType getExpectedRuntimeType() throws ELIsNotValidException { |
| String type = Signature.createTypeSignature(getReturnType(), true); |
| return new CompositeType(type, getAssignmentType()); |
| } |
| } |