// ============================================================================ // // 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 java.util.List; import org.apache.log4j.Logger; import org.eclipse.emf.common.util.EList; 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.model.properties.Property; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.RepositoryViewObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.cwm.dependencies.DependenciesHandler; import org.talend.dataquality.indicators.definition.IndicatorCategory; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.properties.TDQAnalysisItem; import org.talend.dataquality.properties.TDQIndicatorDefinitionItem; import org.talend.dq.helper.PropertyHelper; 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; /** * DOC bZhou class global comment. Detailled comment */ public class IndicatorDefinitionWriter extends AElementPersistance { private Logger log = Logger.getLogger(IndicatorDefinitionWriter.class); /** * DOC bZhou SYSIndicatorWriter constructor comment. */ IndicatorDefinitionWriter() { } @Override public void addDependencies(ModelElement element) { return; } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#getFileExtension() */ @Override protected String getFileExtension() { return FactoriesUtil.DEFINITION; } @Override public ReturnCode save(final Item item, final boolean careDependency) { ReturnCode rc = new ReturnCode(); RepositoryWorkUnit<Object> repositoryWorkUnit = new RepositoryWorkUnit<Object>("save Indicator Definition item") { //$NON-NLS-1$ @Override protected void run() throws LoginException, PersistenceException { TDQIndicatorDefinitionItem indicatorItem = (TDQIndicatorDefinitionItem) item; IndicatorDefinition indiDefinition = indicatorItem.getIndicatorDefinition(); // MOD yyi 2012-02-07 TDQ-4621:Update dependencies when careDependency is true. if (careDependency) { saveWithDependencies(indicatorItem, indiDefinition); } else { saveWithoutDependencies(indicatorItem, indiDefinition); } updateDependencies(indiDefinition); } }; 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; } @Override protected void notifyResourceChanges() { ProxyRepositoryManager.getInstance().save(); } /* * (non-Javadoc) * * @see org.talend.dq.writer.AElementPersistance#updateDependencies(orgomg.cwm.objectmodel.core.ModelElement) */ // @Override protected void updateDependencies(ModelElement element) { // update client dependency // if IndicatorDefinition have client depencency, add codes here IndicatorDefinition definition = (IndicatorDefinition) element; Property property = PropertyHelper.getProperty(definition); List<IRepositoryViewObject> listIndicatorDependency = DependenciesHandler.getInstance().getIndicatorDependency( new RepositoryViewObject(property)); for (IRepositoryViewObject viewObject : listIndicatorDependency) { Item item = viewObject.getProperty().getItem(); if (item instanceof TDQAnalysisItem) { try { ProxyRepositoryFactory.getInstance().save(item); } catch (PersistenceException e) { log.error(e, e); } } } } /** * Added 20130115 yyin TDQ-3249, make the system indicator display international. but for the user defined * indicator, no need. */ @Override public Property initProperty(ModelElement modelElement) { Property property = super.initProperty(modelElement); // if the indicator is the user defined indicator, no need to internationalize it. if (isUserDefinedIndicator((IndicatorDefinition) modelElement)) { return property; } // For system indicator, make its display name international.(means its display name is in the messages file) // MOD sizhaoliu TDQ-7454 do not translate here, but during the initialization of RepositoryViewObjects property.setDisplayName(modelElement.getName()); return property; } private boolean isUserDefinedIndicator(IndicatorDefinition indicator) { EList<IndicatorCategory> categories = indicator.getCategories(); if (categories != null && categories.size() > 0) { String categoryLabel = categories.get(0).getLabel(); if (categoryLabel != null && categoryLabel.startsWith("User Define")) {//$NON-NLS-1$ return true; } } return false; } /** * Added yyin 20130118 TDQ-3249, when importing, should also consider the international as init. */ @Override public void updateProperty(ModelElement element) { super.updateProperty(element); Property property = PropertyHelper.getProperty(element); // if the indicator is the user defined indicator, no need to internationalize it. if (isUserDefinedIndicator((IndicatorDefinition) element)) { return; } if (property != null) { property.setDisplayName(org.talend.cwm.management.i18n.Messages.getString(element.getName().replace(' ', '.'))); } } /* * (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); } }