Bladeren bron

新增`Map`到`Bson`的隐式转换,方便调用`mongo`相关`API`

mxd 3 jaren geleden
bovenliggende
commit
f8a81f6429
1 gewijzigde bestanden met toevoegingen van 16 en 1 verwijderingen
  1. 16 1
      magic-api/src/main/java/org/ssssssss/magicapi/modules/MongoModule.java

+ 16 - 1
magic-api/src/main/java/org/ssssssss/magicapi/modules/MongoModule.java

@@ -4,23 +4,27 @@ import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.Document;
+import org.bson.conversions.Bson;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.ssssssss.magicapi.config.MagicModule;
 import org.ssssssss.magicapi.model.Constants;
+import org.ssssssss.script.convert.ClassImplicitConvert;
 import org.ssssssss.script.reflection.JavaInvoker;
 import org.ssssssss.script.reflection.JavaReflection;
+import org.ssssssss.script.runtime.Variables;
 
 import java.lang.reflect.Method;
 import java.util.HashMap;
+import java.util.Map;
 
 /**
  * mongo模块
  *
  * @author mxd
  */
-public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter> implements MagicModule {
+public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter> implements MagicModule, ClassImplicitConvert {
 
 	private static final Logger logger = LoggerFactory.getLogger(MongoModule.class);
 
@@ -46,6 +50,7 @@ public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter
 		} else {
 			logger.error("mongo模块初始化失败");
 		}
+		JavaReflection.registerImplicitConvert(this);
 	}
 
 	@Override
@@ -66,6 +71,16 @@ public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter
 		return "mongo";
 	}
 
+	@Override
+	public boolean support(Class<?> from, Class<?> to) {
+		return Map.class.isAssignableFrom(from) && (Bson.class.isAssignableFrom(to));
+	}
+
+	@Override
+	public Object convert(Variables variables, Object source, Class<?> target) {
+		return new Document((Map<String, Object>) source);
+	}
+
 	public static class MongoDataBaseGetter extends HashMap<String, MongoCollection<Document>> {
 
 		MongoDatabase database;