001: // Copyright 2006, 2007 The Apache Software Foundation
002: //
003: // Licensed under the Apache License, Version 2.0 (the "License");
004: // you may not use this file except in compliance with the License.
005: // You may obtain a copy of the License at
006: //
007: // http://www.apache.org/licenses/LICENSE-2.0
008: //
009: // Unless required by applicable law or agreed to in writing, software
010: // distributed under the License is distributed on an "AS IS" BASIS,
011: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: // See the License for the specific language governing permissions and
013: // limitations under the License.
014:
015: package org.apache.tapestry.ioc.internal;
016:
017: import java.util.Collection;
018: import java.util.List;
019: import java.util.Set;
020:
021: import org.apache.tapestry.ioc.ModuleBuilderSource;
022: import org.apache.tapestry.ioc.ServiceDecorator;
023: import org.apache.tapestry.ioc.def.ContributionDef;
024: import org.apache.tapestry.ioc.def.DecoratorDef;
025: import org.apache.tapestry.ioc.def.ServiceDef;
026:
027: /**
028: * A module within the Tapestry IoC registry. Each Module is constructed around a corresponding
029: * module builder instance; the methods and annotations of that instance define the services
030: * provided by the module.
031: */
032: public interface Module extends ModuleBuilderSource {
033: /**
034: * Locates a service given a service id and the corresponding service interface type.
035: *
036: * @param <T>
037: * @param serviceId
038: * identifies the service to access
039: * @param serviceInterface
040: * the interface the service implements
041: * @return the service's proxy
042: * @throws RuntimeException
043: * if there is an error instantiating the service proxy
044: */
045: <T> T getService(String serviceId, Class<T> serviceInterface);
046:
047: /**
048: * Locates the ids of all services that implement the provided service interface, or whose
049: * service interface is assignable to the provided service interface (is a super-class or
050: * super-interface).
051: *
052: * @param serviceInterface
053: * the interface to search for
054: * @return a collection of service ids
055: */
056: Collection<String> findServiceIdsForInterface(Class serviceInterface);
057:
058: /**
059: * Locates all the decorators that should apply the identified service. This includes visibility
060: * rules (private services may only be decorated by decorators in the same module) and other
061: * filtering rules. The resulting list is ordered and from the list of
062: * {@link org.apache.tapestry.ioc.def.DecoratorDef}s, a list of {@link ServiceDecorator}s is
063: * returned.
064: *
065: * @param serviceId
066: * identifies the service to be decorated
067: * @return the ordered list of service decorators
068: */
069: List<ServiceDecorator> findDecoratorsForService(String serviceId);
070:
071: /**
072: * Iterates over any decorator definitions defined by the module and returns those that apply to
073: * the provided service definition.
074: *
075: * @param serviceDef
076: * for which decorators are being assembled
077: * @return set of decorators, possibly empty (but not null)
078: */
079: Set<DecoratorDef> findMatchingDecoratorDefs(ServiceDef serviceDef);
080:
081: /** Finds any contributions that are targetted at the indicated service. */
082: Set<ContributionDef> getContributorDefsForService(String serviceId);
083:
084: /**
085: * Locates services with the {@link org.apache.tapestry.ioc.annotations.EagerLoad} annotation
086: * and forces them to instantiate fully. This is part of the Registry startup.
087: */
088: void eagerLoadServices();
089:
090: /**
091: * Returns the service definition for the given service id.
092: *
093: * @param serviceId
094: * unique id for the service (caseless)
095: * @return the service definition or null
096: */
097: ServiceDef getServiceDef(String serviceId);
098:
099: /**
100: * Returns the name used to obtain a logger for the module. Services within the module suffix
101: * this with a period and the service id.
102: *
103: * @return module log name
104: */
105: String getLogName();
106: }
|