// ============================================================================ // // 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.template; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.TreeItem; import org.talend.core.language.ECodeLanguage; import org.talend.core.language.LanguageManager; import org.talend.core.model.metadata.types.ContextParameterJavaTypeManager; import org.talend.core.model.metadata.types.JavaType; import org.talend.core.model.metadata.types.JavaTypesManager; import org.talend.core.model.process.IContext; import org.talend.core.model.process.IContextParameter; import org.talend.core.model.utils.ContextParameterUtils; import org.talend.core.ui.context.ContextManagerHelper; import org.talend.core.ui.context.ContextTemplateComposite; import org.talend.core.ui.context.model.AbstractContextCellModifier; /** * ggu class global comment. Detailled comment */ public class ContextCellModifier extends AbstractContextCellModifier { private ContextTemplateComposite variableTabComposite; public ContextCellModifier(ContextTemplateComposite parentComposite) { this(parentComposite, false); this.variableTabComposite = parentComposite; } public ContextCellModifier(ContextTemplateComposite parentComposite, boolean reposFlag) { super(parentComposite, reposFlag); this.variableTabComposite = parentComposite; } protected ContextTemplateComposite getParentMode() { return (ContextTemplateComposite) super.getParentMode(); } private String getParentModelSourceId(ContextVariableTabParentModel parent) { boolean isGroupBySource = variableTabComposite.isGroupBySource(); String sourceId = null; if (isGroupBySource) sourceId = parent.getSourceId(); else sourceId = parent.getContextParameter().getSource(); return sourceId; } /* * (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 ContextVariableTabParentModel) { ContextVariableTabParentModel parent = (ContextVariableTabParentModel) element; String sourceId = getParentModelSourceId(parent); if (IContextParameter.BUILT_IN.equals(sourceId)) { if (ContextConstant.NAME_COLUMN_NAME.equals(property) || ContextConstant.COMMENT_COLUMN_NAME.equals(property) || ContextConstant.TYPE_COLUMN_NAME.equals(property)) return true; } else return false; } IContextParameter para = getRealParameter(element); if (para == null) { return false; } if (!para.isBuiltIn() && !isRepositoryMode()) { // not built-in, not update return false; } if (property.equals(ContextConstant.SOURCE_COLUMN_NAME) || property.equals(ContextConstant.SCRIPTCODE_COLUMN_NAME)) { return false; } return true; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) */ public Object getValue(Object element, String property) { IContextParameter contextPara = null; if (element instanceof ContextVariableTabParentModel) { ContextVariableTabParentModel parent = (ContextVariableTabParentModel) element; contextPara = parent.getContextParameter(); if (ContextConstant.NAME_COLUMN_NAME.equals(property)) { return contextPara.getName(); } else if (ContextConstant.SOURCE_COLUMN_NAME.equals(property)) { } else if (ContextConstant.TYPE_COLUMN_NAME.equals(property)) { String s = ContextManagerHelper.convertFormat(contextPara.getType()); final ECodeLanguage codeLanguage = LanguageManager.getCurrentLanguage(); if (codeLanguage == ECodeLanguage.JAVA) { for (int i = 0; i < ContextParameterJavaTypeManager.getJavaTypesLabels().length; i++) { if (s.equals(ContextParameterJavaTypeManager.getJavaTypesLabels()[i])) { return i; } } return -1; } else { for (int i = 0; i < ContextParameterJavaTypeManager.getPerlTypesLabels().length; i++) { if (s.equals(ContextParameterJavaTypeManager.getPerlTypesLabels()[i])) { return i; } } return -1; } } else if (ContextConstant.SCRIPTCODE_COLUMN_NAME.equals(property)) { final ECodeLanguage codeLanguage = LanguageManager.getCurrentLanguage(); if (codeLanguage == ECodeLanguage.JAVA) return ContextParameterUtils.getNewScriptCode(contextPara.getName(), codeLanguage); else return contextPara.getScriptCode(); } else if (ContextConstant.COMMENT_COLUMN_NAME.equals(property)) { return contextPara.getComment(); } } return null; //$NON-NLS-1$ } /** * zwang Comment method "getRealParameter". * * @param property * @param templatePara * @return */ private IContextParameter getRealParameter(Object element) { IContextParameter para = null; IContext context = getContextManager().getDefaultContext(); if (getParentMode().isGroupBySource()) { if (element instanceof ContextVariableTabParentModel) { String sourceId = ((ContextVariableTabParentModel) element).getSourceId(); if (IContextParameter.BUILT_IN.equals(sourceId)) { para = context.getContextParameter(sourceId, ((ContextVariableTabParentModel) element).getContextParameter() .getName()); } } else if (element instanceof ContextVariableTabChildModel) { String sourceId = ((ContextVariableTabChildModel) element).getContextParameter().getSource(); para = context.getContextParameter(sourceId, (((ContextVariableTabChildModel) element).getContextParameter()).getName()); } } else { if (element instanceof ContextVariableTabParentModel) { para = context.getContextParameter(((ContextVariableTabParentModel) element).getContextParameter().getName()); } } 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(); if (object instanceof ContextVariableTabParentModel) { ContextVariableTabParentModel parent = (ContextVariableTabParentModel) object; IContextParameter contextPara = parent.getContextParameter(); String originalName = contextPara.getName(); String sourceId = contextPara.getSource(); if (ContextConstant.NAME_COLUMN_NAME.equals(property)) { // contextPara.setName((String) value); getParentMode().renameParameter(originalName, sourceId, (String) value, isRepositoryMode()); } else if (ContextConstant.TYPE_COLUMN_NAME.equals(property)) { // TODO get the right type. int index = -1; String s = ContextManagerHelper.convertFormat(contextPara.getType()); final ECodeLanguage codeLanguage = LanguageManager.getCurrentLanguage(); if (codeLanguage == ECodeLanguage.JAVA) { for (int i = 0; i < ContextParameterJavaTypeManager.getJavaTypesLabels().length; i++) { if (s.equals(ContextParameterJavaTypeManager.getJavaTypesLabels()[i])) { index = i; } } if (index == ((Integer) value)) { return; } String newType = getRealType(ContextParameterJavaTypeManager.getJavaTypesLabels()[(Integer) value]); String name = contextPara.getName(); for (IContext context : getContextManager().getListContext()) { for (IContextParameter contextParameter : context.getContextParameterList()) { if (name.equals(contextParameter.getName())) { contextParameter.setType(newType); } } } } // String newType = getRealType(ContextParameterJavaTypeManager.getJavaTypesLabels()[(Integer) value]); // contextPara.setType((String) newType); } else if (ContextConstant.COMMENT_COLUMN_NAME.equals(property)) { contextPara.setComment((String) value); } List<Object> updateObjs = new ArrayList<Object>(); updateObjs.add(object); lookupSameNameNode(contextPara.getSource(), originalName, item, updateObjs); updateRelatedNode(updateObjs.toArray(), contextPara); } } private void lookupSameNameFromChilren(String sourceId, String nodeName, TreeItem item, List<Object> updateObjs) { TreeItem[] items = item.getItems(); if (items != null && items.length > 0) { for (TreeItem tempItem : items) { Object obj = tempItem.getData(); if (obj instanceof ContextVariableTabChildModel) { ContextVariableTabChildModel son = (ContextVariableTabChildModel) obj; String paraName = son.getContextParameter().getName(); if (nodeName.equals(paraName)) updateObjs.add(obj); } } } } /** * 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 ContextVariableTabParentModel) { ContextVariableTabParentModel parent = (ContextVariableTabParentModel) obj; String tempSourceId = parent.getSourceId(); if (!IContextParameter.BUILT_IN.equals(tempSourceId)) lookupSameNameFromChilren(sourceId, nodeName, tempItem, updateObjs); } else if (obj instanceof ContextVariableTabChildModel) { ContextVariableTabChildModel son = (ContextVariableTabChildModel) obj; String paraName = son.getContextParameter().getName(); if (nodeName.equals(paraName)) updateObjs.add(obj); } } } return updateObjs.toArray(); } private String getRealType(String type) { final ECodeLanguage codeLanguage = LanguageManager.getCurrentLanguage(); if (codeLanguage == ECodeLanguage.JAVA) { StringBuffer sb = new StringBuffer("id_"); //$NON-NLS-1$ JavaType javaType = JavaTypesManager.getJavaTypeFromLabel(type); if (type.indexOf(ContextConstant.DOWNWARDS_STRING) != -1) { return javaType.getId(); } else { if (javaType != null) { return javaType.getId(); } else { return sb.append(type.trim()).toString(); } } } else { return type; } } }