1 21 package com.db4o.config; 22 23 import com.db4o.foundation.ArgumentNullException; 24 25 31 public class WildcardAlias implements Alias { 32 33 private final WildcardPattern _storedPattern; 34 35 private final WildcardPattern _runtimePattern; 36 37 43 public WildcardAlias(String storedPattern, String runtimePattern) { 44 45 if (null == storedPattern) throw new ArgumentNullException("storedPattern"); 46 if (null == runtimePattern) throw new ArgumentNullException("runtimePattern"); 47 48 _storedPattern = new WildcardPattern(storedPattern); 49 _runtimePattern = new WildcardPattern(runtimePattern); 50 } 51 52 55 public String resolveRuntimeName(String runtimeTypeName) { 56 String match = _runtimePattern.matches(runtimeTypeName); 57 return match != null 58 ? _storedPattern.inject(match) 59 : null; 60 } 61 62 65 66 public String resolveStoredName(String storedTypeName) { 67 String match = _storedPattern.matches(storedTypeName); 68 return match != null 69 ? _runtimePattern.inject(match) 70 : null; 71 } 72 73 static class WildcardPattern { 74 private String _head; 75 private String _tail; 76 77 public WildcardPattern(String pattern) { 78 String [] parts = split(pattern); 79 80 _head = parts[0]; 81 _tail = parts[1]; 82 } 83 84 public String inject(String s) { 85 return _head + s + _tail; 86 } 87 88 public String matches(String s) { 89 if (!s.startsWith(_head) || !s.endsWith(_tail)) return null; 90 return s.substring(_head.length(), s.length()-_tail.length()); 91 } 92 93 private void invalidPattern() { 94 throw new IllegalArgumentException ("only one '*' character"); 95 } 96 97 String [] split(String pattern) { 98 int index = pattern.indexOf('*'); 99 if (-1 == index || index != pattern.lastIndexOf('*')) invalidPattern(); 100 return new String [] { 101 pattern.substring(0, index), 102 pattern.substring(index+1) 103 }; 104 } 105 } 106 107 } 108 | Popular Tags |