// ============================================================================ // // 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.problems; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.StringWriter; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.widgets.Display; import org.talend.commons.exception.PersistenceException; 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.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.language.ECodeLanguage; import org.talend.core.model.general.Project; import org.talend.core.model.properties.Property; import org.talend.core.model.properties.RoutineItem; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.service.IDesignerPerlService; import org.talend.designer.codegen.ICodeGeneratorService; import org.talend.designer.codegen.ITalendSynchronizer; import org.talend.repository.model.IProxyRepositoryFactory; /** * DOC xhuang class global comment. Detailled comment */ public class RoutineItemsCheck { private ITalendSynchronizer routineSynchronizer; private ECodeLanguage language; /* * add all routine items compilation errors into problmes views */ public void addAllRoutineProblem() { IProxyRepositoryFactory factory = CorePlugin.getDefault().getProxyRepositoryFactory(); RepositoryContext repositoryContext = (RepositoryContext) CorePlugin.getContext().getProperty( Context.REPOSITORY_CONTEXT_KEY); if (repositoryContext == null) { return; } Project project = repositoryContext.getProject(); if (project == null) { return; } language = project.getLanguage(); if (language == null) { return; } if (language == ECodeLanguage.PERL) { try { ICodeGeneratorService service = (ICodeGeneratorService) GlobalServiceRegister.getDefault().getService( ICodeGeneratorService.class); routineSynchronizer = service.createPerlRoutineSynchronizer(); List<IRepositoryViewObject> routineObjList = factory.getAll(ERepositoryObjectType.ROUTINES, false); for (IRepositoryViewObject repositoryObj : routineObjList) { RoutineItem item = (RoutineItem) repositoryObj.getProperty().getItem(); routineSynchronizer.syncRoutine(item, true); IFile file = routineSynchronizer.getFile(item); addProblems(item, item.getProperty(), file); } } catch (PersistenceException e) { ExceptionHandler.process(e); } catch (SystemException e) { ExceptionHandler.process(e); } Display.getDefault().asyncExec(new Runnable() { public void run() { Problems.refreshProblemTreeView(); } }); } } /** * add one routine Item errors into problems view. * * @param item * @param itemLabel * @param file */ private void addProblems(RoutineItem item, Property property, IFile file) { try { String sourceCode = readSourceFile(file.getLocation().toOSString()); if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerPerlService.class)) { IDesignerPerlService service = (IDesignerPerlService) GlobalServiceRegister.getDefault().getService( IDesignerPerlService.class); service.perlValidator(file, sourceCode); } } catch (IOException ex) { ExceptionHandler.process(ex); } catch (CoreException ex) { ExceptionHandler.process(ex); } Problems.addRoutineFile(file, property); } /** * xhuang Comment method "readSourceFile". * * @param path * @return * @throws IOException */ private String readSourceFile(String path) throws IOException { BufferedReader in = null; try { StringWriter sourceCode = new StringWriter(); char[] buf = new char[1024]; in = new BufferedReader(new FileReader(path)); int read = 0; while ((read = in.read(buf)) > 0) { sourceCode.write(buf, 0, read); } return sourceCode.toString(); } finally { if (in != null) try { in.close(); } catch (IOException e) { } } } }