Search in sources :

Example 1 with EntityLogAttr

use of io.jmix.audit.entity.EntityLogAttr in project jmix by jmix-framework.

the class EntityLogImpl method internalRegisterModify.

protected EntityLogItem internalRegisterModify(Object entity, @Nullable AttributeChanges changes, MetaClass metaClass, String storeName, Set<String> attributes) {
    EntityLogItem item = null;
    Date ts = timeSource.currentTimestamp();
    Set<String> dirty = calculateDirtyFields(entity, changes);
    Set<EntityLogAttr> entityLogAttrs;
    EntityLogItem.Type type;
    if (isSoftDeleteEntityRestored(entity, dirty)) {
        type = EntityLogItem.Type.RESTORE;
        entityLogAttrs = createLogAttributes(entity, attributes, changes);
    } else {
        type = EntityLogItem.Type.MODIFY;
        Set<String> dirtyAttributes = new HashSet<>();
        for (String attributePath : attributes) {
            if (metadataTools.isAdditionalProperty(metaClass, attributePath)) {
                if (dirty.contains(attributePath)) {
                    dirtyAttributes.add(attributePath);
                }
                continue;
            }
            MetaPropertyPath propertyPath = metaClass.getPropertyPath(attributePath);
            Preconditions.checkNotNullArgument(propertyPath, "Property path %s isn't exists for type %s", attributePath, metaClass.getName());
            if (dirty.contains(attributePath)) {
                dirtyAttributes.add(attributePath);
            } else if (!stores.getAdditional().isEmpty()) {
                String idAttributePath = getIdAttributePath(propertyPath, storeName);
                if (idAttributePath != null && dirty.contains(idAttributePath)) {
                    dirtyAttributes.add(attributePath);
                }
            }
        }
        entityLogAttrs = createLogAttributes(entity, dirtyAttributes, changes);
    }
    if (!entityLogAttrs.isEmpty() || type == EntityLogItem.Type.RESTORE) {
        item = metadata.create(EntityLogItem.class);
        item.setEventTs(ts);
        item.setUsername(findUsername());
        item.setType(type);
        item.setEntity(extendedEntities.getOriginalOrThisMetaClass(metaClass).getName());
        item.setEntityInstanceName(metadataTools.getInstanceName(entity));
        item.getEntityRef().setObjectEntityId(referenceToEntitySupport.getReferenceId(entity));
        item.setAttributes(entityLogAttrs);
    }
    return item;
}
Also used : EntityLogAttr(io.jmix.audit.entity.EntityLogAttr) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) EntityLogItem(io.jmix.audit.entity.EntityLogItem)

Example 2 with EntityLogAttr

use of io.jmix.audit.entity.EntityLogAttr in project jmix by jmix-framework.

the class EntityLogImpl method computeChanges.

protected void computeChanges(EntityLogItem itemToSave, List<EntityLogItem> sameEntityList) {
    Set<String> attributes = sameEntityList.stream().flatMap(entityLogItem -> entityLogItem.getAttributes().stream().map(EntityLogAttr::getName)).collect(Collectors.toSet());
    processAttributes(itemToSave, sameEntityList, attributes);
    Properties properties = new Properties();
    for (EntityLogAttr attr : itemToSave.getAttributes()) {
        properties.setProperty(attr.getName(), Strings.nullToEmpty(attr.getValue()));
        if (attr.getValueId() != null) {
            properties.setProperty(attr.getName() + EntityLogAttr.VALUE_ID_SUFFIX, attr.getValueId());
        }
        if (attr.getOldValue() != null) {
            properties.setProperty(attr.getName() + EntityLogAttr.OLD_VALUE_SUFFIX, attr.getOldValue());
        }
        if (attr.getOldValueId() != null) {
            properties.setProperty(attr.getName() + EntityLogAttr.OLD_VALUE_ID_SUFFIX, attr.getOldValueId());
        }
        if (attr.getMessagesPack() != null) {
            properties.setProperty(attr.getName() + EntityLogAttr.MP_SUFFIX, attr.getMessagesPack());
        }
    }
    if (itemToSave.getType() == EntityLogItem.Type.MODIFY) {
        sameEntityList.stream().filter(entityLogItem -> entityLogItem.getType() == EntityLogItem.Type.CREATE).findFirst().ifPresent(entityLogItem -> itemToSave.setType(EntityLogItem.Type.CREATE));
    }
    itemToSave.setChanges(getChanges(properties));
}
Also used : EntitySystemAccess(io.jmix.core.entity.EntitySystemAccess) EntityLogItem(io.jmix.audit.entity.EntityLogItem) MetaClass(io.jmix.core.metamodel.model.MetaClass) java.util(java.util) Preconditions(io.jmix.core.common.util.Preconditions) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) TransactionDefinition(org.springframework.transaction.TransactionDefinition) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) AuditProperties(io.jmix.audit.AuditProperties) io.jmix.core(io.jmix.core) BooleanUtils(org.apache.commons.lang3.BooleanUtils) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) EntityLog(io.jmix.audit.EntityLog) TypedQuery(javax.persistence.TypedQuery) EntityValues(io.jmix.core.entity.EntityValues) EntityOp(io.jmix.core.security.EntityOp) Strings(com.google.common.base.Strings) DatatypeRegistry(io.jmix.core.metamodel.datatype.DatatypeRegistry) AuditInfoProvider(io.jmix.data.AuditInfoProvider) UserDetails(org.springframework.security.core.userdetails.UserDetails) Range(io.jmix.core.metamodel.model.Range) Nullable(javax.annotation.Nullable) AttributeChangesProvider(io.jmix.data.AttributeChangesProvider) EntityLogAttr(io.jmix.audit.entity.EntityLogAttr) Logger(org.slf4j.Logger) LoggedEntity(io.jmix.audit.entity.LoggedEntity) AttributeChanges(io.jmix.core.event.AttributeChanges) StringWriter(java.io.StringWriter) IOException(java.io.IOException) EntityManager(javax.persistence.EntityManager) PersistenceContext(javax.persistence.PersistenceContext) Datatype(io.jmix.core.metamodel.datatype.Datatype) JpaLifecycleListener(io.jmix.data.impl.JpaLifecycleListener) GuardedBy(javax.annotation.concurrent.GuardedBy) Collectors(java.util.stream.Collectors) LoggedAttribute(io.jmix.audit.entity.LoggedAttribute) EnumClass(io.jmix.core.metamodel.datatype.impl.EnumClass) org.springframework.transaction.support(org.springframework.transaction.support) Component(org.springframework.stereotype.Component) Stream(java.util.stream.Stream) PlatformTransactionManager(org.springframework.transaction.PlatformTransactionManager) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) EntityLogAttr(io.jmix.audit.entity.EntityLogAttr) AuditProperties(io.jmix.audit.AuditProperties)

