Search in sources :

Example 6 with NoSuchEntityException

use of org.qi4j.api.unitofwork.NoSuchEntityException in project qi4j-sdk by Qi4j.

the class RemovalTest method givenEntityCreatedWhenRemovingEntityThenFindNewEntityShouldNotExist.

@Test
public void givenEntityCreatedWhenRemovingEntityThenFindNewEntityShouldNotExist() throws Exception {
    UnitOfWork uow = module.newUnitOfWork();
    try {
        EntityBuilder<Abc> builder = uow.newEntityBuilder(Abc.class, "123");
        builder.instance().name().set("Niclas");
        builder.newInstance();
        uow.complete();
        uow = module.newUnitOfWork();
        Abc abc = uow.get(Abc.class, "123");
        assertEquals("Niclas", abc.name().get());
        uow.remove(abc);
        uow.complete();
        uow = module.newUnitOfWork();
        uow.get(Abc.class, "123");
        fail("This '123' entity should not exist.");
    } catch (NoSuchEntityException e) {
    // Expected.
    } finally {
        uow.discard();
    }
}
Also used : UnitOfWork(org.qi4j.api.unitofwork.UnitOfWork) NoSuchEntityException(org.qi4j.api.unitofwork.NoSuchEntityException) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Example 7 with NoSuchEntityException

use of org.qi4j.api.unitofwork.NoSuchEntityException in project qi4j-sdk by Qi4j.

the class AbstractDataSourceServiceImporterMixin method getConfiguration.

private DataSourceConfigurationValue getConfiguration(String identity) throws InstantiationException {
    DataSourceConfigurationValue config = configs.get(identity);
    if (config == null) {
        UnitOfWork uow = module.newUnitOfWork(UsecaseBuilder.newUsecase("Create DataSource pool configuration"));
        try {
            DataSourceConfiguration configEntity = uow.get(DataSourceConfiguration.class, identity);
            config = entityToValue.convert(DataSourceConfigurationValue.class, configEntity);
        } catch (NoSuchEntityException e) {
            EntityBuilder<DataSourceConfiguration> configBuilder = uow.newEntityBuilder(DataSourceConfiguration.class, identity);
            // Check for defaults
            String s = identity + ".properties";
            InputStream asStream = DataSourceConfiguration.class.getClassLoader().getResourceAsStream(s);
            if (asStream != null) {
                try {
                    PropertyMapper.map(asStream, configBuilder.instance());
                } catch (IOException e1) {
                    uow.discard();
                    InstantiationException exception = new InstantiationException("Could not read underlying Properties file.");
                    exception.initCause(e1);
                    throw exception;
                }
            }
            DataSourceConfiguration configEntity = configBuilder.newInstance();
            config = entityToValue.convert(DataSourceConfigurationValue.class, configEntity);
            // save
            try {
                uow.complete();
            } catch (UnitOfWorkCompletionException e2) {
                InstantiationException exception = new InstantiationException("Could not save configuration in JavaPreferences.");
                exception.initCause(e2);
                throw exception;
            }
        }
        configs.put(identity, config);
    }
    return config;
}
Also used : UnitOfWork(org.qi4j.api.unitofwork.UnitOfWork) UnitOfWorkCompletionException(org.qi4j.api.unitofwork.UnitOfWorkCompletionException) InputStream(java.io.InputStream) EntityBuilder(org.qi4j.api.entity.EntityBuilder) IOException(java.io.IOException) NoSuchEntityException(org.qi4j.api.unitofwork.NoSuchEntityException)

Example 8 with NoSuchEntityException

use of org.qi4j.api.unitofwork.NoSuchEntityException in project qi4j-sdk by Qi4j.

the class PreferencesEntityStoreMixin method entityStateOf.

@Override
public EntityState entityStateOf(EntityStoreUnitOfWork unitOfWork, EntityReference identity) {
    try {
        DefaultEntityStoreUnitOfWork desuw = (DefaultEntityStoreUnitOfWork) unitOfWork;
        Module module = desuw.module();
        if (!root.nodeExists(identity.identity())) {
            throw new NoSuchEntityException(identity, UnknownType.class);
        }
        Preferences entityPrefs = root.node(identity.identity());
        String type = entityPrefs.get("type", null);
        EntityStatus status = EntityStatus.LOADED;
        EntityDescriptor entityDescriptor = module.entityDescriptor(type);
        if (entityDescriptor == null) {
            throw new EntityTypeNotFoundException(type);
        }
        Map<QualifiedName, Object> properties = new HashMap<>();
        Preferences propsPrefs = null;
        for (PropertyDescriptor persistentPropertyDescriptor : entityDescriptor.state().properties()) {
            if (persistentPropertyDescriptor.qualifiedName().name().equals("identity")) {
                // Fake identity property
                properties.put(persistentPropertyDescriptor.qualifiedName(), identity.identity());
                continue;
            }
            if (propsPrefs == null) {
                propsPrefs = entityPrefs.node("properties");
            }
            ValueType propertyType = persistentPropertyDescriptor.valueType();
            Class<?> mainType = propertyType.mainType();
            if (Number.class.isAssignableFrom(mainType)) {
                if (mainType.equals(Long.class)) {
                    properties.put(persistentPropertyDescriptor.qualifiedName(), this.getNumber(propsPrefs, persistentPropertyDescriptor, LONG_PARSER));
                } else if (mainType.equals(Integer.class)) {
                    properties.put(persistentPropertyDescriptor.qualifiedName(), this.getNumber(propsPrefs, persistentPropertyDescriptor, INT_PARSER));
                } else if (mainType.equals(Double.class)) {
                    properties.put(persistentPropertyDescriptor.qualifiedName(), this.getNumber(propsPrefs, persistentPropertyDescriptor, DOUBLE_PARSER));
                } else if (mainType.equals(Float.class)) {
                    properties.put(persistentPropertyDescriptor.qualifiedName(), this.getNumber(propsPrefs, persistentPropertyDescriptor, FLOAT_PARSER));
                } else {
                    // Load as string even though it's a number
                    String json = propsPrefs.get(persistentPropertyDescriptor.qualifiedName().name(), null);
                    Object value;
                    if (json == null) {
                        value = null;
                    } else {
                        value = valueSerialization.deserialize(persistentPropertyDescriptor.valueType(), json);
                    }
                    properties.put(persistentPropertyDescriptor.qualifiedName(), value);
                }
            } else if (mainType.equals(Boolean.class)) {
                Boolean initialValue = (Boolean) persistentPropertyDescriptor.initialValue(module);
                properties.put(persistentPropertyDescriptor.qualifiedName(), propsPrefs.getBoolean(persistentPropertyDescriptor.qualifiedName().name(), initialValue == null ? false : initialValue));
            } else if (propertyType instanceof ValueCompositeType || propertyType instanceof MapType || propertyType instanceof CollectionType || propertyType instanceof EnumType) {
                String json = propsPrefs.get(persistentPropertyDescriptor.qualifiedName().name(), null);
                Object value;
                if (json == null) {
                    value = null;
                } else {
                    value = valueSerialization.deserialize(persistentPropertyDescriptor.valueType(), json);
                }
                properties.put(persistentPropertyDescriptor.qualifiedName(), value);
            } else {
                String json = propsPrefs.get(persistentPropertyDescriptor.qualifiedName().name(), null);
                if (json == null) {
                    if (persistentPropertyDescriptor.initialValue(module) != null) {
                        properties.put(persistentPropertyDescriptor.qualifiedName(), persistentPropertyDescriptor.initialValue(module));
                    } else {
                        properties.put(persistentPropertyDescriptor.qualifiedName(), null);
                    }
                } else {
                    Object value = valueSerialization.deserialize(propertyType, json);
                    properties.put(persistentPropertyDescriptor.qualifiedName(), value);
                }
            }
        }
        // Associations
        Map<QualifiedName, EntityReference> associations = new HashMap<>();
        Preferences assocs = null;
        for (AssociationDescriptor associationType : entityDescriptor.state().associations()) {
            if (assocs == null) {
                assocs = entityPrefs.node("associations");
            }
            String associatedEntity = assocs.get(associationType.qualifiedName().name(), null);
            EntityReference value = associatedEntity == null ? null : EntityReference.parseEntityReference(associatedEntity);
            associations.put(associationType.qualifiedName(), value);
        }
        // ManyAssociations
        Map<QualifiedName, List<EntityReference>> manyAssociations = new HashMap<>();
        Preferences manyAssocs = null;
        for (AssociationDescriptor manyAssociationType : entityDescriptor.state().manyAssociations()) {
            if (manyAssocs == null) {
                manyAssocs = entityPrefs.node("manyassociations");
            }
            List<EntityReference> references = new ArrayList<>();
            String entityReferences = manyAssocs.get(manyAssociationType.qualifiedName().name(), null);
            if (entityReferences == null) {
                // ManyAssociation not found, default to empty one
                manyAssociations.put(manyAssociationType.qualifiedName(), references);
            } else {
                String[] refs = entityReferences.split("\n");
                for (String ref : refs) {
                    EntityReference value = ref == null ? null : EntityReference.parseEntityReference(ref);
                    references.add(value);
                }
                manyAssociations.put(manyAssociationType.qualifiedName(), references);
            }
        }
        // NamedAssociations
        Map<QualifiedName, Map<String, EntityReference>> namedAssociations = new HashMap<>();
        Preferences namedAssocs = null;
        for (AssociationDescriptor namedAssociationType : entityDescriptor.state().namedAssociations()) {
            if (namedAssocs == null) {
                namedAssocs = entityPrefs.node("namedassociations");
            }
            Map<String, EntityReference> references = new LinkedHashMap<>();
            String entityReferences = namedAssocs.get(namedAssociationType.qualifiedName().name(), null);
            if (entityReferences == null) {
                // NamedAssociation not found, default to empty one
                namedAssociations.put(namedAssociationType.qualifiedName(), references);
            } else {
                String[] namedRefs = entityReferences.split("\n");
                if (namedRefs.length % 2 != 0) {
                    throw new EntityStoreException("Invalid NamedAssociation storage format");
                }
                for (int idx = 0; idx < namedRefs.length; idx += 2) {
                    String name = namedRefs[idx];
                    String ref = namedRefs[idx + 1];
                    references.put(name, EntityReference.parseEntityReference(ref));
                }
                namedAssociations.put(namedAssociationType.qualifiedName(), references);
            }
        }
        return new DefaultEntityState(desuw, entityPrefs.get("version", ""), entityPrefs.getLong("modified", unitOfWork.currentTime()), identity, status, entityDescriptor, properties, associations, manyAssociations, namedAssociations);
    } catch (ValueSerializationException | BackingStoreException e) {
        throw new EntityStoreException(e);
    }
}
Also used : EntityTypeNotFoundException(org.qi4j.api.unitofwork.EntityTypeNotFoundException) DefaultEntityState(org.qi4j.spi.entitystore.helpers.DefaultEntityState) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) ValueSerializationException(org.qi4j.api.value.ValueSerializationException) AssociationDescriptor(org.qi4j.api.association.AssociationDescriptor) MapType(org.qi4j.api.type.MapType) LinkedHashMap(java.util.LinkedHashMap) EnumType(org.qi4j.api.type.EnumType) CollectionType(org.qi4j.api.type.CollectionType) EntityReference(org.qi4j.api.entity.EntityReference) DefaultEntityStoreUnitOfWork(org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork) EntityStatus(org.qi4j.spi.entity.EntityStatus) List(java.util.List) ArrayList(java.util.ArrayList) EntityStoreException(org.qi4j.spi.entitystore.EntityStoreException) Preferences(java.util.prefs.Preferences) PropertyDescriptor(org.qi4j.api.property.PropertyDescriptor) ValueType(org.qi4j.api.type.ValueType) QualifiedName(org.qi4j.api.common.QualifiedName) BackingStoreException(java.util.prefs.BackingStoreException) NoSuchEntityException(org.qi4j.api.unitofwork.NoSuchEntityException) EntityDescriptor(org.qi4j.api.entity.EntityDescriptor) Module(org.qi4j.api.structure.Module) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ValueCompositeType(org.qi4j.api.type.ValueCompositeType)

