001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.jmeter.functions;
020:
021: import java.io.Serializable;
022: import java.util.Collection;
023: import java.util.LinkedList;
024: import java.util.List;
025:
026: import org.apache.jmeter.engine.util.CompoundVariable;
027: import org.apache.jmeter.samplers.SampleResult;
028: import org.apache.jmeter.samplers.Sampler;
029: import org.apache.jorphan.logging.LoggingManager;
030: import org.apache.log.Logger;
031:
032: /**
033: * Function to log a message
034: *
035: * Parameters: - string - log level (optional; defaults to INFO; or DEBUG if
036: * unrecognised) - throwable message (optional)
037: *
038: * Returns: - Empty String (so can be used where return value would be a
039: * nuisance)
040: *
041: */
042: public class LogFunction2 extends AbstractFunction implements
043: Serializable {
044: private static Logger log = LoggingManager.getLoggerForClass();
045:
046: private static final List desc = new LinkedList();
047:
048: private static final String KEY = "__logn"; //$NON-NLS-1$
049:
050: // Number of parameters expected - used to reject invalid calls
051: private static final int MIN_PARAMETER_COUNT = 1;
052:
053: private static final int MAX_PARAMETER_COUNT = 3;
054: static {
055: desc.add("String to be logged");
056: desc.add("Log level (default INFO)");
057: desc.add("Throwable text (optional)");
058: }
059:
060: private static final String DEFAULT_PRIORITY = "INFO"; //$NON-NLS-1$
061:
062: private Object[] values;
063:
064: public LogFunction2() {
065: }
066:
067: public Object clone() throws CloneNotSupportedException {
068: return super .clone();
069: }
070:
071: public synchronized String execute(SampleResult previousResult,
072: Sampler currentSampler) throws InvalidVariableException {
073: String stringToLog = ((CompoundVariable) values[0]).execute();
074:
075: String priorityString;
076: if (values.length > 1) { // We have a default
077: priorityString = ((CompoundVariable) values[1]).execute();
078: if (priorityString.length() == 0)
079: priorityString = DEFAULT_PRIORITY;
080: } else {
081: priorityString = DEFAULT_PRIORITY;
082: }
083:
084: Throwable t = null;
085: if (values.length > 2) { // Throwable wanted
086: t = new Throwable(((CompoundVariable) values[2]).execute());
087: }
088:
089: LogFunction.logDetails(log, stringToLog, priorityString, t);
090:
091: return "";
092:
093: }
094:
095: public synchronized void setParameters(Collection parameters)
096: throws InvalidVariableException {
097:
098: values = parameters.toArray();
099:
100: if ((values.length < MIN_PARAMETER_COUNT)
101: || (values.length > MAX_PARAMETER_COUNT)) {
102: throw new InvalidVariableException(
103: "Parameter Count not between "
104: + MIN_PARAMETER_COUNT + " & "
105: + MAX_PARAMETER_COUNT);
106: }
107:
108: }
109:
110: public String getReferenceKey() {
111: return KEY;
112: }
113:
114: public List getArgumentDesc() {
115: return desc;
116: }
117:
118: }
|