001 /*
002 * JBoss, Home of Professional Open Source.
003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004 * as indicated by the @author tags. See the copyright.txt file in the
005 * distribution for a full listing of individual contributors.
006 *
007 * This is free software; you can redistribute it and/or modify it
008 * under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation; either version 2.1 of
010 * the License, or (at your option) any later version.
011 *
012 * This software is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this software; if not, write to the Free
019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021 */
022 package org.jboss.dna.graph;
023
024 import net.jcip.annotations.Immutable;
025 import org.jboss.dna.graph.properties.Path;
026
027 /**
028 * A subgraph returned by the {@link Graph}, containing the nodes in the subgraph as well as the properties and children for each
029 * of those nodes. The {@link #iterator()} method may be used to walk the nodes in the subgraph in a pre-order traversal.
030 * <p>
031 * Since this subgraph has a single {@link #getLocation() node that is the top of the subgraph}, the methods that take a String
032 * path or {@link Path path object} will accept absolute or relative paths.
033 * </p>
034 *
035 * @author Randall Hauch
036 */
037 @Immutable
038 public interface Subgraph extends Results {
039
040 /**
041 * Get the location of the node.
042 *
043 * @return the node's location
044 */
045 Location getLocation();
046
047 /**
048 * Get the maximum depth requested for this subgraph. The actual subgraph may not be as deep, but will never be deeper than
049 * this value.
050 *
051 * @return the maximum depth requested; always positive
052 */
053 int getMaximumDepth();
054
055 /**
056 * Get the node that is at the {@link #getLocation() root} of the subgraph.
057 *
058 * @return the root node in the subgraph
059 */
060 Node getRoot();
061 }