/**
  * DOC klliu Comment method "createAndStoreParserRule".
  *
  * @param prParameters
  * @param selectionFolder
  */
 public static void createAndStoreParserRule(
     ParserRuleParameters prParameters, IFolder selectionFolder, String name) {
   DqRuleBuilder ruleBuilder = new DqRuleBuilder();
   boolean ruleInitialized = ruleBuilder.initializeParserRuleBuilder(prParameters.label);
   if (ruleInitialized) {
     ParserRule parserRule = ruleBuilder.getParserRule();
     parserRule.setName(name);
     TaggedValueHelper.setValidStatus(true, parserRule);
     List<ParserRuleTdExpresstion> prExpresstions = prParameters.getPrExpresstions();
     for (ParserRuleTdExpresstion prtde : prExpresstions) {
       parserRule.addExpression(prtde.name, prtde.type, prtde.value);
     }
     IndicatorCategory ruleIndicatorCategory =
         DefinitionHandler.getInstance().getDQRuleIndicatorCategory();
     if (ruleIndicatorCategory != null
         && !parserRule.getCategories().contains(ruleIndicatorCategory)) {
       parserRule.getCategories().add(ruleIndicatorCategory);
     }
     ElementWriterFactory.getInstance().createdRuleWriter().create(parserRule, selectionFolder);
   }
 }
  /**
   * DOC xqliu Comment method "importParserRuleToStucture".
   *
   * @param importObject
   * @param selectionFolder
   * @param skip
   * @param rename
   * @param importItemName
   * @return
   */
  public static List<ReturnCode> importParserRuleToStucture(
      ImportObject importObject,
      IFolder selectionFolder,
      boolean skip,
      boolean rename,
      String importItemName) {
    List<ReturnCode> information = new ArrayList<ReturnCode>();

    Set<String> names =
        DQRuleResourceFileHelper.getInstance().getAllParserRlueNames(selectionFolder);
    ParserRuleParameters prParameters = new ImportFactory().new ParserRuleParameters();
    File importFile = importObject.getObjFile();
    String fileExtName = getFileExtName(importFile);

    if ("csv".equalsIgnoreCase(fileExtName)) { // $NON-NLS-1$
      String name = ""; // $NON-NLS-1$
      boolean isNeedToCreate = true;
      try {
        CsvReader reader = new CsvReader(new FileReader(importFile), CURRENT_SEPARATOR);
        reader.setEscapeMode(CsvReader.ESCAPE_MODE_BACKSLASH);
        reader.setTextQualifier(TEXT_QUAL);
        reader.setUseTextQualifier(USE_TEXT_QUAL);
        reader.readHeaders();

        java.text.SimpleDateFormat simpleDateFormat =
            new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS"); // $NON-NLS-1$

        while (reader.readRecord()) {
          name = reader.get(ParserRuleToExcelEnum.Label.getLiteral());

          if (names.contains(name)) {
            if (skip) {
              information.add(
                  new ReturnCode(
                      DefaultMessagesImpl.getString("ImportFactory.ParserRuleImported", name),
                      false)); //$NON-NLS-1$
              isNeedToCreate = false;
              break;
            }
            if (rename) {
              name =
                  name
                      + "("
                      + simpleDateFormat.format(new Date())
                      + Math.random()
                      + ")"; //$NON-NLS-1$ //$NON-NLS-2$
            }
          }
          prParameters.label = reader.get(ParserRuleToExcelEnum.Label.getLiteral());
          prParameters.auther = reader.get(ParserRuleToExcelEnum.Author.getLiteral());
          prParameters.description = reader.get(ParserRuleToExcelEnum.Description.getLiteral());
          prParameters.purpose = reader.get(ParserRuleToExcelEnum.Purpose.getLiteral());
          ParserRuleTdExpresstion prExpresstion = new ImportFactory().new ParserRuleTdExpresstion();
          prExpresstion.name = addQual(reader.get(ParserRuleToExcelEnum.Name.getLiteral()));
          String type = reader.get(ParserRuleToExcelEnum.Type.getLiteral());
          prExpresstion.type =
              type.isEmpty() || type.equals("\"\"") || type == null
                  ? reader //$NON-NLS-1$
                      .get(ParserRuleToExcelEnum.Language.getLiteral())
                  : type;
          String value = addQual(reader.get(ParserRuleToExcelEnum.Value.getLiteral()));
          prExpresstion.value =
              value.isEmpty() || value.equals("") || value == null
                  ? addQual(
                      reader //$NON-NLS-1$
                          .get(ParserRuleToExcelEnum.Body.getLiteral()))
                  : value;
          prParameters.prExpresstions.add(prExpresstion);
        }
        if (isNeedToCreate) {
          //
          if (name.trim().equals("")) { // $NON-NLS-1$
            information.add(
                new ReturnCode(
                    DefaultMessagesImpl.getString(
                        "ImportFactory.importedEmptyParserRule" //$NON-NLS-1$
                        ),
                    true));
          } else {
            names.add(name);
            information.add(
                new ReturnCode(
                    DefaultMessagesImpl.getString(
                        "ImportFactory.importedParserRuleSucess" //$NON-NLS-1$
                        ,
                        name,
                        selectionFolder.getProjectRelativePath().toString()),
                    true));
            createAndStoreParserRule(prParameters, selectionFolder, name);
          }
        }

        reader.close();

      } catch (Exception e) {
        log.error(e, e);
        information.add(
            new ReturnCode(
                DefaultMessagesImpl.getString("ImportFactory.importedParserRuleFailed", name),
                false)); //$NON-NLS-1$
      }
    }

    importObject.copyJarFiles();

    // ADD xqliu 2012-04-27 TDQ-5149
    checkImportEvent(importItemName, information);
    // ~ TDQ-5149
    return information;
  }