// ============================================================================
//
// 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.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.talend.commons.emf.FactoriesUtil;
import org.talend.commons.utils.io.FilesUtils;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.dataprofiler.core.migration.AbstractWorksapceUpdateTask;
import org.talend.dataprofiler.core.ui.utils.UDIUtils;
import org.talend.dataquality.indicators.definition.IndicatorDefinition;
import org.talend.dataquality.indicators.definition.userdefine.UDIndicatorDefinition;
import org.talend.dq.indicators.definitions.DefinitionHandler;
import org.talend.dq.writer.impl.ElementWriterFactory;
import org.talend.resource.EResourceConstant;
import org.talend.resource.ResourceService;
/**
* Update UDI Indicators With the New Model from version 5.3.
*
* @author msjian 2013-2-25 TDQ-6872
*
*/
public class UpdateUDIIndicatorsWithNewModelTask extends AbstractWorksapceUpdateTask {
Logger log = Logger.getLogger(UpdateUDIIndicatorsWithNewModelTask.class);
private static String old_one = "xmlns:dataquality.indicators.definition=\"http://dataquality.indicators.definition\""; //$NON-NLS-1$
private static String new_one = "xmlns:dataquality.indicators.definition.userdefine=\"http://dataquality.indicators.definition.userdefine\""; //$NON-NLS-1$
private static String old_two = "dataquality.indicators.definition:IndicatorDefinition"; //$NON-NLS-1$
private static String new_two = "dataquality.indicators.definition.userdefine:UDIndicatorDefinition"; //$NON-NLS-1$
public Date getOrder() {
return createDate(2013, 2, 25);
}
public MigrationTaskType getMigrationTaskType() {
return MigrationTaskType.FILE;
}
@Override
protected boolean doExecute() throws Exception {
boolean result = true;
File udiIndicatorFolder = getWorkspacePath().append(EResourceConstant.USER_DEFINED_INDICATORS.getPath()).toFile();
String[] indicatorFileExtentionName = { FactoriesUtil.DEFINITION };
try {
result &= FilesUtils.migrateFolder(udiIndicatorFolder, indicatorFileExtentionName, initIndicatorReplaceMap(), log);
if (isWorksapcePath()) {
for (IRepositoryViewObject viewObject : ProxyRepositoryFactory.getInstance().getAll(
ERepositoryObjectType.TDQ_USERDEFINE_INDICATORS)) {
ProxyRepositoryFactory.getInstance().reload(viewObject.getProperty());
}
}
ResourceService.refreshStructure();
} catch (Exception e) {
result = false;
log.error(e, e);
}
List<IndicatorDefinition> indiDefinitions = DefinitionHandler.getInstance().getUserDefinedIndicatorDefinitions();
for (IndicatorDefinition indiDefinition : indiDefinitions) {
if (indiDefinition != null) {
if (indiDefinition instanceof UDIndicatorDefinition) {
UDIndicatorDefinition udi = (UDIndicatorDefinition) indiDefinition;
udi = UDIUtils.createDefaultDrillDownList(udi);
result &= ElementWriterFactory.getInstance().createIndicatorDefinitionWriter().save(udi).isOk();
}
}
}
DefinitionHandler.getInstance().reloadIndicatorsDefinitions();
return result;
}
/**
* DOC msjian Comment method "initIndicatorReplaceMap".
*
* @return
*/
public static Map<String, String> initIndicatorReplaceMap() {
Map<String, String> replaceStringMap = new HashMap<String, String>();
replaceStringMap.put(old_one, new_one);
replaceStringMap.put(old_two, new_two);
return replaceStringMap;
}
}