use of dev.morphia.annotations.Entity in project morphia by mongodb.
the class Projection method project.
private Document project(Mapper mapper, Class<?> clazz) {
Document projection = new Document();
iterate(mapper, projection, clazz, includes, 1);
iterate(mapper, projection, clazz, excludes, 0);
final EntityModel model = mapper.getEntityModel(clazz);
Entity entityAnnotation = model.getEntityAnnotation();
if (isIncluding() && entityAnnotation != null && entityAnnotation.useDiscriminator()) {
projection.put(mapper.getOptions().getDiscriminatorKey(), 1);
}
return projection;
}
use of dev.morphia.annotations.Entity in project morphia by mongodb.
the class LegacyQuery method toDocument.
/**
* Converts the query to a Document and updates for any discriminator values as my be necessary
*
* @return the query
* @morphia.internal
*/
@Override
public Document toDocument() {
final Document query = getQueryDocument();
EntityModel model = datastore.getMapper().getEntityModel(getEntityClass());
Entity entityAnnotation = model.getEntityAnnotation();
if (entityAnnotation != null && entityAnnotation.useDiscriminator() && !query.containsKey("_id") && !query.containsKey(model.getDiscriminatorKey())) {
List<EntityModel> subtypes = datastore.getMapper().getEntityModel(getEntityClass()).getSubtypes();
List<String> values = new ArrayList<>();
values.add(model.getDiscriminator());
for (EntityModel subtype : subtypes) {
values.add(subtype.getDiscriminator());
}
query.put(model.getDiscriminatorKey(), new Document("$in", values));
}
return query;
}
use of dev.morphia.annotations.Entity in project morphia by mongodb.
the class MorphiaDefaultsConvention method apply.
@Override
public void apply(Mapper mapper, EntityModelBuilder modelBuilder) {
MapperOptions options = mapper.getOptions();
final Entity entity = modelBuilder.getAnnotation(Entity.class);
final Embedded embedded = modelBuilder.getAnnotation(Embedded.class);
final ExternalEntity externalEntity = modelBuilder.getAnnotation(ExternalEntity.class);
if (entity != null) {
modelBuilder.enableDiscriminator(entity.useDiscriminator());
modelBuilder.discriminatorKey(applyDefaults(entity.discriminatorKey(), options.getDiscriminatorKey()));
} else if (externalEntity != null) {
modelBuilder.enableDiscriminator(externalEntity.useDiscriminator());
modelBuilder.discriminatorKey(applyDefaults(externalEntity.discriminatorKey(), options.getDiscriminatorKey()));
modelBuilder.annotation(EntityBuilder.entityBuilder().cap(externalEntity.cap()).concern(externalEntity.concern()).discriminator(externalEntity.discriminator()).discriminatorKey(externalEntity.discriminatorKey()).value(externalEntity.value()).useDiscriminator(externalEntity.useDiscriminator()).build());
modelBuilder.targetType(externalEntity.target());
} else {
modelBuilder.enableDiscriminator(embedded == null || embedded.useDiscriminator());
modelBuilder.discriminatorKey(applyDefaults(embedded != null ? embedded.discriminatorKey() : Mapper.IGNORED_FIELDNAME, options.getDiscriminatorKey()));
}
options.getDiscriminator().apply(modelBuilder);
}
use of dev.morphia.annotations.Entity in project morphia by mongodb.
the class Mapper method getWriteConcern.
/**
* Gets the write concern for entity or returns the default write concern for this datastore
*
* @param clazz the class to use when looking up the WriteConcern
* @return the write concern for the type
* @morphia.internal
*/
@Nullable
public WriteConcern getWriteConcern(Class clazz) {
WriteConcern wc = null;
EntityModel entityModel = getEntityModel(clazz);
if (entityModel != null) {
final Entity entityAnn = entityModel.getEntityAnnotation();
if (entityAnn != null && !entityAnn.concern().isEmpty()) {
wc = WriteConcern.valueOf(entityAnn.concern());
}
}
return wc;
}
use of dev.morphia.annotations.Entity in project morphia by mongodb.
the class Mapper method updateQueryWithDiscriminators.
/**
* Updates a query with any discriminators from subtypes if polymorphic queries are enabled
*
* @param model the query model
* @param query the query document
*/
public void updateQueryWithDiscriminators(EntityModel model, Document query) {
Entity annotation = model.getEntityAnnotation();
if (annotation != null && annotation.useDiscriminator() && !query.containsKey("_id") && !query.containsKey(model.getDiscriminatorKey())) {
List<EntityModel> subtypes = model.getSubtypes();
List<String> values = new ArrayList<>();
values.add(model.getDiscriminator());
if (options.isEnablePolymorphicQueries()) {
for (EntityModel subtype : subtypes) {
values.add(subtype.getDiscriminator());
}
}
query.put(model.getDiscriminatorKey(), new Document("$in", values));
}
}
Aggregations