/** * 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.edgytech.swingfast.ComboBox; import com.edgytech.swingfast.FormDialog; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.Bytes; import com.mongodb.DBObject; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; import java.util.List; /** * * @author antoine */ public class OptionDialog extends FormDialog { enum Item { tailable, slaveOk, opLogReplay, noTimeout, awaitData, exhaust, partial, writeFactor, writePolicy, writeTimeout, jsync, rpPreference, rpTag } enum ReadPref { primary, primaryPreferred, secondary, secondaryPreferred, nearest } public OptionDialog() { setEnumBinding(Item.values(), null); } void update(int options, WriteConcern wc, ReadPreference rp) { // reset xmlLoadCheckpoint(); setBooleanFieldValue(Item.tailable, (options & Bytes.QUERYOPTION_TAILABLE) != 0); setBooleanFieldValue(Item.slaveOk, (options & Bytes.QUERYOPTION_SLAVEOK) != 0); setBooleanFieldValue(Item.opLogReplay, (options & Bytes.QUERYOPTION_OPLOGREPLAY) != 0); setBooleanFieldValue(Item.noTimeout, (options & Bytes.QUERYOPTION_NOTIMEOUT) != 0); setBooleanFieldValue(Item.awaitData, (options & Bytes.QUERYOPTION_AWAITDATA) != 0); setBooleanFieldValue(Item.exhaust, (options & Bytes.QUERYOPTION_EXHAUST) != 0); setBooleanFieldValue(Item.partial, (options & Bytes.QUERYOPTION_PARTIAL) != 0); Object w = wc.getWObject(); int wInt = (Integer) (w instanceof Integer ? w : 0); String wStr = (String) (w instanceof String ? w : ""); setIntFieldValue(Item.writeFactor, wInt); setStringFieldValue(Item.writePolicy, wStr); setIntFieldValue(Item.writeTimeout, wc.getWtimeout()); // setBooleanFieldValue(Item.fsync, wc.fsync()); DBObject rpObj = rp.toDBObject(); ComboBox readBox = (ComboBox) getBoundUnit(Item.rpPreference); ReadPref rpEnm = ReadPref.primary; if (rp != null) rpEnm = ReadPref.valueOf(rp.getName()); readBox.value = rpEnm.ordinal(); if (rpObj.containsField("tags")) { List tags = (List) rpObj.get("tags"); if (tags.size() > 0) { ((DocBuilderField) getBoundComponentUnit(Item.rpTag)).setDBObject((DBObject) tags.get(0)); } } } int getQueryOptions() { int options = 0; if (getBooleanFieldValue(Item.tailable)) options |= Bytes.QUERYOPTION_TAILABLE; if (getBooleanFieldValue(Item.slaveOk)) options |= Bytes.QUERYOPTION_SLAVEOK; if (getBooleanFieldValue(Item.opLogReplay)) options |= Bytes.QUERYOPTION_OPLOGREPLAY; if (getBooleanFieldValue(Item.noTimeout)) options |= Bytes.QUERYOPTION_NOTIMEOUT; if (getBooleanFieldValue(Item.awaitData)) options |= Bytes.QUERYOPTION_AWAITDATA; if (getBooleanFieldValue(Item.exhaust)) options |= Bytes.QUERYOPTION_EXHAUST; if (getBooleanFieldValue(Item.partial)) options |= Bytes.QUERYOPTION_PARTIAL; return options; } WriteConcern getWriteConcern() { int w = getIntFieldValue(Item.writeFactor); String wPolicy = getStringFieldValue(Item.writePolicy); int wtimeout = getIntFieldValue(Item.writeTimeout); // boolean fsync = getBooleanFieldValue(Item.fsync); boolean jsync = getBooleanFieldValue(Item.jsync); if (!wPolicy.trim().isEmpty()) return new WriteConcern(wPolicy, wtimeout, false, jsync); return new WriteConcern(w, wtimeout, false, jsync); } ReadPreference getReadPreference() { ComboBox readBox = (ComboBox) getBoundUnit(Item.rpPreference); ReadPref rpEnm = ReadPref.values()[readBox.value]; BasicDBObject tag = (BasicDBObject) ((DocBuilderField) getBoundComponentUnit(Item.rpTag)).getDBObject(); if (tag != null) return ReadPreference.valueOf(rpEnm.name(), tag); return ReadPreference.valueOf(rpEnm.name()); } }