package org.swellrt.model.unmutable; import org.swellrt.model.ReadableType; import org.swellrt.model.adt.UnmutableElementList; import org.swellrt.model.generic.BooleanType; import org.swellrt.model.generic.FileType; import org.swellrt.model.generic.InvalidModelStringValue; import org.swellrt.model.generic.ListType; import org.swellrt.model.generic.MapType; import org.swellrt.model.generic.NumberType; import org.swellrt.model.generic.StringType; import org.swellrt.model.generic.TextType; public class UnmutableTypeFactory { public static ReadableType deserialize(UnmutableModel model, UnmutableElementList<String, Void> valuesContainer, String ref) { if (ref.startsWith(NumberType.PREFIX)) { int index = Integer.valueOf(ref.substring(NumberType.PREFIX.length() + 1)); return new UnmutableNumber(valuesContainer.get(index)); } else if (ref.startsWith(BooleanType.PREFIX)) { int index = Integer.valueOf(ref.substring(BooleanType.PREFIX.length() + 1)); return new UnmutableBoolean(valuesContainer.get(index)); } else if (ref.startsWith(StringType.PREFIX)) { int index = Integer.valueOf(ref.substring(StringType.PREFIX.length()+1)); return new UnmutableString(valuesContainer.get(index)); } else if (ref.startsWith(MapType.PREFIX)) { return UnmutableMap.deserialize(model, ref); } else if (ref.startsWith(ListType.PREFIX)) { return UnmutableList.deserialize(model, ref); } else if (ref.startsWith(TextType.PREFIX)) { return new UnmutableText(model.getBlipData(ref)); } else if (ref.startsWith(FileType.PREFIX)) { int index = Integer.valueOf(ref.substring(FileType.PREFIX.length() + 1)); try { FileType.Value v = FileType.Value.deserialize(valuesContainer.get(index)); return new UnmutableFile(v.getAttachmentId(), v.getContentType()); } catch (InvalidModelStringValue e) { // TODO handle exception return null; } } return null; } }