// ============================================================================ // // 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.util.ArrayList; import java.util.Date; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.dataprofiler.core.migration.AbstractWorksapceUpdateTask; import org.talend.dataquality.domain.pattern.ExpressionType; import org.talend.dataquality.domain.pattern.Pattern; import org.talend.dataquality.domain.pattern.PatternComponent; import org.talend.dataquality.domain.pattern.RegularExpression; import org.talend.dataquality.helpers.BooleanExpressionHelper; import org.talend.dataquality.helpers.MetadataHelper; import org.talend.dq.analysis.parameters.PatternParameter; import org.talend.dq.helper.resourcehelper.PatternResourceFileHelper; import org.talend.dq.pattern.PatternBuilder; import org.talend.dq.writer.impl.ElementWriterFactory; import org.talend.resource.ResourceManager; import org.talend.utils.sugars.ReturnCode; public class AddPatternISBN13Task extends AbstractWorksapceUpdateTask { private PatternParameter parameter = null; private final String REGEX_BODY = "'^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$'"; //$NON-NLS-1$ /* * (non-Javadoc) * * @see org.talend.dataprofiler.migration.IMigrationTask#getOrder() */ public Date getOrder() { return createDate(2015, 9, 30); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.migration.IMigrationTask#getMigrationTaskType() */ public MigrationTaskType getMigrationTaskType() { return MigrationTaskType.FILE; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.migration.AMigrationTask#doExecute() */ @Override protected boolean doExecute() throws Exception { parameter = new PatternParameter(); ReturnCode rc1 = new ReturnCode(true), rc2 = new ReturnCode(true), rc3 = new ReturnCode(true); // number folder IFolder folder = ResourceManager.getPatternRegexFolder().getFolder("number"); //$NON-NLS-1$ if (folder.exists()) { // only create ISBN 13 Checker when not found. if (!folder.getFile("ISBN_13_Checker_0.1.pattern").exists()) { Pattern pattern = newPattern("ISBN 13 Checker", "Java", //$NON-NLS-1$ //$NON-NLS-2$ "'^ISBN(?:-13)?:?\\ *(97(?:8|9)([ -]?)(?=[0-9]{1,5}\\2?[0-9]{1,7}\\2?[0-9]{1,6}\\2?[0-9])(?:[0-9]\\2*){9}[0-9])$'"); //$NON-NLS-1$ if (pattern != null) { setTagValue(pattern, "ISBN-13: 978-2711791415 | ISBN 978-2711791415 | ISBN: 978-2711791415", //$NON-NLS-1$ "International Standard Book Number 13 digits"); //$NON-NLS-1$ rc1 = ElementWriterFactory.getInstance().createPatternWriter().create(pattern, folder); } } } // Update IPv6 Address.pattern. IFile file = ResourceManager.getPatternRegexFolder().getFolder("internet").getFile("IPv6_Address_0.1.pattern"); //$NON-NLS-1$ if (file.exists()) { Pattern ipv6Pattern = PatternResourceFileHelper.getInstance().findPattern(file); if (ipv6Pattern != null) { List<PatternComponent> componentLs = new ArrayList<PatternComponent>(); componentLs.add(BooleanExpressionHelper.createRegularExpression("Java", REGEX_BODY, ExpressionType.REGEXP)); //$NON-NLS-1$ componentLs.add(BooleanExpressionHelper.createRegularExpression("MySQL", REGEX_BODY, ExpressionType.REGEXP)); //$NON-NLS-1$ componentLs.add(BooleanExpressionHelper.createRegularExpression("PostgreSQL", REGEX_BODY, ExpressionType.REGEXP)); //$NON-NLS-1$ ipv6Pattern.getComponents().clear(); ipv6Pattern.getComponents().addAll(componentLs); rc2 = PatternResourceFileHelper.getInstance().save(ipv6Pattern); } } // Update EN Month.pattern. for expresstion add () IFile file2 = ResourceManager.getPatternRegexFolder().getFolder("date").getFile("EN_Month_0.1.pattern"); //$NON-NLS-1$ //$NON-NLS-2$ if (file2.exists()) { Pattern enMonthPattern = PatternResourceFileHelper.getInstance().findPattern(file2); if (enMonthPattern != null) { List<PatternComponent> componentLs = new ArrayList<PatternComponent>(); String regexBody = "'^(January|June|July|February|March|May|April|August|September|October|November|December)$'"; //$NON-NLS-1$ componentLs.add(BooleanExpressionHelper.createRegularExpression("SQL", regexBody, ExpressionType.REGEXP)); //$NON-NLS-1$ enMonthPattern.getComponents().clear(); enMonthPattern.getComponents().addAll(componentLs); rc3 = PatternResourceFileHelper.getInstance().save(enMonthPattern); } } return rc1.isOk() && rc2.isOk() && rc3.isOk(); } private Pattern newPattern(String name, String lang, String express) { PatternBuilder patternBuilder = new PatternBuilder(); boolean patternInitialized = patternBuilder.initializePattern(name); if (patternInitialized) { Pattern pattern = patternBuilder.getPattern(); RegularExpression regularExpr = BooleanExpressionHelper.createRegularExpression(lang, express); regularExpr.setExpressionType("REGEXP"); //$NON-NLS-1$ pattern.getComponents().add(regularExpr); return pattern; } return null; } private void setTagValue(Pattern pattern, String purpose, String decription) { TaggedValueHelper.setTaggedValue(pattern, TaggedValueHelper.DESCRIPTION, decription); TaggedValueHelper.setTaggedValue(pattern, TaggedValueHelper.PURPOSE, purpose); TaggedValueHelper.setTaggedValue(pattern, TaggedValueHelper.VALID_STATUS, String.valueOf(true)); if (parameter == null) { parameter = new PatternParameter(); } MetadataHelper.setDevStatus(pattern, parameter.getStatus()); MetadataHelper.setAuthor(pattern, parameter.getAuthor()); MetadataHelper.setVersion(parameter.getVersion(), pattern); } }