All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.sis.console.ResourcesDownloader Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.sis.console;

import java.util.Set;
import java.util.Map;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
import java.io.Console;
import org.apache.sis.util.internal.X364;
import org.apache.sis.system.Fallback;
import org.apache.sis.setup.OptionalInstallations;


/**
 * A provider for data licensed under different terms of use than the Apache license.
 * This class is in charge of downloading the data if necessary and asking user's agreement
 * before to install them. Authorities managed by the current implementation are:
 *
 * 
    *
  • {@code "EPSG"} for the EPSG geodetic dataset.
  • *
* * @author Martin Desruisseaux (Geomatys) * @version 1.1 * @since 0.7 */ @Fallback public class ResourcesDownloader extends OptionalInstallations { /** * The console to use for printing EPSG terms of use and asking for agreement, or {@code null} if none. */ private final Console console; /** * The locale to use for text display. */ private final Locale locale; /** * {@code true} if colors can be applied for ANSI X3.64 compliant terminal. */ private final boolean colors; /** * The localized answers expected from the users. Keys are words like "Yes" or "No" * and boolean values are the meaning of the keys. */ private final Map answers = new HashMap<>(); /** * Creates a new installation scripts provider. */ public ResourcesDownloader() { super("text/plain"); final CommandRunner command = CommandRunner.instance; if (command != null) { locale = command.locale; colors = command.colors; } else { locale = Locale.getDefault(); colors = false; } console = System.console(); } /** * Returns the locale to use for messages shown to the user. * * @return the locale of messages shown to the user. */ @Override public Locale getLocale() { return locale; } /** * Returns the name of the authority who provides data under non-Apache terms of use. * If this {@code ResourcesDownloader} cannot ask user's agreement because there is * no {@link Console} attached to the current Java virtual machine, then this method * returns an empty set. * * @return {@code "EPSG"} or an empty set. */ @Override public Set getAuthorities() { return (console != null) ? super.getAuthorities() : Set.of(); } /** * Asks to the user if (s)he agree to download and install the resource for the given authority. * This method may be invoked twice for the same {@code authority} argument: * first with a null {@code license} argument for asking if the user agrees to download the data, * then with a non-null {@code license} argument for asking if the user agrees with the license terms. */ @Override protected boolean askUserAgreement(final String authority, final String license) { if (console == null) { return false; } final ResourceBundle resources = ResourceBundle.getBundle("org.apache.sis.console.Messages", getLocale()); if (answers.isEmpty()) { for (final String r : resources.getString("yes").split("\\|")) answers.put(r, Boolean.TRUE); for (final String r : resources.getString("no" ).split("\\|")) answers.put(r, Boolean.FALSE); } final String textColor, linkColor, linkOff, actionColor, resetColor; if (colors) { textColor = X364.FOREGROUND_YELLOW .sequence(); linkColor = X364.UNDERLINE .sequence(); linkOff = X364.NO_UNDERLINE .sequence(); actionColor = X364.FOREGROUND_GREEN .sequence(); resetColor = X364.FOREGROUND_DEFAULT.sequence(); } else { textColor = linkColor = linkOff = actionColor = resetColor = ""; } /* * Show the question. */ final String prompt, action; if (license == null) { prompt = "download"; action = "downloading"; console.format(resources.getString("install"), textColor, getSpaceRequirement(authority), linkColor, destinationDirectory, linkOff, resetColor); } else { prompt = "accept"; action = "installing"; console.format("%n").writer().write(license); console.format("%n"); } /* * Ask user agreement. */ Boolean answer; do { answer = answers.get(console.readLine(resources.getString(prompt), textColor, resetColor).toLowerCase(getLocale())); } while (answer == null); if (answer) { console.format(resources.getString(action), actionColor, resetColor); } else { console.format("%n"); } return answer; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy