/* * [RefreshInserts.java] * * Summary: Refresh Insert/Cite with latest descriptions/prices. * * Copyright: (c) 2013-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 2013-02-03 initial version */ package com.mindprod.stores; import com.mindprod.common18.EIO; import com.mindprod.common18.Misc; import com.mindprod.fastcat.FastCat; import com.mindprod.filter.ExtensionListFilter; import com.mindprod.htmlmacros.macro.Global; import com.mindprod.htmlmacros.support.ConfigurationForMindprod; import com.mindprod.hunkio.HunkIO; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import static java.lang.System.*; /** * Refresh Insert/Cite with latest descriptions/prices. *

*
* Refreshes title and price on Cite and Insert macro from ElectronicsHead, BookHead. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2013-02-03 initial version * @since 2013-02-03 */ public class RefreshInserts { // TidyBookMacros: reflow Book macros. Update BookHead with recent title and published. Add missing published to BookHead. // RefreshInserts: refresh data on Insert macros from book page. Add missing published to book Insert. // InsertBookMarkers: put between books to make it easier to sort. One shot. // SortBooks: sort book Inserts on page so most recently published are first. // ProofreadInserts: check that sort worked. /** * true to get extra output */ private static final boolean DEBUGGING = false; /** * pieces used to compose regexes */ private static final String BRACE_GROUP = "\\s+\\{([\\p{Alnum} \\n!-@\\[-_\\|~]*)\\}"; private static final String IGNORED_PRICE = "(?:\\s+[\\$\\.,0-9]+)?"; private static final String MACRO = ""; /** * find BookHead macro */ private static final Pattern FIND_BOOK_HEAD = Pattern.compile( MACRO + "\\s+BookHead" + BRACE_GROUP + PUBLISHED + TAIL ); /** * find Cite macro */ private static final Pattern FIND_CITE = Pattern.compile( MACRO + "\\s+Cite" + PARTNO + BRACE_GROUP + TAIL ); /** * find DVDHead macro */ private static final Pattern FIND_DVD_HEAD = Pattern.compile( MACRO + "\\s+DVDHead" + BRACE_GROUP + TAIL ); /** * find ElectronicHead macro */ private static final Pattern FIND_ELECTRONIC_HEAD = Pattern.compile( MACRO + "\\s+ElectronicHead" + BRACE_GROUP + MANDATORY_PRICE + TAIL ); /* * find Insert macro */ private static final Pattern FIND_INSERT = Pattern.compile( MACRO + "\\s+Insert" + PARTNO + BRACE_GROUP + IGNORED_PRICE + TAIL ); /** * which dirs we scan of Insert and Cite macros */ private static List dirsToProcess; /** * dir where Book macros are kept. */ private static File bookDir; /** * dir where DVD macros are kept. */ private static File dvdDir; /** * dir where electronic macros are kept in files of form B0057A5RA6.html */ private static File electronicDir; /** * webrootDir directory of website */ private static File webrootDir; /** * scan file contents for "; m.appendReplacement( sb, Matcher.quoteReplacement( replacement ) ); } m.appendTail( sb ); return sb.toString(); } /** * scan file contents for " ); final String replacement = r.toString(); m.appendReplacement( sb, Matcher.quoteReplacement( replacement ) ); } m.appendTail( sb ); return sb.toString(); } /** * copy from BookHead to Insert. * * @param args not used * * @throws java.io.IOException if trouble reading or writing files containing Book macros. */ public static void main( String[] args ) throws IOException { Global.installConfiguration( new ConfigurationForMindprod() ); // combine dirsWithMacros and dirsWithIncludes into dirsToProcess; final List a = Global.configuration.getDirsContainingHTMLMacros(); final List b = Global.configuration.getDirsContainingIncludes(); dirsToProcess = new ArrayList<>( a.size() + b.size() ); dirsToProcess.addAll( a ); dirsToProcess.addAll( b ); webrootDir = new File( Global.configuration.getLocalWebrootWithSlashes() ); electronicDir = new File( webrootDir, "electronic" ); bookDir = new File( webrootDir, "book" ); dvdDir = new File( webrootDir, "dvd" ); if ( DEBUGGING ) { out.println( FIND_INSERT ); out.println( FIND_CITE ); out.println( FIND_BOOK_HEAD ); out.println( FIND_DVD_HEAD ); out.println( FIND_ELECTRONIC_HEAD ); } for ( String dirname : dirsToProcess ) { final File dir = new File( webrootDir, dirname ); // out.println("Processing " + dir ); final String[] filenames = dir.list( new ExtensionListFilter( "html" ) ); for ( String filename : filenames ) { final File file = new File( dir, filename ); final String big = HunkIO.readEntireFile( file, HunkIO.UTF8 ); final String big2 = scanForInsertMacros( big, file ); final String big3 = scanForCiteMacros( big2, file ); if ( !big3.equals( big ) ) { out.println( "refreshing: " + EIO.getCanOrAbsPath( file ) ); HunkIO.writeEntireFile( file, big3 ); } } // end scan all files in dir } // end scan all dirs. Misc.trackLastThread(); System.exit( 0 ); } // end main }