private static TypedReturnCode<Object> createAndStorePattern( PatternParameters parameters, IFolder selectionFolder, ExpressionType type) throws TalendInternalPersistenceException { Pattern pattern = createPattern( parameters.name, parameters.auther, parameters.description, parameters.purpose, parameters.status); for (String key : parameters.regex.keySet()) { RegularExpression regularExpr = BooleanExpressionHelper.createRegularExpression(key, parameters.regex.get(key), type); pattern.getComponents().add(regularExpr); } boolean validStatus = PatternUtilities.isPatternValid(pattern); TaggedValueHelper.setValidStatus(validStatus, pattern); try { String relativePath = parameters.relativePath; if (EResourceConstant.PATTERN_REGEX.getName().equals(relativePath) || EResourceConstant.PATTERN_SQL.getName().equals(relativePath)) { relativePath = PluginConstant.EMPTY_STRING; } String[] folderNames = relativePath.split("/"); // $NON-NLS-1$ for (String folderName : folderNames) { IFolder folder = selectionFolder.getFolder(folderName); if (!folder.exists()) { folder.create(false, true, null); } selectionFolder = folder; } } catch (CoreException e) { log.error(e, e); } return ElementWriterFactory.getInstance() .createPatternWriter() .create(pattern, selectionFolder); }
/** * DOC xqliu Comment method "importToStucture". * * @param importObject * @param selectionFolder * @param type * @param skip * @param rename * @param importItemName * @return */ public static List<ReturnCode> importToStucture( ImportObject importObject, IFolder selectionFolder, ExpressionType type, boolean skip, boolean rename, String importItemName) { List<ReturnCode> importEvent = new ArrayList<ReturnCode>(); // MOD qiongli 2012-12-20 TDQ-5899(issue 2),should get all patterns from Pattern folder. Set<String> names = PatternUtilities.getNestFolderPatternNames( new HashSet<String>(), ResourceManager.getPatternFolder()); File importFile = importObject.getObjFile(); String fileExtName = getFileExtName(importFile); if ("csv".equalsIgnoreCase(fileExtName)) { // $NON-NLS-1$ try { CsvReader reader = new CsvReader(new FileReader(importFile), CURRENT_SEPARATOR); reader.setEscapeMode(CsvReader.ESCAPE_MODE_DOUBLED); reader.setTextQualifier(TEXT_QUAL); reader.setUseTextQualifier(USE_TEXT_QUAL); reader.readHeaders(); while (reader.readRecord()) { String name = reader.get(PatternToExcelEnum.Label.getLiteral()); if (names.contains(name)) { if (skip) { importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.patternInported", name), false)); //$NON-NLS-1$ continue; } if (rename) { name = name + "(" + new Date() + ")"; // $NON-NLS-1$ //$NON-NLS-2$ } } PatternParameters patternParameters = new ImportFactory().new PatternParameters(); patternParameters.name = name; patternParameters.auther = reader.get(PatternToExcelEnum.Author.getLiteral()); patternParameters.description = reader.get(PatternToExcelEnum.Description.getLiteral()); patternParameters.purpose = reader.get(PatternToExcelEnum.Purpose.getLiteral()); patternParameters.relativePath = reader.get(PatternToExcelEnum.RelativePath.getLiteral()); for (PatternLanguageType languagetype : PatternLanguageType.values()) { String cellStr = reader.get(languagetype.getExcelEnum().getLiteral()); if (cellStr != null && !cellStr.equals("")) { // $NON-NLS-1$ patternParameters.regex.put(languagetype.getLiteral(), cellStr); } } try { TypedReturnCode<Object> create = createAndStorePattern(patternParameters, selectionFolder, type); if (create.isOk()) { names.add(name); importEvent.add( new ReturnCode( DefaultMessagesImpl.getString( "ImportFactory.importPattern", name, //$NON-NLS-1$ selectionFolder.getProjectRelativePath().toString()), true)); } else { throw new TalendInternalPersistenceException(create.getMessage()); } } catch (Exception e) { importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.SaveFailed", name), false)); //$NON-NLS-1$ } } reader.close(); } catch (Exception e) { log.error(e, e); importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.importFailed"), false)); // $NON-NLS-1$ } } if ("xls".equalsIgnoreCase(fileExtName)) { // $NON-NLS-1$ Map<Integer, PatternLanguageType> expressionMap = new HashMap<Integer, PatternLanguageType>(); try { WorkbookSettings settings = new WorkbookSettings(); settings.setEncoding("UTF-8"); // $NON-NLS-1$ Workbook rwb = Workbook.getWorkbook(importFile, settings); Sheet[] sheets = rwb.getSheets(); for (Sheet sheet : sheets) { Cell[] headerRow = sheet.getRow(0); for (Cell cell : headerRow) { for (PatternLanguageType languageType : PatternLanguageType.values()) { if (cell.getContents().equals(languageType.getExcelEnum().getLiteral())) { expressionMap.put(cell.getColumn(), languageType); } } } for (int i = 1; i < sheet.getRows(); i++) { Cell[] row = sheet.getRow(i); Cell cell = row[0]; if (CellType.LABEL.equals(cell.getType())) { String contents = cell.getContents(); if (names.contains(contents)) { if (skip) { importEvent.add( new ReturnCode( DefaultMessagesImpl.getString( "ImportFactory.patternInported", //$NON-NLS-1$ contents), false)); continue; } if (rename) { contents = contents + "(" + new Date() + ")"; // $NON-NLS-1$ //$NON-NLS-2$ } } PatternParameters patternParameters = new ImportFactory().new PatternParameters(); patternParameters.name = contents; patternParameters.auther = row[6].getContents(); patternParameters.description = row[2].getContents(); patternParameters.purpose = row[1].getContents(); patternParameters.status = DevelopmentStatus.DRAFT.getLiteral(); for (int columnIndex : expressionMap.keySet()) { String rowContent = row[columnIndex].getContents(); if (!rowContent.equals("")) { // $NON-NLS-1$ patternParameters.regex.put( expressionMap.get(columnIndex).getLiteral(), rowContent); } } try { TypedReturnCode<Object> create = createAndStorePattern(patternParameters, selectionFolder, type); if (create.isOk()) { names.add(contents); importEvent.add( new ReturnCode( DefaultMessagesImpl.getString( "ImportFactory.importPattern", ((TDQItem) create.getObject()) .getProperty() .getDisplayName(), //$NON-NLS-1$ selectionFolder.getProjectRelativePath().toString()), true)); } else { throw new TalendInternalPersistenceException(create.getMessage()); } } catch (Exception e) { importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.SaveFailed", contents), false)); //$NON-NLS-1$ } } } } rwb.close(); } catch (BiffException e) { log.error(e, e); importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.importFailed"), false)); // $NON-NLS-1$ } catch (IOException e) { log.error(e, e); importEvent.add( new ReturnCode( DefaultMessagesImpl.getString("ImportFactory.importFailed"), false)); // $NON-NLS-1$ } } importObject.copyJarFiles(); // ADD xqliu 2012-04-27 TDQ-5149 checkImportEvent(importItemName, importEvent); // ~ TDQ-5149 return importEvent; }