/* * Copyright 2014 Effektif GmbH. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.effektif.mongo; import com.effektif.workflow.api.model.Id; import com.effektif.workflow.api.model.WorkflowId; import com.effektif.workflow.api.model.WorkflowInstanceId; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import org.bson.types.ObjectId; import org.joda.time.LocalDateTime; import java.util.*; public abstract class MongoHelper { public static void writeId(Map<String,Object> o, String fieldName, String value) { o.put(fieldName, new ObjectId(value)); } public static void writeId(Map<String,Object> o, String fieldName, Id value) { o.put(fieldName, new ObjectId(value.toString())); } public static void writeIdOpt(Map<String,Object> o, String fieldName, String value) { if (value!=null) { o.put(fieldName, new ObjectId(value)); } } public static void writeIdOptNew(Map<String,Object> o, String fieldName, Id id) { if (id!=null) { o.put(fieldName, new ObjectId(id.getInternal())); } } public static void writeString(Map<String,Object> o, String fieldName, Object value) { writeObject(o, fieldName, value); } public static void writeStringOpt(Map<String,Object> o, String fieldName, String value) { writeObjectOpt(o, fieldName, value); } public static void writeLongOpt(Map<String,Object> o, String fieldName, Long value) { writeObjectOpt(o, fieldName, value); } public static void writeBooleanOpt(Map<String,Object> o, String fieldName, Object value) { writeObjectOpt(o, fieldName, value); } public static void writeObject(Map<String,Object> o, String fieldName, Object value) { o.put(fieldName, value); } public static void writeObjectOpt(Map<String,Object> o, String fieldName, Object value) { if (value!=null) { o.put(fieldName, value); } } public static void writeTimeOpt(Map<String,Object> o, String fieldName, LocalDateTime value) { if (value!=null) { o.put(fieldName, value.toDate()); } } public static void writeListElementOpt(Map<String,Object> o, String fieldName, Object element) { if (element!=null) { @SuppressWarnings("unchecked") List<Object> list = (List<Object>) o.get(fieldName); if (list == null) { list = new ArrayList<>(); o.put(fieldName, list); } list.add(element); } } @SuppressWarnings("unchecked") public static List<BasicDBObject> readList(BasicDBObject dbScope, String fieldName) { return (List<BasicDBObject>) dbScope.get(fieldName); } public static Object readObject(BasicDBObject dbObject, String fieldName) { return dbObject.get(fieldName); } public static BasicDBObject readBasicDBObject(BasicDBObject dbObject, String fieldName) { return (BasicDBObject) dbObject.get(fieldName); } public static String readId(BasicDBObject dbObject, String fieldName) { Object value = dbObject.get(fieldName); return value!=null ? value.toString() : null; } @SuppressWarnings("unchecked") public static Map<String, Object> readObjectMap(BasicDBObject dbObject, String fieldName) { return (Map<String,Object>) dbObject.get(fieldName); } public static String readString(BasicDBObject dbObject, String fieldName) { return (String) dbObject.get(fieldName); } public static WorkflowId readWorkflowId(BasicDBObject dbObject, String fieldName) { Object oid = dbObject.get(fieldName); return oid!=null ? new WorkflowId(oid.toString()) : null; } public static WorkflowInstanceId readWorkflowInstanceId(BasicDBObject dbObject, String fieldName) { Object oid = dbObject.get(fieldName); return oid!=null ? new WorkflowInstanceId(oid.toString()) : null; } public static Long readLong(BasicDBObject dbObject, String fieldName) { Object object = dbObject.get(fieldName); if (object==null) { return null; } if (object instanceof Long) { return (Long) object; } return ((Number) object).longValue(); } public static Boolean readBoolean(BasicDBObject dbObject, String fieldName) { return (Boolean) dbObject.get(fieldName); } public static LocalDateTime readTime(BasicDBObject dbObject, String fieldName) { Object object = dbObject.get(fieldName); if (object==null) { return null; } if (object instanceof Date) { return new LocalDateTime((Date)object); } throw new RuntimeException("date conversion problem: "+object+" ("+object.getClass().getName()+")"); } public static ObjectId toObjectId(Id id) { if (id!=null) { String idString = id.getInternal(); if (idString!=null) { return new ObjectId(idString); } } return null; } public static Map<String,Object> toMap(DBObject dbObject) { if (dbObject==null) { return null; } Map<String,Object> map = new HashMap<>(); for (String key: dbObject.keySet()) { Object value = dbObject.get(key); if (value instanceof DBObject) { value = toMap((DBObject)value); } map.put(key, value); } return map; } public static ObjectId toObjectId(Object id) { if ( id == null ) { return null; } if ( id instanceof ObjectId ) { return (ObjectId) id; } if ( id instanceof String ) { return new ObjectId( (String)id ); } return null; } }