1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.appointment.modules.management.service.indexer;
35
36 import java.io.IOException;
37 import java.nio.file.Paths;
38
39 import javax.inject.Inject;
40 import javax.inject.Named;
41
42 import org.apache.lucene.analysis.Analyzer;
43 import org.apache.lucene.index.DirectoryReader;
44 import org.apache.lucene.index.IndexWriter;
45 import org.apache.lucene.index.IndexWriterConfig;
46 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
47 import org.apache.lucene.store.Directory;
48 import org.apache.lucene.store.FSDirectory;
49
50 import fr.paris.lutece.portal.service.util.AppLogService;
51 import fr.paris.lutece.portal.service.util.AppPathService;
52 import fr.paris.lutece.portal.service.util.AppPropertiesService;
53
54 public class LuceneAppointmentIndexFactory
55 {
56
57 private static final String PATH_INDEX = "appointment-management.internalIndexer.lucene.indexPath";
58 private static final String PATH_INDEX_IN_WEBAPP = "appointment-management.internalIndexer.lucene.indexInWebapp";
59
60 @Inject
61 @Named( value = "appointment-management.luceneAnalizer" )
62 private Analyzer _analyzer;
63
64 private IndexWriter _indexWriter;
65
66
67
68
69
70
71
72
73
74
75 public IndexWriter getIndexWriter( Boolean bCreateIndex )
76 {
77 if ( _indexWriter == null || !_indexWriter.isOpen( ) )
78 {
79 try
80 {
81 Directory luceneDirectory = getDirectory( );
82
83 if ( !DirectoryReader.indexExists( luceneDirectory ) )
84 {
85 bCreateIndex = Boolean.TRUE;
86 }
87
88 IndexWriterConfig conf = new IndexWriterConfig( _analyzer );
89
90 if ( Boolean.TRUE.equals( bCreateIndex ) )
91 {
92 conf.setOpenMode( OpenMode.CREATE );
93 }
94 else
95 {
96 conf.setOpenMode( OpenMode.APPEND );
97 }
98 _indexWriter = new IndexWriter( luceneDirectory, conf );
99 }
100 catch( IOException e )
101 {
102 AppLogService.error( "Unable to create a new Lucene Index Writer", e );
103 return null;
104 }
105 }
106 return _indexWriter;
107 }
108
109
110
111
112
113
114
115
116 public Directory getDirectory( ) throws IOException
117 {
118 String strIndex;
119
120 boolean indexInWebapp = AppPropertiesService.getPropertyBoolean( PATH_INDEX_IN_WEBAPP, true );
121 if ( indexInWebapp )
122 {
123 strIndex = AppPathService.getPath( PATH_INDEX );
124 }
125 else
126 {
127 strIndex = AppPropertiesService.getProperty( PATH_INDEX );
128 }
129
130 return FSDirectory.open( Paths.get( strIndex ) );
131 }
132 }