Commit f0d41f49 authored by Ali Saeed's avatar Ali Saeed

Update Leader class to make it's functions static

parent 23f07acd
package Registration_Discovery; package Registration_Discovery;
import io.grpc.stub.StreamObserver;
import org.lognet.springboot.grpc.GRpcService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
...@@ -16,31 +19,24 @@ import java.util.*; ...@@ -16,31 +19,24 @@ import java.util.*;
public class Leader { public class Leader {
private int PORT = 12345;
private ServiceRegistry serviceRegistry;
List<DocumentTermsInfo> documentTermsInfo;
static List<DocumentTermsInfo> documentTermsInfo;
private static final String FOLDER_PATH = "D:\\DS_Project\\resources"; private static final String FOLDER_PATH = "D:\\DS_Project\\resources";
private static final Logger logger = LoggerFactory.getLogger(Leader.class); private static final Logger logger = LoggerFactory.getLogger(Leader.class);
public Leader() {
public Leader(int port, ServiceRegistry serviceRegistry) {
this.PORT = port;
this.serviceRegistry = serviceRegistry;
} }
public void start() throws IOException, InterruptedException {
String searchQuery = "";
while (!searchQuery.equals("exit")) {
documentTermsInfo = new ArrayList<>();
Scanner scanner = new Scanner(System.in); public static TreeMap<String,Double> start(String searchQuery1) throws IOException, InterruptedException {
logger.info("Enter your Search Query: ");
searchQuery = scanner.nextLine(); String searchQuery = searchQuery1;
documentTermsInfo = new ArrayList<>();
logger.info("Search Query: "+searchQuery); logger.info("Search Query: "+searchQuery);
if(!searchQuery.isEmpty()){ if(!searchQuery.isEmpty()){
// Get the list of documents from the resources folder // Get the list of documents from the resources folder
List<Document> documents = getDocumentsFromResources(); List<Document> documents = getDocumentsFromResources();
Map<Document,Double> documentsScores = new HashMap<>(); Map<Document,Double> documentsScores = new HashMap<>();
List<String> allServiceAddresses = serviceRegistry.getAllServiceAddresses(); List<String> allServiceAddresses = ServiceRegistry.getAllServiceAddresses();
int numAddresses = allServiceAddresses.size(); int numAddresses = allServiceAddresses.size();
int numDocuments = documents.size(); int numDocuments = documents.size();
if(numAddresses != 0){ if(numAddresses != 0){
...@@ -82,21 +78,27 @@ public class Leader { ...@@ -82,21 +78,27 @@ public class Leader {
documentsScores = calculateDocumentsScore(IDFs ,documentTermsInfo); documentsScores = calculateDocumentsScore(IDFs ,documentTermsInfo);
TreeMap<Document, Double> sortedDocumentsScores = sortDocumentsScores(documentsScores); TreeMap<Document, Double> sortedDocumentsScores = sortDocumentsScores(documentsScores);
displaySortedScores(sortedDocumentsScores); displaySortedScores(sortedDocumentsScores);
TreeMap<String, Double> sortedDocumentsScores1 = sortDocumentsScores1(documentsScores);
return sortedDocumentsScores1;
} }
else { else {
logger.info("No results !!!!"); logger.info("No results !!!!");
return null;
} }
} }
else { else {
logger.info("Try again later !!!!"); logger.info("Try again later !!!!");
return null;
} }
}else { }else {
logger.info("Please enter search query !!!"); logger.info("Please enter search query !!!");
return null;
} }
} }
}
private Map<Document, Double> calculateDocumentsScore(Map<String, Double> idFs, List<DocumentTermsInfo> documentTermsInfo) {
private static Map<Document, Double> calculateDocumentsScore(Map<String, Double> idFs, List<DocumentTermsInfo> documentTermsInfo) {
Map<Document, Double> documentsScores = new TreeMap<>(); Map<Document, Double> documentsScores = new TreeMap<>();
...@@ -114,7 +116,7 @@ public class Leader { ...@@ -114,7 +116,7 @@ public class Leader {
return documentsScores; return documentsScores;
} }
private List<Document> getDocumentsFromResources() { private static List<Document> getDocumentsFromResources() {
List<Document> documents = new ArrayList<>(); List<Document> documents = new ArrayList<>();
try { try {
Path resourcesPath = Paths.get(FOLDER_PATH); Path resourcesPath = Paths.get(FOLDER_PATH);
...@@ -133,7 +135,7 @@ public class Leader { ...@@ -133,7 +135,7 @@ public class Leader {
return documents; return documents;
} }
private void displayDocumentTermsInfos(List<DocumentTermsInfo> documentTermsInfoList) { private static void displayDocumentTermsInfos(List<DocumentTermsInfo> documentTermsInfoList) {
System.out.println(); System.out.println();
System.out.println(); System.out.println();
for (DocumentTermsInfo documentTermsInfo : documentTermsInfoList) { for (DocumentTermsInfo documentTermsInfo : documentTermsInfoList) {
...@@ -150,7 +152,7 @@ public class Leader { ...@@ -150,7 +152,7 @@ public class Leader {
logger.info("................................................"); logger.info("................................................");
} }
} }
private void startSearchOnWorker(String workerAddress,DataForSearch dataForSearch) throws IOException, InterruptedException { private static void startSearchOnWorker(String workerAddress,DataForSearch dataForSearch) throws IOException, InterruptedException {
String[] addressParts = workerAddress.split(":"); String[] addressParts = workerAddress.split(":");
int port = Integer.parseInt(addressParts[1]); int port = Integer.parseInt(addressParts[1]);
String ipAddress = addressParts[0]; String ipAddress = addressParts[0];
...@@ -179,7 +181,7 @@ public class Leader { ...@@ -179,7 +181,7 @@ public class Leader {
} }
} }
private Map<String,Double> calculateIDF(List<DocumentTermsInfo> documentTermsInfo,Double totalDocuments ,String searchQuery){ private static Map<String,Double> calculateIDF(List<DocumentTermsInfo> documentTermsInfo,Double totalDocuments ,String searchQuery){
Map<String,Double> IDFs = new HashMap<>(); Map<String,Double> IDFs = new HashMap<>();
Map<String, Double> wordDocumentCount = new HashMap<>(); Map<String, Double> wordDocumentCount = new HashMap<>();
String[] queryWords = searchQuery.split("\\s+"); String[] queryWords = searchQuery.split("\\s+");
...@@ -219,7 +221,7 @@ public class Leader { ...@@ -219,7 +221,7 @@ public class Leader {
return IDFs; return IDFs;
} }
private TreeMap<Document, Double> sortDocumentsScores(Map<Document, Double> documentsScores) { private static TreeMap<Document, Double> sortDocumentsScores(Map<Document, Double> documentsScores) {
Comparator<Document> comparator = new Comparator<Document>() { Comparator<Document> comparator = new Comparator<Document>() {
@Override @Override
public int compare(Document doc1, Document doc2) { public int compare(Document doc1, Document doc2) {
...@@ -238,7 +240,31 @@ public class Leader { ...@@ -238,7 +240,31 @@ public class Leader {
sortedMap.putAll(documentsScores); sortedMap.putAll(documentsScores);
return sortedMap; return sortedMap;
} }
private void displaySortedScores(TreeMap<Document, Double> sortedScores) { private static TreeMap<String, Double> sortDocumentsScores1(Map<Document, Double> documentsScores) {
Comparator<Document> comparator = new Comparator<Document>() {
@Override
public int compare(Document doc1, Document doc2) {
Double score1 = documentsScores.get(doc1);
Double score2 = documentsScores.get(doc2);
int scoreComparison = score2.compareTo(score1);
if (scoreComparison != 0) {
return scoreComparison;
} else {
return doc1.compareTo(doc2);
}
}
};
TreeMap<Document, Double> sortedMap = new TreeMap<>(comparator);
sortedMap.putAll(documentsScores);
TreeMap<String, Double> sortedMap1 = new TreeMap<>();
for (Map.Entry<Document, Double> entry : sortedMap.entrySet()) {
String documentName = entry.getKey().getName();
Double score = entry.getValue();
sortedMap1.put(documentName,score);
}
return sortedMap1;
}
private static void displaySortedScores(TreeMap<Document, Double> sortedScores) {
logger.info("Sorted Documents By Scores:"); logger.info("Sorted Documents By Scores:");
for (Map.Entry<Document, Double> entry : sortedScores.entrySet()) { for (Map.Entry<Document, Double> entry : sortedScores.entrySet()) {
Document document = entry.getKey(); Document document = entry.getKey();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment