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

org.ssssssss.magicapi.modules.MongoModule Maven / Gradle / Ivy

There is a newer version: 2.1.1
Show newest version
package org.ssssssss.magicapi.modules;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.ssssssss.magicapi.config.MagicModule;
import org.ssssssss.script.reflection.AbstractReflection;
import org.ssssssss.script.reflection.JavaInvoker;

import java.lang.reflect.Method;
import java.util.HashMap;

/**
 * mongo模块
 */
public class MongoModule extends HashMap implements MagicModule {

	private static final Logger logger = LoggerFactory.getLogger(MongoModule.class);

	private final MongoTemplate mongoTemplate;
	private final JavaInvoker mongoDbFactoryInvoker;
	private JavaInvoker invoker;

	public MongoModule(MongoTemplate mongoTemplate) {
		this.mongoTemplate = mongoTemplate;
		AbstractReflection reflection = AbstractReflection.getInstance();
		mongoDbFactoryInvoker = reflection.getMethod(this.mongoTemplate, "getMongoDbFactory");
		if (mongoDbFactoryInvoker != null) {
			try {
				Object factory = mongoDbFactoryInvoker.invoke0(this.mongoTemplate, null);
				invoker = reflection.getMethod(factory, "getDb", StringUtils.EMPTY);
				if (invoker == null) {
					invoker = reflection.getMethod(factory, "getMongoDatabase", StringUtils.EMPTY);
				}
			} catch (Throwable e) {
				logger.error("mongo模块初始化失败", e);
			}
		} else {
			logger.error("mongo模块初始化失败");
		}
	}

	@Override
	public Object get(Object databaseName) {
		return databaseName == null ? null : new HashMap>() {
			@Override
			public MongoCollection get(Object collection) {
				if (collection == null) {
					return null;
				}
				try {
					Object factory = mongoDbFactoryInvoker.invoke0(mongoTemplate, null);
					MongoDatabase database = (MongoDatabase) invoker.invoke0(factory, null, databaseName.toString());
					return database.getCollection(collection.toString());
				} catch (Throwable throwable) {
					throw new RuntimeException(throwable);
				}
			}
		};
	}

	@Override
	public String getModuleName() {
		return "mongo";
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy