/** * 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.umongo.DocumentMenu.Item; import com.edgytech.swingfast.*; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; /** * * @author antoine */ public class DocumentMenu extends PopUpMenu implements EnumListener<Item> { enum Item { update, upUpdate, remove, copyValue } public DocumentMenu() { setEnumBinding(Item.values(), this); } @Override public void actionPerformed(Item enm, XmlComponentUnit unit, Object src) { } public void update(ButtonBase button) { final DocView dv = (DocView) (UMongo.instance.getTabbedResult().getSelectedUnit()); TreeNodeDocument node = (TreeNodeDocument) dv.getSelectedNode().getUserObject(); final DBObject doc = node.getDBObject(); ((DocBuilderField) getBoundUnit(Item.upUpdate)).setDBObject((BasicDBObject) doc); if (!((MenuItem) getBoundUnit(Item.update)).getDialog().show()) { return; } final DBObject query = doc.containsField("_id") ? new BasicDBObject("_id", doc.get("_id")) : doc; final DBObject update = ((DocBuilderField) getBoundUnit(Item.upUpdate)).getDBObject(); if (dv.getDBCursor() == null) { // local data Tree tree = dv.getTree(); tree.removeChild(node); dv.addDocument(update, null); tree.structureComponent(); tree.expandNode(tree.getTreeNode()); return; } final DBCollection col = dv.getDBCursor().getCollection(); new DbJob() { @Override public Object doRun() { return col.update(query, update, false, false); } @Override public String getNS() { return col.getFullName(); } @Override public String getShortName() { return "Update"; } @Override public DBObject getRoot(Object result) { BasicDBObject obj = new BasicDBObject("query", query); obj.put("update", update); return obj; } @Override public void wrapUp(Object res) { super.wrapUp(res); dv.refresh(null); } }.addJob(); } public void remove(ButtonBase button) { final DocView dv = (DocView) (UMongo.instance.getTabbedResult().getSelectedUnit()); TreeNodeDocument node = (TreeNodeDocument) dv.getSelectedNode().getUserObject(); final DBObject doc = node.getDBObject(); if (dv.getDBCursor() == null) { // local data Tree tree = dv.getTree(); tree.removeChild(node); tree.structureComponent(); tree.expandNode(tree.getTreeNode()); return; } // go by _id if possible final DBObject query = doc.containsField("_id") ? new BasicDBObject("_id", doc.get("_id")) : doc; final DBCollection col = dv.getDBCursor().getCollection(); new DbJob() { @Override public Object doRun() { return col.remove(query); } @Override public String getNS() { return col.getFullName(); } @Override public String getShortName() { return "Remove"; } @Override public void wrapUp(Object res) { super.wrapUp(res); dv.refresh(null); } @Override public DBObject getRoot(Object result) { return query; } }.addJob(); } public void copyValue(ButtonBase button) { final DocView dv = (DocView) (UMongo.instance.getTabbedResult().getSelectedUnit()); TreeNodeDocument node = (TreeNodeDocument) dv.getSelectedNode().getUserObject(); final DBObject doc = node.getDBObject(); String selection = MongoUtils.getJSON(doc); StringSelection data = new StringSelection(selection); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(data, data); } }