1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.dbunit.dataset.common.handlers;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27
28
29
30
31
32
33 public class QuoteHandler extends AbstractPipelineComponent {
34
35
36
37
38 private static final Logger logger = LoggerFactory.getLogger(QuoteHandler.class);
39
40 public static final char QUOTE_CHAR = '"';
41
42
43
44 private QuoteHandler() {
45 }
46
47 public static final PipelineComponent ACCEPT() {
48 logger.debug("ACCEPT() - start");
49
50 return createPipelineComponent(new QuoteHandler(), new ACCEPT());
51 }
52
53 public static final PipelineComponent IGNORE() {
54 logger.debug("IGNORE() - start");
55
56 return createPipelineComponent(new QuoteHandler(), new IGNORE());
57 }
58
59 public static final PipelineComponent QUOTE() {
60 logger.debug("QUOTE() - start");
61
62 return createPipelineComponent(new QuoteHandler(), new QUOTE());
63 }
64
65 public static final PipelineComponent UNQUOTE() {
66 logger.debug("UNQUOTE() - start");
67
68 return createPipelineComponent(new QuoteHandler(), new UNQUOTE());
69 }
70
71 public boolean canHandle(char c) throws IllegalInputCharacterException {
72 if(logger.isDebugEnabled())
73 logger.debug("canHandle(c={}) - start", String.valueOf(c));
74
75 if (c == QUOTE_CHAR) {
76 return true;
77 }
78 return false;
79 }
80
81
82 static protected class QUOTE extends Helper {
83
84
85
86
87 private static final Logger logger = LoggerFactory.getLogger(QUOTE.class);
88
89 public void helpWith(char c) {
90 if(logger.isDebugEnabled())
91 logger.debug("helpWith(c={}) - start", String.valueOf(c));
92
93 getHandler().getPipeline().putFront(SeparatorHandler.ACCEPT());
94 getHandler().getPipeline().putFront(WhitespacesHandler.ACCEPT());
95 getHandler().getPipeline().putFront(IsAlnumHandler.ACCEPT());
96 getHandler().getPipeline().putFront(QuoteHandler.UNQUOTE());
97 getHandler().getPipeline().putFront(EscapeHandler.ESCAPE());
98
99 }
100
101 }
102
103 static protected class UNQUOTE extends Helper {
104
105
106
107
108 private static final Logger logger = LoggerFactory.getLogger(UNQUOTE.class);
109
110 public void helpWith(char c) {
111 if(logger.isDebugEnabled())
112 logger.debug("helpWith(c={}) - start", String.valueOf(c));
113
114 try {
115 getHandler().getPipeline().removeFront();
116 getHandler().getPipeline().removeFront();
117 getHandler().getPipeline().removeFront();
118 getHandler().getPipeline().removeFront();
119 getHandler().getPipeline().removeFront();
120 } catch (PipelineException e) {
121 throw new RuntimeException(e.getMessage());
122 }
123
124 }
125
126 public boolean allowForNoMoreInput() {
127 logger.debug("allowForNoMoreInput() - start");
128
129 throw new IllegalStateException("end of input while waiting for a closing quote");
130 }
131 }
132
133 }