001/* 002 * (C) Copyright 2006-2008 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Stephane Lacoin (Nuxeo EP Software Engineer) 016 */ 017package org.nuxeo.runtime.management; 018 019import java.util.Map; 020import java.util.regex.Matcher; 021import java.util.regex.Pattern; 022 023import javax.management.JMException; 024import javax.management.ObjectName; 025 026import org.nuxeo.runtime.model.ComponentName; 027 028/** 029 * @author Stephane Lacoin (Nuxeo EP Software Engineer) 030 */ 031public class ObjectNameFactory { 032 033 public static final String NUXEO_DOMAIN_NAME = "org.nuxeo"; 034 035 private ObjectNameFactory() { 036 } 037 038 public static String formatQualifiedName(String domainName, String typeName, String instanceName) { 039 int lastDotIndex = instanceName.lastIndexOf('.'); 040 if (lastDotIndex > 0) { 041 String packageName = instanceName.substring(0, lastDotIndex); 042 instanceName = instanceName.substring(lastDotIndex + 1); 043 return formatQualifiedName(domainName, typeName, packageName, instanceName); 044 } 045 return String.format("%s:name=%s,type=%s", domainName, instanceName, typeName); 046 } 047 048 public static String formatQualifiedName(String domainName, String typeName, String packageName, String instanceName) { 049 return String.format("%s:package=%s,name=%s,type=%s", domainName, packageName, instanceName, typeName); 050 } 051 052 public static String formatQualifiedName(String typeName, String instanceName) { 053 return formatQualifiedName(NUXEO_DOMAIN_NAME, typeName, instanceName); 054 } 055 056 public static String formatQualifiedName(ComponentName componentName) { 057 return formatQualifiedName(componentName.getType(), componentName.getName()); 058 } 059 060 public static String formatQualifiedName(String instanceName) { 061 return formatQualifiedName("service", instanceName); 062 } 063 064 public static String formatMetricQualifiedName(ComponentName name, String metricName) { 065 return formatQualifiedName(name) + ",metric=" + metricName + ",management=metric"; 066 } 067 068 public static String formatMetricQualifiedName(String name, String type) { 069 if (NUXEO_DOMAIN_NAME.equals(name)) { 070 name = "root"; 071 } 072 if (name.startsWith(NUXEO_DOMAIN_NAME)) { 073 name = name.substring(NUXEO_DOMAIN_NAME.length() + 1); 074 } 075 return String.format("%s:name=%s,type=%s,management=metric", NUXEO_DOMAIN_NAME, name, type); 076 } 077 078 public static String formatAVAs(String... avas) { 079 StringBuffer buffer = new StringBuffer(); 080 for (String ava : avas) { 081 if (buffer.length() > 0) { 082 buffer.append(","); 083 } 084 buffer.append(ava); 085 } 086 return buffer.toString(); 087 } 088 089 public static String formatInventoryQualifiedName(ComponentName name) { 090 return formatQualifiedName(name) + ",management=inventory"; 091 } 092 093 public static String formatProbeQualifiedName(ComponentName name) { 094 return formatQualifiedName(name) + ",management=probe"; 095 } 096 097 public static String removeDotPart(String name) { 098 int lastDotPos = name.lastIndexOf('.'); 099 if (lastDotPos != -1) { 100 name = name.substring(lastDotPos + 1); 101 } 102 return name; 103 } 104 105 public static String formatShortName(ObjectName name) { 106 String shortName = removeDotPart(name.getKeyProperty("name")); 107 String typeName = name.getKeyProperty("type"); 108 if (!typeName.equals("service")) { 109 shortName += "-" + typeName; 110 } 111 Map<String, String> keys = name.getKeyPropertyList(); 112 for (Map.Entry<String, String> keyEntry : keys.entrySet()) { 113 String key = keyEntry.getKey(); 114 String value = keyEntry.getValue(); 115 if (key.equals("name")) { 116 continue; 117 } 118 if (key.equals("type") && value.equals("service")) { 119 continue; 120 } 121 shortName += "-" + keyEntry.getValue(); 122 } 123 return shortName; 124 } 125 126 public static String formatShortName(String name) { 127 ObjectName objectName = getObjectName(name); 128 return formatShortName(objectName); 129 } 130 131 public static String formatTypeQuery(String typeName) { 132 return formatTypeQuery(NUXEO_DOMAIN_NAME, typeName); 133 } 134 135 public static String formatTypeQuery(String domainName, String typeName) { 136 return String.format("%s:type=%s,*", domainName, typeName); 137 } 138 139 private static final Pattern namePattern = Pattern.compile(".*:.*"); 140 141 public static boolean hasDomain(String value) { 142 if (value == null) { 143 return false; 144 } 145 Matcher matcher = namePattern.matcher(value); 146 return matcher.matches(); 147 } 148 149 private static final Pattern avaPattern = Pattern.compile(".*=.*"); 150 151 public static boolean hasAttributeValueAssertion(String value) { 152 if (value == null) { 153 return false; 154 } 155 Matcher matcher = avaPattern.matcher(value); 156 return matcher.matches(); 157 } 158 159 public static boolean isQualified(String name) { 160 return hasDomain(name) && hasAttributeValueAssertion(name); 161 } 162 163 public static String getQualifiedName(String name) { 164 String qualifiedName = name; 165 if (!hasAttributeValueAssertion(qualifiedName)) { 166 qualifiedName = NUXEO_DOMAIN_NAME + ":name=" + name + ",type=service"; 167 } else if (!hasDomain(qualifiedName)) { 168 qualifiedName = NUXEO_DOMAIN_NAME + ":" + qualifiedName; 169 } 170 return qualifiedName; 171 } 172 173 public static ObjectName getObjectName(String name) { 174 String qualifiedName = getQualifiedName(name); 175 try { 176 return new ObjectName(qualifiedName); 177 } catch (JMException e) { 178 throw ManagementRuntimeException.wrap(name + " is not correct", e); 179 } 180 } 181 182 public static ObjectName getObjectName(String name, String avas) { 183 String qualifiedName = getQualifiedName(name) + "," + avas; 184 try { 185 return new ObjectName(qualifiedName); 186 } catch (JMException e) { 187 throw ManagementRuntimeException.wrap(name + " is not correct", e); 188 } 189 } 190 191 public static String formatMetricShortName(String name) { 192 return name + "-metric"; 193 } 194 195 public static String formatInventoryShortName(String name) { 196 return name + "-inventory"; 197 } 198 199 public static String formatProbeShortName(String name) { 200 return name + "-probe"; 201 } 202 203}