blob: f7dcfe00edac1723b62c7c27b4aff995f3c406c5 [file] [log] [blame]
/*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.calcite.avatica.util;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.net.URL;
/**
* Source of data.
*/
public interface Source {
URL url();
File file();
String path();
Reader reader() throws IOException;
InputStream openStream() throws IOException;
String protocol();
/** Looks for a suffix on a path and returns
* either the path with the suffix removed
* or the original path. */
Source trim(String suffix);
/** Looks for a suffix on a path and returns
* either the path with the suffix removed
* or null. */
Source trimOrNull(String suffix);
/** Returns a source whose path concatenates this with a child.
*
* <p>For example,
* <ul>
* <li>source("/foo").append(source("bar"))
* returns source("/foo/bar")
* <li>source("/foo").append(source("/bar"))
* returns source("/bar")
* because "/bar" was already absolute
* </ul>
*/
Source append(Source child);
/** Returns a relative source, if this source is a child of a given base.
*
* <p>For example,
* <ul>
* <li>source("/foo/bar").relative(source("/foo"))
* returns source("bar")
* <li>source("/baz/bar").relative(source("/foo"))
* returns source("/baz/bar")
* </ul>
*/
Source relative(Source source);
}
// End Source.java