Statistics
| Revision:

root / sqs-reader / src / main / java / net / sqs2 / omr / session / source / impl / SessionSourceContentIndexerImpl.java @ 1844

History | View | Annotate | Download (7.7 KB)

1
package net.sqs2.omr.session.source.impl;
2
3
import java.io.File;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.List;
7
import java.util.Map;
8
9
import net.sqs2.omr.master.FormMaster;
10
import net.sqs2.omr.master.PageMaster;
11
import net.sqs2.omr.model.PageID;
12
import net.sqs2.omr.model.RowID;
13
import net.sqs2.omr.model.SourceDirectory;
14
import net.sqs2.omr.session.config.SourceDirectoryConfiguration;
15
import net.sqs2.omr.session.source.ContentIndexer;
16
import net.sqs2.omr.util.RelationList;
17
import net.sqs2.omr.util.RelationList.SimpleRelationList;
18
import net.sqs2.util.FileResourceID;
19
import net.sqs2.util.StringUtil;
20
21
public class SessionSourceContentIndexerImpl implements ContentIndexer {
22
23
        public SessionSourceContentIndexerImpl() {
24
        }
25
26
        private RelationList<FileResourceID, PageMaster> pageMasterRegistry = new SimpleRelationList<FileResourceID, PageMaster>();
27
        //private RelationList<FileResourceID, SourceDirectoryConfiguration> configHandlerRegistry = new SimpleRelationList<FileResourceID, SourceDirectoryConfiguration>();
28
        private Map<FileResourceID, SourceDirectoryConfiguration> configHandlerRegistry = new HashMap<FileResourceID, SourceDirectoryConfiguration>();
29
        private RelationList<PageMaster, SourceDirectory> pageMasterSourceDirectoryRelation = new RelationList.SortedRelationList<PageMaster, SourceDirectory>();
30
        private Map<PageID, RowID> pageIDToRowIDMap = new HashMap<PageID, RowID>();
31
32
        private Map<PageMaster, List<SourceDirectory>> depthOrderedListMap = null;//new HashMap<PageMaster, List<SourceDirectory>>();
33
34
        /* (non-Javadoc)
35
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#close()
36
         */
37
        public void close(){
38
                this.pageMasterRegistry.clear();
39
                this.configHandlerRegistry.clear();
40
                this.pageMasterRegistry.clear();
41
                this.pageIDToRowIDMap.clear();
42
                this.depthOrderedListMap.clear();
43
        }
44
45
46
        /* (non-Javadoc)
47
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getConfigHandler(net.sqs2.util.FileResourceID)
48
         */
49
        public SourceDirectoryConfiguration getConfigHandler(FileResourceID fileResourceID) {
50
                SourceDirectoryConfiguration ret = this.configHandlerRegistry.get(fileResourceID);
51
                if(ret == null){
52
                        throw new IllegalArgumentException(fileResourceID.toString());
53
                }else{
54
                        return ret;
55
                }
56
        }
57
58
        /* (non-Javadoc)
59
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#setConfigHandler(net.sqs2.util.FileResourceID, net.sqs2.omr.session.config.SourceDirectoryConfiguration)
60
         */
61
        public void setConfiguration(FileResourceID fileResourceID, SourceDirectoryConfiguration configHandler) {
62
                this.configHandlerRegistry.put(fileResourceID, configHandler);
63
        }
64
65
        /* (non-Javadoc)
66
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#addSourceDirectory(net.sqs2.omr.master.PageMaster, net.sqs2.omr.page.source.SourceDirectory)
67
         */
68
        public void addSourceDirectory(PageMaster pageMaster, SourceDirectory sourceDirectory) {
69
                this.pageMasterSourceDirectoryRelation.put(pageMaster, sourceDirectory);
70
        }
71
72
        /* (non-Javadoc)
73
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getSourceDirectoryList(net.sqs2.omr.master.PageMaster)
74
         */
75
        public List<SourceDirectory> getSourceDirectoryList(PageMaster pageMaster) {
76
                return this.pageMasterSourceDirectoryRelation.getValueListB(pageMaster);
77
        }
78
79
        /* (non-Javadoc)
80
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#putPageMaster(net.sqs2.util.FileResourceID, net.sqs2.omr.master.PageMaster)
81
         */
82
        public void putPageMaster(FileResourceID fileResourceID, PageMaster master) {
83
                if (!this.pageMasterRegistry.containsKey(fileResourceID)) {
84
                        this.pageMasterRegistry.put(fileResourceID, master);
85
                }
86
        }
87
88
        /* (non-Javadoc)
89
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getPageMasterList()
90
         */
91
        public List<PageMaster> getPageMasterList() {
92
                return this.pageMasterRegistry.getUniqueValueList();
93
        }
94
95
        /*
96
         * public Set<PageMaster> getPageMasterSet(){ return
97
         * this.pageMasterRegistry.getValueSet(); }
98
         */
99
100
        /* (non-Javadoc)
101
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getPageMaster(net.sqs2.util.FileResourceID)
102
         */
103
        public PageMaster getPageMaster(FileResourceID fileResourceID) {
104
                return this.pageMasterRegistry.getFirstValue(fileResourceID);
105
        }
106
107
        /* (non-Javadoc)
108
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#putRowID(net.sqs2.omr.page.source.PageID, net.sqs2.omr.model.RowID)
109
         */
110
        public void putRowID(PageID pageID, RowID rowID) {
111
                this.pageIDToRowIDMap.put(pageID, rowID);
112
        }
113
114
        /* (non-Javadoc)
115
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#removeRowID(net.sqs2.omr.page.source.PageID)
116
         */
117
        public void removeRowID(PageID pageID) {
118
                this.pageIDToRowIDMap.remove(pageID);
119
        }
120
121
        /* (non-Javadoc)
122
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getRowID(net.sqs2.omr.page.source.PageID)
123
         */
124
        public RowID getRowID(PageID pageID) {
125
                return this.pageIDToRowIDMap.get(pageID);
126
        }
127
128
        /* (non-Javadoc)
129
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getSourceDirectoryDepthOrderedListMap()
130
         */
131
        public Map<PageMaster, List<SourceDirectory>> getSourceDirectoryDepthOrderedListMap() {
132
                return this.depthOrderedListMap;
133
        }
134
        
135
        public Map<PageMaster, List<SourceDirectory>> createSourceDirectoryDepthOrderedListMap() {
136
                return this.depthOrderedListMap = new SpreadSheetListMapFactory().create();
137
        }
138
139
        class SpreadSheetListMapFactory {
140
141
                public Map<PageMaster, List<SourceDirectory>> create() {
142
                        Map<PageMaster, List<SourceDirectory>> sourceDirectoryListList = new HashMap<PageMaster, List<SourceDirectory>>();
143
                        for (PageMaster master : SessionSourceContentIndexerImpl.this.pageMasterRegistry.getKeySetB()) {
144
                                ArrayList<SourceDirectory> flattenSourceDirectoryList = new ArrayList<SourceDirectory>();
145
                                createTableGroupListByMaster(master, flattenSourceDirectoryList);
146
                                sourceDirectoryListList.put(master, flattenSourceDirectoryList);
147
                        }
148
                        return sourceDirectoryListList;
149
                }
150
151
                private void createTableGroupListByMaster(PageMaster master, ArrayList<SourceDirectory> flattenSourceDirectoryList) {
152
                        int maxDepth = -1;
153
                        Map<Integer, List<SourceDirectory>> map = new HashMap<Integer, List<SourceDirectory>>();
154
                        for (SourceDirectory sourceDirectory : getSourceDirectoryList(master)) {
155
                                int depth = (sourceDirectory.getRelativePath().equals("")) ? 1 : StringUtil.split(
156
                                                sourceDirectory.getRelativePath(), File.separatorChar).size() + 1;
157
                                maxDepth = Math.max(depth, maxDepth);
158
                                List<SourceDirectory> list = map.get(depth);
159
                                if (list == null) {
160
                                        list = new ArrayList<SourceDirectory>();
161
                                        map.put(depth, list);
162
                                }
163
                                list.add(sourceDirectory);
164
                        }
165
                        createTableGroupListByMaster(map, maxDepth, flattenSourceDirectoryList);
166
                }
167
168
                private void createTableGroupListByMaster(Map<Integer, List<SourceDirectory>> map, int maxDepth, List<SourceDirectory> flattenSourceDirectoryList) {
169
                        int indexBase = 0;
170
                        for (int i = 0; i <= maxDepth; i++) {
171
                                List<SourceDirectory> sourceDirectoryList = map.get(i);
172
                                if (sourceDirectoryList != null) {
173
                                        for (SourceDirectory sourceDirectory : sourceDirectoryList) {
174
                                                flattenSourceDirectoryList.add(sourceDirectory);
175
                                        }
176
                                        indexBase += sourceDirectoryList.size();
177
                                }
178
                        }
179
                }
180
        }
181
182
        /* (non-Javadoc)
183
         * @see net.sqs2.omr.session.source.SessionSourceContentIndexer#getSourceDirectoryList(net.sqs2.omr.master.FormMaster)
184
         */
185
        public List<SourceDirectory> getSourceDirectoryList(FormMaster master) {
186
                return this.pageMasterSourceDirectoryRelation.getValueListB(master);
187
        }
188
189
        @Override
190
        public int getNumSourceDirectories(PageMaster pageMaster) {
191
                return pageMasterSourceDirectoryRelation.getValueListB(pageMaster).size();
192
        }
193
194
        @Override
195
        public SourceDirectory getSourceDirectory(PageMaster pageMaster, int tableIndex) {
196
                return pageMasterSourceDirectoryRelation.getValueListB(pageMaster).get(tableIndex);
197
        }
198
}