001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.csv;
018
019import java.io.*;
020import java.lang.reflect.*;
021import java.nio.charset.*;
022import java.util.*;
023import java.util.function.*;
024
025import org.apache.juneau.*;
026import org.apache.juneau.httppart.*;
027import org.apache.juneau.parser.*;
028
029/**
030 * Session object that lives for the duration of a single use of {@link CsvParser}.
031 *
032 * <h5 class='section'>Notes:</h5><ul>
033 *    <li class='warn'>This class is not thread safe and is typically discarded after one use.
034 * </ul>
035 *
036 */
037public class CsvParserSession extends ReaderParserSession {
038   /**
039    * Builder class.
040    */
041   public static class Builder extends ReaderParserSession.Builder {
042
043      /**
044       * Constructor
045       *
046       * @param ctx The context creating this session.
047       */
048      protected Builder(CsvParser ctx) {
049         super(ctx);
050      }
051
052      @Override /* Overridden from Builder */
053      public <T> Builder apply(Class<T> type, Consumer<T> apply) {
054         super.apply(type, apply);
055         return this;
056      }
057
058      @Override
059      public CsvParserSession build() {
060         return new CsvParserSession(this);
061      }
062
063      @Override /* Overridden from Builder */
064      public Builder debug(Boolean value) {
065         super.debug(value);
066         return this;
067      }
068
069      @Override /* Overridden from Builder */
070      public Builder fileCharset(Charset value) {
071         super.fileCharset(value);
072         return this;
073      }
074
075      @Override /* Overridden from Builder */
076      public Builder javaMethod(Method value) {
077         super.javaMethod(value);
078         return this;
079      }
080
081      @Override /* Overridden from Builder */
082      public Builder locale(Locale value) {
083         super.locale(value);
084         return this;
085      }
086
087      @Override /* Overridden from Builder */
088      public Builder mediaType(MediaType value) {
089         super.mediaType(value);
090         return this;
091      }
092
093      @Override /* Overridden from Builder */
094      public Builder mediaTypeDefault(MediaType value) {
095         super.mediaTypeDefault(value);
096         return this;
097      }
098
099      @Override /* Overridden from Builder */
100      public Builder outer(Object value) {
101         super.outer(value);
102         return this;
103      }
104
105      @Override /* Overridden from Builder */
106      public Builder properties(Map<String,Object> value) {
107         super.properties(value);
108         return this;
109      }
110
111      @Override /* Overridden from Builder */
112      public Builder property(String key, Object value) {
113         super.property(key, value);
114         return this;
115      }
116
117      @Override /* Overridden from Builder */
118      public Builder schema(HttpPartSchema value) {
119         super.schema(value);
120         return this;
121      }
122
123      @Override /* Overridden from Builder */
124      public Builder schemaDefault(HttpPartSchema value) {
125         super.schemaDefault(value);
126         return this;
127      }
128
129      @Override /* Overridden from Builder */
130      public Builder streamCharset(Charset value) {
131         super.streamCharset(value);
132         return this;
133      }
134
135      @Override /* Overridden from Builder */
136      public Builder timeZone(TimeZone value) {
137         super.timeZone(value);
138         return this;
139      }
140
141      @Override /* Overridden from Builder */
142      public Builder timeZoneDefault(TimeZone value) {
143         super.timeZoneDefault(value);
144         return this;
145      }
146
147      @Override /* Overridden from Builder */
148      public Builder unmodifiable() {
149         super.unmodifiable();
150         return this;
151      }
152   }
153
154   /**
155    * Creates a new builder for this object.
156    *
157    * @param ctx The context creating this session.
158    * @return A new builder.
159    */
160   public static Builder create(CsvParser ctx) {
161      return new Builder(ctx);
162   }
163
164   /**
165    * Constructor.
166    *
167    * @param builder The builder for this object.
168    */
169   protected CsvParserSession(Builder builder) {
170      super(builder);
171   }
172
173   private static <T> T parseAnything(ClassMeta<T> eType, ParserReader r, Object outer, BeanPropertyMeta pMeta) throws ParseException {
174      throw new ParseException("Not implemented.");
175   }
176
177   @Override /* Overridden from ParserSession */
178   protected <T> T doParse(ParserPipe pipe, ClassMeta<T> type) throws IOException, ParseException {
179      try (var r = pipe.getParserReader()) {
180         if (r == null)
181            return null;
182         return parseAnything(type, r, getOuter(), null);
183      }
184   }
185}