/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.atlas.catalog.projection;

import org.apache.atlas.catalog.VertexWrapper;

import java.util.*;

/**
 * Encapsulates the response of a relation traversal.
 */
public class RelationSet {

    private final String m_name;
    private final Collection<VertexWrapper> m_vertices;

    public RelationSet(String name, Collection<VertexWrapper> vertices) {
        m_name = name;
        m_vertices = vertices;
    }

    public String getName() {
        return m_name;
    }

    public Collection<VertexWrapper> getVertices() {
        return Collections.unmodifiableCollection(m_vertices);
    }
}