Example 9 with NoSuchEntityException

use of org.qi4j.api.unitofwork.NoSuchEntityException in project qi4j-sdk by Qi4j.

the class ContextResource method select.

protected <T> T select(Class<T> entityClass, String id) throws ResourceException {
    try {
        T composite = module.currentUnitOfWork().get(entityClass, id);
        current().select(composite);
        return composite;
    } catch (EntityTypeNotFoundException | NoSuchEntityException e) {
        throw new ResourceException(Status.CLIENT_ERROR_NOT_FOUND);
    }
}
Also used : EntityTypeNotFoundException(org.qi4j.api.unitofwork.EntityTypeNotFoundException) ResourceException(org.restlet.resource.ResourceException) NoSuchEntityException(org.qi4j.api.unitofwork.NoSuchEntityException)

Example 10 with NoSuchEntityException

use of org.qi4j.api.unitofwork.NoSuchEntityException in project qi4j-sdk by Qi4j.

the class RestTest method givenExistingIdentityWhenExecutingDeleteCommandThenEntityIsRemoved.

@Test
public void givenExistingIdentityWhenExecutingDeleteCommandThenEntityIsRemoved() throws Throwable {
    RestTester restTester = module.newObject(RestTester.class);
    restTester.deleteEntity("P1");
    UnitOfWork work = module.newUnitOfWork();
    try {
        PersonEntity entity = null;
        try {
            entity = work.get(PersonEntity.class, "P1");
        } catch (NoSuchEntityException expected) {
        // expected
        }
        assertNull("Entity not removed.", entity);
        work.complete();
    } finally {
        work.discard();
    }
}
Also used : UnitOfWork(org.qi4j.api.unitofwork.UnitOfWork) NoSuchEntityException(org.qi4j.api.unitofwork.NoSuchEntityException) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Aggregations

NoSuchEntityException (org.qi4j.api.unitofwork.NoSuchEntityException)10 UnitOfWork (org.qi4j.api.unitofwork.UnitOfWork)6 Test (org.junit.Test)5 AbstractQi4jTest (org.qi4j.test.AbstractQi4jTest)5 EntityTypeNotFoundException (org.qi4j.api.unitofwork.EntityTypeNotFoundException)3 EntityInstance (org.qi4j.runtime.entity.EntityInstance)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 BackingStoreException (java.util.prefs.BackingStoreException)1 Preferences (java.util.prefs.Preferences)1 AssociationDescriptor (org.qi4j.api.association.AssociationDescriptor)1 QualifiedName (org.qi4j.api.common.QualifiedName)1 EntityBuilder (org.qi4j.api.entity.EntityBuilder)1 EntityComposite (org.qi4j.api.entity.EntityComposite)1 EntityDescriptor (org.qi4j.api.entity.EntityDescriptor)1