    001    /*
    002     * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved.
    003     *
    004     * Project and contact information: http://www.cascading.org/
    005     *
    006     * This file is part of the Cascading project.
    007     *
    008     * Licensed under the Apache License, Version 2.0 (the "License");
    009     * you may not use this file except in compliance with the License.
    010     * You may obtain a copy of the License at
    011     *
    012     *     http://www.apache.org/licenses/LICENSE-2.0
    013     *
    014     * Unless required by applicable law or agreed to in writing, software
    015     * distributed under the License is distributed on an "AS IS" BASIS,
    016     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017     * See the License for the specific language governing permissions and
    018     * limitations under the License.
    019     */
    020
    021    package cascading.tuple;
    022
    023    import java.util.ArrayList;
    024    import java.util.List;
    025    import java.util.Map;
    026    import java.util.Properties;
    027
    028    import cascading.property.Props;
    029    import cascading.util.Util;
    030
    031    /**
    032     * Class TupleEntrySchemeIteratorProps is a fluent helper class to set properties which control the behavior of the
    033     * {@link cascading.tuple.TupleEntrySchemeIterator}.
    034     */
    035    public class TupleEntrySchemeIteratorProps extends Props
    036      {
    037      public static final String PERMITTED_EXCEPTIONS = "cascading.tuple.tupleentryiterator.exceptions.permit";
    038
    039      private Class<? extends Exception>[] permittedExceptions = null;
    040
    041      /**
    042       * Method setPermittedExceptions(  Map<Object, Object> properties, Class<? extends Exception>[] ... exceptions )
    043       * is used to set an array of exceptions, which are allowed to be ignored in the TupleEntySchemeInterator. If the array
    044       * is null, it will be ignored.
    045       * <p>Note that the array will be converted to a comma separated String. If you read the the property back, you can
    046       * convert it back to classes via the asClasses method.</p>
    047       *
    048       * @param properties a Map<Object, Object>
    049       * @param exceptions an array of exception classes.
    050       */
    051      public static void setPermittedExceptions( Map<Object, Object> properties, Class<? extends Exception>... exceptions )
    052        {
    053        if( exceptions != null )
    054          {
    055          List<String> classNames = new ArrayList<String>();
    056
    057          for( Class<? extends Exception> clazz : exceptions )
    058            classNames.add( clazz.getName() );
    059
    060          properties.put( PERMITTED_EXCEPTIONS, Util.join( classNames, "," ) );
    061          }
    062        }
    063
    064      /**
    065       * Creates a new TupleEntrySchemeIteratorProps instance.
    066       *
    067       * @return TupleEntrySchemeIteratorProps instance
    068       */
    069      public static TupleEntrySchemeIteratorProps tupleEntrySchemeIteratorProps()
    070        {
    071        return new TupleEntrySchemeIteratorProps();
    072        }
    073
    074      /**
    075       * Constructs a new TupleEntrySchemeIteratorProps instance.
    076       */
    077      public TupleEntrySchemeIteratorProps()
    078        {
    079        }
    080
    081      public Class<? extends Exception>[] getPermittedExceptions()
    082        {
    083        return permittedExceptions;
    084        }
    085
    086      /**
    087       * Method setPermittedExceptions is used to set an array of exceptions which are allowed to be ignored in the
    088       * TupleEntrySchemeIterator.
    089       * <p/>
    090       * If the array is null, it will be ignored.
    091       *
    092       * @param permittedExceptions an array of exception classes.
    093       */
    094      public TupleEntrySchemeIteratorProps setPermittedExceptions( Class<? extends Exception>[] permittedExceptions )
    095        {
    096        this.permittedExceptions = permittedExceptions;
    097        return this;
    098        }
    099
    100      @Override
    101      protected void addPropertiesTo( Properties properties )
    102        {
    103        setPermittedExceptions( properties, permittedExceptions );
    104        }
    105      }