// ============================================================================ // // 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.designer.core.ui.views.properties; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.collections.BidiMap; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor; import org.eclipse.emf.common.util.EList; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CommandStack; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.ui.runtime.image.EImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.general.Project; import org.talend.core.model.process.EComponentCategory; import org.talend.core.model.process.Element; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.INode; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.ProjectReference; import org.talend.core.model.properties.SQLPatternItem; import org.talend.core.model.relationship.RelationshipItemBuilder; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.utils.SQLPatternUtils; import org.talend.core.properties.tab.IDynamicProperty; import org.talend.designer.core.DesignerPlugin; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.AbstractMultiPageTalendEditor; import org.talend.designer.core.ui.editor.AbstractTalendEditor; import org.talend.designer.core.ui.editor.cmd.PropertyChangeCommand; import org.talend.designer.runprocess.ItemCacheManager; import org.talend.repository.ProjectManager; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryService; import org.talend.repository.model.RepositoryConstants; /** * bqian class global comment. Detailled comment */ public class SQLPatternComposite extends ScrolledComposite implements IDynamicProperty, IResourceChangeListener { private static final String NAME_PROPERTY = "nameProperty"; //$NON-NLS-1$ private static final int ADD_COLUMN = 0; private List<SQLPatternInfor> comboContent; private Element element; private DynamicComboBoxCellEditor dynamicComboBoxCellEditor; private Button buttonAdd, upButton, downButton; private Button buttonRemove; private TableViewer tableViewer; private Text codeText; private Map<SQLPatternItem, Project> sqlPatternAndProject = new HashMap<SQLPatternItem, Project>(); /** * yzhang AdvancedContextComposite constructor comment. * * @param parent * @param style */ public SQLPatternComposite(Composite parent, int style, final Element element) { super(parent, style); this.element = element; setExpandHorizontal(true); setExpandVertical(true); FormData layouData = new FormData(); layouData.left = new FormAttachment(0, 0); layouData.right = new FormAttachment(100, 0); layouData.top = new FormAttachment(0, 0); layouData.bottom = new FormAttachment(100, 0); setLayoutData(layouData); final Composite panel = new Composite(this, SWT.NONE); setContent(panel); panel.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); FormLayout layout = new FormLayout(); layout.marginWidth = ITabbedPropertyConstants.HSPACE + 2; layout.marginHeight = ITabbedPropertyConstants.VSPACE; layout.spacing = ITabbedPropertyConstants.VMARGIN + 1; panel.setLayout(layout); tableViewer = new TableViewer(panel, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); FormData tableLayoutData = new FormData(); tableLayoutData.left = new FormAttachment(10, 0); tableLayoutData.right = new FormAttachment(90, 0); tableLayoutData.top = new FormAttachment(10, 0); tableLayoutData.bottom = new FormAttachment(50, 0); final Table table = tableViewer.getTable(); table.setLayoutData(tableLayoutData); table.setHeaderVisible(true); table.setLinesVisible(true); TableColumn columnName = new TableColumn(table, SWT.NONE, ADD_COLUMN); columnName.setText(Messages.getString("SQLPatternComposite.sqlPattern")); //$NON-NLS-1$ columnName.setWidth(200); columnName.setResizable(true); columnName.setMoveable(true); Image addImage = ImageProvider.getImage(EImage.ADD_ICON); Image removeImage = ImageProvider.getImage(EImage.DELETE_ICON); buttonAdd = new Button(panel, SWT.NONE); buttonAdd.setText(Messages.getString("SQLPatternComposite.add")); //$NON-NLS-1$ buttonAdd.setImage(addImage); FormData buttonAddData = new FormData(); buttonAddData.left = new FormAttachment(table, 10, SWT.LEFT); buttonAddData.top = new FormAttachment(table, 2); buttonAdd.setLayoutData(buttonAddData); buttonRemove = new Button(panel, SWT.NONE); buttonRemove.setText(Messages.getString("SQLPatternComposite.delete")); //$NON-NLS-1$ buttonRemove.setImage(removeImage); FormData buttonRemoveData = new FormData(); buttonRemoveData.left = new FormAttachment(buttonAdd, 1, SWT.RIGHT); buttonRemoveData.top = new FormAttachment(table, 2); buttonRemove.setLayoutData(buttonRemoveData); upButton = new Button(panel, SWT.NONE); upButton.setText(Messages.getString("SQLPatternComposite.up")); //$NON-NLS-1$ upButton.setImage(ImageProvider.getImage(EImage.UP_ICON)); FormData upFormData = new FormData(); upFormData.left = new FormAttachment(buttonRemove, 1, SWT.RIGHT); upFormData.top = new FormAttachment(table, 2); upButton.setLayoutData(upFormData); downButton = new Button(panel, SWT.NONE); downButton.setText(Messages.getString("SQLPatternComposite.down")); //$NON-NLS-1$ downButton.setImage(ImageProvider.getImage(EImage.DOWN_ICON)); FormData downFormData = new FormData(); downFormData.left = new FormAttachment(upButton, 1, SWT.RIGHT); downFormData.top = new FormAttachment(table, 2); downButton.setLayoutData(downFormData); createCodeControl(panel, buttonAdd); setMinSize(panel.computeSize(SWT.DEFAULT, SWT.DEFAULT)); TableViewerProvider provider = new TableViewerProvider(); tableViewer.setContentProvider(provider); tableViewer.setLabelProvider(provider); addTableSorter(tableViewer, columnName); tableViewer.setCellModifier(new ICellModifier() { public boolean canModify(Object element, String property) { return comboContent.size() > 0; } public Object getValue(Object element, String property) { if (property.equals(NAME_PROPERTY)) { Map map = (Map) element; String id = (String) map.get(SQLPatternUtils.SQLPATTERNLIST); id = id.split(SQLPatternUtils.ID_SEPARATOR)[0]; IRepositoryViewObject repositoryObject = SQLPatternUtils.getLastVersionRepositoryObjectById(id); String label = repositoryObject.getLabel(); refreshComboContent(tableViewer, false); SQLPatternInfor infor = null; for (SQLPatternInfor sqlPatternInfor : comboContent) { if (sqlPatternInfor.getCompoundId().equals(id)) { infor = sqlPatternInfor; break; } } if (infor == null) { infor = new SQLPatternInfor(id + SQLPatternUtils.ID_SEPARATOR + label, label); } comboContent.add(infor); dynamicComboBoxCellEditor.refresh(); return infor; } return ""; //$NON-NLS-1$ } public void modify(Object elem, String property, Object value) { TableItem item = null; if (elem instanceof Table) { item = ((Table) elem).getItem(0); } else if (elem instanceof TableItem) { item = (TableItem) elem; } if (item != null && value != null) { if (property.equals(NAME_PROPERTY)) { Map map = (Map) item.getData(); SQLPatternInfor sqlPatternInfor = (SQLPatternInfor) value; if (map.get(SQLPatternUtils.SQLPATTERNLIST).equals(sqlPatternInfor.getCompoundId())) { return; } map.put(SQLPatternUtils.SQLPATTERNLIST, sqlPatternInfor.getCompoundId()); executeCommand(new Command() { }); refreshComboContent(tableViewer, false); updateCodeText(); } tableViewer.refresh(); } } }); List<Map> tableContent = getTableInput(element); tableViewer.setInput(tableContent); refreshComboContent(tableViewer, false); dynamicComboBoxCellEditor = new DynamicComboBoxCellEditor(table, comboContent, comboboxCellEditorLabelProvider); tableViewer.setCellEditors(new CellEditor[] { dynamicComboBoxCellEditor }); tableViewer.setColumnProperties(new String[] { NAME_PROPERTY }); addSelectionChangeListener(tableViewer); buttonAdd.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (comboContent.size() > 0) { List<Map> tableInput = (List<Map>) tableViewer.getInput(); SQLPatternInfor sqlPatternInfor = comboContent.get(0); Map map = new HashMap(); map.put(SQLPatternUtils.SQLPATTERNLIST, sqlPatternInfor.getCompoundId()); tableInput.add(map); refreshComboContent(tableViewer, false); tableViewer.refresh(); if (!buttonRemove.isEnabled()) { buttonRemove.setEnabled(true); } executeCommand(new PropertyChangeCommand(element, EParameterName.SQLPATTERN_VALUE.getName(), element .getElementParameter(EParameterName.SQLPATTERN_VALUE.getName()).getValue())); refreshCode(element); } } }); buttonRemove.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ISelection selection = tableViewer.getSelection(); List<Map> tableViewerInput = ((List<Map>) tableViewer.getInput()); boolean needRefresh = false; if (!selection.isEmpty() && selection instanceof StructuredSelection) { Object[] elements = ((StructuredSelection) selection).toArray(); for (Object element : elements) { tableViewerInput.remove(element); } needRefresh = true; } else if (!tableViewerInput.isEmpty()) { int index = tableViewerInput.size() - 1; tableViewerInput.remove(index); needRefresh = true; } if (needRefresh) { refreshCode(element); refreshComboContent(tableViewer, false); tableViewer.refresh(); executeCommand(new PropertyChangeCommand(element, EParameterName.SQLPATTERN_VALUE.getName(), element .getElementParameter(EParameterName.SQLPATTERN_VALUE.getName()).getValue())); } } }); upButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); if (selection.size() != 1) { return; } Map selectedElement = (Map) selection.getFirstElement(); List<Map> tableInput = (List<Map>) tableViewer.getInput(); int index = tableInput.indexOf(selectedElement); if (index == 0) { return; } tableInput.remove(selectedElement); tableInput.add(index - 1, selectedElement); refreshCode(element); refreshComboContent(tableViewer, false); tableViewer.refresh(); executeCommand(new PropertyChangeCommand(element, EParameterName.SQLPATTERN_VALUE.getName(), element .getElementParameter(EParameterName.SQLPATTERN_VALUE.getName()).getValue())); } }); downButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); if (selection.size() != 1) { return; } Map selectedElement = (Map) selection.getFirstElement(); List<Map> tableInput = (List<Map>) tableViewer.getInput(); int index = tableInput.indexOf(selectedElement); if (index == tableInput.size() - 1) { return; } tableInput.remove(selectedElement); tableInput.add(index + 1, selectedElement); refreshCode(element); refreshComboContent(tableViewer, false); tableViewer.refresh(); executeCommand(new PropertyChangeCommand(element, EParameterName.SQLPATTERN_VALUE.getName(), element .getElementParameter(EParameterName.SQLPATTERN_VALUE.getName()).getValue())); } }); ResourcesPlugin.getWorkspace().addResourceChangeListener(this); if (element != null && element instanceof INode) { INode node = (INode) element; if (buttonAdd != null && !buttonAdd.isDisposed()) { buttonAdd.setEnabled(!node.isReadOnly()); } if (buttonRemove != null && !buttonRemove.isDisposed()) { buttonRemove.setEnabled(!node.isReadOnly()); } if (table != null && !table.isDisposed()) { table.setEnabled(!node.isReadOnly()); } } } /* * (non-Javadoc) * * @see org.eclipse.swt.widgets.Widget#dispose() */ @Override public void dispose() { ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); super.dispose(); } /** * DOC bqian Comment method "addTableSorter". * * @param tableViewer2 * @param columnName */ private void addTableSorter(TableViewer viewer, TableColumn columnName) { new ColumnViewerSorter(viewer, columnName); } /** * bqian SQLPatternComposite class global comment. Detailled comment */ private static class ColumnViewerSorter extends ViewerComparator { public static final int ASC = 1; public static final int NONE = 0; public static final int DESC = -1; private int direction = 0; private TableColumn column; private ColumnViewer viewer; public ColumnViewerSorter(ColumnViewer viewer, TableColumn column) { this.column = column; this.viewer = viewer; this.column.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (ColumnViewerSorter.this.viewer.getComparator() != null) { if (ColumnViewerSorter.this.viewer.getComparator() == ColumnViewerSorter.this) { int tdirection = ColumnViewerSorter.this.direction; if (tdirection == ASC) { setSorter(ColumnViewerSorter.this, DESC); } else if (tdirection == DESC) { setSorter(ColumnViewerSorter.this, NONE); } } else { setSorter(ColumnViewerSorter.this, ASC); } } else { setSorter(ColumnViewerSorter.this, ASC); } } }); } public void setSorter(ColumnViewerSorter sorter, int direction) { if (direction == NONE) { column.getParent().setSortColumn(null); column.getParent().setSortDirection(SWT.NONE); viewer.setComparator(null); } else { column.getParent().setSortColumn(column); sorter.direction = direction; if (direction == ASC) { column.getParent().setSortDirection(SWT.DOWN); } else { column.getParent().setSortDirection(SWT.UP); } if (viewer.getComparator() == sorter) { viewer.refresh(); } else { viewer.setComparator(sorter); } } } public int compare(Viewer viewer, Object e1, Object e2) { return direction * super.compare(viewer, e1, e2); } } /** * DOC bqian Comment method "createCodeControl". * * @param panel * @param */ private void createCodeControl(Composite panel, Control reference) { codeText = new Text(panel, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); codeText.setEditable(false); FormData fd = new FormData(); fd.left = new FormAttachment(10, 0); fd.right = new FormAttachment(90, 0); fd.top = new FormAttachment(reference, 2); fd.bottom = new FormAttachment(95, 0); codeText.setLayoutData(fd); codeText.addMouseListener(new MouseListener() { public void mouseUp(MouseEvent e) { if (tableViewer.getTable().getSelection().length == 0) { return; } TableItem item = tableViewer.getTable().getSelection()[0]; if (item == null || item.getText() == null) { return; } String sqlpatternName = item.getText(); SQLPatternItem patternItem = SQLPatternUtils.getSQLPatternItem(SQLPatternComposite.this.element, sqlpatternName); if (patternItem.isSystem()) { boolean answer = MessageDialog.openQuestion(getShell(), Messages.getString("SQLPatternComposite.TOS"), //$NON-NLS-1$ Messages.getString("SQLPatternComposite.forbidModification")); //$NON-NLS-1$ if (!answer) { return; } IRepositoryService repositoryService = (IRepositoryService) GlobalServiceRegister.getDefault().getService( IRepositoryService.class); IElementParameter parameter = element.getElementParameter(EParameterName.SQLPATTERN_DB_NAME.getName()); String dbName = (String) parameter.getValue(); String path = dbName + "/" + RepositoryConstants.USER_DEFINED; //$NON-NLS-1$ repositoryService.createSqlpattern(path, true); } else if (sqlPatternAndProject.get(patternItem) != null) { MessageDialog.openInformation(getShell(), "Information", "Forbid modification on sql template from reference project"); } else { boolean answer = MessageDialog.openQuestion(getShell(), Messages.getString("SQLPatternComposite.TOS"), //$NON-NLS-1$ Messages.getString("SQLPatternComposite.modifySQLPattern")); //$NON-NLS-1$ if (!answer) { return; } IRepositoryService repositoryService = (IRepositoryService) GlobalServiceRegister.getDefault().getService( IRepositoryService.class); repositoryService.openSQLPatternEditor(patternItem, false); } } public void mouseDown(MouseEvent e) { // do nothing } public void mouseDoubleClick(MouseEvent e) { mouseUp(e); } }); } /** * DOC bqian Comment method "addSelectionChangeListener". * * @param tableViewer */ private void addSelectionChangeListener(final TableViewer tableViewer) { tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateCodeText(); } }); } /** * bqian Comment method "getTableInput". * * @param element * @return */ private List<Map> getTableInput(Element element) { List<Map> value = refreshCode(element); return value; } private boolean firstTimeLoad = true; /** * yzhang Comment method "refreshCode". * * @param element * @return */ private List<Map> refreshCode(Element element) { IElementParameter sqlPatternValue = element.getElementParameter(EParameterName.SQLPATTERN_VALUE.getName()); if (sqlPatternValue != null) { List<Map> values = (List<Map>) sqlPatternValue.getValue(); if (firstTimeLoad) { List<Map> unusedValues = new ArrayList<Map>(); for (Map map : values) { String compoundId = (String) map.get(SQLPatternUtils.SQLPATTERNLIST); String id = compoundId.split(SQLPatternUtils.ID_SEPARATOR)[0]; IRepositoryViewObject repositoryObject = SQLPatternUtils.getLastVersionRepositoryObjectById(id); String name = compoundId.split(SQLPatternUtils.ID_SEPARATOR)[1]; SQLPatternItem item = null; if (repositoryObject == null && (item = SQLPatternUtils.getSQLPatternItem(element, name)) == null) { unusedValues.add(map); } } values.removeAll(unusedValues); firstTimeLoad = false; } return values; } return new ArrayList(); } /** * yzhang AdvancedContextComposite class global comment. Detailled comment */ private class DynamicComboBoxCellEditor extends ExtendedComboBoxCellEditor { /** * yzhang ComboBoxCellEditor constructor comment. * * @param composite * @param list * @param labelProvider */ public DynamicComboBoxCellEditor(Composite composite, List<?> list, ILabelProvider labelProvider) { super(composite, list, labelProvider); } public void refresh() { refreshItems(""); //$NON-NLS-1$ } } /** * yzhang Comment method "executeCommand". * * @param cmd */ private void executeCommand(Command cmd) { if (commandStack == null) { IEditorPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (part instanceof AbstractMultiPageTalendEditor) { AbstractTalendEditor editor = ((AbstractMultiPageTalendEditor) part).getTalendEditor(); commandStack = (CommandStack) editor.getAdapter(CommandStack.class); } } if (commandStack == null) { return; } commandStack.execute(cmd); } /** * yzhang Comment method "refreshComboContent". * * @param tableViewer * @param legalParameters */ private void refreshComboContent(final TableViewer tableViewer, final boolean modifySQL) { Display.getDefault().syncExec(new Runnable() { /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ public void run() { if (comboContent == null) { comboContent = new ArrayList<SQLPatternInfor>(); } comboContent.clear(); List<Map> tableInput = (List<Map>) tableViewer.getInput(); List<SQLPatternInfor> content = getAllSqlPatterns(tableInput, modifySQL); for (Map map : tableInput) { String id = (String) map.get(SQLPatternUtils.SQLPATTERNLIST); SQLPatternInfor unusedSqlPatternInfor = null; for (SQLPatternInfor patternInfor : content) { if (patternInfor.getCompoundId().equals(id)) { unusedSqlPatternInfor = patternInfor; break; } } content.remove(unusedSqlPatternInfor); } comboContent.addAll(content); refreshButton(); } }); } private void refreshButton() { buttonAdd.setEnabled(comboContent.size() > 0); buttonRemove.setEnabled(((List<Map>) tableViewer.getInput()).size() > 0); } private List<SQLPatternInfor> getAllSqlPatterns(List<Map> tableInput, boolean modifySQL) { IElementParameter elementParam = element.getElementParameter(EParameterName.SQLPATTERN_DB_NAME.getName()); if (elementParam == null) { return Collections.EMPTY_LIST; } // String dbName = (String) elementParam.getValue(); List<SQLPatternInfor> patternInfor = new ArrayList<SQLPatternInfor>(); try { List<IRepositoryViewObject> list = null; if (isItemIndexChecked() && modifySQL) { List<RelationshipItemBuilder.Relation> relations = new ArrayList<RelationshipItemBuilder.Relation>(); IProxyRepositoryFactory factory = CorePlugin.getDefault().getProxyRepositoryFactory(); List<IRepositoryViewObject> updateList = new ArrayList<IRepositoryViewObject>(); for (Map map : tableInput) { String id = (String) map.get(SQLPatternUtils.SQLPATTERNLIST); relations.addAll(RelationshipItemBuilder.getInstance().getItemsRelatedTo(id, ItemCacheManager.LATEST_VERSION, RelationshipItemBuilder.SQLPATTERN_RELATION)); } for (RelationshipItemBuilder.Relation relation : relations) { try { IRepositoryViewObject obj = factory.getLastVersion(relation.getId()); if (obj != null) { updateList.add(obj); } } catch (PersistenceException e) { ExceptionHandler.process(e); } } list = updateList; } else { list = DesignerPlugin.getDefault().getRepositoryService().getProxyRepositoryFactory() .getAll(ERepositoryObjectType.SQLPATTERNS, false); // add reference sql pattern addReferencedSQLTemplate(list, ProjectManager.getInstance().getCurrentProject()); } for (IRepositoryViewObject repositoryObject : list) { Item item = repositoryObject.getProperty().getItem(); if (item instanceof SQLPatternItem) { SQLPatternItem sqlitem = (SQLPatternItem) repositoryObject.getProperty().getItem(); // disable this test as there is now only Generic ELT components // if (item.getEltName().equals(dbName)) { patternInfor.add(new SQLPatternInfor(sqlitem.getProperty().getId() + SQLPatternUtils.ID_SEPARATOR + sqlitem.getProperty().getLabel(), sqlitem.getProperty().getLabel())); // } } } } catch (Exception e) { ExceptionHandler.process(e); } return patternInfor; } private void addReferencedSQLTemplate(List<IRepositoryViewObject> list, Project project) { try { Context ctx = CorePlugin.getContext(); if (ctx == null) { return; } RepositoryContext repositoryContext = (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY); String parentBranch = repositoryContext.getFields().get( IProxyRepositoryFactory.BRANCH_SELECTION + "_" + project.getTechnicalLabel()); List<ProjectReference> referencedProjects = (List<ProjectReference>) project.getEmfProject().getReferencedProjects(); for (ProjectReference referenced : referencedProjects) { if (referenced.getBranch() != null && !parentBranch.equals(referenced.getBranch())) { continue; } org.talend.core.model.properties.Project referencedEmfProject = referenced.getReferencedProject(); EList refeInRef = referencedEmfProject.getReferencedProjects(); Project newProject = new Project(referencedEmfProject); if (refeInRef != null && refeInRef.size() > 0) { addReferencedSQLTemplate(list, newProject); } List<IRepositoryViewObject> refList; refList = DesignerPlugin.getDefault().getRepositoryService().getProxyRepositoryFactory() .getAll(newProject, ERepositoryObjectType.SQLPATTERNS, false); for (IRepositoryViewObject repositoryObject : refList) { Item item = repositoryObject.getProperty().getItem(); if (item instanceof SQLPatternItem) { if (!((SQLPatternItem) item).isSystem()) { list.add(repositoryObject); sqlPatternAndProject.put((SQLPatternItem) item, project); } } } } } catch (PersistenceException e) { ExceptionHandler.process(e); } } private ILabelProvider comboboxCellEditorLabelProvider = new ILabelProvider() { public Image getImage(Object element) { return null; } public String getText(Object element) { return ((SQLPatternInfor) element).getLabel(); } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }; private CommandStack commandStack; /** * yzhang AdvancedContextComposite class global comment. Detailled comment */ private class TableViewerProvider extends LabelProvider implements IStructuredContentProvider { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { if (inputElement instanceof List) { return ((List) inputElement).toArray(); } return new Object[0]; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element instanceof Map) { Map ep = (Map) element; String compoundId = (String) ep.get(SQLPatternUtils.SQLPATTERNLIST); String id = compoundId.split(SQLPatternUtils.ID_SEPARATOR)[0]; IRepositoryViewObject repositoryObject = SQLPatternUtils.getLastVersionRepositoryObjectById(id); String name = compoundId.split(SQLPatternUtils.ID_SEPARATOR)[1]; SQLPatternItem item = null; if (repositoryObject == null && (item = SQLPatternUtils.getSQLPatternItem(SQLPatternComposite.this.element, name)) != null) { ep.put(SQLPatternUtils.SQLPATTERNLIST, item.getProperty().getId() + SQLPatternUtils.ID_SEPARATOR + item.getProperty().getLabel()); return item.getProperty().getLabel(); } if (repositoryObject != null) { return repositoryObject.getLabel(); } } return null; } } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getComposite() */ public Composite getComposite() { return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getCurRowSize() */ public int getCurRowSize() { return 0; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getElement() */ public Element getElement() { return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getHashCurControls() */ public BidiMap getHashCurControls() { return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getPart() */ public AbstractMultiPageTalendEditor getPart() { return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getQueriesMap() */ public Map<String, List<String>> getQueriesMap() { return null; } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getRepositoryAliasName(org * .talend.core.model.properties.ConnectionItem) */ public String getRepositoryAliasName(ConnectionItem connectionItem) { return null; } /* 16969 */ // /* // * (non-Javadoc) // * // * @see // * // org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getRepositoryConnectionItemMap // * () // */ // public Map<String, ConnectionItem> getRepositoryConnectionItemMap() { // return null; // } // /* // * (non-Javadoc) // * // * @see // * // org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getRepositoryQueryStoreMap() // */ // public Map<String, Query> getRepositoryQueryStoreMap() { // return null; // } // /* // * (non-Javadoc) // * // * @see // org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getRepositoryTableMap() // */ // public Map<String, IMetadataTable> getRepositoryTableMap() { // return null; // } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getSection() */ public EComponentCategory getSection() { return null; } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getTableIdAndDbSchemaMap() */ public Map<String, String> getTableIdAndDbSchemaMap() { return null; } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getTableIdAndDbTypeMap() */ public Map<String, String> getTableIdAndDbTypeMap() { return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getTablesMap() */ public Map<String, List<String>> getTablesMap() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#refresh() */ public void refresh() { refreshCode(element); updateCodeText(); Display.getDefault().syncExec(new Runnable() { /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ public void run() { getParent().layout(); } }); } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#setCurRowSize(int) */ public void setCurRowSize(int i) { } /** * yzhang Comment method "updateCodeText". */ private void updateCodeText() { Display.getDefault().syncExec(new Runnable() { /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ public void run() { Object o = ((IStructuredSelection) tableViewer.getSelection()).getFirstElement(); if (o == null) { return; } Map map = (Map) o; Object object = map.get(SQLPatternUtils.SQLPATTERNLIST); String id = null; if (object instanceof String) { id = (String) object; id = id.split(SQLPatternUtils.ID_SEPARATOR)[0]; } else { TableItem item = tableViewer.getTable().getSelection()[0]; id = item.getText(); } IRepositoryViewObject repositoryObject = SQLPatternUtils.getLastVersionRepositoryObjectById(id); byte[] code = ((SQLPatternItem) repositoryObject.getProperty().getItem()).getContent().getInnerContent(); codeText.setText(new String(code)); } }); } /* * (non-Javadoc) * * @see * org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent * ) */ public void resourceChanged(IResourceChangeEvent event) { if (event.getType() == IResourceChangeEvent.POST_CHANGE) { refreshComboContent(this.tableViewer, true); refresh(); } } /** * yzhang SQLPatternComposite class global comment. Detailled comment */ private class SQLPatternInfor { private String label; private String id; private String compoundId; /** * yzhang SQLPatternComposite.SQLPatternInfor constructor comment. */ public SQLPatternInfor(String id, String label) { this.compoundId = id; this.label = label; } /** * Getter for label. * * @return the label */ public String getLabel() { return this.label; } /** * Sets the label. * * @param label the label to set */ public void setLabel(String label) { this.label = label; } /** * Sets the id. * * @param id the id to set */ public void setId(String id) { this.id = id; } /** * yzhang Comment method "getCompoundId". * * @return */ public String getCompoundId() { return compoundId; } } public boolean isItemIndexChecked() { // IDesignerCoreService designerCoreService = CorePlugin.getDefault().getDesignerCoreService(); // IPreferenceStore preferenceStore = designerCoreService.getDesignerCorePreferenceStore(); // return preferenceStore.getBoolean(ITalendCorePrefConstants.ITEM_INDEX); return true; } }