/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.datastore.mongodb.dialect.impl;
import org.hibernate.ogm.datastore.document.options.AssociationStorageType;
import org.hibernate.ogm.datastore.mongodb.options.AssociationDocumentStorageType;
import org.hibernate.ogm.model.key.spi.AssociationKeyMetadata;
import org.hibernate.ogm.model.key.spi.AssociationKind;
import org.hibernate.ogm.model.key.spi.AssociationType;
/**
* Represents a strategy for storing associations in MongoDB. Provides an aggregated view on {@link AssociationKind} as
* well as the {@link AssociationStorageType} and {@link org.hibernate.ogm.datastore.mongodb.options.AssociationDocumentStorageType} options.
*
* @author Gunnar Morling
*/
public enum AssociationStorageStrategy {
IN_ENTITY, GLOBAL_COLLECTION, COLLECTION_PER_ASSOCIATION;
public static AssociationStorageStrategy getInstance(AssociationKeyMetadata keyMetadata, AssociationStorageType associationStorage, AssociationDocumentStorageType associationDocumentStorage) {
if ( keyMetadata.getAssociationType() == AssociationType.ONE_TO_ONE || keyMetadata.getAssociationKind() == AssociationKind.EMBEDDED_COLLECTION || associationStorage == AssociationStorageType.IN_ENTITY ) {
return IN_ENTITY;
}
else if ( associationDocumentStorage == AssociationDocumentStorageType.COLLECTION_PER_ASSOCIATION ) {
return COLLECTION_PER_ASSOCIATION;
}
else {
return GLOBAL_COLLECTION;
}
}
}