/* * [PersistConfigForReceiver.java] * * Summary: Save configuration for client in the registry. * * 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: * 10.2 2009-04-03 tidy up code to check presence of necessary files to make it more WORA. */ package com.mindprod.replicator; import com.mindprod.common18.ST; import java.util.Properties; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import static java.lang.System.*; /** * Save configuration for client in the registry. * * @author Roedy Green, Canadian Mind Products * @version 10.2 2009-04-03 tidy up code to check presence of necessary files to make it more WORA. * @since 2007 */ final class PersistConfigForReceiver extends ConfigForReceiver { /** * trim properties */ private static void trimProperties() { PROJECT_NAME = PROJECT_NAME.trim(); UNIQUE_PROJECT_NAME = UNIQUE_PROJECT_NAME.trim(); SUGGESTED_RECEIVER_BASE_DIR = SUGGESTED_RECEIVER_BASE_DIR.trim(); SUGGESTED_RECEIVER_ZIP_STAGING_DIR = SUGGESTED_RECEIVER_ZIP_STAGING_DIR.trim(); WEBSITE_ZIP_URL = WEBSITE_ZIP_URL.trim(); SUGGESTED_LAN_ZIP_URL = SUGGESTED_LAN_ZIP_URL.trim(); AUTHENTICATION = AUTHENTICATION.trim(); VIA = VIA.trim(); } /** * check that all system property from JNLP or -D command line are present. */ private static void verifyJNLPPropertiesAllSpecified() { if ( ST.isEmpty( PROJECT_NAME ) ) { err.println( "Missing JNLP/System property PROJECT_NAME" ); } if ( ST.isEmpty( UNIQUE_PROJECT_NAME ) ) { err.println( "Missing JNLP/System property UNIQUE_PROJECT_NAME" ); } if ( ST.isEmpty( SUGGESTED_RECEIVER_BASE_DIR ) ) { err.println( "Missing JNLP/System property SUGGESTED_RECEIVER_BASE_DIR" ); } if ( ST.isEmpty( SUGGESTED_RECEIVER_ZIP_STAGING_DIR ) ) { err.println( "Missing JNLP/System property SUGGESTED_RECEIVER_BASE_DIR " ); } if ( ST.isEmpty( SUGGESTED_LAN_ZIP_URL ) ) { err.println( "Missing JNLP/System property SUGGESTED_LAN_ZIP_URL" ); } if ( ST.isEmpty( AUTHENTICATION ) ) { err.println( "Missing JNLP/System property AUTHENTICATION" ); } if ( ST.isEmpty( VIA ) ) { err.println( "Missing JNLP/System property VIA" ); } } /** * Get preferences from registry */ @SuppressWarnings( { "NestedAssignment" } ) public static void getConfigFromRegistry() { // get object for storing preferences for MyClass Preferences userPrefs = Preferences.userRoot() .node( "/com/mindprod/replicator/" + UNIQUE_PROJECT_NAME ); if ( !( PREFS_EXIST = userPrefs.getBoolean( "PREFS_EXIST", false ) ) ) { // no prefs exist yet, so use defaults. return; } // PROJECT_NAME UNIQUE_PROJECT_NAME, WEBSITE_ZIP_URL, AUTHENTICATION are // not considered preferences. The user cannot change them. // configurable properties default to JNLP values if can't be found in // registry. USERID = userPrefs.get( "USERID", USERID ); PASSWORD = userPrefs.get( "PASSWORD", PASSWORD ); RECEIVER_BASE_DIR = userPrefs.get( "RECEIVER_BASE_DIR", RECEIVER_BASE_DIR ); RECEIVER_ZIP_STAGING_DIR = userPrefs.get( "RECEIVER_ZIP_STAGING_DIR", RECEIVER_ZIP_STAGING_DIR ); LAN_ZIP_URL = userPrefs.get( "LAN_ZIP_URL", LAN_ZIP_URL ); // RECEIVER_ZIP_URL is selected from LAN_ZIP_URL or WEBSITE_ZIP_URL // later. if ( ConfigForReceiver.viaCode.isKeepZipsConfigurable() ) { KEEP_ZIPS = userPrefs.getBoolean( "KEEP_ZIPS", KEEP_ZIPS ); } if ( ConfigForReceiver.viaCode.isUnpackZipsConfigurable() ) { UNPACK_ZIPS = userPrefs.getBoolean( "UNPACK_ZIPS", UNPACK_ZIPS ); } } /** * Get default values for properties from the JNLP file which show up as system properties. */ @SuppressWarnings( { "NestedAssignment" } ) public static void getJNLPConfig( Properties properties ) { // Get a list of all the system properties and their values // Ideally put there by JNLP file. PROJECT_NAME = properties.getProperty( "PROJECT_NAME" ); UNIQUE_PROJECT_NAME = properties.getProperty( "UNIQUE_PROJECT_NAME" ); SUGGESTED_RECEIVER_BASE_DIR = properties .getProperty( "SUGGESTED_RECEIVER_BASE_DIR" ); RECEIVER_BASE_DIR = SUGGESTED_RECEIVER_BASE_DIR; // may be overridden later from registry prefs SUGGESTED_RECEIVER_ZIP_STAGING_DIR = properties .getProperty( "SUGGESTED_RECEIVER_ZIP_STAGING_DIR" ); RECEIVER_ZIP_STAGING_DIR = SUGGESTED_RECEIVER_ZIP_STAGING_DIR; WEBSITE_ZIP_URL = properties.getProperty( "WEBSITE_ZIP_URL" ); SUGGESTED_LAN_ZIP_URL = properties.getProperty( "SUGGESTED_LAN_ZIP_URL" ); LAN_ZIP_URL = SUGGESTED_LAN_ZIP_URL; // may be overridden later from registry prefs KEEP_ZIPS = properties.getProperty( "KEEP_ZIPS", "false" ) .equals( "true" ); // may be overridden later from registry prefs UNPACK_ZIPS = properties.getProperty( "UNPACK_ZIPS", "true" ).equals( "true" ); // may be overridden later from registry prefs AUTHENTICATION = properties.getProperty( "AUTHENTICATION", "none" ); DEBUGGING = properties.getProperty( "DEBUGGING", "false" ) .equals( "true" ); VIA = properties.getProperty( "VIA", "website" ); verifyJNLPPropertiesAllSpecified(); trimProperties(); // do VIA last so that properties will be ready for VIA constructors. viaCode = ViaForReceiver.valueOfAlias( VIA ); } /** * save current preference in registry. */ public static void saveConfigInRegistry() { try { // get object for storing preferences for MyClass // We don't persist all parms. Some we always get fresh from the // JNLP // e.g. DEBUG, VIA, WEBSITE_URL. // UNIQUE_PROJECT_NAME will typically have a value like com.mindprod.replicator // or biz.SMEAR.GUAI-SMEAR Preferences userPrefs = Preferences.userRoot() .node( "/com/mindprod/replicator/" + UNIQUE_PROJECT_NAME ); userPrefs.putBoolean( "PREFS_EXIST", PREFS_EXIST ); userPrefs.put( "USERID", USERID ); userPrefs.put( "PASSWORD", PASSWORD ); userPrefs.put( "RECEIVER_BASE_DIR", RECEIVER_BASE_DIR ); userPrefs.put( "RECEIVER_ZIP_STAGING_DIR", RECEIVER_ZIP_STAGING_DIR ); userPrefs.put( "LAN_ZIP_URL", LAN_ZIP_URL ); if ( ConfigForReceiver.viaCode.isKeepZipsConfigurable() ) { userPrefs.put( "KEEP_ZIPS", KEEP_ZIPS ? "true" : "false" ); } if ( ConfigForReceiver.viaCode.isUnpackZipsConfigurable() ) { userPrefs.put( "UNPACK_ZIPS", UNPACK_ZIPS ? "true" : "false" ); } userPrefs.flush(); } catch ( BackingStoreException e ) { Replicator.fatal( "Could not save preferences in registry." + "\n" + e.getMessage() ); } } } // end PersistConfigForReceiver.java