// ============================================================================ // // 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 com.amalto.workbench.detailtabs.sections.handlers; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import com.amalto.workbench.detailtabs.exception.CommitValidationException; import com.amalto.workbench.detailtabs.sections.model.annotationinfo.langinfo.LanguageInfo; import com.amalto.workbench.detailtabs.sections.model.annotationinfo.langinfo.LanguageInfoCollection; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.utils.XSDAnnotationsStructure; abstract class LanguageInfoCommitHandler<T extends LanguageInfoCollection> extends AnnotationInfoCommitHandler<T> { public LanguageInfoCommitHandler(T submittedLangInfos) { super(submittedLangInfos); } @Override protected void validateCommit() throws CommitValidationException { for (LanguageInfo eachLanguage : getCommitedObj().getLanguageInfos()) { validateEachLanguageInfo(eachLanguage); } } private void validateEachLanguageInfo(LanguageInfo validatedLanguageInfo) throws CommitValidationException { if ("".equals(validatedLanguageInfo.getLabel().trim())) {//$NON-NLS-1$ throw new CommitValidationException(Messages.bind(Messages.LanguageInfoCommitHandler_ExceptionInfo, validatedLanguageInfo.getLanguage())); } } @Override protected String[] getNeedRemovedObjs() { Set<String> results = new HashSet<String>(); Map<String, LanguageInfo> curLangCode2LangInfo = getCommitedObj().getLangCode2LangInfo(); for (Entry<String, String> eachOriginalLangCode2Info : getOriginalLang2Info().entrySet()) { if (curLangCode2LangInfo.containsKey(eachOriginalLangCode2Info.getKey())) continue; results.add(eachOriginalLangCode2Info.getKey()); } return results.toArray(new String[0]); } @Override protected LanguageInfo[] getNeedUpdatedObjs() { List<LanguageInfo> results = new ArrayList<LanguageInfo>(); Map<String, LanguageInfo> curLangCode2LangInfo = getCommitedObj().getLangCode2LangInfo(); for (Entry<String, String> eachOriginalLangCode2Info : getOriginalLang2Info().entrySet()) { if (!curLangCode2LangInfo.containsKey(eachOriginalLangCode2Info.getKey())) continue; if (curLangCode2LangInfo.get(eachOriginalLangCode2Info.getKey()).getLabel() .equals(eachOriginalLangCode2Info.getValue())) continue; results.add(curLangCode2LangInfo.get(eachOriginalLangCode2Info.getKey())); } return results.toArray(new LanguageInfo[0]); } @Override protected LanguageInfo[] getNeedAddedObjs() { List<LanguageInfo> results = new ArrayList<LanguageInfo>(); Map<String, String> originalLangCode2LangInfo = getOriginalLang2Info(); for (LanguageInfo eachCurLangInfo : getCommitedObj().getLanguageInfos()) { if (originalLangCode2LangInfo.containsKey(eachCurLangInfo.getLanguageISOCode())) continue; results.add(eachCurLangInfo); } return results.toArray(new LanguageInfo[0]); } @Override protected void doRemoveEachObj(XSDAnnotationsStructure xsdAnnoStruct, Object eachNeedRemovedObj) { if (!(eachNeedRemovedObj instanceof String)) return; removeLangInfo(xsdAnnoStruct, (String) eachNeedRemovedObj); } @Override protected void doUpdateEachObj(XSDAnnotationsStructure xsdAnnoStruct, Object eachNeedUpdatedObj) { if (!(eachNeedUpdatedObj instanceof LanguageInfo)) return; updateLangInfo(xsdAnnoStruct, (LanguageInfo) eachNeedUpdatedObj); } @Override protected void doAddEachObj(XSDAnnotationsStructure xsdAnnoStruct, Object eachNeedAddedObj) { if (!(eachNeedAddedObj instanceof LanguageInfo)) return; addLangInfo(xsdAnnoStruct, (LanguageInfo) eachNeedAddedObj); } protected abstract Map<String, String> getOriginalLang2Info(); protected abstract void removeLangInfo(XSDAnnotationsStructure xsdAnnoStruct, String langcode); protected abstract void updateLangInfo(XSDAnnotationsStructure xsdAnnoStruct, LanguageInfo langInfo); protected abstract void addLangInfo(XSDAnnotationsStructure xsdAnnoStruct, LanguageInfo langInfo); }