KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > alfresco > repo > search > impl > lucene > query > RelativeStructuredFieldPosition


1 /*
2  * Copyright (C) 2005 Alfresco, Inc.
3  *
4  * Licensed under the Mozilla Public License version 1.1
5  * with a permitted attribution clause. You may obtain a
6  * copy of the License at
7  *
8  * http://www.alfresco.org/legal/license.txt
9  *
10  * Unless required by applicable law or agreed to in writing,
11  * software distributed under the License is distributed on an
12  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific
14  * language governing permissions and limitations under the
15  * License.
16  */

17 package org.alfresco.repo.search.impl.lucene.query;
18
19 import java.io.IOException JavaDoc;
20
21 /**
22  * Search for a term relative to the last one found.
23  *
24  * @author andyh
25  */

26 public class RelativeStructuredFieldPosition extends AbstractStructuredFieldPosition
27 {
28
29     int relativePosition;
30
31     /**
32      *
33      */

34     public RelativeStructuredFieldPosition(String JavaDoc termText)
35     {
36         super(termText.equals("*") ? null : termText, true, false);
37         relativePosition = 1;
38         
39     }
40
41     public RelativeStructuredFieldPosition()
42     {
43         super(null, false, false);
44         relativePosition = 1;
45     }
46
47     /*
48      * (non-Javadoc)
49      *
50      * @see org.alfresco.lucene.extensions.StructuredFieldPosition#matches(int,
51      * int, org.apache.lucene.index.TermPositions)
52      */

53     public int matches(int start, int end, int offset) throws IOException JavaDoc
54     {
55
56         if (getCachingTermPositions() != null)
57         {
58             // Doing "termText"
59
getCachingTermPositions().reset();
60             int count = getCachingTermPositions().freq();
61             int requiredPosition = offset + relativePosition;
62             int realPosition = 0;
63             int adjustedPosition = 0;
64             for (int i = 0; i < count; i++)
65             {
66                 realPosition = getCachingTermPositions().nextPosition();
67                 adjustedPosition = realPosition - start;
68                 if ((end != -1) && (realPosition > end))
69                 {
70                     return -1;
71                 }
72                 if (adjustedPosition == requiredPosition)
73                 {
74                     return adjustedPosition;
75                 }
76                 if (adjustedPosition > requiredPosition)
77                 {
78                     return -1;
79                 }
80             }
81         }
82         else
83         {
84             // Doing "*";
85
return offset + 1;
86         }
87         return -1;
88     }
89     
90     public String JavaDoc getDescription()
91     {
92         return "Relative Named child";
93     }
94 }
95
Popular Tags