/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.extension.properties; import static org.teiid.designer.extension.ExtensionPlugin.Util; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import org.eclipse.core.runtime.IStatus; import org.eclipse.osgi.util.NLS; import org.teiid.core.designer.HashCodeUtil; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.core.designer.util.CoreStringUtil; import org.teiid.designer.extension.Messages; /** * The <code>ModelExtensionPropertyDefinitionImpl</code> is a default implementation of a model extension property definition. * * @since 8.0 */ public class ModelExtensionPropertyDefinitionImpl implements ModelExtensionPropertyDefinition { private boolean advanced = ADVANCED_DEFAULT; private Set<String> allowedValues; private String defaultValue; private Set<Translation> descriptions; private Set<Translation> displayNames; private String fixedValue; private boolean index = INDEX_DEFAULT; private CopyOnWriteArrayList<PropertyChangeListener> listeners; private boolean masked = MASKED_DEFAULT; private NamespaceProvider namespaceProvider; private boolean required = REQUIRED_DEFAULT; private String simpleId; private Type type = TYPE_DEFAULT; /** * @param namespacePrefixProvider the namespace provider (cannot be <code>null</code>) */ public ModelExtensionPropertyDefinitionImpl( NamespaceProvider namespacePrefixProvider ) { CoreArgCheck.isNotNull(namespacePrefixProvider, "namespaceProvider is null"); //$NON-NLS-1$ this.namespaceProvider = namespacePrefixProvider; this.listeners = new CopyOnWriteArrayList<PropertyChangeListener>(); this.allowedValues = new HashSet<String>(); this.descriptions = new HashSet<Translation>(); this.displayNames = new HashSet<Translation>(); } /** * @param namespaceProvider the namespace provider (cannot be <code>null</code>) * @param simpleId the property identifier without the namespace prefix (can be <code>null</code> or empty) * @param runtimeType the Teiid runtime type (can be <code>null</code> or empty). Default value is {@value org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition.Type#STRING}. * @param required <code>true</code> string if this property must have a value (can be <code>null</code> or empty). Default * value is {@value #REQUIRED_DEFAULT}. * @param defaultValue a default value (can be <code>null</code> or empty) * @param fixedValue a constant value, when non-<code>null</code> and non-empty, indicates the property value cannot be changed * (can be <code>null</code> or empty) * @param advanced <code>true</code> string if this property should only be shown to advances users (can be <code>null</code> or * empty). Default value is {@value #ADVANCED_DEFAULT}. * @param masked <code>true</code> string if this property value must be masked (can be <code>null</code> or empty). Default * value is {@value #MASKED_DEFAULT}. * @param index <code>true</code> string if this property should be indexed for use by the Teiid Instance (can be * <code>null</code> or empty). Default value is {@value #INDEX_DEFAULT}. * @param allowedValues the allowed property values (can be <code>null</code> or empty) * @param descriptions the one or more translations of the property description (can be <code>null</code> or empty) * @param displayNames the one or more translations of the property display name (can be <code>null</code> or empty) */ public ModelExtensionPropertyDefinitionImpl( NamespaceProvider namespaceProvider, String simpleId, String runtimeType, String required, String defaultValue, String fixedValue, String advanced, String masked, String index, Set<String> allowedValues, Set<Translation> descriptions, Set<Translation> displayNames ) { this(namespaceProvider); this.simpleId = simpleId; this.defaultValue = defaultValue; this.fixedValue = fixedValue; if (!CoreStringUtil.isEmpty(runtimeType)) { try { Type newType = ModelExtensionPropertyDefinition.Utils.convertRuntimeType(runtimeType); setType(newType); } catch (IllegalArgumentException e) { Util.log(e); } } if (!CoreStringUtil.isEmpty(required)) { this.required = Boolean.parseBoolean(required); } if (!CoreStringUtil.isEmpty(advanced)) { this.advanced = Boolean.parseBoolean(advanced); } if (!CoreStringUtil.isEmpty(masked)) { this.masked = Boolean.parseBoolean(masked); } if (!CoreStringUtil.isEmpty(index)) { this.index = Boolean.parseBoolean(index); } if (Type.BOOLEAN == this.type) { this.allowedValues.add(BOOLEAN_ALLOWED_VALUES[0]); this.allowedValues.add(BOOLEAN_ALLOWED_VALUES[1]); } if (descriptions != null) { this.descriptions.addAll(descriptions); } if (displayNames != null) { this.displayNames.addAll(displayNames); } if (allowedValues != null) { this.allowedValues.addAll(allowedValues); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#addAllowedValue(java.lang.String) */ @Override public boolean addAllowedValue( String newAllowedValue ) { CoreStringUtil.isEmpty(newAllowedValue); boolean added = this.allowedValues.add(newAllowedValue); if (added) { notifyChangeListeners(PropertyName.ALLOWED_VALUES, null, newAllowedValue); } return added; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#addDescription(org.teiid.designer.extension.properties.Translation) */ @Override public boolean addDescription( Translation newDescription ) { CoreArgCheck.isNotNull(newDescription, "newDescription is null"); //$NON-NLS-1$ boolean added = this.descriptions.add(newDescription); if (added) { notifyChangeListeners(PropertyName.DESCRIPTION, null, newDescription); } return added; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#addDisplayName(org.teiid.designer.extension.properties.Translation) */ @Override public boolean addDisplayName( Translation newDisplayName ) { CoreArgCheck.isNotNull(newDisplayName, "newDisplayName is null"); //$NON-NLS-1$ boolean added = this.displayNames.add(newDisplayName); if (added) { notifyChangeListeners(PropertyName.DISPLAY_NAME, null, newDisplayName); } return added; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#addListener(java.beans.PropertyChangeListener) */ @Override public boolean addListener( PropertyChangeListener newListener ) { CoreArgCheck.isNotNull(newListener, "newListener is null"); //$NON-NLS-1$ return this.listeners.addIfAbsent(newListener); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#allowedValues() */ @Override public Set<String> allowedValues() { return new HashSet<String>(this.allowedValues); } /* (non-Javadoc) * @see java.lang.Object#clone() */ @Override public Object clone() { try { ModelExtensionPropertyDefinitionImpl copy = (ModelExtensionPropertyDefinitionImpl)super.clone(); // no listeners copy.listeners = new CopyOnWriteArrayList<PropertyChangeListener>(); // deep copy of allowed values copy.allowedValues = new HashSet<String>(this.allowedValues); // deep copy of descriptions copy.descriptions = new HashSet<Translation>(); for (Translation description : this.descriptions) { copy.descriptions.add((Translation)description.clone()); } // deep copy of display names copy.displayNames = new HashSet<Translation>(this.displayNames); for (Translation description : this.descriptions) { copy.descriptions.add((Translation)description.clone()); } return copy; } catch (CloneNotSupportedException e) { throw new Error("should never happen"); //$NON-NLS-1$ } } /** * {@inheritDoc} * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals( Object obj ) { if (this == obj) { return true; } if ((obj == null) || (getClass() != obj.getClass())) { return false; } ModelExtensionPropertyDefinition that = (ModelExtensionPropertyDefinition)obj; // boolean properties if ((getType() != that.getType()) || (isAdvanced() != that.isAdvanced()) || (shouldBeIndexed() != that.shouldBeIndexed()) || (isMasked() != that.isMasked()) || (isRequired() != that.isRequired())) { return false; } // string properties if (!CoreStringUtil.valuesAreEqual(getSimpleId(), that.getSimpleId()) || !CoreStringUtil.valuesAreEqual(getId(), that.getId()) || !CoreStringUtil.valuesAreEqual(getFixedValue(), that.getFixedValue()) || !CoreStringUtil.valuesAreEqual(getDefaultValue(), that.getDefaultValue())) { return false; } // allowed values Set<String> thisValues = allowedValues(); Set<String> thatValues = that.allowedValues(); if (thisValues.size() != thatValues.size()) { return false; } if (!thisValues.isEmpty() && !thisValues.containsAll(thatValues)) { return false; } // descriptions Set<Translation> thisDescriptions = getDescriptions(); Set<Translation> thatDescriptions = that.getDescriptions(); if (thisDescriptions.size() != thatDescriptions.size()) { return false; } if (!thisDescriptions.isEmpty() && !thisDescriptions.containsAll(thatDescriptions)) { return false; } // display names Set<Translation> thisDisplayNames = getDisplayNames(); Set<Translation> thatDisplayNames = that.getDisplayNames(); if (thisDisplayNames.size() != thatDisplayNames.size()) { return false; } if (!thisDisplayNames.isEmpty() && !thisDisplayNames.containsAll(thatDisplayNames)) { return false; } return true; } private String findTranslationMatch( Set<Translation> translations ) { Locale defaultLocale = Locale.getDefault(); String defaultLanguage = defaultLocale.getLanguage(); String defaultCountry = defaultLocale.getCountry(); String languageCountryMatch = null; String languageMatch = null; for (Translation translation : translations) { Locale locale = translation.getLocale(); // return exact match if (defaultLocale.equals(translation.getLocale())) { return translation.getTranslation(); } // look for language and country match String language = locale.getLanguage(); String country = locale.getCountry(); if (CoreStringUtil.equals(defaultLanguage, language) && CoreStringUtil.equals(defaultCountry, country)) { languageCountryMatch = translation.getTranslation(); continue; } // look for language match if (CoreStringUtil.equals(defaultLanguage, language)) { languageMatch = translation.getTranslation(); } } return ((languageCountryMatch == null) ? languageMatch : languageCountryMatch); } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#getAllowedValues() */ @Override public String[] getAllowedValues() { return this.allowedValues.toArray(new String[this.allowedValues.size()]); } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#getDefaultValue() */ @Override public String getDefaultValue() { return this.defaultValue; } /** * {@inheritDoc} * * Obtains the localized description for the current locale. * * @see org.teiid.core.designer.properties.PropertyDefinition#getDescription() */ @Override public String getDescription() { return findTranslationMatch(this.descriptions); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getDescriptions() */ @Override public Set<Translation> getDescriptions() { return this.descriptions; } /** * {@inheritDoc} * * Obtains the localized display name for the current locale. If no translation is available then the property identifier is * returned. * * @see org.teiid.core.designer.properties.PropertyDefinition#getDisplayName() * @see #getId() */ @Override public String getDisplayName() { return findTranslationMatch(this.displayNames); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getDisplayNames() */ @Override public Set<Translation> getDisplayNames() { return this.displayNames; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getFixedValue() */ @Override public String getFixedValue() { return this.fixedValue; } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#getId() */ @Override public String getId() { return Utils.getPropertyId(this.namespaceProvider, this.simpleId); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getNamespaceProvider() */ @Override public NamespaceProvider getNamespaceProvider() { return this.namespaceProvider; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getRuntimeType() */ @Override public String getRuntimeType() { return ((this.type == null) ? null : this.type.getRuntimeType()); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getSimpleId() */ @Override public String getSimpleId() { return this.simpleId; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#getType() */ @Override public Type getType() { return this.type; } /** * {@inheritDoc} * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { int result = HashCodeUtil.hashCode(0, getType()); // boolean properties result = HashCodeUtil.hashCode(result, isAdvanced()); result = HashCodeUtil.hashCode(result, shouldBeIndexed()); result = HashCodeUtil.hashCode(result, isMasked()); result = HashCodeUtil.hashCode(result, isRequired()); // string properties if (!CoreStringUtil.isEmpty(getSimpleId())) { result = HashCodeUtil.hashCode(result, getSimpleId()); if (!CoreStringUtil.isEmpty(getId())) { result = HashCodeUtil.hashCode(result, getId()); } } if (!CoreStringUtil.isEmpty(getFixedValue())) { result = HashCodeUtil.hashCode(result, getFixedValue()); } if (!CoreStringUtil.isEmpty(getDefaultValue())) { result = HashCodeUtil.hashCode(result, getDefaultValue()); } // allowed values if (!allowedValues().isEmpty()) { List<String> sortedValues = new ArrayList<String>(allowedValues()); Collections.sort(sortedValues); for (String allowedValue : sortedValues) { result = HashCodeUtil.hashCode(result, allowedValue); } } // descriptions Set<Translation> translations = getDescriptions(); if (!translations.isEmpty()) { List<Translation> sortedDescriptions = new ArrayList<Translation>(translations); Collections.sort(sortedDescriptions); for (Translation description : sortedDescriptions) { result = HashCodeUtil.hashCode(result, description); } } // display names translations = getDisplayNames(); if (!translations.isEmpty()) { List<Translation> sortedDisplayNames = new ArrayList<Translation>(translations); Collections.sort(sortedDisplayNames); for (Translation description : sortedDisplayNames) { result = HashCodeUtil.hashCode(result, description); } } return result; } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#isAdvanced() */ @Override public boolean isAdvanced() { return this.advanced; } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#isMasked() */ @Override public boolean isMasked() { return this.masked; } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#isModifiable() */ @Override public boolean isModifiable() { return CoreStringUtil.isEmpty(this.fixedValue); } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#isRequired() */ @Override public boolean isRequired() { return this.required; } /** * {@inheritDoc} * * @see org.teiid.core.designer.properties.PropertyDefinition#isValidValue(java.lang.String) */ @Override public String isValidValue(String proposedValue) { return Utils.isValidValue(NLS.bind(Messages.propertyValue, getId()), this.type, proposedValue, this.required, getAllowedValues()); } /** * @param property the property that was changed (never <code>null</code>) * @param oldValue the old value (can be <code>null</code>) * @param newValue the new value (can be <code>null</code>) */ private void notifyChangeListeners( final PropertyName property, final Object oldValue, final Object newValue ) { PropertyChangeEvent event = new PropertyChangeEvent(this, property.toString(), oldValue, newValue); for (final Object listener : this.listeners.toArray()) { try { ((PropertyChangeListener)listener).propertyChange(event); } catch (Exception e) { Util.log(e); this.listeners.remove(listener); } } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#removeAllowedValue(java.lang.String) */ @Override public boolean removeAllowedValue( String allowedValueBeingRemoved ) { CoreStringUtil.isEmpty(allowedValueBeingRemoved); Object oldValue = allowedValueBeingRemoved; boolean removed = this.allowedValues.remove(allowedValueBeingRemoved); if (removed) { notifyChangeListeners(PropertyName.ALLOWED_VALUES, oldValue, null); } return removed; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#removeDescription(org.teiid.designer.extension.properties.Translation) */ @Override public boolean removeDescription( Translation descriptionBeingRemoved ) { CoreArgCheck.isNotNull(descriptionBeingRemoved, "description is null"); //$NON-NLS-1$ Object oldValue = descriptionBeingRemoved; boolean removed = this.descriptions.remove(descriptionBeingRemoved); if (removed) { notifyChangeListeners(PropertyName.DESCRIPTION, oldValue, null); } return removed; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#removeDisplayName(org.teiid.designer.extension.properties.Translation) */ @Override public boolean removeDisplayName( Translation displayNameBeingRemoved ) { CoreArgCheck.isNotNull(displayNameBeingRemoved, "displayName is null"); //$NON-NLS-1$ Object oldValue = displayNameBeingRemoved; boolean removed = this.displayNames.remove(displayNameBeingRemoved); if (removed) { notifyChangeListeners(PropertyName.DISPLAY_NAME, oldValue, null); } return removed; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#removeListener(java.beans.PropertyChangeListener) */ @Override public boolean removeListener( PropertyChangeListener listener ) { CoreArgCheck.isNotNull(listener, "listener is null"); //$NON-NLS-1$ return this.listeners.remove(listener); } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setAdvanced(boolean) */ @Override public void setAdvanced( boolean newAdvanced ) { if (this.advanced != newAdvanced) { this.advanced = newAdvanced; notifyChangeListeners(PropertyName.ADVANCED, !this.advanced, this.advanced); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setAllowedValues(java.util.Set) */ @Override public void setAllowedValues( Set<String> newAllowedValues ) { boolean clearAllowedValues = ((newAllowedValues == null) || newAllowedValues.isEmpty()); if (Type.BOOLEAN == this.type) { boolean error = false; if (clearAllowedValues || (BOOLEAN_ALLOWED_VALUES.length != newAllowedValues.size())) { error = true; } else { String[] booleanValues = newAllowedValues.toArray(new String[BOOLEAN_ALLOWED_VALUES.length]); if (CoreStringUtil.isEmpty(booleanValues[0]) || CoreStringUtil.isEmpty(booleanValues[1])) { error = true; } else if (!booleanValues[0].toLowerCase().equals(BOOLEAN_ALLOWED_VALUES[0].toLowerCase()) && !booleanValues[0].toLowerCase().equals(BOOLEAN_ALLOWED_VALUES[1].toLowerCase())) { error = true; } else if (!booleanValues[1].toLowerCase().equals(BOOLEAN_ALLOWED_VALUES[0].toLowerCase()) && !booleanValues[1].toLowerCase().equals(BOOLEAN_ALLOWED_VALUES[1].toLowerCase())) { error = true; } } if (error) { Util.log(IStatus.WARNING, NLS.bind(Messages.invalidBooleanAllowedValue, getId())); newAllowedValues = new HashSet<String>(2); newAllowedValues.add(BOOLEAN_ALLOWED_VALUES[0]); newAllowedValues.add(BOOLEAN_ALLOWED_VALUES[1]); } } boolean changed = false; if (this.allowedValues.isEmpty() && !clearAllowedValues) { changed = true; } else if (!this.allowedValues.isEmpty() && clearAllowedValues) { changed = true; } else if (this.allowedValues.size() != newAllowedValues.size()) { changed = true; } else { // sizes are the same so see if values have changed for (String value : this.allowedValues) { if (!newAllowedValues.contains(value)) { changed = true; break; } } } if (changed) { Object oldValue = new HashSet<String>(this.allowedValues); this.allowedValues.clear(); this.allowedValues.addAll(newAllowedValues); notifyChangeListeners(PropertyName.ALLOWED_VALUES, oldValue, this.allowedValues); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setDefaultValue(java.lang.String) */ @Override public void setDefaultValue( String newDefaultValue ) { if (!CoreStringUtil.valuesAreEqual(this.defaultValue, newDefaultValue)) { String oldValue = this.defaultValue; this.defaultValue = newDefaultValue; notifyChangeListeners(PropertyName.DEFAULT_VALUE, oldValue, this.defaultValue); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setDescriptions(java.util.Set) */ @Override public void setDescriptions( Set<Translation> newDescriptions ) { boolean changed = true; if ((newDescriptions != null) && (this.descriptions.size() == newDescriptions.size()) && this.descriptions.containsAll(newDescriptions)) { changed = false; } if (changed) { Object oldValue = new HashSet<Translation>(this.descriptions); this.descriptions.clear(); if (newDescriptions != null) { this.descriptions.addAll(newDescriptions); } notifyChangeListeners(PropertyName.DESCRIPTION, oldValue, this.descriptions); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setDisplayNames(java.util.Set) */ @Override public void setDisplayNames( Set<Translation> newDisplayNames ) { boolean changed = true; if ((newDisplayNames != null) && (this.displayNames.size() == newDisplayNames.size()) && this.displayNames.containsAll(newDisplayNames)) { changed = false; } if (changed) { Object oldValue = new HashSet<Translation>(this.displayNames); this.displayNames.clear(); if (newDisplayNames != null) { this.displayNames.addAll(newDisplayNames); } notifyChangeListeners(PropertyName.DISPLAY_NAME, oldValue, this.displayNames); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setFixedValue(java.lang.String) */ @Override public void setFixedValue( String newFixedValue ) { if (!CoreStringUtil.valuesAreEqual(this.fixedValue, newFixedValue)) { String oldValue = this.fixedValue; this.fixedValue = newFixedValue; notifyChangeListeners(PropertyName.FIXED_VALUE, oldValue, this.fixedValue); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setIndex(boolean) */ @Override public void setIndex( boolean newIndex ) { if (this.index != newIndex) { this.index = newIndex; notifyChangeListeners(PropertyName.INDEX, !this.index, this.index); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setMasked(boolean) */ @Override public void setMasked( boolean newMasked ) { if (this.masked != newMasked) { this.masked = newMasked; notifyChangeListeners(PropertyName.MASKED, !this.masked, this.masked); } } /** * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setNamespaceProvider(org.teiid.designer.extension.properties.NamespaceProvider) */ @Override public void setNamespaceProvider( NamespaceProvider newNamespaceProvider ) { CoreArgCheck.isNotNull(newNamespaceProvider, "newNamespaceProvider is null"); //$NON-NLS-1$ this.namespaceProvider = newNamespaceProvider; } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setRequired(boolean) */ @Override public void setRequired( boolean newRequired ) { if (this.required != newRequired) { this.required = newRequired; notifyChangeListeners(PropertyName.REQUIRED, !this.required, this.required); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setSimpleId(java.lang.String) */ @Override public void setSimpleId( String newSimpleId ) { if (!CoreStringUtil.valuesAreEqual(this.simpleId, newSimpleId)) { String oldValue = this.simpleId; this.simpleId = newSimpleId; notifyChangeListeners(PropertyName.SIMPLE_ID, oldValue, this.simpleId); } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#setType(org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition.Type) */ @Override public void setType( Type newRuntimeType ) { if (this.type != newRuntimeType) { Type oldValue = this.type; this.type = newRuntimeType; notifyChangeListeners(PropertyName.TYPE, oldValue, this.type); if (Type.BOOLEAN == this.type) { Set<String> newAllowedValues = new HashSet<String>(2); newAllowedValues.add(BOOLEAN_ALLOWED_VALUES[0]); newAllowedValues.add(BOOLEAN_ALLOWED_VALUES[1]); setAllowedValues(newAllowedValues); } } } /** * {@inheritDoc} * * @see org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition#shouldBeIndexed() */ @Override public boolean shouldBeIndexed() { return this.index; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString() { return "Model Extension Property: id=" + getId(); //$NON-NLS-1$ } }