Example 3 with EntityLogAttr

use of io.jmix.audit.entity.EntityLogAttr in project jmix by jmix-framework.

the class EntityLogImpl method setAttributeOldValue.

protected void setAttributeOldValue(EntityLogAttr entityLogAttr, EntityLogItem itemToSave) {
    EntityLogAttr attr = getAttrToSave(entityLogAttr, itemToSave);
    attr.setOldValue(entityLogAttr.getOldValue());
    attr.setOldValueId(entityLogAttr.getOldValueId());
}
Also used : EntityLogAttr(io.jmix.audit.entity.EntityLogAttr)

Example 4 with EntityLogAttr

use of io.jmix.audit.entity.EntityLogAttr in project jmix by jmix-framework.

the class EntityLogImpl method getAttrToSave.

protected EntityLogAttr getAttrToSave(EntityLogAttr entityLogAttr, EntityLogItem itemToSave) {
    EntityLogAttr attr = itemToSave.getAttributes().stream().filter(a -> a.getName().equals(entityLogAttr.getName())).findFirst().orElse(null);
    if (attr == null) {
        attr = metadata.create(EntityLogAttr.class);
        attr.setName(entityLogAttr.getName());
        itemToSave.getAttributes().add(attr);
    }
    return attr;
}
Also used : EntityLogAttr(io.jmix.audit.entity.EntityLogAttr)

Example 5 with EntityLogAttr

use of io.jmix.audit.entity.EntityLogAttr in project jmix by jmix-framework.

the class EntityLogImpl method setAttributeNewValue.

protected void setAttributeNewValue(EntityLogAttr entityLogAttr, EntityLogItem itemToSave) {
    EntityLogAttr attr = getAttrToSave(entityLogAttr, itemToSave);
    attr.setValue(entityLogAttr.getValue());
    attr.setValueId(entityLogAttr.getValueId());
}
Also used : EntityLogAttr(io.jmix.audit.entity.EntityLogAttr)

Aggregations

EntityLogAttr (io.jmix.audit.entity.EntityLogAttr)7 MetaPropertyPath (io.jmix.core.metamodel.model.MetaPropertyPath)3 EntityLogItem (io.jmix.audit.entity.EntityLogItem)2 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)2 Strings (com.google.common.base.Strings)1 AuditProperties (io.jmix.audit.AuditProperties)1 EntityLog (io.jmix.audit.EntityLog)1 LoggedAttribute (io.jmix.audit.entity.LoggedAttribute)1 LoggedEntity (io.jmix.audit.entity.LoggedEntity)1 io.jmix.core (io.jmix.core)1 Preconditions (io.jmix.core.common.util.Preconditions)1 EntitySystemAccess (io.jmix.core.entity.EntitySystemAccess)1 EntityValues (io.jmix.core.entity.EntityValues)1 AttributeChanges (io.jmix.core.event.AttributeChanges)1 Datatype (io.jmix.core.metamodel.datatype.Datatype)1 DatatypeRegistry (io.jmix.core.metamodel.datatype.DatatypeRegistry)1 EnumClass (io.jmix.core.metamodel.datatype.impl.EnumClass)1 MetaClass (io.jmix.core.metamodel.model.MetaClass)1 Range (io.jmix.core.metamodel.model.Range)1 EntityOp (io.jmix.core.security.EntityOp)1