/*
* Lokomo OneCMDB - An Open Source Software for Configuration
* Management of Datacenter Resources
*
* Copyright (C) 2006 Lokomo Systems AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via
* paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33
* Danderyd, Sweden.
*
*/
package org.onecmdb.ui.gwt.desktop.server.service.model;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.DocumentException;
import org.onecmdb.core.IRfcResult;
import org.onecmdb.core.internal.authorization.RBACSession;
import org.onecmdb.core.internal.authorization.Role;
import org.onecmdb.core.internal.storage.hibernate.PageInfo;
import org.onecmdb.core.utils.bean.AttributeBean;
import org.onecmdb.core.utils.bean.CiBean;
import org.onecmdb.core.utils.bean.ValueBean;
import org.onecmdb.core.utils.graph.query.GraphQuery;
import org.onecmdb.core.utils.graph.query.OrderInfo;
import org.onecmdb.core.utils.graph.query.constraint.AttributeValueConstraint;
import org.onecmdb.core.utils.graph.query.constraint.ItemAndGroupConstraint;
import org.onecmdb.core.utils.graph.query.constraint.ItemNotConstraint;
import org.onecmdb.core.utils.graph.query.constraint.ItemOrGroupConstraint;
import org.onecmdb.core.utils.graph.query.constraint.RFCTargetConstraint;
import org.onecmdb.core.utils.graph.query.constraint.RelationConstraint;
import org.onecmdb.core.utils.graph.query.selector.ItemAliasSelector;
import org.onecmdb.core.utils.graph.query.selector.ItemOffspringSelector;
import org.onecmdb.core.utils.graph.query.selector.ItemRFCSelector;
import org.onecmdb.core.utils.graph.query.selector.ItemRelationSelector;
import org.onecmdb.core.utils.graph.query.selector.ItemSelector;
import org.onecmdb.core.utils.graph.result.Graph;
import org.onecmdb.core.utils.graph.result.Template;
import org.onecmdb.core.utils.wsdl.IOneCMDBWebService;
import org.onecmdb.core.utils.wsdl.RFCBean;
import org.onecmdb.core.utils.xml.XmlGenerator;
import org.onecmdb.ui.gwt.desktop.client.service.CMDBLoginException;
import org.onecmdb.ui.gwt.desktop.client.service.CMDBRPCException;
import org.onecmdb.ui.gwt.desktop.client.service.content.Config;
import org.onecmdb.ui.gwt.desktop.client.service.content.ContentData;
import org.onecmdb.ui.gwt.desktop.client.service.content.ContentFile;
import org.onecmdb.ui.gwt.desktop.client.service.content.ContentFolder;
import org.onecmdb.ui.gwt.desktop.client.service.content.IContentService;
import org.onecmdb.ui.gwt.desktop.client.service.model.AttributeModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.CIModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBDesktopConfig;
import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBSession;
import org.onecmdb.ui.gwt.desktop.client.service.model.HistoryModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.IModelService;
import org.onecmdb.ui.gwt.desktop.client.service.model.LoadConfigModelItem;
import org.onecmdb.ui.gwt.desktop.client.service.model.ModelItem;
import org.onecmdb.ui.gwt.desktop.client.service.model.SaveDeleteRequest;
import org.onecmdb.ui.gwt.desktop.client.service.model.SaveItem;
import org.onecmdb.ui.gwt.desktop.client.service.model.SaveResponse;
import org.onecmdb.ui.gwt.desktop.client.service.model.StoreResult;
import org.onecmdb.ui.gwt.desktop.client.service.model.UserPreference;
import org.onecmdb.ui.gwt.desktop.client.service.model.ValueListModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.ValueModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.grid.AttributeColumnConfig;
import org.onecmdb.ui.gwt.desktop.client.service.model.grid.CIModelCollection;
import org.onecmdb.ui.gwt.desktop.client.service.model.grid.GridModelConfig;
import org.onecmdb.ui.gwt.desktop.client.service.model.group.GroupCollection;
import org.onecmdb.ui.gwt.desktop.client.service.model.group.GroupDescription;
import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.MDRHistoryState;
import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.TransformConfig;
import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.transform.TransformModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.tree.CITreeModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.tree.RelationCollectionModel;
import org.onecmdb.ui.gwt.desktop.client.service.model.tree.RelationTypeModel;
import org.onecmdb.ui.gwt.desktop.client.utils.GXTModel2XML;
import org.onecmdb.ui.gwt.desktop.server.command.ExecCommand;
import org.onecmdb.ui.gwt.desktop.server.service.CMDBRPCHandler;
import org.onecmdb.ui.gwt.desktop.server.service.ServiceLocator;
import org.onecmdb.ui.gwt.desktop.server.service.change.ICIMDR;
import org.onecmdb.ui.gwt.desktop.server.service.change.OneCMDBWebServiceMDR;
import org.onecmdb.ui.gwt.desktop.server.service.content.ContentParserFactory;
import org.onecmdb.ui.gwt.desktop.server.service.content.ContentServiceImpl;
import org.onecmdb.ui.gwt.desktop.server.service.content.adapter.GXTModelContentAdapter;
import org.onecmdb.ui.gwt.desktop.server.service.model.group.GroupTransform;
import org.onecmdb.ui.gwt.desktop.server.service.model.mdr.AutoResolveRelation;
import org.onecmdb.ui.gwt.desktop.server.service.model.mdr.MDRSetupService;
import org.onecmdb.utils.xml.GraphQuery2XML;
import org.onecmdb.utils.xml.XML2GraphQuery;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.data.BaseListLoadConfig;
import com.extjs.gxt.ui.client.data.BaseListLoadResult;
import com.extjs.gxt.ui.client.data.BaseModel;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.SortInfo;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
public class ModelServiceImpl extends RemoteServiceServlet implements IModelService {
private Log log = LogFactory.getLog(this.getClass());
class GridResult {
public List<CIModelCollection> data;
public int totalCount;
}
public ModelServiceImpl() {
super();
log.info("Starting ModelServiceImpl....");
}
public CMDBSession validateToken(String token) throws Exception {
log.info("validateToken(token=" + token + ")");
IOneCMDBWebService service = CMDBWebServiceFactory.get().getOneCMDBWebService();
/*
CiBean bean = service.getAuthAccount(token);
String username = bean.toStringValue("username");
*/
CMDBSession session = allocSession(service, token, "unknown");
return(session);
}
public Boolean logout(String token) {
try {
IOneCMDBWebService service = CMDBWebServiceFactory.get().getOneCMDBWebService();
service.logout(token);
} catch (Throwable t) {
// Silently ignore...
}
return(true);
}
public CMDBSession autoLogin(String id) throws Exception {
log.info("autoLogin(id=" + id + ")");
IOneCMDBWebService service = CMDBWebServiceFactory.get().getOneCMDBWebService();
Config config = ConfigurationFactory.getConfig();
String autoLoginDef = config.get(Config.AUTO_LOGIN_DEF);
if (autoLoginDef == null) {
autoLoginDef = "OneCMDB_Desktop/autologin/AutoLogin.xml";
}
ContentData data = new ContentData();
data.setPath(autoLoginDef);
BaseModel m = (BaseModel) ContentParserFactory.get().getCachedAdaptor(data, BaseModel.class);
Object list = m.get("AutoLogin");
if (list instanceof List) {
for (BaseModel login : (List<BaseModel>)list) {
if (id.equals(login.get("id"))) {
String username = login.get("username");
String passwd = login.get("password");
return(autenticate(username, passwd));
}
}
}
log.warn("autoLogin(id=" + id + ") not found");
throw new IllegalArgumentException("Not allowd");
}
protected CMDBSession allocSession(IOneCMDBWebService service, String token, String username) throws CMDBLoginException {
CMDBSession session = new CMDBSession();
session.setToken(token);
session.setUsername(username);
// Check if registartion has been asked for.
IContentService cService = (IContentService) ServiceLocator.getService(IContentService.class);
if (cService == null) {
cService = new ContentServiceImpl();
}
// Load rbac..
RBACSession rbac = service.getRBACSession(token);
// Find desktop config for role/user.
// TODO:
String defaultRole = null;
List<String> roles = new ArrayList<String>();
for (Role role : rbac.getRoles()) {
if (defaultRole == null) {
defaultRole = role.getName();
}
roles.add(role.getName());
}
Config config = ConfigurationFactory.getConfig();
String reqRole = config.get(Config.RequireRoleToLogin);
if (reqRole != null && reqRole.equalsIgnoreCase("true")) {
if (roles.size() == 0) {
throw new CMDBLoginException("Login Failed", username + " not part of any role!");
}
}
session.setRoles(roles);
session.setDefaultRole(defaultRole);
session.setDesktopConfig(getDesktopConfig(username, token, defaultRole));
session.setConfig(config);
// Load User preferences.
session.setUserPreference(loadUserPreferences(token, username));
ContentFile reg = new ContentFile();
reg.setPath("OneCMDB_Desktop/users/registration");
cService.stat(reg);
session.setRegistration(!reg.isExists());
session.setInstallId(getCMDB_ID());
if (!reg.isExists()) {
cService.create(token, reg);
}
return(session);
}
public CMDBSession autenticate(String username, String passwd) throws CMDBLoginException {
log.info("autenticate(username=" + username + ", pwd=*******)");
IOneCMDBWebService service = null;
try {
service = CMDBWebServiceFactory.get().getOneCMDBWebService();
} catch (Exception e1) {
throw new CMDBLoginException("Login Failed", "Can't contact OneCMDB Core WebService");
}
String token = null;
try {
token = service.auth(username, passwd);
} catch (IllegalAccessException e) {
throw new CMDBLoginException("Login Failed", "Bad credentials for " + username);
} catch (Throwable t) {
throw new CMDBLoginException("Login Failed", t.getMessage());
}
log.info("autenticate(username=" + username + ", pwd=*******) --> token=" + token);
CMDBSession session = allocSession(service, token, username);
return(session);
}
/**
* Search for a defaultView.xml according to the following.
* 1) OneCMDB_Desktop/roles/<roleName>/users/<username>/defaultView.xml
* 2) OneCMDB_Desktop/roles/<roleName>/defaultView.xml
* 3) OneCMDB_Desktop/defaultView.xml
* @param session
* @param role
* @return
*/
public CMDBDesktopConfig getDesktopConfig(String username, String token, String role) {
log.info("getDesktopConfig(username=" + username + ", token=" + token + ", role=" + role + ")");
Config config = ConfigurationFactory.getConfig();
IContentService cService = (IContentService) ServiceLocator.getService(IContentService.class);
CMDBDesktopConfig desktopConfig = null;
if (role != null) {
ContentData userConfig = new ContentData();
userConfig.setPath((String)config.get(Config.DesktopRoleConfigPath) + "/" + role + "/users/" + username + "/desktopView.xml");
cService.stat(userConfig);
if (userConfig.isExists()) {
log.info("getDesktopConfig(username=" + username + ", token=" + token + ", role=" + role + ") load " + userConfig.getPath());
desktopConfig = (CMDBDesktopConfig) ContentParserFactory.get().getAdaptor(userConfig, CMDBDesktopConfig.class);
return(desktopConfig);
}
userConfig.setPath((String)config.get(Config.DesktopRoleConfigPath) + "/" + role + "/desktopView.xml");
cService.stat(userConfig);
if (userConfig.isExists()) {
log.info("getDesktopConfig(username=" + username + ", token=" + token + ", role=" + role + ") load " + userConfig.getPath());
desktopConfig = (CMDBDesktopConfig) ContentParserFactory.get().getAdaptor(userConfig, CMDBDesktopConfig.class);
return(desktopConfig);
}
}
// Use global.
ContentData configData = new ContentData();
configData.setPath((String)config.get(Config.DesktopDefaultConfig));
log.info("getDesktopConfig(username=" + username + ", token=" + token + ", role=" + role + ") load default " + configData.getPath());
// Check if user have own view.
desktopConfig = (CMDBDesktopConfig) ContentParserFactory.get().getAdaptor(configData, CMDBDesktopConfig.class);
return(desktopConfig);
}
/**
* User Prefeferences.
* @throws CMDBRPCException
*/
public void saveUserPreferences(String token, String username, UserPreference preferences) throws CMDBRPCException {
Config config = ConfigurationFactory.getConfig();
IContentService cService = (IContentService) ServiceLocator.getService(IContentService.class);
ContentFolder folder = new ContentFolder(config.get(Config.DesktopUserConfigPath) + "/" + username);
cService.stat(folder);
if (!folder.isExists()) {
cService.mkdir(token, folder);
}
ContentFile userPref = new ContentFile(config.get(Config.DesktopUserConfigPath) + "/" + username + "/desktop_preferences.xml");
// Store preferences...
String xml = GXTModel2XML.toXML("UserPreference", preferences);
cService.put(token, userPref, xml);
}
public UserPreference loadUserPreferences(String token, String username) {
Config config = ConfigurationFactory.getConfig();
IContentService cService = (IContentService) ServiceLocator.getService(IContentService.class);
ContentFile userPref = new ContentFile(config.get(Config.DesktopUserConfigPath) + "/" + username + "/desktop_preferences.xml");
cService.stat(userPref);
UserPreference pref = null;
if (userPref.isExists()) {
log.info("getUserPreferences(username=" + username + ", token=" + token + ") load " + userPref.getPath());
try {
pref = (UserPreference) ContentParserFactory.get().getAdaptor(userPref, UserPreference.class);
} catch (Throwable t) {
t.printStackTrace();
log.warn("Can't load user preferences...", t);
}
}
if (pref == null) {
pref = new UserPreference();
}
return(pref);
}
public SaveResponse delete(String token, ContentData mdrData, SaveDeleteRequest request) {
log.info("delete(token=" + token + ", request=" + request + ")");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
List<CiBean> deleteBeans = getSaveDeleteItems(mdr, token, request);
// Don't delete Root CI and CIReference.
CiBean ciBean = null;
CiBean refBean = null;
for (CiBean bean : deleteBeans) {
if (bean.getAlias().equals("Ci")) {
ciBean = bean;
}
if (bean.getAlias().equals("CIReference")) {
refBean = bean;
}
}
if (refBean != null) {
deleteBeans.remove(refBean);
}
if (ciBean != null) {
deleteBeans.remove(ciBean);
}
if (request.isVerify()) {
SaveResponse result = new SaveResponse();
updateSaveDeleteResponse(result, deleteBeans);
return(result);
}
// Do the delete.
IRfcResult result = mdr.update(token, new CiBean[0], deleteBeans.toArray(new CiBean[0]));
SaveResponse resp = new SaveResponse();
updateSaveDeleteResponse(resp, deleteBeans);
resp.setFailed(result.isRejected());
resp.setFailedCause(result.getRejectCause());
log.info("delete(token=" + token + ")- rejected=" + result.isRejected() + ", cause=" + result.getRejectCause());
return(resp);
}
public SaveResponse save(String token, ContentData mdrData, SaveDeleteRequest request) {
log.info("export(token=" + token + ", request=" + request + ")");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
List<CiBean> saveBeans = getSaveDeleteItems(mdr, token, request);
// Do the save.
XmlGenerator gen = new XmlGenerator();
// Generate directory.
File f = new File(ContentParserFactory.get().getRootPath() + "/" + request.getContent().getPath());
if (f.getParentFile() != null && !f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}
gen.setOutput(ContentParserFactory.get().getRootPath() + "/" + request.getContent().getPath());
gen.setBeans(saveBeans);
gen.setCompactMode(true);
SaveResponse result = new SaveResponse();
updateSaveDeleteResponse(result, saveBeans);
result.setFailed(false);
try {
gen.process();
} catch (IOException e) {
// TODO Auto-generated catch block
log.error("Export failed:", e);
result.setFailed(true);
result.setFailedCause(e.toString());
}
log.info("export(token=" + token + ")- to=" + request.getContent().getPath() + ", failed=" + result.isFailed() + ", cause=" + result.getFailedCause());
return(result);
}
public CIModel execMDR(String token, CIModel mdr, CIModel mdrConfig) throws CMDBRPCException {
log.info("execMDR(token=" + token + ", mdr=" + mdr + ", config=" + mdrConfig + ")");
ExecCommand cmd = new ExecCommand();
cmd.setConfig(mdrConfig.getValueAsString("name"));
cmd.setMdr(mdr.getValueAsString("name"));
cmd.setVerbose("true");
cmd.setCmd("start");
cmd.setToken(token);
try {
File root = ContentParserFactory.get().getRootPath();
if (root == null) {
throw new CMDBRPCException("Internal Error", "can't find repositry root!", null);
}
String mdrHome = ConfigurationFactory.get(Config.MDR_HOME);
if (mdrHome == null) {
mdrHome = "MDR";
}
root = new File(root, mdrHome);
cmd.setRoot(root.getCanonicalPath());
} catch (IOException e1) {
e1.printStackTrace();
throw new CMDBRPCException("Internal Error", "can't find repositry root!", null);
}
String historyTemplate = ConfigurationFactory.get(Config.MDR_HISTORY_ITEM);
if (historyTemplate == null) {
historyTemplate = MDRHistoryState.getHistoryTemplate();
}
cmd.setHistory(historyTemplate);
try {
cmd.transfer(System.out);
CiBean history = cmd.getHistoryBean();
if (history == null) {
throw new CMDBRPCException("Internal Error", "No History Item created!", null);
}
if (cmd.getExecError() != null) {
throw new CMDBRPCException("Internal Error", "Error running exec", CMDBRPCHandler.getStackTrace(cmd.getExecError()));
}
ICIMDR cmdb = CMDBWebServiceFactory.get().getOneCMDBCIMDR();
CiBean parent = cmdb.getCI(token, history.getAlias());
return(new Transform().convert(cmdb, token, parent, history));
} catch (Throwable e) {
e.printStackTrace();
throw new CMDBRPCException("Internal Error", e.getMessage(), CMDBRPCHandler.getStackTrace(e));
}
}
public BaseListLoadResult<BaseModel> loadMDROverview(String token,
ContentData mdrData, BaseListLoadConfig loadConfig) {
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
GraphQuery q = new GraphQuery();
ItemOffspringSelector config = new ItemOffspringSelector("config", "MDR_ConfigEntry");
config.setMatchTemplate(false);
config.setPrimary(true);
//config.setPrimary(true);
ItemOffspringSelector mdrD = new ItemOffspringSelector("mdr", "MDR_Repository");
mdrD.setMatchTemplate(false);
ItemRelationSelector config2mdr = new ItemRelationSelector("config2mdr", "Reference", "mdr", "config");
/*
ItemOffspringSelector history = new ItemOffspringSelector("history", "MDR_HistoryEntry");
history.setMatchTemplate(false);
history.setPageInfo(new PageInfo(0,1));
ItemRelationSelector history2config = new ItemRelationSelector("history2config", "Reference", "config", "history");
history2config.setMandatory(false);
*/
q.addSelector(config);
q.addSelector(mdrD);
q.addSelector(config2mdr);
Graph queryResult = mdr.query(token, q);
queryResult.buildMap();
List<BaseModel> resultList = new ArrayList<BaseModel>();
Template cfg = queryResult.fetchNode("config");
if (cfg != null) {
for (CiBean cfgBean : cfg.getOffsprings()) {
BaseModel data = new BaseModel();
CiBean mdrBean = null;
Template mdrTemp = queryResult.fetchReference(cfgBean, RelationConstraint.SOURCE, config2mdr.getId());
if (mdrTemp == null) {
continue;
}
if (mdrTemp.getOffsprings().size() != 1) {
continue;
}
mdrBean = mdrTemp.getOffsprings().get(0);
CiBean historyBean = getLatestHistory(token, mdr, cfgBean);
data.set("name", cfgBean.toStringValue("name"));
data.set("mdr", mdrBean.toStringValue("name"));
data.set("mdrAlias", mdrBean.getAlias());
data.set("configAlias", cfgBean.getAlias());
if (historyBean != null) {
data.set("status", historyBean.toStringValue("status"));
Date date = historyBean.getLastModified();
if (date != null) {
try {
SimpleDateFormat fmt = new SimpleDateFormat(ConfigurationFactory.getConfig().getDateTimeFmt());
data.set("date", fmt.format(date));
} catch (Throwable t) {
data.set("date", date.toString());
}
}
data.set("added", historyBean.toStringValue("added"));
data.set("deleted", historyBean.toStringValue("deleted"));
data.set("modified", historyBean.toStringValue("modified"));
data.set("historyAlias", historyBean.getAlias());
}
resultList.add(data);
}
}
BaseListLoadResult<BaseModel> result = new BaseListLoadResult<BaseModel>(resultList);
return(result);
}
public CIModel getLatsetMDRConfigHistory(String token, ContentData mdrData, CIModel cfgModel) {
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
CiBean cfgBean = new CiBean();
cfgBean.setAlias(cfgModel.getAlias());
CiBean bean = getLatestHistory(token, mdr, cfgBean);
if (bean == null) {
return(null);
}
CiBean template = mdr.getCI(token, bean.getDerivedFrom());
Transform t = new Transform();
CIModel model = t.convert(mdr, token, template, bean);
return(model);
}
private CiBean getLatestHistory(String token, ICIMDR mdr, CiBean cfgBean) {
GraphQuery q = new GraphQuery();
ItemAliasSelector config = new ItemAliasSelector("config", "MDR_ConfigEntry");
config.setAlias(cfgBean.getAlias());
ItemOffspringSelector history = new ItemOffspringSelector("history", "MDR_HistoryEntry");
history.setMatchTemplate(false);
history.setPageInfo(new PageInfo(0,1));
history.setPrimary(true);
ItemRelationSelector history2config = new ItemRelationSelector("history2config", "Reference", "config", "history");
history2config.setMandatory(true);
q.addSelector(config);
q.addSelector(history);
q.addSelector(history2config);
Graph queryResult = mdr.query(token, q);
Template hist = queryResult.fetchNode(history.getId());
if (hist == null) {
return(null);
}
if (hist.getOffsprings().size() == 0) {
return(null);
}
return(hist.getOffsprings().get(0));
}
public BaseModel loadModelMDRInfo(String token, BaseModel param) throws CMDBRPCException {
log.info("loadModelMDRInfo(token=" + token + ")");
try {
ICIMDR mdr = CMDBWebServiceFactory.get().getOneCMDBCIMDR();
GraphQuery query = new GraphQuery();
ItemOffspringSelector mdrs = new ItemOffspringSelector("mdr", "MDR_Repository");
mdrs.setPrimary(true);
AttributeValueConstraint mdrCon = new AttributeValueConstraint();
mdrCon.setAlias("name");
mdrCon.setOperation(AttributeValueConstraint.EQUALS);
String mdrName = (String)param.get("mdrName");
mdrCon.setValue(mdrName);
mdrs.applyConstraint(mdrCon);
ItemOffspringSelector mdrConfigs = new ItemOffspringSelector("config", "MDR_Model_Config");
AttributeValueConstraint mdrConfigCon = new AttributeValueConstraint();
mdrConfigCon.setAlias("name");
mdrConfigCon.setOperation(AttributeValueConstraint.EQUALS);
String configName = (String)param.get("mdrConfigName");
mdrConfigCon.setValue(configName);
mdrConfigs.applyConstraint(mdrConfigCon);
ItemRelationSelector rel = new ItemRelationSelector("config2mdr", "Reference", "mdr", "config");
query.addSelector(mdrs);
query.addSelector(mdrConfigs);
query.addSelector(rel);
Graph result = mdr.query(token, query);
Template mdrTempl = result.fetchNode(mdrs.getId());
if (mdrTempl == null) {
throw new CMDBRPCException("Internal Error", "No Model MDR with name '" + param.get("mdrName") + "' found!", null);
}
if (mdrTempl.getOffsprings() == null || mdrTempl.getOffsprings().size() == 0) {
throw new CMDBRPCException("Internal Error", "No Model MDR with name '" + param.get("mdrName") + "' found!", null);
}
if (mdrTempl.getOffsprings().size() != 1) {
throw new CMDBRPCException("Internal Error", "More than one MDR with name '" + param.get("mdrName") + "' found!", null);
}
CiBean mdrBean = mdrTempl.getOffsprings().get(0);
CIModel mdrModel = new Transform().convert(mdr, token, mdrTempl.getTemplate(), mdrBean);
Template mdrConfigTempl = result.fetchNode(mdrConfigs.getId());
if (mdrConfigTempl == null) {
throw new CMDBRPCException("Internal Error", "No Model MDR Config with name '" + param.get("mdrName") + "' found!", null);
}
if (mdrConfigTempl.getOffsprings() == null || mdrConfigTempl.getOffsprings().size() == 0) {
throw new CMDBRPCException("Internal Error", "No Model MDR Config with name '" + param.get("mdrName") + "' found!", null);
}
if (mdrConfigTempl.getOffsprings().size() != 1) {
throw new CMDBRPCException("Internal Error", "More than one MDR Config with name '" + param.get("mdrName") + "' found!", null);
}
CiBean mdrConfigBean = mdrConfigTempl.getOffsprings().get(0);
CIModel mdrConfigModel = new Transform().convert(mdr, token, mdrConfigTempl.getTemplate(), mdrConfigBean);
BaseModel model = new BaseModel();
model.set("mdr", mdrModel);
model.set("mdrConfig", mdrConfigModel);
log.info("loadModelMDRInfo(token=" + token + ") OK");
return(model);
} catch (Exception e) {
log.error("loadModelMDRInfo(token=" + token + ") FAILED", e);
if (e instanceof CMDBRPCException) {
throw (CMDBRPCException)e;
}
throw new CMDBRPCException("Internal error", "Can't load Model info", CMDBRPCHandler.getStackTrace(e));
}
}
public List<CIModel> getTemplateChildren(String token, ContentData mdrData, CIModel parent, List<String> roots) throws Exception {
log.info("getTemplateChildren(token=" + token + ", parent=" + parent + ", roots=" + roots + ")");
List<CIModel> items = new ArrayList<CIModel>();
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
if (parent == null) {
if (roots == null) {
roots = new ArrayList<String>();
roots.add(ConfigurationFactory.get(Config.OneCMDBRootCI));
roots.add(ConfigurationFactory.get(Config.OneCMDBRootReference));
}
for (String root : roots) {
CiBean ci = mdr.getCI(token, root);
if (ci != null) {
CIModel model = new Transform().convert(mdr, token, ci, ci);
items.add(updateCount(model, mdr, token, ci));
}
}
log.info("getTemplateChildren(token=" + token + ") OK [result=" + items.size() + "]");
return(items);
} else {
ItemOffspringSelector offsprings = new ItemOffspringSelector("offsprings", (String)parent.getAlias());
offsprings.setMatchTemplate(true);
offsprings.setPrimary(true);
offsprings.setLimitToChild(true);
GraphQuery q = new GraphQuery();
q.addSelector(offsprings);
Graph g = mdr.query(token, q);
g.buildMap();
Template t = g.fetchNode(offsprings.getId());
if (t != null && t.getOffsprings() != null) {
Transform transform = new Transform();
transform.setCache(g);
for (CiBean bean : t.getOffsprings()) {
items.add(updateCount(transform.convert(mdr, token, bean, bean), mdr, token, bean));
}
//items.addAll(convert(mdr, token, null, t.getOffsprings()));
}
}
log.info("getTemplateChildren(token=" + token + ") OK [result=" + items.size() + "]");
return(items);
}
private CIModel updateCount(CIModel model, ICIMDR mdr, String token, CiBean ci) {
Object decorate = ConfigurationFactory.get(Config.DECORATE_TEMPLATE_COUNT);
if (decorate != null && decorate.toString().equals("true")) {
model.setProperty(CIModel.CI_TOTAL_INSTANCE_COUNT, getChildCount(mdr, token, ci, false, false));
model.setProperty(CIModel.CI_INSTANCE_CHILD_COUNT, getChildCount(mdr, token, ci, true, false));
}
model.setProperty(CIModel.CI_TEMPLATE_CHILD_COUNT, getChildCount(mdr, token, ci, true, true));
return(model);
}
private int getChildCount(ICIMDR mdr, String token, CiBean template, boolean limitToChild, boolean matchTemplate) {
ItemOffspringSelector offsprings = new ItemOffspringSelector("offsprings", (String)template.getAlias());
offsprings.setMatchTemplate(matchTemplate);
offsprings.setLimitToChild(limitToChild);
offsprings.setPrimary(true);
offsprings.setPageInfo(new PageInfo(0, 0));
GraphQuery q = new GraphQuery();
q.addSelector(offsprings);
Graph size = mdr.query(token, q);
Template sizeT = size.fetchNode(offsprings.getId());
if (sizeT == null) {
return(-1);
}
return(sizeT.getTotalCount());
}
public List<CIModel> getCIModel(String token, ContentData mdrData, List<String> aliases) {
log.info("getCIModel(token=" + token + ", aliases=" + aliases + ")");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
GraphQuery q = new GraphQuery();
ItemOffspringSelector sel2 = new ItemOffspringSelector("cache_serach", "Root");
q.addSelector(sel2);
for (String alias : aliases) {
ItemAliasSelector aSel = new ItemAliasSelector(alias, "Root");
aSel.setAlias(alias);
aSel.setPrimary(true);
q.addSelector(aSel);
ItemRelationSelector rel = new ItemRelationSelector(alias + "2ref", "Reference", sel2.getId(), aSel.getId());
q.addSelector(rel);
aSel.addExcludeRelation(rel.getId());
}
Graph result = mdr.query(token, q);
result.buildMap();
List<CIModel> models = new ArrayList<CIModel>();
Transform transform = new Transform();
transform.setCache(result);
for (String alias : aliases) {
Template t = result.fetchNode(alias);
if (t == null || t.getOffsprings() == null) {
continue;
}
for (CiBean bean : t.getOffsprings()) {
CiBean template = bean;
if (!bean.isTemplate()) {
template = transform.getCI(mdr, token, bean.getDerivedFrom());
}
CIModel model = transform.convert(mdr, token, template, bean);
models.add(model);
}
}
log.info("getCIModel(token=" + token + ", aliases=" + aliases + ") OK [result=" + models.size() + "]");
return(models);
}
public BasePagingLoadResult<HistoryModel> getHistory(ContentData mdrData, String token, LoadConfigModelItem loadConfig) {
log.info("getHistory(token=" + token + ",loadConfig=" + loadConfig + ")");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
String rfcType = ItemRFCSelector.RFC_MODIFY_VALUE_TYPE;;
String type = loadConfig.get("rfcType");
if ("all".equalsIgnoreCase(type)) {
rfcType = ItemRFCSelector.RFC_ANY_TYPE;
} else if ("values".equals(type)) {
rfcType = ItemRFCSelector.RFC_MODIFY_VALUE_TYPE;
} else if ("new".equals(type)) {
rfcType = ItemRFCSelector.RFC_NEW_CI_TYPE;
}
GraphQuery query = new GraphQuery();
ItemRFCSelector rfc = new ItemRFCSelector("history", rfcType);
rfc.setPrimary(true);
ItemOrGroupConstraint or = new ItemOrGroupConstraint();
ModelItem item = loadConfig.get("data");
if (item instanceof CIModel) {
CIModel model = (CIModel)item;
or.add(new RFCTargetConstraint(Long.parseLong(model.getIdAsString())));
for (ValueModel v : model.getValues()) {
if (v instanceof ValueListModel) {
for (ValueModel vv : ((ValueListModel)v).getValues()) {
or.add(new RFCTargetConstraint(Long.parseLong(vv.getIdAsString())));
}
} else {
or.add(new RFCTargetConstraint(Long.parseLong(v.getIdAsString())));
}
}
}
if (item instanceof AttributeModel) {
AttributeModel model = (AttributeModel)item;
or.add(new RFCTargetConstraint(Long.parseLong(model.getIdAsString())));
}
if (item instanceof ValueModel) {
ValueModel model = (ValueModel)item;
or.add(new RFCTargetConstraint(Long.parseLong(model.getIdAsString())));
}
rfc.applyConstraint(or);
if (loadConfig.getLimit() > 0) {
PageInfo pageInfo = new PageInfo(loadConfig.getOffset(), loadConfig.getLimit());
rfc.setPageInfo(pageInfo);
}
query.addSelector(rfc);
Graph resultGraph = mdr.query(token, query);
Template t = resultGraph.fetchNode("history");
List<RFCBean> beans = t.getRFC();
List<HistoryModel> items = new Transform().transform(beans);
BasePagingLoadResult<HistoryModel> result = new BasePagingLoadResult<HistoryModel>(items);
result.setOffset(loadConfig.getOffset());
result.setTotalLength(t == null ? 0 : t.getTotalCount());
log.info("getHistory(token=" + token + ",loadConfig=" + loadConfig + ") OK [result=" + items.size() + "]");
return(result);
}
public BasePagingLoadResult<CIModel> getTemplateInstances(String token,
ContentData mdrData, LoadConfigModelItem loadConfig) {
log.info("loadTemplateInstances(token=" + token + ", loadConfig=" + loadConfig + ")");
List<CIModel> items = new ArrayList<CIModel>();
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
ItemOffspringSelector offsprings = new ItemOffspringSelector("offsprings", (String)loadConfig.getRoot().get(CIModel.CI_ALIAS));
offsprings.setMatchTemplate(loadConfig.isMatchTemplate());
offsprings.setPrimary(true);
if (loadConfig.isAllChildren()) {
offsprings.setLimitToChild(false);
} else {
offsprings.setLimitToChild(true);
}
if (loadConfig.getLimit() > 0) {
PageInfo pageInfo = new PageInfo(loadConfig.getOffset(), loadConfig.getLimit());
offsprings.setPageInfo(pageInfo);
}
String search = loadConfig.get("query");
if (search != null && search.length() > 0) {
ItemAndGroupConstraint and = new ItemAndGroupConstraint();
AttributeValueConstraint vCon = SearchAttributeHandler.parse(search, null);
and.add(vCon);
if (loadConfig.isMatchTemplate()) {
vCon.setValueType(AttributeValueConstraint.INTERNAL_ALIAS);
}
if (offsprings.fetchConstraint() != null) {
and.add(offsprings.fetchConstraint());
}
offsprings.applyConstraint(and);
}
GraphQuery q = new GraphQuery();
q.addSelector(offsprings);
Graph g = mdr.query(token, q);
g.buildMap();
Template t = g.fetchNode(offsprings.getId());
if (t != null && t.getOffsprings() != null) {
Transform transform = new Transform();
transform.setCache(g);
for (CiBean bean : t.getOffsprings()) {
items.add(transform.convert(mdr, token, t.getTemplate(), bean));
}
}
BasePagingLoadResult<CIModel> result = new BasePagingLoadResult<CIModel>(items);
result.setOffset(loadConfig.getOffset());
result.setTotalLength(t == null ? 0 : t.getTotalCount());
log.info("loadTemplateInstances(token=" + token + ", loadConfig=" + loadConfig + ") OK [result=" + items.size() + "]");
return(result);
}
public BasePagingLoadResult<GroupCollection> loadGroupData(String token, BasePagingLoadConfig config) throws CMDBRPCException {
try {
GroupDescription desc = config.get("groupDescription");
ContentData mdrData = desc.getMDR();
if (mdrData == null) {
String path = ConfigurationFactory.getConfig().get(Config.OneCMDBWebService);
mdrData = new ContentFile(path);
}
String xmlQuery = desc.getQuery();
XML2GraphQuery parser = new XML2GraphQuery();
GraphQuery query = parser.parse(xmlQuery);
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
// TODO: Handle Paging...
ItemSelector prim = query.fetchPrimarySelectors();
prim.setPageInfo(new PageInfo(config.getOffset(), config.getLimit()));
Graph result = mdr.query(token, query);
result.buildMap();
GroupTransform gTransform = new GroupTransform();
List<GroupCollection> group = gTransform.generateGroupData(mdr, token, query, result);
BasePagingLoadResult<GroupCollection> data = new BasePagingLoadResult<GroupCollection>(group);
data.setOffset(config.getOffset());
data.setTotalLength(result.fetchNode(prim.getId()).getTotalCount());
return(data);
} catch (Throwable t) {
throw new CMDBRPCException("Load Group Data", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
}
/*
public List<CIGroupItem> getGroupMemebers(ContentData mdrData, String token, String refId, CIGroupItem parent, GroupDescription desc) throws CMDBRPCException {
List<CIGroupItem> result = new ArrayList<CIGroupItem>();
try {
String xmlQuery = desc.getQuery();
XML2GraphQuery parser = new XML2GraphQuery();
Map map = desc.getParams();
parser.setAttributeMap(map);
GraphQuery q = parser.parse(xmlQuery);
GraphQuery query = new GraphQuery();
String resultSelectorId = null;
if (parent == null) {
ItemSelector primary = q.fetchPrimarySelectors();
query.addSelector(primary);
resultSelectorId = primary.getId();;
} else {
// Add ItemAlias selector.
ItemAliasSelector aliasSel = new ItemAliasSelector(parent.getSelectorId(), parent.getCI().getDerivedFrom());
aliasSel.setAlias(parent.getCI().getAlias());
query.addSelector(aliasSel);
// Add References to this.
ItemRelationSelector relSel = (ItemRelationSelector) q.findSelector(refId);
query.addSelector(relSel);
// Add Target/Source
String targetId = relSel.getTarget();
if (parent.getSelectorId().equals(relSel.getSource())) {
targetId = relSel.getSource();
}
query.addSelector(q.findSelector(targetId));
resultSelectorId = targetId;
}
// Find all references to from this
List<String> refs = new ArrayList<String>();
for (ItemRelationSelector rel : q.fetchRelationSelectors()) {
if (refId.equals(rel.getId())) {
continue;
}
if (rel.getTarget().equals(resultSelectorId)) {
refs.add(rel.getId());
continue;
}
if (rel.getSource().equals(resultSelectorId)) {
refs.add(rel.getId());
continue;
}
}
// Do Query...
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
Graph graph = mdr.query(token, query);
graph.buildMap();
Transform transform = new Transform();
transform.setCache(graph);
Template t = graph.fetchNode(resultSelectorId);
for (CiBean bean : t.getOffsprings()) {
CIModel m = transform.convert(mdr, token, t.getTemplate(), bean);
CIGroupItem item = new CIGroupItem();
item.setCI(m);
item.setReferences(refs);
item.setSelectorId(resultSelectorId);
}
} catch (Throwable t) {
throw new CMDBRPCException("Load Group", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
return(result);
}
*/
public List<CITreeModel> loadGroupDefinitions(String token, ContentData mdrData, ContentData root) {
IContentService cService = (IContentService) ServiceLocator.getService(IContentService.class);
if (cService == null) {
cService = new ContentServiceImpl();
}
List<CITreeModel> models = new ArrayList<CITreeModel>();
List<? extends ContentData> list = cService.list(null, root);
for (ContentData data : list) {
if (data instanceof ContentFile) {
if (data.getPath().endsWith(".xml")) {
GroupDescription group = (GroupDescription) ContentParserFactory.get().getAdaptor(data, GroupDescription.class);
group.setMDR(mdrData);
CITreeModel m = new CITreeModel();
m.setName(group.getName());
m.set(CITreeModel.ICON_PATH, group.get("icon"));
m.setGroupDescription(group);
models.add(m);
}
}
if (data instanceof ContentFolder) {
CITreeModel m = new CITreeModel();
m.setName(data.getName());
m.setPath(data.getPath());
m.setFolder(true);
models.add(m);
}
}
return(models);
}
/**
* Load group service
*/
public List<CITreeModel> loadGroup(String token, ContentData mdrData,
CITreeModel parent) throws CMDBRPCException {
try {
if (parent == null) {
ContentData root = new ContentData();
root.setPath("Groups");
return(loadGroupDefinitions(token, mdrData, root));
}
if (parent.isFolder()) {
ContentData data = new ContentData();
data.setPath(parent.getPath());
return(loadGroupDefinitions(token, mdrData, data));
}
List<CITreeModel> resultList = new ArrayList<CITreeModel>();
/*
String path = parent.getGroupDescription();
ContentFile f = new ContentFile(path);
GroupDescription group = (GroupDescription) ContentParserFactory.get().getAdaptor(f, GroupDescription.class);
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
GraphQuery q = group.getQuery();
Graph result = mdr.query(token, q);
ItemSelector sel = q.fetchPrimarySelectors();
Transform transform = new Transform();
result.buildMap();
transform.setCache(result);
Template t = result.fetchNode(sel.getId());
resultList = populateTree(group, mdr, token, q, t, result, transform, sel);
*/
return(resultList);
} catch (Throwable t) {
throw new CMDBRPCException("Error ", "Group Load Error", CMDBRPCHandler.getStackTrace(t));
}
}
/*
protected List<CITreeModel> populateTree(GroupDescription desc, ICIMDR mdr, String token, GraphQuery q, Template t, Graph result, Transform transform, ItemSelector sel) {
List<CITreeModel> modelList = new ArrayList<CITreeModel>();
for (CiBean bean : t.getOffsprings()) {
CITreeModel tree = new CITreeModel();
tree.setCIModel(transform.convert(mdr, token, t.getTemplate(), bean));
modelList.add(tree);
for (ItemRelationSelector rel : q.fetchRelationSelectors()) {
String groupName = desc.getRelationGroupName(rel.getId());
if (rel.getTarget().equals(sel.getId())) {
CITreeModel m = new CITreeModel();
m.setName(groupName);
tree.addChild(m);
Template refs = result.fetchReference(bean, RelationConstraint.SOURCE, rel.getId());
m.setChildren(populateTree(desc, mdr, token, q, refs, result, transform, sel));
}
if (rel.getSource().equals(sel.getId())) {
CITreeModel m = new CITreeModel();
m.setName(groupName);
tree.addChild(m);
Template refs = result.fetchReference(bean, RelationConstraint.TARGET, rel.getId());
m.setChildren(populateTree(desc, mdr, token, q, refs, result, transform, sel));
}
}
}
return(modelList);
}
*/
/**
* Store service
*/
public StoreResult store(ContentData mdrData, String token,
List<? extends ModelItem> local, List<? extends ModelItem> base) {
int baseSize = (base == null ? -1 : base.size());
int localSize = (local == null ? -1 : local.size());
log.info("store(token=" + token + ", localSize=" + localSize + ", baseSize=" + baseSize +")");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
StoreResult storeResult = new StoreResult();
try {
Transform transform = new Transform();
List<CiBean> localBeans = transform.convert(mdr, token, local);
List<CiBean> baseBeans = transform.convert(mdr, token, base);
IRfcResult result = mdr.update(token, localBeans.toArray(new CiBean[0]), baseBeans.toArray(new CiBean[0]));
storeResult.setRejected(result.isRejected());
storeResult.setRejectCause(result.getRejectCause());
} catch (Throwable e) {
e.printStackTrace();
storeResult.setRejected(true);
storeResult.setRejectCause(e.getMessage());
}
log.info("store(token=" + token + ", localSize=" + localSize + ", baseSize=" + baseSize +") [rejected=" + storeResult.isRejected() + ", cause=" + storeResult.getRejectCause() + "]");
return(storeResult);
}
/**
* Custom view
*/
public BaseModel loadCustomView(String token, ContentFile file) {
BaseModel m = (BaseModel) ContentParserFactory.get().getAdaptor(file, BaseModel.class);
return(m);
}
/**
* ==================================================================
* Grid Service functions.
*/
public BaseListLoadResult<CIModelCollection> loadGrid(String token, BaseListLoadConfig config) {
log.info("loadGrid(token=" + token + ", config=" + config + ")");
String xmlQuery = config.get("query");
XML2GraphQuery parser = new XML2GraphQuery();
Map map = config.getParams();
parser.setAttributeMap(map);
GraphQuery query = null;
int firstResult = 0;
try {
query = parser.parse(xmlQuery);
if (config instanceof BasePagingLoadConfig) {
firstResult = ((BasePagingLoadConfig)config).getOffset();
int maxResult = ((BasePagingLoadConfig)config).getLimit();
if (maxResult > 0) {
query.fetchPrimarySelectors().setPageInfo(new PageInfo(firstResult, maxResult));
}
boolean limitToChild = ((BasePagingLoadConfig)config).get("limitToChild", false);
if (limitToChild) {
if (query.fetchPrimarySelectors() instanceof ItemOffspringSelector) {
ItemOffspringSelector sel = (ItemOffspringSelector)query.fetchPrimarySelectors();
sel.setLimitToChild(limitToChild);
}
}
boolean isNot = ((BasePagingLoadConfig)config).get("searchOperationNot", false);
Integer op = ((BasePagingLoadConfig)config).get("searchOperation");
AttributeColumnConfig aCfg = ((BasePagingLoadConfig)config).get("searchAttributeConfig");
String search = ((BasePagingLoadConfig)config).get("searchText");
if (search != null && search.length() > 0 || (op != null && op == AttributeValueConstraint.IS_NULL)) {
ItemSelector sel = query.fetchPrimarySelectors();
ItemAndGroupConstraint and = new ItemAndGroupConstraint();
AttributeValueConstraint vCon = SearchAttributeHandler.parse(search,op);
if (op != null) {
vCon.setOperation(op);
}
if (aCfg != null) {
if (aCfg.isComplex()) {
if (op != null && AttributeValueConstraint.IS_NULL == op) {
vCon.setAlias(aCfg.getAlias());
} else {
ItemOffspringSelector ofSel = new ItemOffspringSelector("target", aCfg.getType());
ItemRelationSelector relSel = new ItemRelationSelector("source2target", aCfg.getRefType(), "target", sel.getId());
sel = ofSel;
query.addSelector(ofSel);
query.addSelector(relSel);
}
} else {
if (aCfg.isInternal()) {
if (aCfg.getAlias().equals("alias")) {
vCon.setValueType(AttributeValueConstraint.INTERNAL_ALIAS);
} else if (aCfg.getAlias().equals("description")) {
vCon.setValueType(AttributeValueConstraint.INTERNAL_DESCRIPTION);
} else if (aCfg.getAlias().equals("lastModified")) {
vCon.setValueType(AttributeValueConstraint.INTERNAL_LASTMODFIED);
} else if (aCfg.getAlias().equals("created")) {
vCon.setValueType(AttributeValueConstraint.INTERNAL_CREATED);
}
} else {
vCon.setAlias(aCfg.getAlias());
}
}
}
and.add(vCon);
if (isNot) {
ItemNotConstraint not = new ItemNotConstraint();
not.applyConstraint(and);
and = new ItemAndGroupConstraint();
and.add(not);
}
if (sel.fetchConstraint() != null) {
and.add(sel.fetchConstraint());
}
sel.applyConstraint(and);
}
// Check for order...
SortInfo sort = ((BasePagingLoadConfig)config).getSortInfo();
if (sort != null) {
String field = sort.getSortField();
if (field != null) {
String split[] = field.split("\\.");
String selId = split[0];
String attr = split[1];
ItemSelector sel = query.findSelector(selId);
if (sel != null) {
OrderInfo info = new OrderInfo();
info.setDescenden(sort.getSortDir().equals(SortDir.DESC));
if (attr.startsWith(CIModel.INTERNAL_PREFIX)) {
info.setCiAttr(convertToDB(attr));
} else {
if (attr.startsWith(CIModel.VALUE_PREFIX)) {
attr = attr.substring(CIModel.VALUE_PREFIX.length());
}
info.setAttrAlias(attr);
// TODO check for type...
String attrType = config.get("attrType", "valueAsString");
info.setAttrType(attrType);
}
sel.setOrderInfo(info);
}
}
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalArgumentException("Problem parsing query: " + xmlQuery, e);
}
ContentData mdrData = config.get("mdr");
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
Graph graphResult = mdr.query(token, query);
Graph2GridTransform transform = new Graph2GridTransform();
List<CIModelCollection> gridResult = transform.transform(mdr, token, query, graphResult);
// Do the query..
BasePagingLoadResult<CIModelCollection> loadResult = new BasePagingLoadResult<CIModelCollection>(gridResult);
loadResult.setOffset(firstResult);
Template primaryNode = graphResult.fetchNode(query.fetchPrimarySelectors().getId());
loadResult.setTotalLength(primaryNode.getTotalCount());
log.info("loadGrid(token=" + token + ", config=" + config + ") OK [result=" + gridResult.size() + "]");
return(loadResult);
}
private String convertToDB(String attr) {
if (CIModel.CI_CREATED.equals(attr)) {
return("createTime");
}
if (CIModel.CI_LASTMODIFIED.equals(attr)) {
return("lastModified");
}
if (CIModel.CI_DESCRIPTION.equals(attr)) {
return("description");
}
if (CIModel.CI_ALIAS.equals(attr)) {
return("alias");
}
if (CIModel.CI_DERIVEDFROM.equals(attr)) {
return("derivedFromId");
}
if (CIModel.CI_DISPLAYNAME.equals(attr)) {
return("displayName");
}
// Default id lastModified.
return("lastModified");
}
public GridModelConfig loadGridConfig(String token, ContentData mdr, ContentData data) throws CMDBRPCException {
log.info("loadGridConfig(token=" + token + ", config=" + data + ")");
try {
GridModelConfig config = new GridModelConfig();
if (data.get("template") != null) {
config = getDefaultGridConfig(token, mdr, (String)data.get("template"), (String)data.get("instanceAlias"));
} else {
// Load form disk...
// Check if file exists.
ContentParserFactory.get().stat(data);
if (!data.isExists()) {
throw new CMDBRPCException("Load Grid Config", "Config file '" + data.getPath() + "' is not found", null);
}
config = (GridModelConfig) ContentParserFactory.get().getAdaptor(data, GridModelConfig.class);
}
config.setMDR(mdr);
log.info("loadGridConfig(token=" + token + ", config=" + data + ") OK");
return(config);
} catch (Throwable t) {
log.error("LoadGridConfig failed", t);
throw new CMDBRPCException("Load Grid Config", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
}
/**
* Grid Service Functions End.
* ===================================================================
*/
/**
* Tree Service Functions.
* ====================================================================
* @throws CMDBRPCException
*/
public List<CIModel> loadRelations(String token, ContentData mdrData,
RelationTypeModel relation) throws CMDBRPCException {
log.info("loadRelations(token=" + token + ", relation=" + relation + ")");
try {
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
// Build query..
CIModel ci = relation.getInstance();
CIModel type = relation.getSourceType();
if (relation.isOutbound()) {
type = relation.getTargetType();
}
CIModel refType = relation.getRefType();
ItemAliasSelector subject = new ItemAliasSelector("subject", ci.getDerivedFrom());
subject.setAlias(ci.getAlias());
subject.setPrimary(true);
ItemOffspringSelector targets = new ItemOffspringSelector("targets", type.getAlias());
targets.setMatchTemplate(false);
targets.setLimitToChild(false);
String source = subject.getId();
String target = targets.getId();
if (!relation.isOutbound()) {
source = targets.getId();
target = subject.getId();
}
ItemRelationSelector rel = new ItemRelationSelector("relation", refType.getAlias(), target, source);
GraphQuery query = new GraphQuery();
query.addSelector(subject);
query.addSelector(targets);
query.addSelector(rel);
log.debug("Relation " + query.findSelector(source).getTemplateAlias() + "-->" + query.findSelector(target).getTemplateAlias());
Graph graphResult = mdr.query(token, query);
graphResult.buildMap();
Template t = graphResult.fetchNode(targets.getId());
List<CIModel> result = new ArrayList<CIModel>();
if (t != null && t.getOffsprings() != null) {
Transform transform = new Transform();
transform.setCache(graphResult);
// Fetch alias ci.
Template subjectT = graphResult.fetchNode(subject.getId());
if (subjectT != null && subjectT.getTemplate() != null) {
CiBean ciBean = graphResult.findOffspringAlias(ci.getAlias());
if (ciBean != null) {
ci = transform.convert(mdr, token, subjectT.getTemplate(), ciBean);
}
}
for (CiBean bean : t.getOffsprings()) {
CIModel refBean = transform.convert(mdr, token, t.getTemplate(), bean);
// Update the CI with the reference id from where it was loaded.
refBean.set(CIModel.SELECTOR_ID, relation.getId());
boolean found = false;
if (relation.getAttributeAlias() == null) {
found = true;
} else {
if (relation.isOutbound()) {
ValueModel v = ci.getValue(relation.getAttributeAlias());
if (v instanceof ValueListModel) {
for (ValueModel vm : ((ValueListModel)v).getValues()) {
if (refBean.getAlias().equals(vm.getValue())) {
found = true;
break;
}
}
}
if (v instanceof ValueModel) {
if (refBean.getAlias().equals(v.getValue())) {
found = true;
}
}
} else {
ValueModel v = refBean.getValue(relation.getAttributeAlias());
if (v instanceof ValueListModel) {
for (ValueModel vm : ((ValueListModel)v).getValues()) {
if (ci.getAlias().equals(vm.getValue())) {
found = true;
break;
}
}
}
if (v instanceof ValueModel) {
if (ci.getAlias().equals(v.getValue())) {
found = true;
}
}
}
}
if (found) {
result.add(refBean);
}
}
}
log.info("loadRelations(token=" + token + ", relation=" + relation + ") OK [result=" + result.size() + "]");
return(result);
} catch (Throwable t) {
log.error("Load Realtions failed", t);
throw new CMDBRPCException("Load Relations", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
}
public RelationCollectionModel loadRelationTypes(String token, ContentData mdrData, CIModel ci, GroupDescription desc) throws CMDBRPCException {
log.info("loadRelationTypes(token=" + token + ", CI=" + ci + ")");
try {
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
if (desc != null) {
/**
* The Group Description contains info about which relations to follow.
*/
GroupHandler handler = new GroupHandler(mdr, token);
RelationCollectionModel model = handler.getRelationCollection(ci, desc);
return(model);
}
// Fetch All Templates Inbound relations.
String rootCI = mdrData.get("rootCi", "Ci");
GraphQuery query = new GraphQuery();
ItemOffspringSelector sel = new ItemOffspringSelector("templates", rootCI);
sel.setLimitToChild(false);
sel.setMatchTemplate(true);
sel.setPrimary(true);
ItemOffspringSelector ref = new ItemOffspringSelector("refs", "Reference");
ref.setLimitToChild(false);
ref.setMatchTemplate(true);
ref.setPrimary(false);
query.addSelector(sel);
query.addSelector(ref);
Graph result = mdr.query(token, query);
result.buildMap();
Transform transform = new Transform();
transform.setCache(result);
// Fetch outbound relations.
CiBean template;
if (ci.isTemplate()) {
template = result.findOffspringAlias(ci.getAlias());
if (template == null) {
template = mdr.getCI(token, ci.getAlias());
}
} else {
template = result.findOffspringAlias(ci.getDerivedFrom());
if (template == null) {
template = mdr.getCI(token, ci.getDerivedFrom());
}
}
RelationCollectionModel model = new RelationCollectionModel();
for (AttributeBean a : template.getAttributes()) {
if (a.isComplexType()) {
RelationTypeModel type = new RelationTypeModel();
type.setOutbound(true);
type.setInstance(ci);
type.setAttributeAlias(a.getAlias());
CiBean bean = result.findOffspringAlias(a.getType());
if (bean == null) {
bean = mdr.getCI(token, a.getType());
}
CiBean refBean = result.findOffspringAlias(a.getRefType());
if (refBean == null) {
refBean = mdr.getCI(token, a.getRefType());
}
type.setSourceType(transform.convert(mdr, token, template, template));
type.setTargetType(transform.convert(mdr, token, bean, bean));
type.setRefType(transform.convert(mdr, token, refBean, refBean));
type.set(CIModel.CI_ICON_PATH, IconMapper.getIcon(null, "RelationOutboundIcon"));
String roleSource = refBean.toStringValue("roleSource");
if (roleSource.length() == 0) {
roleSource = "[" + refBean.getAlias() + "]";
}
type.set(CIModel.CI_DISPLAYNAME, roleSource);
model.addRelationType(type);
}
}
String templatePath = buildTemplatePath(result, template, "Ci");
Template t = result.fetchNode(sel.getId());
if (t == null || t.getOffsprings() == null) {
return(model);
}
for (CiBean bean : t.getOffsprings()) {
for (AttributeBean abean : bean.getAttributes()) {
if (abean.isDerived()) {
continue;
}
if (!abean.isComplexType()) {
continue;
}
if (templatePath.contains("/" + abean.getType())) {
RelationTypeModel type = new RelationTypeModel();
type.setInstance(ci);
type.setOutbound(false);
type.setAttributeAlias(abean.getAlias());
CiBean refBean = result.findOffspringAlias(abean.getRefType());
if (refBean == null) {
refBean = mdr.getCI(token, abean.getRefType());
}
type.setRefType(transform.convert(mdr, token, refBean, refBean));
type.setSourceType(transform.convert(mdr, token, bean, bean));
type.setTargetType(transform.convert(mdr, token, template, template));
type.set(CIModel.CI_ICON_PATH, IconMapper.getIcon(null, "RelationInboundIcon"));
String roleTarget = refBean.toStringValue("roleTarget");
if (roleTarget.length() == 0) {
roleTarget = "[" + refBean.getAlias() + "]";
}
type.set(CIModel.CI_DISPLAYNAME, roleTarget);
model.addRelationType(type);
}
}
}
log.info("loadRelationTypes(token=" + token + ", CI=" + ci + ") OK [result=" + model.getRelationTypes().size() + "]");
return(model);
} catch (Throwable t) {
log.error("LoadGridConfig failed", t);
throw new CMDBRPCException("Load Relation Types", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
}
private String buildTemplatePath(Graph result, CiBean template, String root) {
if (template == null) {
return("/" + root);
}
if (template.getAlias().equals(root)) {
return("/" + template.getAlias());
}
CiBean derivedFrom = result.findOffspringAlias(template.getDerivedFrom());
return(buildTemplatePath(result,derivedFrom, root) + "/" + template.getAlias());
}
private GridModelConfig getDefaultGridConfig(String token, ContentData mdrData, String template, String instance) {
GridModelConfig config = new GridModelConfig();
List<CIModel> items = new ArrayList<CIModel>();
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
CiBean bean = mdr.getCI(token, template);
if (bean == null) {
return(config);
}
Transform tr = new Transform();
if (instance != null) {
CiBean iBean = mdr.getCI(token, instance);
CIModel iModel = tr.convert(mdr, token, bean, iBean);
config.set("instance", iModel);
}
List<AttributeColumnConfig> cols = new ArrayList<AttributeColumnConfig>();
AttributeColumnConfig idCol = new AttributeColumnConfig();
idCol.setName("ID");
idCol.setId("offspring." + CIModel.CI_ID);
idCol.setAlias("longId");
idCol.setHidden(true);
idCol.setEditable(false);
cols.add(idCol);
AttributeColumnConfig aliasCol = new AttributeColumnConfig();
aliasCol.setName("Alias");
aliasCol.setAlias("alias");
aliasCol.setId("offspring." + CIModel.CI_ALIAS);
aliasCol.setHidden(true);
aliasCol.setEditable(true);
cols.add(aliasCol);
AttributeColumnConfig derivedCol = new AttributeColumnConfig();
derivedCol.setName("Derived From");
derivedCol.setId("offspring." + CIModel.CI_DERIVEDFROM);
derivedCol.setHidden(true);
derivedCol.setEditable(false);
derivedCol.setType("xs:string");
derivedCol.setComplex(false);
derivedCol.setSearchable(false);
cols.add(derivedCol);
// Add displayName.
AttributeColumnConfig aDisplayName = new AttributeColumnConfig();
aDisplayName.setName("Display Name");
aDisplayName.setId("offspring." + CIModel.CI_DISPLAYNAME);
aDisplayName.setIconPath(IconMapper.getIcon(bean.toStringValue("icon"), template));
aDisplayName.setEditable(false);
aDisplayName.setSearchable(false);
cols.add(aDisplayName);
config.setAutoExpandColumnId(aDisplayName.getId());
for (AttributeBean aBean : bean.getAttributes()) {
AttributeColumnConfig col = new AttributeColumnConfig();
Transform.update("offspring", col, aBean);
if (aBean.isComplexType()) {
col.setIconPath(IconMapper.getIcon(null, aBean.getType()));
}
cols.add(col);
}
// Add Hidden lastModifed, created.
AttributeColumnConfig aLastModifed = new AttributeColumnConfig();
aLastModifed.setName("Last Modified");
aLastModifed.setId("offspring." + CIModel.CI_LASTMODIFIED);
aLastModifed.setEditable(false);
aLastModifed.setAlias("lastModifed");
cols.add(aLastModifed);
AttributeColumnConfig aCreated = new AttributeColumnConfig();
aCreated.setName("Created");
aCreated.setId("offspring." + CIModel.CI_CREATED);
aCreated.setHidden(true);
aCreated.setEditable(false);
aCreated.setAlias("created");
cols.add(aCreated);
AttributeColumnConfig aDesc = new AttributeColumnConfig();
aDesc.setName("Description");
aDesc.setId("offspring." + CIModel.CI_DESCRIPTION);
aDesc.setHidden(false);
aDesc.setEditable(true);
aDesc.setAlias("description");
cols.add(aDesc);
GraphQuery query = new GraphQuery();
ItemOffspringSelector sel = new ItemOffspringSelector("offspring", template);
sel.setPrimary(true);
sel.setMatchTemplate(false);
query.addSelector(sel);
ItemOffspringSelector sel2 = new ItemOffspringSelector("cache_serach", "Root");
ItemRelationSelector rel = new ItemRelationSelector("off2ref", "Reference", sel2.getId(), sel.getId());
query.addSelector(sel2);
query.addSelector(rel);
//rel.setMandatory(true);
sel.addExcludeRelation(rel.getId());
config.setQuery(GraphQuery2XML.toXML(query, 0));
config.setColumnConfig(cols);
config.setNewCIModel("offspring", tr.convert(mdr, token, bean, bean));
config.setSupportAddRow(true);
return(config);
}
protected void updateSaveDeleteResponse(SaveResponse resp,
List<CiBean> beans) {
int instances = 0;
int templates = 0;
for (CiBean bean : beans) {
if (bean.isTemplate()) {
templates++;
} else {
instances++;
}
}
resp.setInstanceCIs(instances);
resp.setTemplateCIs(templates);
}
protected List<CiBean> getSaveDeleteItems(ICIMDR mdr, String token, SaveDeleteRequest request) {
// Query all data.
GraphQuery query = new GraphQuery();
for (SaveItem item : request.getTemplates()) {
ItemOffspringSelector sel = new ItemOffspringSelector(item.getAlias(), item.getAlias());
if (item.saveInstances() && item.saveTemplates()) {
// Don't set anytning.
} else {
sel.setMatchTemplate(item.saveTemplates());
}
sel.setLimitToChild(!item.isAllChildren());
query.addSelector(sel);
sel.setPrimary(true);
}
for (SaveItem item : request.getReferences()) {
ItemOffspringSelector sel = new ItemOffspringSelector(item.getAlias(), item.getAlias());
sel.setMatchTemplate(true);
sel.setLimitToChild(!item.isAllChildren());
query.addSelector(sel);
sel.setPrimary(true);
}
Graph graphResult = mdr.query(token, query);
Set<CiBean> saveBeans = new HashSet<CiBean>();
for (SaveItem saveItem : request.getTemplates()) {
Template t = graphResult.fetchNode(saveItem.getAlias());
if (saveItem.isAllChildren()) {
if (t.getOffsprings() != null) {
saveBeans.addAll(t.getOffsprings());
}
}
if (saveItem.saveTemplates()) {
saveBeans.add(t.getTemplate());
}
}
for (SaveItem saveItem : request.getReferences()) {
Template t = graphResult.fetchNode(saveItem.getAlias());
if (saveItem.isAllChildren()) {
if (t.getOffsprings() != null) {
saveBeans.addAll(t.getOffsprings());
}
}
if (saveItem.saveTemplates()) {
saveBeans.add(t.getTemplate());
}
}
return(new ArrayList<CiBean>(saveBeans));
}
public String checkForNewUpdate(String token, boolean force) throws CMDBRPCException {
IOneCMDBWebService service = null;
try {
service = CMDBWebServiceFactory.get().getOneCMDBWebService();
} catch (Exception e1) {
throw new CMDBRPCException("Internal Error", "Can't contact OneCMDB Core WebService", null);
}
if (service.isUpdateAvailable(token, force)) {
return(service.getUpdateInfo(token, false));
}
return(null);
}
private String getCMDB_ID() {
String id = "unkown";
try {
InetAddress localhost = InetAddress.getLocalHost();
id = localhost.getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return("" + id.hashCode());
}
/**
* MDR Service Functions.
* ====================================================================
* @throws CMDBRPCException
*/
public BaseModel createMDR(String token, BaseModel data) throws CMDBRPCException {
IOneCMDBWebService service = null;
try {
service = CMDBWebServiceFactory.get().getOneCMDBWebService();
} catch (Exception e1) {
throw new CMDBRPCException("Internal Error", "Can't contact OneCMDB Core WebService", null);
}
String name = data.get("name");
String cfgName = data.get("cfgName");
// Create data model
String configAlias = "MDR-CONFIG-" + name;
CiBean cfg = new CiBean("MDR_ConfigEntry", configAlias, true);
cfg.addAttributeValue(new ValueBean("program", "bin/transform-import-cmdb", false));
// Create mdr instance..
CiBean mdr = new CiBean("MDR_Repository", "MDR-" + name, false);
mdr.addAttributeValue(new ValueBean("name", name, false));
mdr.addAttributeValue(new ValueBean("configAlias", configAlias, false));
// Create MDR config instance.
CiBean mdrCfg = new CiBean(configAlias, "MDR-CONFIG-" + name + "-" + cfgName, false);
mdrCfg.addAttributeValue(new ValueBean("name", cfgName, false));
mdrCfg.addAttributeValue(new ValueBean("mdrRepository", mdr.getAlias(), true));
// Commit this.
IRfcResult result = service.update(token, new CiBean[] {mdr, cfg, mdrCfg}, new CiBean[0]);
if (result.isRejected()) {
throw new CMDBRPCException("Can't create MDR " + name, result.getRejectCause(), "");
}
// Reload Data.
ICIMDR ciMdr = new OneCMDBWebServiceMDR(service);
CiBean mdrBean = ciMdr.getCI(token, mdr.getAlias());
CiBean mdrCfgBean = ciMdr.getCI(token, mdrCfg.getAlias());
// Get Templates.
CiBean mdrBeanT = ciMdr.getCI(token, mdrBean.getDerivedFrom());
CiBean mdrCfgBeanT = ciMdr.getCI(token, mdrCfgBean.getDerivedFrom());
// Copy MDR template to MDR/name
// Copy the directory structure.
IContentService content = (IContentService) ServiceLocator.getService(IContentService.class);
if (content == null) {
content = new ContentServiceImpl();
}
ContentFolder mdrFolder = new ContentFolder("MDR/" + name);
ContentFolder sourceMdrFolder = new ContentFolder("MDR_Template/Default/");
content.stat(mdrFolder);
if (!mdrFolder.isExists()) {
content.copy(token, sourceMdrFolder,mdrFolder, false);
}
BaseModel ret = new BaseModel();
Transform t = new Transform();
ret.set("mdr", t.convert(ciMdr, token, mdrBeanT, mdrBean));
ret.set("mdrCfg", t.convert(ciMdr, token, mdrCfgBeanT, mdrCfgBean));
return(ret);
}
/**
* Store Tranform config
*/
public boolean storeTransformConfig(String token, ContentData ciMDRData, CIModel mdr, CIModel mdrCfg, TransformConfig cfg) throws CMDBRPCException {
try {
return(new MDRSetupService().storeTransformConfig(token, ciMDRData, mdr, mdrCfg, cfg));
} catch (Throwable e) {
e.printStackTrace();
throw new CMDBRPCException("Error loading source header", e.getMessage(), CMDBRPCHandler.getStackTrace(e));
}
}
public List<BaseModel> calculateMDRInstances(String token, TransformConfig cfg) throws CMDBRPCException {
try {
return(new MDRSetupService().calcInstances(token, cfg));
} catch (Throwable t) {
t.printStackTrace();
if (t instanceof CMDBRPCException) {
throw (CMDBRPCException)t;
}
throw new CMDBRPCException("Error", "Can't load transform", CMDBRPCHandler.getStackTrace(t));
}
}
/**
* Load
* @param token
* @param mdr
* @param mdrCfg
* @return
*/
public TransformConfig loadTransformConfig(String token, ContentData ciMDRData, CIModel mdr, CIModel mdrCfg) throws CMDBRPCException {
try {
return(new MDRSetupService().loadTransformConfig(token, ciMDRData, mdr, mdrCfg));
} catch (Throwable t) {
t.printStackTrace();
throw new CMDBRPCException("Error loading source header", t.getMessage(), CMDBRPCHandler.getStackTrace(t));
}
/*
String mdrName = mdr.getValue("name").getValue();
String mdrConfigName = mdrCfg.getValue("name").getValue();
TransformConfig config = new TransformConfig();
config.setMDRName(mdrName);
config.setMDRConfigName(mdrConfigName);
ContentFolder sourceMdrFolder = new ContentFolder("MDR_Template/source-templates");
IContentService svc = (IContentService) ServiceLocator.getService(IContentService.class);
if (svc == null) {
svc = new ContentServiceImpl();
}
// Get datasources.
List<? extends ContentData> sourceTemplates = svc.list(token, sourceMdrFolder);
for (ContentData data : sourceTemplates) {
updateDataSource(svc, token, data, config);
}
ContentFile defTransform = new ContentFile("MDR_Template/transform-template.xml");
updateDataTransform(svc, token, defTransform, config);
// Try to find datasource.
ContentFile dataSource = new ContentFile("MDR/" + mdrName + "/" + "conf/" + mdrConfigName +"/source.xml");
updateDataSource(svc, token, dataSource, config);
ContentFile dataTransform = new ContentFile("MDR/" + mdrName + "/" + "conf/" + mdrConfigName +"/transform.xml");
updateDataTransform(svc, token, dataTransform, config);
*/
/*
// Load all templates
ICIMDR ciMDR = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(ciMDRData, ICIMDR.class);
GraphQuery q = new GraphQuery();
ItemOffspringSelector templates = new ItemOffspringSelector("templates", "Ci");
templates.setMatchTemplate(true);
templates.setLimitToChild(false);
templates.setPrimary(true);
ItemOffspringSelector references = new ItemOffspringSelector("refs", "CIReference");
references.setMatchTemplate(true);
references.setLimitToChild(false);
q.addSelector(templates);
q.addSelector(references);
Graph result = ciMDR.query(token, q);
result.buildMap();
Transform tr = new Transform();
tr.setCache(result);
List<CIModel> templateCIs = new ArrayList<CIModel>();
for (CiBean bean : result.fetchNode("templates").getOffsprings()) {
CIModel m = tr.convert(ciMDR, token, bean, bean);
templateCIs.add(m);
}
config.setTemplates(templateCIs);
List<CIModel> refsCIs = new ArrayList<CIModel>();
for (CiBean bean : result.fetchNode("refs").getOffsprings()) {
CIModel m = tr.convert(ciMDR, token, bean, bean);
refsCIs.add(m);
}
config.setReferences(refsCIs);
*return(config);
**/
}
public GridModelConfig loadDataSourceColumns(String token, TransformConfig config) throws CMDBRPCException {
try {
return(new MDRSetupService().loadDataSourceColumns(token, config));
} catch (Throwable e) {
e.printStackTrace();
throw new CMDBRPCException("Error loading source header", e.getMessage(), CMDBRPCHandler.getStackTrace(e));
}
}
public BasePagingLoadResult<BaseModel> loadDataSourceData(String token, BasePagingLoadConfig config) throws CMDBRPCException {
try {
return(new MDRSetupService().loadDataSourceData(token, config));
} catch (Throwable e) {
e.printStackTrace();
throw new CMDBRPCException("Error loading datasource data", e.getMessage(), CMDBRPCHandler.getStackTrace(e));
}
}
public TransformModel autoResolveTransformRelations(String token, TransformModel m) throws CMDBRPCException {
try {
ContentFile mdrData = new ContentFile();
String mdrConf = ConfigurationFactory.getConfig().get(Config.OneCMDBWebService);
mdrData.setPath(mdrConf);
ICIMDR mdr = (ICIMDR) ContentParserFactory.get().getCachedAdaptor(mdrData, ICIMDR.class);
return(new AutoResolveRelation(mdr, token).autoResolve(m));
} catch (Throwable e) {
e.printStackTrace();
throw new CMDBRPCException("Error loading datasource data", e.getMessage(), CMDBRPCHandler.getStackTrace(e));
}
}
public void createMDRConfig(String token, BaseModel data)
throws CMDBRPCException {
// TODO Auto-generated method stub
}
public void deleteMDR(String token, BaseModel data) throws CMDBRPCException {
// TODO Auto-generated method stub
}
public void deleteMDRConfig(String token, BaseModel data)
throws CMDBRPCException {
// TODO Auto-generated method stub
}
}