jalview

Clone Tools
  • last updated a few seconds ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
make AlignFrame the parent of FeatureEditor dialog, and have parent Component request focus after...
make AlignFrame the parent of FeatureEditor dialog, and have parent Component request focus after...
JAL-3975 forced re-focus to alignframe after Create Sequence Feature dialog.
JAL-3975 forced re-focus to alignframe after Create Sequence Feature dialog.
Looks good. I've bumped the version to 1.8.3-1.2.12 and recompiled jars.

Looks good. I've bumped the version to 1.8.3-1.2.12 and recompiled jars.

JAL-3691 patch toUpper/toLower to use Locale.ROOT for 2.11.2 src
JAL-3691 patch toUpper/toLower to use Locale.ROOT for 2.11.2 src
That looks good. I was almost going to do something similar (I was thinking jalview.log.Log, but jalview.bin.Console is just as good) so happy with this!

That looks good. I was almost going to do something similar (I was thinking jalview.log.Log, but jalview.bin.Console is just as good) so happy with this!

Added those in. I'm still converting to String with getCanonicalName in the getLogger(Class ...) method because, e.g. JLogger jlogger1 = JLogger.getLogger(Jalview.class); JLogger jlogger2 = JLogger...

Added those in. I'm still converting to String with getCanonicalName in the getLogger(Class ...) method because, e.g.
JLogger jlogger1 = JLogger.getLogger(Jalview.class);
JLogger jlogger2 = JLogger.getLogger("jalview.bin.Jalview");
should really return an existing logger in the registry if it exists, and the String name is the registry key.

I was thinking that JLogger did this comparison anyway, but I've followed it through and it didn't. So I've added if (loglevel.compareTo(this.level) < 0) { return false; } to JLogger.println so t...

I was thinking that JLogger did this comparison anyway, but I've followed it through and it didn't. So I've added

if (loglevel.compareTo(this.level) < 0) { return false; }

to JLogger.println so that a comparison is made between the (enums) of JLogger.level and the message LogLevel, and if it's not going to be logged then it doesn't call the actual logger at all (in this case Log4j, so the log4j object is never even touched [even with logger.isDebugEnabled() because the answer should be no]).
This now applies to all log calls.
The check whether Cache.log != null is equivalent to Cache.log.loggerExists() which already happens within JLoggerLog4j.
There is admittedly the wrapper of the JLogger getting brought to forefront of memory, but that's presumably smaller than the old Cache.log which was a Log4j.Logger object.

AWESOME JOB !!!! one tiny niggle I had was that Cache.debug/Cache.error doesn't read nicely, so I've abstracted the logging stuff even farther to a new jalview.bin.Console class: see https://source...

AWESOME JOB !!!! one tiny niggle I had was that Cache.debug/Cache.error doesn't read nicely, so I've abstracted the logging stuff even farther to a new jalview.bin.Console class: see https://source.jalview.org/crucible/changelog/~br=update%402fJAL-3949_jalview_bin_Console_to_cure_sanity_even_more/jalview/

the reason for conditionals is that Java won't perform the string append operation if logLevel>debug. It saves a minor amount of processing time which is important for code that is executed lots.

the reason for conditionals is that Java won't perform the string append operation if logLevel>debug. It saves a minor amount of processing time which is important for code that is executed lots.

You could have .getLogger(Class ..) rather than having to call getCanonicalName ?

You could have .getLogger(Class ..) rather than having to call getCanonicalName ?

JAL-3949 An attempt at converting to Log4j 2 -- no output achieved!
JAL-3949 An attempt at converting to Log4j 2 -- no output achieved!
JAL-3553: Create working getdown appbase and jvl file(s) for each old version of Jalview
JAL-3553: Create working getdown appbase and jvl file(s) for each old version of Jalview
I'm abandoning this review for now (see my comments on the issue). For what its worth since this is a string literal you should at least follow convention JALVIEW_LOGGER rather than a generic 'LOGG...

