Search in sources :

Example 76 with Entity

use of io.jmix.core.Entity in project jmix by jmix-framework.

the class NonDetachedTest method testCreateNew_DM.

@Test
public void testCreateNew_DM() throws Exception {
    // check versioned entity
    Group companyGroupCopy = metadata.getTools().copy(companyGroup);
    assertTrue(entityStates.isNew(companyGroupCopy));
    entityStates.makeDetached(companyGroupCopy);
    User user = persistence.callInTransaction((em) -> em.find(User.class, this.user.getId()));
    User userCopy = metadata.getTools().copy(user);
    assertNull(userCopy.getGroup());
    assertTrue(entityStates.isNew(userCopy));
    entityStates.makeDetached(userCopy);
    userCopy.setId(UuidProvider.createUuid());
    userCopy.setVersion(null);
    userCopy.setGroup(companyGroupCopy);
    userCopy.setName("new name");
    try {
        AppBeans.get(DataManager.class).commit(userCopy);
        user = persistence.callInTransaction((em) -> em.find(User.class, userCopy.getId()));
        assertEquals("new name", user.getName());
    } finally {
        testSupport.deleteRecord(userCopy);
    }
    // check non-versioned entity
    Server server = metadata.create(Server.class);
    server.setName("server-" + server.getId());
    assertTrue(entityStates.isNew(server));
    entityStates.makeDetached(server);
    try {
        AppBeans.get(DataManager.class).commit(server);
        Server loaded = persistence.callInTransaction(em -> em.find(Server.class, server.getId()));
        assertNotNull(loaded);
    } finally {
        testSupport.deleteRecord(server);
    }
}
Also used : UuidProvider(io.jmix.core.UuidProvider) BeforeEach(org.junit.jupiter.api.BeforeEach) Customer(com.haulmont.cuba.core.model.sales.Customer) Date(java.util.Date) Autowired(org.springframework.beans.factory.annotation.Autowired) CoreTest(com.haulmont.cuba.core.testsupport.CoreTest) AppBeans(com.haulmont.cuba.core.global.AppBeans) Group(com.haulmont.cuba.core.model.common.Group) Metadata(com.haulmont.cuba.core.global.Metadata) JdbcTemplate(org.springframework.jdbc.core.JdbcTemplate) HashSet(java.util.HashSet) BigDecimal(java.math.BigDecimal) CascadeDeletionPolicyEntity(com.haulmont.cuba.core.model.CascadeDeletionPolicyEntity) DataManager(com.haulmont.cuba.core.global.DataManager) Order(com.haulmont.cuba.core.model.sales.Order) FetchPlan(io.jmix.core.FetchPlan) Server(com.haulmont.cuba.core.model.common.Server) DateUtils(org.apache.commons.lang3.time.DateUtils) Test(org.junit.jupiter.api.Test) View(com.haulmont.cuba.core.global.View) AfterEach(org.junit.jupiter.api.AfterEach) TestSupport(com.haulmont.cuba.core.testsupport.TestSupport) EntityStates(io.jmix.core.EntityStates) Assertions(org.junit.jupiter.api.Assertions) Entity(io.jmix.core.Entity) User(com.haulmont.cuba.core.model.common.User) Group(com.haulmont.cuba.core.model.common.Group) User(com.haulmont.cuba.core.model.common.User) Server(com.haulmont.cuba.core.model.common.Server) DataManager(com.haulmont.cuba.core.global.DataManager) CoreTest(com.haulmont.cuba.core.testsupport.CoreTest) Test(org.junit.jupiter.api.Test)

Example 77 with Entity

use of io.jmix.core.Entity in project jmix by jmix-framework.

the class TestAfterCompleteTxListener method testCommit.

private void testCommit(boolean committed, Collection<Entity> detachedEntities) {
    assertTrue(committed);
    User user = null;
    for (Entity entity : detachedEntities) {
        assertTrue(entityStates.isDetached(entity));
        if (entity instanceof User && ((User) entity).getLogin().startsWith("TxLstnrTst-1-"))
            user = (User) entity;
    }
    if (user != null) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(persistence.getDataSource());
        jdbcTemplate.update("update TEST_USER set NAME = 'updated by TestAfterCompleteTxListener' where ID = ?", user.getId().toString());
    }
}
Also used : Entity(io.jmix.core.Entity) User(com.haulmont.cuba.core.model.common.User) JdbcTemplate(org.springframework.jdbc.core.JdbcTemplate)

Example 78 with Entity

use of io.jmix.core.Entity in project jmix by jmix-framework.

the class EnhancementCheckDescriptorProcessor method process.

@Override
public void process(DescriptorProcessorContext context) {
    ClassDescriptor descriptor = context.getDescriptor();
    List<String> missingInterfaces = enhancingChecks.entrySet().stream().filter(entry -> !entry.getValue().test(descriptor.getJavaClass())).map(Map.Entry::getKey).map(Class::getSimpleName).collect(Collectors.toList());
    if (!missingInterfaces.isEmpty()) {
        String message = String.format("Entity class %s is missing some of enhancing interfaces:%s", descriptor.getJavaClass().getSimpleName(), Joiner.on(",").join(missingInterfaces));
        log.error("\n=================================================================" + "\nProblems with entity enhancement detected:\n{}" + "\n=================================================================", message);
        if (!Boolean.parseBoolean(environment.getProperty("jmix.data.disable-entity-enhancement-check"))) {
            throw new EntityNotEnhancedException(message);
        }
    }
}
Also used : Logger(org.slf4j.Logger) ImmutableMap(com.google.common.collect.ImmutableMap) Predicate(java.util.function.Predicate) PersistenceWeaved(org.eclipse.persistence.internal.weaving.PersistenceWeaved) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) DescriptorProcessor(io.jmix.eclipselink.persistence.DescriptorProcessor) ArrayUtils(org.apache.commons.lang3.ArrayUtils) Collectors(java.util.stream.Collectors) JmixSettersEnhanced(io.jmix.core.entity.JmixSettersEnhanced) Component(org.springframework.stereotype.Component) List(java.util.List) PersistenceObject(org.eclipse.persistence.internal.descriptors.PersistenceObject) Environment(org.springframework.core.env.Environment) PersistenceWeavedFetchGroups(org.eclipse.persistence.internal.weaving.PersistenceWeavedFetchGroups) Map(java.util.Map) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) DescriptorProcessorContext(io.jmix.eclipselink.persistence.DescriptorProcessorContext) Entity(io.jmix.core.Entity) DisableEnhancing(io.jmix.core.entity.annotation.DisableEnhancing) Joiner(com.google.common.base.Joiner) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor)

Example 79 with Entity

use of io.jmix.core.Entity in project jmix by jmix-framework.

the class JpaCacheSupport method evictEntity.

private void evictEntity(Object entity) {
    if (entity instanceof Entity && !entityStates.isNew(entity)) {
        String storeName = metadata.getClass(entity).getStore().getName();
        EntityManagerFactory entityManagerFactory = storeAwareLocator.getEntityManagerFactory(storeName);
        JpaCache cache = (JpaCache) entityManagerFactory.getCache();
        cache.evict(entity, true);
    }
}
Also used : Entity(io.jmix.core.Entity) JpaCache(org.eclipse.persistence.jpa.JpaCache) EntityManagerFactory(javax.persistence.EntityManagerFactory)

Example 80 with Entity

use of io.jmix.core.Entity in project jmix by jmix-framework.

the class ResponseBuilder method buildResponse.

/**
 * Convert loaded entity to data fetcher return format (Map&lt;String, Object&gt;)
 *
 * @param entity loaded entity
 * @param fetchPlan loaded entity properties
 * @param metaClass entity meta class
 * @param props we need pass full set of properties to have information about system props such '_instanceName'
 * @return entity converted to response as Map&lt;String, Object&gt;
 */
