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;
018:
019: import java.io.Serializable;
020: import java.util.Collection;
021: import org.apache.jetspeed.profiler.ProfileLocator;
022: import org.apache.jetspeed.profiler.Profiler;
023: import org.apache.jetspeed.request.RequestContext;
024:
025: /**
026: * A ProfilingRule defines a list of criteria used when evaluating a request
027: * to determine the location of a specific resource. Profiling rules are
028: * used by the Profiler Service to generically locate portal resources
029: * based on the decoupled criteria for known portlet request data.
030: * A rule consists of an ordered list of criteria which should be applied
031: * in the given order of the SortedMap provided by this rule.
032: * Following this order, fallback searches may be applied to find resources
033: * using a less-specific algorithm until the least specific resource criterion
034: * is considered. When all criteria are exhausted, the rule will fail.
035: *
036: * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
037: * @version $Id: ProfilingRule.java 516448 2007-03-09 16:25:47Z ate $
038: */
039: public interface ProfilingRule extends Serializable {
040:
041: /**
042: * Define the basic supported rule types in the default Jetspeed implementation.
043: * Other rule types can be added.
044: * Rule types define a grouping of rule parameters.
045: * For example, request parameters refer to parameters on the request
046: */
047:
048: /** Standard rule criteria used by Jetspeed traditionally such as media type, language, username, role */
049: public final static String STANDARD = "standard";
050: /** Request parameters as defined in the Portlet spec 1.0 PLT.11.1.1 */
051: public final static String REQUEST_PARAMETER = "request";
052: /** Request attributes as defined in the Portlet spec 1.0 PLT.11.1.3 */
053: public final static String REQUEST_ATTRIBUTE = "attribute";
054: /** Session Attribute */
055: public final static String SESSION_ATTRIBUTE = "session";
056: /** User attributes as defined in the Portlet spec 1.0 PLT.17 */
057: public final static String USER_ATTRIBUTE = "user";
058: /** Composite Capabilities and Preference Profile as defined http://www.w3.org/TR/NOTE-CCPP/ */
059: public final static String CCPP_PROPERTY = "ccpp";
060:
061: /**
062: * Standard properties used traditionally in Jetspeed
063: */
064: public final static String STANDARD_PAGE = "page";
065: public final static String STANDARD_GROUP_ROLE_USER = "group.role.user";
066: public final static String STANDARD_USER = "user";
067: public final static String STANDARD_GROUP = "group";
068: public final static String STANDARD_ROLE = "role";
069: public final static String STANDARD_MEDIATYPE = "mediatype";
070: public final static String STANDARD_COUNTRY = "country";
071: public final static String STANDARD_LANGUAGE = "language";
072: public final static String STANDARD_ROLE_FALLBACK = "roles";
073:
074: /**
075: * Given a criterion name, look up a value resolver
076: *
077: * @param name The name of the criterion
078: * @return
079: */
080: RuleCriterionResolver getResolver(String name);
081:
082: /**
083: * Applying the profiling rule generates a generic profile locator.
084: * With this locator we can then locate a profiling resource.
085: *
086: * @param context
087: * @param service
088: * @return
089: */
090: ProfileLocator apply(RequestContext context, Profiler service);
091:
092: /**
093: * Returns a sorted map (ordered) of rule criteria.
094: * Each criteria consists of a normalized property/attribute/parameter
095: * associated with a request type.
096: *
097: * @return a sorted map of rule criteria.
098: */
099: Collection getRuleCriteria();
100:
101: /**
102: * Gets the unique identifier for this rule
103: *
104: * @return The unique identifier
105: */
106: String getId();
107:
108: /**
109: * Sets the unique identifier for this rule
110: *
111: * @param id The unique identifier
112: */
113: void setId(String id);
114:
115: /**
116: * Gets the title used for with the rule for displaying descriptive text.
117: *
118: * @return The title of this rule.
119: */
120: String getTitle();
121:
122: /**
123: * Set the title used for with the rule for displaying descriptive text.
124: *
125: * @param title The title of this rule.
126: */
127: void setTitle(String title);
128:
129: /**
130: * Get the implementing classname of this rule from the database.
131: * The class must exist in the hiearchy and in fact refers to itself when instantiated.
132: *
133: * @return The classname of this instance.
134: */
135: String getClassname();
136:
137: /**
138: * Sets the implementing classname of this rule from the database.
139: * The class must exist in the hiearchy and in fact refers to itself when instantiated.
140: *
141: * @param classname The classname of this instance.
142: */
143: void setClassname(String classname);
144:
145: ProfileResolvers getResolvers();
146:
147: void setResolvers(ProfileResolvers resolvers);
148:
149: }
|