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 | } |

SourceEditor2.0(2010/08/18)
