Package com.eclipsesource.tabris.demos.ui

Source Code of com.eclipsesource.tabris.demos.ui.BookProvider$BookData

/*******************************************************************************
* Copyright (c) 2013 EclipseSource and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package com.eclipsesource.tabris.demos.ui;

import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_BROOK;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_GAIGE;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_HAINY;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_KOCH;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_RUSSEL;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_SHIELDS;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOK_SLOSS;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_AFTER_VISITING;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_AUTOBIOGRAFY;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_HISTORY;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_HOW_LITERATUR;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_SCHRODER;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_THE_DINNER;
import static com.eclipsesource.tabris.demos.ui.Constants.IMAGE_VAMPIRES;
import static java.util.regex.Pattern.CASE_INSENSITIVE;
import static java.util.regex.Pattern.compile;
import static java.util.regex.Pattern.quote;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;

import com.eclipsesource.tabris.ui.action.Proposal;

public class BookProvider {

  private static class BookData {

    private final String title;
    private final String author;
    private final String imagePath;

    public BookData( String title, String author, String imagePath ) {
      this.title = title;
      this.author = author;
      this.imagePath = imagePath;
    }
  }
  private static Map<String, BookData> bookData = createBookData();

  private static Map<String, BookData> createBookData() {
    Map<String, BookData> data = new HashMap<String, BookData>();
    data.put( BOOK_GAIGE, new BookData( "Schroder: A Novel", "Amity Gaige", IMAGE_SCHRODER ) );
    data.put( BOOK_HAINY, new BookData( "After Visiting Friends: A Son's Story",
                                        "Michael Hainey",
                                        IMAGE_AFTER_VISITING ) );
    data.put( BOOK_RUSSEL, new BookData( "Vampires in the Lemon Grove: Stories",
                                         "Karen Russell",
                                         IMAGE_VAMPIRES ) );
    data.put( BOOK_BROOK,
              new BookData( "A History of Future Cities", "Daniel Brook", IMAGE_HISTORY ) );
    data.put( BOOK_SLOSS, new BookData( "Autobiography of Us: A Novel",
                                        "Aria Beth Sloss",
                                        IMAGE_AUTOBIOGRAFY ) );
    data.put( BOOK_SHIELDS, new BookData( "How Literature Saved My Life",
                                          "David Shields",
                                          IMAGE_HOW_LITERATUR ) );
    data.put( BOOK_KOCH, new BookData( "The Dinner", "Herman Koch", IMAGE_THE_DINNER ) );
    return data;
  }

  public static List<Book> getBooks( Display display ) {
    List<Book> books = new ArrayList<Book>();
    Book bookSchroder = createBook( display, bookData.get( BOOK_GAIGE ) );
    Book bookAfterVisiting = createBook( display, bookData.get( BOOK_HAINY ) ).setFavorite( true );
    Book bookVampires = createBook( display, bookData.get( BOOK_RUSSEL ) ).setFavorite( true );
    Book bookHistory = createBook( display, bookData.get( BOOK_BROOK ) ).setFavorite( true )
      .setPopular( true );
    Book bookAutobiography = createBook( display, bookData.get( BOOK_SLOSS ) ).setPopular( true );
    Book bookLiteratur = createBook( display, bookData.get( BOOK_SHIELDS ) ).setPopular( true );
    Book bookDinner = createBook( display, bookData.get( BOOK_KOCH ) ).setPopular( true );
    relate( bookVampires, bookAfterVisiting );
    relate( bookVampires, bookAutobiography );
    relate( bookSchroder, bookAfterVisiting );
    relate( bookHistory, bookLiteratur );
    relate( bookHistory, bookAutobiography );
    relate( bookHistory, bookAfterVisiting );
    books.add( bookSchroder );
    books.add( bookAfterVisiting );
    books.add( bookVampires );
    books.add( bookHistory );
    books.add( bookAutobiography );
    books.add( bookLiteratur );
    books.add( bookDinner );
    return books;
  }

  private static Book createBook( Display display, BookData data ) {
    Image image = new Image( display, BookProvider.class.getResourceAsStream( data.imagePath ) );
    return new Book( data.title, data.author, image );
  }

  private static void relate( Book book1, Book book2 ) {
    book1.getRelated().add( book2 );
    book2.getRelated().add( book1 );
  }

  public static List<Proposal> findBookTitles( Display display, final String query ) {
    List<Book> books = BookProvider.getBooks( display );
    final List<Proposal> matches = new ArrayList<Proposal>();
    for( Book book : books ) {
      if( contains( book.getTitle(), query ) ) {
        matches.add( new Proposal( book.getTitle() ) );
      }
    }
    return matches;
  }

  public static List<Book> findBooks( Display display, final String query ) {
    List<Book> books = BookProvider.getBooks( display );
    final List<Book> matches = new ArrayList<Book>();
    for( Book book : books ) {
      if( contains( book.getTitle(), query ) ) {
        matches.add( book );
      }
    }
    return matches;
  }

  private static boolean contains( String title, String query ) {
    return compile( quote( query ), CASE_INSENSITIVE ).matcher( title ).find();
  }

  private BookProvider() {
    // prevent instantiation
  }
}
TOP

Related Classes of com.eclipsesource.tabris.demos.ui.BookProvider$BookData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.