/* * Jopr Management Platform * Copyright (C) 2005-2009 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser 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. */ package org.rhq.plugins.jbossas5.util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; import java.util.List; import java.util.Map; import org.jetbrains.annotations.Nullable; import org.jboss.managed.api.DeploymentTemplateInfo; import org.jboss.managed.api.ManagedComponent; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.annotation.ViewUse; import org.jboss.metatype.api.values.CollectionValue; import org.jboss.metatype.api.values.CompositeValue; import org.jboss.metatype.api.values.MetaValue; /** * Utility methods for converting various Profile Service objects into Strings for debugging purposes. * * @author Ian Springer */ public abstract class DebugUtils { public static String convertPropertiesToString(ManagedComponent managedComponent) { StringBuilder buf = new StringBuilder(); String componentTypeName = managedComponent.getType().getSubtype() + " " + managedComponent.getType().getType(); buf.append("Properties for [").append(componentTypeName).append("] ManagedComponent ["); buf.append(managedComponent.getName()).append("]:\n"); buf.append(convertPropertiesToString(managedComponent.getProperties())); return buf.toString(); } public static String convertPropertiesToString(DeploymentTemplateInfo template) { StringBuilder buf = new StringBuilder(); buf.append("Properties for DeploymentTemplateInfo [").append(template.getName()).append("]:\n"); buf.append(convertPropertiesToString(template.getProperties())); return buf.toString(); } public static String convertMetaValueToString(MetaValue metaValue) { StringBuilder buffer = new StringBuilder(); convertMetaValueToString(metaValue, buffer, true, 1); return buffer.toString(); } public static String convertPropertiesToString(Map<String, ManagedProperty> managedProps) { StringBuilder buf = new StringBuilder(); List<ManagedProperty> props = new ArrayList<ManagedProperty>(managedProps.values()); Collections.sort(props, new ManagedPropertyComparator()); // sort by name try { for (ManagedProperty managedProperty : props) { if (managedProperty.isMandatory()) buf.append("* "); else buf.append(" "); buf.append("name=").append(managedProperty.getName()); if (!managedProperty.getName().equals(managedProperty.getMappedName())) buf.append(", mappedName=").append(managedProperty.getMappedName()); EnumSet<ViewUse> viewUses = ManagedComponentUtils.getViewUses(managedProperty); buf.append(", viewUses=").append(viewUses); buf.append(", readOnly=").append(managedProperty.isReadOnly()); buf.append(", mandatory=").append(managedProperty.isMandatory()); buf.append(", removed=").append(managedProperty.isRemoved()); MetaValue value = managedProperty.getValue(); if (value == null) buf.append(", type=").append(managedProperty.getMetaType()); buf.append(", value=").append(convertMetaValueToString(value)); } } catch (Exception e) { buf.append(" ... Failed to convert properties to string: " + e.getMessage()); } return buf.toString(); } private static void convertMetaValueToString(MetaValue metaValue, StringBuilder buffer, boolean indentFirstLine, int indentLevel) { if (indentFirstLine) for (int i = 0; i < indentLevel; i++) buffer.append(" "); if (metaValue == null) { buffer.append("<<<null>>>\n"); // make it stand out a bit } else if (metaValue.getMetaType().isCollection()) { CollectionValue collectionValue = (CollectionValue)metaValue; buffer.append(collectionValue).append("\n"); /*for (int i = 0; i < indentLevel; i++) buffer.append(" "); buffer.append("Elements:\n"); indentLevel++; for (MetaValue elementMetaValue : collectionValue.getElements()) convertMetaValueToString(elementMetaValue, buffer, true, indentLevel);*/ } else if (metaValue.getMetaType().isComposite()) { CompositeValue compositeValue = (CompositeValue)metaValue; buffer.append(compositeValue).append("\n"); /*for (int i = 0; i < indentLevel; i++) buffer.append(" "); buffer.append("Items:\n"); indentLevel++; for (String key : compositeValue.getMetaType().keySet()) { for (int i = 0; i < indentLevel; i++) buffer.append(" "); buffer.append(key).append("="); convertMetaValueToString(compositeValue.get(key), buffer, false, indentLevel); }*/ } else { buffer.append(metaValue).append("\n"); } } private static class ManagedPropertyComparator implements Comparator<ManagedProperty> { /** * Use viewUse as primary sort field and name as secondary sort field. */ public int compare(ManagedProperty prop1, ManagedProperty prop2) { ViewUse prop1ViewUse = getPrimaryViewUse(prop1); ViewUse prop2ViewUse = getPrimaryViewUse(prop2); if (prop1ViewUse == null) return (prop2ViewUse == null) ? 0 : -1; if (prop2ViewUse == null) return 1; int result = prop1ViewUse.name().compareTo(prop2ViewUse.name()); if (result == 0) result = prop1.getName().compareTo(prop2.getName()); // break the tie return result; } @Nullable private static ViewUse getPrimaryViewUse(ManagedProperty managedProperty) { ViewUse viewUse; if (managedProperty.hasViewUse(ViewUse.CONFIGURATION)) viewUse = ViewUse.CONFIGURATION; else if (managedProperty.hasViewUse(ViewUse.RUNTIME)) viewUse = ViewUse.RUNTIME; else if (managedProperty.hasViewUse(ViewUse.STATISTIC)) viewUse = ViewUse.STATISTIC; else viewUse = null; return viewUse; } } private DebugUtils() { } }