/* * [QuoteAggregate.java] * * Summary: categories of quotations aggregates, defines names used on Quotation Macro. * * Copyright: (c) 2009-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.8 2009-02-06 include go package in ZIP bundle. */ package com.mindprod.htmlmacros.support; import java.io.File; /** * categories of quotations aggregates, defines names used on Quotation Macro. *

* Aggregates are made up of flocks which in turn are made of up individual quotations. * * @author Roedy Green, Canadian Mind Products * @version 1.8 2009-02-06 include go package in ZIP bundle. * @since 2009 */ public enum QuoteAggregate { // weights for each of the pools that make up the category, // e.g. environment is made up of ANIMALRIGHTS, ENVIRONMENT, EVOLUTION, and HARPER quotepools. // see also PSA for weights on quotes/ads in footers // Weights may be 0 or greater than 100. They may not be negative. // Weights are sorted in descending order, though that is not mandatory. // If weights are all divisible by some prime, it is best to divide them all by the prime to normalise them // and make them as small as possible. ABORTION( QuoteFlock.ABORTIONBYROEDY, 600, QuoteFlock.ABORTION, 200, QuoteFlock.TRUMP, 50, QuoteFlock.EUTHANASIABYROEDY, 15, QuoteFlock.HEALTH, 10, QuoteFlock.EUTHANASIA, 5, QuoteFlock.MISC, 5, QuoteFlock.POLITICS, 5, QuoteFlock.GUNS, 3, QuoteFlock.MISCBYROEDY, 2 ), ANIMALRIGHTS( QuoteFlock.ANIMALRIGHTSBYROEDY, 400, QuoteFlock.ANIMALRIGHTS, 200, QuoteFlock.ENVIRONMENTBYROEDY, 60, QuoteFlock.TRUMP, 50, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 50, QuoteFlock.POLITICSBYROEDY, 30, QuoteFlock.HEALTH, 10, QuoteFlock.ENVIRONMENT, 20, QuoteFlock.POLITICS, 20, QuoteFlock.GUNS, 10, QuoteFlock.MISC, 10, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 10, QuoteFlock.EUTHANASIABYROEDY, 6, QuoteFlock.EUTHANASIA, 5, QuoteFlock.MISCBYROEDY, 5 ), CANADA( QuoteFlock.CANADABYROEDY, 400, QuoteFlock.CANADA, 200, QuoteFlock.HEALTH, 50, QuoteFlock.TRUMP, 50, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 5, QuoteFlock.HARPER, 1, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 1 ), ENVIRONMENT( QuoteFlock.ENVIRONMENTBYROEDY, 400, QuoteFlock.ENVIRONMENT, 120, QuoteFlock.TRUMP, 50, QuoteFlock.EVOLUTIONBYROEDY, 30, QuoteFlock.ANIMALRIGHTSBYROEDY, 20, QuoteFlock.KLEIN, 20, QuoteFlock.ANIMALRIGHTS, 10, QuoteFlock.EVOLUTION, 10, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 10, QuoteFlock.CANADABYROEDY, 6, QuoteFlock.POLITICSBYROEDY, 6, QuoteFlock.HEALTH, 4, QuoteFlock.CANADA, 3, QuoteFlock.POLITICS, 3, QuoteFlock.GUNS, 2, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 2, QuoteFlock.HARPER, 1 ), EUTHANASIA( QuoteFlock.EUTHANASIABYROEDY, 600, QuoteFlock.EUTHANASIA, 200, QuoteFlock.TRUMP, 50, QuoteFlock.HEALTH, 50 ), EVOLUTION( QuoteFlock.EVOLUTIONBYROEDY, 400, QuoteFlock.EVOLUTION, 200, QuoteFlock.CREATIONISM, 100, QuoteFlock.CREATIONISMBYROEDY, 100, QuoteFlock.TRUMP, 50, QuoteFlock.MISC, 10, QuoteFlock.MISCBYROEDY, 5, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 5, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 1 ), GAY( QuoteFlock.SEXUALITYBYROEDY, 2500, QuoteFlock.HOMOPHOBIA, 2400, QuoteFlock.SEXUALITY, 1000, QuoteFlock.GAYMARRIAGE, 500, QuoteFlock.ABORTIONBYROEDY, 100, QuoteFlock.EUTHANASIABYROEDY, 80, QuoteFlock.EVOLUTIONBYROEDY, 70, QuoteFlock.TRUMP, 50, QuoteFlock.ABORTION, 50, QuoteFlock.CHRISTIAN, 50, QuoteFlock.EUTHANASIA, 50, QuoteFlock.EVOLUTION, 50, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 10, QuoteFlock.ANIMALRIGHTS, 2, QuoteFlock.ANIMALRIGHTSBYROEDY, 2, QuoteFlock.CANADA, 2, QuoteFlock.MISCBYROEDY, 2, QuoteFlock.CANADABYROEDY, 2, QuoteFlock.ENVIRONMENT, 2, QuoteFlock.ENVIRONMENTBYROEDY, 2, QuoteFlock.HEALTH, 2, QuoteFlock.MISC, 2, QuoteFlock.MONEY, 2, QuoteFlock.MONEYBYROEDY, 2, QuoteFlock.PATRIOTISM, 2, QuoteFlock.PATRIOTISMBYROEDY, 2, QuoteFlock.RELIGION, 2, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 2, QuoteFlock.HARPER, 1 ), GAYMARRIAGE( QuoteFlock.GAYMARRIAGE, 200, QuoteFlock.TRUMP, 15, QuoteFlock.HOMOPHOBIA, 1, QuoteFlock.RELIGION, 1, QuoteFlock.SEXUALITY, 1, QuoteFlock.SEXUALITYBYROEDY, 1 ), GENERAL( QuoteFlock.MONEYBYROEDY, 200, QuoteFlock.RELIGIONBYROEDY, 200, QuoteFlock.ENVIRONMENTBYROEDY, 180, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 150, QuoteFlock.TRUMP, 83, QuoteFlock.EUTHANASIABYROEDY, 75, QuoteFlock.POLITICSBYROEDY, 70, QuoteFlock.ENVIRONMENT, 60, QuoteFlock.EVOLUTIONBYROEDY, 60, QuoteFlock.ANIMALRIGHTSBYROEDY, 50, QuoteFlock.RELIGION, 45, QuoteFlock.CANADABYROEDY, 40, QuoteFlock.MONEY, 40, QuoteFlock.POLITICS, 35, QuoteFlock.HEALTH, 30, QuoteFlock.EVOLUTION, 30, QuoteFlock.ANIMALRIGHTS, 25, QuoteFlock.MISC, 25, QuoteFlock.ABORTIONBYROEDY, 24, QuoteFlock.JESUS, 20, QuoteFlock.EUTHANASIA, 20, QuoteFlock.HOMOPHOBIA, 20, QuoteFlock.KLEIN, 20, QuoteFlock.SEXUALITYBYROEDY, 20, QuoteFlock.CHRISTIAN, 18, QuoteFlock.GUNS, 15, QuoteFlock.MISCBYROEDY, 13, QuoteFlock.CREATIONISM, 10, QuoteFlock.CREATIONISMBYROEDY, 10, QuoteFlock.ABORTION, 8, QuoteFlock.CANADA, 5, QuoteFlock.ISRAEL, 5, QuoteFlock.PATRIOTISM, 5, QuoteFlock.ISLAM, 4, QuoteFlock.BIBLE, 2, QuoteFlock.ISRAELBYROEDY, 2, QuoteFlock.HARPER, 1, QuoteFlock.NAPOLEON, 1, QuoteFlock.PATRIOTISMBYROEDY, 1, QuoteFlock.SEPARATIONOFCHURCHANDSTATE, 1, QuoteFlock.SEXUALITY, 1, QuoteFlock.CHRISTMAS, PSA.NEAR_CHRISTMAS ? 500 : 1 ), ISRAEL( QuoteFlock.ISRAEL, 200, QuoteFlock.ISRAELBYROEDY, 150, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 30, QuoteFlock.WARBYROEDY, 30, QuoteFlock.TRUMP, 15 ), LIVINGLOVE( QuoteFlock.LIVINGLOVE, 100, QuoteFlock.SEXUALITYBYROEDY, 4, QuoteFlock.SEXUALITY, 1 ), MONEY( QuoteFlock.MONEYBYROEDY, 900, QuoteFlock.MONEY, 180, QuoteFlock.TRUMP, 66, QuoteFlock.POLITICSBYROEDY, 20, QuoteFlock.POLITICS, 10, QuoteFlock.HEALTH, 6, QuoteFlock.GUNS, 6, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 5, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 1, QuoteFlock.CHRISTMAS, PSA.NEAR_CHRISTMAS ? 600 : 1 ), POLITICS( QuoteFlock.POLITICSBYROEDY, 400, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 300, QuoteFlock.HEALTH, 100, QuoteFlock.POLITICS, 180, QuoteFlock.GUNS, 100, QuoteFlock.MONEYBYROEDY, 90, QuoteFlock.ENVIRONMENTBYROEDY, 60, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 60, QuoteFlock.TRUMP, 50, QuoteFlock.ABORTIONBYROEDY, 30, QuoteFlock.CANADABYROEDY, 20, QuoteFlock.ENVIRONMENT, 20, QuoteFlock.MONEY, 20, QuoteFlock.ABORTION, 10, QuoteFlock.CANADA, 10, QuoteFlock.ISRAEL, 10, QuoteFlock.ISRAELBYROEDY, 5, QuoteFlock.PATRIOTISM, 5, QuoteFlock.GANDHI, 1, QuoteFlock.HARPER, 1, QuoteFlock.NAPOLEON, 1, QuoteFlock.PATRIOTISMBYROEDY, 1, QuoteFlock.CHRISTMAS, PSA.NEAR_CHRISTMAS ? 400 : 1 ), PROGRAMMING( QuoteFlock.PROGRAMMING, 75, QuoteFlock.TRUMP, 50, QuoteFlock.ENVIRONMENTBYROEDY, 18, QuoteFlock.EUTHANASIABYROEDY, 15, QuoteFlock.ANIMALRIGHTSBYROEDY, 10, QuoteFlock.POLITICSBYROEDY, 10, QuoteFlock.PROGRAMMINGBYROEDY, 10, QuoteFlock.EVOLUTIONBYROEDY, 9, QuoteFlock.SEXUALITYBYROEDY, 8, QuoteFlock.ENVIRONMENT, 6, QuoteFlock.MONEYBYROEDY, 6, QuoteFlock.ANIMALRIGHTS, 5, QuoteFlock.EUTHANASIA, 5, QuoteFlock.POLITICS, 5, QuoteFlock.EVOLUTION, 3, QuoteFlock.HEALTH, 3, QuoteFlock.GUNS, 3, QuoteFlock.MISC, 2, QuoteFlock.SEXUALITY, 2, QuoteFlock.MONEY, 1, QuoteFlock.MISCBYROEDY, 1 ), RELIGION( QuoteFlock.RELIGIONBYROEDY, 1200, QuoteFlock.JESUS, 175, QuoteFlock.ISLAM, 60, QuoteFlock.RELIGION, 400, QuoteFlock.CREATIONISM, 200, QuoteFlock.CREATIONISMBYROEDY, 200, QuoteFlock.TRUMP, 166, QuoteFlock.EUTHANASIABYROEDY, 150, QuoteFlock.EVOLUTIONBYROEDY, 100, QuoteFlock.EUTHANASIA, 50, QuoteFlock.EVOLUTION, 50, QuoteFlock.GAYMARRIAGE, 50, QuoteFlock.SEXUALITYBYROEDY, 40, QuoteFlock.CHRISTIAN, 20, QuoteFlock.HOMOPHOBIA, 20, QuoteFlock.SEXUALITY, 10, QuoteFlock.WARBYROEDY, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 5, QuoteFlock.BIBLE, 2, QuoteFlock.GANDHI, 2, QuoteFlock.WAR, PSA.NEAR_REMEMBRANCE_DAY ? 500 : 1, QuoteFlock.CHRISTMAS, PSA.NEAR_CHRISTMAS ? 1200 : 1, QuoteFlock.SEPARATIONOFCHURCHANDSTATE, 1 ), // an aggregate only, no corresponding quote flock. , REMEMBRANCE( QuoteFlock.WARBYROEDY, 1000, QuoteFlock.WAR, 200, QuoteFlock.TRUMP, 83, QuoteFlock.PATRIOTISM, 20, QuoteFlock.PATRIOTISMBYROEDY, 10 ); /** * which collections make up this aggregate */ private final QuoteFlock[] flocksForThisAggregate; /** * weights we want in aggregates for various flock categories, how frequently the collections are chosen * Other configurable weights include: * * @see PSA#FOOTER_QUOTE_WEIGHT * @see PSA#NONMIL_WEIGHT * @see PSAType */ private int[] weightsForAggregate; /** * constructor * * @param alterate QuoteFlock, weight */ QuoteAggregate( Object... pairs ) { assert ( pairs.length & 1 ) == 0 : "Must have pairs of Flock/weight"; int p2 = pairs.length / 2; this.flocksForThisAggregate = new QuoteFlock[ p2 ]; this.weightsForAggregate = new int[ p2 ]; for ( int i = 0; i < p2; i++ ) { flocksForThisAggregate[ i ] = ( QuoteFlock ) pairs[ i * 2 ]; } for ( int i = 0; i < p2; i++ ) { weightsForAggregate[ i ] = ( Integer ) pairs[ i * 2 + 1 ]; } } /** * Get a random quotation for the file. Macro not yet expanded. * * @param changeIntervalInMillis how often to change the ad or quotation. * @param fileBeingDistributed the file currently being processed. * * @return the text of a quotation including

...
* @see PSA#psaOrQuoteOrNonMil(QuoteAggregate, java.io.File, java.io.File) */ @SuppressWarnings( { "SameParameterValue" } ) public String getRandomQuotationForFile( long changeIntervalInMillis, File fileBeingDistributed ) { // use name change interval for selecting flock in pool, and for quote in flock. final int hash = Randomiser.getHashForFilename( changeIntervalInMillis, fileBeingDistributed ); assert this.weightsForAggregate != null : "weights for category not defined"; assert this.weightsForAggregate.length == this.flocksForThisAggregate.length : "Flock weights out of sync"; final int flockIndex = Randomiser.getWeightedSelectorIndexForHash( hash, this.weightsForAggregate ); final QuoteFlock chosenFlock = flocksForThisAggregate[ flockIndex ]; return chosenFlock.getRandomQuotationForFile( changeIntervalInMillis, fileBeingDistributed ); } }