/**
* 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.ambari.view.pig.utils;
import com.google.common.base.Optional;
import org.apache.ambari.view.ViewContext;
import org.apache.ambari.view.commons.hdfs.ViewPropertyHelper;
import org.apache.ambari.view.pig.templeton.client.TempletonApi;
import org.apache.ambari.view.pig.templeton.client.TempletonApiFactory;
import org.apache.ambari.view.utils.UserLocal;
import org.apache.ambari.view.utils.hdfs.HdfsApi;
import org.apache.ambari.view.utils.hdfs.HdfsApiException;
import org.apache.ambari.view.utils.hdfs.HdfsUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
public class UserLocalObjects {
public static final String VIEW_CONF_KEYVALUES = "view.conf.keyvalues";
private final static Logger LOG =
LoggerFactory.getLogger(UserLocalObjects.class);
/**
* HdfsApi user-local instance
*/
private static UserLocal<HdfsApi> hdfsApi;
/**
* TempletonApi user-local instance
*/
private static UserLocal<TempletonApi> templetonApi;
static {
templetonApi = new UserLocal<TempletonApi>(TempletonApi.class) {
@Override
protected synchronized TempletonApi initialValue(ViewContext context) {
TempletonApiFactory templetonApiFactory = new TempletonApiFactory(context);
return templetonApiFactory.connectToTempletonApi();
}
};
hdfsApi = new UserLocal<HdfsApi>(HdfsApi.class) {
@Override
protected synchronized HdfsApi initialValue(ViewContext context) {
try {
Optional<Map<String, String>> props = ViewPropertyHelper.getViewConfigs(context, VIEW_CONF_KEYVALUES);
HdfsApi api;
if(props.isPresent()){
api = HdfsUtil.connectToHDFSApi(context, props.get());
}else{
api = HdfsUtil.connectToHDFSApi(context);
}
return api;
} catch (HdfsApiException e) {
throw new ServiceFormattedException(e);
}
}
};
}
public static HdfsApi getHdfsApi(ViewContext context) {
return hdfsApi.get(context);
}
public static void setHdfsApi(HdfsApi api, ViewContext context) {
hdfsApi.set(api, context);
}
public static TempletonApi getTempletonApi(ViewContext context) {
return templetonApi.get(context);
}
public static void setTempletonApi(TempletonApi api, ViewContext context) {
templetonApi.set(api, context);
}
}