All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.workday.autoparse.json.initializers.CollectionInitializerFactory Maven / Gradle / Ivy

/*
 * Copyright 2016 Workday, Inc.
 *
 * This software is available under the MIT license.
 * Please see the LICENSE.txt file in this project.
 */

package com.workday.autoparse.json.initializers;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

/**
 * @author nathan.taylor
 * @since 2014-10-09
 */
public final class CollectionInitializerFactory {

    /**
     * Creates a {@link CollectionInitializer} appropriate for the class provided. A default
     * concrete implementation of a Collection will be assumed for non-concrete types.
     */
    public static CollectionInitializer getCollectionInitializerForClass(
            // Type is not required here. The caller will ensure that only the correct types of
            // items are added.
            @SuppressWarnings("rawtypes") Class clazz) {
        if (Collection.class.equals(clazz)
                || List.class.equals(clazz)
                || ArrayList.class.equals(clazz)) {
            return ArrayListInitializer.INSTANCE;
        } else if (LinkedList.class.equals(clazz)) {
            return LinkedListInitializer.INSTANCE;
        } else if (Set.class.equals(clazz) || HashSet.class.equals(clazz)) {
            return HashSetInitializer.INSTANCE;
        } else if (LinkedHashSet.class.equals(clazz)) {
            return LinkedHashSetInitializer.INSTANCE;
        } else {
            throw new IllegalArgumentException("Cannot initialize collection of type "
                                                       + clazz.getCanonicalName());
        }
    }

    public static class ArrayListInitializer implements CollectionInitializer {

        public static final ArrayListInitializer INSTANCE = new ArrayListInitializer();

        private ArrayListInitializer() {
        }

        @Override
        public Collection newInstance() {
            return new ArrayList<>();
        }
    }

    public static class LinkedListInitializer implements CollectionInitializer {

        public static final LinkedListInitializer INSTANCE = new LinkedListInitializer();

        private LinkedListInitializer() {
        }

        @Override
        public Collection newInstance() {
            return new LinkedList<>();
        }
    }

    public static class HashSetInitializer implements CollectionInitializer {

        public static final HashSetInitializer INSTANCE = new HashSetInitializer();

        private HashSetInitializer() {
        }

        @Override
        public Collection newInstance() {
            return new HashSet<>();
        }
    }

    public static class LinkedHashSetInitializer implements CollectionInitializer {

        public static final LinkedHashSetInitializer INSTANCE = new LinkedHashSetInitializer();

        private LinkedHashSetInitializer() {
        }

        @Override
        public Collection newInstance() {
            return new LinkedHashSet<>();
        }
    }

    private CollectionInitializerFactory() {
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy