// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.ui.editors;
import java.util.Arrays;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbenchPartSite;
import org.talend.mdm.repository.ui.widgets.UserSecurityComboBoxDialogCellEditor;
import com.amalto.workbench.editors.AMainPageV2;
import com.amalto.workbench.models.KeyValue;
import com.amalto.workbench.models.Line;
import com.amalto.workbench.widgets.ComplexTableViewerColumn;
/**
* created by liusongbo on 2014-3-25
*/
public class UserSecurityCellModifier implements ICellModifier {
private UserSecurityComboBoxDialogCellEditor variableCellEditor;
private TableViewer viewer;
private AMainPageV2 page;
private ComplexTableViewerColumn[] conditionColumns;
public UserSecurityCellModifier(IWorkbenchPartSite site, AMainPageV2 page, TableViewer tv,
ComplexTableViewerColumn[] conditionsColumns) {
this.page = page;
this.viewer = tv;
this.conditionColumns = conditionsColumns;
variableCellEditor = new UserSecurityComboBoxDialogCellEditor(tv.getTable(), site);
}
public void modify(Object element, String property, Object value) {
if (value instanceof Integer) {
if (Integer.valueOf(value.toString()) == -1) {
return;
}
}
Line line = null;
if (element instanceof TableItem) {
TableItem item = (TableItem) element;
line = (Line) item.getData();
} else {
line = (Line) element;
}
int columnIndex = Arrays.asList(viewer.getColumnProperties()).indexOf(property);
if (columnIndex >= 0 && columnIndex < viewer.getColumnProperties().length) {
if (isAColumnWithCombo(columnIndex)) {
String[] attrs = conditionColumns[columnIndex].getComboValues();
value = attrs[Integer.parseInt(value.toString())];
}
KeyValue kv = line.keyValues.get(columnIndex);
boolean noChange = kv.value.equals(value.toString());
kv.value = value.toString();
viewer.refresh();
if (!noChange && page != null) {
page.markDirty();
}
}
}
private boolean isAColumnWithCombo(int columnIdx) {
return conditionColumns[columnIdx].isCombo();
}
public Object getValue(Object element, String property) {
int columnIndex = Arrays.asList(viewer.getColumnProperties()).indexOf(property);
Line line = (Line) element;
if (isAColumnWithCombo(columnIndex)) {
String value = line.keyValues.get(columnIndex).value;
String[] attrs = conditionColumns[columnIndex].getComboValues();
return Arrays.asList(attrs).indexOf(value);
}
for (KeyValue keyvalue : line.keyValues) {
if (property.equals(keyvalue.key)) {
if (keyvalue.value == null) {
return conditionColumns[columnIndex].getNillDisplay();
}
return keyvalue.value;
}
}
return null;
}
public boolean canModify(Object element, String property) {
int columnIndex = Arrays.asList(viewer.getColumnProperties()).indexOf(property);
if (columnIndex == 2) {
viewer.getCellEditors()[2] = variableCellEditor;
}
return true;
}
}