001/*
002 * Licensed to DuraSpace under one or more contributor license agreements.
003 * See the NOTICE file distributed with this work for additional information
004 * regarding copyright ownership.
005 *
006 * DuraSpace licenses this file to you under the Apache License,
007 * Version 2.0 (the "License"); you may not use this file except in
008 * compliance with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.fcrepo.kernel.api;
019
020import java.util.stream.Collector;
021
022import org.apache.jena.rdf.model.ModelFactory;
023import org.apache.jena.graph.Triple;
024import org.apache.jena.rdf.model.Model;
025
026/**
027 * A class of Collectors for use with RdfStreams
028 * @author acoburn
029 * @since Dec 4, 2015
030 */
031public class RdfCollectors {
032
033    /**
034     * @return a Collector for use with aggregating an RdfStream into a Model.
035     */
036    public static Collector<Triple, ?, Model> toModel() {
037        return Collector.of(ModelFactory::createDefaultModel,
038            (m, t) -> m.add(m.asStatement(t)),
039            (left, right) -> { left.add(right); return left; },
040            Collector.Characteristics.UNORDERED);
041    }
042
043    private RdfCollectors() {
044        // prevent instantiation
045    }
046}
047