Merge "Issue #2906 change util.mapping to return empty sets instead of null" into development

Former-commit-id: 803007a447 [formerly 7e6b3bf3a0] [formerly fbca5e9d9c] [formerly 803007a447 [formerly 7e6b3bf3a0] [formerly fbca5e9d9c] [formerly ea6da1861e [formerly fbca5e9d9c [formerly 6f091a6698888a27d9810c4a4abd5a9e28d2b9dc]]]]
Former-commit-id: ea6da1861e
Former-commit-id: c24103c8ad [formerly c705aad7d6] [formerly b210d3324d7d9f5b8be08b94614acbe04b863830 [formerly 27d2911801]]
Former-commit-id: 645fb7e29921054f0179e0916f8f7f3ef77fef15 [formerly 4e9f6378e1]
Former-commit-id: b8d54d7dd2
This commit is contained in:
Nate Jensen 2014-04-02 12:27:01 -05:00 committed by Gerrit Code Review
commit c222e156c7
2 changed files with 57 additions and 25 deletions

View file

@ -28,10 +28,10 @@ import java.util.Set;
/** /**
* *
* Represents a bidirectional map for going between base names and aliases. * Represents a bidirectional map for going between base names and aliases.
* Allows for caseInsensitive aliases since some naming conventions are ambigous * Allows for caseInsensitive aliases since some naming conventions are
* on case. The base names cannot be treated case insensitive because this would * ambiguous on case. The base names cannot be treated case insensitive because
* cause ambiguity and require case insensitive handling of base names in all * this would cause ambiguity and require case insensitive handling of base
* namespaces. * names in all namespaces.
* *
* <pre> * <pre>
* *
@ -40,6 +40,7 @@ import java.util.Set;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 22, 2012 bsteffen Initial creation * Mar 22, 2012 bsteffen Initial creation
* Apr 02, 2014 2906 bclement changed to return empty set instead of null for lookup methods
* *
* </pre> * </pre>
* *
@ -86,21 +87,29 @@ public class AliasNamespace {
} }
} }
/**
* @param alias
* @return empty set if no mapping from alias to base is found
*/
public Set<String> lookupBaseNames(String alias) { public Set<String> lookupBaseNames(String alias) {
if (!caseSensitive) { if (!caseSensitive) {
alias = alias.toLowerCase(); alias = alias.toLowerCase();
} }
Set<String> base = alias2base.get(alias); Set<String> base = alias2base.get(alias);
if (base == null) { if (base == null) {
return base; return Collections.emptySet();
} }
return Collections.unmodifiableSet(base); return Collections.unmodifiableSet(base);
} }
/**
* @param base
* @return empty set if no mapping from base to aliases is found
*/
public Set<String> lookupAliases(String base) { public Set<String> lookupAliases(String base) {
Set<String> alias = base2alias.get(base); Set<String> alias = base2alias.get(base);
if (alias == null) { if (alias == null) {
return alias; return Collections.emptySet();
} }
return Collections.unmodifiableSet(alias); return Collections.unmodifiableSet(alias);
} }

View file

@ -53,6 +53,7 @@ import javax.xml.bind.Unmarshaller;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 22, 2012 bsteffen Initial creation * Mar 22, 2012 bsteffen Initial creation
* Apr 02, 2014 2906 bclement changed to return empty set instead of null for lookup methods
* *
* </pre> * </pre>
* *
@ -97,6 +98,13 @@ public abstract class Mapper {
Mapper.unmarshaller = unmarshaller; Mapper.unmarshaller = unmarshaller;
} }
/**
* @param alias
* @param namespace
* @param defaultUseAlias
* default to populating return with alias if no base names found
* @return empty set if no base names found and defaultUseAlias is false
*/
protected Set<String> lookupBaseNames(String alias, String namespace, protected Set<String> lookupBaseNames(String alias, String namespace,
boolean defaultUseAlias) { boolean defaultUseAlias) {
AliasNamespace list = namespaceMap.get(namespace); AliasNamespace list = namespaceMap.get(namespace);
@ -108,7 +116,7 @@ public abstract class Mapper {
if (defaultUseAlias) { if (defaultUseAlias) {
baseNames = new HashSet<String>(Arrays.asList(alias)); baseNames = new HashSet<String>(Arrays.asList(alias));
} else { } else {
return null; return Collections.emptySet();
} }
} }
AliasNamespace deprecated = namespaceMap.get(DEPRECATED); AliasNamespace deprecated = namespaceMap.get(DEPRECATED);
@ -148,18 +156,27 @@ public abstract class Mapper {
/** /**
* Lookup all the baseNames associated with the given alias in a namespace. * Lookup all the baseNames associated with the given alias in a namespace.
* If no baseNames are defined null is returned. * If no baseNames are defined an empty set is returned.
* *
* @param namespace * @param namespace
* - the defined alias namespace to look for the name * - the defined alias namespace to look for the name
* @param alias * @param alias
* - the name of an alias defined in the namespace * - the name of an alias defined in the namespace
* @return the base names or null if the namespace or alias is undefined * @return the base names or an empty set if the namespace or alias is
* undefined
*/ */
public Set<String> lookupBaseNamesOrNull(String alias, String namespace) { public Set<String> lookupBaseNamesOrEmpty(String alias, String namespace) {
return lookupBaseNames(alias, namespace, false); return lookupBaseNames(alias, namespace, false);
} }
/**
* @param base
* @param namespace
* @param defaultUseBase
* default to populating return with base if no aliases found
* @return empty set if no aliases found and defaultUseBase is false
* @return
*/
protected Set<String> lookupAliases(String base, String namespace, protected Set<String> lookupAliases(String base, String namespace,
boolean defaultUseBase) { boolean defaultUseBase) {
AliasNamespace ns = namespaceMap.get(namespace); AliasNamespace ns = namespaceMap.get(namespace);
@ -167,7 +184,7 @@ public abstract class Mapper {
if (ns != null) { if (ns != null) {
aliases = ns.lookupAliases(base); aliases = ns.lookupAliases(base);
} }
if (aliases == null) { if (aliases == null || aliases.isEmpty()) {
AliasNamespace deprecated = namespaceMap.get(DEPRECATED); AliasNamespace deprecated = namespaceMap.get(DEPRECATED);
if (deprecated != null) { if (deprecated != null) {
Set<String> depNames = deprecated.lookupAliases(base); Set<String> depNames = deprecated.lookupAliases(base);
@ -186,8 +203,12 @@ public abstract class Mapper {
} }
} }
} }
if (aliases == null && defaultUseBase) { if (aliases == null || aliases.isEmpty()) {
aliases = new HashSet<String>(Arrays.asList(base)); if (defaultUseBase) {
aliases = new HashSet<String>(Arrays.asList(base));
} else {
aliases = Collections.emptySet();
}
} }
} }
return aliases; return aliases;
@ -209,15 +230,15 @@ public abstract class Mapper {
/** /**
* Lookup an alias name within a given namespace for a base name. If no * Lookup an alias name within a given namespace for a base name. If no
* alias is defined then null is returned * alias is defined then an empty set is returned
* *
* @param parameter * @param parameter
* - The base name to find an alias for * - The base name to find an alias for
* @param namespace * @param namespace
* - The namespace in which to look for an alias. * - The namespace in which to look for an alias.
* @return an alias abbreviation or null if none is found. * @return an alias abbreviation or an empty set if none is found.
*/ */
public Set<String> lookupAliasesOrNull(String base, String namespace) { public Set<String> lookupAliasesOrEmpty(String base, String namespace) {
return lookupAliases(base, namespace, false); return lookupAliases(base, namespace, false);
} }
@ -255,7 +276,7 @@ public abstract class Mapper {
public String lookupAlias(String base, String namespace) public String lookupAlias(String base, String namespace)
throws MultipleMappingException { throws MultipleMappingException {
Set<String> aliases = lookupAliases(base, namespace); Set<String> aliases = lookupAliases(base, namespace);
if (aliases == null) { if (aliases == null || aliases.isEmpty()) {
return null; return null;
} else if (aliases.size() == 1) { } else if (aliases.size() == 1) {
return aliases.iterator().next(); return aliases.iterator().next();
@ -265,18 +286,19 @@ public abstract class Mapper {
} }
/** /**
* Provides same functionality as lookupBaseNamesOrNull but is more * Provides same functionality as lookupBaseNamesOrEmpty but is more
* convenient when only alias is expected. * convenient when only alias is expected.
* *
* @param alias * @param alias
* @param namespace * @param namespace
* @return * @return null if no mapping from alias to base name is found
* @throws MultipleMappingException * @throws MultipleMappingException
* if more than one base name is found for alias
*/ */
public String lookupBaseNameOrNull(String alias, String namespace) public String lookupBaseNameOrNull(String alias, String namespace)
throws MultipleMappingException { throws MultipleMappingException {
Set<String> baseNames = lookupBaseNamesOrNull(alias, namespace); Set<String> baseNames = lookupBaseNamesOrEmpty(alias, namespace);
if (baseNames == null || baseNames.isEmpty()) { if (baseNames.isEmpty()) {
return null; return null;
} else if (baseNames.size() == 1) { } else if (baseNames.size() == 1) {
return baseNames.iterator().next(); return baseNames.iterator().next();
@ -287,17 +309,18 @@ public abstract class Mapper {
} }
/** /**
* Provides same functionality as lookupAliasesOrNull but is more convenient * Provides same functionality as lookupAliasesOrEmpty but is more
* when only one base name is expected. * convenient when only one base name is expected.
* *
* @param base * @param base
* @param namespace * @param namespace
* @return * @return null if no mapping from base to alias is found
* @throws MultipleMappingException * @throws MultipleMappingException
* if more than one alias is found for base
*/ */
public String lookupAliasOrNull(String base, String namespace) public String lookupAliasOrNull(String base, String namespace)
throws MultipleMappingException { throws MultipleMappingException {
Set<String> aliases = lookupAliasesOrNull(base, namespace); Set<String> aliases = lookupAliasesOrEmpty(base, namespace);
if (aliases == null) { if (aliases == null) {
return null; return null;
} else if (aliases.size() == 1) { } else if (aliases.size() == 1) {