/*
* 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 com.aliyun.odps.local.common;
import java.io.File;
import com.aliyun.odps.utils.StringUtils;
public class JobDirecotry {
public File getJobDir() {
File f = new File(WareHouse.getInstance().getJobDirStr(), WareHouse.getInstance().getJobName());
if (!f.exists()) {
f.mkdirs();
}
return f;
}
public File getJobFile() {
return new File(getJobDir(), "job.xml");
}
public File getInputBaseDir() {
File f = new File(getJobDir(), "input");
return f;
}
public File getOutputBaseDir() {
File f = new File(getJobDir(), "output");
return f;
}
public File getInputDir(String relativePath) {
File f = new File(getJobDir(), "input" + File.separator + relativePath);
if (!f.exists()) {
f.mkdirs();
}
return f;
}
/**
* 将job临时目录中的输入表数据文件映射为Warehouse中的输入表数据文件
*
* 如将~/temp/mr_20150212083126_505_21462/input/project_name/wc_in2/p1=1/p2=2/
* data 映射为~/warehouse/project_name/wc_in2/p1=1/p2=2/data
*
* @param jobInputFile
* @return
*/
public File convertInputFile(File jobInputFile) {
String jobInputFileStr = jobInputFile.getAbsolutePath().replaceAll("\\\\", "/");
File jobInputBaseDir = new File(getJobDir(), "input");
String jobInputBaseDirStr = jobInputBaseDir.getAbsolutePath().replaceAll("\\\\", "/");
if (!jobInputFileStr.startsWith(jobInputBaseDirStr)) {
return null;
}
if (jobInputBaseDirStr.length() == jobInputFileStr.length()) {
return new File(getJobDir(), "input");
}
String relativePath = jobInputFileStr.substring(jobInputBaseDirStr.length());
if (relativePath.equals("/")) {
return new File(getJobDir(), "input");
}
if (relativePath.startsWith("/")) {
relativePath = relativePath.substring(1);
}
int index = relativePath.indexOf("/");
// project directory
if (index == -1) {
return new File(WareHouse.getInstance().getWarehouseDir(), relativePath);
}
String projectName = relativePath.substring(0, index);
relativePath = relativePath.substring(index);
return new File(WareHouse.getInstance().getWarehouseDir(), projectName + File.separator
+ Constants.TABLES_DIR
+ File.separator + relativePath);
}
public File getOutputDir(String label) {
StringBuilder sb = new StringBuilder("output" + File.separator);
if (StringUtils.isNullOrEmpty(label)) {
sb.append("__default__");
} else {
sb.append(label);
}
File f = new File(getJobDir(), sb.toString());
if (!f.exists()) {
f.mkdirs();
}
return f;
}
public File getResourceDir() {
File f = new File(getJobDir(), "resource");
if (!f.exists()) {
f.mkdirs();
}
return f;
}
public boolean hasResource(String resourceName) {
File resourceRootDir = new File(getJobDir(), "resource");
if (!resourceRootDir.exists()) {
resourceRootDir.mkdirs();
}
File resourceDir = new File(resourceRootDir, resourceName);
return resourceDir.exists();
}
}