提交 ad90e258 编写于 作者: J jrose

Merge

......@@ -93,4 +93,6 @@ e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
ecab7eefb8f2326fd90fb632f47f1b6f81e928f8 jdk7-b119
37d74e29687cf07c2bf9411af58c7e42440855c3 jdk7-b120
a661d8587b5d8986aacae086f5df66af9e1a96b1 jdk7-b121
......@@ -83,14 +83,19 @@ ifndef CLOSED_SRC
CLOSED_SRC = $(BUILDDIR)/../src/closed
endif
# If we have no closed directory, force it to an openjdk build
CLOSED_SRC_DIR_EXISTS := $(shell \
if [ -d $(CLOSED_SRC) ] ; then \
echo true; \
else \
echo false; \
fi)
ifeq ($(CLOSED_SRC_DIR_EXISTS), false)
# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any
# closed directory.
ifneq ($(CLOSED_SRC_INCLUDED), true)
CLOSED_SRC_INCLUDED := $(shell \
if [ -d $(CLOSED_SRC) ] ; then \
echo true; \
else \
echo false; \
fi)
endif
# Set OPENJDK based on CLOSED_SRC_INCLUDED
ifeq ($(CLOSED_SRC_INCLUDED), false)
OPENJDK = true
endif
......
......@@ -85,6 +85,7 @@ FILES_src = \
sun/io/ByteToCharCp500.java \
sun/io/ByteToCharCp737.java \
sun/io/ByteToCharCp775.java \
sun/io/ByteToCharCp833.java \
sun/io/ByteToCharCp834.java \
sun/io/ByteToCharCp838.java \
sun/io/ByteToCharCp850.java \
......@@ -214,6 +215,7 @@ FILES_src = \
sun/io/CharToByteCp500.java \
sun/io/CharToByteCp737.java \
sun/io/CharToByteCp775.java \
sun/io/CharToByteCp833.java \
sun/io/CharToByteCp834.java \
sun/io/CharToByteCp838.java \
sun/io/CharToByteCp850.java \
......@@ -331,6 +333,7 @@ FILES_gen_extcs = \
sun/nio/cs/ext/IBM420.java \
sun/nio/cs/ext/IBM424.java \
sun/nio/cs/ext/IBM500.java \
sun/nio/cs/ext/IBM833.java \
sun/nio/cs/ext/IBM838.java \
sun/nio/cs/ext/IBM856.java \
sun/nio/cs/ext/IBM860.java \
......
......@@ -432,6 +432,7 @@ SUNWprivate_1.1 {
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
Java_sun_awt_X11_GtkFileDialogPeer_run;
Java_sun_awt_X11_GtkFileDialogPeer_quit;
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
Java_sun_print_CUPSPrinter_initIDs;
Java_sun_print_CUPSPrinter_getCupsServer;
......
0x5A U+FF01
0x7F U+FF02
0x7B U+FF03
0x5B U+FF04
0x6C U+FF05
0x50 U+FF06
0x7D U+FF07
0x4D U+FF08
0x5D U+FF09
0x5C U+FF0A
0x4E U+FF0B
0x6B U+FF0C
0x60 U+FF0D
0x4B U+FF0E
0x61 U+FF0F
0xF0 U+FF10
0xF1 U+FF11
0xF2 U+FF12
0xF3 U+FF13
0xF4 U+FF14
0xF5 U+FF15
0xF6 U+FF16
0xF7 U+FF17
0xF8 U+FF18
0xF9 U+FF19
0x7A U+FF1A
0x5E U+FF1B
0x4C U+FF1C
0x7E U+FF1D
0x6E U+FF1E
0x6F U+FF1F
0x7C U+FF20
0xC1 U+FF21
0xC2 U+FF22
0xC3 U+FF23
0xC4 U+FF24
0xC5 U+FF25
0xC6 U+FF26
0xC7 U+FF27
0xC8 U+FF28
0xC9 U+FF29
0xD1 U+FF2A
0xD2 U+FF2B
0xD3 U+FF2C
0xD4 U+FF2D
0xD5 U+FF2E
0xD6 U+FF2F
0xD7 U+FF30
0xD8 U+FF31
0xD9 U+FF32
0xE2 U+FF33
0xE3 U+FF34
0xE4 U+FF35
0xE5 U+FF36
0xE6 U+FF37
0xE7 U+FF38
0xE8 U+FF39
0xE9 U+FF3A
0x70 U+FF3B
0xB2 U+FF3C
0x80 U+FF3D
0xB0 U+FF3E
0x6D U+FF3F
0x79 U+FF40
0x81 U+FF41
0x82 U+FF42
0x83 U+FF43
0x84 U+FF44
0x85 U+FF45
0x86 U+FF46
0x87 U+FF47
0x88 U+FF48
0x89 U+FF49
0x91 U+FF4A
0x92 U+FF4B
0x93 U+FF4C
0x94 U+FF4D
0x95 U+FF4E
0x96 U+FF4F
0x97 U+FF50
0x98 U+FF51
0x99 U+FF52
0xA2 U+FF53
0xA3 U+FF54
0xA4 U+FF55
0xA5 U+FF56
0xA6 U+FF57
0xA7 U+FF58
0xA8 U+FF59
0xA9 U+FF5A
0xC0 U+FF5B
0x4F U+FF5C
0xD0 U+FF5D
0xA1 U+FF5E
0x00 U+0000
0x01 U+0001
0x02 U+0002
0x03 U+0003
0x37 U+0004
0x2D U+0005
0x2E U+0006
0x2F U+0007
0x16 U+0008
0x05 U+0009
0x25 U+000A
0x0B U+000B
0x0C U+000C
0x0D U+000D
0x0E U+000E
0x0F U+000F
0x10 U+0010
0x11 U+0011
0x12 U+0012
0x13 U+0013
0x3C U+0014
0x3D U+0015
0x32 U+0016
0x26 U+0017
0x18 U+0018
0x19 U+0019
0x3F U+001A
0x27 U+001B
0x1C U+001C
0x1D U+001D
0x1E U+001E
0x1F U+001F
0x40 U+0020
0x5A U+0021
0x7F U+0022
0x7B U+0023
0x5B U+0024
0x6C U+0025
0x50 U+0026
0x7D U+0027
0x4D U+0028
0x5D U+0029
0x5C U+002A
0x4E U+002B
0x6B U+002C
0x60 U+002D
0x4B U+002E
0x61 U+002F
0xF0 U+0030
0xF1 U+0031
0xF2 U+0032
0xF3 U+0033
0xF4 U+0034
0xF5 U+0035
0xF6 U+0036
0xF7 U+0037
0xF8 U+0038
0xF9 U+0039
0x7A U+003A
0x5E U+003B
0x4C U+003C
0x7E U+003D
0x6E U+003E
0x6F U+003F
0x7C U+0040
0xC1 U+0041
0xC2 U+0042
0xC3 U+0043
0xC4 U+0044
0xC5 U+0045
0xC6 U+0046
0xC7 U+0047
0xC8 U+0048
0xC9 U+0049
0xD1 U+004A
0xD2 U+004B
0xD3 U+004C
0xD4 U+004D
0xD5 U+004E
0xD6 U+004F
0xD7 U+0050
0xD8 U+0051
0xD9 U+0052
0xE2 U+0053
0xE3 U+0054
0xE4 U+0055
0xE5 U+0056
0xE6 U+0057
0xE7 U+0058
0xE8 U+0059
0xE9 U+005A
0x70 U+005B
0xB2 U+005C
0x80 U+005D
0xB0 U+005E
0x6D U+005F
0x79 U+0060
0x81 U+0061
0x82 U+0062
0x83 U+0063
0x84 U+0064
0x85 U+0065
0x86 U+0066
0x87 U+0067
0x88 U+0068
0x89 U+0069
0x91 U+006A
0x92 U+006B
0x93 U+006C
0x94 U+006D
0x95 U+006E
0x96 U+006F
0x97 U+0070
0x98 U+0071
0x99 U+0072
0xA2 U+0073
0xA3 U+0074
0xA4 U+0075
0xA5 U+0076
0xA6 U+0077
0xA7 U+0078
0xA8 U+0079
0xA9 U+007A
0xC0 U+007B
0x4F U+007C
0xD0 U+007D
0xA1 U+007E
0x07 U+007F
0x20 U+0080
0x21 U+0081
0x22 U+0082
0x23 U+0083
0x24 U+0084
0x15 U+0085
0x06 U+0086
0x17 U+0087
0x28 U+0088
0x29 U+0089
0x2A U+008A
0x2B U+008B
0x2C U+008C
0x09 U+008D
0x0A U+008E
0x1B U+008F
0x30 U+0090
0x31 U+0091
0x1A U+0092
0x33 U+0093
0x34 U+0094
0x35 U+0095
0x36 U+0096
0x08 U+0097
0x38 U+0098
0x39 U+0099
0x3A U+009A
0x3B U+009B
0x04 U+009C
0x14 U+009D
0x3E U+009E
0xFF U+009F
0x4A U+00A2
0x6A U+00A6
0x5F U+00AC
0xA0 U+203E
0xE0 U+20A9
0x42 U+FFA0
0x43 U+FFA1
0x44 U+FFA2
0x45 U+FFA3
0x46 U+FFA4
0x47 U+FFA5
0x48 U+FFA6
0x49 U+FFA7
0x52 U+FFA8
0x53 U+FFA9
0x54 U+FFAA
0x55 U+FFAB
0x56 U+FFAC
0x57 U+FFAD
0x58 U+FFAE
0x59 U+FFAF
0x62 U+FFB0
0x63 U+FFB1
0x64 U+FFB2
0x65 U+FFB3
0x66 U+FFB4
0x67 U+FFB5
0x68 U+FFB6
0x69 U+FFB7
0x72 U+FFB8
0x73 U+FFB9
0x74 U+FFBA
0x75 U+FFBB
0x76 U+FFBC
0x77 U+FFBD
0x78 U+FFBE
0x8A U+FFC2
0x8B U+FFC3
0x8C U+FFC4
0x8D U+FFC5
0x8E U+FFC6
0x8F U+FFC7
0x9A U+FFCA
0x9B U+FFCB
0x9C U+FFCC
0x9D U+FFCD
0x9E U+FFCE
0x9F U+FFCF
0xAA U+FFD2
0xAB U+FFD3
0xAC U+FFD4
0xAD U+FFD5
0xAE U+FFD6
0xAF U+FFD7
0xBA U+FFDA
0xBB U+FFDB
0xBC U+FFDC
......@@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
IBM420 IBM420 Cp420 false sun.nio.cs.ext
IBM424 IBM424 Cp424 false sun.nio.cs.ext
IBM500 IBM500 Cp500 false sun.nio.cs.ext
IBM833 x-IBM833 Cp833 false sun.nio.cs.ext
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
IBM860 IBM860 Cp860 false sun.nio.cs.ext
......
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2010, 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
......@@ -111,7 +111,7 @@ class CharacterData00 extends CharacterData {
if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
switch(ch) {
// map the offset overflow chars
case 0x0130 : mapChar = 0x0069; break;
case 0x0130 : mapChar = 0x0069; break;
case 0x2126 : mapChar = 0x03C9; break;
case 0x212A : mapChar = 0x006B; break;
case 0x212B : mapChar = 0x00E5; break;
......@@ -192,7 +192,11 @@ class CharacterData00 extends CharacterData {
case 0x2C6D : mapChar = 0x0251; break;
case 0x2C6E : mapChar = 0x0271; break;
case 0x2C6F : mapChar = 0x0250; break;
case 0x2C70 : mapChar = 0x0252; break;
case 0x2C7E : mapChar = 0x023F; break;
case 0x2C7F : mapChar = 0x0240; break;
case 0xA77D : mapChar = 0x1D79; break;
case 0xA78D : mapChar = 0x0265; break;
// default mapChar is already set, so no
// need to redo it here.
// default : mapChar = ch;
......@@ -246,8 +250,12 @@ class CharacterData00 extends CharacterData {
case 0x1FC3 : mapChar = 0x1FCC; break;
case 0x1FF3 : mapChar = 0x1FFC; break;
case 0x023F : mapChar = 0x2C7E; break;
case 0x0240 : mapChar = 0x2C7F; break;
case 0x0250 : mapChar = 0x2C6F; break;
case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break;
......@@ -487,8 +495,12 @@ class CharacterData00 extends CharacterData {
case 0x017F : mapChar = 0x0053; break;
case 0x1FBE : mapChar = 0x0399; break;
case 0x023F : mapChar = 0x2C7E; break;
case 0x0240 : mapChar = 0x2C7F; break;
case 0x0250 : mapChar = 0x2C6F; break;
case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break;
......
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2010, 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
......@@ -251,9 +251,40 @@ class CharacterData01 extends CharacterData {
case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY
case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
case 0x01085D: retval = 100; break; // IMPERIAL ARAMAIC NUMBER ONE HUNDRED
case 0x01085E: retval = 1000; break; // IMPERIAL ARAMAIC NUMBER ONE THOUSAND
case 0x01085F: retval = 10000; break; // IMPERIAL ARAMAIC NUMBER TEN THOUSAND
case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
case 0x010A7E: retval = 50; break; // OLD SOUTH ARABIAN NUMBER FIFTY
case 0x010B5E: retval = 100; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
case 0x010B5F: retval = 1000; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
case 0x010B7E: retval = 100; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
case 0x010B7F: retval = 1000; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
case 0x010E6C: retval = 40; break; // RUMI NUMBER FORTY
case 0x010E6D: retval = 50; break; // RUMI NUMBER FIFTY
case 0x010E6E: retval = 60; break; // RUMI NUMBER SIXTY
case 0x010E6F: retval = 70; break; // RUMI NUMBER SEVENTY
case 0x010E70: retval = 80; break; // RUMI NUMBER EIGHTY
case 0x010E71: retval = 90; break; // RUMI NUMBER NINETY
case 0x010E72: retval = 100; break; // RUMI NUMBER ONE HUNDRED
case 0x010E73: retval = 200; break; // RUMI NUMBER TWO HUNDRED
case 0x010E74: retval = 300; break; // RUMI NUMBER THREE HUNDRED
case 0x010E75: retval = 400; break; // RUMI NUMBER FOUR HUNDRED
case 0x010E76: retval = 500; break; // RUMI NUMBER FIVE HUNDRED
case 0x010E77: retval = 600; break; // RUMI NUMBER SIX HUNDRED
case 0x010E78: retval = 700; break; // RUMI NUMBER SEVEN HUNDRED
case 0x010E79: retval = 800; break; // RUMI NUMBER EIGHT HUNDRED
case 0x010E7A: retval = 900; break; // RUMI NUMBER NINE HUNDRED
case 0x01105E: retval = 40; break; // BRAHMI NUMBER FORTY
case 0x01105F: retval = 50; break; // BRAHMI NUMBER FIFTY
case 0x011060: retval = 60; break; // BRAHMI NUMBER SIXTY
case 0x011061: retval = 70; break; // BRAHMI NUMBER SEVENTY
case 0x011062: retval = 80; break; // BRAHMI NUMBER EIGHTY
case 0x011063: retval = 90; break; // BRAHMI NUMBER NINETY
case 0x011064: retval = 100; break; // BRAHMI NUMBER ONE HUNDRED
case 0x011065: retval = 1000; break; // BRAHMI NUMBER ONE THOUSAND
case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR
case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX
......
此差异已折叠。
# SpecialCasing-5.1.0.txt
# Date: 2008-03-03, 21:58:10 GMT [MD]
# SpecialCasing-6.0.0.txt
# Date: 2010-05-18, 00:49:39 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2008 Unicode, Inc.
# Copyright (c) 1991-2010 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
# For documentation, see http://www.unicode.org/reports/tr44/
#
# Special Casing Properties
#
......@@ -106,11 +106,11 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
# IMPORTANT-when capitalizing iota-subscript (0345)
# It MUST be in normalized form--moved to the end of any sequence of combining marks.
# This is because logically it represents a following base character!
# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
# It should never be the first character in a word, so in titlecasing it can be left as is.
# IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
# the result will be incorrect unless the iota-subscript is moved to the end
# of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
# This process can be achieved by first transforming the text to NFC before casing.
# E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA>
# The following cases are already in the UnicodeData file, so are only commented here.
......
......@@ -65,6 +65,7 @@ static jboolean printVersion = JNI_FALSE; /* print and exit */
static jboolean showVersion = JNI_FALSE; /* print but continue */
static jboolean printUsage = JNI_FALSE; /* print and exit*/
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
static char *showSettings = NULL; /* print but continue */
static const char *_program_name;
static const char *_launcher_name;
......@@ -109,6 +110,7 @@ static void SetApplicationClassPath(const char**);
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
static void ShowSettings(JNIEnv* env, char *optString);
static void SetPaths(int argc, char **argv);
......@@ -157,6 +159,7 @@ static jboolean IsWildCardEnabled();
* create a new thread to invoke JVM. See 6316197 for more information.
*/
static jlong threadStackSize = 0; /* stack size of the new thread */
static jlong heapSize = 0; /* heap size */
int JNICALL JavaMain(void * args); /* entry point */
......@@ -376,6 +379,10 @@ JavaMain(void * _args)
}
}
if (showSettings != NULL) {
ShowSettings(env, showSettings);
CHECK_EXCEPTION_LEAVE(0);
}
/* If the user specified neither a class name nor a JAR file */
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
PrintUsage(env, printXUsage);
......@@ -611,7 +618,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
/* copied from HotSpot function "atomll()" */
static int
parse_stack_size(const char *s, jlong *result) {
parse_size(const char *s, jlong *result) {
jlong n = 0;
int args_read = sscanf(s, jlong_format_specifier(), &n);
if (args_read != 1) {
......@@ -673,10 +680,17 @@ AddOption(char *str, void *info)
options[numOptions++].extraInfo = info;
if (JLI_StrCCmp(str, "-Xss") == 0) {
jlong tmp;
if (parse_stack_size(str + 4, &tmp)) {
threadStackSize = tmp;
}
jlong tmp;
if (parse_size(str + 4, &tmp)) {
threadStackSize = tmp;
}
}
if (JLI_StrCCmp(str, "-Xmx") == 0) {
jlong tmp;
if (parse_size(str + 4, &tmp)) {
heapSize = tmp;
}
}
}
......@@ -1014,6 +1028,13 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
} else if (JLI_StrCmp(arg, "-X") == 0) {
printXUsage = JNI_TRUE;
return JNI_TRUE;
/*
* The following case checks for -XshowSettings OR -XshowSetting:SUBOPT.
* In the latter case, any SUBOPT value not recognized will default to "all"
*/
} else if (JLI_StrCmp(arg, "-XshowSettings") == 0 ||
JLI_StrCCmp(arg, "-XshowSettings:") == 0) {
showSettings = arg;
/*
* The following case provide backward compatibility with old-style
* command line options.
......@@ -1474,6 +1495,27 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
(*env)->CallStaticVoidMethod(env, ver, print);
}
/*
* Prints all the Java settings, see the java implementation for more details.
*/
static void
ShowSettings(JNIEnv *env, char *optString)
{
jclass cls;
jmethodID showSettingsID;
jstring joptString;
NULL_CHECK(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
"showSettings", "(ZLjava/lang/String;JJZ)V"));
joptString = (*env)->NewStringUTF(env, optString);
(*env)->CallStaticVoidMethod(env, cls, showSettingsID,
JNI_TRUE,
joptString,
(jlong)heapSize,
(jlong)threadStackSize,
ServerClassMachine());
}
/*
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
*/
......
......@@ -91,6 +91,7 @@ public class HttpsConfigurator {
return context;
}
//BEGIN_TIGER_EXCLUDE
/**
* Called by the HttpsServer to configure the parameters
* for a https connection currently being established.
......@@ -111,4 +112,5 @@ public class HttpsConfigurator {
public void configure (HttpsParameters params) {
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
}
//END_TIGER_EXCLUDE
}
......@@ -25,7 +25,9 @@
package com.sun.net.httpserver;
import java.net.InetSocketAddress;
//BEGIN_TIGER_EXCLUDE
import javax.net.ssl.SSLParameters;
//END_TIGER_EXCLUDE
/**
* Represents the set of parameters for each https
......@@ -67,6 +69,7 @@ public abstract class HttpsParameters {
*/
public abstract InetSocketAddress getClientAddress();
//BEGIN_TIGER_EXCLUDE
/**
* Sets the SSLParameters to use for this HttpsParameters.
* The parameters must be supported by the SSLContext contained
......@@ -79,6 +82,7 @@ public abstract class HttpsParameters {
* invalid or unsupported.
*/
public abstract void setSSLParameters (SSLParameters params);
//END_TIGER_EXCLUDE
/**
* Returns a copy of the array of ciphersuites or null if none
......
#
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 2010, 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
......@@ -140,7 +140,7 @@ syncrsimpl.valtores = Value to be resolved can either be in the database or in c
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {0} , uri : {0}
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
......@@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
#XmlReaderContentHandler exceptions
xmlrch.errmap = Error setting Map : {0}
xmlrch.errmetadata = Error setting metadata : {0}
xmlrch.errinsert = Error inserting values : {0}
xmlrch.errinsertval = Error inserting values : {0}
xmlrch.errconstr = Error constructing row : {0}
xmlrch.errdel = Error deleting row : {0}
xmlrch.errinsert = Error constructing insert row : {0}
......@@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
xmlrch.chars = characters :
xmlrch.badvalue = Bad value ; non-nullable property
xmlrch.badvalue1 = Bad value ; non-nullable metadata
xmlrch.warning = ** Warning : {0} , line : {0} , uri : {0}
xmlrch.warning = ** Warning : {0} , line : {1} , uri : {2}
#RIOptimisticProvider Exceptions
riop.locking = Locking classification is not supported
......
......@@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
// columnValue now need to be reset to the empty string
columnValue = "";
} catch (SQLException ex) {
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage()));
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsertval").toString(), ex.getMessage()));
}
break;
case RowTag:
......
......@@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
* <p>
* This method applies an arbitrary scale factor to each of the three RGB
* components of this <code>Color</code> to create a brighter version
* of this <code>Color</code>. Although <code>brighter</code> and
* of this <code>Color</code>.
* The {@code alpha} value is preserved.
* Although <code>brighter</code> and
* <code>darker</code> are inverse operations, the results of a
* series of invocations of these two methods might be inconsistent
* because of rounding errors.
* @return a new <code>Color</code> object that is
* a brighter version of this <code>Color</code>.
* a brighter version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#darker
* @since JDK1.0
*/
......@@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
int r = getRed();
int g = getGreen();
int b = getBlue();
int alpha = getAlpha();
/* From 2D group:
* 1. black.brighter() should return grey
......@@ -632,7 +636,7 @@ public class Color implements Paint, java.io.Serializable {
*/
int i = (int)(1.0/(1.0-FACTOR));
if ( r == 0 && g == 0 && b == 0) {
return new Color(i, i, i);
return new Color(i, i, i, alpha);
}
if ( r > 0 && r < i ) r = i;
if ( g > 0 && g < i ) g = i;
......@@ -640,7 +644,8 @@ public class Color implements Paint, java.io.Serializable {
return new Color(Math.min((int)(r/FACTOR), 255),
Math.min((int)(g/FACTOR), 255),
Math.min((int)(b/FACTOR), 255));
Math.min((int)(b/FACTOR), 255),
alpha);
}
/**
......@@ -649,19 +654,23 @@ public class Color implements Paint, java.io.Serializable {
* <p>
* This method applies an arbitrary scale factor to each of the three RGB
* components of this <code>Color</code> to create a darker version of
* this <code>Color</code>. Although <code>brighter</code> and
* this <code>Color</code>.
* The {@code alpha} value is preserved.
* Although <code>brighter</code> and
* <code>darker</code> are inverse operations, the results of a series
* of invocations of these two methods might be inconsistent because
* of rounding errors.
* @return a new <code>Color</code> object that is
* a darker version of this <code>Color</code>.
* a darker version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#brighter
* @since JDK1.0
*/
public Color darker() {
return new Color(Math.max((int)(getRed() *FACTOR), 0),
Math.max((int)(getGreen()*FACTOR), 0),
Math.max((int)(getBlue() *FACTOR), 0));
Math.max((int)(getBlue() *FACTOR), 0),
getAlpha());
}
/**
......
......@@ -51,6 +51,7 @@ import javax.accessibility.*;
import sun.util.logging.PlatformLogger;
import sun.awt.AppContext;
import sun.awt.AWTAccessor;
import sun.awt.CausedFocusEvent;
import sun.awt.PeerEvent;
import sun.awt.SunToolkit;
......@@ -247,6 +248,13 @@ public class Container extends Component {
if (!GraphicsEnvironment.isHeadless()) {
initIDs();
}
AWTAccessor.setContainerAccessor(new AWTAccessor.ContainerAccessor() {
@Override
public void validateUnconditionally(Container cont) {
cont.validateUnconditionally();
}
});
}
/**
......
......@@ -1248,14 +1248,31 @@ public class Dialog extends Window {
/**
* Disables or enables decorations for this dialog.
* This method can only be called while the dialog is not displayable.
* @param undecorated <code>true</code> if no dialog decorations are
* to be enabled;
* <code>false</code> if dialog decorations are to be enabled.
* @throws <code>IllegalComponentStateException</code> if the dialog
* is displayable.
* <p>
* This method can only be called while the dialog is not displayable. To
* make this dialog decorated, it must be opaque and have the default shape,
* otherwise the {@code IllegalComponentStateException} will be thrown.
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
* Window#setBackground} for details
*
* @param undecorated {@code true} if no dialog decorations are to be
* enabled; {@code false} if dialog decorations are to be enabled
*
* @throws IllegalComponentStateException if the dialog is displayable
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this dialog does not have the default shape
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this dialog opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and the alpha value of this dialog background
* color is less than {@code 1.0f}
*
* @see #isUndecorated
* @see Component#isDisplayable
* @see Window#getShape
* @see Window#getOpacity
* @see Window#getBackground
*
* @since 1.4
*/
public void setUndecorated(boolean undecorated) {
......@@ -1264,6 +1281,18 @@ public class Dialog extends Window {
if (isDisplayable()) {
throw new IllegalComponentStateException("The dialog is displayable.");
}
if (!undecorated) {
if (getOpacity() < 1.0f) {
throw new IllegalComponentStateException("The dialog is not opaque");
}
if (getShape() != null) {
throw new IllegalComponentStateException("The dialog does not have a default shape");
}
Color bg = getBackground();
if ((bg != null) && (bg.getAlpha() < 255)) {
throw new IllegalComponentStateException("The dialog background color is not opaque");
}
}
this.undecorated = undecorated;
}
}
......@@ -1280,6 +1309,45 @@ public class Dialog extends Window {
return undecorated;
}
/**
* {@inheritDoc}
*/
@Override
public void setOpacity(float opacity) {
synchronized (getTreeLock()) {
if ((opacity < 1.0f) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setOpacity(opacity);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setShape(Shape shape) {
synchronized (getTreeLock()) {
if ((shape != null) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setShape(shape);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setBackground(Color bgColor) {
synchronized (getTreeLock()) {
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setBackground(bgColor);
}
}
/**
* Returns a string representing the state of this dialog. This
* method is intended to be used only for debugging purposes, and the
......
......@@ -99,7 +99,7 @@ public class FileDialog extends Dialog {
* Contains the File instances for all the files that the user selects.
*
* @serial
* @see getFiles
* @see #getFiles
* @since 1.7
*/
private File[] files;
......
......@@ -828,6 +828,11 @@ public class Frame extends Window implements MenuContainer {
return frame.state;
}
}
public Rectangle getMaximizedBounds(Frame frame) {
synchronized(frame.getObjectLock()) {
return frame.maximizedBounds;
}
}
}
);
}
......@@ -855,8 +860,10 @@ public class Frame extends Window implements MenuContainer {
* @see #getMaximizedBounds()
* @since 1.4
*/
public synchronized void setMaximizedBounds(Rectangle bounds) {
this.maximizedBounds = bounds;
public void setMaximizedBounds(Rectangle bounds) {
synchronized(getObjectLock()) {
this.maximizedBounds = bounds;
}
FramePeer peer = (FramePeer)this.peer;
if (peer != null) {
peer.setMaximizedBounds(bounds);
......@@ -873,21 +880,40 @@ public class Frame extends Window implements MenuContainer {
* @since 1.4
*/
public Rectangle getMaximizedBounds() {
return maximizedBounds;
synchronized(getObjectLock()) {
return maximizedBounds;
}
}
/**
* Disables or enables decorations for this frame.
* This method can only be called while the frame is not displayable.
* @param undecorated <code>true</code> if no frame decorations are
* to be enabled;
* <code>false</code> if frame decorations are to be enabled.
* @throws <code>IllegalComponentStateException</code> if the frame
* is displayable.
* <p>
* This method can only be called while the frame is not displayable. To
* make this frame decorated, it must be opaque and have the default shape,
* otherwise the {@code IllegalComponentStateException} will be thrown.
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
* Window#setBackground} for details
*
* @param undecorated {@code true} if no frame decorations are to be
* enabled; {@code false} if frame decorations are to be enabled
*
* @throws IllegalComponentStateException if the frame is displayable
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this frame does not have the default shape
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this frame opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and the alpha value of this frame background
* color is less than {@code 1.0f}
*
* @see #isUndecorated
* @see Component#isDisplayable
* @see Window#getShape
* @see Window#getOpacity
* @see Window#getBackground
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
*
* @since 1.4
*/
public void setUndecorated(boolean undecorated) {
......@@ -896,6 +922,18 @@ public class Frame extends Window implements MenuContainer {
if (isDisplayable()) {
throw new IllegalComponentStateException("The frame is displayable.");
}
if (!undecorated) {
if (getOpacity() < 1.0f) {
throw new IllegalComponentStateException("The frame is not opaque");
}
if (getShape() != null) {
throw new IllegalComponentStateException("The frame does not have a default shape");
}
Color bg = getBackground();
if ((bg != null) && (bg.getAlpha() < 255)) {
throw new IllegalComponentStateException("The frame background color is not opaque");
}
}
this.undecorated = undecorated;
}
}
......@@ -912,6 +950,45 @@ public class Frame extends Window implements MenuContainer {
return undecorated;
}
/**
* {@inheritDoc}
*/
@Override
public void setOpacity(float opacity) {
synchronized (getTreeLock()) {
if ((opacity < 1.0f) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setOpacity(opacity);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setShape(Shape shape) {
synchronized (getTreeLock()) {
if ((shape != null) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setShape(shape);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setBackground(Color bgColor) {
synchronized (getTreeLock()) {
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setBackground(bgColor);
}
}
/**
* Removes the specified menu bar from this frame.
* @param m the menu component to remove.
......
......@@ -3474,14 +3474,20 @@ public class Window extends Container implements Accessible {
* level of 0 may or may not disable the mouse event handling on this
* window. This is a platform-dependent behavior.
* <p>
* In order for this method to enable the translucency effect, the {@link
* GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)} method must indicate that
* the {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
* translucency is supported.
* The following conditions must be met in order to set the opacity value
* less than {@code 1.0f}:
* <ul>
* <li>The {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
* translucency must be supported by the underlying system
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
* and {@link Dialog#setUndecorated})
* <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)})
* </ul>
* <p>
* Also note that the window must not be in the full-screen mode when
* setting the opacity value &lt; 1.0f. Otherwise the {@code
* IllegalComponentStateException} is thrown.
* If the requested opacity value is less than {@code 1.0f}, and any of the
* above conditions are not met, the window opacity will not change,
* and the {@code IllegalComponentStateException} will be thrown.
* <p>
* The translucency levels of individual pixels may also be effected by the
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
......@@ -3491,15 +3497,20 @@ public class Window extends Container implements Accessible {
*
* @throws IllegalArgumentException if the opacity is out of the range
* [0..1]
* @throws IllegalComponentStateException if the window is decorated and
* the opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if the window is in full screen
* mode, and the opacity is less than 1.0f
* mode, and the opacity is less than {@code 1.0f}
* @throws UnsupportedOperationException if the {@code
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
* translucency kind is not supported and the opacity is less than 1.0f
* translucency is not supported and the opacity is less than
* {@code 1.0f}
*
* @see Window#getOpacity
* @see Window#setBackground(Color)
* @see Window#setShape(Shape)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
*
......@@ -3557,24 +3568,26 @@ public class Window extends Container implements Accessible {
/**
* Sets the shape of the window.
* <p>
* Setting a shape enables cutting off some parts of the window, leaving
* visible and clickable only those parts belonging to the given shape
* (see {@link Shape}). If the shape argument is null, this methods
* restores the default shape (making the window rectangular on most
* platforms.)
* Setting a shape cuts off some parts of the window. Only the parts that
* belong to the given {@link Shape} remain visible and clickable. If
* the shape argument is {@code null}, this method restores the default
* shape, making the window rectangular on most platforms.
* <p>
* The following conditions must be met in order to set a non-null shape:
* The following conditions must be met to set a non-null shape:
* <ul>
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
* PERPIXEL_TRANSPARENT} translucency kind must be supported by the
* PERPIXEL_TRANSPARENT} translucency must be supported by the
* underlying system
* <i>and</i>
* <li>The window must not be in the full-screen mode (see
* {@link GraphicsDevice#setFullScreenWindow(Window)})
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
* and {@link Dialog#setUndecorated})
* <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)})
* </ul>
* If a certain condition is not met, either the {@code
* UnsupportedOperationException} or {@code IllegalComponentStateException}
* is thrown.
* <p>
* If the requested shape is not {@code null}, and any of the above
* conditions are not met, the shape of this window will not change,
* and either the {@code UnsupportedOperationException} or {@code
* IllegalComponentStateException} will be thrown.
* <p>
* The tranlucency levels of individual pixels may also be effected by the
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
......@@ -3584,6 +3597,8 @@ public class Window extends Container implements Accessible {
* @param shape the shape to set to the window
*
* @throws IllegalComponentStateException if the shape is not {@code
* null} and the window is decorated
* @throws IllegalComponentStateException if the shape is not {@code
* null} and the window is in full-screen mode
* @throws UnsupportedOperationException if the shape is not {@code
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
......@@ -3592,6 +3607,8 @@ public class Window extends Container implements Accessible {
* @see Window#getShape()
* @see Window#setBackground(Color)
* @see Window#setOpacity(float)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
*
......@@ -3645,37 +3662,46 @@ public class Window extends Container implements Accessible {
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
* tranclucency, the alpha component of the given background color
* may effect the mode of operation for this window: it indicates whether
* this window must be opaque (alpha == 1.0f) or per-pixel translucent
* (alpha &lt; 1.0f). All the following conditions must be met in order
* to be able to enable the per-pixel transparency mode for this window:
* this window must be opaque (alpha equals {@code 1.0f}) or per-pixel translucent
* (alpha is less than {@code 1.0f}). If the given background color is
* {@code null}, the window is considered completely opaque.
* <p>
* All the following conditions must be met to enable the per-pixel
* transparency mode for this window:
* <ul>
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
* PERPIXEL_TRANSLUCENT} translucency must be supported
* by the graphics device where this window is located <i>and</i>
* <li>The window must not be in the full-screen mode (see {@link
* PERPIXEL_TRANSLUCENT} translucency must be supported by the graphics
* device where this window is located
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
* and {@link Dialog#setUndecorated})
* <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)})
* </ul>
* If a certain condition is not met at the time of calling this method,
* the alpha component of the given background color will not effect the
* mode of operation for this window.
* <p>
* If the alpha component of the requested background color is less than
* {@code 1.0f}, and any of the above conditions are not met, the background
* color of this window will not change, the alpha component of the given
* background color will not affect the mode of operation for this window,
* and either the {@code UnsupportedOperationException} or {@code
* IllegalComponentStateException} will be thrown.
* <p>
* When the window is per-pixel translucent, the drawing sub-system
* respects the alpha value of each individual pixel. If a pixel gets
* painted with the alpha color component equal to zero, it becomes
* visually transparent, if the alpha of the pixel is equal to 1.0f, the
* visually transparent. If the alpha of the pixel is equal to 1.0f, the
* pixel is fully opaque. Interim values of the alpha color component make
* the pixel semi-transparent. In this mode the background of the window
* gets painted with the alpha value of the given background color (meaning
* that it is not painted at all if the alpha value of the argument of this
* method is equal to zero.)
* the pixel semi-transparent. In this mode, the background of the window
* gets painted with the alpha value of the given background color. If the
* alpha value of the argument of this method is equal to {@code 0}, the
* background is not painted at all.
* <p>
* The actual level of translucency of a given pixel also depends on window
* opacity (see {@link #setOpacity(float)}), as well as the current shape of
* this window (see {@link #setShape(Shape)}).
* <p>
* Note that painting a pixel with the alpha value of 0 may or may not
* disable the mouse event handling on this pixel. This is a
* platform-dependent behavior. To make sure the mouse clicks do not get
* Note that painting a pixel with the alpha value of {@code 0} may or may
* not disable the mouse event handling on this pixel. This is a
* platform-dependent behavior. To make sure the mouse events do not get
* dispatched to a particular pixel, the pixel must be excluded from the
* shape of the window.
* <p>
......@@ -3685,17 +3711,21 @@ public class Window extends Container implements Accessible {
* @param bgColor the color to become this window's background color.
*
* @throws IllegalComponentStateException if the alpha value of the given
* background color is less than 1.0f and the window is in
* background color is less than {@code 1.0f} and the window is decorated
* @throws IllegalComponentStateException if the alpha value of the given
* background color is less than {@code 1.0f} and the window is in
* full-screen mode
* @throws UnsupportedOperationException if the alpha value of the given
* background color is less than 1.0f and
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
* background color is less than {@code 1.0f} and {@link
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
* PERPIXEL_TRANSLUCENT} translucency is not supported
*
* @see Window#getBackground
* @see Window#isOpaque
* @see Window#setOpacity(float)
* @see Window#setShape(Shape)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
* @see GraphicsConfiguration#isTranslucencyCapable()
......@@ -3739,7 +3769,7 @@ public class Window extends Container implements Accessible {
* <p>
* The method returns {@code false} if the background color of the window
* is not {@code null} and the alpha component of the color is less than
* 1.0f. The method returns {@code true} otherwise.
* {@code 1.0f}. The method returns {@code true} otherwise.
*
* @return {@code true} if the window is opaque, {@code false} otherwise
*
......
/*
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2010, 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
......@@ -262,7 +262,23 @@ public final class NumericShaper implements java.io.Serializable {
/**
* The Cham range with the Cham digits.
*/
CHAM ('\uaa50', '\uaa00', '\uaa60');
CHAM ('\uaa50', '\uaa00', '\uaa60'),
/**
* The Tai Tham Hora range with the Tai Tham Hora digits.
*/
TAI_THAM_HORA ('\u1a80', '\u1a20', '\u1ab0'),
/**
* The Tai Tham Tham range with the Tai Tham Tham digits.
*/
TAI_THAM_THAM ('\u1a90', '\u1a20', '\u1ab0'),
/**
* The Javanese range with the Javanese digits.
*/
JAVANESE ('\ua9d0', '\ua980', '\ua9e0'),
/**
* The Meetei Mayek range with the Meetei Mayek digits.
*/
MEETEI_MAYEK ('\uabf0', '\uabc0', '\uac00');
private static int toRangeIndex(Range script) {
int index = script.ordinal();
......@@ -592,10 +608,16 @@ public final class NumericShaper implements java.io.Serializable {
0x07a6, 0x07b1,
0x07eb, 0x07f4,
0x07f6, 0x07fa,
0x0901, 0x0903,
0x0816, 0x081a,
0x081b, 0x0824,
0x0825, 0x0828,
0x0829, 0x0830,
0x0859, 0x085e,
0x0900, 0x0903,
0x093a, 0x093b,
0x093c, 0x093d,
0x0941, 0x0949,
0x094d, 0x0950,
0x094d, 0x094e,
0x0951, 0x0958,
0x0962, 0x0964,
0x0981, 0x0982,
......@@ -604,7 +626,7 @@ public final class NumericShaper implements java.io.Serializable {
0x09cd, 0x09ce,
0x09e2, 0x09e6,
0x09f2, 0x09f4,
0x0a01, 0x0a03,
0x09fb, 0x0a03,
0x0a3c, 0x0a3e,
0x0a41, 0x0a59,
0x0a70, 0x0a72,
......@@ -630,9 +652,8 @@ public final class NumericShaper implements java.io.Serializable {
0x0cbc, 0x0cbd,
0x0ccc, 0x0cd5,
0x0ce2, 0x0ce6,
0x0cf1, 0x0d02,
0x0d41, 0x0d46,
0x0d4d, 0x0d57,
0x0d4d, 0x0d4e,
0x0d62, 0x0d66,
0x0dca, 0x0dcf,
0x0dd2, 0x0dd8,
......@@ -649,7 +670,7 @@ public final class NumericShaper implements java.io.Serializable {
0x0f71, 0x0f7f,
0x0f80, 0x0f85,
0x0f86, 0x0f88,
0x0f90, 0x0fbe,
0x0f8d, 0x0fbe,
0x0fc6, 0x0fc7,
0x102d, 0x1031,
0x1032, 0x1038,
......@@ -661,8 +682,10 @@ public final class NumericShaper implements java.io.Serializable {
0x1082, 0x1083,
0x1085, 0x1087,
0x108d, 0x108e,
0x135f, 0x1360,
0x109d, 0x109e,
0x135d, 0x1360,
0x1390, 0x13a0,
0x1400, 0x1401,
0x1680, 0x1681,
0x169b, 0x16a0,
0x1712, 0x1720,
......@@ -682,6 +705,11 @@ public final class NumericShaper implements java.io.Serializable {
0x1939, 0x1946,
0x19de, 0x1a00,
0x1a17, 0x1a19,
0x1a56, 0x1a57,
0x1a58, 0x1a61,
0x1a62, 0x1a63,
0x1a65, 0x1a6d,
0x1a73, 0x1a80,
0x1b00, 0x1b04,
0x1b34, 0x1b35,
0x1b36, 0x1b3b,
......@@ -691,8 +719,16 @@ public final class NumericShaper implements java.io.Serializable {
0x1b80, 0x1b82,
0x1ba2, 0x1ba6,
0x1ba8, 0x1baa,
0x1be6, 0x1be7,
0x1be8, 0x1bea,
0x1bed, 0x1bee,
0x1bef, 0x1bf2,
0x1c2c, 0x1c34,
0x1c36, 0x1c3b,
0x1cd0, 0x1cd3,
0x1cd4, 0x1ce1,
0x1ce2, 0x1ce9,
0x1ced, 0x1cee,
0x1dc0, 0x1e00,
0x1fbd, 0x1fbe,
0x1fbf, 0x1fc2,
......@@ -716,14 +752,16 @@ public final class NumericShaper implements java.io.Serializable {
0x213a, 0x213c,
0x2140, 0x2145,
0x214a, 0x214e,
0x2153, 0x2160,
0x2190, 0x2336,
0x2150, 0x2160,
0x2189, 0x2336,
0x237b, 0x2395,
0x2396, 0x249c,
0x24ea, 0x26ac,
0x26ad, 0x2800,
0x2900, 0x2c00,
0x2ce5, 0x2d00,
0x2ce5, 0x2ceb,
0x2cef, 0x2d00,
0x2d7f, 0x2d80,
0x2de0, 0x3005,
0x3008, 0x3021,
0x302a, 0x3031,
......@@ -742,25 +780,40 @@ public final class NumericShaper implements java.io.Serializable {
0x33de, 0x33e0,
0x33ff, 0x3400,
0x4dc0, 0x4e00,
0xa490, 0xa500,
0xa490, 0xa4d0,
0xa60d, 0xa610,
0xa66f, 0xa680,
0xa6f0, 0xa6f2,
0xa700, 0xa722,
0xa788, 0xa789,
0xa802, 0xa803,
0xa806, 0xa807,
0xa80b, 0xa80c,
0xa825, 0xa827,
0xa828, 0xa840,
0xa828, 0xa830,
0xa838, 0xa840,
0xa874, 0xa880,
0xa8c4, 0xa8ce,
0xa8e0, 0xa8f2,
0xa926, 0xa92e,
0xa947, 0xa952,
0xa980, 0xa983,
0xa9b3, 0xa9b4,
0xa9b6, 0xa9ba,
0xa9bc, 0xa9bd,
0xaa29, 0xaa2f,
0xaa31, 0xaa33,
0xaa35, 0xaa40,
0xaa43, 0xaa44,
0xaa4c, 0xaa4d,
0xaab0, 0xaab1,
0xaab2, 0xaab5,
0xaab7, 0xaab9,
0xaabe, 0xaac0,
0xaac1, 0xaac2,
0xabe5, 0xabe6,
0xabe8, 0xabe9,
0xabed, 0xabf0,
0xfb1e, 0xfb1f,
0xfb29, 0xfb2a,
0xfd3e, 0xfd50,
......@@ -775,12 +828,28 @@ public final class NumericShaper implements java.io.Serializable {
0x1091f, 0x10920,
0x10a01, 0x10a10,
0x10a38, 0x10a40,
0x10b39, 0x10b40,
0x10e60, 0x11000,
0x11001, 0x11002,
0x11038, 0x11047,
0x11052, 0x11066,
0x11080, 0x11082,
0x110b3, 0x110b7,
0x110b9, 0x110bb,
0x1d167, 0x1d16a,
0x1d173, 0x1d183,
0x1d185, 0x1d18c,
0x1d1aa, 0x1d1ae,
0x1d200, 0x1d360,
0x1d7ce, 0x20000,
0x1d6db, 0x1d6dc,
0x1d715, 0x1d716,
0x1d74f, 0x1d750,
0x1d789, 0x1d78a,
0x1d7c3, 0x1d7c4,
0x1d7ce, 0x1f110,
0x1f300, 0x1f48c,
0x1f48d, 0x1f524,
0x1f525, 0x20000,
0xe0001, 0xf0000,
0x10fffe, 0x10ffff // sentinel
};
......@@ -947,6 +1016,14 @@ public final class NumericShaper implements java.io.Serializable {
&& rangeSet.contains(Range.ARABIC)) {
rangeSet.remove(Range.ARABIC);
}
// As well as the above case, give precedance to TAI_THAM_THAM if both
// TAI_THAM_HORA and TAI_THAM_THAM are specified.
if (rangeSet.contains(Range.TAI_THAM_THAM)
&& rangeSet.contains(Range.TAI_THAM_HORA)) {
rangeSet.remove(Range.TAI_THAM_HORA);
}
rangeArray = rangeSet.toArray(new Range[rangeSet.size()]);
if (rangeArray.length > BSEARCH_THRESHOLD) {
// sort rangeArray for binary search
......
......@@ -29,6 +29,8 @@ import com.sun.beans.WeakCache;
import com.sun.beans.finder.BeanInfoFinder;
import com.sun.beans.finder.ClassFinder;
import java.awt.Component;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.lang.reflect.Method;
......@@ -39,6 +41,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.EventListener;
import java.util.EventObject;
import java.util.List;
import java.util.TreeMap;
import java.util.WeakHashMap;
......@@ -1234,7 +1237,23 @@ public class Introspector {
}
}
// OK, fabricate a default BeanDescriptor.
return (new BeanDescriptor(beanClass));
return new BeanDescriptor(this.beanClass, findCustomizerClass(this.beanClass));
}
private static Class<?> findCustomizerClass(Class<?> type) {
String name = type.getName() + "Customizer";
try {
type = ClassFinder.findClass(name, type.getClassLoader());
// Each customizer should inherit java.awt.Component and implement java.beans.Customizer
// according to the section 9.3 of JavaBeans specification
if (Component.class.isAssignableFrom(type) && Customizer.class.isAssignableFrom(type)) {
return type;
}
}
catch (Exception exception) {
// ignore any exceptions
}
return null;
}
private boolean isEventHandler(Method m) {
......@@ -1244,10 +1263,7 @@ public class Introspector {
if (argTypes.length != 1) {
return false;
}
if (isSubclass(argTypes[0], java.util.EventObject.class)) {
return true;
}
return false;
return isSubclass(argTypes[0], EventObject.class);
}
/*
......
......@@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
* or an I/O error occurs.
*/
public synchronized int available() throws IOException {
return getInIfOpen().available() + (count - pos);
int n = count - pos;
int avail = getInIfOpen().available();
return n > (Integer.MAX_VALUE - avail)
? Integer.MAX_VALUE
: n + avail;
}
/**
......
......@@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
*/
public int available() throws IOException {
ensureOpen();
return (buf.length - pos) + super.available();
int n = buf.length - pos;
int avail = super.available();
return n > (Integer.MAX_VALUE - avail)
? Integer.MAX_VALUE
: n + avail;
}
/**
......
......@@ -44,11 +44,11 @@ public interface Readable {
* rewinding of the buffer is performed.
*
* @param cb the buffer to read characters into
* @return @return The number of <tt>char</tt> values added to the buffer,
* @return The number of {@code char} values added to the buffer,
* or -1 if this source of characters is at its end
* @throws IOException if an I/O error occurs
* @throws NullPointerException if cb is null
* @throws ReadOnlyBufferException if cb is a read only buffer
* @throws java.nio.ReadOnlyBufferException if cb is a read only buffer
*/
public int read(java.nio.CharBuffer cb) throws IOException;
......
......@@ -47,7 +47,7 @@ class StringCharBuffer // package-private
0,
this.remaining(),
this.remaining(),
this.position());
offset + this.position());
}
private StringCharBuffer(CharSequence s,
......
......@@ -110,7 +110,8 @@ import java.nio.ByteBuffer;
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
* operation is not defined. Buffers should be discarded or at least care must
* be taken to ensure that the buffers are not accessed while the channel remains
* open.
* open. All methods that accept timeout parameters treat values less than or
* equal to zero to mean that the I/O operation does not timeout.
*
* @since 1.7
*/
......@@ -367,7 +368,7 @@ public abstract class AsynchronousSocketChannel
* @param dst
* The buffer into which bytes are to be transferred
* @param timeout
* The timeout, or {@code 0L} for no timeout
* The maximum time for the I/O operation to complete
* @param unit
* The time unit of the {@code timeout} argument
* @param attachment
......@@ -376,8 +377,7 @@ public abstract class AsynchronousSocketChannel
* The handler for consuming the result
*
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative or the buffer is
* read-only
* If the buffer is read-only
* @throws ReadPendingException
* If a read operation is already in progress on this channel
* @throws NotYetConnectedException
......@@ -471,7 +471,7 @@ public abstract class AsynchronousSocketChannel
* The maximum number of buffers to be accessed; must be non-negative
* and no larger than {@code dsts.length - offset}
* @param timeout
* The timeout, or {@code 0L} for no timeout
* The maximum time for the I/O operation to complete
* @param unit
* The time unit of the {@code timeout} argument
* @param attachment
......@@ -483,8 +483,7 @@ public abstract class AsynchronousSocketChannel
* If the pre-conditions for the {@code offset} and {@code length}
* parameter aren't met
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative, or a buffer is
* read-only
* If the buffer is read-only
* @throws ReadPendingException
* If a read operation is already in progress on this channel
* @throws NotYetConnectedException
......@@ -524,7 +523,7 @@ public abstract class AsynchronousSocketChannel
* @param src
* The buffer from which bytes are to be retrieved
* @param timeout
* The timeout, or {@code 0L} for no timeout
* The maximum time for the I/O operation to complete
* @param unit
* The time unit of the {@code timeout} argument
* @param attachment
......@@ -532,8 +531,6 @@ public abstract class AsynchronousSocketChannel
* @param handler
* The handler for consuming the result
*
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative
* @throws WritePendingException
* If a write operation is already in progress on this channel
* @throws NotYetConnectedException
......@@ -623,7 +620,7 @@ public abstract class AsynchronousSocketChannel
* The maximum number of buffers to be accessed; must be non-negative
* and no larger than {@code srcs.length - offset}
* @param timeout
* The timeout, or {@code 0L} for no timeout
* The maximum time for the I/O operation to complete
* @param unit
* The time unit of the {@code timeout} argument
* @param attachment
......@@ -634,8 +631,6 @@ public abstract class AsynchronousSocketChannel
* @throws IndexOutOfBoundsException
* If the pre-conditions for the {@code offset} and {@code length}
* parameter aren't met
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative
* @throws WritePendingException
* If a write operation is already in progress on this channel
* @throws NotYetConnectedException
......
......@@ -84,7 +84,7 @@ import java.security.*;
* {@code setJNDIContext} and {@code setLogger}</td>
* <td>Permits an application to specify the JNDI context from which the
* {@code SyncProvider} implementations can be retrieved from and the logging
* object to be used by the{@codeSyncProvider} implementation.</td>
* object to be used by the {@code SyncProvider} implementation.</td>
* </tr>
*
* <tr>
......
......@@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
* instance of the Java virtual machine.
*
* <tr><td valign="top">{@code 'Z'}
* <td valign="top"> <tt>'&#92;u005a'</tt>
* <td> A string representing the abbreviation for the time zone. This
* value will be adjusted as necessary for Daylight Saving Time. For
* {@code long}, {@link Long}, and {@link Date} the time zone used is
......
......@@ -25,7 +25,9 @@
package java.util.spi;
import java.util.Arrays;
import java.util.Currency;
import java.util.List;
import java.util.Locale;
/**
......@@ -95,6 +97,23 @@ public abstract class CurrencyNameProvider extends LocaleServiceProvider {
throw new NullPointerException();
}
// Check whether the currencyCode is valid
char[] charray = currencyCode.toCharArray();
if (charray.length != 3) {
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
}
for (char c : charray) {
if (c < 'A' || c > 'Z') {
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
}
}
// Check whether the locale is valid
List<Locale> avail = Arrays.asList(getAvailableLocales());
if (!avail.contains(locale)) {
throw new IllegalArgumentException("The locale is not available");
}
return null;
}
}
......@@ -94,7 +94,9 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider {
* @see java.util.Locale#getDisplayScript(java.util.Locale)
* @since 1.7
*/
public abstract String getDisplayScript(String scriptCode, Locale locale);
public String getDisplayScript(String scriptCode, Locale locale) {
return null;
}
/**
* Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
......
......@@ -25,6 +25,9 @@
package javax.security.auth;
import java.security.Security;
import sun.security.util.Debug;
/**
* <p> This is an abstract class for representing the system policy for
* Subject-based authorization. A subclass implementation
......@@ -159,6 +162,10 @@ public abstract class Policy {
private static Policy policy;
private static ClassLoader contextClassLoader;
// true if a custom (not com.sun.security.auth.PolicyFile) system-wide
// policy object is set
private static boolean isCustomPolicy;
static {
contextClassLoader = java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction<ClassLoader>() {
......@@ -234,6 +241,8 @@ public abstract class Policy {
contextClassLoader).newInstance();
}
});
isCustomPolicy =
!finalClass.equals("com.sun.security.auth.PolicyFile");
} catch (Exception e) {
throw new SecurityException
(sun.security.util.ResourcesMgr.getString
......@@ -265,6 +274,46 @@ public abstract class Policy {
java.lang.SecurityManager sm = System.getSecurityManager();
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
Policy.policy = policy;
// all non-null policy objects are assumed to be custom
isCustomPolicy = policy != null ? true : false;
}
/**
* Returns true if a custom (not com.sun.security.auth.PolicyFile)
* system-wide policy object has been set or installed. This method is
* called by SubjectDomainCombiner to provide backwards compatibility for
* developers that provide their own javax.security.auth.Policy
* implementations.
*
* @return true if a custom (not com.sun.security.auth.PolicyFile)
* system-wide policy object has been set; false otherwise
*/
static boolean isCustomPolicySet(Debug debug) {
if (policy != null) {
if (debug != null && isCustomPolicy) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
policy.toString());
}
return isCustomPolicy;
}
// check if custom policy has been set using auth.policy.provider prop
String policyClass = java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction<String>() {
public String run() {
return Security.getProperty("auth.policy.provider");
}
});
if (policyClass != null
&& !policyClass.equals("com.sun.security.auth.PolicyFile")) {
if (debug != null) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
policyClass);
}
return true;
}
return false;
}
/**
......
/*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2010, 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
......@@ -26,8 +26,6 @@
package javax.security.auth;
import java.security.AccessController;
import java.security.AccessControlContext;
import java.security.AllPermission;
import java.security.Permission;
import java.security.Permissions;
import java.security.PermissionCollection;
......@@ -35,10 +33,8 @@ import java.security.Policy;
import java.security.Principal;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.lang.ClassLoader;
import java.security.Security;
import java.util.Set;
import java.util.Iterator;
import java.util.WeakHashMap;
import java.lang.ref.WeakReference;
......@@ -61,7 +57,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
"\t[SubjectDomainCombiner]");
// Note: check only at classloading time, not dynamically during combine()
private static final boolean useJavaxPolicy = compatPolicy();
private static final boolean useJavaxPolicy =
javax.security.auth.Policy.isCustomPolicySet(debug);
// Relevant only when useJavaxPolicy is true
private static final boolean allowCaching =
......@@ -202,8 +199,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
return null;
}
// maintain backwards compatibility for people who provide
// their own javax.security.auth.Policy implementations
// maintain backwards compatibility for developers who provide
// their own custom javax.security.auth.Policy implementations
if (useJavaxPolicy) {
return combineJavaxPolicy(currentDomains, assignedDomains);
}
......@@ -476,8 +473,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
String s = AccessController.doPrivileged
(new PrivilegedAction<String>() {
public String run() {
return java.security.Security.getProperty
("cache.auth.policy");
return Security.getProperty("cache.auth.policy");
}
});
if (s != null) {
......@@ -488,29 +484,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
return true;
}
// maintain backwards compatibility for people who provide
// their own javax.security.auth.Policy implementations
private static boolean compatPolicy() {
javax.security.auth.Policy javaxPolicy = AccessController.doPrivileged
(new PrivilegedAction<javax.security.auth.Policy>() {
public javax.security.auth.Policy run() {
return javax.security.auth.Policy.getPolicy();
}
});
if (!(javaxPolicy instanceof com.sun.security.auth.PolicyFile)) {
if (debug != null) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
javaxPolicy.toString());
}
return true;
} else {
return false;
}
}
private static void printInputDomains(ProtectionDomain[] currentDomains,
ProtectionDomain[] assignedDomains) {
if (currentDomains == null || currentDomains.length == 0) {
......
......@@ -1379,6 +1379,10 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
* If <code>true</code> and the button has a border,
* the border is painted. The default value for the
* <code>borderPainted</code> property is <code>true</code>.
* <p/>
* Some look and feels might not support
* the <code>borderPainted</code> property,
* in which case they ignore this.
*
* @param b if true and border property is not <code>null</code>,
* the border is painted
......
......@@ -273,7 +273,7 @@ public class BorderFactory
* @since 1.7
*/
public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) {
return new BevelBorder(type, highlight, shadow);
return new SoftBevelBorder(type, highlight, shadow);
}
/**
......@@ -295,7 +295,7 @@ public class BorderFactory
* @since 1.7
*/
public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) {
return new BevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
return new SoftBevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
}
//// EtchedBorder ///////////////////////////////////////////////////////////
......
......@@ -322,7 +322,7 @@ public final class JLayer<V extends Component>
}
/**
* A non-{@code null] border, or non-zero insets, isn't supported, to prevent the geometry
* A non-{@code null} border, or non-zero insets, isn't supported, to prevent the geometry
* of this component from becoming complex enough to inhibit
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
* add it to a {@code JPanel} that has a border.
......@@ -373,8 +373,12 @@ public final class JLayer<V extends Component>
* {@inheritDoc}
*/
public void removeAll() {
setView(null);
setGlassPane(null);
if (view != null) {
setView(null);
}
if (glassPane != null) {
setGlassPane(null);
}
}
/**
......
......@@ -1443,6 +1443,10 @@ public class JTabbedPane extends JComponent
* which can be <code>null</code>, in which case the tab's background color
* will default to the background color of the <code>tabbedpane</code>.
* An internal exception is raised if there is no tab at that index.
* <p/>
* It is up to the look and feel to honor this property, some may
* choose to ignore it.
*
* @param index the tab index where the background should be set
* @param background the color to be displayed in the tab's background
* @exception IndexOutOfBoundsException if index is out of range
......@@ -1472,6 +1476,9 @@ public class JTabbedPane extends JComponent
* <code>null</code>, in which case the tab's foreground color
* will default to the foreground color of this <code>tabbedpane</code>.
* An internal exception is raised if there is no tab at that index.
* <p/>
* It is up to the look and feel to honor this property, some may
* choose to ignore it.
*
* @param index the tab index where the foreground should be set
* @param foreground the color to be displayed as the tab's foreground
......
......@@ -165,11 +165,11 @@ public class TitledBorder extends AbstractBorder
* @param titlePosition the position for the title
*/
public TitledBorder(Border border,
String title,
int titleJustification,
int titlePosition) {
String title,
int titleJustification,
int titlePosition) {
this(border, title, titleJustification,
titlePosition, null, null);
titlePosition, null, null);
}
/**
......@@ -183,12 +183,12 @@ public class TitledBorder extends AbstractBorder
* @param titleFont the font for rendering the title
*/
public TitledBorder(Border border,
String title,
int titleJustification,
int titlePosition,
Font titleFont) {
String title,
int titleJustification,
int titlePosition,
Font titleFont) {
this(border, title, titleJustification,
titlePosition, titleFont, null);
titlePosition, titleFont, null);
}
/**
......@@ -205,11 +205,11 @@ public class TitledBorder extends AbstractBorder
*/
@ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
public TitledBorder(Border border,
String title,
int titleJustification,
int titlePosition,
Font titleFont,
Color titleColor) {
String title,
int titleJustification,
int titlePosition,
Font titleFont,
Color titleColor) {
this.title = title;
this.border = border;
this.titleFont = titleFont;
......@@ -234,7 +234,7 @@ public class TitledBorder extends AbstractBorder
* @param height the height of the painted border
*/
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Border border = getBorderUI();
Border border = getBorder();
String title = getTitle();
if ((title != null) && !title.isEmpty()) {
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
......@@ -347,7 +347,7 @@ public class TitledBorder extends AbstractBorder
* @param insets the object to be reinitialized
*/
public Insets getBorderInsets(Component c, Insets insets) {
Border border = getBorderUI();
Border border = getBorder();
if (border == null) {
insets.set(0, 0, 0, 0);
}
......@@ -402,22 +402,34 @@ public class TitledBorder extends AbstractBorder
/**
* Returns whether or not the border is opaque.
*/
public boolean isBorderOpaque() { return false; }
public boolean isBorderOpaque() {
return false;
}
/**
* Returns the title of the titled border.
*
* @return the title of the titled border
*/
public String getTitle() { return title; }
public String getTitle() {
return title;
}
/**
* Returns the border of the titled border.
*
* @return the border of the titled border
*/
public Border getBorder() {
return border;
return border != null
? border
: UIManager.getBorder("TitledBorder.border");
}
/**
* Returns the title-position of the titled border.
*
* @return the title-position of the titled border
*/
public int getTitlePosition() {
return titlePosition;
......@@ -425,20 +437,28 @@ public class TitledBorder extends AbstractBorder
/**
* Returns the title-justification of the titled border.
*
* @return the title-justification of the titled border
*/
public int getTitleJustification() { return titleJustification; }
public int getTitleJustification() {
return titleJustification;
}
/**
* Returns the title-font of the titled border.
*
* @return the title-font of the titled border
*/
public Font getTitleFont() {
public Font getTitleFont() {
return titleFont;
}
/**
* Returns the title-color of the titled border.
*
* @return the title-color of the titled border
*/
public Color getTitleColor() {
public Color getTitleColor() {
return titleColor;
}
......@@ -447,15 +467,19 @@ public class TitledBorder extends AbstractBorder
/**
* Sets the title of the titled border.
* param title the title for the border
* @param title the title for the border
*/
public void setTitle(String title) { this.title = title; }
public void setTitle(String title) {
this.title = title;
}
/**
* Sets the border of the titled border.
* @param border the border
*/
public void setBorder(Border border) { this.border = border; }
public void setBorder(Border border) {
this.border = border;
}
/**
* Sets the title-position of the titled border.
......@@ -482,19 +506,19 @@ public class TitledBorder extends AbstractBorder
* Sets the title-justification of the titled border.
* @param titleJustification the justification for the border
*/
public void setTitleJustification(int titleJustification) {
public void setTitleJustification(int titleJustification) {
switch (titleJustification) {
case DEFAULT_JUSTIFICATION:
case LEFT:
case CENTER:
case RIGHT:
case LEADING:
case TRAILING:
this.titleJustification = titleJustification;
break;
default:
throw new IllegalArgumentException(titleJustification +
" is not a valid title justification.");
case DEFAULT_JUSTIFICATION:
case LEFT:
case CENTER:
case RIGHT:
case LEADING:
case TRAILING:
this.titleJustification = titleJustification;
break;
default:
throw new IllegalArgumentException(titleJustification +
" is not a valid title justification.");
}
}
......@@ -518,6 +542,7 @@ public class TitledBorder extends AbstractBorder
* Returns the minimum dimensions this border requires
* in order to fully display the border and title.
* @param c the component where this border will be drawn
* @return the {@code Dimension} object
*/
public Dimension getMinimumSize(Component c) {
Insets insets = getBorderInsets(c);
......@@ -557,7 +582,7 @@ public class TitledBorder extends AbstractBorder
if (height < 0) {
throw new IllegalArgumentException("Height must be >= 0");
}
Border border = getBorderUI();
Border border = getBorder();
String title = getTitle();
if ((title != null) && !title.isEmpty()) {
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
......@@ -616,13 +641,6 @@ public class TitledBorder extends AbstractBorder
return Component.BaselineResizeBehavior.OTHER;
}
private Border getBorderUI() {
Border border = getBorder();
return border != null
? border
: UIManager.getBorder("TitledBorder.border");
}
private int getPosition() {
int position = getTitlePosition();
if (position != DEFAULT_POSITION) {
......
......@@ -449,8 +449,8 @@ public class LayerUI<V extends Component>
/**
* Configures the {@code JLayer} this {@code LayerUI} is set to.
* The default implementation registers the {@code LayerUI}
* as a property change listener for the passed {@code JLayer} component.
* The default implementation registers the passed {@code JLayer} component
* as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
*
* @param c the {@code JLayer} component where this UI delegate is being installed
*/
......@@ -461,8 +461,8 @@ public class LayerUI<V extends Component>
/**
* Reverses the configuration which was previously set
* in the {@link #installUI(JComponent)} method.
* The default implementation unregisters the property change listener
* for the passed JLayer component.
* The default implementation unregisters the passed {@code JLayer} component
* as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
*
* @param c the component from which this UI delegate is being removed.
*/
......
......@@ -196,6 +196,10 @@ public class BasicMenuUI extends BasicMenuItemUI
return getHandler();
}
protected MenuKeyListener createMenuKeyListener(JComponent c) {
return (MenuKeyListener)getHandler();
}
public Dimension getMaximumSize(JComponent c) {
if (((JMenu)menuItem).isTopLevelMenu() == true) {
Dimension d = c.getPreferredSize();
......@@ -397,7 +401,7 @@ public class BasicMenuUI extends BasicMenuItemUI
public void stateChanged(ChangeEvent e) { }
}
private class Handler extends BasicMenuItemUI.Handler {
private class Handler extends BasicMenuItemUI.Handler implements MenuKeyListener {
//
// PropertyChangeListener
//
......@@ -580,5 +584,48 @@ public class BasicMenuUI extends BasicMenuItemUI
}
public void menuDragMouseExited(MenuDragMouseEvent e) {}
public void menuDragMouseReleased(MenuDragMouseEvent e) {}
//
// MenuKeyListener
//
/**
* Open the Menu
*/
public void menuKeyTyped(MenuKeyEvent e) {
if (!crossMenuMnemonic && BasicPopupMenuUI.getLastPopup() != null) {
// when crossMenuMnemonic is not set, we don't open a toplevel
// menu if another toplevel menu is already open
return;
}
if (BasicPopupMenuUI.getPopups().size() != 0) {
//Fix 6939261: to return in case not on the main menu
//and has a pop-up.
//after return code will be handled in BasicPopupMenuUI.java
return;
}
char key = Character.toLowerCase((char)menuItem.getMnemonic());
MenuElement path[] = e.getPath();
if (key == Character.toLowerCase(e.getKeyChar())) {
JPopupMenu popupMenu = ((JMenu)menuItem).getPopupMenu();
ArrayList newList = new ArrayList(Arrays.asList(path));
newList.add(popupMenu);
MenuElement subs[] = popupMenu.getSubElements();
MenuElement sub =
BasicPopupMenuUI.findEnabledChild(subs, -1, true);
if(sub != null) {
newList.add(sub);
}
MenuSelectionManager manager = e.getMenuSelectionManager();
MenuElement newPath[] = new MenuElement[0];;
newPath = (MenuElement[]) newList.toArray(newPath);
manager.setSelectedPath(newPath);
e.consume();
}
}
public void menuKeyPressed(MenuKeyEvent e) {}
public void menuKeyReleased(MenuKeyEvent e) {}
}
}
......@@ -81,17 +81,26 @@ public class MetalScrollPaneUI extends BasicScrollPaneUI
}
}
public void installListeners(JScrollPane scrollPane) {
super.installListeners(scrollPane);
scrollBarSwapListener = createScrollBarSwapListener();
scrollPane.addPropertyChangeListener(scrollBarSwapListener);
}
/**
* {@inheritDoc}
*/
protected void uninstallListeners(JComponent c) {
super.uninstallListeners(c);
c.removePropertyChangeListener(scrollBarSwapListener);
}
/**
* @deprecated - Replaced by {@link #uninstallListeners(JComponent)}
*/
@Deprecated
public void uninstallListeners(JScrollPane scrollPane) {
super.uninstallListeners(scrollPane);
scrollPane.removePropertyChangeListener(scrollBarSwapListener);
}
......
......@@ -223,6 +223,16 @@ public final class AWTAccessor {
void processEvent(Component comp, AWTEvent e);
}
/*
* An interface of accessor for the java.awt.Container class.
*/
public interface ContainerAccessor {
/**
* Validates the container unconditionally.
*/
void validateUnconditionally(Container cont);
}
/*
* An interface of accessor for java.awt.Window class.
*/
......@@ -334,6 +344,10 @@ public final class AWTAccessor {
* Gets the state of this frame.
*/
int getExtendedState(Frame frame);
/*
* Gets the maximized bounds of this frame.
*/
Rectangle getMaximizedBounds(Frame frame);
}
/*
......@@ -440,53 +454,19 @@ public final class AWTAccessor {
}
/*
* The java.awt.Component class accessor object.
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/
private static ComponentAccessor componentAccessor;
/*
* The java.awt.Window class accessor object.
*/
private static ContainerAccessor containerAccessor;
private static WindowAccessor windowAccessor;
/*
* The java.awt.AWTEvent class accessor object.
*/
private static AWTEventAccessor awtEventAccessor;
/*
* The java.awt.event.InputEvent class accessor object.
*/
private static InputEventAccessor inputEventAccessor;
/*
* The java.awt.Frame class accessor object.
*/
private static FrameAccessor frameAccessor;
/*
* The java.awt.KeyboardFocusManager class accessor object.
*/
private static KeyboardFocusManagerAccessor kfmAccessor;
/*
* The java.awt.MenuComponent class accessor object.
*/
private static MenuComponentAccessor menuComponentAccessor;
/*
* The java.awt.EventQueue class accessor object.
*/
private static EventQueueAccessor eventQueueAccessor;
/*
* The java.awt.PopupMenu class accessor object.
*/
private static PopupMenuAccessor popupMenuAccessor;
/*
* The java.awt.FileDialog class accessor object.
*/
private static FileDialogAccessor fileDialogAccessor;
/*
......@@ -497,7 +477,7 @@ public final class AWTAccessor {
}
/*
* Retrieve the accessor object for the java.awt.Window class.
* Retrieve the accessor object for the java.awt.Component class.
*/
public static ComponentAccessor getComponentAccessor() {
if (componentAccessor == null) {
......@@ -507,6 +487,24 @@ public final class AWTAccessor {
return componentAccessor;
}
/*
* Set an accessor object for the java.awt.Container class.
*/
public static void setContainerAccessor(ContainerAccessor ca) {
containerAccessor = ca;
}
/*
* Retrieve the accessor object for the java.awt.Container class.
*/
public static ContainerAccessor getContainerAccessor() {
if (containerAccessor == null) {
unsafe.ensureClassInitialized(Container.class);
}
return containerAccessor;
}
/*
* Set an accessor object for the java.awt.Window class.
*/
......
/*
* Copyright (c) 2010 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.
*/
package sun.io;
import sun.nio.cs.ext.IBM833;
public class ByteToCharCp833 extends ByteToCharSingleByte {
private final static IBM833 nioCoder = new IBM833();
public String getCharacterEncoding() {
return "Cp833";
}
public ByteToCharCp833() {
super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
}
}
/*
* Copyright (c) 2010 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.
*/
package sun.io;
import sun.nio.cs.ext.IBM833;
public class CharToByteCp833 extends CharToByteSingleByte {
private final static IBM833 nioCoder = new IBM833();
public String getCharacterEncoding() {
return "Cp833";
}
public CharToByteCp833() {
super.mask1 = 0xFF00;
super.mask2 = 0x00FF;
super.shift = 8;
super.index1 = nioCoder.getEncoderIndex1();
super.index2 = nioCoder.getEncoderIndex2();
}
}
/*
* Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2010, 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
......@@ -406,6 +406,11 @@ public class CharacterEncoding {
aliasTable.put("cp775", "Cp775");
aliasTable.put("775", "Cp775");
aliasTable.put("ibm833", "Cp833");
aliasTable.put("ibm-833", "Cp833");
aliasTable.put("cp833", "Cp833");
aliasTable.put("833", "Cp833");
aliasTable.put("ibm834", "Cp834");
aliasTable.put("ibm-834", "Cp834");
aliasTable.put("cp834", "Cp834");
......
......@@ -44,8 +44,16 @@ import java.io.IOException;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.ResourceBundle;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
......@@ -59,6 +67,17 @@ public enum LauncherHelper {
private static StringBuilder outBuf = new StringBuilder();
private static ResourceBundle javarb = null;
private static final String INDENT = " ";
private static final String VM_SETTINGS = "VM settings:";
private static final String PROP_SETTINGS = "Property settings:";
private static final String LOCALE_SETTINGS = "Locale settings:";
private static final long K = 1024;
private static final long M = K * K;
private static final long G = M * K;
private static final long T = G * K;
private static synchronized ResourceBundle getLauncherResourceBundle() {
if (javarb == null) {
javarb = ResourceBundle.getBundle(defaultBundleName);
......@@ -66,6 +85,184 @@ public enum LauncherHelper {
return javarb;
}
/*
* A method called by the launcher to print out the standard settings,
* by default -XshowSettings is equivalent to -XshowSettings:all,
* Specific information may be gotten by using suboptions with possible
* values vm, properties and locale.
*
* printToStderr: choose between stdout and stderr
*
* optionFlag: specifies which options to print default is all other
* possible values are vm, properties, locale.
*
* maxHeapSize: in bytes, as set by the launcher, a zero-value indicates
* this code should determine this value, using a suitable method.
*
* stackSize: in bytes, as set by the launcher, a zero-value indicates
* this code determine this value, using a suitable method.
*/
static void showSettings(boolean printToStderr, String optionFlag,
long maxHeapSize, long stackSize, boolean isServer) {
PrintStream ostream = (printToStderr) ? System.err : System.out;
String opts[] = optionFlag.split(":");
String optStr = (opts.length > 1 && opts[1] != null)
? opts[1].trim()
: "all";
switch (optStr) {
case "vm":
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
break;
case "properties":
printProperties(ostream);
break;
case "locale":
printLocale(ostream);
break;
default:
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
printProperties(ostream);
printLocale(ostream);
break;
}
}
/*
* prints the main vm settings subopt/section
*/
private static void printVmSettings(PrintStream ostream, long maxHeapSize,
long stackSize, boolean isServer) {
ostream.println(VM_SETTINGS);
if (stackSize != 0L) {
ostream.println(INDENT + "Stack Size: " + scaleValue(stackSize));
}
if (maxHeapSize != 0L) {
ostream.println(INDENT + "Max. Heap Size: " + scaleValue(maxHeapSize));
} else {
ostream.println(INDENT + "Max. Heap Size (Estimated): "
+ scaleValue(Runtime.getRuntime().maxMemory()));
}
ostream.println(INDENT + "Ergonomics Machine Class: "
+ ((isServer) ? "server" : "client"));
ostream.println(INDENT + "Using VM: "
+ System.getProperty("java.vm.name"));
ostream.println();
}
/*
* scale the incoming values to a human readable form, represented as
* K, M, G and T, see java.c parse_size for the scaled values and
* suffixes.
*/
private static String scaleValue(double v) {
MathContext mc2 = new MathContext(3, RoundingMode.HALF_EVEN);
if (v >= K && v < M) {
return (new BigDecimal(v / K, mc2)).toPlainString() + "K";
} else if (v >= M && v < G) {
return (new BigDecimal(v / M, mc2)).toPlainString() + "M";
} else if (v >= G && v < T) {
return (new BigDecimal(v / G, mc2)).toPlainString() + "G";
} else if (v >= T) {
return (new BigDecimal(v / T, mc2)).toPlainString() + "T";
} else {
return String.format("%.0f", v);
}
}
/*
* prints the properties subopt/section
*/
private static void printProperties(PrintStream ostream) {
Properties p = System.getProperties();
ostream.println(PROP_SETTINGS);
List<String> sortedPropertyKeys = new ArrayList<>();
sortedPropertyKeys.addAll(p.stringPropertyNames());
Collections.sort(sortedPropertyKeys);
for (String x : sortedPropertyKeys) {
printPropertyValue(ostream, x, p.getProperty(x));
}
ostream.println();
}
private static boolean isPath(String key) {
return key.endsWith(".dirs") || key.endsWith(".path");
}
private static void printPropertyValue(PrintStream ostream,
String key, String value) {
ostream.print(INDENT + key + " = ");
if (key.equals("line.separator")) {
byte[] bytes = value.getBytes();
for (byte b : bytes) {
switch (b) {
case 0xd:
ostream.print("CR ");
break;
case 0xa:
ostream.print("LF ");
break;
default:
ostream.printf("0x%02X", b & 0xff);
break;
}
}
ostream.println();
return;
}
if (!isPath(key)) {
ostream.println(value);
return;
}
// pretty print the path values as a list
String[] values = value.split(System.getProperty("path.separator"));
int len = values.length;
for (int i = 0 ; i < len ; i++) {
if (i == 0) { // first line treated specially
ostream.println(values[i]);
} else { // following lines prefix with indents
ostream.print(INDENT + INDENT);
ostream.println(values[i]);
}
}
}
/*
* prints the locale subopt/section
*/
private static void printLocale(PrintStream ostream) {
Locale locale = Locale.getDefault();
ostream.println(LOCALE_SETTINGS);
ostream.println(INDENT + "default locale = " + locale.getDisplayLanguage());
printLocales(ostream);
ostream.println();
}
private static void printLocales(PrintStream ostream) {
Locale[] locales = Locale.getAvailableLocales();
final int len = locales == null ? 0 : locales.length;
if (len < 1 ) {
return;
}
ostream.print(INDENT + "available locales = ");
final int last = len - 1 ;
for (int i = 0; i < last ; i++) {
ostream.print(locales[i]);
if (i != last) {
ostream.print(", ");
}
// print columns of 8
if ((i + 1) % 8 == 0) {
ostream.println();
ostream.print(INDENT + INDENT);
}
}
ostream.println(locales[last]);
}
/**
* A private helper method to get a localized message and also
* apply any arguments that we might pass.
......
#
# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2007, 2010, 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
......@@ -97,7 +97,15 @@ java.launcher.X.usage=\
\ -Xcheck:jni perform additional checks for JNI functions\n\
\ -Xshare:off do not attempt to use shared class data\n\
\ -Xshare:auto use shared class data if possible (default)\n\
\ -Xshare:on require using shared class data, otherwise fail.\n\n\
\ -Xshare:on require using shared class data, otherwise fail.\n\
\ -XshowSettings show all settings and continue\n\
\ -XshowSettings:all\n\
\ show all settings and continue\n\
\ -XshowSettings:vm show all vm related settings and continue\n\
\ -XshowSettings:properties\n\
\ show all property settings and continue\n\
\ -XshowSettings:locale\n\
\ show all locale related settings and continue\n\n\
The -X options are non-standard and subject to change without notice.\n
java.launcher.cls.error1=\
......
......@@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
if (remaining == 0) {
eof = true;
consumeCRLF();
t.getServerImpl().requestCompleted (t.getConnection());
return -1;
}
needToReadHeader = false;
......
......@@ -40,5 +40,7 @@ class Event {
class WriteFinishedEvent extends Event {
WriteFinishedEvent (ExchangeImpl t) {
super (t);
assert !t.writefinished;
t.writefinished = true;
}
}
......@@ -38,6 +38,7 @@ class ExchangeImpl {
Headers reqHdrs, rspHdrs;
Request req;
String method;
boolean writefinished;
URI uri;
HttpConnection connection;
long reqContentLen;
......
......@@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
int n = in.read(b, off, len);
if (n > -1) {
remaining -= n;
if (remaining == 0) {
t.getServerImpl().requestCompleted (t.getConnection());
}
}
return n;
}
......
......@@ -55,10 +55,15 @@ class HttpConnection {
SelectionKey selectionKey;
String protocol;
long time;
volatile long creationTime; // time this connection was created
volatile long rspStartedTime; // time we started writing the response
int remaining;
boolean closed = false;
Logger logger;
public enum State {IDLE, REQUEST, RESPONSE};
volatile State state;
public String toString() {
String s = null;
if (chan != null) {
......@@ -78,6 +83,14 @@ class HttpConnection {
context = ctx;
}
State getState() {
return state;
}
void setState (State s) {
state = s;
}
void setParameters (
InputStream in, OutputStream rawout, SocketChannel chan,
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
......
......@@ -201,32 +201,22 @@ class Request {
static class ReadStream extends InputStream {
SocketChannel channel;
SelectorCache sc;
Selector selector;
ByteBuffer chanbuf;
SelectionKey key;
int available;
byte[] one;
boolean closed = false, eof = false;
private boolean closed = false, eof = false;
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
boolean marked;
boolean reset;
int readlimit;
static long readTimeout;
ServerImpl server;
static {
readTimeout = ServerConfig.getReadTimeout();
}
final static int BUFSIZE = 8 * 1024;
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
this.channel = chan;
this.server = server;
sc = SelectorCache.getSelectorCache();
selector = sc.getSelector();
chanbuf = ByteBuffer.allocate (8* 1024);
key = chan.register (selector, SelectionKey.OP_READ);
available = 0;
chanbuf = ByteBuffer.allocate (BUFSIZE);
chanbuf.clear();
one = new byte[1];
closed = marked = reset = false;
}
......@@ -255,6 +245,12 @@ class Request {
return -1;
}
assert channel.isBlocking();
if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
throw new IndexOutOfBoundsException ();
}
if (reset) { /* satisfy from markBuf */
canreturn = markBuf.remaining ();
willreturn = canreturn>srclen ? srclen : canreturn;
......@@ -263,17 +259,19 @@ class Request {
reset = false;
}
} else { /* satisfy from channel */
canreturn = available();
while (canreturn == 0 && !eof) {
block ();
canreturn = available();
chanbuf.clear ();
if (srclen < BUFSIZE) {
chanbuf.limit (srclen);
}
if (eof) {
do {
willreturn = channel.read (chanbuf);
} while (willreturn == 0);
if (willreturn == -1) {
eof = true;
return -1;
}
willreturn = canreturn>srclen ? srclen : canreturn;
chanbuf.flip ();
chanbuf.get(b, off, willreturn);
available -= willreturn;
if (marked) { /* copy into markBuf */
try {
......@@ -286,6 +284,11 @@ class Request {
return willreturn;
}
public boolean markSupported () {
return true;
}
/* Does not query the OS socket */
public synchronized int available () throws IOException {
if (closed)
throw new IOException ("Stream is closed");
......@@ -296,36 +299,7 @@ class Request {
if (reset)
return markBuf.remaining();
if (available > 0)
return available;
chanbuf.clear ();
available = channel.read (chanbuf);
if (available > 0) {
chanbuf.flip();
} else if (available == -1) {
eof = true;
available = 0;
}
return available;
}
/**
* block() only called when available==0 and buf is empty
*/
private synchronized void block () throws IOException {
long currtime = server.getTime();
long maxtime = currtime + readTimeout;
while (currtime < maxtime) {
if (selector.select (readTimeout) == 1) {
selector.selectedKeys().clear();
available ();
return;
}
currtime = server.getTime();
}
throw new SocketTimeoutException ("no data received");
return chanbuf.remaining();
}
public void close () throws IOException {
......@@ -333,8 +307,6 @@ class Request {
return;
}
channel.close ();
selector.selectNow();
sc.freeSelector(selector);
closed = true;
}
......@@ -362,23 +334,14 @@ class Request {
SocketChannel channel;
ByteBuffer buf;
SelectionKey key;
SelectorCache sc;
Selector selector;
boolean closed;
byte[] one;
ServerImpl server;
static long writeTimeout;
static {
writeTimeout = ServerConfig.getWriteTimeout();
}
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
this.channel = channel;
this.server = server;
sc = SelectorCache.getSelectorCache();
selector = sc.getSelector();
key = channel.register (selector, SelectionKey.OP_WRITE);
assert channel.isBlocking();
closed = false;
one = new byte [1];
buf = ByteBuffer.allocate (4096);
......@@ -411,31 +374,14 @@ class Request {
l -= n;
if (l == 0)
return;
block();
}
}
void block () throws IOException {
long currtime = server.getTime();
long maxtime = currtime + writeTimeout;
while (currtime < maxtime) {
if (selector.select (writeTimeout) == 1) {
selector.selectedKeys().clear ();
return;
}
currtime = server.getTime();
}
throw new SocketTimeoutException ("write blocked too long");
}
public void close () throws IOException {
if (closed)
return;
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
channel.close ();
selector.selectNow();
sc.freeSelector(selector);
closed = true;
}
}
......
......@@ -53,8 +53,6 @@ class SSLStreams {
EngineWrapper wrapper;
OutputStream os;
InputStream is;
static long readTimeout = ServerConfig.getReadTimeout();
static long writeTimeout = ServerConfig.getWriteTimeout();
/* held by thread doing the hand-shake on this connection */
Lock handshaking = new ReentrantLock();
......@@ -77,10 +75,13 @@ class SSLStreams {
if (cfg != null) {
Parameters params = new Parameters (cfg, addr);
cfg.configure (params);
//BEGIN_TIGER_EXCLUDE
SSLParameters sslParams = params.getSSLParameters();
if (sslParams != null) {
engine.setSSLParameters (sslParams);
} else {
} else
//END_TIGER_EXCLUDE
{
/* tiger compatibility */
if (params.getCipherSuites() != null) {
try {
......@@ -104,7 +105,6 @@ class SSLStreams {
class Parameters extends HttpsParameters {
InetSocketAddress addr;
SSLParameters params;
HttpsConfigurator cfg;
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
......@@ -117,12 +117,15 @@ class SSLStreams {
public HttpsConfigurator getHttpsConfigurator() {
return cfg;
}
//BEGIN_TIGER_EXCLUDE
SSLParameters params;
public void setSSLParameters (SSLParameters p) {
params = p;
}
SSLParameters getSSLParameters () {
return params;
}
//END_TIGER_EXCLUDE
}
/**
......@@ -245,9 +248,6 @@ class SSLStreams {
SocketChannel chan;
SSLEngine engine;
SelectorCache sc;
Selector write_selector, read_selector;
SelectionKey wkey, rkey;
Object wrapLock, unwrapLock;
ByteBuffer unwrap_src, wrap_dst;
boolean closed = false;
......@@ -260,16 +260,9 @@ class SSLStreams {
unwrapLock = new Object();
unwrap_src = allocate(BufType.PACKET);
wrap_dst = allocate(BufType.PACKET);
sc = SelectorCache.getSelectorCache();
write_selector = sc.getSelector();
wkey = chan.register (write_selector, SelectionKey.OP_WRITE);
read_selector = sc.getSelector();
wkey = chan.register (read_selector, SelectionKey.OP_READ);
}
void close () throws IOException {
sc.freeSelector (write_selector);
sc.freeSelector (read_selector);
}
/* try to wrap and send the data in src. Handles OVERFLOW.
......@@ -304,15 +297,7 @@ class SSLStreams {
wrap_dst.flip();
int l = wrap_dst.remaining();
assert l == r.result.bytesProduced();
long currtime = time.getTime();
long maxtime = currtime + writeTimeout;
while (l>0) {
write_selector.select(writeTimeout); // timeout
currtime = time.getTime();
if (currtime > maxtime) {
throw new SocketTimeoutException ("write timed out");
}
write_selector.selectedKeys().clear();
l -= chan.write (wrap_dst);
}
}
......@@ -342,20 +327,12 @@ class SSLStreams {
needData = true;
}
synchronized (unwrapLock) {
int x,y;
int x;
do {
if (needData) {
long currTime = time.getTime();
long maxtime = currTime + readTimeout;
do {
if (currTime > maxtime) {
throw new SocketTimeoutException ("read timedout");
}
y = read_selector.select (readTimeout);
currTime = time.getTime();
} while (y != 1);
read_selector.selectedKeys().clear();
x = chan.read (unwrap_src);
} while (x == 0);
if (x == -1) {
throw new IOException ("connection closed for reading");
}
......
/*
* Copyright (c) 2006, 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.
*/
package sun.net.httpserver;
import java.util.*;
import java.nio.*;
import java.net.*;
import java.io.*;
import java.security.*;
import java.nio.channels.*;
/*
* Implements a cache of java.nio.channels.Selector
* where Selectors are allocated on demand and placed
* in a temporary cache for a period of time, so they
* can be reused. If a period of between 2 and 4 minutes
* elapses without being used, then they are closed.
*/
public class SelectorCache {
static SelectorCache cache = null;
private SelectorCache () {
freeSelectors = new LinkedList<SelectorWrapper>();
CacheCleaner c = AccessController.doPrivileged(
new PrivilegedAction<CacheCleaner>() {
public CacheCleaner run() {
CacheCleaner cleaner = new CacheCleaner();
cleaner.setDaemon (true);
return cleaner;
}
});
c.start();
}
/**
* factory method for creating single instance
*/
public static SelectorCache getSelectorCache () {
synchronized (SelectorCache.class) {
if (cache == null) {
cache = new SelectorCache ();
}
}
return cache;
}
private static class SelectorWrapper {
private Selector sel;
private boolean deleteFlag;
private SelectorWrapper (Selector sel) {
this.sel = sel;
this.deleteFlag = false;
}
public Selector getSelector() { return sel;}
public boolean getDeleteFlag () {return deleteFlag;}
public void setDeleteFlag (boolean b) {deleteFlag = b;}
}
/* list of free selectors. Can be re-allocated for a period
* of time, after which if not allocated will be closed
* and removed from the list (by CacheCleaner thread)
*/
LinkedList<SelectorWrapper> freeSelectors;
synchronized Selector getSelector () throws IOException {
SelectorWrapper wrapper = null;
Selector selector;
if (freeSelectors.size() > 0) {
wrapper = freeSelectors.remove();
selector = wrapper.getSelector();
} else {
selector = Selector.open();
}
return selector;
}
synchronized void freeSelector (Selector selector) {
freeSelectors.add (new SelectorWrapper (selector));
}
/* Thread ensures that entries on freeSelector list
* remain there for at least 2 minutes and no longer
* than 4 minutes.
*/
class CacheCleaner extends Thread {
public void run () {
long timeout = ServerConfig.getSelCacheTimeout() * 1000;
while (true) {
try {Thread.sleep (timeout); } catch (Exception e) {}
synchronized (freeSelectors) {
ListIterator<SelectorWrapper> l = freeSelectors.listIterator();
while (l.hasNext()) {
SelectorWrapper w = l.next();
if (w.getDeleteFlag()) {
/* 2nd pass. Close the selector */
try {
w.getSelector().close();
} catch (IOException e) {}
l.remove();
} else {
/* 1st pass. Set the flag */
w.setDeleteFlag (true);
}
}
}
}
}
}
}
......@@ -27,6 +27,8 @@ package sun.net.httpserver;
import com.sun.net.httpserver.*;
import com.sun.net.httpserver.spi.*;
import java.util.logging.Logger;
import java.security.PrivilegedAction;
/**
* Parameters that users will not likely need to set
......@@ -37,23 +39,26 @@ class ServerConfig {
static int clockTick;
static int defaultClockTick = 10000 ; // 10 sec.
static final int DEFAULT_CLOCK_TICK = 10000 ; // 10 sec.
/* These values must be a reasonable multiple of clockTick */
static long defaultReadTimeout = 20 ; // 20 sec.
static long defaultWriteTimeout = 60 ; // 60 sec.
static long defaultIdleInterval = 300 ; // 5 min
static long defaultSelCacheTimeout = 120 ; // seconds
static int defaultMaxIdleConnections = 200 ;
static final long DEFAULT_IDLE_INTERVAL = 300 ; // 5 min
static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200 ;
static long defaultDrainAmount = 64 * 1024;
static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
static final long DEFAULT_TIMER_MILLIS = 1000;
static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
static long readTimeout;
static long writeTimeout;
static long idleInterval;
static long selCacheTimeout;
static long drainAmount; // max # of bytes to drain from an inputstream
static int maxIdleConnections;
// max time a request or response is allowed to take
static long maxReqTime;
static long maxRspTime;
static long timerMillis;
static boolean debug = false;
static {
......@@ -61,49 +66,79 @@ class ServerConfig {
idleInterval = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.idleInterval",
defaultIdleInterval))).longValue() * 1000;
DEFAULT_IDLE_INTERVAL))).longValue() * 1000;
clockTick = ((Integer)java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction(
"sun.net.httpserver.clockTick",
defaultClockTick))).intValue();
DEFAULT_CLOCK_TICK))).intValue();
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction(
"sun.net.httpserver.maxIdleConnections",
defaultMaxIdleConnections))).intValue();
DEFAULT_MAX_IDLE_CONNECTIONS))).intValue();
readTimeout = ((Long)java.security.AccessController.doPrivileged(
drainAmount = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.readTimeout",
defaultReadTimeout))).longValue()* 1000;
"sun.net.httpserver.drainAmount",
DEFAULT_DRAIN_AMOUNT))).longValue();
selCacheTimeout = ((Long)java.security.AccessController.doPrivileged(
maxReqTime = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.selCacheTimeout",
defaultSelCacheTimeout))).longValue()* 1000;
"sun.net.httpserver.maxReqTime",
DEFAULT_MAX_REQ_TIME))).longValue();
writeTimeout = ((Long)java.security.AccessController.doPrivileged(
maxRspTime = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.writeTimeout",
defaultWriteTimeout))).longValue()* 1000;
"sun.net.httpserver.maxRspTime",
DEFAULT_MAX_RSP_TIME))).longValue();
drainAmount = ((Long)java.security.AccessController.doPrivileged(
timerMillis = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.drainAmount",
defaultDrainAmount))).longValue();
"sun.net.httpserver.timerMillis",
DEFAULT_TIMER_MILLIS))).longValue();
debug = ((Boolean)java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"sun.net.httpserver.debug"))).booleanValue();
}
static long getReadTimeout () {
return readTimeout;
}
static long getSelCacheTimeout () {
return selCacheTimeout;
static void checkLegacyProperties (final Logger logger) {
// legacy properties that are no longer used
// print a warning to logger if they are set.
java.security.AccessController.doPrivileged(
new PrivilegedAction<Void>() {
public Void run () {
if (System.getProperty("sun.net.httpserver.readTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.readTimeout "+
"property is no longer used. "+
"Use sun.net.httpserver.maxReqTime instead."
);
}
if (System.getProperty("sun.net.httpserver.writeTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.writeTimeout "+
"property is no longer used. Use "+
"sun.net.httpserver.maxRspTime instead."
);
}
if (System.getProperty("sun.net.httpserver.selCacheTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.selCacheTimeout "+
"property is no longer used."
);
}
return null;
}
}
);
}
static boolean debugEnabled () {
......@@ -122,11 +157,19 @@ class ServerConfig {
return maxIdleConnections;
}
static long getWriteTimeout () {
return writeTimeout;
}
static long getDrainAmount () {
return drainAmount;
}
static long getMaxReqTime () {
return maxReqTime;
}
static long getMaxRspTime () {
return maxRspTime;
}
static long getTimerMillis () {
return timerMillis;
}
}
......@@ -235,8 +235,6 @@ abstract class AsynchronousSocketChannelImpl
if (remoteAddress == null)
throw new NotYetConnectedException();
if (timeout < 0L)
throw new IllegalArgumentException("Negative timeout");
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
boolean shutdown = false;
......@@ -342,8 +340,6 @@ abstract class AsynchronousSocketChannelImpl
if (isOpen()) {
if (remoteAddress == null)
throw new NotYetConnectedException();
if (timeout < 0L)
throw new IllegalArgumentException("Negative timeout");
// check and update state
synchronized (writeLock) {
if (writeKilled)
......
......@@ -358,7 +358,7 @@ class UTF_8 extends Unicode
private static class Encoder extends CharsetEncoder {
private Encoder(Charset cs) {
super(cs, 1.1f, 4.0f);
super(cs, 1.1f, 3.0f);
}
public boolean canEncode(char c) {
......
......@@ -778,6 +778,13 @@ public class ExtendedCharsets
"csIBM500"
});
charset("x-IBM833", "IBM833",
new String[] {
"cp833",
"ibm833",
"ibm-833"
});
//EBCDIC DBCS-only Korean
charset("x-IBM834", "IBM834",
new String[] {
......
......@@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
else return null;
}
Ticket readData() throws IOException, RealmException, KrbApErrException, Asn1Exception {
byte[] readData() throws IOException {
int length;
length = read(4);
if (length > 0) {
if (length == 0) {
return null;
} else {
byte[] bytes = new byte[length];
read(bytes, 0, length);
Ticket ticket = new Ticket(bytes);
return ticket;
return bytes;
}
else return null;
}
boolean[] readFlags() throws IOException {
......@@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
}
return flags;
}
/**
* Reads the next cred in stream.
* @return the next cred, null if ticket or second_ticket unparseable.
*
* Note: MIT krb5 1.8.1 might generate a config entry with server principal
* X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/REALM@REALM. The
* entry is used by KDC to inform the client that it support certain
* features. Its ticket is not a valid krb5 ticket and thus this method
* returns null.
*/
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
PrincipalName cpname = readPrincipal(version);
if (DEBUG)
......@@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
if (auData != null) {
auData = new AuthorizationData(auDataEntry);
}
Ticket ticket = readData();
if (DEBUG) {
System.out.println(">>>DEBUG <CCacheInputStream>");
if (ticket == null) {
System.out.println("///ticket is null");
}
byte[] ticketData = readData();
byte[] ticketData2 = readData();
try {
return new Credentials(cpname, spname, key, authtime, starttime,
endtime, renewTill, skey, tFlags,
addrs, auData,
ticketData != null ? new Ticket(ticketData) : null,
ticketData2 != null ? new Ticket(ticketData2) : null);
} catch (Exception e) { // If any of new Ticket(*) fails.
return null;
}
Ticket secTicket = readData();
Credentials cred = new Credentials(cpname, spname, key, authtime, starttime,
endtime, renewTill, skey, tFlags,
addrs, auData, ticket, secTicket);
return cred;
}
}
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册