/* * Copyright 2015 NAVER Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.bootstrap.resolver; import com.navercorp.pinpoint.bootstrap.resolver.condition.ClassResourceCondition; import com.navercorp.pinpoint.bootstrap.resolver.condition.MainClassCondition; import com.navercorp.pinpoint.bootstrap.resolver.condition.PropertyCondition; import com.navercorp.pinpoint.common.util.CollectionUtils; import com.navercorp.pinpoint.common.util.StringUtils; import java.util.List; /** * * @author HyunGil Jeong */ public class ConditionProvider { public static final ConditionProvider DEFAULT_CONDITION_PROVIDER = new ConditionProvider(); private final MainClassCondition mainClassCondition; private final PropertyCondition systemPropertyCondition; private final ClassResourceCondition classResourceCondition; private ConditionProvider() { this(new MainClassCondition(), new PropertyCondition(), new ClassResourceCondition()); } ConditionProvider(MainClassCondition mainClassCondition, PropertyCondition systemPropertyCondition, ClassResourceCondition classResourceCondition) { this.mainClassCondition = mainClassCondition; this.systemPropertyCondition = systemPropertyCondition; this.classResourceCondition = classResourceCondition; } /** * Returns the fully qualified class name of the application's main class. * * @return the fully qualified class name of the main class, or an empty string if the main class cannot be resolved * @see MainClassCondition#getValue() */ public String getMainClass() { return this.mainClassCondition.getValue(); } /** * Checks if candidate matches the fully qualified class name of the application's main class. * If the main class cannot be resolved, the method return <tt>false</tt>. * * @param candidate the value to check against the application's main class name * @return <tt>true</tt> if candidate matches the name of the main class; * <tt>false</tt> if otherwise, or if the main class cannot be resolved * @see MainClassCondition#check(String) */ public boolean checkMainClass(String candidate) { if (candidate == null) { return false; } else { String trimmedCandidate = candidate.trim(); return this.mainClassCondition.check(trimmedCandidate); } } /** * Checks if any of the candidates match the fully qualified class name of the application's main class. * If the main class cannot be resolved, the method returns <tt>false</tt>. * * @param candidates the values to check against the application's main class name * @return <tt>true</tt> if any of the candidates match the name of the main class; * <tt>false</tt> if otherwise, or if the main class cannot be resolved * @see MainClassCondition#check(String) */ public boolean checkMainClass(List<String> candidates) { if (CollectionUtils.isEmpty(candidates)) { return false; } for (String candidate : candidates) { if (this.checkMainClass(candidate)) { return true; } } return false; } /** * Returns the system property value for the specified key. * * @return the system property value, or an empty string if the key is null or empty */ public String getSystemPropertyValue(String systemPropertyKey) { if (StringUtils.isEmpty(systemPropertyKey)) { return ""; } return this.systemPropertyCondition.getValue().getProperty(systemPropertyKey); } /** * Checks if the specified value is in the system property. * * @param systemPropertyKey the values to check if they exist in the system property * @return <tt>true</tt> if the specified key is in the system property; * <tt>false</tt> if otherwise, or if <tt>null</tt> or empty key is provided */ public boolean checkSystemProperty(String systemPropertyKey) { return this.systemPropertyCondition.check(systemPropertyKey); } /** * Checks if the specified class can be found in the current System ClassLoader's search path. * * @param requiredClass the fully qualified class name of the class to check * @return <tt>true</tt> if the specified class can be found in the system class loader's search path, * <tt>false</tt> if otherwise * @see ClassResourceCondition#check(String) */ public boolean checkForClass(String requiredClass) { return this.classResourceCondition.check(requiredClass); } }