// ============================================================================ // // Copyright (C) 2006-2016 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.dataprofiler.core.ui.views.provider; import static org.junit.Assert.*; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.regex.Pattern; import junit.framework.Assert; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.util.EcoreUtil; import org.junit.Test; import org.talend.commons.emf.EMFUtil; import org.talend.commons.exception.PersistenceException; 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.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.properties.Status; import org.talend.core.model.properties.User; import org.talend.core.model.properties.helper.StatusHelper; import org.talend.core.repository.constants.FileConstants; import org.talend.core.repository.model.IRepositoryFactory; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.repository.model.RepositoryFactoryProvider; import org.talend.core.repository.utils.ProjectHelper; import org.talend.core.repository.utils.XmiResourceManager; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.dataprofiler.core.exception.ExceptionHandler; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.manager.DQStructureManager; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisFactory; import org.talend.dataquality.analysis.AnalysisResult; import org.talend.dataquality.helpers.AnalysisHelper; import org.talend.dataquality.helpers.ReportHelper; import org.talend.dataquality.properties.TDQAnalysisItem; import org.talend.dataquality.properties.TDQReportItem; import org.talend.dataquality.properties.impl.PropertiesFactoryImpl; import org.talend.model.bridge.ReponsitoryContextBridge; import org.talend.repository.ProjectManager; import org.talend.repository.model.RepositoryConstants; import org.talend.resource.EResourceConstant; import org.talend.resource.ResourceManager; import orgomg.cwmx.analysis.informationreporting.Report; /** * DOC zshen class global comment. Test the method * org.talend.dataprofiler.core.ui.views.provider.ResourceViewLabelProvider#getFileCount */ public class ResourceViewLabelProviderTest { private static String[] filterExtensions = { "ana", "rep" };//$NON-NLS-1$//$NON-NLS-2$ final private String anaFolderName = "TDQ_Data Profiling/Analyses";//$NON-NLS-1$ final private String repFolderName = "TDQ_Data Profiling/Reports";//$NON-NLS-1$ Logger log = Logger.getLogger(ResourceViewLabelProviderTest.class); /** * Test method for * {@link org.talend.dataprofiler.core.ui.views.provider.ResourceViewLabelProvider#getFileCount(org.eclipse.core.resources.IFolder, java.lang.String[])} * */ @Test public void testGetFileCount() { log.debug("##############testGetFileCount start"); IFolder repFolder = initFolder(EResourceConstant.REPORTS.getPath()); IFolder anaFolder = initFolder(EResourceConstant.ANALYSIS.getPath()); ResourceViewLabelProvider reViewLabelProvider = new ResourceViewLabelProvider(); int analysisNum = reViewLabelProvider.getFileCount(anaFolder, filterExtensions); int reportNum = reViewLabelProvider.getFileCount(repFolder, filterExtensions); log.debug("##############AnalysisNum is" + analysisNum); log.debug("##############reportNum is" + reportNum); assertEquals(3, analysisNum); assertEquals(3, reportNum); } /** * * DOC zshen Comment method "initFolder". init the folder which contain ana and rep files * * @param folderName * @return */ public IFolder initFolder(String folderName) { IProject rootProject = ReponsitoryContextBridge.getRootProject(); if (!rootProject.exists()) { log.debug("##############ResourceViewLabelProviderTest enter initProxyRepository method by debug"); initProxyRepository(rootProject); } if (DQStructureManager.getInstance().isNeedCreateStructure()) { DQStructureManager.getInstance().createDQStructure(); } IFolder elementRootFolder = rootProject.getFolder(folderName); if (!elementRootFolder.exists()) { try { elementRootFolder.create(true, true, null); } catch (CoreException e) { Assert.fail(e.getMessage()); } } // for analyses if (anaFolderName.equals(folderName)) { IFolder analysisFolder = createFolder(elementRootFolder, "ResourceViewLabelProviderTestAnalysisFolder");//$NON-NLS-1$ IFolder subfolder1 = createFolder(analysisFolder, "subfolder1");//$NON-NLS-1$ IFolder subfolder2 = createFolder(analysisFolder, "subfolder2");//$NON-NLS-1$ elementRootFolder = analysisFolder; // logic delete one createAnalysis("a4", new Path(analysisFolder.getFullPath().lastSegment()), true);//$NON-NLS-1$ // ~logic delete one createAnalysis("a1", new Path(analysisFolder.getFullPath().lastSegment()), false);//$NON-NLS-1$ createAnalysis( "a3", new Path(analysisFolder.getFullPath().lastSegment()).append(subfolder2.getFullPath().lastSegment()), false);//$NON-NLS-1$ createAnalysis( "a2", new Path(analysisFolder.getFullPath().lastSegment()).append(subfolder1.getFullPath().lastSegment()), false);//$NON-NLS-1$ } // for reports if (repFolderName.equals(folderName)) { IFolder reportFolder = createFolder(elementRootFolder, "ResourceViewLabelProviderTestReportFolder");//$NON-NLS-1$ IFolder subfolder1 = createFolder(reportFolder, "subfolder1");//$NON-NLS-1$ IFolder subfolder2 = createFolder(reportFolder, "subfolder2");//$NON-NLS-1$ elementRootFolder = reportFolder; // logic delete one createReport("a4", new Path(reportFolder.getFullPath().lastSegment()), true);//$NON-NLS-1$ // ~logic delete one createReport("a1", new Path(reportFolder.getFullPath().lastSegment()), false);//$NON-NLS-1$ createReport( "a3", new Path(reportFolder.getFullPath().lastSegment()).append(subfolder2.getFullPath().lastSegment()), false);//$NON-NLS-1$ createReport( "a2", new Path(reportFolder.getFullPath().lastSegment()).append(subfolder1.getFullPath().lastSegment()), false);//$NON-NLS-1$ } return elementRootFolder; } /** * DOC talend Comment method "initProxyRepository". */ private void initProxyRepository(IProject rootProject) { Project project = null; ProxyRepositoryFactory proxyRepository = ProxyRepositoryFactory.getInstance(); IRepositoryFactory repository = RepositoryFactoryProvider.getRepositoriyById(RepositoryConstants.REPOSITORY_LOCAL_ID); if (repository == null) { log.fatal(DefaultMessagesImpl .getString("No local Repository found! Probably due to a missing plugin in the product.")); //$NON-NLS-1$ } proxyRepository.setRepositoryFactoryFromProvider(repository); try { proxyRepository.checkAvailability(); proxyRepository.initialize(); XmiResourceManager xmiResourceManager = new XmiResourceManager(); if (rootProject.getFile(FileConstants.LOCAL_PROJECT_FILENAME).exists()) { // Initialize TDQ EMF model packages. new EMFUtil(); project = new Project(xmiResourceManager.loadProject(rootProject)); } else { User user = org.talend.core.model.properties.impl.PropertiesFactoryImpl.eINSTANCE.createUser(); user.setLogin("talend@talend.com"); //$NON-NLS-1$ user.setPassword("talend@talend.com".getBytes()); //$NON-NLS-1$ String projectName = ResourceManager.getRootProjectName(); String projectDesc = ResourcesPlugin.getWorkspace().newProjectDescription(projectName).getComment(); Project projectInfor = ProjectHelper.createProject(projectName, projectDesc, ECodeLanguage.JAVA.getName(), user); // MOD zshen create project by proxyRepository checkFileName(projectInfor.getLabel(), RepositoryConstants.PROJECT_PATTERN); project = proxyRepository.getRepositoryFactoryFromProvider().createProject(projectInfor); } if (project != null) { initRepositoryContext(project); // add status String defaultTechnicalStatusList = "DEV development;TEST testing;PROD production"; //$NON-NLS-1$ List<Status> statusList = StatusHelper.parse(defaultTechnicalStatusList); proxyRepository.setTechnicalStatus(statusList); } } catch (PersistenceException e) { ExceptionHandler.process(e); log.error(e, e); Assert.fail(e.getMessage()); } } private void initRepositoryContext(Project project) { RepositoryContext repositoryContext = new RepositoryContext(); Context ctx = CoreRuntimePlugin.getInstance().getContext(); ctx.putProperty(Context.REPOSITORY_CONTEXT_KEY, repositoryContext); repositoryContext.setUser(project.getAuthor()); repositoryContext.setClearPassword(project.getLabel()); repositoryContext.setProject(project); repositoryContext.setFields(new HashMap<String, String>()); // repositoryContext.getFields().put(IProxyRepositoryFactory.BRANCH_SELECTION + "_" + project.getTechnicalLabel(), ""); //$NON-NLS-1$ //$NON-NLS-2$ ProjectManager.getInstance().setMainProjectBranch(project, null); ReponsitoryContextBridge.initialized(project.getEmfProject(), project.getAuthor()); // MOD zshen for bug tdq-4757 remove this init from corePlugin.start() to here because the initLocal command of // commandLine // SqlExplorerUtils.getDefault().initSqlExplorerRootProject(); } /** * * DOC zshen Comment method "checkFileName". * * @param fileName * @param pattern * * copy the method from ProxyRepositoryFactory to avoid tos migeration. */ private void checkFileName(String fileName, String pattern) { if (!Pattern.matches(pattern, fileName)) { Assert.fail(DefaultMessagesImpl.getString("ProxyRepositoryFactory.illegalArgumentException.labelNotMatchPattern", //$NON-NLS-1$ new Object[] { fileName, pattern })); throw new IllegalArgumentException(DefaultMessagesImpl.getString( "ProxyRepositoryFactory.illegalArgumentException.labelNotMatchPattern", new Object[] { fileName, pattern })); //$NON-NLS-1$ } } private void createReport(String name, IPath createPath, Boolean isDelete) { Report report1 = ReportHelper.createReport(name); TDQReportItem item1 = PropertiesFactoryImpl.eINSTANCE.createTDQReportItem(); org.talend.core.model.properties.Property property1 = PropertiesFactory.eINSTANCE.createProperty(); property1.setId(EcoreUtil.generateUUID()); property1.setItem(item1); property1.setLabel(report1.getName()); item1.setProperty(property1); item1.setReport(report1); ItemState itemState = org.talend.core.model.properties.PropertiesFactory.eINSTANCE.createItemState(); itemState.setDeleted(isDelete); item1.setState(itemState); try { ProxyRepositoryFactory.getInstance().create(item1, createPath, false); } catch (PersistenceException e) { Assert.fail(e.getMessage()); } } private void createAnalysis(String name, IPath createPath, Boolean isDelete) { Analysis analysis1 = AnalysisHelper.createAnalysis(name); TDQAnalysisItem item1 = PropertiesFactoryImpl.eINSTANCE.createTDQAnalysisItem(); org.talend.core.model.properties.Property property1 = PropertiesFactory.eINSTANCE.createProperty(); property1.setId(EcoreUtil.generateUUID()); property1.setItem(item1); property1.setLabel(analysis1.getName()); item1.setProperty(property1); item1.setAnalysis(analysis1); ItemState itemState = org.talend.core.model.properties.PropertiesFactory.eINSTANCE.createItemState(); itemState.setDeleted(isDelete); item1.setState(itemState); AnalysisResult analysisResult1 = AnalysisFactory.eINSTANCE.createAnalysisResult(); analysis1.setResults(analysisResult1); try { ProxyRepositoryFactory.getInstance().create(item1, createPath, false); } catch (PersistenceException e) { Assert.fail(e.getMessage()); } } /** * * DOC zshen Comment method "createFolder". create the subfolder under the parentFolder and named for folderName * * @param parentFolder * @param folderName * @return */ public IFolder createFolder(IFolder parentFolder, String folderName) { IFolder currFolder = parentFolder.getFolder(folderName); if (!currFolder.exists()) { try { currFolder.create(true, true, null); } catch (CoreException e) { Assert.fail(e.getMessage()); } } return currFolder; } /** * * DOC zshen Comment method "createFile". create the file under the parentFolder and named for filName * * @param parentFolder * @param filName * @return */ public IFile createFile(IFolder parentFolder, String filName) { IFile file = parentFolder.getFile(filName); IPath parentPath = parentFolder.getFullPath().removeFirstSegments(1); if (!file.exists()) { try { InputStream resourceAsStream = ResourceViewLabelProviderTest.class.getClassLoader().getResourceAsStream( "/temp/" + parentPath.toOSString() + "/" + filName);//$NON-NLS-1$//$NON-NLS-2$ file.create(resourceAsStream, true, null); } catch (CoreException e) { Assert.fail(e.getMessage()); } } return file; } }