/** * Copyright (C) 2010 EdgyTech LLC. * * 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.edgytech.umongo; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** * * @author antoine */ public class EditAggGeoNearDialog extends EditAggOpDialog { enum Item { near, distanceField, limit, maxDistance, distanceMultiplier, query, spherical, includeLocs, uniqueDocs } public EditAggGeoNearDialog() { setEnumBinding(Item.values(), null); } @Override public Object getParameters() { DBObject cmd = new BasicDBObject(); cmd.put("near", ((DocBuilderField) getBoundUnit(Item.near)).getDBObject()); cmd.put("distanceField", getStringFieldValue(Item.distanceField)); cmd.put("maxDistance", getDoubleFieldValue(Item.maxDistance)); double distanceMult = getDoubleFieldValue(Item.distanceMultiplier); if (distanceMult > 0) { cmd.put("distanceMultiplier", distanceMult); } DBObject query = ((DocBuilderField) getBoundUnit(Item.query)).getDBObject(); if (query != null) { cmd.put("query", query); } boolean spherical = getBooleanFieldValue(Item.spherical); if (spherical) { cmd.put("spherical", spherical); } DBObject search = ((DocBuilderField) getBoundUnit(Item.query)).getDBObject(); if (search != null) { cmd.put("query", search); } String includeLocs = getStringFieldValue(Item.includeLocs); if (includeLocs != null && !includeLocs.isEmpty()) { cmd.put("includeLocs", includeLocs); } boolean unique = getBooleanFieldValue(Item.uniqueDocs); if (unique) { cmd.put("uniqueDocs", unique); } return cmd; } @Override public void setParameters(Object value) { BasicDBObject cmd = (BasicDBObject) value; ((DocBuilderField) getBoundUnit(Item.near)).setDBObject((DBObject) cmd.get("near")); setStringFieldValue(Item.distanceField, cmd.getString("distanceField")); setDoubleFieldValue(Item.maxDistance, cmd.getDouble("maxDistance")); if (cmd.containsField("distanceMultiplier")) { setDoubleFieldValue(Item.distanceMultiplier, cmd.getDouble("distanceMultiplier")); } if (cmd.containsField("query")) { ((DocBuilderField) getBoundUnit(Item.query)).setDBObject((DBObject) cmd.get("query")); } if (cmd.containsField("spherical")) { setBooleanFieldValue(Item.spherical, cmd.getBoolean("spherical")); } if (cmd.containsField("query")) { ((DocBuilderField) getBoundUnit(Item.query)).setDBObject((DBObject) cmd.get("query")); } if (cmd.containsField("includeLocs")) { setStringFieldValue(Item.includeLocs, cmd.getString("includeLocs")); } if (cmd.containsField("uniqueDocs")) { setBooleanFieldValue(Item.uniqueDocs, cmd.getBoolean("uniqueDocs")); } } }