Search in sources :

Example 1 with Entity

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;
}
Also used : Entity(dev.morphia.annotations.Entity) EntityModel(dev.morphia.mapping.codec.pojo.EntityModel) Document(org.bson.Document)

Example 2 with Entity

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;
}
Also used : Entity(dev.morphia.annotations.Entity) EntityModel(dev.morphia.mapping.codec.pojo.EntityModel) ArrayList(java.util.ArrayList) Document(org.bson.Document)

Example 3 with Entity

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);
}
Also used : MapperOptions(dev.morphia.mapping.MapperOptions) ExternalEntity(dev.morphia.annotations.experimental.ExternalEntity) Entity(dev.morphia.annotations.Entity) ExternalEntity(dev.morphia.annotations.experimental.ExternalEntity) Embedded(dev.morphia.annotations.Embedded)

Example 4 with Entity

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;
}
Also used : ExternalEntity(dev.morphia.annotations.experimental.ExternalEntity) Entity(dev.morphia.annotations.Entity) WriteConcern(com.mongodb.WriteConcern) EntityModel(dev.morphia.mapping.codec.pojo.EntityModel) Nullable(com.mongodb.lang.Nullable)

Example 5 with Entity

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));
    }
}
Also used : ExternalEntity(dev.morphia.annotations.experimental.ExternalEntity) Entity(dev.morphia.annotations.Entity) EntityModel(dev.morphia.mapping.codec.pojo.EntityModel) ArrayList(java.util.ArrayList) Document(org.bson.Document)

Aggregations

Entity (dev.morphia.annotations.Entity)8 EntityModel (dev.morphia.mapping.codec.pojo.EntityModel)6 ExternalEntity (dev.morphia.annotations.experimental.ExternalEntity)3 Document (org.bson.Document)3 Embedded (dev.morphia.annotations.Embedded)2 TestEntity (dev.morphia.test.models.TestEntity)2 ThirdPartyEntity (dev.morphia.test.models.external.ThirdPartyEntity)2 VersionedChildEntity (dev.morphia.test.models.versioned.VersionedChildEntity)2 ArrayList (java.util.ArrayList)2 Test (org.testng.annotations.Test)2 WriteConcern (com.mongodb.WriteConcern)1 Nullable (com.mongodb.lang.Nullable)1 MapperOptions (dev.morphia.mapping.MapperOptions)1 HoldsUnannotated (dev.morphia.test.models.external.HoldsUnannotated)1 ThirdPartyEmbedded (dev.morphia.test.models.external.ThirdPartyEmbedded)1