Release notes for AR Common
For download and other details see the project's download site.
Version 1.1.8 (2026-11-04 14:36:09)
The NetUtil.downloadContentOf() method has been reimplemented (Copied from FileUtil.readFile()) to download newline characters as they are on the server.
ProgressState support has been added in the process.
If a ProgressState was used where useUnits was true but maximum was not set, a parenthesis ')' was missing in the output. This has been fixed.
The buffer in NetUtil.downloadFile() method has been changed from 1024 bytes to 100000 bytes.
The leaveGroup and joinGroup method calls in the MulticastConnection class have been marked with @SuppressWarnings("deprecation").
The unnecessary @SuppressWarnings("serial") in the XmlSerializerTest.main() method has been removed.
"time out" changed to "timeout".
The writeText() method in the HtmlWriter class will now replace "'" with "'" as "'" is not supported by old Internet Explorer.
"missmatch" changed to "mismatch".
The Util.printMessageWithSourceLineLocale() method has been changed to be private.
Trailing spaces have been removed.
"\t" changed to " ".
"," changed to ", ".
"new line" changed to "newline".
"sortes" changed to "sorts".
Inner double spaces have been removed.
Missing "final" has been added to constants.
Missing "static" has been added to constants.
"default:" changed to "default :".
"allready" changed to "already".
Wrong line intenting has been fixed.
The javaConstantDecodeString() method in the StringUtil class parsed the \u<number> as decimal. This has been corrected to hex.
The javaConstantEncodeString() method in the StringUtil class now supports the '\'' escape character.
The javaConstantEncodeString() method in the StringUtil class encoded characters < 32 as \u<decimal number>. This has been corrected to hex.
Two "boolean forceAscii" variants of the javaConstantEncodeString() method have been added to the StringUtil class.
"else([^ ])" changed to "else $1".
"([^ ])\\{" changed to "$1 {".
"\\}else" changed to "} else".
"([^ ] +)\\)" changed to "$1)".
The "File names in lower case are equal" error message from the copy() method in the FileUtil class has been spell corrected.
The "new MyJTextField(String text)" code caused a NullPointerException. This has been fixed.
The "been clean up" spell mistake in the release notes has been corrected to "been cleaned up".
Javadoc for the checkWriteAccess() method in the FileUtil class has been added.
"serializeses" changed to "serializes".
"was map to" changed to "was mapped to".
If a two components were added on the same line to a LabelFieldJComponent, and one of the components was disabled and the other was not visible (set in that order), the label was still enabled. This has been fixed.
"doesn\'t exists" changed to "doesn't exist".
Not visible component(s) (in a line with more than one component) will no longer leave a hole where they were in the LabelFieldJComponent.
Some comments in the AbstractDelegatingJScrollPane class have been slighltly corrected / update / extended.
If F2 was pressed in an empty MyJTable, a IndexOutOfBoundsException: "Index -1 out of bounds for length 0" was thrown. This has been fixed.
The comment in the top of the MyJTable class has been slightly updated.
The MyJList class will now only send one event on selection change (addListSelectionListener()) instead of two (The e.getValueIsAdjusting() event is ignored).
The ApplicationUtil class now will try to fix the wrong locale on Linux. Can be switch off using the ApplicationUtil.fixLocale field. See ApplicationUtil.fixLocale() method for details.
Note: This will brake the use of "-Duser.country=..." on the command line on Linux. The environment variable "LC_NUMERIC" can be used instead.
The FileUtil.warnIfBomHeaderRemoved field has been added.
The startCell() methods (All variants) in the HtmlWriter class now supports width written in pixel ("px").
"+" changed to " + ".
The FileUtil.calculateAbsoluteFileName() methods (All variants) (This includes all variants of the calculateAbsolutePath() method) will replace File.separator + File.separator with File.separator ("//" -> "/" and "\" -> "\").
The code has been slightly refactored and the calculateAbsoluteFileNameLocal() method has been created in the process.
Javadoc for the these methods have been added in the process.
The FileUtil.copy() methods (All variants) will now throw a more clear exeception, if the fromFileName is a directory, stating that copying directories are not supported.
The FileUtil.rename() methods (All variants) will now also throw a more clear exeception, if the fromFileName is a directory and the fromFileName and the toFileName are on different mount points (Linux) / drives (Windows).
"coping" changed to "copying".
A new variant of the FileUtil.readDataFromFile() method with a read / seek offset has been added.
Documentation has been added to all the FileUtil.readDataFromFile() methods in the process.
JavaDoc has been added to createInstanceNoConstructorCall(), createInstanceUsingParentConstructorOnly() and createInstanceUsingParentConstructorOnlyUnsafe() methods in the ReflectionUtil class.
The "Code copied from" notation has been cleaned up.
The calculateFileSystemType() and getFileSystemString() methods have been added to the FileUtil class. (The getFileSystemString() method is added as uncommented as it contains since 11 code).
"\'" changed to "'".
"because it probably" changed to "because it is probably".
"reserve" changed to "reversed".
The cancelable parameter was ignored in the SimpleProgressJDialog.createProgressJDialog(String title, String progress, boolean cancelable) method (Copy-and-paste bug). This has been fixed.
"exit value" changed to "exit code".
Version 1.1.7 (2025-11-05 08:48:05)
Public on yautar.dk at 2025-11-05 09:15.
The ProcessUtil.FullProcessOutput class has been changed from private to public.
The GUIUtil.requestWindowToClose() method has been slightly changed.
A daemon variant of the attachOutput method in the ProcessUtil class has been added.
The FileUtil.COPY_IN_LENGTH_UNKNOWN, READ_NO_MAXIMUM_NUMBER_OF_BYTES and COMPARE_ERROR fields have been created.
If FileUtil.rename() was called with a toFileName that existed true was return / no exception was throw. This has been fixed (Maybe only a bug on Linux).
If the from file exists after a successful rename (FileUtil.rename()) an exception is now thrown.
The call to XmlUtil.decodeXmlString() in the XmlDeserializer.stringValueToSimpleObject() method has been removed, as this is already done by the SAX parser.
String values like "sdsadasd asd &amp; asd asd asd2.jar" in the XML was decoded twice to "sdsadasd asd & asd asd asd2.jar". This has been fixed.
The NetUtil.encodeUrlMyVariant() will now only assume that a ':' is protocol delimiter if it is placed before index 10.
The FileUtil method doesDirectoryContainsAFile() has been renamed to doesDirectoryContainAFile().
A minor bug in the fileContainsText() method in the FileUtil class has been fixed, and the buffer size used in the method has been changed from 1kB to 100kB.
The StringUtil.getIndexOfFirstRegExpMatch() methods (Two variants) have been renamed to indexOfFirstRegExpMatch().
The validation in the StringUtil.indexOfOccurrence() method has been tightened.
The Javadoc for the HtmlWriter.writeText() method was incorrectly encoded. This has been fixed.
The logic in the selectAFile() and selectADirectory() methods (selectAFileOrDirectory()) in the GUIUtil class regarding converting a relative file name or path to an absolute file name / path has been changed slightly.
The title of the dialog shown by a call to the selectAFile() or selectADirectory() methods in the GUIUtil class is now only set if the title is not null and not empty.
Two variants of the selectAFile() and selectADirectory() methods with a button text parameter have been added to the GUIUtil class.
If a call to MyTree.setNodes() was made where userObject in one or more nodes was equals() but not "==", the userObject was not used. The old userObject remained in the MyTree object. The error only occurs if the node(s) are not moved / stays in the same child node index. This error has been fixed.
The MyTree.update() method has been reimplemented in the process.
This makes it support swapping of nodes, which before caused a "oldNodeIndex < i ..." console message, and an incorrect tree.
"return;" changed to "return ;".
If the StringUtil.toWordCase() method was called with a " ", the empty string or a string ending in space (' ') a StringIndexOutOfBoundsException was thrown. This has been fixed.
The NetUtil.downloadContentOf() method only read the first line and returned that. This has been fixed to read all lines.
The printAndLogException() (both variants) methods in ExceptionUtil class has been changed from printing in System.sys to printing in System.err. Note: These methods are used by printLogAndShowException() methods (All variants).
The printException() method in ExceptionUtil class didn't print a newline at the end. This has been fixed.
The getFirstGroupForRegExp() methods (two variants) have been added to the StringUtil class.
The getGroupsForRegExpAsFlatArrayWithValidation() methods (two variants) have been added to the StringUtil class.
The IdAndStyle class now supports "vertical-align:top".
A variant of the writeCell() method and of the startCell() method with an IdAndStyle parameter have been added to the HtmlWriter class.
Comments in the HtmlWriter class from normalModeValidation refactoring done by the validateNormalMode() method and all calls to it, have been removed / cleaned up.
The support for the frameset tag in the HtmlWriter class has been removed as it is deprecated. (Removed: field: boolean framePage, methods: startFrameSet(), endFrameSet(), writeFrame() (Two variants), startNoFrame(), endNoFrame(), writeNoFrameStandard() (Two variants) and modes: BEFORE_FRAMESET, FRAMESET, NO_FRAME, AFTER_NO_FRAME and AFTER_FRAMESET.
The "Invalid escape character" RuntimeException message thrown by the javaConstantDecodeString() method in the StringUtil class has been improved with index of the character and a substring (if long) of the string input parameter.
The MyJTextArea class has been changed use DefaultCaret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE) instead of the default DefaultCaret.UPDATE_WHEN_ON_EDT, to avoid that the caret is moved to the bottom when the setText() method is called.
This doesn't work as specified by the documentation (The caret is always moved to the start), so extra code has been added to make sure that the caret doesn't actually move / work as described in the documentation.
A very similar change has been made to the MyJTextField.setText() method.
The setText(String) method in the MyJTextArea class and setText(String) method in the MyJTextField class will now move the caret to its initial position (area=0, field=text.length) on the first call. They will not move the caret on subsequent call.
The setText(String, boolean) methods in both classes have been added a boolean parameter to control this movement.
The "Code copied from" notation has been cleaned up.
A call to MyJTextArea.setText() or to MyJTextField.setText() caused a changed that needed to be undo twice. This has been fixed by the new MyUndoManager class.
The GUIUtil.addUndoToTextComponent() method has been moved to the MyUndoManager class and modified slightly in the process.
The MyUndoManager class will also make a "selecting text and then start writing"-change be only one undo / redo.
The "messsage" spell mistake in the "GUIUtil.setLinuxApplicationName(): Throw an <class name> exception with messsage \"" + e.getMessage() + "\" => Ignored" console message has been fixed.
"have been rename to" changed to "have been renamed to" in release notes.
"has been rename to" changed to "has been renamed to" in release notes.
"been change " changed to "been changed " in release notes.
Version 1.1.6 (2024-05-05 16:48:12)
Public on yautar.dk at 2024-05-05 16:54.
The getFirstNameGroupForRegExp() methods (Both variants) in the StringUtil class have been renamed to getFirstNamedGroupForRegExp.
A link (writeLink()) may now be written in the FONT tag in the HtmlWriter class.
The decodeDomainNameFromIDN() and encodeDomainNameToIDN() methods have been added to the NetUtil class.
The decodeUrlToDisplayString() method in the NetUtil class will now show IDN domains correct (using decodeDomainNameFromIDN()).
The encodeUrlMyVariant() method in the NetUtil class will now encoding IDN domains correct (using encodeDomainNameToIDN()).
A hack has been added to ensure that the domain name can't be longer that 63 characters.
The writeImage() method in the HtmlWriter class will now encoding image URL and HtmlImageArea.href using the NetUtil.encodeUrlMyVariant() method. See the HtmlWriter.adjustLink() method.
The error message from ZipUtil.unzipFiles() method has been slightly changed.
Uncommented unit test source code have been added to the other projects zip file.
The disc -> disk spell mistake on the download site has been fixed.
The scrollRectToVisible() method in the MyJTable class has stop working after the refactoring to wrap a JScrollPane. This caused the scrollToVisible(), scrollToSelectedVisible() and setSelectedIndex() (partly) methods to stop working. This has been fixed.
The addKeyListener() method in the MyJTable class has stop working after the refactoring to wrap a JScrollPane. This has been fixed.
The removeKeyListener(), addMouseListener(), removeMouseListener(), addMouseMotionListener() and removeMouseMotionListener() methods have been added to avoid similar errors.
The method order in MyJTable class has been cleaned up.
The MyJTextArea.setMyBackground() method has been removed. Use MyJTextArea.setBackground() instead.
The AbstractDelegatingJScrollPane class has been added and MyJList, MyJTable, MyJTextArea and MyJTree classes have been refactored to extend it.
This refactoring might cause the MyJList, MyJTable, MyJTextArea and MyJTree classes to behave a little different in some cases especially for the setFont(), setForeground() and setBackground() methods.
The MyJTextArea.setMyDisabledTextColor() method has been renamed to setDisabledTextColor.
Code from the MyJList.scrollToTheBottom() method and the MyJTree.selectLastElementLocal() method have been refactored to the AbstractDelegatingJScrollPane.scrollToTheBottom().
The MyJSlider class has been changed from extending JPanel to extending JSlider, and a lot of the code in it have by been removed in the process.
The MyJComboBox class has been refactored and many methods have been copied from AbstractDelegatingJScrollPane into and modified.
The public MyJComboBox(String[] items) constructor has been added in the process.
The setMySelectedIndex() method has been renamed to setSelectedIndex.
The "cell editing will start on normal keys and it will scroll to the edited cell" feature in the MyJTable class has stop working after the refactoring to wrap a JScrollPane. This has been fixed.
The "scroll to the editing cell" will now only activate if the cell is editable.
The switchRow() method has been renamed to nextRow and the method switchCell() has been renamed to nextCell in the HtmlWriter class.
Start table (startTable() method) is now allowed in a form in the HtmlWriter class.
The HtmlWrite.inFormHierarki() method was been added, and will now be used to validate the state when the HtmlWrite.startForm() methods is called.
The fields HTTP_METHOD_POST, FORM_ENCTYPE_MULTIPART, INPUT_TYPE_CHECKBOX, INPUT_TYPE_FILE, INPUT_TYPE_HIDDEN, INPUT_TYPE_NUMBER, INPUT_TYPE_RADIO, INPUT_TYPE_SUBMIT, INPUT_TYPE_TEXT, INPUT_TYPE_DATE, INPUT_TYPE_DATETIME_LOCAL and INPUT_TYPE_TIME have been added to the HtmlWriter class.
The isClassEnum() and enumToString() methods have been moved from the XmlSerializerHelperUtil class to the ReflectionUtil class.
The two methods enumToString() and enumToStringUnsafe() have created in the ReflectionUtil class in the process.
An "enctype" variant of the startForm() method has been added to HtmlWriter.
Visibility of the levelUp() and levelDown() methods and the enum HtmlMode in HtmlWriter class have been changed from private to protected.
Two variants ((String width, int colspan, boolean noWrap) and (String width, int colspan, boolean noWrap, String align)) of the nextCell(), nextRow(), writeEmptyCell(One variant only) and writeCell() methods have been added to the HtmlWriter class.
The writeCell() method in the HtmlWriter class will now write br tags for each newline character (using the writeTextWithNewlines() method) in the content parameter.
The DateUtil.createSimpleDateFormat() method has been renamed to createSimpleDateFormatLenient() and it's visibility has been changed to public.
The printAndLogException() method has been added to the ExceptionUtil class.
The showLogAndPrintException() methods (All variants) have been renamed to printLogAndShowException in the ExceptionUtil class.
The isOpenAndNotNestedTags() method has been added to the HtmlWriter class.
Support for the fieldset tag and nested legend tag have been added to the HtmlWriter class.
The visibility of the writeImage(String fileName, String alt, String style, HtmlImageMap htmlImageMap) method has been changed from private to protected.
The writeImageLink (Two variants) methods and the writeImageLinkNewWindow() method have been added to the HtmlWriter class.
The validation of mode (HtmlMode) in the HtmlWriter class has been refactored. Some minor bugs have been fixed and some business logic have been changed in the process.
The StringUtil method bitsStringToInt() has been renamed to bitStringToInt.
The ArrayUtil method arrayContains() has been renamed to contains.
The parameters of the stringWithNumberOfChar method in the StringUtil class have been swapped to make it more consistent with the stringWithFixLength (both variant) and longToStringWithFixLength() methods.
The methods in the class have been rearranged in the process.
The intToBitString (both variants) methods in the StringUtil class have been refactored.
The extra try-catch-throw-RuntimeException in the writeHtml() and writeNewlineInternal() methods in the HtmlWriter class have been removed.
The startTextColor() and endTextColor() methods have been added to the HtmlWriter class.
The toHex() (Two variants) methods have been to the StringUtil class.
The isEmpty() method has been added to the HtmlWriter class.
The random() method in the MathUtil class has been renamed to randomNumber.
The randomString() method has been added to the MathUtil class.
The decodeCookieElement(), encodeCookieName() and encodeCookieValue() methods have been added to the NetUtil class. This include a new unit test.
The startFontSize() and endFontSize() methods in the HtmlWriter class have renamed to startFontSize and endFontSize respectively.
The methods will now generate a span tag with CSS to make it HTML5 compliant. Note: This makes the text about 7 times smaller!
The startCell() method in the HtmlWriter will now call startRow() if a row has not been started. Note: The nextCell(), writeCell() and writeEmptyCell() methods (All variants) calls startCell() and are therefore affected by this changed.
The writeIFrame() methods (4 variants) have been added to the HtmlWriter class.
The HOUR_IN_SECONDS, DAY_IN_SECONDS and YEAR_IN_SECONDS fields have been added to the DateUtil class.
The exception thrown from the StringUtil.stringToInt() method has been slightly changed.
The stringToByte methods (Two variants) have been added to the StringUtil class.
The spell mistake in the saveXmlOnlyIfChnaged has been fixed to saveXmlOnlyIfChanged in the SettingsUtil class.
The parameters of the saveObjectToFile() and the saveObjectToFileAsXML() methods in the SerializableUtil class and the objectToXmlFile() method in the XmlUtil class have been swapped to match FileUtil.writeFile().
The ObjectFile class has been added.
The writeFile(String fileName, String content...) method variants in the FileUtil class always added a newline to end of the file. This has been fixed.
The endWithNewLine parameter has been added to the writeLinesToFile(String fileName, Collection<String> lines, boolean append, String encoding, Newline newLine) method in the FileUtil class in the process.
The bug caused the saveUsingTempFileIfChanged() method in the SettingsUtil class to always save the file. This has been fixed by the bug fix above.
The FileUtil.writeAppendLineToFile() methods (Both variants) have been renamed to writeAppendLinesToFile (line -> lines) and reimplemented to support if the line(s) parameter contains a newline char ('\n').
The writeVideo() methods (two variants) and writeAudio() methods (two variants) have been added to the HtmlWriter class, causing the video and audio tags to be supported.
The validation of ids have been tightened.
The IdAndStyle class has been created and added to some of the methods in the HtmlWriter class.
A variant with width and height parameters of the writeImage(), writeImageCenter() and writeImageLink() methods have been added to HtmlWriter class.
The writeHorizontalHeader() method has been added to the HtmlWriter class.
The formating of the for statement has been slightly changed.
The ActionListener in the MyLog class will now fire before (instead of after) the log file is updated.
The ObjectWrapper class has been move from within the XmlSerializer class to its on file, and the class has been made Serializable. This has been done to make it reusable in the SWS project.
A "String encoding" variant of the loadPropertyFile() method has been added the FileUtil class.
The XmlDeserializer class now supports the ObjectInputStream.readFields() methods and it can thereby deserialize the java.io.File class.
The java.io.File class has been added to the "openPackageForModuleAccess" list in the XmlSerializerHelperUtil class to avoid the "Illegal reflective access..." warning, that was giving when serializing the java.io.File class (on Java version >= 9 and <= 16).
The java.util.Arrays$ArrayList was not supported by the XmlSerializer and XmlDeserializer classes. This has been fixed (hacked).
The isClassOrSuperClassesStandardCollectionOrMap(), isClassOrSuperClassesStandardCollectionOrMapLocal() and isClassStandardCollectionOrMap() methods have been refactored away in the process.
The startCommand() methods (All variants) in the ProcessUtil class will now throw a NullPointerException with more details on which parameter is null.
The DateUtil.dateIntervalToDateString() method now supports seconds.
Some minor bugs have been fixed in the process.
A call to the FileUtil.calculateAbsoluteFileName() method with basePath set to "", will now have the same effect as null (= use current path).
The default for the ApplicationUtil.USER_HOME field has been changed from null to "" (as for the USER_DATA_PATH and APPLICATION_START_PATH fields).
Comments in the header of the ApplicationUtil class has been slightly changed in the process.
All the comments in the code have been reviewed and updated to conform with the Javadoc standard.
The ABT Javadoc feature has been activated in the process.
The Util.synchronizeFiles() methods (Three variants) have been removed.
The StringUtil.parseIntervalString() method (and the helper method addInterval() and the helper exception ParseIntervalStringException) have been removed.
The DateUtil.convertDateToIntervalList() method has been removed.
The " [" has been changed to "[".
The pattern cache used by the StringUtil.getMatcherForRegExp() method didn't work, when only the flags were changed. This has been fixed.
The " =" has been changed to " =".
Exceptions thrown in GUIUtil.setLinuxApplicationName() will now only be logged to the console.
The NoSuchFieldException exception thrown from the GUIUtil.setLinuxApplicationName() method will thereby also be ignored. This will probably only happen in "non interactive mode".
OpenJDK 17 (OpenJDK 16 and especially above) is now supported using --add-opens. The download site has been updated with details.
This includes details on now to make the GUIUtil.setLinuxApplicationName() work on OpenJDK 17 (OpenJDK 16 and especially above).
The two methods readFilesFromClipboard() and isFilesAvailable() have been added to the ClipboardUtil class.
A size validation has been added to the GUIUtil.showMessage(), showOkCancelDialog() and showSelectDialog() methods to avoid showing a very large dialog which cause Linux to freeze. (Validation has been added to all platforms).
A file name / path containing File.separator + "." + File.separator is no longer a valid file name / path on Windows and Linux, as current directory is only allowed in the start of the path. Changed in the FileUtil.isWindowsPathOrFileNameValid() and FileUtil.isLinuxPathOrFileNameValid() methods.
ProcessUtil.listProcess() didn't work on Windows 10. This has been fixed.
The ") )" has been changed to "))".
Version 1.1.5 (2023-03-27 13:00:48)
Public on yautar.dk at 2023-03-27 13:02.
The messages and exceptions from the XmlDeserializerMapper class have been modified slightly especially the "WARNING: The "<old field name>" field in "<class>" class was map to "<new field name>". Note: This warning will only be given once per deserialization." message.
The method imageToPixelsArray() in the ImageUtil class changed name to imageToPixelArray().
The method arrayToImage() in the ImageUtil class changed name to pixelArrayToImage().
The methods unzipFiles() (All variants) in the ZipUtil class changed name to unzipZipFile().
The RingArray class has been moved from the arcommon package in the AR Common project to the filetool.util package in the File Tool project as it is only used in this project.
The parseTime() method in the DateUtil class has been removed.
The isStringADate() method has been added to the DateUtil class.
The DateUtil class has been cleaned up in the process.
Language support (<html lang="${language}">) has been added to the HtmlWriter class. Default language is "en".
A call to NetUtil.encodeUrlMyVariant() has been added in the HtmlWriter class, when writing the "href" attribute value of the icon in the "link" tag.
The last newline in the "Method <methodName> is not unique..." RuntimeException message from the findMethod() method in the ReflectionUtil class has been removed.
The writeEntireHtml() and writeEntireData() methods have been moved from the HtmlWriter class to the HtmlOutput class in the SWS project, as they are only used there.
The forceClose() method in the HtmlWriter class has been reimplemented in the process.
The outStream field in the HtmlWriter class has also been removed in the process.
The writeString() method in the HtmlWriter class has been changed from private to protected in the process.
The protected setEncoding() method has been added to the HtmlWriter class to allow the SWS project to change encoding.
The getGroupsForRegExp() (both variants) methods in the StringUtil class have been renamed to getGroupsForRegExpAsFlatArray().
The getGroupsForRegExpAs2DimensionsArray (Two variants) methods have been added to the StringUtil class.
The spell mistake new line has been corrected to newline.
The printUserDataPath field and the setPrintUserHome() method have been added to ApplicationUtil.
The USER_HOME field of the ApplicationUtil class will no longer be printed in TUI applications as default.
The ProgressOperation class has been moved away from this project and to the File Tool project as it is only used there.
A MyTimer.addActionListener(1, ...) call has been added in the SimpleProgressJDialog dialog to avoid that the dialog for some odd reason is very small the first time it is used.
The SimpleProgressJDialog dialog will now be shown center on parent (If available). The parent is what AbstractJDialog.getCurrentWindow() returns, when the SimpleProgressJDialog.createProgressJDialog() method or any of the SimpleProgressJDialog classes constructors are called.
The progress "framework" has been refactored slightly to only notify on "slow" progress states.
A "flag" variant of the two methods doesStringMatchRegExp() and getIndexOfFirstRegExpMatch() have been added to StringUtil.
Regular expression patterns created using the StringUtil.getMatcherForRegExp() method are now cached. It can be switch off using the StringUtil.usePatternCache and its max size can be set by the StringUtil.patternCacheSize. It can be cleared by calling the StringUtil.clearPatternCache() method.
The methods createLockFile() (Two variants) have been added to the FileUtil class.
The ProgressThreadData.getProgressStateString() method is now "stable" and is thereby thread safe. The returned value will only change in steps of ProgressThreadData.updateInterval.
The "continue ;" statement has been changed to "continue;".
The "break ;" statement has been changed to "break;".
The stringWithFixLength() method in StringUtil will now ALIGN_CENTER to right of center instead of left, if the input can't be aligned completely center. (" A " -> " A ").
The two fields maximum and current in the ProgressState class have changed type from int to long. The field may no longer be negative.
The error message from FileUtil.createTempFile() have been updated.
A call to FileUtil.calculateAbsolutePath() has been added to the Util.openDirectory() method.
A call to FileUtil.calculateAbsoluteFileName() has been added to the Util.openContainedDirectoryAndSelectFile() method.
The current state of a ProgressState must now be smaller or equals to that its maximum (If set).
If the current state of a ProgressState is Long.MAX_VALUE and the incCurrent() method is called, an exception will now be thrown.
"while(" changed to "while (".
"for(" changed to "for (".
"switch(" changed to "switch (".
"return;" changed to "return ;".
"case *:" changed to "case * :".
"catch(" changed to "catch (".
The newline at the end of the returned string from the ExceptionUtil.exceptionStackToString() method has been removed (and thereby also from the stackToString() and exceptionToString() methods in the ExceptionUtil class).
The StringUtil.getMatchesForRegExp() method has been added.
The DateUtil.stringToDate(SimpleDateFormat format, String string) will now throw an exception if the string parameter is a non valid date in the format parameter format. Before it just returned null.
The ReflectionUtil.calculateClassPath() method has been added.
A MyJTable that that wasn't contained in a JScrollPane would throw a NullPointerException when it was clicked. This has been fixed.
Exception messages from the ImageUtil.hclToRgb() method have been fixed slightly.
If the MyJPopupMenu.addToComponent() method was use multiple times on the same component, the popupListener was added multiple times causing the MyJPopupMenu.removeFromComponent() method not to work properly. This has been fixed.
The file written by the FileUtil.writeFile() (all variants) methods will now include trailing empty lines. The StringUtil.STRING_SPLIT_INCLUDING_TRAILING_EMPTY_STRINGS field has been created in the process.
The "Internal error" message from the ZipStep class in the ZipUtil class has been changed slightly.
The writeLinkAnchor() method has been removed from the HtmlWriter class, as <a name= has been deprecated.
Two new variants of the writeHeader() method which include an id parameter have been added the HtmlWriter class.
The startHeader() method in the HtmlWriter class has been changed to include an id parameter.
The MyJTable class has been refactored to now be a JTable wrapped in a JScrollPane.
The unit test failed on Windows. This has been fixed.
The FileUtil fields WINDOWS_TEMP_PATH, LINUX_TEMP_PATH and MAC_TEMP_PATH have been created.
The encoding and decoding of URL's in the NetUtil class have been refactored:
The decodeUrl method has been split into 3 methods: decodeUrlFormData (Renamed), decodeUrlPath (This is technically new) and decodeUrlToDisplayString (You should properly use this one).
The encodeUrlPart method has been renamed to encodeUrlFormData.
The encodeUrlPath method has been created.
The implementation of the encodeUrlMyVariant method has been changed to use the new methods, and its behavior has changed slightly in the process.
The fields EMAIL_PROTOCOL and PHONE_PROTOCOL have been move from the Family Tree project to NetUtil class.
Version 1.1.4 (2022-06-21 12:06:18)
The SettingsUtil.warnOnNotExists field has been added.
The getRowHeight(), getLineOfOffset(), getLineCount(), getLineStartOffset(), getLineEndOffset() and hasFocus() methods have been added to MyJTextArea.
The method signature of the method "public String getText(int offset, int length) throws BadLocationException" has changed to "public String getText(int offset, int length)".
The getFont(), setFont(), getTabSize() and setTabSize() methods have been added to MyJTextArea.
The public static Matcher getMatcherForRegExp(String string, String regExp, int flags) method has been added to StringUtil.
The field serialVersionUID in the AbstractSettingWithFrameDialogAndTableSettings class has been changed to private.
The getLineWrap() and getWrapStyleWord() methods have been added to MyJTextArea.
If the addLabelField() method on the LabelFieldJComponent class was called before a call to addTitledBorder(), the component(s) in the titled border were not laid out correctly. This has been fixed.
The field DEFAULT_REG_EXP_FLAGS and the method getGroupsForRegExp(String string, String regExp, int flags) have been added to StringUtil.
The HighlightCaret class has been created (Copied from RegularExpressionDebugger and FamilyTreePersonComponent).
The actionMap of the MyJTextArea has been "set" to be the same as the contained JTextArea.
The two methods getDefaultFileNamePattern() and setDefaultFileNamePattern(String pdefaultFileNamePattern) have been added to the FileNameJComponent class.
If the FileUtil.findExistingParent() method was called with the string "file that doesn't exist.txt", the method would return File.separator. This has been fixed by added a fileName = calculateAbsoluteFileName(fileName) call to the input.
The field saveXmlOnlyIfChnaged has been added to the SettingsUtil class.
If the method GUIUtil.selectAFile() was called with the string "Exiting directory" + File.separator + "NON exiting file", a dialog of the user home directory was shown. This has been corrected to show a dialog of "Exiting directory".
The code has been rewritten in the process.
The currentDirectoryIsDefault parameter (and all derived code) has been removed from the selectAFile(*) methods and the FileNameJComponent class.
The selectADirectory(String basePath, String title, boolean mustExists) method has been changed to selectADirectory(String basePath, boolean mustExists, String title) in the GUIUtil class. (The title parameter has been moved to end as on the selectAFile(*) methods).
The ReflectionUtil.createInstanceUsingParentConstructorOnlyUnsafe() methods call to newConstructorForSerialization() has been performance optimized using a cache.
The XmlSerializerHelperUtil.isSimpleClass() method has been performance optimized using a cache to gain a little speed.
The AbstractSaxParser class has been changed to use StringBuilder instead of StringBuffer internally.
The two methods findSuperSerializableClazz and isClassOrSuperClassesStandardCollectionOrMap in the XmlSerializerHelperUtil class have been performance optimized using a cache to gain a little speed.
If one of the addLabelField methods List<JComponent> pcomponents or JComponent[] pcomponents variants in the LabelFieldJComponent class were called with a check box, the check box was not moved to left as a addCheckBox() check box is. This has been fixed.
If addCheckBox() or addLabelField(String label, JCheckBox checkBox) methods were called on LabelFieldJComponent, the gridwidth field on the GridBagConstraints object used for the check box was of by one. This was been fixed.
If StringUtil.doesStringMatchMultiWildcard(String string, String wildcard, boolean caseSensitive) was called with ("E2", "!~E1", any), then true was returned, because it was seen as noted match on "~E1". This has been fixed to return false and seen as noted regular expression match on "E1".
In some cases the GUIUtil.makePanelChangeSizeOnTooManyComponents() didn't work. This has been fixed.
The XML deserialization of "new TestObject9Enum[] {TestObject9Enum.ENUM1, null, TestObject9Enum.ENUM2}" threw an exception. This has been fixed.
Enum constants with constant-specific class bodies were handled in a complex and wrong way. This has been fixed.
An array of enum constants with constant-specific class bodies didn't work. This has been fixed.
The MyJList.ensureSelectedIsVisible() method didn't work for the very first item and the very last item. This has been fixed in the ensureIndexIsVisible() method by modifying the index parameter to a valid value.
The ApplicationUtil class has been created.
The setDefaultSettingsClass method has been added to SettingsUtil.
The setValidTableSettingsIds() method in the AbstractSettingWithFrameDialogAndTableSettings class has been changed to use Varargs.
The addValidTableSettingsIds() method in the AbstractSettingWithFrameDialogAndTableSettings class has changed name to addValidTableSettingsId().
The all the "super();" have been removed.
The AbstractJFrame() constructor with no parameters has been added to the AbstractJFrame class. Default title is set to ApplicationUtil.getDefaultApplicationFrameTitle().
The AbstractSettingsJFrame() constructor with no parameters has been added to the AbstractSettingsJFrame class. Default title is set to ApplicationUtil.getDefaultApplicationFrameTitle().
The "WARNING: An illegal reflective access operation has occurred" warning when the GUIUtil.setLinuxApplicationName() method was called on Linux, has been removed.
The openPackageForModuleAccess() method has been added to the ReflectionUtil class.
A bug has been fixed in the removeUtf8Bom method in the FileUtil class, as the BOM header bytes calculation was dependent on System.getProperty("file.encoding"), causing the UTF-8 not to be removed if System.getProperty("file.encoding") was "cp1252". This has been fixed.
If ZipUtil.unzipFiles() is called with a empty zip file an exception will now be thrown.
The MulticastTester class has been moved from ui.net to util.experiment.
The unused field socket has been removed from the MulticastServer class.
A call to NetUil.encodeUrlMyVariant() has been added to NetUil.openBrowser() if a URISyntaxException occurs.
Use of ProgressState has been added to the readFile and readLinesInFile (All variants of both) methods.
A minor performance optimization has been made in StringUtil.javaConstantDecodeString() to make Xml deserializer faster, but it didn't change a lot.
The AbstractOKCancelSettingsJDialog and AbstractOKCancelSettingsJFrame classes have been made more similar / cleaned up.
The AbstractFrameDialogSettings class changed to implement ISettings instead of Serializable.
The AbstractFrameDialogSettings class has been renamed to AbstractWindowSettings.
The util.ui.MyJTableSettings class has been renamed (moved to a different package) to util.persistens.MyJTableSettings.
The classes in the util.ui package have been split into the util.ui.component, util.ui.window and util.ui.other packages.
The calculateParentPath method in FileUtil class has been split into the two calculateParentPathFromFileName and calculateParentPathFromPath methods and a validation on file name / path has been added.
The isPathValid method has been added to FileUtil.
The isFileNameValid, isWindowsFileNameValid and isLinuxFileNameValid methods will now validate the file name ending, which means is must not end with a File.separator. Many private methods have been added or refactored to do this.
The unit package (That is ALL classes in this module) have been renamed to arcommon.
The XmlDeserializerMapper didn't map array of a mapped class. This has been fixed.
The arcommon.persistens.MyJTableSettings class has been changed from implementing Serializable to implementing ISettings.
A call to calculateAbsoluteFileName has been added to the FileUtil.calculateDriveName() method and some validation have been added to the return drive name.
The two methods pasteImageToClipboard and copyImageFromClipboard have been removed from ImageUtil.
If DateUtil.nanoTimeDiffToString() was called with 0 "null" was returned. This has been fixed to return "0 ns".
The writeNewlineInternal call in writeNoFrameStandard and writeHeader have been moved to the endHeader method in the HtmlWriter class.
The case of h-tag created by startHeader() and endHeader() methods has been changed to lower case in the HtmlWriter class.
The writeHeader(String header, int headerLevel, boolean center) method has been added to the HtmlWriter class.
The getFirstNameGroupForRegExp method (Two variants) have been added to the StringUtil class.
The overriding of the isEnabled method has been removed from the MyJList, MyJSlider and MyJTextArea classes.
The LabelFieldJComponent class will now disable the label of a line, if all the components in the line are disabled and vice versa.
The LabelFieldJComponent class will now hidden/shown the entire line, if all the components in the line are hidden/shown.
The method isNetworkAvailable() has been added to the MulticastConnection class, and the class has been modified to support missing network.
The MulticastServer and MulticastClient classes have been removed. Use the MulticastConnection directly instead.
The addCheckBox(JCheckBox, JComponent[], int), addCheckBox(JCheckBox, JComponent[], int[]) and addCheckBox(JCheckBox, JComponent[], int[], int[]) methods have been added to the LabelFieldJComponent class.
Changed to use the ABT download site and release notes feature. The release notes has been cleaned up and the "AR Common Download site.html" file has been created in the process.
The release notes file renamed from "AR Common Release Notes.txt" to "AR Common Release notes.txt".
The ZipUtil.zipFiles() method will now create the directory structure (mkdirs) of the target parameter if the directory / directories is missing.
The LinkedHashMap serialVersionUID has been added to XmlSerializerHelperUtil.getSerialVersionUID().
Some copy-and-paste errors in the AbstractProgessJDialog(String, String) constructor in the AbstractProgessJDialog class have been fixed.
If the ImageReader.read() throws an IIOException in the ImageUtil.getAnimationData() method, this is now only logged to System.out but is otherwise ignored.
The requestWindowToClose() method has been added to the GUIUtil class.
If a AbstractProgessJDialog dialog was created with cancelable = true and the cross in the upper right of the window was used, an NullPointerException was thrown. This has been fixed.
The createZipInputStream(), listFilesInZipFile(String zipFile, String charsetName) and unzipFiles(String zipFile, UnzipStepInterface unzipStep, String charsetName) methods have been added to ZipUtil.
The two methods AbstractProgessJDialog(String title, String progress, int preferredWidth) and AbstractProgessJDialog(String title, String progress, int preferredWidth, boolean cancelable) have been added to the AbstractProgessJDialog class.
The AbstractProgessJDialog class has been refactored, layout changed and rename (correcting the spell mistake in the process) to SimpleProgressJDialog.
If GUIUtil.selectAFile() was called with a file name ending in "*.*" a wrong filter was added. This was been fixed.
The classes OperationThread, ProgressComponent, ProgressJDialog, ProgressJDialogJFrameProxy and ProgressJFrame have been moved from the arcommon.progress package in the AR Common project to the filetool.util.progress in the File Tool project as they are only used in there. The classes have been prefixed with "FileTool" in process.
The ProgressThreadData class has been cleanup in the process.
The two fields boolean sticky and boolean autoRunInBackground in the AbstractSettingWithFrameDialogAndTableSettings class have also been removed in the process.
If the HtmlWriter.writeCell() method was called with null a NullPointerException was thrown. This has been fixed.
The end of tag slash (" /") in the link rel="icon" tag written by the HtmlWriter has been removed.
The following has been added to the header written by the HtmlWriter to support mobile phones:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
The scrollToVisible() and scrollToSelectedVisible() methods have been added to the MyJTable class.
The GUIUtil.expandTree(JTree) method has been changed to be static.
The MyJTable class has been changed to not start cell editing on some special keys such as Ctrl+W.
The GUIUtil.printActionMap() and printInputMap() methods have been changed to also print getParent of the maps.
The MyJTable.setSelectedIndex() method will now scroll directly down, and not down and to the left.
The MyJTable will now scroll to left of the cell being edited.
The MyJTree.grabFocus() method has changed name to the requestFocusInWindow().
The MyJTable.isRowVisible() method has been added.
The FileUtil.calculateParentPathFromFileName() method has been removed.
If the FileUtil.calculateFilter() method was called with "/home/allan/Mit/Java/Sim Plan/Sim Plan Client properties.xml", the returned FilterData.path contained an invalid path (!FileUtil.isPathValid()). This has been fixed.
The getEncoding() method has been added to the HtmlWriter class.
The XmlSerializerHelperUtil.getSerialVersionUID() method has been refactored to use the ReflectionUtil.openPackageForModuleAccess().
A call to ReflectionUtil.openPackageForModuleAccess() in the XmlSerializerHelperUtil "static {}" method has been added to avoid the "WARNING: An illegal reflective access operation has occurred" warning.
The spell mistake "This have" has been fixed to "This has" in release notes.
Version 1.1.3 (2021-08-18)
If a file name in a ZIP file starts with a '\' or '/' in a call to ZipUtil.unzipFiles() an exception will now be thrown.
If the top level class (The first "<Object class=" line in the xml) is missing, an object of the first existing class was wrongly return. This has been changed to throw an exception.
The GUIUtil.setLinuxApplicationName() method has been added.
The HtmlImageArea.openInNewWindow method has been added.
The HtmlImageArea.href may now been null.
File names ending with space ("Text.txt ") is no longer valid on Windows (FileUtil.isFileNameValid("Text.txt ") returns false).
The ClipboardUtil.readHtmlFromClipboard() method has been added.
The ClipboardUtil.readTransferDataFromClipboard() method has been added and the ClipboardUtil.readTextFromClipboard() and ClipboardUtil.readImageFromClipboard() methods have been changed to use it.
The ClipboardUtil.writeTransferDataToClipboard() method has been added and the ClipboardUtil.writeTextToClipboard() and ClipboardUtil.writeImageToClipboard() methods have been changed to use it.
The ClipboardUtil.writeImageOnClipboard() method has changed name to ClipboardUtil.writeImageToClipboard().
The LabelFieldJComponent.addHeader() method has been added.
The MyNumberFieldJComponent.requestFocusInWindow() method has been added.
The closeOnESC parameter / option has been added to AbstractJDialog and AbstractSettingsJDialog. This feature is now identical to AbstractJFrame.
The canClose() method has been added to AbstractJDialog. It can to be overwritten (@Override) to control, if the dialog can be closed. This feature is now identical to AbstractJFrame.
The MyJList.add(String item, int index) method has been added.
The MyJList.removeItem() method has been changed to return the deleted String.
The AbstractProgessJDialog class has been created.
The util.experiment package has been created, and the following classes have been moved to it: EncodingTest, MyLogTest, ProcessUtilTest, ReflectionUtilTest, SimpleIOProcess and XmlSerializerTest2.
The code from the FileUtil.isFileNameValid() method regarding Windows, has been moved to the new FileUtil.isWindowsFileNameValid() method.
The code from the FileUtil.isFileNameToLong() method regarding Windows, has been moved to the new FileUtil.isWindowsFileNameToLong() method.
File names containing \\ (Two backslashes) is no longer a valid Windows file name.
The FileUtil.validateFileName() method has been added.
If a file is renamed to an invalid file name (!FileUtil.isFileNameValid()) using FileUtil.rename(), an exception is now thrown.
If text / data is written to a file with an invalid file name (!FileUtil.isFileNameValid()) using the FileUtil.write* methods, an exception is now thrown. This is done by the FileUtil.createBufferedWriter() method, which there by also must be called with a valid file name.
If a file is copied to an invalid file name (FileUtil.isFileNameValid()) using FileUtil.copy(), an exception is now thrown.
The FileUtil.validateFileName() method has been added.
The FileUtil.isLinuxFileNameValid method has been added, and is used by FileUtil.isFileNameValid() on Linux, to make file names containing // (Two forward slashes) invalid on Linux.
The FileUtil.isSymbolicLink() method has been added.
The file name "I:Text file.txt" is now valid on Windows. Before the file name had to be "I:\\Text file.txt" (A backslash has been added). Changed in the FileUtil.isWindowsFileNameValid() method.
Files containing a 'รง' is now a valid file name on Windows. (Changed in FileUti.isWindowsFileNameValid()).
FileUtil.findExistingParent() changed to be public.
If the Util.readLineFromStdIn() method was called when no input / console was available (For example when double clicking in nautilus), it would slowly use all available memory, and the when crash on Ubuntu 20.04. This has been fixed.
The FileUtil.WriteUsingTempFileAction.calculateTempFileName() method has be renamed to createTempFile().
The FileUtil.createTempFile() method has been added, and FileUtil.canFilesInDirectoryBeMarkedExecutable(), FileUtil.checkWriteAccess(), FileUtil.isDirectoryCaseSensitive() and FileUtil.WriteUsingTempFileAction.createTempFile() methods have been changed to use it. The temporary file name for these methods have been changed a little.
Directory names ending in a space is not valid on Windows. E. g. paths must not contain " \". This is now enforced by FileUtil.isWindowsFileNameValid().
The background and foreground colors in the DatePicker dialog has been changed slightly.
The DatePicker class has changed name to DatePickerJDialog.
The MyNumberFieldJComponent class has changed name to NumberFieldJComponent.
If the selected date in the DatePickerJDialog was the same as the current date, the day was marked as current day only. It was not indicated that it also was the selected day. This has been fixed.
If the selected date in the DatePickerJDialog was in the same mouth as current date but before current day, the focus was set on the current day. The focus has been moved to the selected day.
The switch to previous year, switch to previous mouth, switch to next mouth and switch to next year buttons and the current month and year label have been moved to the top of the DatePickerJDialog dialog.
The class MyJCheckList has been removed. (It has been move to File Tool and renamed to CheckListJComponent).
FileNameJComponent and PathJComponent changed to use MyJTextField.
The constructors MyJTextField(int columns) and MyJTextField(String text) have been added to MyJTextField.
The method setSelectLinkIndex() has been renamed to setSelectedIndex on the MyJTable class.
The method createInstanceNoConstructorCall(Class<T> clazz, Class<? super T> parent) on the ReflectionUtil has been renamed to createInstanceUsingParentConstructorOnly.
The method createInstanceUsingParentConstructorOnlyUnsafe(Class<?> clazz, Class<?> parent) has been added to ReflectionUtil.
An complicated bug regarding a missing constructor call to the most sub class that is not Serializable when deserializing from XML, has been fixed. For example when deserializing an instance of the FrameSettings class, the default constructor on ActionList was not called. This has been fixed in the XmlDeserializer.handleObjectTag() method.
The method findSuperSerializableClazz() has been added to XmlSerializerHelperUtil.
The method implementsSerializable() has been moved from XmlSerializer to XmlSerializerHelperUtil.
If the method addHeader() on the class LabelFieldJComponent was called on a LabelFieldJComponent object containing no label-fields a NullPointerException thrown. This has been fixed.
The field synchronizeObject on the class ActionList has been removed.
The JCheckBoxes in the LabelFieldJComponent has been moved to the left.
The addTitledBorder() method has been added LabelFieldJComponent and the class has been refactored a bit in the process.
The addLabelField(JCheckBox jcheckBox) method on LabelFieldJComponent has been renamed to addCheckBox.
The addLabelField(JRadioButton radioButton) method on LabelFieldJComponent has been renamed to addRadioButton.
The ProgressJDialog class has been cleaned up allot.
The AbstractSettingsJDialog and AbstractSettingsJFrame classes have been refactored to only save dialog and frame settings respectively, if they are changed from default.
The constructor AbstractOKCancelSettingsJDialog(String title, DialogSettings pdialogSettings) on AbstractOKCancelSettingsJDialog has been removed.
The constructor AbstractOKCancelSettingsJFrame(String title, FrameSettings pframeSettings) on AbstractOKCancelSettingsJFrame has been removed.
The value of a field of type isSimpleClass() was ignored for all the occurrences of that field, until a field where the "class" attribute was set. After this field all values were used. This has been fixed.
The XmlDeserializer, XmlSerializerHelperUtil and AbstractSaxParser classes have been cleaned up.
The XmlDeserializerMapper class has been added.
The constructor public AbstractSettingsJDialog(Window owner, String title, boolean closeOnESC, boolean useSettings) has been added to AbstractSettingsJDialog.
The method public void set(AbstractFrameDialogSettings abstractFrameDialogSettings) has been added to AbstractFrameDialogSettings.
The setDefaultSettings() method in SettingsUtil may now only be called once.
The field settingsFileName in SettingsUtil has been encapsulated and may only be set once.
If a field in a frameSettings object on the AbstractFrameDialogSettings classs was changed, two notifications were send. This has been fixed.
The selectAFile() and selectADirectory() methods in GUIUtil have been changed to select the parent directory (recursively), if the baseFileName / basePath doesn't exist. If the top level directory doesn't exist, the GUIUtil.defaultSelectAFileOrDirectoryPath will used if set. Otherwise the current path will be used.
The buffer size in the FileUtil.readFile() method has been adjusted slightly.
The method getIndexOfRegExp in StringUtil has changed name to getIndexOfFirstRegExpMatch.
The method MyJList.ensureSelectedIsVisible() has been changed to use index +1 (and -1) to ensure visible.
The method StringUtil.stringWithFixLength() parameter align has been changed from an int to the enum STRING_WITH_FIX_LENGTH_ALIGN.
The methods StringUtil.multiWildcardError() (Two variants) have been added.
If the DatePickerJDialog was "called" with an ill-formatted date and allowSelectYearOnly set to true a NullPointerException was thrown. This has been fixed.
The MyThead.calculateNumberName() changed to be synchronized.
The StringUtil.stringEquals() method has been added.
If a field (of a non simple class) was missing when xml deserializing, all subsequent fields (of a non simple class ("Object" tag)) for this class were not deserialized. This has been fixed.
A minor bug and error message spell mistakes have been fixed in FileUtil.removeUtf8Bom().
MyJTableSettings are now only created when changed from default.
A preferred width of 700 has been added to FileNameJComponent.
The preferred width of the PathJComponent has been changed from 200 to 500.
The increment unit on the vertical scroll bar of the LabelFieldJComponent have been set to 8.
MyJTable.setSelectedIndex(-1) didn't remove selection. This has been fixed.
The getSelectionStart() and getSelectionEnd() methods have been added to the MyJTextArea class.
The calculateWeekday() method has been added to the DateUtil class.
The NetUtil.openBrowser() has been changed to return true (From void to boolean), if a browser was opened.
If NetUtil.openBrowserWithDialog() was called with an URL that couldn't be open, the "Please wait while link is opened" dialog was still visible after the error dialog was closed. This has been fixed.
The spell mistake of StringUtil.DEFAULT_WILDCARD_REQ_EXP_PREFIX has been fixed to DEFAULT_WILDCARD_REG_EXP_PREFIX.
The methods setLineWrap(boolean wrap) and setWrapStyleWord(boolean word) have been added to the MyJTextArea class.
The StringUtil.getMatcherForRegExp() now uses the Pattern.MULTILINE | Pattern.DOTALL flags when compiling the regular expression. This is done to fix issues with newline matching.
The StringUtil.doesStringMatchMultiWildcard() parameter "notPrefix" didn't work. This has been fixed.
The methods setCaret(Caret caret), getSelectedText() and getText(int offset, int length) have been added to the MyJTextArea class.
In some cases the ensureSelectedIsVisible() of the MyJList class would throw a RuntimeException. This has been fixed.
The AbstractProgessJDialog has been changed to be non resizable.
If FileUtil.findExistingParent() was called with a file (not a directory), the method would return the file name with a slash added. This has been fixed.
The spelling of "cancelled" has been changed to "canceled".
The method indexOf(char[] values, char value) has been added to ArrayUtil.
Version 1.1.2 (2020-08-11)
If a frame settings id is not the name of a class extending AbstractSettingsJFrame, the frame settings is removed at load time (AbstractSettingWithFrameDialogAndTableSettings.checkSettings()).
If a dialog settings id is not the name of a class extending AbstractSettingsJDialog, the dialog settings is removed at load time (AbstractSettingWithFrameDialogAndTableSettings.checkSettings()).
The File().canWrite() method doesn't return anything useful on Window. The old FileUtil.checkWriteAccess() method have been taken back in use, and modified a bit. The FileUtil.getWritable() method will on Windows call FileUtil.checkWriteAccess(), making FileUtil.getWritable() return something useful on Windows.
The use of "FileUtil." has been removed from FileUtil.
DateUtil.calculatePatten() change to DateUtil.calculatePattern().
The "synObject" changed to "synchronizeObject" in ActionList.
The use of "ProgressOperation." has been removed from ProgressOperation.
Some minor spell mistakes have been fixed.
The hack to remove the Windows BOM header did not work when running on Windows (!System.getProperty("file.encoding").equals("UTF-8")). This has has fixed.
FileUtil.copy() buffer size changed from 10000 to 1000000.
The default for SettingsUtil.useXml changed from false to true.
The XmlDeserializer.fieldTypeMismatchLogLevel functionality has been added.
If NetUtil.openBrowser() is called with a "tel:" protocol and the device doesn't support it, an error message will be shown, instead of throwing an exception.
The RobotUtil.keyPress(int[] keyModifiers, int keyCode) method has been added.
Calling RobotUtil.keyPress(int keyModifier, int keyCode) with keyModifier == 0 will now throw a exception.
The call to revalidate() in GUIUtil.updatePanelSize() has been changed to validate(), because revalidate() is only 1.7 and above and Ubuntu 10.4 only supports 1.6.
Version 1.1.1 (2020-05-13)
Generated on 2026-11-04 14:36:54 by ABT - Allan's Build Tool (Version: 1.0.20 (Build: 843), AR Common version: 1.1.8 (Build: 1532)).
The template for this file was last updated on: 2026-11-04 14:36:09.
Copyright Allan Rasmussen©.