// ============================================================================ // // 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.migration.impl; import java.util.Collection; import java.util.Date; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.common.util.URI; import org.talend.dataprofiler.core.CorePlugin; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.manager.DQStructureManager; import org.talend.dataprofiler.core.migration.AbstractWorksapceUpdateTask; import org.talend.dataprofiler.core.migration.helper.WorkspaceVersionHelper; import org.talend.dataprofiler.migration.helper.VersionComparator; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.helpers.IndicatorHelper; import org.talend.dataquality.indicators.CompositeIndicator; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.indicators.sql.UserDefIndicator; import org.talend.dq.helper.resourcehelper.AnaResourceFileHelper; import org.talend.dq.indicators.definitions.DefinitionHandler; import org.talend.dq.writer.EMFSharedResources; import org.talend.model.emf.CwmResource; import org.talend.resource.EResourceConstant; import org.talend.resource.ResourceManager; import org.talend.utils.ProductVersion; /** * * DOC mzhao Migration task for splitting system indicators. The .talend.definition file would be replaced by several * separate files, each indicator definition is defined in its own file. feature: 13676, 2010-07-07 */ public class SplitSysIndicatorTask extends AbstractWorksapceUpdateTask { private static Logger log = Logger.getLogger(SplitSysIndicatorTask.class); public SplitSysIndicatorTask() { } @Override protected boolean doExecute() throws Exception { boolean ok = true; // Copy system indicators. DQStructureManager manager = DQStructureManager.getInstance(); IFolder systemIndicatorFolder = ResourceManager.getSystemIndicatorFolder(); if (!systemIndicatorFolder.exists()) { systemIndicatorFolder = manager.createNewFolder(ResourceManager.getIndicatorFolder(), EResourceConstant.SYSTEM_INDICATORS); } manager.copyFilesToFolder(CorePlugin.getDefault(), DQStructureManager.SYSTEM_INDICATOR_PATH, true, systemIndicatorFolder, null, true); DefinitionHandler.getInstance().reloadIndicatorsDefinitions(); // Migration for analyses (indicator definition) Collection<Analysis> analyses = (Collection<Analysis>) AnaResourceFileHelper.getInstance().getAllElement(); for (Analysis ana : analyses) { try { for (Indicator ind : ana.getResults().getIndicators()) { updateIndDefinition(ind); if (ind instanceof CompositeIndicator) { for (Indicator indLeave : IndicatorHelper.getIndicatorLeavesBySingleNode(ind)) { updateIndDefinition(indLeave); } } } EMFSharedResources.getInstance().saveResource(ana.eResource()); } catch (Exception e) { log.warn(e, e); ok = false; } } // MOD qiongli 2011-11-16 TDQ-3694,should relaod definitions and all categories after changing the definition // file. // Copy system indicator categories. IFile file = ResourceManager.getLibrariesFolder().getFile(DefinitionHandler.FILENAME); file.delete(true, new NullProgressMonitor()); DefinitionHandler.getInstance().copyDefinitionsIntoFolder(ResourceManager.getLibrariesFolder()); URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), false); EMFSharedResources.getInstance().reloadResource(uri); DefinitionHandler.getInstance().reloadIndicatorsDefinitions(); return ok; } private void updateIndDefinition(Indicator ind) { if (ind == null) { return; } IndicatorDefinition indicatorDefinition = ind.getIndicatorDefinition(); if (indicatorDefinition == null) { return; } // ADD xqliu 2010-07-28 13676 don't update UserDefIndicator if (ind instanceof UserDefIndicator) { return; } // ~ 13676 CwmResource indDefResource = (CwmResource) indicatorDefinition.eResource(); if (indDefResource == null) { // MOD scorreia 2010-10-05 16030 set the link between indicators and their definition if (DefinitionHandler.getInstance().setDefaultIndicatorDefinition(ind)) { if (log.isDebugEnabled()) { log.debug("MIGRATING: indicator definition " + indicatorDefinition.getName() + " in indicator "//$NON-NLS-1$//$NON-NLS-2$ + ind.getName() + " in analysis " + ind.eResource());//$NON-NLS-1$ } } else { log.error(DefaultMessagesImpl.getString( "SplitSysIndicatorTask_LogErr", indicatorDefinition.getName(), ind.getName(), ind.eResource())); //$NON-NLS-1$ } // ~ 16030 } else { // Find updated indicator definition IndicatorDefinition updatedDefinition = DefinitionHandler.getInstance().getDefinitionById( indDefResource.getID(ind.getIndicatorDefinition())); ind.setIndicatorDefinition(updatedDefinition); } } public MigrationTaskType getMigrationTaskType() { return MigrationTaskType.FILE; } public Date getOrder() { return createDate(2010, 07, 07); } @Override public boolean valid() { IFile file = WorkspaceVersionHelper.getVersionFile(); if (file.exists() && VersionComparator.isLower(WorkspaceVersionHelper.getVesion(), new ProductVersion(4, 1))) { return true; } return false; } }