// ============================================================================ // // 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.dq.writer.impl; import org.apache.log4j.Logger; import org.eclipse.emf.ecore.util.EcoreUtil; import org.talend.commons.emf.FactoriesUtil; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.core.model.properties.Item; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.dataquality.properties.TDQMatchRuleItem; import org.talend.dataquality.rules.BlockKeyDefinition; import org.talend.dataquality.rules.MatchRule; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dq.helper.EObjectHelper; import org.talend.dq.helper.ProxyRepositoryManager; import org.talend.dq.writer.AElementPersistance; import org.talend.repository.RepositoryWorkUnit; import org.talend.utils.sugars.ReturnCode; import orgomg.cwm.objectmodel.core.ModelElement; /** * created by zshen on Aug 20, 2013 Detailled comment * */ public class MatchRuleDefinitionWriter extends AElementPersistance { Logger log = Logger.getLogger(MatchRuleDefinitionWriter.class); /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#notifyResourceChanges() */ @Override protected void notifyResourceChanges() { ProxyRepositoryManager.getInstance().save(); } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#addDependencies(orgomg.cwm.objectmodel.core.ModelElement) */ @Override protected void addDependencies(ModelElement element) { return; } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#getFileExtension() */ @Override protected String getFileExtension() { return FactoriesUtil.DQRULE; } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#save(org.talend.core.model.properties.Item, boolean) */ @Override public ReturnCode save(final Item item, final boolean careDependency) { ReturnCode rc = new ReturnCode(); RepositoryWorkUnit<Object> repositoryWorkUnit = new RepositoryWorkUnit<Object>("save MatchRule Definition item") { //$NON-NLS-1$ @Override protected void run() throws LoginException, PersistenceException { TDQMatchRuleItem matchRuleItem = (TDQMatchRuleItem) item; MatchRuleDefinition matchRuleDefinition = matchRuleItem.getMatchRule(); if (careDependency) { saveWithDependencies(matchRuleItem, matchRuleDefinition); } else { saveWithoutDependencies(matchRuleItem, matchRuleDefinition); } } }; repositoryWorkUnit.setAvoidUnloadResources(true); ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(repositoryWorkUnit); try { repositoryWorkUnit.throwPersistenceExceptionIfAny(); } catch (PersistenceException e) { log.error(e, e); rc.setOk(Boolean.FALSE); rc.setMessage(e.getMessage()); } return rc; } /** * copy the block/match keys from matchRule to ruleDefinition. * * @param ruleDefinition: created one * @param matchRule: exported one from the match analysis */ public void copy(MatchRuleDefinition ruleDefinition, MatchRuleDefinition matchRule) { // copy blocking keys ruleDefinition.getBlockKeys().clear(); if (matchRule.getBlockKeys() != null && matchRule.getBlockKeys().size() > 0) { for (BlockKeyDefinition blockKey : matchRule.getBlockKeys()) { BlockKeyDefinition copy = EcoreUtil.copy(blockKey); // should not empty the column value when export it ruleDefinition.getBlockKeys().add(copy); } } // copy match keys in each match rules ruleDefinition.getMatchRules().clear(); if (matchRule.getMatchRules() != null && matchRule.getMatchRules().size() > 0) { for (MatchRule oneMatchRule : matchRule.getMatchRules()) { ruleDefinition.getMatchRules().add(EObjectHelper.deepCopy(oneMatchRule)); } } } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#removeDependencies(org.talend.core.model.properties.Item) */ @Override protected ReturnCode removeDependencies(Item item) { return new ReturnCode(true); } }