I'm abandoning this review for now (see my comments on the issue). For what its worth since this is a string literal you should at least follow convention JALVIEW_LOGGER rather than a generic 'LOGGER_NAME'. The code for routing logged content from other loggers should probably be a method on Cache... or even better, separate all this out into the jalview.util.Log4j class so Cache doesn't get polluted with log configuration cruft.

At the moment it is only used in jalview.bin.Cache, but it is used in separate places where appenders are added. Previous to this it was relying on the String name of the appender being correctly u...

At the moment it is only used in jalview.bin.Cache, but it is used in separate places where appenders are added. Previous to this it was relying on the String name of the appender being correctly used. However the Strings that were being used were not the same so it was broken (I don't know how that manifested itself, but it definitely would not have worked the way it used to!).
Feasibly a separate logger made in the future (e.g. API logger?) will want to add this Appender and will likely not be made in jalview.bin.Cache, so putting a constant String somewhere generically connected with Log4j seemed sensible. Correct it needs documenting!

Does this really need to be a string constant ? (I'm not convinced) needs documenting as the log4j internal name for the log if it really needs to be external.

Does this really need to be a string constant ? (I'm not convinced) needs documenting as the log4j internal name for the log if it really needs to be external.

JAL-3949 An attempt at converting to Log4j 2 -- no output achieved!
JAL-3949 An attempt at converting to Log4j 2 -- no output achieved!
I know the problems you had with close() - you mentioned in the comments on the issue. However, you might have noticed that FileParse.close() is not called from many places, so changing its behavio...

I know the problems you had with close() - you mentioned in the comments on the issue. However, you might have noticed that FileParse.close() is not called from many places, so changing its behaviour wouldn't have too many side effects.

The intended pattern for FileParse.close() was:

ParserThing pt;
try {
pt = new <? assignable to FileParse>(data spec..)
.. do whatever needed to trigger parsing
.. then check pt's error/warning status and report any problems.
} catch (IOException ..) {
.. handle read or parse errors 
}
finally {
if (pt!=null) {
pt.close();
} // catch and report any IOErrors if desired
}
I tried this first, but FileParse.close() deliberately leaves the FileParse in an error state, which caused problems later (I don't remember the specifics). I could not work out why the FileParse.c...

I tried this first, but FileParse.close() deliberately leaves the FileParse in an error state, which caused problems later (I don't remember the specifics). I could not work out why the FileParse.close() was designed to do this but suspect changing this methos so it's (in general) not left in an error state will cause bigger problems. Also, since Jalview is used to having dataIn for the lifetime of the alignment, I wasn't sure if nulling the object would cause unforeseen errors (in e.g. filename etc).

Maybe it would be best to overload FileParse.close() to pass in an error value/message, then it would essentially be calling FileParse.closeDataIn() instead of FileParse.dataIn.close()

Agree with the finally {} – forgot that (not been a java programmer for quite long enough!). Presumably that should go in FileParse and not AlignFile too.

Ideally, any low level file ops should happen in the base class (FileParse) rather than here. AlignFile should call the FileParse.close() method rather than directly manipulate dataIn, which is man...

Ideally, any low level file ops should happen in the base class (FileParse) rather than here. AlignFile should call the FileParse.close() method rather than directly manipulate dataIn, which is managed by FileParse. Note that FileParse.close() nulls the dataIn reference so the stream can be garbage collected properly.

It's also good practice to try to close() in a finally {} clause, catching and reporting exceptions if needed... this is actually what the FileParse.close() method's design was intended for, since the caller should have already checked 'error' and 'errormessage' for parsing problems. Exceptions/Errors on close are not fatal for file import.

file close error will trash import of project

file close error will trash import of project

close filehandles straight after parse, without setting an error
close filehandles straight after parse, without setting an error
Merge branch 'JAL-3927_ws_preferences_dialog_fix' into alpha/JAL-3066_Jalview_212_slivka-integration