// ============================================================================ // // 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.providers.datamodel.util; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.xsd.XSDElementDeclaration; import com.amalto.workbench.utils.SchemaElementNameFilterDes; class SchemaTopElementNameSelectorOnPattern implements SchemaTopElementNameSelector { protected SchemaItemLabelCreator labelExtractor; protected SchemaElementNameFilterDes nameFitlerDes; protected List<Pattern> patterns = new ArrayList<Pattern>(); protected SchemaTopElementNameSelectorOnPattern(SchemaItemLabelCreator labelExtractor, SchemaElementNameFilterDes nameFitlerDes) { this.labelExtractor = labelExtractor; this.nameFitlerDes = nameFitlerDes; initPatterns(nameFitlerDes); } public boolean isSatisfiedElement(Object parentElement, Object element) { if (nameFitlerDes == null || !nameFitlerDes.isEnable()) { return true; } if (isTopElement(element)) { return checkElementLabel(element); } return true; } private boolean checkElementLabel(Object element) { for (Pattern eachPattern : patterns) { Matcher matcher = eachPattern.matcher(labelExtractor.getLabel(element).toLowerCase()); if (matcher.matches()) { return true; } } return false; } protected boolean isTopElement(Object element) { return (element instanceof XSDElementDeclaration); } private void initPatterns(SchemaElementNameFilterDes nameFitlerDes) { patterns.clear(); for (String eachPattern : nameFitlerDes.getSeparatedFilterExpressions()) { eachPattern = eachPattern.replaceAll("\\*", ".*");//$NON-NLS-1$//$NON-NLS-2$ eachPattern = eachPattern.replaceAll("\\+", ".+");//$NON-NLS-1$//$NON-NLS-2$ eachPattern = eachPattern.replaceAll("\\?", ".?");//$NON-NLS-1$//$NON-NLS-2$ eachPattern = eachPattern.toLowerCase(); patterns.add(Pattern.compile(eachPattern)); } } }