package com.sobey.cmop.mvc.service.onecmdb;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.onecmdb.core.IRfcResult;
import org.onecmdb.core.internal.model.QueryCriteria;
import org.onecmdb.core.utils.bean.CiBean;
import org.onecmdb.core.utils.wsdl.IOneCMDBWebService;
import org.onecmdb.core.utils.wsdl.OneCMDBServiceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Maps;
import com.sobey.cmop.mvc.comm.BaseSevcie;
public class OneCmdbService extends BaseSevcie {
private static final Logger logger = LoggerFactory.getLogger(OneCmdbService.class);
/**
* 解析config.properties 获得OneCmdb api 配置信息
*/
private static String token = "";
public static IOneCMDBWebService service = initService();
private static IOneCMDBWebService initService() {
try {
String url = CONFIG_LOADER.getProperty("onecmdbHost");
String username = CONFIG_LOADER.getProperty("onecmdbUsername");
String pwd = CONFIG_LOADER.getProperty("onecmdbPwd");
IOneCMDBWebService service = OneCMDBServiceFactory.getWebService(url);
// 通过OneCMDB身份认证
token = service.auth(username, pwd);
logger.info("Authenticated token=" + token);
return service;
} catch (Exception e) {
logger.error("--->初始化OneCMDB接口服务失败!" + e.getMessage());
return null;
}
}
/**
* 新增、更新操作
*
* @param list
* @return
*/
public static boolean update(List<CiBean> list) {
try {
IRfcResult result = service.update(token, list.toArray(new CiBean[0]), null);
if (result.isRejected()) {
logger.info("Can't add/update instances cause by:" + result.getRejectCause());
return false;
} else {
logger.info("Instances added or updated");
return true;
}
} catch (Exception e) {
logger.error("--->OneCMDB add/update error:" + e.getMessage());
if (e.getMessage().indexOf("No Session found") > 0) {
initService();
update(list);
}
return false;
}
}
/**
* 删除操作
*
* @param list
* @return
*/
public static boolean delete(List<CiBean> list) {
try {
IRfcResult result = service.update(token, null, list.toArray(new CiBean[0]));
if (result.isRejected()) {
logger.info("Can't delete instances cause by:" + result.getRejectCause());
return false;
} else {
logger.info("Instances deleted");
return true;
}
} catch (Exception e) {
logger.error("--->OneCMDB delete error:" + e.getMessage());
if (e.getMessage().indexOf("No Session found") > 0) {
initService();
delete(list);
}
return false;
}
}
/**
* 查询操作
*
* @param list
* @return
*/
public static List<CiBean> search(QueryCriteria qc) {
try {
CiBean[] ciBeanArray = service.search(token, qc);
List<CiBean> ciBeans = Arrays.asList(ciBeanArray);
return ciBeans;
} catch (Exception e) {
logger.error("--->OneCMDB search error:" + e.getMessage());
if (e.getMessage().indexOf("No Session found") > 0) {
initService();
search(qc);
}
return null;
}
}
/**
* 根据alias获得指定CI.如果没有则返回null.
*
* @param alias
* @return
*/
public static CiBean findCiBeanByAlias(String alias) {
QueryCriteria<Object> qc = new QueryCriteria<Object>();
qc.setCiAlias(alias);
List<CiBean> ciBeans = search(qc);
if (ciBeans.isEmpty()) {
return null;
}
return ciBeans.get(0);
}
/**
* 查询某个CI下的所有记录
*
* @param ci
* @return [alias,displayname]
*/
public static Map<String, String> findCiByText(String ci) {
QueryCriteria qc = new QueryCriteria();
qc.setOffspringOfAlias(ci);
List<CiBean> ciBeans = search(qc);
Map<String, String> temp = Maps.newHashMap();
if (ciBeans != null) {
for (CiBean ciBean : ciBeans) {
temp.put(
ciBean.getAlias(),
ci.equals("Vlans") ? (ciBean.getDisplayName() + "(" + ciBean.getDescription() + ")") : ciBean
.getDisplayName());
}
}
logger.info("find results(" + ci + "):" + temp.size());
return temp;
}
/**
* 根据文本信息查询符合条件的所有CI
*
* @param ci
* @param text
* @return
*/
public static Map<String, String> findCiByText(String ci, String text) {
QueryCriteria qc = new QueryCriteria();
qc.setOffspringOfAlias(ci);
qc.setTextMatchValue(true);
qc.setText(text);
List<CiBean> ciBeans = search(qc);
Map<String, String> temp = Maps.newHashMap();
if (ciBeans != null) {
for (CiBean ciBean : ciBeans) {
temp.put(ciBean.getAlias(), ciBean.getDisplayName());
}
}
logger.info("find results(" + ci + "," + text + "):" + temp.size());
return temp;
}
/**
* 根据文本信息查询符合条件的唯一CI的别名
*
* @param ci
* @param text
* @return
*/
public static String findCiAliasByText(String ci, String text) {
QueryCriteria qc = new QueryCriteria();
qc.setOffspringOfAlias(ci);
qc.setTextMatchValue(true);
qc.setText(text);
List<CiBean> ciBeans = search(qc);
if (ciBeans != null) {
logger.info("find results(" + ci + "," + text + "):" + ciBeans.size());
for (CiBean ciBean : ciBeans) {
return ciBean.getAlias();
}
}
return "";
}
}