Erinevus lehekülje "ITI0011RUS:task 10" redaktsioonide vahel
|  (Uus lehekülg: 'Срок сдачи упражнения '''15-е занятие (26 марта)'''.  Общая информация об упражнениях: ITI0011RUS_Practice.<br/> ...') | 
| (Erinevus puudub) | 
Viimane redaktsioon: 24. märts 2015, kell 21:47
Срок сдачи упражнения 15-е занятие (26 марта).
Общая информация об упражнениях: ITI0011RUS_Practice.
Обратно на страницу предмета.
Описание
Создать класс BookStore, который зависит от библиотеки BookShopApi, которую можно скачать здесь: Meedia:ITI0011-2015-BookStoreApiV02.zip.
Библиотека BookStoreApi позволяет искать информацию о книгах по их названию или его части.
Например:
<BookStoreInstance>.getBookByTitle("Tõde ja Õigus") 
возвращает xml документ http://pastebin.com/dSfNCHH8
BookStore должен наследовать класс SimpleBookStore, для использования которого следует подключить BookShopApi.
BookStore должен быть классом, чей конструктор должен принимать в качестве аргумента объект BookShopApi. В классе BookShop должны быть определены 5 методов: getTotalRecordsInResponse, getPossibleBookTitles, getBookWithMostPagesTitle, getPossbileAuthors, query.
- getTotalRecordsInResponse возвращает из XML результата <totalItems>X</totalItems>значение X. Если значение отсутствует или getBookByTitle выкинет исключение, следует вернуть значение 0.
- getPossibleBookTitles возвращает названия всех книг (все значения, находящиеся внутри элементов <title>). Несколько одинаковых значений разрешается получать. Если значение отсутствует, илиgetBookByTitleвыкидывает исключение, следует вернуть пустой список.
- getBookWithMostPagesTitle,  возвращает название книги(<title>), у которой наибольшее число страниц. Если методgetBookByTitleвыкинет исключение, следует вернуть пустую строку ("")
- getPossbileAuthors, возвращает всех авторов найденных книг, при этом следует учитывать, что один и тот же автор может присутствовать в списке только однократно. Автора книги сможете найти между элементами <authors>. Внимание, элемент<authors>содержит запись только об одном авторе, в случае, если авторов несколько, в xml будут присутствовать несколько элементов<authors>. В случае исключения следует вернуть пустой список.
- getBookWithLessThanNPagesTitles возвращает список названий книг, число страниц которых не превышает значения n. В случае исключения вернуть пустой список.
- query делает запрос к BookShopApiи и сохраняет результат в поле классаlastResult. В случае исключения значение этого поля должно быть пустой строкой ("").
Полезные материалы:
- http://www.freeformatter.com/xml-formatter.html - для повышения читабельности xml кода.
- http://dom4j.sourceforge.net/dom4j-1.6.1/ - для удобного парсинга xml
- http://en.wikipedia.org/wiki/Regular_expression - при помощи регулярных выражений можно удобно найти необходимые элементы
- http://www.freeformatter.com/xpath-tester.html - позвляет быстро найти все искомые элементы, например //titleсразу находит все названия
Создать методы
- public int getTotalRecordsInResponse()
- public ArrayList<String> getPossibleBookTitles()
- public String getBookWithMostPagesTitle()
- public ArrayList<String> getPossibleAuthors()
- public ArrayList<String> getBookWithLessThanNPagesTitles()
- public void query(String search)
Пример вызова BookShopApi:
http://pastebin.com/9DcpBHe7
Шаблон
BookShop.java <source lang="java"> import java.util.ArrayList; import cs.ttu.ee.BookShopApi; import cs.ttu.ee.SimpleBookShop;
/**
* BookShop class. * Simplified implementation of BookShop * Does filtering and basic queries. */
public class BookShop extends SimpleBookShop {
/** * Instance of BookShopApi, used to access * Google Books */ private BookShopApi bookShopApi;
/** * Last api query result. */ private String lastResponse = "";
public BookShop(BookShopApi _bookShopApi) { bookShopApi = _bookShopApi; }
/** * Make api query. * Uses BookStoreApi functionality to get XML response from Google Books * Every time this function is called, latest XML state is saved. * If previous query failed lastResponse equals to empty string. * Otherwise lastResult is * @param search title of book */ public void query(String searchString) { // TODO: implement }
/** * Find total items matched by searchString. * Api uses paging, not all results are * displayed under result, however, total * results is displayed inside <totalItems> element * * If last query was unsuccessful, 0 is returned. * * @return Total items matched by query. */ public int getTotalRecordsInResponse() { // TODO: implement return Integer.MIN_VALUE; }
	
	/**
	 * Finds all possbile book titles.
	 * Duplicates may occur.
	 * 
	 * Title can be found inside <title> tag.
	 * If last query was unsuccessful, empty ArrayList is returned.
	 * 
	 * @return All possible book names matched by searchString
	 */
	public ArrayList<String> getPossibleBookTitles() {
		// TODO: implement
		return null;
	}
/** * Finds all authors found in last response. * Does not include duplicate authors. * If last query was unsuccessful, empty ArrayList is returned. * * Author can be found inside <authors> element. (Notice non plural form) * NB! Multiple <authors> element may occur. * * @return List of authors found in last response */ public ArrayList<String> getPossibleAuthors() { // TODO: implement return null; }
/** * Finds book with the most number of pages * * Page count can be found inside <pageCount> element * @return Title of book. */ public String getBookWithMostPagesTitle() { // TODO: implement return null; }
/** * Finds all book titles where pageCount < n * * Page count can be found inside <pageCount> element * @param n maximum amount of pages * @return list of books with less than n pages */ public ArrayList<String> getBookWithLessThanNPagesTitles(int n) { // TODO: implement return null; }
}
</source>
Main.java: <source lang="java"> import java.util.ArrayList;
import cs.ttu.ee.BookShopApi;
public class Main {
public static void main(String args[]) { BookShopApi bookShopApi = new BookShopApi(); BookShop studentBookShop = new BookShop(bookShopApi);
// Test your code here studentBookShop.query("Intermediate Java programming"); System.out.println(studentBookShop.getTotalRecordsInResponse()); System.out.println(studentBookShop.getPossibleBookTitles()); System.out.println(studentBookShop.getPossibleAuthors()); System.out.println(studentBookShop.getBookWithMostPagesTitle()); ArrayList<String> result = studentBookShop.getBookWithLessThanNPagesTitles(100); System.out.println(result); // etc ...
		
} } </source>