/* * mongobrowser - a webstart gui application for viewing, * editing and administering a Mongo Database * Copyright 2009-2011 MeBigFatGuy.com * Copyright 2009-2011 Dave Brosius * * 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.mebigfatguy.mongobrowser.dialogs; import java.awt.Component; import java.util.List; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import com.mebigfatguy.mongobrowser.MongoConstants; import com.mebigfatguy.mongobrowser.dialogs.MongoTreeNode.KV; import com.mebigfatguy.mongobrowser.dialogs.MongoTreeNode.Type; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; /** * a table cell renderer for showing the list of fields that an index controls */ public class MongoTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = -5461207993315946236L; private final Icon indexIcon; /** * constructs a renderer for the list of fields of an index */ public MongoTreeCellRenderer() { indexIcon = new ImageIcon(getClass().getResource("/com/mebigfatguy/mongobrowser/resources/index.png")); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { MongoTreeNode treeNode = (MongoTreeNode) value; JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); label.setHorizontalTextPosition(JLabel.RIGHT); label.setVerticalTextPosition(JLabel.CENTER); label.setIcon(null); if (treeNode.getType() == Type.KeyValue) { MongoTreeNode parentTreeNode = treeNode; do { parentTreeNode = (MongoTreeNode) parentTreeNode.getParent(); } while ((parentTreeNode != null) && (parentTreeNode.getType() != Type.Collection)); if (parentTreeNode != null) { DBCollection collection = (DBCollection) parentTreeNode.getUserObject(); List<DBObject> indices = collection.getIndexInfo(); String key = ((KV) treeNode.getUserObject()).getKey(); for (DBObject index : indices) { BasicDBObject kvIndex = (BasicDBObject) index.get(MongoConstants.KEY); if (kvIndex.get(key) != null) { label.setIcon(indexIcon); break; } } } } return label; } }