Skip to content

Commit

Permalink
Repurposed Fallback provider
Browse files Browse the repository at this point in the history
  • Loading branch information
naotoj committed Nov 1, 2023
1 parent 784dd23 commit 5c82ad5
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ public LocaleProviderAdapter.Type getAdapterType() {
return LocaleProviderAdapter.Type.CLDR;
}

@Override
public BreakIteratorProvider getBreakIteratorProvider() {
return null;
}

@Override
public CalendarDataProvider getCalendarDataProvider() {
if (calendarDataProvider == null) {
Expand Down Expand Up @@ -142,6 +147,11 @@ public CalendarNameProvider getCalendarNameProvider() {
return calendarNameProvider;
}

@Override
public CollatorProvider getCollatorProvider() {
return null;
}

@Override
public TimeZoneNameProvider getTimeZoneNameProvider() {
if (timeZoneNameProvider == null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand All @@ -25,29 +25,19 @@

package sun.util.locale.provider;

import java.util.Collections;
import java.util.Locale;
import java.util.Set;

/**
* FallbackProviderAdapter implementation.
/*
* FallbackProviderAdapter implementation. Fallback provider serves the
* following purposes:
*
* @author Naoto Sato
* - Locale data for ROOT, in case CLDR provider is absent.
* - Locale data for BreakIterator/Collator resources for all locales.
* - "Gan-nen" support for SimpleDateFormat (provides "FirstYear" for
* Japanese locales.
*/
public class FallbackLocaleProviderAdapter extends JRELocaleProviderAdapter {

/**
* Supported language tag set.
*/
private static final Set<String> rootTagSet =
Collections.singleton(Locale.ROOT.toLanguageTag());

/**
* Fallback provider only provides the ROOT locale data.
*/
private final LocaleResources rootLocaleResources =
new LocaleResources(this, Locale.ROOT);

/**
* Returns the type of this LocaleProviderAdapter
*/
Expand All @@ -56,18 +46,13 @@ public LocaleProviderAdapter.Type getAdapterType() {
return Type.FALLBACK;
}

@Override
public LocaleResources getLocaleResources(Locale locale) {
return rootLocaleResources;
}

@Override
protected Set<String> createLanguageTagSet(String category) {
return rootTagSet;
}

@Override
public boolean isSupportedProviderLocale(Locale locale, Set<String>langtags) {
return Locale.ROOT.equals(locale);
return switch (category) {
case "BreakIteratorInfo", "BreakIteratorRules", "CollationData"
-> super.createLanguageTagSet(category);
case "FormatData" -> Set.of("ja-JP", "ja", "und");
default -> Set.of("und");
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,16 +140,12 @@ public String getTextResourcesPackage() {
}
}

if (!typeList.isEmpty()) {
// bona fide preference exists
if (!typeList.contains(Type.CLDR)) {
// Append FALLBACK as the last resort when no ResourceBundleBasedAdapter is available.
typeList.add(Type.FALLBACK);
}
} else {
if (typeList.isEmpty()) {
// Default preference list.
typeList.add(Type.CLDR);
}
// always append FALLBACK
typeList.add(Type.FALLBACK);
adapterPreference = Collections.unmodifiableList(typeList);

// Emit logs, if any, after 'adapterPreference' is initialized which is needed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
* Copyright (c) 1996, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

/*
* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
* (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
*
* The original version of this source code and documentation
* is copyrighted and owned by Taligent, Inc., a wholly-owned
* subsidiary of IBM. These materials are provided under terms
* of a License Agreement between Taligent and Sun. This technology
* is protected by multiple US and International patents.
*
* This notice and attribution to Taligent may not be removed.
* Taligent is a registered trademark of Taligent, Inc.
*
*/

/*
* COPYRIGHT AND PERMISSION NOTICE
*
* Copyright (C) 1991-2012 Unicode, Inc. All rights reserved. Distributed under
* the Terms of Use in http://www.unicode.org/copyright.html.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of the Unicode data files and any associated documentation (the "Data
* Files") or Unicode software and any associated documentation (the
* "Software") to deal in the Data Files or Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, and/or sell copies of the Data Files or Software, and
* to permit persons to whom the Data Files or Software are furnished to do so,
* provided that (a) the above copyright notice(s) and this permission notice
* appear with all copies of the Data Files or Software, (b) both the above
* copyright notice(s) and this permission notice appear in associated
* documentation, and (c) there is clear notice in each modified Data File or
* in the Software as well as in the documentation associated with the Data
* File(s) or Software that the data or software has been modified.
*
* THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
* CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THE DATA FILES OR SOFTWARE.
*
* Except as contained in this notice, the name of a copyright holder shall not
* be used in advertising or otherwise to promote the sale, use or other
* dealings in these Data Files or Software without prior written authorization
* of the copyright holder.
*/

package sun.text.resources.ext;

import sun.util.resources.ParallelListResourceBundle;

public class FormatData_ja extends ParallelListResourceBundle {
/**
* Overrides ParallelListResourceBundle
*/
@Override
protected final Object[][] getContents() {
return new Object[][] {
{ "japanese.FirstYear",
new String[] { // first year name
"\u5143", // "Gan"-nen
}
},
};
}
}

0 comments on commit 5c82ad5

Please sign in to comment.