001/* 002 * (C) Copyright 2006-2008 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Stephane Lacoin (Nuxeo EP Software Engineer) 018 */ 019package org.nuxeo.runtime.management; 020 021import java.util.Map; 022import java.util.regex.Matcher; 023import java.util.regex.Pattern; 024 025import javax.management.JMException; 026import javax.management.ObjectName; 027 028import org.nuxeo.runtime.model.ComponentName; 029 030/** 031 * @author Stephane Lacoin (Nuxeo EP Software Engineer) 032 */ 033public class ObjectNameFactory { 034 035 public static final String NUXEO_DOMAIN_NAME = "org.nuxeo"; 036 037 private ObjectNameFactory() { 038 } 039 040 public static String formatQualifiedName(String domainName, String typeName, String instanceName) { 041 int lastDotIndex = instanceName.lastIndexOf('.'); 042 if (lastDotIndex > 0) { 043 String packageName = instanceName.substring(0, lastDotIndex); 044 instanceName = instanceName.substring(lastDotIndex + 1); 045 return formatQualifiedName(domainName, typeName, packageName, instanceName); 046 } 047 return String.format("%s:name=%s,type=%s", domainName, instanceName, typeName); 048 } 049 050 public static String formatQualifiedName(String domainName, String typeName, String packageName, String instanceName) { 051 return String.format("%s:package=%s,name=%s,type=%s", domainName, packageName, instanceName, typeName); 052 } 053 054 public static String formatQualifiedName(String typeName, String instanceName) { 055 return formatQualifiedName(NUXEO_DOMAIN_NAME, typeName, instanceName); 056 } 057 058 public static String formatQualifiedName(ComponentName componentName) { 059 return formatQualifiedName(componentName.getType(), componentName.getName()); 060 } 061 062 public static String formatQualifiedName(String instanceName) { 063 return formatQualifiedName("service", instanceName); 064 } 065 066 public static String formatMetricQualifiedName(ComponentName name, String metricName) { 067 return formatQualifiedName(name) + ",metric=" + metricName + ",management=metric"; 068 } 069 070 public static String formatMetricQualifiedName(String name, String type) { 071 if (NUXEO_DOMAIN_NAME.equals(name)) { 072 name = "root"; 073 } 074 if (name.startsWith(NUXEO_DOMAIN_NAME)) { 075 name = name.substring(NUXEO_DOMAIN_NAME.length() + 1); 076 } 077 return String.format("%s:name=%s,type=%s,management=metric", NUXEO_DOMAIN_NAME, name, type); 078 } 079 080 public static String formatAVAs(String... avas) { 081 StringBuffer buffer = new StringBuffer(); 082 for (String ava : avas) { 083 if (buffer.length() > 0) { 084 buffer.append(","); 085 } 086 buffer.append(ava); 087 } 088 return buffer.toString(); 089 } 090 091 public static String formatInventoryQualifiedName(ComponentName name) { 092 return formatQualifiedName(name) + ",management=inventory"; 093 } 094 095 public static String formatProbeQualifiedName(ComponentName name) { 096 return formatQualifiedName(name) + ",management=probe"; 097 } 098 099 public static String removeDotPart(String name) { 100 int lastDotPos = name.lastIndexOf('.'); 101 if (lastDotPos != -1) { 102 name = name.substring(lastDotPos + 1); 103 } 104 return name; 105 } 106 107 public static String formatShortName(ObjectName name) { 108 String shortName = removeDotPart(name.getKeyProperty("name")); 109 String typeName = name.getKeyProperty("type"); 110 if (!typeName.equals("service")) { 111 shortName += "-" + typeName; 112 } 113 Map<String, String> keys = name.getKeyPropertyList(); 114 for (Map.Entry<String, String> keyEntry : keys.entrySet()) { 115 String key = keyEntry.getKey(); 116 String value = keyEntry.getValue(); 117 if (key.equals("name")) { 118 continue; 119 } 120 if (key.equals("type") && value.equals("service")) { 121 continue; 122 } 123 shortName += "-" + keyEntry.getValue(); 124 } 125 return shortName; 126 } 127 128 public static String formatShortName(String name) { 129 ObjectName objectName = getObjectName(name); 130 return formatShortName(objectName); 131 } 132 133 public static String formatTypeQuery(String typeName) { 134 return formatTypeQuery(NUXEO_DOMAIN_NAME, typeName); 135 } 136 137 public static String formatTypeQuery(String domainName, String typeName) { 138 return String.format("%s:type=%s,*", domainName, typeName); 139 } 140 141 private static final Pattern namePattern = Pattern.compile(".*:.*"); 142 143 public static boolean hasDomain(String value) { 144 if (value == null) { 145 return false; 146 } 147 Matcher matcher = namePattern.matcher(value); 148 return matcher.matches(); 149 } 150 151 private static final Pattern avaPattern = Pattern.compile(".*=.*"); 152 153 public static boolean hasAttributeValueAssertion(String value) { 154 if (value == null) { 155 return false; 156 } 157 Matcher matcher = avaPattern.matcher(value); 158 return matcher.matches(); 159 } 160 161 public static boolean isQualified(String name) { 162 return hasDomain(name) && hasAttributeValueAssertion(name); 163 } 164 165 public static String getQualifiedName(String name) { 166 String qualifiedName = name; 167 if (!hasAttributeValueAssertion(qualifiedName)) { 168 qualifiedName = NUXEO_DOMAIN_NAME + ":name=" + name + ",type=service"; 169 } else if (!hasDomain(qualifiedName)) { 170 qualifiedName = NUXEO_DOMAIN_NAME + ":" + qualifiedName; 171 } 172 return qualifiedName; 173 } 174 175 public static ObjectName getObjectName(String name) { 176 String qualifiedName = getQualifiedName(name); 177 try { 178 return new ObjectName(qualifiedName); 179 } catch (JMException e) { 180 throw ManagementRuntimeException.wrap(name + " is not correct", e); 181 } 182 } 183 184 public static ObjectName getObjectName(String name, String avas) { 185 String qualifiedName = getQualifiedName(name) + "," + avas; 186 try { 187 return new ObjectName(qualifiedName); 188 } catch (JMException e) { 189 throw ManagementRuntimeException.wrap(name + " is not correct", e); 190 } 191 } 192 193 public static String formatMetricShortName(String name) { 194 return name + "-metric"; 195 } 196 197 public static String formatInventoryShortName(String name) { 198 return name + "-inventory"; 199 } 200 201 public static String formatProbeShortName(String name) { 202 return name + "-probe"; 203 } 204 205}