/*******************************************************************************
* 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.composite.result;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import com.hangum.tadpole.commons.libs.core.message.CommonMessages;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.mongodb.core.Messages;
import com.hangum.tadpole.mongodb.core.dto.MongodbTreeViewDTO;
import com.hangum.tadpole.mongodb.core.query.MongoDBQuery;
import com.hangum.tadpole.mongodb.core.utils.MongoDBJavaStrToJavaObj;
/**
* data direct editor
*
* @author hangum
*
*/
public class TreeViewerEditingSupport extends EditingSupport {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(TreeViewerEditingSupport.class);
private UserDBDAO userDB;
private String collectionName;
private TreeViewer viewer;
public TreeViewerEditingSupport(UserDBDAO userDB, String collectionName, TreeViewer viewer) {
super(viewer);
this.userDB = userDB;
this.collectionName = collectionName;
this.viewer = viewer;
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditor(viewer.getTree());
}
@Override
protected boolean canEdit(Object element) {
MongodbTreeViewDTO dto = (MongodbTreeViewDTO)element;
if( "Array".equals(dto.getType()) || //$NON-NLS-1$
"Document".equals(dto.getType()) //$NON-NLS-1$
){
return false;
}
return true;
}
@Override
protected Object getValue(Object element) {
MongodbTreeViewDTO dto = (MongodbTreeViewDTO)element;
return dto.getValue();
}
@Override
protected void setValue(Object element, Object value) {
MongodbTreeViewDTO dto = (MongodbTreeViewDTO)element;
// data 수정하자
if( dto.getValue().equals(value.toString()) ) return;
try {
// 데이터가 올바른지 검사합니다.
MongoDBJavaStrToJavaObj.convStrToObj(dto.getType(), value.toString());
// fully key를 검색합니다.
String fullyKey = findRealKey(dto, dto.getRealKey());
if(logger.isDebugEnabled()) logger.debug("====>[update][real key]======> " + fullyKey + "\t [value]" + value.toString());
MongoDBQuery.updateDocument(userDB, collectionName, dto.getDbObject(), fullyKey, value.toString());
} catch(Exception e) {
MessageDialog.openError(null, CommonMessages.get().Confirm, Messages.get().TreeViewerEditingSupport_3 + dto.getType() + Messages.get().TreeViewerEditingSupport_4);
return;
}
dto.setValue(value.toString());
viewer.refresh();
}
/**
* real key path를 얻는다
*
* @param dto
* @param key
*/
private String findRealKey(MongodbTreeViewDTO dto, String key) {
String retVal = "";
MongodbTreeViewDTO tmpDto = dto.getParent();
// logger.debug("[key]" + key + "[retVal]"+ retVal);
if( tmpDto != null) {
if(tmpDto.getRealKey() != null) {
retVal += findRealKey(tmpDto, tmpDto.getRealKey() + "." + key);
} else {
retVal = key;
}
} else {
retVal = key;
}
return retVal;
}
}