<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITI0011RUS%3Atask_10</id>
	<title>ITI0011RUS:task 10 - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITI0011RUS%3Atask_10"/>
	<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_10&amp;action=history"/>
	<updated>2026-05-14T05:34:45Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_10&amp;diff=2183&amp;oldid=prev</id>
		<title>Aleksandr: Uus lehekülg: &#039;Срок сдачи упражнения &#039;&#039;&#039;15-е занятие (26 марта)&#039;&#039;&#039;.  Общая информация об упражнениях: ITI0011RUS_Practice.&lt;br/&gt; ...&#039;</title>
		<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_10&amp;diff=2183&amp;oldid=prev"/>
		<updated>2015-03-24T21:47:02Z</updated>

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