// ============================================================================ // // 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.editor; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor; import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer; import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds; import org.eclipse.jdt.ui.text.IJavaPartitions; import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration; import org.eclipse.jdt.ui.text.JavaTextTools; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.FindReplaceDocumentAdapter; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.widgets.Composite; import org.talend.commons.exception.SystemException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.language.ECodeLanguage; import org.talend.core.language.LanguageManager; import org.talend.core.model.process.IProcess2; import org.talend.core.model.properties.Information; import org.talend.core.model.properties.InformationLevel; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.ProcessItem; import org.talend.core.model.properties.Property; import org.talend.designer.codegen.ITalendSynchronizer; import org.talend.designer.core.ICamelDesignerCoreService; import org.talend.designer.core.ISyntaxCheckableEditor; import org.talend.designer.core.ui.views.problems.Problems; /** * DOC yzhang class global comment. Detailled comment <br/> * * $Id: TalendJavaEditor.java 1 2007-1-18 下午03:26:08 +0000 (下午03:26:08, 2007-1-18 2007) yzhang $ * */ public class TalendJavaEditor extends CompilationUnitEditor implements ISyntaxCheckableEditor { private org.eclipse.jdt.core.ICompilationUnit unit; private boolean disposed = false; private String currentSelection; private IProcess2 process; /** * DOC amaumont TalendJavaEditor constructor comment. */ public TalendJavaEditor(IProcess2 process) { super(); this.process = process; } /* * Over write this method force to add complier to this editor. Beacuse by default if the editor is not editable, * the complier for error check will not installed. * * @see * org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { super.createPartControl(parent); addCompiler(); getSourceViewer().setEditable(isEditable()); } /** * Add complier for error check in this Java editor. * * DOC yzhang Comment method "addCompiler". */ private void addCompiler() { unit = (org.eclipse.jdt.core.ICompilationUnit) getInputJavaElement(); } /* * Edit is not allowed. * * @see org.eclipse.ui.texteditor.AbstractTextEditor#isEditable() */ @Override public boolean isEditable() { return false; } /* * Check the syntax for java code. * * @see org.talend.designer.core.ui.editor.ISyntaxCheckable#validateSyntax() */ public void validateSyntax() { ISourceViewer sourceViewer = getSourceViewer(); if (sourceViewer instanceof JavaSourceViewer) { this.getSourceViewer().getTextWidget().getDisplay().asyncExec(new Runnable() { public void run() { // selectAndReveal(0, 0); // JavaSourceViewer javaSourceViewer = (JavaSourceViewer) getSourceViewer(); // if (javaSourceViewer != null) { // javaSourceViewer.doOperation(ISourceViewer.FORMAT); // } // doSave(null); placeCursorToSelection(); Property property = process.getProperty(); ITalendSynchronizer synchronizer = CorePlugin.getDefault().getCodeGeneratorService() .createRoutineSynchronizer(); try { // try { // ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, null); // } catch (CoreException e) { // ExceptionHandler.process(e); // } if (LanguageManager.getCurrentLanguage() == ECodeLanguage.JAVA) { try { CorePlugin.getDefault().getRunProcessService().getJavaProject().getProject() .build(IncrementalProjectBuilder.AUTO_BUILD, null); } catch (CoreException e) { ExceptionHandler.process(e); } } Item item = property.getItem(); if (GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) { ICamelDesignerCoreService service = (ICamelDesignerCoreService) GlobalServiceRegister.getDefault() .getService(ICamelDesignerCoreService.class); if (service.isInstanceofCamel(item)) { synchronizer = CorePlugin.getDefault().getCodeGeneratorService().createCamelBeanSynchronizer(); } } List<Information> informations = Problems.addRoutineFile(synchronizer.getFile(item), property, true); // save error status property.getInformations().clear(); // add only the errors in the property, not the warnings for (Information info : informations) { if (info.getLevel().equals(InformationLevel.ERROR_LITERAL)) { property.getInformations().add(info); } } Problems.computePropertyMaxInformationLevel(property); } catch (SystemException e) { ExceptionHandler.process(e); } Problems.refreshRepositoryView(); Problems.refreshProblemTreeView(); } }); } } /** * For job item, we only need to display if it is error. * * @param informations * @return */ private List<Information> collectOnlyErrors(List<Information> informations) { List<Information> errors = new ArrayList<Information>(); for (Information info : informations) { if (InformationLevel.ERROR_LITERAL.equals(info.getLevel())) { errors.add(info); } } return errors; } private void placeCursorToSelection() { String mainPart = "[" + currentSelection + " main ] start"; //$NON-NLS-1$ //$NON-NLS-2$ String assignmentPart = "currentComponent = \"" + currentSelection + "\";"; //$NON-NLS-1$ //$NON-NLS-2$ if (getDocumentProvider() == null) { return; } IDocument doc = getDocumentProvider().getDocument(getEditorInput()); FindReplaceDocumentAdapter frda = new FindReplaceDocumentAdapter(doc); try { Region region = (Region) frda.find(0, mainPart, true, false, false, false); if (region != null) { Region region2 = (Region) frda.find(region.getOffset(), assignmentPart, true, false, false, false); if (region2 != null) { selectAndReveal(region2.getOffset(), assignmentPart.length()); } else { selectAndReveal(region.getOffset(), mainPart.length()); } } else { selectAndReveal(0, 0); } } catch (BadLocationException e) { selectAndReveal(0, 0); } } /* * Save as is not allowed. * * @see org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor#isSaveAsAllowed() */ @Override public boolean isSaveAsAllowed() { return false; } /* * (non-Javadoc) * * @see org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor#dispose() */ @Override public void dispose() { this.disposed = true; this.unit = null; super.dispose(); } /** * * * DOC yzhang Comment method "isDisposed". * * @return Whether this editor had been disposed. */ public boolean isDisposed() { return this.disposed; } /** * Getter for unit. * * @return the unit */ public org.eclipse.jdt.core.ICompilationUnit getUnit() { return unit; } /** * DOC nrousseau Comment method "placeCursorTo". * * @param string */ public void placeCursorTo(String currentSelection) { this.currentSelection = currentSelection; placeCursorToSelection(); } /* * (non-Javadoc) * * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#createJavaSourceViewerConfiguration() */ @Override protected JavaSourceViewerConfiguration createJavaSourceViewerConfiguration() { JavaTextTools textTools = JavaPlugin.getDefault().getJavaTextTools(); return new JavaSourceViewerConfiguration(textTools.getColorManager(), getPreferenceStore(), this, IJavaPartitions.JAVA_PARTITIONING); } protected void createActions() { super.createActions(); getAction(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB).setEnabled(false); } protected boolean isErrorStatus(IStatus status) { if (!(process.getProperty().getItem() instanceof ProcessItem)) { return false; } return super.isErrorStatus(status); } }