/*
* [ImportBiostar.java]
*
* Summary: Import all data about motherboards from the BioStar Website.
*
* 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-14 initial version
*/
package com.mindprod.mother;
import com.mindprod.common17.BigDate;
import com.mindprod.common17.ST;
import com.mindprod.csv.CSVReader;
import com.mindprod.htmlmacros.support.Configuration;
import com.mindprod.htmlmacros.support.ConfigurationForMindprod;
import com.mindprod.http.Get;
import com.mindprod.hunkio.HunkIO;
import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.System.*;
/**
* Import all data about motherboards from the BioStar Website.
*
* @author Roedy Green, Canadian Mind Products
* @version 1.0 2011-02-14 initial version
* @since 2011-02-14
*/
public class ImportBiostar extends ImportManufacturer
{
/**
* where master list of all Biostar motherboards is.
*/
private static final String[] INDEX_URLS = {
"http://www.biostar-usa.com/mbmain.asp",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=2",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=3",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=4",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=5",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=6",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=7",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=8",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=9",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=10",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=11",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=12",
"http://www.biostar-usa.com/app/en-us/mb/index.php?S_ID=13" };
/**
* mindprod configuration
*/
private static final Configuration configuration;
private static final File sourceDir;
/**
* looks for Audio channels
*/
private static final Pattern AUDIO_CHANNEL_FINDER = Pattern.compile(
"([\\.\\d]+)[\\- ]ch", Pattern.CASE_INSENSITIVE );
/**
* looks for info about the form factor
* >Micro ATX Form Factor Dimension: 23.5cm X 18.2cm
*/
private static final Pattern FORM_FACTOR_FINDER_L = Pattern.compile(
"[\\s>]+([\\p{Alnum}\\- ]+?)\\s*Form Factor\\s*(?:
)?(?:Dimension: )?([\\d\\.]+)\\s*(?:cm)?\\s*X\\s*" +
"([\\d\\.]+)",
Pattern.CASE_INSENSITIVE
);
// >ATX Form Factor Dimension: 30.5cm x 24.4cm ( W x L )
// Micro ATX form factor
24.5cm x 24.5cm ( W x L )
/**
* looks for info about the form factor
* >Micro ATX Form Factor Dimension: 23.5cm X 18.2cm
*/
private static final Pattern FORM_FACTOR_FINDER_S = Pattern.compile(
">([\\p{Alnum}\\- ]+?) Form Factor Dimension: ([\\d\\.]+)\\s*(?:cm)*\\s*X\\s*([\\d\\.]+)\\s*(?:cm)*",
Pattern.CASE_INSENSITIVE );
/**
* looks for count of IDE ports
*/
private static final Pattern IDE_FINDER = Pattern.compile(
"(\\d{1,2}) x [E]*IDE", Pattern.CASE_INSENSITIVE );
/**
* looks for max ram capacity
*/
private static final Pattern MAX_GIG_FINDER_L1 = Pattern.compile(
"([0-9\\.]{1,4})\\s*GB[\\p{Print}&&[^/]]", Pattern.CASE_INSENSITIVE );
/**
* looks for max ram capacity each slot is 1 GB.
*/
private static final Pattern MAX_GIG_FINDER_L2 = Pattern.compile(
"(\\d{1,3})[ x]+184-pin DDR slots", Pattern.CASE_INSENSITIVE );
/**
* looks for max ram capacity
*/
private static final Pattern MAX_GIG_FINDER_S = Pattern.compile(
"(?:Supports up to |DDR2:)(\\d{1,3})\\s*GB", Pattern.CASE_INSENSITIVE );
/**
* look for links like this: N4SIE-A7
*/
private static final Pattern MB_FINDER_L0 = Pattern.compile(
"([\\p{Alnum}\\-\\+\\s\\. ]+)" +
"",
Pattern.CASE_INSENSITIVE
);
/**
* look for links like this: TPower X58A
*/
private static final Pattern MB_FINDER_L1 = Pattern.compile(
"([\\p{Alnum}\\-\\+\\s\\. ]+?)",
Pattern.CASE_INSENSITIVE );
/**
* gets same of motherboard
*/
private static final Pattern MB_FINDER_S = Pattern.compile(
"\"name\": \"([\\p{Alnum} \\-]+) \\(rev\\. ([\\p{Digit}\\.]+)\\)\"," +
"\\s+\"value\": \"(\\p{Digit}+)\""
);
/**
* looks for info about RAM
*/
private static final Pattern MEMORY_TYPE_FINDER_L = Pattern.compile(
"(DDR2|DDR3|DDR|SDRAM)", Pattern.CASE_INSENSITIVE );
// Supports up to 2GB Memory
/**
* looks for info about RAM
*/
private static final Pattern MEMORY_TYPE_FINDER_S = Pattern.compile(
">(?:Support Dual Channel|Support Triple Channel|supported|Support|DIMM| x) (DDR2|DDR3|DDR|SDRAM)",
Pattern.CASE_INSENSITIVE );
/**
* looks for ram speed
*/
private static final Pattern RAM_SPEED_MHZ_FINDER_1 = Pattern.compile(
"(?:)?DDR[23]*(?:)?\\s*(?:up to )?((\\s*/\\s*|\\d{3,4}\\s*\\(OC\\)|\\d{3,4}\\s*\\(XMP\\)|\\d{3," +
"4}\\s*O\\.C\\.|OC\\d{3,4}+|\\d{3,4})+)",
Pattern.CASE_INSENSITIVE
);
/**
* looks for ram speed
*/
private static final Pattern RAM_SPEED_MHZ_FINDER_2 = Pattern.compile(
"PC((\\s*/\\s*|\\d{3,4})+)", Pattern.CASE_INSENSITIVE );
// PC2100/2700
private static final Pattern RAM_SPEED_MHZ_SPLITTER = Pattern.compile(
"\\s*/\\s*", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_L1 = Pattern.compile(
"(\\d{1,2}) SATA[2]* (?:3Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_L2 = Pattern.compile(
"SATA[2]* RAID \\(up to (\\d{1,2}) devices", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_L3 = Pattern.compile(
"(\\d{1,2}) x SATA[2]* (?:3Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_L4 = Pattern.compile(
"up to (\\d{1,2}) SATA[2]* devices", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_L5 = Pattern.compile(
"(\\d{1,2}) x Serial ATA Connectors", Pattern.CASE_INSENSITIVE );
// 4 x Serial ATA Connectors
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_S1 = Pattern.compile(
"(\\d{1,2}) SATA[2]* (connectors|devices)", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata2 ports
*/
private static final Pattern SATA2_FINDER_S2 = Pattern.compile(
"(\\d{1,2}) x SATA[2]* (?:3Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_L1 = Pattern.compile(
"(\\d{1,2}) SATA3 (?:6Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_L2 = Pattern.compile(
"SATA3 RAID \\(up to (\\d{1,2}) devices", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_L3 = Pattern.compile(
"(\\d{1,2}) x SATA3 (?:6Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_L4 = Pattern.compile(
"up to (\\d{1,2}) SATA3 devices", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_S1 = Pattern.compile(
"(\\d{1,2}) SATA3 (connectors|devices)", Pattern.CASE_INSENSITIVE );
/**
* looks for count of sata3 ports
*/
private static final Pattern SATA3_FINDER_S2 = Pattern.compile(
"(\\d{1,2}) x SATA3 (?:6Gb/s )?connector", Pattern.CASE_INSENSITIVE );
/**
* looks for socket
*/
private static final Pattern SOCKET_FINDER_L = Pattern.compile(
"socket\\s*[=:]\\s*([\\+ \\p{Alnum}]+)[\"&;<]", Pattern.CASE_INSENSITIVE );
/**
* looks for socket
*/
private static final Pattern SOCKET_FINDER_S = Pattern.compile(
"socket\\s*:\\s*([\\+ \\p{Alnum}]+)[\"&;<]", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Internal ports capacity
*/
private static final Pattern USB2_INTERNAL_FINDER_L1 = Pattern.compile(
"USB 2.0\\p{Print}+?(\\d+)[x ]*front", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Internal ports capacity
*/
private static final Pattern USB2_INTERNAL_FINDER_L2 = Pattern.compile(
"(\\d{1,2})[ x]*Front USB", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Rear ports capacity
*/
private static final Pattern USB2_INTERNAL_FINDER_L3 = Pattern.compile(
"(\\d{1,2})[ x]* USB 2.0 Header", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Internal ports capacity
*/
private static final Pattern USB2_INTERNAL_FINDER_S = Pattern.compile(
"(\\d{1,2})[ x]*USB 2.0 Header", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Rear ports capacity
*/
private static final Pattern USB2_REAR_FINDER_L1 = Pattern.compile(
"USB 2.0\\p{Print}+?\\((\\d{1,2})[x ]*rear", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Rear ports capacity
*/
private static final Pattern USB2_REAR_FINDER_L2 = Pattern.compile(
"(\\d{1,2})[ x]*Rear USB", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Rear ports capacity
*/
private static final Pattern USB2_REAR_FINDER_L3 = Pattern.compile(
"(\\d{1,2})[ x]* USB 2.0 Port", Pattern.CASE_INSENSITIVE );
/**
* looks for USB2Rear ports capacity
*/
private static final Pattern USB2_REAR_FINDER_S = Pattern.compile(
"(\\d{1,2})[ x]*USB 2\\.0 Port", Pattern.CASE_INSENSITIVE );
/**
* looks for USB3Internal ports capacity
*/
private static final Pattern USB3_INTERNAL_FINDER_L = Pattern.compile(
"(\\d{1,2}) USB3.0 ports on the front panel", Pattern.CASE_INSENSITIVE );
/**
* looks for USB3Internal ports capacity
*/
private static final Pattern USB3_INTERNAL_FINDER_S = Pattern.compile(
"(\\d{1,2})[ x]*USB 3.0 Header", Pattern.CASE_INSENSITIVE );
/**
* looks for USB3Rear ports capacity
*/
private static final Pattern USB3_REAR_FINDER_L = Pattern.compile(
"(\\d{1,2}) USB3.0 ports on the back panel", Pattern.CASE_INSENSITIVE );
/**
* looks for USB3Rear ports capacity
*/
private static final Pattern USB3_REAR_FINDER_S = Pattern.compile(
"(\\d{1,2})[ x]*USB 3\\.0 Port", Pattern.CASE_INSENSITIVE );
/**
* looks for integrated Video
*/
private static final Pattern VIDEO_FINDER = Pattern.compile(
"GRAPHICS