// ============================================================================ // // Copyright (C) 2006-2012 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.core.ui.context.model.table; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.TreeItem; import org.talend.core.model.process.IContext; import org.talend.core.model.process.IContextParameter; import org.talend.core.ui.context.ContextTableValuesComposite; import org.talend.core.ui.context.model.AbstractContextCellModifier; /** * cli class global comment. Detailled comment */ public class ContextTableCellModifier extends AbstractContextCellModifier { public ContextTableCellModifier(ContextTableValuesComposite parentModel, boolean reposFlag) { super(parentModel, reposFlag); } protected ContextTableValuesComposite getParentMode() { return (ContextTableValuesComposite) super.getParentMode(); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String) */ public boolean canModify(Object element, String property) { if (getModelManager().isReadOnly()) return false; if (element instanceof ContextTableTabParentModel) { ContextTableTabParentModel contextTableTabParentModel = (ContextTableTabParentModel) element; IContextParameter contextPara = contextTableTabParentModel.getContextParameter(); if (contextPara != null) { String sourceId = contextPara.getSource(); if (IContextParameter.BUILT_IN.equals(sourceId) && !ContextTableConstants.COLUMN_NAME_PROPERTY.equals(property)) { return true; } } } return false; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) */ public Object getValue(Object element, String property) { // IContextParameter para = null; // Only built-in can edit, so must be ContextTableTabParentModel. if (element instanceof ContextTableTabParentModel) { ContextTableTabParentModel contextTableTabParentModel = (ContextTableTabParentModel) element; IContextParameter contextPara = contextTableTabParentModel.getContextParameter(); List<IContext> contextList = getParentMode().getContexts(); if (contextList != null && contextList.size() > 0) { for (IContext context : contextList) { String contextName = context.getName(); if (property.equals(contextName)) { String tempSourceId = contextPara.getSource(); String tempName = contextPara.getName(); IContextParameter tempContextPara = context.getContextParameter(tempSourceId, tempName); return tempContextPara.getValue(); } } } } return ""; //$NON-NLS-1$ } /** * zwang Comment method "getRealParameter". * * @param property * @param templatePara * @return */ public IContextParameter getRealParameter(String property, Object element) { IContextParameter para = null; IContext context = null; if (!(property.equals(ContextTableConstants.COLUMN_NAME_PROPERTY))) { context = getContextManager().getContext(property); } if (context == null) { return null; } if (parentMode.isGroupBySource()) { if (element instanceof ContextTableTabParentModel) { if (IContextParameter.BUILT_IN.equals(((ContextTableTabParentModel) element).getSourceId())) { IContextParameter builtContextParameter = ((ContextTableTabParentModel) element).getContextParameter(); if (builtContextParameter != null) { para = context.getContextParameter(builtContextParameter.getName()); } } } else if (element instanceof ContextTableTabChildModel) { ContextTableTabChildModel child = (ContextTableTabChildModel) element; String sourceId = child.getContextParameter().getSource(); para = context.getContextParameter(sourceId, ((ContextTableTabChildModel) element).getContextParameter() .getName()); } } else { if (element instanceof ContextTableTabParentModel) { ContextTableTabParentModel contextTableTabParentModel = (ContextTableTabParentModel) element; IContextParameter contextPara = contextTableTabParentModel.getContextParameter(); if (contextPara != null) { String sourceId = contextPara.getSource(); String sourceName = contextPara.getName(); para = context.getContextParameter(sourceId, sourceName); } } else if (element instanceof ContextTableTabChildModel) { ContextTableTabChildModel child = (ContextTableTabChildModel) element; para = child.getContextParameter(); } } return para; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object) */ public void modify(Object element, final String property, final Object value) { TreeItem item = (TreeItem) element; final Object object = item.getData(); // add all nodes that need to update. List<Object> list = new ArrayList<Object>(); list.add(object); IContextParameter para = null; List<IContext> contextList = getParentMode().getContexts(); for (int i = 0; i < (contextList.size() + 1); i++) { if (property.equals(getParentMode().getColumnProperties()[i])) { para = getRealParameter(getParentMode().getColumnProperties()[i], object); getParentMode().getValueChecker().checkErrors(item, i, para); } } if (para == null) { return; } String originalName = para.getName(); String sourceId = null; if (element instanceof ContextTableTabChildModel) { ContextTableTabChildModel child = (ContextTableTabChildModel) element; sourceId = child.getContextParameter().getSource(); } for (IContext context : contextList) { if (property.equals(context.getName())) { if (para.getValue().equals(value)) { return; } para.setValue((String) value); } } // set updated flag. List<Object> updateObjs = new ArrayList<Object>(); updateObjs.add(object); lookupSameNameNode(para.getSource(), originalName, item, updateObjs); updateRelatedNode(updateObjs.toArray(), para); // setAndRefreshFlags(object, para); } /** * To look up all nodes that have the same variable name from input model. * * @param nodeName * @return */ private Object[] lookupSameNameNode(String sourceId, String nodeName, TreeItem item, List<Object> updateObjs) { TreeItem[] items = item.getParent().getItems(); if (items != null && items.length > 0) { for (TreeItem tempItem : items) { Object obj = tempItem.getData(); if (obj instanceof ContextTableTabChildModel) { ContextTableTabChildModel child = (ContextTableTabChildModel) obj; String tempSourceId = child.getContextParameter().getSource(); String name = child.getName(); if (!sourceId.equals(tempSourceId) && name.equals(name)) updateObjs.add(obj); } } } return updateObjs.toArray(); } }