@Override public ArchetypeReference deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { ArchetypeReference archetypeReference = gson.fromJson(json, ArchetypeReference.class); for (ElementInstance elementInstance : archetypeReference.getElementInstancesMap().values()) { elementInstance.setArchetypeReference(archetypeReference); } return archetypeReference; } }
private static ElementInstance cloneElementInstanceWithGTCodes(ElementInstance ei, ArchetypeReference ar, boolean useGTCodes) { ei = ei.clone(); ei.setArchetypeReference(ar); if (!useGTCodes && ei instanceof GeneratedElementInstance) { ((GeneratedElementInstance) ei).getRuleReferences().clear(); } return ei; }
boolean matchAndFill(GeneratedArchetypeReference ar1, ArchetypeReference ar2, Map<String, Guide> guideMap, Calendar date) { Collection<ElementInstance> emptyElementInstances = new ArrayList<ElementInstance>(); boolean matches = matches(ar1, ar2, guideMap, date); if (!matches) { return false; } else { if (ar2 instanceof GeneratedArchetypeReference) { for (String idElement : ar1.getElementInstancesMap().keySet()) { ElementInstance ei1 = ar1.getElementInstancesMap().get(idElement); ElementInstance ei2 = ar2.getElementInstancesMap().get(idElement); if (!(ei1 instanceof PredicateGeneratedElementInstance) && ei2 == null) { ei2 = ei1.clone(); emptyElementInstances.add(ei2); } if (ei1 instanceof GeneratedElementInstance && ei2 instanceof GeneratedElementInstance) { ((GeneratedElementInstance) ei2).getRuleReferences().addAll(((GeneratedElementInstance) ei1).getRuleReferences()); } } for (ElementInstance elementInstance : emptyElementInstances) { elementInstance.setArchetypeReference(ar2); } } } return true; }
ei.setArchetypeReference(arAux); if (originalEI instanceof GeneratedElementInstance) { GeneratedElementInstance generatedElementInstance = (GeneratedElementInstance) originalEI;