SGF-289 - Enumeration restrictions (xsd:enumeration) should be avoided in the XML schema.
Removed the XSD enumeration restriction on the 'scope' attribute of the 'baseReplicatedRegionType' complexType, Region element definition in the SDG XSD allowing the use of property placeholders to specify a GemFire Cache Region's Scope for different distribution patterns. In addition, completely removed the 'scopeType' simpleType element definition in the SDG XSD.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright 2010-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.gemfire;
|
||||
|
||||
import org.springframework.data.gemfire.support.AbstractPropertyEditorConverterSupport;
|
||||
|
||||
import com.gemstone.gemfire.cache.Scope;
|
||||
|
||||
/**
|
||||
* The ScopeConverter class is a Spring Converter and JavaBeans PropertyEditor that converts Strings
|
||||
* into GemFire Scope constant values.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.data.gemfire.support.AbstractPropertyEditorConverterSupport
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
* @since 1.6.0
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public class ScopeConverter extends AbstractPropertyEditorConverterSupport<Scope> {
|
||||
|
||||
/**
|
||||
* Converts the given String source into an instance of GemFire Scope.
|
||||
*
|
||||
* @param source the String to convert into a GemFire Scope.
|
||||
* @return a GemFire Scope for the given String.
|
||||
* @throws java.lang.IllegalArgumentException if the String is not a valid GemFire Scope.
|
||||
* @see org.springframework.data.gemfire.ScopeType#getScope(ScopeType)
|
||||
* @see org.springframework.data.gemfire.ScopeType#valueOfIgnoreCase(String)
|
||||
* @see com.gemstone.gemfire.cache.Scope#fromString(String)
|
||||
* @see #assertConverted(String, Object, Class)
|
||||
*/
|
||||
@Override
|
||||
public Scope convert(final String source) {
|
||||
try {
|
||||
return Scope.fromString(source);
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
return assertConverted(source, ScopeType.getScope(ScopeType.valueOfIgnoreCase(source)), Scope.class);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
124
src/main/java/org/springframework/data/gemfire/ScopeType.java
Normal file
124
src/main/java/org/springframework/data/gemfire/ScopeType.java
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright 2010-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.gemfire;
|
||||
|
||||
import com.gemstone.gemfire.cache.Scope;
|
||||
import com.gemstone.gemfire.management.internal.cli.util.spring.StringUtils;
|
||||
|
||||
/**
|
||||
* The ScopeType enum is an enumeration of GemFire Scopes.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
* @since 1.6.0
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public enum ScopeType {
|
||||
DISTRIBUTED_ACK(Scope.DISTRIBUTED_ACK),
|
||||
DISTRIBUTED_NO_ACK(Scope.DISTRIBUTED_NO_ACK),
|
||||
GLOBAL(Scope.GLOBAL),
|
||||
LOCAL(Scope.LOCAL);
|
||||
|
||||
private final Scope gemfireScope;
|
||||
|
||||
/**
|
||||
* Constructs an instance of the ScopeType initialized with a matching GemFire Scope.
|
||||
*
|
||||
* @param gemfireScope the GemFire Scope paired with this enumerated value.
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
*/
|
||||
ScopeType(final Scope gemfireScope) {
|
||||
this.gemfireScope = gemfireScope;
|
||||
}
|
||||
|
||||
/**
|
||||
* Null-safe operation to extract the GemFire Scope from the given ScopeType enum value, or null if the provided
|
||||
* scopeType is null.
|
||||
*
|
||||
* @param scopeType the ScopeType enumerated value from which to extract the GemFire Scope.
|
||||
* @return the paired GemFire Scope from the given ScopeType or null if scopeType is null.
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
* @see #getScope()
|
||||
*/
|
||||
public static Scope getScope(final ScopeType scopeType) {
|
||||
return (scopeType != null ? scopeType.getScope() : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a ScopeType enumerated value for the given a GemFire Scope.
|
||||
*
|
||||
* @param scope the GemFire Scope used to lookup and match the appropriate ScopeType.
|
||||
* @return a ScopeType for the given GemFire Scope or null if no match was found.
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
* @see #getScope()
|
||||
* @see #values()
|
||||
*/
|
||||
public static ScopeType valueOf(final Scope scope) {
|
||||
for (ScopeType scopeType : values()) {
|
||||
if (scopeType.getScope().equals(scope)) {
|
||||
return scopeType;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a ScopeType enumerated value given the case-insensitive name of the GemFire Scope.
|
||||
*
|
||||
* @param name a String name describing the ScopeType enum value.
|
||||
* @return a ScopeType for the given case-insensitive, named GemFire Scope.
|
||||
* @see java.lang.String#equalsIgnoreCase(String)
|
||||
* @see #values()
|
||||
* @see #name()
|
||||
* @see #transform(String)
|
||||
*/
|
||||
public static ScopeType valueOfIgnoreCase(String name) {
|
||||
name = transform(name);
|
||||
|
||||
for (ScopeType scopeType : values()) {
|
||||
if (scopeType.name().equalsIgnoreCase(name)) {
|
||||
return scopeType;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Null-safe operation that transforms a String name having hyphens and whitespace into a String with underscores
|
||||
* and no whitespace.
|
||||
*
|
||||
* @param name the String to transform.
|
||||
* @return a String value with underscores for hyphens and all leading/trailing whitespace trimmed, or null
|
||||
* if the given String name is null.
|
||||
*/
|
||||
private static String transform(final String name) {
|
||||
return (StringUtils.hasText(name) ? name.trim().replaceAll("-", "_") : name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the matching GemFire Scope for this enumerated value.
|
||||
*
|
||||
* @return a GemFire Scope for this enumerated value.
|
||||
* @see com.gemstone.gemfire.cache.Scope
|
||||
*/
|
||||
public Scope getScope() {
|
||||
return gemfireScope;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import org.springframework.data.gemfire.IndexMaintenancePolicyType;
|
||||
import org.springframework.data.gemfire.IndexType;
|
||||
import org.springframework.data.gemfire.IndexTypeConverter;
|
||||
import org.springframework.data.gemfire.InterestPolicyConverter;
|
||||
import org.springframework.data.gemfire.ScopeConverter;
|
||||
import org.springframework.data.gemfire.client.InterestResultPolicyConverter;
|
||||
import org.springframework.data.gemfire.server.SubscriptionEvictionPolicy;
|
||||
import org.springframework.data.gemfire.server.SubscriptionEvictionPolicyConverter;
|
||||
@@ -36,6 +37,7 @@ import com.gemstone.gemfire.cache.EvictionAction;
|
||||
import com.gemstone.gemfire.cache.ExpirationAction;
|
||||
import com.gemstone.gemfire.cache.InterestPolicy;
|
||||
import com.gemstone.gemfire.cache.InterestResultPolicy;
|
||||
import com.gemstone.gemfire.cache.Scope;
|
||||
|
||||
/**
|
||||
* The CustomEditorRegistrationBeanFactoryPostProcessor class is a Spring BeanFactoryPostProcessor used to register
|
||||
@@ -58,6 +60,7 @@ public class CustomEditorRegistrationBeanFactoryPostProcessor implements BeanFac
|
||||
beanFactory.registerCustomEditor(IndexType.class, IndexTypeConverter.class);
|
||||
beanFactory.registerCustomEditor(InterestPolicy.class, InterestPolicyConverter.class);
|
||||
beanFactory.registerCustomEditor(InterestResultPolicy.class, InterestResultPolicyConverter.class);
|
||||
beanFactory.registerCustomEditor(Scope.class, ScopeConverter.class);
|
||||
beanFactory.registerCustomEditor(SubscriptionEvictionPolicy.class, SubscriptionEvictionPolicyConverter.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ abstract class ParsingUtils {
|
||||
String scopeAttributeValue = element.getAttribute("scope");
|
||||
|
||||
if (StringUtils.hasText(scopeAttributeValue)) {
|
||||
builder.addPropertyValue("scope", Scope.fromString(scopeAttributeValue.toUpperCase().replace("-", "_")));
|
||||
builder.addPropertyValue("scope", scopeAttributeValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user