001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.core.mapping;
018:
019: import org.compass.core.engine.naming.PropertyPath;
020: import org.compass.core.engine.subindex.SubIndexHash;
021:
022: /**
023: * A mapping defining a {@link org.compass.core.Resource} saved in the Search Engine.
024: *
025: * @author kimchy
026: */
027: public interface ResourceMapping extends AliasMapping {
028:
029: /**
030: * The sub index that the {@link org.compass.core.Resource} will be saved to in the
031: * search engine.
032: */
033: SubIndexHash getSubIndexHash();
034:
035: /**
036: * Returns the analyzer name that need to be used with the resouce.
037: * Can be <code>null</code>.
038: */
039: String getAnalyzer();
040:
041: /**
042: * Returns <code>true</code> if the resource proeprty mapping of the resource have
043: * a specific analyzer set.
044: */
045: boolean hasSpecificAnalyzerPerResourceProperty();
046:
047: /**
048: * Returns the analzer controller that is associated with the {@link org.compass.core.Resource}.
049: * Can be <code>null</code>.
050: */
051: ResourceAnalyzerController getAnalyzerController();
052:
053: /**
054: * Returns an optional boost property mapping associated with the {@link org.compass.core.Resource}
055: * in order to dynmaically set the resource boost value based on it. Can be <code>null</code>.
056: */
057: BoostPropertyMapping getBoostPropertyMapping();
058:
059: /**
060: * Returns the boost of the given resource.
061: */
062: float getBoost();
063:
064: /**
065: * Returns <code>true</code> if it is a root resource mapping. If it is a
066: * root mapping, then it controlls the general {@link org.compass.core.Resource} level
067: * settings like alias and sub-index. Usually, non-root resource mapping are mappings that are
068: * incorporated within another resoruce.
069: */
070: boolean isRoot();
071:
072: /**
073: * Returns a set of settings associated with the all mappings.
074: */
075: AllMapping getAllMapping();
076:
077: /**
078: * Returns all mappings that represent ids of a resource.
079: */
080: Mapping[] getIdMappings();
081:
082: /**
083: * Returns the default spell check mode. If NA, will use global setting.
084: */
085: SpellCheckType getSpellCheck();
086:
087: /**
088: * Returns the uid property name.
089: */
090: String getUIDPath();
091:
092: /**
093: * Returns all the id mappigns for the low level resource mapping.
094: */
095: ResourcePropertyMapping[] getResourceIdMappings();
096:
097: /**
098: * Returns a list of all the cascade mappings. Will return null if no cascading is defined.
099: */
100: CascadeMapping[] getCascadeMappings();
101:
102: /**
103: * Returns is an operation is allowed to be performed on this resoruce mappings.
104: * Root mappings ({@link #isRoot()} always return <code>true</code>, while if
105: * it is non root mappings, it should return true if it has cascade mappings
106: * that map one of the cascade operations.
107: */
108: boolean operationAllowed(CascadeMapping.Cascade cascade);
109:
110: /**
111: * Returns all the mapped property names for the resoruce.
112: */
113: String[] getResourcePropertyNames();
114:
115: /**
116: * Returns all the resource property mappings that are assoicated with the resource mapping.
117: * Note, that it is an important method, since it might be that not all the mappings that were
118: * added to the resource mapping are of type {@link ResourcePropertyMapping}, and using this
119: * method you can be assured that ALL the {@link ResourcePropertyMapping}s will be returned
120: * (even deep ones).
121: */
122: ResourcePropertyMapping[] getResourcePropertyMappings();
123:
124: /**
125: * Returns the first resource property mapping that match the given proeprty name
126: * ({@link org.compass.core.mapping.ResourcePropertyMapping#getName()}, or
127: * <code>null</code> if not exists.
128: */
129: ResourcePropertyMapping getResourcePropertyMapping(
130: String propertyName);
131:
132: /**
133: * Returns the list of resource property mappings that match the given proeprty name
134: * ({@link org.compass.core.mapping.ResourcePropertyMapping#getName()}, or
135: * <code>null</code> if not exists.
136: */
137: ResourcePropertyMapping[] getResourcePropertyMappings(
138: String propertyName);
139:
140: /**
141: * Returns the {@link ResourcePropertyMapping} that match the given path
142: * ({@link org.compass.core.mapping.ResourcePropertyMapping#getPath()}, or
143: * <code>null</code> of not exists.
144: */
145: ResourcePropertyMapping getResourcePropertyMappingByPath(
146: PropertyPath path);
147:
148: /**
149: * Returns the {@link ResourcePropertyMapping} that match the given path
150: * "dot" path (a.bValue.value), or <code>null</code> if none exists.
151: */
152: ResourcePropertyMapping getResourcePropertyMappingByDotPath(
153: String path);
154: }
|