Java tutorial
/******************************************************************************* * Copyright (c) 2013 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.mongodb.core.dialogs.resultview; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import com.hangum.tadpole.commons.google.analytics.AnalyticCaller; import com.hangum.tadpole.mongodb.core.composite.result.TreeMongoContentProvider; import com.hangum.tadpole.mongodb.core.composite.result.TreeMongoLabelProvider; import com.hangum.tadpole.mongodb.core.dialogs.msg.TadpoleSimpleMessageDialog; import com.hangum.tadpole.mongodb.core.dto.MongodbTreeViewDTO; import com.hangum.tadpole.mongodb.core.utils.MongoDBTableColumn; import com.hangum.tadpole.sql.util.tables.TreeUtil; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** * collection detail composite * * @author hangum * */ public class FindOneDetailComposite extends Composite { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(FindOneDetailComposite.class); private String collectionName; private DBObject dbResultObject; private boolean isTypeShowing; private List<MongodbTreeViewDTO> listTrees; private TreeViewer treeViewerMongo; /** * @wbp.parser.constructor */ public FindOneDetailComposite(Composite parent, String collectionName, DBObject dbResultObject) { this(parent, collectionName, dbResultObject, true); } /** * Create the composite. * * @param parent * @param collectionName * @param dbResultObject */ public FindOneDetailComposite(Composite parent, String collectionName, DBObject dbResultObject, boolean isTypeShowing) { super(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(1, false); gridLayout.verticalSpacing = 1; gridLayout.horizontalSpacing = 1; gridLayout.marginHeight = 1; gridLayout.marginWidth = 1; setLayout(gridLayout); this.collectionName = collectionName; this.dbResultObject = dbResultObject; this.isTypeShowing = isTypeShowing; treeViewerMongo = new TreeViewer(this, SWT.BORDER | SWT.VIRTUAL | SWT.FULL_SELECTION); Tree tree = treeViewerMongo.getTree(); tree.setHeaderVisible(true); tree.setLinesVisible(true); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Button btnViewSource = new Button(this, SWT.NONE); btnViewSource.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); btnViewSource.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { showViewSource(); } }); btnViewSource.setText("View Source"); createTreeColumn(); treeViewerMongo.setContentProvider(new TreeMongoContentProvider()); treeViewerMongo.setLabelProvider(new TreeMongoLabelProvider()); initData(); // google analytic AnalyticCaller.track(this.getClass().getName()); } /** * show view source */ private void showViewSource() { TadpoleSimpleMessageDialog dialog = new TadpoleSimpleMessageDialog(getShell(), collectionName, this.dbResultObject == null ? "" : this.dbResultObject.toString()); dialog.open(); } /** * Rrefresh data * * @param collectionName * @param dbResultObject * @param isTypeShowing */ public void refresh(String collectionName, DBObject dbResultObject, boolean isTypeShowing) { this.collectionName = collectionName; this.dbResultObject = dbResultObject; this.isTypeShowing = isTypeShowing; initData(); } /** * init composite */ private void initData() { listTrees = new ArrayList<MongodbTreeViewDTO>(); try { MongodbTreeViewDTO treeDto = new MongodbTreeViewDTO(dbResultObject, collectionName, "", "Document"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ parserTreeObject(dbResultObject, treeDto, dbResultObject); listTrees.add(treeDto); treeViewerMongo.setInput(listTrees); treeViewerMongo.expandToLevel(3); TreeUtil.packTree(treeViewerMongo.getTree()); } catch (Exception e) { logger.error("Refresh mongo tree data", e); } } /** * parser tree obejct * * @param rootDbObject * @param treeDto * @param dbObject */ private void parserTreeObject(final DBObject rootDbObject, final MongodbTreeViewDTO treeDto, final DBObject dbObject) throws Exception { List<MongodbTreeViewDTO> listTrees = new ArrayList<MongodbTreeViewDTO>(); Map<Integer, String> tmpMapColumns = MongoDBTableColumn.getTabelColumnView(dbObject); for (int i = 0; i < tmpMapColumns.size(); i++) { MongodbTreeViewDTO tmpTreeDto = new MongodbTreeViewDTO(); tmpTreeDto.setDbObject(rootDbObject); String keyName = tmpMapColumns.get(i); Object keyVal = dbObject.get(keyName); tmpTreeDto.setRealKey(keyName); // is sub document if (keyVal instanceof BasicDBObject) { tmpTreeDto.setKey(tmpMapColumns.get(i) + " {..}"); //$NON-NLS-1$ tmpTreeDto.setType("Document"); //$NON-NLS-1$ parserTreeObject(rootDbObject, tmpTreeDto, (DBObject) keyVal); } else if (keyVal instanceof BasicDBList) { BasicDBList dbObjectList = (BasicDBList) keyVal; tmpTreeDto.setKey(tmpMapColumns.get(i) + " [" + dbObjectList.size() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ tmpTreeDto.setType("Array"); //$NON-NLS-1$ parseObjectArray(rootDbObject, tmpTreeDto, dbObjectList); } else { tmpTreeDto.setKey(tmpMapColumns.get(i)); tmpTreeDto.setType(keyVal != null ? keyVal.getClass().getName() : "Unknow"); //$NON-NLS-1$ if (keyVal == null) tmpTreeDto.setValue(""); //$NON-NLS-1$ else tmpTreeDto.setValue(keyVal.toString()); } // ? ?? . listTrees.add(tmpTreeDto); } treeDto.setChildren(listTrees); } /** * object array * * @param rootDbObject * @param treeDto * @param dbObject * @throws Exception */ private void parseObjectArray(final DBObject rootDbObject, final MongodbTreeViewDTO treeDto, final BasicDBList dbObjectList) throws Exception { List<MongodbTreeViewDTO> listTrees = new ArrayList<MongodbTreeViewDTO>(); for (int i = 0; i < dbObjectList.size(); i++) { MongodbTreeViewDTO mongodbDto = new MongodbTreeViewDTO(); mongodbDto.setRealKey("" + i); //$NON-NLS-1$ mongodbDto.setKey("(" + i + ")"); //$NON-NLS-1$ //$NON-NLS-2$ mongodbDto.setDbObject(rootDbObject); Object keyVal = dbObjectList.get(i); if (keyVal instanceof BasicDBObject) { mongodbDto.setType("Document"); //$NON-NLS-1$ parserTreeObject(rootDbObject, mongodbDto, (DBObject) keyVal); } else if (keyVal instanceof BasicDBList) { BasicDBList tmpDbObjectList = (BasicDBList) keyVal; mongodbDto.setType("Array"); //$NON-NLS-1$ parseObjectArray(rootDbObject, mongodbDto, tmpDbObjectList); } else { mongodbDto.setType(keyVal != null ? keyVal.getClass().getName() : "Unknow"); //$NON-NLS-1$ if (keyVal == null) mongodbDto.setValue(""); //$NON-NLS-1$ else mongodbDto.setValue(keyVal.toString()); } listTrees.add(mongodbDto); } treeDto.setChildren(listTrees); } /** * treeview create */ private void createTreeColumn() { String[] columnName = { "Key", "Value", "Type" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ int[] columnSize = { 170, 200, 140 }; try { int columnViewCnt = 2; if (isTypeShowing) columnViewCnt = 3; for (int i = 0; i < columnViewCnt; i++) { int columnAlign = SWT.LEFT; if (i == 1) columnAlign = SWT.RIGHT; final TreeViewerColumn tableColumn = new TreeViewerColumn(treeViewerMongo, columnAlign); tableColumn.getColumn().setText(columnName[i]); tableColumn.getColumn().setWidth(columnSize[i]); tableColumn.getColumn().setResizable(true); tableColumn.getColumn().setMoveable(false); } // end for } catch (Exception e) { logger.error("MongoDB Tree view Editor", e); //$NON-NLS-1$ } } @Override protected void checkSubclass() { } }