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: package org.apache.jetspeed.profiler.rules.impl;
018:
019: import java.util.Collection;
020: import java.util.Collections;
021: import java.util.HashMap;
022: import java.util.Map;
023: import org.apache.jetspeed.profiler.ProfileLocator;
024: import org.apache.jetspeed.profiler.Profiler;
025: import org.apache.jetspeed.profiler.rules.ProfileResolvers;
026: import org.apache.jetspeed.profiler.rules.ProfilingRule;
027: import org.apache.jetspeed.profiler.rules.RuleCriterionResolver;
028: import org.apache.jetspeed.request.RequestContext;
029: import org.apache.ojb.broker.util.collections.RemovalAwareCollection;
030:
031: /**
032: * ProfilingRuleImpl
033: *
034: * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
035: * @version $Id: AbstractProfilingRule.java 605772 2007-12-20 01:14:31Z taylor $
036: */
037: public abstract class AbstractProfilingRule implements ProfilingRule {
038: private static final long serialVersionUID = 1;
039: protected Collection criteria = new RemovalAwareCollection();
040: protected String id;
041: protected String title;
042: protected String ojbConcreteClass;
043:
044: /** Map of profile locators kept around for reuse TODO: evict entries after max size reached */
045: protected Map locators = Collections.synchronizedMap(new HashMap());
046:
047: /** Map of resolver rules for criteria. The map goes from criterion name to resolver class */
048: protected ProfileResolvers resolvers;
049:
050: public AbstractProfilingRule() {
051: }
052:
053: public AbstractProfilingRule(ProfileResolvers resolvers) {
054: this .resolvers = resolvers;
055: }
056:
057: protected ProfileLocator getLocatorFromCache(String key) {
058: return (ProfileLocator) locators.get(key);
059: }
060:
061: protected void addLocatorToCache(String key, ProfileLocator locator) {
062: locators.put(key, locator);
063: }
064:
065: /* (non-Javadoc)
066: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#getResolver(java.lang.String)
067: */
068: public RuleCriterionResolver getResolver(String name) {
069: return resolvers.get(name);
070: }
071:
072: public RuleCriterionResolver getDefaultResolver() {
073: return resolvers.get(RuleCriterionResolver.REQUEST);
074: }
075:
076: /* (non-Javadoc)
077: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#apply(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.profiler.Profiler)
078: */
079: public abstract ProfileLocator apply(RequestContext context,
080: Profiler service);
081:
082: /* (non-Javadoc)
083: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#getRuleCriterion()
084: */
085: public Collection getRuleCriteria() {
086: return criteria;
087: }
088:
089: /* (non-Javadoc)
090: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#getId()
091: */
092: public String getId() {
093: return this .id;
094: }
095:
096: /* (non-Javadoc)
097: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#setId(java.lang.String)
098: */
099: public void setId(String id) {
100: this .id = id;
101: }
102:
103: /* (non-Javadoc)
104: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#getTitle()
105: */
106: public String getTitle() {
107: return this .title;
108: }
109:
110: /* (non-Javadoc)
111: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#setTitle(java.lang.String)
112: */
113: public void setTitle(String title) {
114: this .title = title;
115: }
116:
117: /* (non-Javadoc)
118: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#getClassname()
119: */
120: public String getClassname() {
121: return this .ojbConcreteClass;
122: }
123:
124: /* (non-Javadoc)
125: * @see org.apache.jetspeed.profiler.rules.ProfilingRule#setClassname(java.lang.String)
126: */
127: public void setClassname(String classname) {
128: this .ojbConcreteClass = classname;
129: }
130:
131: public String toString() {
132: if (id != null) {
133: return id;
134: } else if (title != null) {
135: return title;
136: }
137: return this .getClass().toString();
138: }
139:
140: /**
141: * @return Returns the resolvers.
142: */
143: public ProfileResolvers getResolvers() {
144: return resolvers;
145: }
146:
147: /**
148: * @param resolvers The resolvers to set.
149: */
150: public void setResolvers(ProfileResolvers resolvers) {
151: this.resolvers = resolvers;
152: }
153:
154: }
|