All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redhat.lightblue.mongo.crud.MongoSequenceSupport Maven / Gradle / Ivy

/*
 Copyright 2013 Red Hat, Inc. and/or its affiliates.

 This file is part of lightblue.

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
package com.redhat.lightblue.mongo.crud;

import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mongodb.DB;
import com.mongodb.DBCollection;

import com.redhat.lightblue.metadata.ValueGenerator;
import com.redhat.lightblue.mongo.common.MongoDataStore;
import com.redhat.lightblue.metadata.EntityMetadata;

import com.redhat.lightblue.util.Error;
import com.redhat.lightblue.extensions.valuegenerator.ValueGeneratorSupport;

/**
 * This class performs the interface adaptation between MongoSequence and
 * ValueGeneratorSupport. When a value generator is called from the mediator,
 * this translates that call to MongoSequence APIs.
 *
 * The mongo sequence support recognizes these properties in the value
 * generator:
 *
 * 
    * *
  • name: Name of the sequence. Required parameter. Each unique name * corresponds to a document in the sequences collection.
  • * *
  • collection: Optional parameter, if ommitted, "sequences" is assumed. * Gives the collection name to store the document for this sequence.
  • * *
  • initialValue: Optional parameter, if ommitted, 1 is assumed. Gives the * initial value of the sequence.
  • * *
  • increment: Optional parameter, if ommitted, 1 is assumed. Gives the * increment value of the sequence.
  • * *
*/ public class MongoSequenceSupport implements ValueGeneratorSupport { private static final Logger LOGGER = LoggerFactory.getLogger(MongoSequenceSupport.class); private final MongoCRUDController controller; public static final String DEFAULT_COLLECTION_NAME = "sequences"; public static final String PROP_NAME = "name"; public static final String PROP_COLLECTION = "collection"; public static final String PROP_INITIAL_VALUE = "initialValue"; public static final String PROP_INCREMENT = "increment"; private static final ValueGenerator.ValueGeneratorType[] TYPES = {ValueGenerator.ValueGeneratorType.IntSequence}; public MongoSequenceSupport(MongoCRUDController controller) { this.controller = controller; } @Override public ValueGenerator.ValueGeneratorType[] getSupportedGeneratorTypes() { return TYPES; } @Override public Object generateValue(EntityMetadata md, ValueGenerator generator) { Properties p = generator.getProperties(); // We expect to see at least a name for the generator String name = p.getProperty(PROP_NAME); if (name == null) { throw Error.get(MongoCrudConstants.ERR_NO_SEQUENCE_NAME); } String collection = p.getProperty(PROP_COLLECTION); if (collection == null) { collection = DEFAULT_COLLECTION_NAME; } String initialValueStr = p.getProperty(PROP_INITIAL_VALUE); long initialValue; if (initialValueStr == null) { initialValue = 1; } else { initialValue = Long.valueOf(initialValueStr).longValue(); } String incrementStr = p.getProperty(PROP_INCREMENT); long increment; if (incrementStr == null) { increment = 1; } else { increment = Long.valueOf(incrementStr).longValue(); } DB db = controller.getDbResolver().get((MongoDataStore) md.getDataStore()); DBCollection coll = db.getCollection(collection); MongoSequenceGenerator gen = new MongoSequenceGenerator(coll); return gen.getNextSequenceValue(name, initialValue, increment); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy