/******************************************************************************* * 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.rdb.core.editors.main.parameter; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableViewer; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.RDBTypeToJavaTypeUtils; import com.hangum.tadpole.rdb.core.viewers.object.sub.rdb.table.CommentCellEditor; /** * SampleDAtaEditingSupport * * @author hangum */ public class ParameterEditingSupport extends EditingSupport { /** * */ private static final long serialVersionUID = 6917152389392816571L; /** * Logger for this class */ private static final Logger logger = Logger.getLogger(ParameterEditingSupport.class); private final TableViewer viewer; private int columnIndex; private UserDBDAO userDB; /** 입력 파라미터 */ private List<Map<Integer, Object>> parameters = null; private final String[] types; public ParameterEditingSupport(TableViewer viewer, int columnIndex, UserDBDAO userDB, List<Map<Integer, Object>> parameters) { super(viewer); this.viewer = viewer; this.columnIndex = columnIndex; this.userDB = userDB; this.types = RDBTypeToJavaTypeUtils.supportParameterTypes(userDB); this.parameters = parameters; } @Override protected CellEditor getCellEditor(Object element) { HashMap<Integer, Object> map = (HashMap<Integer, Object>) element; if (columnIndex == 2) { return new KeyEventComboBoxCellEditor(columnIndex, viewer, types); } else if (columnIndex == 3) { if (RDBTypeToJavaTypeUtils.isNumberType((String)map.get(2)) || RDBTypeToJavaTypeUtils.isCharType((String)map.get(2)) ) { return new CommentCellEditor(columnIndex, viewer); } else { return new CommentCellEditor(columnIndex, viewer); } }else{ return null; } } @Override protected boolean canEdit(Object element) { if (columnIndex == 2 || columnIndex == 3) { return true; } else { return false; } } @Override protected Object getValue(Object element) { HashMap<Integer, Object> map = (HashMap<Integer, Object>) element; if (columnIndex == 2) { return RDBTypeToJavaTypeUtils.getIndex(userDB, (String) map.get(2)); } else if (columnIndex == 3) { return map.get(3); } return null; } @Override protected void setValue(Object element, Object value) { HashMap<Integer, Object> mapChangeElement = (HashMap<Integer, Object>) element; if (columnIndex == 2) { mapChangeElement.put(2, this.types[(Integer) value]); _chageNameChage(mapChangeElement, 2, this.types[(Integer) value]); } else if (columnIndex == 3) { mapChangeElement.put(3, value); _chageNameChage(mapChangeElement, 3, value); } // viewer.update(element, null); } /** * 파라미터 이름이 같은 경우 모든 이름을 바꾸어준다. * * @param mapChangeElement * @param changeObject */ private void _chageNameChage(HashMap<Integer, Object> mapChangeElement, int intIndex, Object changeObject) { boolean isUpdate = false; List<Map<Integer, Object>> parameters = (List<Map<Integer, Object>>)viewer.getInput(); String strOriKey = ""+mapChangeElement.get(1); for(Map<Integer, Object> mapOld : parameters) { String _tmpKey = ""+mapOld.get(1); if(strOriKey.equals(_tmpKey)) { mapOld.put(intIndex, changeObject); // viewer.update(mapOld, null); isUpdate = true; } } if(isUpdate) viewer.refresh(parameters, true); } }