public Map<String, Object> buildResponse(Entity entity, FetchPlan fetchPlan, MetaClass metaClass, Set<String> props) {
    Map<String, Object> entityAsMap = new HashMap<>();
    // check and evaluate _instanceName, if required
    if (environmentUtils.hasInstanceNameProperty(props)) {
        entityAsMap.put(NamingUtils.SYS_ATTR_INSTANCE_NAME, metadataTools.getInstanceName(entity));
    }
    // must include id
    writeIdField(entity, entityAsMap);
    // compose result object by iterating over fetch plan props
    fetchPlan.getProperties().forEach(prop -> {
        String propName = prop.getName();
        MetaProperty metaProperty = metaClass.getProperty(propName);
        Object fieldValue = EntityValues.getValue(entity, propName);
        Range propertyRange = metaProperty.getRange();
        if (fieldValue == null) {
            entityAsMap.put(propName, null);
            return;
        }
        if (propertyRange.isDatatype() || propertyRange.isEnum()) {
            entityAsMap.put(propName, fieldValue);
            return;
        }
        if (propertyRange.isClass()) {
            Set<String> nestedProps = environmentUtils.getNestedProps(props, propName);
            if (fieldValue instanceof Entity) {
                entityAsMap.put(propName, buildResponse((Entity) fieldValue, prop.getFetchPlan(), propertyRange.asClass(), nestedProps));
                return;
            }
            if (fieldValue instanceof Collection) {
                Collection<Object> values = ((Collection<Entity>) fieldValue).stream().map(e -> buildResponse(e, prop.getFetchPlan(), propertyRange.asClass(), nestedProps)).collect(Collectors.toList());
                entityAsMap.put(propName, values);
                return;
            }
        }
        log.warn("buildResponse: failed for {}.{} unsupported range type ", metaClass.getName(), prop.getName());
        throw new IllegalStateException("Unsupported range type " + propertyRange);
    });
    return entityAsMap;
}
Also used : NamingUtils(io.jmix.graphql.NamingUtils) MetaClass(io.jmix.core.metamodel.model.MetaClass) Logger(org.slf4j.Logger) FetchPlan(io.jmix.core.FetchPlan) Collection(java.util.Collection) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Set(java.util.Set) Metadata(io.jmix.core.Metadata) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) EntityValues(io.jmix.core.entity.EntityValues) Component(org.springframework.stereotype.Component) Map(java.util.Map) Entity(io.jmix.core.Entity) Range(io.jmix.core.metamodel.model.Range) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) MetadataTools(io.jmix.core.MetadataTools) ID_ATTR_NAME(io.jmix.graphql.NamingUtils.ID_ATTR_NAME) Entity(io.jmix.core.Entity) HashMap(java.util.HashMap) Collection(java.util.Collection) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) Range(io.jmix.core.metamodel.model.Range)

Aggregations

Entity (io.jmix.core.Entity)94 MetaClass (io.jmix.core.metamodel.model.MetaClass)20 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)18 CommitContext (com.haulmont.cuba.core.global.CommitContext)10 CoreTest (com.haulmont.cuba.core.testsupport.CoreTest)10 CollectionDatasource (com.haulmont.cuba.gui.data.CollectionDatasource)10 Test (org.junit.jupiter.api.Test)10 Server (com.haulmont.cuba.core.model.common.Server)8 Datasource (com.haulmont.cuba.gui.data.Datasource)8 Collectors (java.util.stream.Collectors)8 Autowired (org.springframework.beans.factory.annotation.Autowired)8 FetchPlan (io.jmix.core.FetchPlan)7 Logger (org.slf4j.Logger)7 Metadata (io.jmix.core.Metadata)6 MetadataTools (io.jmix.core.MetadataTools)6 EntityValues (io.jmix.core.entity.EntityValues)6 java.util (java.util)6 ArrayList (java.util.ArrayList)6 Nullable (javax.annotation.Nullable)6 LoggerFactory (org.slf4j.LoggerFactory)6