/* * [Binding.java] * * Summary: enum for various types of book "binding", including kindle etc. that Amazon offers. * * Copyright: (c) 2012-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2012-03-15 initial version */ package com.mindprod.aws; /** * enum for various types of book "binding", including kindle etc. that Amazon offers. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2012-03-15 * @since 2012-03-15 */ public enum Binding { PAPERBACK( "Card Book", "Loose Leaf", "Mass Market Paperback", "Paperback Bunko", "Paperback", "Perfect Paperback", "Pocket Book", "Print on Demand (Paperback)", "Print on Demand", "Rag Book" ), // Japanese small HARDCOVER( "Hardcover", "Board Book", "Board book", "Hardcover-spiral", "Imitation Leather", "Kitchen", "Leather Bound", "Library Binding", "Pamphlet", "School & Library Binding", "Textbook Binding", "Turtleback" ), KINDLE( "Kindle Edition", "Kindle Edition with Audio/Video" ), EBOOK( "ebook" ), AUDIO( "Audible Audio Edition", "Audio CD Library Binding", "Audio CD", "Audio Cassette", "CD-ROM", "MP3 CD Library Binding", "MP3 CD", "Preloaded Digital Audio Player" ), WEBBOOK( "webbook" ), OTHER( "3.5\" disk", "Articifial Leather", // incorrect on purpose to match bad Amazon spelling "Artificial Leather", "Calendar", "Comic", "Digital", "Diskette", "Misc. Supplies", "Office Product", "Printed Access Code", "Tankobon Hardcover" /* Japanese */, "Toy", "Transparency", "Unbound", "Unknown Binding", "Wall Chart" ); /** * various names this binding goes by */ private final String[] bindingNames; private Binding( String... bindingNames ) { this.bindingNames = bindingNames; } /** * look for a Binding exactly matching the main bindingNames for the binding * * @param bindingName binding bindingNames to look for. null ok. * * @return corresponding Binding or null. */ static Binding approximateMatch( String bindingName ) { if ( bindingName == null ) { return null; } for ( Binding b : Binding.values() ) { for ( String d : b.bindingNames ) { if ( d.equalsIgnoreCase( bindingName ) ) { return b; } } } return null; } /** * look for a Binding exactly matching the main bindingNames for the binding. * These are preferable when deciding which asin to take. * * @param bindingName binding bindingNames to look for. null ok. * * @return corresponding binding or null. */ static Binding exactMatch( String bindingName ) { if ( bindingName == null ) { return null; } for ( Binding b : Binding.values() ) { if ( b.bindingNames[ 0 ].equalsIgnoreCase( bindingName ) ) { return b; } } return null; } }