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();
}
}
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;
}
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);
}
}
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);
}
}
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();
}
}
Aggregations