// Path: spi/src/main/java/com/redhat/ceylon/cmr/spi/Node.java
// public interface Node {
//     String getLabel();
// 
//     <T> T getValue(Class<T> valueType);
// 
//     Node getChild(String label);
// 
//     Iterable<? extends Node> getChildren();
// 
//     boolean hasBinaries();
// 
//     /**
//      * @deprecated see getSizedInputStream
//      */
//     InputStream getInputStream() throws IOException;
// 
//     SizedInputStream getSizedInputStream() throws IOException;
// 
//     <T> T getContent(Class<T> contentType) throws IOException;
// 
//     long getLastModified() throws IOException;
// 
//     long getSize() throws IOException;
// 
//     Node getParent(String label);
// 
//     Iterable<? extends Node> getParents();
// 
//     boolean isRemote();
// 
//     String getDisplayString();
// 
//     String getStoreDisplayString();
// }


import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import com.redhat.ceylon.cmr.spi.ContentOptions;
import com.redhat.ceylon.cmr.spi.Node;
import com.redhat.ceylon.cmr.spi.OpenNode;
import com.redhat.ceylon.model.cmr.ArtifactResult;
import com.redhat.ceylon.model.cmr.Repository;
import com.redhat.ceylon.model.cmr.RepositoryException;
    }

    public ArtifactContext getSuffixContext(String... suffixes) {
        ArtifactContext ac = copy();
        ac.setSuffixes(suffixes);
        return ac;
    }

    public ArtifactContext getDocsContext() {
        return getSuffixContext(DOCS);
    }

    public ArtifactContext getResourcesContext() {
        return getSuffixContext(RESOURCES);
    }

    public ArtifactContext getModuleProperties() {
        return getSuffixContext(MODULE_PROPERTIES);
    }

    public ArtifactContext getModuleXml() {
        return getSuffixContext(MODULE_XML);
    }

    public ArtifactContext getSibling(ArtifactResult result, String... suffixes) {
        ArtifactContext sibling = new ArtifactContext(result.name(), result.version(), result.repository(), suffixes);
        sibling.copySettingsFrom(this);
        return sibling;
    }

// Path: spi/src/main/java/com/redhat/ceylon/cmr/spi/Node.java
// public interface Node {
//     String getLabel();
// 
//     <T> T getValue(Class<T> valueType);
// 
//     Node getChild(String label);
// 
//     Iterable<? extends Node> getChildren();
// 
//     boolean hasBinaries();
// 
//     /**
//      * @deprecated see getSizedInputStream
//      */
//     InputStream getInputStream() throws IOException;
// 
//     SizedInputStream getSizedInputStream() throws IOException;
// 
//     <T> T getContent(Class<T> contentType) throws IOException;
// 
//     long getLastModified() throws IOException;
// 
//     long getSize() throws IOException;
// 
//     Node getParent(String label);
// 
//     Iterable<? extends Node> getParents();
// 
//     boolean isRemote();
// 
//     String getDisplayString();
// 
//     String getStoreDisplayString();
// }


// Path: api/src/main/java/com/redhat/ceylon/cmr/api/ArtifactContext.java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import com.redhat.ceylon.cmr.spi.ContentOptions;
import com.redhat.ceylon.cmr.spi.Node;
import com.redhat.ceylon.cmr.spi.OpenNode;
import com.redhat.ceylon.model.cmr.ArtifactResult;
import com.redhat.ceylon.model.cmr.Repository;
import com.redhat.ceylon.model.cmr.RepositoryException;

    }

    public ArtifactContext getSuffixContext(String... suffixes) {
        ArtifactContext ac = copy();
        ac.setSuffixes(suffixes);
        return ac;
    }

    public ArtifactContext getDocsContext() {
        return getSuffixContext(DOCS);
    }

    public ArtifactContext getResourcesContext() {
        return getSuffixContext(RESOURCES);
    }

    public ArtifactContext getModuleProperties() {
        return getSuffixContext(MODULE_PROPERTIES);
    }

    public ArtifactContext getModuleXml() {
        return getSuffixContext(MODULE_XML);
    }

    public ArtifactContext getSibling(ArtifactResult result, String... suffixes) {
        ArtifactContext sibling = new ArtifactContext(result.name(), result.version(), result.repository(), suffixes);
        sibling.copySettingsFrom(this);
        return sibling;
    }

    public void toNode(Node node) {