public Entity updateEntity(Entity entity) throws ApplicationException { if (entity == null) { return entity; } if (entity.getEntityVersionId() == null) { throw new ApplicationException( "An entity definition must first be created before it is updated."); } try { Date currentDate = new Date(); entity.setDateChanged(currentDate); entity.setUserChangedBy(Context.getUserContext().getUser()); for (EntityAttribute attrib : entity.getAttributes()) { if (attrib.getDateCreated() == null) { attrib.setDateCreated(currentDate); attrib.setUserCreatedBy(Context.getUserContext().getUser()); // attrib.setEntity(entity); } attrib.setEntity(entity); } // Mark deletion attributes handleAttributeUpdates(entity); // remove validations for marked attribute for (EntityAttribute attrib : entity.getAttributes()) { if (attrib.getUserVoidedBy() != null) { // remove validations List<EntityAttributeValidation> existingValidations = loadEntityAttributeValidations(attrib); for (EntityAttributeValidation validation : existingValidations) { deleteEntityAttributeValidation(validation); } } } Entity updatedEntity = entityDefinitionDao.updateEntity(entity); updatedEntity = entityDefinitionDao.loadEntity(entity.getEntityVersionId()); addToCache(updatedEntity); Context.notifyObserver(ObservationEventType.ENTITY_ATTRIBUTE_UPDATE_EVENT, entity); return updatedEntity; } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
public void deleteCustomField(CustomField field) throws ApplicationException { if (field == null || ConvertUtil.isNullOrEmpty(field.getEntityName()) || ConvertUtil.isNullOrEmpty(field.getFieldName())) { log.warn("The custom field to be deleted is invalid: " + field); throw new ApplicationException("Unable to add invalid custom field definition."); } Entity entity = findLatestEntityVersionByName(field.getEntityName()); EntityAttribute attrib = null; for (EntityAttribute item : entity.getAttributes()) { if (item.getName().equalsIgnoreCase(field.getFieldName()) && item.getDateVoided() == null) { attrib = item; } } if (attrib == null) { log.info("The user attempted to delete a custom field that does not exist."); throw new ApplicationException("Unable to delete an unknown custom field definition."); } attrib.setDateVoided(new Date()); attrib.setUserVoidedBy(Context.getUserContext().getUser()); try { entityDefinitionDao.updateEntity(entity); // Generate a notification event to inform interested listeners via the lightweight mechanism // that this event has occurred. Context.notifyObserver(ObservationEventType.CUSTOM_FIELD_DELETE_EVENT, field); } catch (DaoException e) { log.error("Failed while deleting a custom field: " + e, e); throw new ApplicationException("Failed while deleting the custom field: " + e.getMessage()); } }
public List<Entity> findEntitiesByName(String name) { List<Entity> entities = entityDefinitionDao.findEntitiesByName(name); for (Entity entity : entities) { addToCache(entity); } return entities; }
public Entity addEntity(Entity entity) throws ApplicationException { if (entity == null) { return null; } if (entity.getEntityVersionId() != null) { throw new ApplicationException( "This entity definition already exists so it can only be updated."); } validateNameUniqueness(entity); try { entity.setUserCreatedBy(Context.getUserContext().getUser()); Date dateCreated = new Date(); entity.setDateCreated(dateCreated); for (EntityAttribute attribute : entity.getAttributes()) { attribute.setDateCreated(dateCreated); attribute.setUserCreatedBy(Context.getUserContext().getUser()); attribute.setEntity(entity); } entityDefinitionDao.addEntity(entity); addToCache(entity); Context.notifyObserver(ObservationEventType.ENTITY_ADD_EVENT, entity); return entity; } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
public void updateEntityAttributeGroups(List<EntityAttributeGroup> groups, Entity updatedEntity) throws ApplicationException { if (groups == null) { return; } Entity existing = entityDefinitionDao.loadEntity(updatedEntity.getEntityVersionId()); List<EntityAttributeGroup> existingGroups = loadEntityAttributeGroups(existing); Map<Integer, EntityAttributeGroup> newGroupById = new HashMap<Integer, EntityAttributeGroup>(); for (EntityAttributeGroup group : groups) { newGroupById.put(group.getEntityAttributeGroupId(), group); } // remove deleted groups for (EntityAttributeGroup group : existingGroups) { if (newGroupById.get(group.getEntityAttributeGroupId()) == null) { deleteEntityAttributeGroup(group); } } for (EntityAttributeGroup newgroup : groups) { if (newgroup.getEntityAttributeGroupId() != null) { updateEntityAttributeGroup(newgroup); } else { addEntityAttributeGroup(newgroup); } } }
public void updateEntityAttributeValidations( List<EntityAttributeValidation> validations, Entity updatedEntity, String attributeName) throws ApplicationException { if (validations == null) { return; } Entity existing = entityDefinitionDao.loadEntity(updatedEntity.getEntityVersionId()); EntityAttribute existingAttribute = existing.findAttributeByName(attributeName); List<EntityAttributeValidation> existingValidations = loadEntityAttributeValidations(existingAttribute); Map<Integer, EntityAttributeValidation> newValidationById = new HashMap<Integer, EntityAttributeValidation>(); for (EntityAttributeValidation validation : validations) { if (validation.getEntityAttributeValidationId() != null) { newValidationById.put(validation.getEntityAttributeValidationId(), validation); } } // remove deleted validations for (EntityAttributeValidation validation : existingValidations) { if (newValidationById.get(validation.getEntityAttributeValidationId()) == null) { deleteEntityAttributeValidation(validation); } } for (EntityAttributeValidation newValidation : validations) { if (newValidation.getEntityAttributeValidationId() != null) { updateEntityAttributeValidation(newValidation); } else { addEntityAttributeValidation(newValidation); } } }
public List<Entity> loadEntities() { List<Entity> entities = entityDefinitionDao.loadEntities(); // Since we got all of them again, we might as well update the cache for (Entity entity : entities) { addToCache(entity); } return entities; }
public Entity loadEntity(Integer id) { Entity entity = getFromCache(id); if (entity != null) { return entity; } entity = entityDefinitionDao.loadEntity(id); return entity; }
public void dropEntityIndexes(Integer entityVersionId) throws ApplicationException { if (entityVersionId == null) { return; } Entity entity = entityDefinitionDao.loadEntity(entityVersionId); if (entity == null) { log.info("A request was made to drop the indexes for an unknown entity."); return; } entityDao.dropIndexes(entity); }
public CustomField findCustomField(String entityName, String fieldName) { Entity entity = findLatestEntityVersionByName(entityName); if (entity == null) { return null; } EntityAttribute attrib = entityDefinitionDao.findCustomField(entity, fieldName); if (attrib == null) { return null; } CustomField field = buildCustomFieldFromAttribute(attrib); if (log.isDebugEnabled()) { log.debug("Found custom field: " + field); } return field; }
public void deleteEntityAttributeValidation(EntityAttributeValidation validation) throws ApplicationException { if (validation == null) { return; } if (validation.getEntityAttributeValidationId() == null) { throw new ApplicationException( "An entity attribute validation must first be created before it is deleted."); } try { entityDefinitionDao.deleteEntityAttributeValidation(validation); } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
public void deleteEntityAttributeGroup(EntityAttributeGroup entityAttributeGroup) throws ApplicationException { if (entityAttributeGroup == null) { return; } if (entityAttributeGroup.getEntityAttributeGroupId() == null) { throw new ApplicationException( "An entity attribute group must first be created before it is deleted."); } try { entityDefinitionDao.deleteEntityAttributeGroup(entityAttributeGroup); } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
/** Will export the entity passed in as the entity version id into a string. */ public String exportEntity(Integer entityVersionId) throws ApplicationException { if (entityVersionId == null) { return ""; } Entity entity = entityDefinitionDao.loadEntity(entityVersionId); try { // 1. convert Entity to EntityModel EntityModel entityModel = ConvertUtil.mapToEntityModel(entity, EntityModel.class); // 2. set group info to EntityModel List<EntityAttributeGroup> groups = loadEntityAttributeGroups(entity); entityModel = ConvertUtil.setGroupInfoToEntityModel(groups, entityModel); // 3. set validation info to entity attribute for (EntityAttribute attribute : entity.getAttributes()) { List<EntityAttributeValidation> validations = loadEntityAttributeValidations(attribute); ValidationsType validationsType = ConvertUtil.mapToEntityValidations(validations); // set validations info to attributeType AttributesType attributesType = entityModel.getAttributes(); if (attributesType != null) { for (AttributeType attributeType : attributesType.getAttribute()) { String name = attributeType.getName(); if (attribute.getName().equals(name)) { attributeType.setValidations(validationsType); } } } } // export to xml format JAXBContext jaxbContext = JAXBContext.newInstance(EntityModel.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); OutputStream outputStream = new ByteArrayOutputStream(); jaxbMarshaller.marshal(entityModel, outputStream); return outputStream.toString(); } catch (JAXBException e) { log.warn("Unable to serialize a Entity into a string: " + e, e); throw new RuntimeException(e); } }
public List<CustomField> loadCustomFields(String entityName) { Entity entity = findLatestEntityVersionByName(entityName); if (entity == null) { return new ArrayList<CustomField>(); } List<EntityAttribute> attribs = entityDefinitionDao.loadCustomFields(entity); List<CustomField> fields = new ArrayList<CustomField>(attribs.size()); if (attribs.size() == 0) { return fields; } for (EntityAttribute attrib : attribs) { CustomField field = buildCustomFieldFromAttribute(attrib); fields.add(field); } return fields; }
private void handleAttributeUpdates(Entity entity) { Entity existing = entityDefinitionDao.loadEntity(entity.getEntityVersionId()); Map<Integer, EntityAttribute> newAttribById = new HashMap<Integer, EntityAttribute>(); for (EntityAttribute attribute : entity.getAttributes()) { newAttribById.put(attribute.getEntityAttributeId(), attribute); } // Mark for deletion attributes that were removed for (EntityAttribute attrib : existing.getAttributes()) { if (newAttribById.get(attrib.getEntityAttributeId()) == null) { attrib.setDateVoided(entity.getDateChanged()); attrib.setUserVoidedBy(Context.getUserContext().getUser()); entity.addAttribute(attrib); } } }
public EntityAttributeValidation addEntityAttributeValidation( EntityAttributeValidation validation) throws ApplicationException { if (validation == null || validation.getEntityAttribute() == null || validation.getParameters() == null) { throw new ApplicationException("This entity attribute validation is invalid."); } if (validation.getEntityAttributeValidationId() != null) { throw new ApplicationException( "This entity attribute validation already exists so it can only be updated."); } try { entityDefinitionDao.addEntityAttributeValidation(validation); return validation; } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
public EntityAttributeGroup addEntityAttributeGroup(EntityAttributeGroup entityAttributeGroup) throws ApplicationException { if (entityAttributeGroup == null || entityAttributeGroup.getEntity() == null || entityAttributeGroup.getEntityAttributes() == null) { throw new ApplicationException("This entity attribute group is invalid."); } if (entityAttributeGroup.getEntityAttributeGroupId() != null) { throw new ApplicationException( "This entity attribute group already exists so it can only be updated."); } try { entityDefinitionDao.addEntityAttributeGroup(entityAttributeGroup); return entityAttributeGroup; } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
public CustomField addCustomField(CustomField field) throws ApplicationException { if (field == null || ConvertUtil.isNullOrEmpty(field.getEntityName()) || ConvertUtil.isNullOrEmpty(field.getFieldName()) || ConvertUtil.isNullOrEmpty(field.getSourceFieldName())) { log.info("The custom field to be added is invalid: " + field); throw new ApplicationException("Unable to add invalid custom field definition."); } // Validate that a custom field by the same name does not already exist. List<CustomField> fields = loadCustomFields(field.getEntityName()); for (CustomField custom : fields) { if (custom.getFieldName().equalsIgnoreCase(field.getFieldName())) { log.warn( "User attempted to add a custom field " + field + " that already exists in the system."); throw new ApplicationException( "Unable to add a custom field that already exists in the system."); } } Entity entity = findLatestEntityVersionByName(field.getEntityName()); try { EntityAttribute attribute = buildAttributeFromCustomField(entity, field); entity.addAttribute(attribute); // TODO: Validate that the source field is known // TODO: Validate that the transformation function is known attribute = entityDefinitionDao.addCustomField(entity, attribute); // Generate a notification event to inform interested listeners via the lightweight mechanism // that this event has occurred. Context.notifyObserver(ObservationEventType.CUSTOM_FIELD_ADD_EVENT, field); Context.notifyObserver(ObservationEventType.ENTITY_ATTRIBUTE_UPDATE_EVENT, entity); return field; } catch (DaoException e) { log.error("Failed while saving a custom field: " + e, e); throw new ApplicationException("Failed while saving the custom field: " + e.getMessage()); } }
public void deleteEntity(Entity entity) throws ApplicationException { if (entity == null) { return; } if (entity.getEntityVersionId() == null) { throw new ApplicationException( "An entity definition must first be created before it is deleted."); } try { Date dateVoided = new Date(); entity.setDateVoided(dateVoided); entity.setUserVoidedBy(Context.getUserContext().getUser()); for (EntityAttribute attribute : entity.getAttributes()) { attribute.setDateVoided(dateVoided); attribute.setUserVoidedBy(Context.getUserContext().getUser()); attribute.setEntity(entity); } entityDefinitionDao.updateEntity(entity); addToCache(entity); } catch (DaoException e) { throw new ApplicationException(e.getMessage()); } }
/** Will import the entity definition specified in the relative filename of the parameter. */ public void importEntity(String filename) throws ApplicationException { if (filename.isEmpty()) { return; } try { File file = new File(filename); log.debug("Loading file " + file.getAbsolutePath()); if (!file.isFile() || !file.canRead()) { log.error("Input file is not available."); throw new RuntimeException("Input file " + filename + " is not readable."); } // Import from file JAXBContext jaxbContext = JAXBContext.newInstance(EntityModel.class); Unmarshaller unJaxbMarshaller = jaxbContext.createUnmarshaller(); EntityModel entityModel = (EntityModel) unJaxbMarshaller.unmarshal(new FileInputStream(file)); // convert EntityModel to Entity, EntityAttributeGroups, EntityAttributeValidations Entity entity = ConvertUtil.mapToEntityModel(entityModel, getEntityAttributeDatatypes(), Entity.class); // check existing entity List<Entity> entities = entityDefinitionDao.findEntitiesByName(entity.getName()); for (Entity en : entities) { if (en.getVersionId().intValue() == entity.getVersionId().intValue()) { log.error("Entity definition already exists: " + entity.getName()); throw new RuntimeException( "Entity definition in the file " + filename + " already exists."); } } // add entity Entity newEntity = addEntity(entity); // 2. add entity groups with attribute List<EntityAttributeGroup> groups = ConvertUtil.mapToEntityGroup( entityModel, newEntity, org.openhie.openempi.model.EntityAttributeGroup.class); for (EntityAttributeGroup group : groups) { addEntityAttributeGroup(group); } // 3. add entity attribute validations for (AttributeType attributeType : entityModel.getAttributes().getAttribute()) { List<EntityAttributeValidation> validations = ConvertUtil.mapToEntityValidations( attributeType, newEntity, org.openhie.openempi.model.EntityAttributeValidation.class); for (EntityAttributeValidation validation : validations) { addEntityAttributeValidation(validation); } } return; } catch (Exception e) { log.warn("Unable to Unmarshal xml to a EntityModel: " + e, e); throw new RuntimeException(e); } }
public List<EntityAttributeDatatype> getEntityAttributeDatatypes() { if (datatypes == null) { datatypes = entityDefinitionDao.getEntityAttributeDatatypes(); } return datatypes; }
public EntityAttributeGroup loadEntityAttributeGroup(Integer id) { return entityDefinitionDao.loadEntityAttributeGroup(id); }
public List<EntityAttributeGroup> loadEntityAttributeGroups(Entity entity) { return entityDefinitionDao.loadEntityAttributeGroups(entity); }
public EntityAttributeValidation loadEntityAttributeValidation(Integer id) { return entityDefinitionDao.loadEntityAttributeValidation(id); }
public List<EntityAttributeValidation> loadEntityAttributeValidations( EntityAttribute entityAttribute) { return entityDefinitionDao.loadEntityAttributeValidations(entityAttribute); }