// ============================================================================ // // 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 com.amalto.workbench.detailtabs.sections.providers; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.widgets.Item; import com.amalto.workbench.detailtabs.sections.BasePropertySection; import com.amalto.workbench.detailtabs.sections.model.annotationinfo.langinfo.LanguageInfo; import com.amalto.workbench.i18n.Messages; public class LanguageInfoModifier implements ICellModifier { public static final String COL_PROP_LANG = Messages.LanguageInfoModifier_language; public static final String COL_PROP_LABLE = Messages.LanguageInfoModifier_label; private List<LanguageInfo> allLanguageInfos = new ArrayList<LanguageInfo>(); private List<String> allLanguages = new ArrayList<String>(); private TreeViewer viewer; protected BasePropertySection section; public LanguageInfoModifier(TreeViewer viewer, List<LanguageInfo> allLanguageInfos, List<String> allLanguages,BasePropertySection section) { this(viewer,allLanguageInfos,allLanguages); this.section=section; } public LanguageInfoModifier(TreeViewer viewer, List<LanguageInfo> allLanguageInfos, List<String> allLanguages) { this.allLanguageInfos = allLanguageInfos; this.allLanguages = allLanguages; this.viewer = viewer; } public boolean canModify(Object element, String property) { return isLanguageInfo(element) && (isColumnLanguage(property) || isColumnLabel(property)); } public Object getValue(Object element, String property) { if (!isLanguageInfo(element)) return null; if (isColumnLanguage(property)) { return getValueForColumnLanguage((LanguageInfo) element); } if (isColumnLabel(property)) { return getValueForColumnLabel((LanguageInfo) element); } return null; } public void modify(Object element, String property, Object value) { LanguageInfo modifiedLangInfo = getLanguageInfoFromSelection(element); if (!isLanguageInfo(modifiedLangInfo)) return; if (isColumnLanguage(property) && isComboCellEditorValue(value)) { onModfiyColumnLanguage(modifiedLangInfo, (Integer) value); } if (isColumnLabel(property) && isTextCellEditorValue(value)) { onModfiyColumnLable(modifiedLangInfo, (String) value); } viewer.refresh(); if(section!=null) section.autoCommit(); } private void onModfiyColumnLanguage(LanguageInfo modifiedElement, Integer newSelectedIndex) { if (isNewLanguageExistedAlready(modifiedElement, allLanguages.get(newSelectedIndex))) { MessageDialog.openInformation(null, Messages.LanguageInfoModifier_Warnning, Messages.bind(Messages.LanguageInfoModifier_InfoContent, allLanguages.get(newSelectedIndex))); return; } modifiedElement.setLanguage(allLanguages.get(newSelectedIndex)); } private void onModfiyColumnLable(LanguageInfo modifiedElement, String newLabel) { modifiedElement.setLabel(newLabel); } private boolean isNewLanguageExistedAlready(LanguageInfo modifiedElement, String newLanguage) { for (LanguageInfo eachCurLanguageInfo : allLanguageInfos) { if (eachCurLanguageInfo.equals(modifiedElement)) continue; if (eachCurLanguageInfo.getLanguage().equals(newLanguage)) return true; } return false; } private Integer getValueForColumnLanguage(LanguageInfo element) { return allLanguages.indexOf(element.getLanguage()); } private String getValueForColumnLabel(LanguageInfo element) { return element.getLabel(); } private boolean isLanguageInfo(Object element) { return (element instanceof LanguageInfo); } private boolean isColumnLanguage(String property) { return COL_PROP_LANG.equals(property); } private boolean isColumnLabel(String property) { return COL_PROP_LABLE.equals(property); } private boolean isComboCellEditorValue(Object value) { return (value instanceof Integer); } private boolean isTextCellEditorValue(Object value) { return (value instanceof String); } private LanguageInfo getLanguageInfoFromSelection(Object selection) { if (!(selection instanceof Item)) return null; if (((Item) selection).getData() instanceof LanguageInfo) return (LanguageInfo) ((Item) selection).getData(); return null; } }