/* * [Seller.java] * * Summary: enum constants for motherboard sellers. * * Copyright: (c) 2011-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.7+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2011-02-21 initial version. */ package com.mindprod.mother; /** * enum constants for motherboard sellers. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2011-02-21 initial version. * @since 2011-02-21 */ public enum Seller { AMAZON( "USD", "amazon.com" ) { String sellerURL( String sellerPartNo ) { return "http://www.amazon.com/gp/product/" + sellerPartNo + "?ie=UTF8&tag=canadianmindprod&linkCode=as2&camp=1789&creative=9325&" + "creativeASIN=" + sellerPartNo; } }, AMAZONCA( "CAD", "amazon.ca" ) { String sellerURL( String sellerPartNo ) { return "http://www.amazon.ca/gp/product/" + sellerPartNo + "?ie=UTF8&tag=canadianmin07-20&linkCode=as2&camp=15121&" + "creative=330641&creativeASIN=" + sellerPartNo; } }, AMAZONDE( "EUR", "amazon.de" ) { String sellerURL( String sellerPartNo ) { return "http://www.amazon.de/gp/product/" + sellerPartNo + "?ie=UTF8&tag=canadianmin0b-21&linkCode=as2&camp=1638&creative=6742&" + "creativeASIN=" + sellerPartNo; } }, AMAZONFR( "EUR", "amazon.fr" ) { String sellerURL( String sellerPartNo ) { return "http://www.amazon.fr/gp/product/" + sellerPartNo + "?ie=UTF8&tag=canamindprod-21&linkCode=as2&camp=1624&creative=6746&" + "creativeASIN=" + sellerPartNo; } }, AMAZONUK( "GBP", "amazon.co.uk" ) { String sellerURL( String sellerPartNo ) { return "http://www.amazon.co.uk/gp/product/" + sellerPartNo + "?ie=UTF8&tag=canadianmindp-21&linkCode=as2&camp=1634&creative=6738&" + "creativeASIN=" + sellerPartNo; } }, TIGERCA( "CAD", "TigerDirect.ca" ) { String sellerURL( String sellerPartNo ) { return "http://click.linksynergy.com/fs-bin/click?id=vSCiQT/Cnuo&subid=&offerid=102328" + ".1&type=10&tmpid=3879&RD_PARM1=http%3A%2F%2Fwww.tigerdirect" + ".ca%2Fapplications%2FSearchTools%2Fitem-details.asp%3FEdpNo%3D" + sellerPartNo; } }; /** * cannot use String... here, only in parm list alternate input names for the alias */ private final String[] aliases; /** * unit of currency this vendor uses in posted prices. */ private final String currency; /** * constructor for an enum constant * * @param aliases other names for string input */ Seller( String currency, String... aliases ) { this.currency = currency; this.aliases = aliases; } /** * convert alias string to equivalent canonical enum constant, like valueOf but accepts aliases too, and does not * care about case. * * @param s alias as string * * @return equivalent AppCat enum constant */ public static Seller valueOfAlias( String s ) { s = s.trim(); try { return valueOf( s.toUpperCase() ); } catch ( IllegalArgumentException e ) { // usual method failed, try looking up alias // This seems long winded, why no HashSet? // Because Java won't let me access a static common // lookup in the enum constructors. for ( Seller candidateEnum : Seller.values() ) { for ( String candidateString : candidateEnum.aliases ) { if ( candidateString.equalsIgnoreCase( s ) ) { return candidateEnum; } } } // fell out the bottom of search over all enums and aliases // give up throw new IllegalArgumentException( "unknown Seller: " + s ); } } /** * get unit of currency */ public String getCurrency() { return currency; } /** * ordinary toString * * @return upper and lower case name for the manufacturer. */ public String toString() { if ( aliases.length > 0 ) { return aliases[ 0 ]; } else { return name(); } } /** * get the url of where to buy the motherboard at this seller given the part no. * * @param sellerPartNo seller's proprietary part no. e.g. Amazon ASIN number. * * @return url */ abstract String sellerURL( String sellerPartNo ); }