[ https://issues.apache.org/jira/browse/DRILL-8364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17644896#comment-17644896 ]
ASF GitHub Bot commented on DRILL-8364: --------------------------------------- cgivre commented on code in PR #2714: URL: https://github.com/apache/drill/pull/2714#discussion_r1043592053 ########## exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/BoxFileSystem.java: ########## @@ -0,0 +1,459 @@ +/* + * 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.drill.exec.store.dfs; + +import com.box.sdk.BoxAPIConnection; +import com.box.sdk.BoxFile; +import com.box.sdk.BoxFolder; +import com.box.sdk.BoxFolder.Info; +import com.box.sdk.BoxItem; +import com.box.sdk.BoxSearch; +import com.box.sdk.BoxSearchParameters; +import com.box.sdk.PartialCollection; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.drill.common.exceptions.UserException; +import org.apache.drill.common.logical.security.CredentialsProvider; +import org.apache.drill.exec.oauth.PersistentTokenTable; +import org.apache.drill.exec.store.security.oauth.OAuthTokenCredentials; +import org.apache.drill.exec.store.security.oauth.OAuthTokenCredentials.Builder; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsPermission; +import org.apache.hadoop.util.Progressable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BoxFileSystem extends OAuthEnabledFileSystem { + + private static final Logger logger = LoggerFactory.getLogger(BoxFileSystem.class); + private static final String TIMEOUT_DEFAULT = "5000"; + private static final List<String> SEARCH_CONTENT_TYPES = new ArrayList<>(Collections.singletonList("name")); + private Path workingDirectory; + private BoxAPIConnection client; + private String workingDirectoryID; + private BoxFolder rootFolder; + private boolean usesDeveloperToken; + private final List<String> ancestorFolderIDs = new ArrayList<>(); + private final Map<Path, BoxItem> itemCache = new HashMap<>(); + + /** + * Returns a URI which identifies this FileSystem. + * + * @return the URI of this filesystem. + */ + @Override + public URI getUri() { + try { + return new URI("box:///"); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + /** + * Opens an FSDataInputStream at the indicated Path. + * + * @param inputPath the file name to open + * @param bufferSize the size of the buffer to be used. + * @throws IOException IO failure + */ + @Override + public FSDataInputStream open(Path inputPath, int bufferSize) throws IOException { + client = getClient(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + BoxItem item = getItem(inputPath); + if (item instanceof BoxFile) { + BoxFile file = (BoxFile) getItem(inputPath); Review Comment: Fixed > Add Support for OAuth Enabled File Systems > ------------------------------------------ > > Key: DRILL-8364 > URL: https://issues.apache.org/jira/browse/DRILL-8364 > Project: Apache Drill > Issue Type: Improvement > Components: Storage - File > Affects Versions: 1.20.2 > Reporter: Charles Givre > Assignee: Charles Givre > Priority: Major > Fix For: 2.0.0 > > > Currently Drill supports reading from file systems such as HDFS, S3 and > others that use token based authentication. This PR extends Drill's plugin > architecture so that Drill can connect with other file systems which use > OAuth 2.0 for authentication. > This PR also adds support for Drill to query Box. -- This message was sent by Atlassian Jira (v8.20.10#820010)