// ============================================================================ // // Copyright (C) 2006-2015 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.dq.writer; import static org.junit.Assert.*; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.util.EcoreUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.talend.commons.emf.FactoriesUtil; import org.talend.commons.exception.PersistenceException; import org.talend.core.GlobalServiceRegister; import org.talend.core.ITDQItemService; import org.talend.core.model.general.Project; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.ProxyRepositoryFactory; 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.properties.TDQAnalysisItem; import org.talend.dataquality.properties.impl.PropertiesFactoryImpl; import org.talend.dq.helper.UnitTestBuildHelper; import org.talend.dq.nodes.AnalysisRepNode; import org.talend.repository.ProjectManager; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.repository.model.IRepositoryNode.EProperties; import org.talend.repository.model.RepositoryNode; import orgomg.cwm.objectmodel.core.ModelElement; /** * created by yyin on 2016年7月11日 Detailled comment * */ public class EMFSharedResourcesTest { Project currentProject; AnalysisRepNode anaNode; @Before public void setUp() throws Exception { System.setProperty("studio.version", "6.3"); UnitTestBuildHelper.initProjectStructure(); if (GlobalServiceRegister.getDefault().isServiceRegistered(ITDQItemService.class)) { ITDQItemService tdqService = (ITDQItemService) GlobalServiceRegister.getDefault().getService(ITDQItemService.class); tdqService.createDQStructor(); } currentProject = ProjectManager.getInstance().getCurrentProject(); } /** * Test method for * {@link org.talend.dq.writer.EMFSharedResources#reloadModelElementInNode(org.talend.repository.model.IRepositoryNode)} * . */ @Test public void testReloadModelElementInNode() { IRepositoryViewObject viewObject = UnitTestBuildHelper.buildRepositoryViewObjectSystemFolder( currentProject.getEmfProject(), currentProject.getAuthor(), ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); RepositoryNode node = new RepositoryNode(viewObject, null, ENodeType.SYSTEM_FOLDER); viewObject.setRepositoryNode(node); Item anaItem = createRealAnalysis("analysis_emfreload", null, false); //$NON-NLS-1$ IRepositoryViewObject object = null; try { object = ProxyRepositoryFactory.getInstance().getLastVersion(anaItem.getProperty().getId()); } catch (PersistenceException e1) { fail("testReloadModelElementInNode fail: " + e1.getMessage()); //$NON-NLS-1$ } anaNode = new AnalysisRepNode(object, node, ENodeType.REPOSITORY_ELEMENT, currentProject); anaNode.setProperties(EProperties.LABEL, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); anaNode.setProperties(EProperties.CONTENT_TYPE, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); URI uri = anaItem.eResource().getURI(); String fileExtension = anaItem.getFileExtension(); String removeEnd = StringUtils.removeEnd(uri.path(), "." + FactoriesUtil.PROPERTIES_EXTENSION); //$NON-NLS-1$ Analysis analysis = ((TDQAnalysisItem) anaItem).getAnalysis(); try { ProxyRepositoryFactory.getInstance().unloadResources(uri.scheme() + ":" + removeEnd + "." + fileExtension); //$NON-NLS-1$ //$NON-NLS-2$ } catch (PersistenceException e) { fail("testReloadModelElementInNode fail: " + e.getMessage()); //$NON-NLS-1$ } // ModelElement modelElement = PropertyHelper.getModelElement(anaItem.getProperty()); assertTrue(analysis.eIsProxy()); ModelElement reloadModelElement = EMFSharedResources.getInstance().reloadModelElementInNode(anaNode); assertFalse(reloadModelElement.eIsProxy()); } private Item createRealAnalysis(String name, IFolder folder, Boolean isDelete) { IPath createPath = Path.EMPTY; if (folder != null) { createPath = new Path(folder.getFullPath().lastSegment()); } 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) { fail(e.getMessage()); } return item1; } @After public void tearDown() throws Exception { ProxyRepositoryFactory.getInstance().deleteObjectLogical(anaNode.getObject()); } }