/* * 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.client.utils; import java.util.List; import com.extjs.gxt.ui.client.data.BaseModel; public class GXTModel2XML { public static String toXML(String rootName, BaseModel model) { StringBuffer b = new StringBuffer(); b.append("<" + rootName +">"); b.append("\n"); b.append(toCompactXML(model, 1)); b.append("\n"); b.append("</" + rootName +">"); return(b.toString()); } public static String toCompactXML(BaseModel model, int level) { StringBuffer b = new StringBuffer(); // Add attribute values. for (String key : model.getPropertyNames()) { Object value = model.get(key); b.append(toXML(key, value, level)); } return(b.toString()); } public static String toAttributes(BaseModel model) { StringBuffer b = new StringBuffer(); // Add attribute values. for (String key : model.getPropertyNames()) { Object value = model.get(key); if (value instanceof List) { } else if (value instanceof BaseModel) { } else { b.append(" " + key + "=\"" + value + "\""); } } return(b.toString()); } public static String toXML(String key, Object value, int level) { StringBuffer b = new StringBuffer(); if (value instanceof List) { List values = (List)value; for (int i = 0; i < values.size(); i++) { Object v = values.get(i); b.append(toXML(key, v, level+1)); if (i < (values.size()-1)) { b.append("\n"); } } } else if (value instanceof BaseModel) { BaseModel mvalue = (BaseModel)value; b.append(getTab(level) + "<" + key + toAttributes(mvalue)); String inner = toCompactXML(mvalue, level+1); if (inner.length() == 0) { b.append("/>"); } else { b.append(">"); b.append("\n"); b.append(inner); b.append("\n"); b.append(getTab(level) + "</" + key + ">"); } } else { b.append(getTab(level) + "<" + key + ">" + value + "</" + key + ">"); b.append("\n"); } return(b.toString()); } public static String toXML(BaseModel model, int level) { StringBuffer b = new StringBuffer(); for (String key : model.getPropertyNames()) { Object value = model.get(key); if (value instanceof List) { List values = (List)value; for (int i = 0; i < values.size(); i++) { Object v = values.get(0); b.append(getTab(level) + "<" + key + ">"); if (v instanceof BaseModel) { b.append("\n"); b.append(getTab(level+1) + toXML((BaseModel)v, level+2)); b.append("\n"); } else { b.append(model.get(key)); } b.append(getTab(level) + "</" + key + ">"); b.append("\n"); } b.append("\n"); } else { b.append(getTab(level) + "<" + key + ">"); if (value instanceof BaseModel) { b.append("\n"); b.append(getTab(level+1) + toXML((BaseModel)value, level+2)); b.append("\n"); b.append(getTab(level+1) + "</" + key + ">"); } else { b.append(model.get(key)); b.append("</" + key + ">"); } b.append("\n"); } } return(b.toString()); } private static String getTab(int level) { StringBuffer b = new StringBuffer(); for (int i = 0; i < level; i++) { b.append(" "); } return(b.toString()); } }