001/** 002 * Copyright (C) 2014 Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/ 003 * 004 * This file is part of Dicoogle/dicoogle. 005 * 006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * Dicoogle/dicoogle is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Dicoogle. If not, see <http://www.gnu.org/licenses/>. 018 */ 019package pt.ua.dicoogle.rGUI.server; 020 021import java.net.URI; 022import java.util.ArrayList; 023import java.util.HashMap; 024import java.util.Observable; 025import java.util.Observer; 026 027import pt.ua.dicoogle.plugins.PluginController; 028import pt.ua.dicoogle.rGUI.server.controllers.Search; 029import pt.ua.dicoogle.sdk.Utils.TaskRequest; 030import pt.ua.dicoogle.sdk.Utils.TaskRequestsConstants; 031import pt.ua.dicoogle.sdk.datastructs.SearchResult; 032import pt.ua.dicoogle.sdk.observables.ListObservableSearch; 033 034/** 035 * 036 * @author Samuel Campos <samuelcampos@ua.pt> 037 */ 038@Deprecated 039public class SearchHelper implements Observer 040{ 041 042 private ListObservableSearch<SearchResult> SearchResList = null; 043 private boolean export = false; // indicates whether the search is to export or do not 044 private long time; 045 private Search searchControler; 046 047 public SearchHelper(Search search) 048 { 049 this.searchControler = search; 050 051 052 } 053 054 public void setList(ListObservableSearch<SearchResult> SearchResList) 055 { 056 this.SearchResList = SearchResList; 057 } 058 059 060 public ListObservableSearch<SearchResult> search(String query, ArrayList<String> extrafields, 061 HashMap<String, Boolean> plugins, boolean export, Observer obs) 062 { 063 064 this.export = export; 065 this.time = System.nanoTime(); 066 067 ArrayList<String> plugins2 = new ArrayList<String>(); 068 for (String pi : plugins.keySet()) 069 { 070 Boolean value = plugins.get(pi); 071 if (value) 072 { 073 plugins2.add(pi); 074 075 } 076 077 } 078 079 080 Thread seachThread = new SearchLocal(query, extrafields, plugins2, obs); 081 seachThread.start(); 082 return SearchResList; 083 084 085 } 086 087 088 public void search(String query, ArrayList<String> extrafields, 089 HashMap<String, Boolean> plugins, boolean export) 090 { 091 search(query, extrafields, plugins, export, this); 092 093 } 094 095 public SearchResult searchThumbnail(URI FileName, String FileHash) 096 { 097 ArrayList<SearchResult> queryResultListLocal; 098 099 ArrayList<String> extrafields = new ArrayList<String>(); 100 extrafields.add("Thumbnail"); 101 102 String query = "FileName:" + FileName + " AND FileHash:" + FileHash; 103 // TODO: Implement it. 104 return null; 105 } 106 107 public void searchP2PThumbnail(URI FileName, String FileHash, String addr) 108 { 109 110 ArrayList<String> extrafields = new ArrayList<String>(); 111 extrafields.add("Thumbnail"); 112 113 String query = "FileName:" + FileName + " AND FileHash:" + FileHash; 114 // TODO: Implement it. 115 } 116 117 @Override 118 public void update(Observable o, Object arg) 119 { 120 121 ArrayList tmp = ((ListObservableSearch) o).getArray(); 122 Boolean finished = ((ListObservableSearch) o).isFinish(); 123 System.out.println("SearchHelper...recebeu os resultados: " + tmp.size()); 124 ArrayList<SearchResult> resultsList; 125 126 if (tmp.isEmpty()) 127 { 128 return; 129 130 } else 131 { 132 133 ((ListObservableSearch) o).resetArray(); 134 135 if (SearchResult.class.isInstance(tmp.get(0))) 136 { 137 138 if (finished) 139 { 140 searchControler.queryFinished(); 141 } 142 143 resultsList = tmp; 144 145 if (resultsList.size() == 1 && resultsList.get(0).getExtraData().size() == 0) 146 { 147 return; 148 } 149 150 //if the result is just the requested Thumbnail 151 if (resultsList.size() == 1 && resultsList.get(0).getExtraData().size() == 1 152 && resultsList.get(0).getExtraData().get("Thumbnail") != null) 153 { 154 searchControler.setP2PThumbnails(resultsList); 155 156 } else 157 { 158 ((ListObservableSearch) o).resetArray(); 159 long timeEnd = System.nanoTime(); 160 161 if (!export) 162 { 163 searchControler.setSearchTime(((int) ((timeEnd - time) / 1000000L))); 164 searchControler.setP2PSearchResult(resultsList); 165 } else 166 { 167 searchControler.setExportSearchResult(resultsList); 168 } 169 170 PluginController.getInstance().addTask(new TaskRequest(TaskRequestsConstants.T_BLOCK_SIGNAL, null, null)); 171 } 172 173 } 174 175 176 // Memory monitoring 177 long freeMemory = Runtime.getRuntime().freeMemory() / 1024 / 1024; 178 long totalMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024; 179 long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024; 180 181 double percentage = freeMemory / totalMemory; 182 183 if (percentage>0.8) 184 { 185 // Prune query!!! 186 PluginController.getInstance().addTask(new TaskRequest(TaskRequestsConstants.T_QUERY_PRUNE, null, null)); 187 } 188 } 189 190 } 191 192 /** 193 * Private class that implements one Thread to search in IndexEngine 194 */ 195 private class SearchLocal extends Thread 196 { 197 198 private String query; 199 private ArrayList<String> extrafields; 200 private ArrayList<String> pluginsLocals; 201 private Observer searchHelper; 202 203 public SearchLocal(String query, ArrayList<String> extrafields, ArrayList<String> pluginsLocals , Observer searchHelper) 204 { 205 this.query = query; 206 this.extrafields = extrafields; 207 this.pluginsLocals = pluginsLocals; 208 this.searchHelper = searchHelper; 209 } 210 211 @Override 212 public void run() 213 { 214 //TODO: DELETED 215 //SearchResList = PluginController.getInstance().search(pluginsLocals, query, extrafields, searchHelper); 216 } 217 } 218}