/** * 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.EnumListener; import com.edgytech.swingfast.XmlComponentUnit; import com.mongodb.DBRef; import com.mongodb.DBRefBase; import javax.swing.JDialog; import org.bson.types.ObjectId; import com.edgytech.umongo.EditObjectIdDialog.Item; /** * * @author antoine */ public class EditObjectIdDialog extends EditFieldDialog implements EnumListener<Item> { enum Item { string, time, machine, inc, currentTime, currentMachine, currentInc, namespace } public EditObjectIdDialog() { setEnumBinding(Item.values(), this); } @Override public Object getValue() { String str = getStringFieldValue(Item.string); ObjectId id = null; if (!str.isEmpty()) { id = new ObjectId(str); } else { int time = getIntFieldValue(Item.time); int machine = getIntFieldValue(Item.machine); int inc = getIntFieldValue(Item.inc); id = new ObjectId(time, machine, inc); } String ns = getStringFieldValue(Item.namespace); if (ns.trim().isEmpty()) { return id; } return new DBRef(null, ns, id); } @Override public void setValue(Object value) { ObjectId id = null; if (value instanceof DBRefBase) { DBRefBase ref = (DBRefBase) value; setStringFieldValue(Item.namespace, ref.getRef()); id = (ObjectId) ref.getId(); } else { id = (ObjectId) value; } setStringFieldValue(Item.string, id.toString()); setIntFieldValue(Item.time, id._time()); setIntFieldValue(Item.machine, id.getMachine()); setIntFieldValue(Item.inc, id.getInc()); } @Override protected void updateComponentCustom(JDialog old) { super.updateComponentCustom(old); setStringFieldValue(Item.currentTime, String.valueOf(System.currentTimeMillis() / 1000)); setStringFieldValue(Item.currentMachine, String.valueOf(ObjectId.getGenMachineId())); setStringFieldValue(Item.currentInc, String.valueOf(ObjectId.getCurrentInc())); } public void actionPerformed(Item enm, XmlComponentUnit unit, Object src) { switch (enm) { case string: String str = getComponentStringFieldValue(Item.string); if (!str.isEmpty()) { ObjectId oid = new ObjectId(str); setComponentIntFieldValue(Item.time, oid.getTimeSecond()); setComponentIntFieldValue(Item.machine, oid.getMachine()); setComponentIntFieldValue(Item.inc, oid.getInc()); } break; case time: case machine: case inc: int time = getComponentIntFieldValue(Item.time); int machine = getComponentIntFieldValue(Item.machine); int inc = getComponentIntFieldValue(Item.inc); ObjectId oid = new ObjectId(time, machine, inc); setComponentStringFieldValue(Item.string, oid.toString()); break; } } }