/*
* This file is part of Mockey, a tool for testing application
* interactions over HTTP, with a focus on testing web services,
* specifically web applications that consume XML, JSON, and HTML.
*
* Copyright (C) 2009-2010 Authors:
*
* chad.lafontaine (chad.lafontaine AT gmail DOT com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
package com.mockey;
import java.util.ArrayList;
import java.util.List;
import com.mockey.model.Scenario;
import com.mockey.model.SearchResult;
import com.mockey.model.SearchResultType;
import com.mockey.model.Service;
import com.mockey.model.ServicePlan;
import com.mockey.model.Url;
import com.mockey.storage.IMockeyStorage;
/**
*
* @author clafonta
*
*/
public class SearchResultBuilder {
/**
* Basic contructor
*/
public SearchResultBuilder() {
}
/**
*
* @param term
* @param store
*/
public List<SearchResult> buildSearchResults(String term,
IMockeyStorage store) {
List<SearchResult> searchResultList = new ArrayList<SearchResult>();
if (term != null && term.trim().length() > 0) {
term = term.trim();
// ******************************
// SERVICE PLAN LIST
// ******************************
for (ServicePlan servicePlan : store.getServicePlans()) {
SearchResult sr = buildSearchResult(term, servicePlan.getName() + " " + servicePlan.getTag());
if (sr != null) {
sr.setType(SearchResultType.SERVICE_PLAN);
sr.setServicePlanId("" + servicePlan.getId());
sr.setServicePlanName(servicePlan.getName());
searchResultList.add(sr);
}
}
// ******************************
// SERVICE LIST
// ******************************
for (Service service : store.getServices()) {
boolean serviceAdded = false;
SearchResult sr = buildSearchResult(term,
service.getServiceName() + " " +service.getTag() + " ");
if (sr != null) {
sr.setType(SearchResultType.SERVICE);
sr.setServiceId("" + service.getId());
searchResultList.add(sr);
serviceAdded = true;
}
if (!serviceAdded) {
// No match; lets check RealServiceUrls
for (Url url : service.getRealServiceUrls()) {
SearchResult subresult = buildSearchResult(term,
url.toString());
if (subresult != null) {
subresult.setType(SearchResultType.SERVICE);
subresult.setServiceId("" + service.getId());
searchResultList.add(subresult);
serviceAdded = true;
break;
}
}
}
if (!serviceAdded) {
// No match; lets check RealServiceUrls
String mockurl = service.getUrl();
SearchResult subresult = buildSearchResult(term, mockurl);
if (subresult != null) {
subresult.setType(SearchResultType.SERVICE);
subresult.setServiceId("" + service.getId());
searchResultList.add(subresult);
serviceAdded = true;
}
}
// *****************************
// SERVICE SCENARIO
// ****************************
// REGARDLESS of Service being added, let's see if there is a
// matching scenario by Scenario RESPONSE
for (Scenario scenario : service.getScenarios()) {
// Append tags, name, and response...
// Why not? It's a hack to jumble all things together
SearchResult subresult = buildSearchResult(
term,
scenario.getResponseMessage() + " "
+ scenario.getScenarioName() + " "
+ scenario.getTag());
if (subresult != null) {
subresult.setType(SearchResultType.SERVICE_SCENARIO);
subresult.setServiceId("" + service.getId());
subresult.setScenarioId("" + scenario.getId());
subresult.setScenarioName(scenario.getScenarioName());
searchResultList.add(subresult);
}
}
}
}
return searchResultList;
}
private SearchResult buildSearchResult(String term, String content) {
SearchResult result = null;
if (term != null && content != null) {
int index = content.trim().toLowerCase().indexOf(term.trim().toLowerCase());
if (index > -1) {
result = new SearchResult();
String teaserContent = content.substring(index);
if (teaserContent.length() > 150) {
teaserContent.substring(0, 148);
}
result.setContent(teaserContent);
}
}
return result;
}
}