/* * 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.group; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; 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.constraint.RelationConstraint; import org.onecmdb.core.utils.graph.query.selector.ItemRelationSelector; import org.onecmdb.core.utils.graph.result.Graph; import org.onecmdb.core.utils.graph.result.Template; import org.onecmdb.ui.gwt.desktop.client.service.model.CIModel; import org.onecmdb.ui.gwt.desktop.client.service.model.CIModelList; import org.onecmdb.ui.gwt.desktop.client.service.model.grid.CIModelCollection; import org.onecmdb.ui.gwt.desktop.client.service.model.group.GroupCollection; import org.onecmdb.ui.gwt.desktop.client.service.model.group.ListModelItem; import org.onecmdb.ui.gwt.desktop.server.service.change.ICIMDR; import org.onecmdb.ui.gwt.desktop.server.service.model.Transform; import com.extjs.gxt.ui.client.data.BaseModel; import sun.rmi.log.ReliableLog; public class GroupTransform { private boolean deepTree = false; public List<GroupCollection> generateGroupData(ICIMDR mdr, String token, GraphQuery query, Graph result) { String id = query.fetchPrimarySelectors().getId(); Template t = result.fetchNode(id); Transform transform = new Transform(); transform.setCache(result); ListModelItem<GroupCollection> rows = populateRows(transform, mdr, token, query, result, t, ""); //System.out.println(dumpModel(0, rows)); return(rows.toList()); } public ListModelItem<GroupCollection> populateRows(Transform transform, ICIMDR mdr, String token, GraphQuery query, Graph result, Template t, String path) { ListModelItem<GroupCollection> rows = new ListModelItem<GroupCollection>(); // start with primary. for (CiBean bean : t.getOffsprings()) { GroupCollection row = new GroupCollection(); CIModel model = transform.convert(mdr, token, t.getTemplate(), bean); row.set(t.getId(), model); rows.add(row); // Populate references... for (ItemRelationSelector rel : query.fetchRelationSelectors()) { if (path.contains("/" + rel.getId())) { continue; } Template refs = null; if (rel.getSource().equals(t.getId())) { refs = result.fetchReference(bean, RelationConstraint.SOURCE, rel.getId()); } else if (rel.getTarget().equals(t.getId())) { refs = result.fetchReference(bean, RelationConstraint.TARGET, rel.getId()); } if (refs != null) { ListModelItem<GroupCollection> childRows = populateRows(transform, mdr, token, query, result, refs, path + "/" + rel.getId()); row.set(rel.getId(), childRows); } } } return(rows); } private String dumpModel(int i, BaseModel data) { StringBuffer buf = new StringBuffer(); buf.append(getTab(i) + data.getClass().getName()); buf.append("\n"); for (String name : data.getPropertyNames()) { Object value = data.get(name); if (value instanceof BaseModel) { buf.append(getTab(i+1) + name + "=" + dumpModel((i+1), (BaseModel)value)); } else { buf.append(getTab(i+1) + name + "=" + value); } buf.append("\n"); } return(buf.toString()); } private String getTab(int k) { StringBuffer b = new StringBuffer(); for (int i = 0; i < k; i++) { b.append(" "); } return(b.toString()); } }