1 19 package org.apache.cayenne.access.types; 20 21 28 class ByteOrCharArrayFactory implements ExtendedTypeFactory { 29 30 private ExtendedTypeMap map; 31 32 ByteOrCharArrayFactory(ExtendedTypeMap map) { 33 this.map = map; 34 } 35 36 public ExtendedType getType(Class objectClass) { 37 38 if (objectClass.isArray()) { 39 40 Class elementType = objectClass.getComponentType(); 41 42 if (Character .class.isAssignableFrom(elementType)) { 43 ExtendedType stringType = map 45 .getExplictlyRegisteredType("java.lang.String"); 46 47 return new CharacterArrayType(stringType); 48 } 49 else if (Character.TYPE.isAssignableFrom(elementType)) { 50 51 ExtendedType stringType = map 53 .getExplictlyRegisteredType("java.lang.String"); 54 55 return new CharArrayType(stringType); 56 } 57 else if (Byte .class.isAssignableFrom(elementType)) { 58 ExtendedType bytesType = map.getExplictlyRegisteredType("byte[]"); 60 return new ByteWrapperArrayType(bytesType); 61 } 62 } 63 else if (Character .class.isAssignableFrom(objectClass)) { 64 65 ExtendedType stringType = map.getExplictlyRegisteredType("java.lang.String"); 67 return new CharacterType(stringType); 68 } 69 70 return null; 71 } 72 73 final class CharacterType extends ExtendedTypeDecorator { 74 75 CharacterType(ExtendedType stringType) { 76 super(stringType); 77 } 78 79 public String getClassName() { 80 return "java.lang.Character"; 81 } 82 83 Object fromJavaObject(Object object) { 84 return object != null 85 ? String.valueOf(((Character ) object).charValue()) 86 : null; 87 } 88 89 Object toJavaObject(Object object) { 90 if (object == null) { 91 return null; 92 } 93 94 String string = object.toString(); 95 return (string.length() > 0) ? new Character (string.charAt(0)) : null; 96 } 97 } 98 99 final class CharArrayType extends ExtendedTypeDecorator { 100 101 CharArrayType(ExtendedType stringType) { 102 super(stringType); 103 } 104 105 public String getClassName() { 106 return "char[]"; 107 } 108 109 Object fromJavaObject(Object object) { 110 return object != null ? new String ((char[]) object) : null; 111 } 112 113 Object toJavaObject(Object object) { 114 return object != null ? ((String ) object).toCharArray() : null; 115 } 116 } 117 118 final class CharacterArrayType extends ExtendedTypeDecorator { 119 120 CharacterArrayType(ExtendedType stringType) { 121 super(stringType); 122 } 123 124 public String getClassName() { 125 return "java.lang.Character[]"; 126 } 127 128 Object fromJavaObject(Object object) { 129 if (object == null) { 130 return null; 131 } 132 133 Character [] chars = (Character []) object; 134 StringBuffer buffer = new StringBuffer (chars.length); 135 for (int i = 0; i < chars.length; i++) { 136 buffer.append(chars[i] != null ? chars[i].charValue() : 0); 137 } 138 139 return buffer.toString(); 140 } 141 142 Object toJavaObject(Object object) { 143 if (object == null) { 144 return null; 145 } 146 147 String string = object.toString(); 148 Character [] chars = new Character [string.length()]; 149 for (int i = 0; i < string.length(); i++) { 150 chars[i] = new Character (string.charAt(i)); 151 } 152 153 return chars; 154 } 155 } 156 157 final class ByteWrapperArrayType extends ExtendedTypeDecorator { 158 159 ByteWrapperArrayType(ExtendedType byteArrayType) { 160 super(byteArrayType); 161 } 162 163 public String getClassName() { 164 return "java.lang.Byte[]"; 165 } 166 167 Object fromJavaObject(Object object) { 168 if (object == null) { 169 return null; 170 } 171 172 Byte [] bytes = (Byte []) object; 173 byte[] buffer = new byte[bytes.length]; 174 for (int i = 0; i < bytes.length; i++) { 175 buffer[i] = bytes[i] != null ? bytes[i].byteValue() : 0; 176 } 177 178 return buffer; 179 } 180 181 Object toJavaObject(Object object) { 182 if (object == null) { 183 return null; 184 } 185 186 byte[] bytes = (byte[]) object; 187 Byte [] byteWrappers = new Byte [bytes.length]; 188 189 for (int i = 0; i < bytes.length; i++) { 190 byteWrappers[i] = new Byte (bytes[i]); 191 } 192 193 return byteWrappers; 194 } 195 } 196 } 197 | Popular Tags |