From 20813357b962374779c1f3783cada7fec9c8c55c Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 20:56:05 +0100 Subject: [PATCH 01/14] [refactor] Java5: use enhanced for loops --- .../xquery/utils/StringJoinBenchmark.java | 4 +- .../triggers/TriggerStatePerThread.java | 64 +++++++++---------- .../exist/xquery/functions/map/MapType.java | 6 +- .../xquery/value/ArrayListValueSequence.java | 3 +- .../xquery/value/OrderedValueSequence.java | 4 +- .../xslt/TransformerFactoryAllocator.java | 4 +- .../start/CompatibleJavaVersionCheck.java | 4 +- 7 files changed, 41 insertions(+), 48 deletions(-) diff --git a/exist-core-jmh/src/main/java/org/exist/xquery/utils/StringJoinBenchmark.java b/exist-core-jmh/src/main/java/org/exist/xquery/utils/StringJoinBenchmark.java index 0524b5610a0..d108bc045df 100644 --- a/exist-core-jmh/src/main/java/org/exist/xquery/utils/StringJoinBenchmark.java +++ b/exist-core-jmh/src/main/java/org/exist/xquery/utils/StringJoinBenchmark.java @@ -94,8 +94,8 @@ public StringBuilder forApproachRadek(/*final BuilderState builderState*/) { // final StringBuilder builder = builderState.builder; final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < strings.size(); i++) { - builder.append(strings.get(i)); + for (String string : strings) { + builder.append(string); builder.append(", "); } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java b/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java index b45d50e0696..58e0d54841e 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java @@ -59,38 +59,38 @@ public static void setAndTest(final Trigger trigger, final TriggerPhase triggerP int skipBefores = 0; - for (final Iterator it = states.iterator(); it.hasNext(); ) { - prevState = it.next(); - - // travel up, first "Before" we encounter - we should check if (a) that we complete it, and/or (b) is non-cyclic (if not we are also cyclic) - if (prevState.triggerPhase == TriggerPhase.BEFORE) { - - if (skipBefores > 0) { - skipBefores--; - - } else { - if (prevState.isCompletedBy(trigger, triggerPhase, triggerEvent, src, dst)) { - if (prevState instanceof PossibleCyclicTriggerState) { - // if the Before phase is a PossibleCyclicTriggerState then this completing After phase must also be a PossibleCyclicTriggerState - final TriggerState newState = new PossibleCyclicTriggerState(trigger, triggerPhase, triggerEvent, src, dst); - states.addFirst(newState); - - throw new CyclicTriggerException("Detected Matching possible cyclic trigger event for After phase (" + newState + ") of previous Before phase (" + prevState + ")"); - - } else { - // if the Before Phase is NOT a PossibleCyclicTriggerState, then neither is this completing After phase... - states.addFirst(new TriggerState(trigger, triggerPhase, triggerEvent, src, dst)); - return; - } - - } else { - throw new IllegalStateException("Cannot interleave Trigger states"); - } - } - } else if (prevState.triggerPhase == TriggerPhase.AFTER) { - skipBefores++; - } - } + for (TriggerState state : states) { + prevState = state; + + // travel up, first "Before" we encounter - we should check if (a) that we complete it, and/or (b) is non-cyclic (if not we are also cyclic) + if (prevState.triggerPhase == TriggerPhase.BEFORE) { + + if (skipBefores > 0) { + skipBefores--; + + } else { + if (prevState.isCompletedBy(trigger, triggerPhase, triggerEvent, src, dst)) { + if (prevState instanceof PossibleCyclicTriggerState) { + // if the Before phase is a PossibleCyclicTriggerState then this completing After phase must also be a PossibleCyclicTriggerState + final TriggerState newState = new PossibleCyclicTriggerState(trigger, triggerPhase, triggerEvent, src, dst); + states.addFirst(newState); + + throw new CyclicTriggerException("Detected Matching possible cyclic trigger event for After phase (" + newState + ") of previous Before phase (" + prevState + ")"); + + } else { + // if the Before Phase is NOT a PossibleCyclicTriggerState, then neither is this completing After phase... + states.addFirst(new TriggerState(trigger, triggerPhase, triggerEvent, src, dst)); + return; + } + + } else { + throw new IllegalStateException("Cannot interleave Trigger states"); + } + } + } else if (prevState.triggerPhase == TriggerPhase.AFTER) { + skipBefores++; + } + } throw new IllegalStateException("Could not find a matching Before phase for After phase"); diff --git a/exist-core/src/main/java/org/exist/xquery/functions/map/MapType.java b/exist-core/src/main/java/org/exist/xquery/functions/map/MapType.java index 0dde9acc6bb..a47a0b7f9c1 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/map/MapType.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/map/MapType.java @@ -279,8 +279,7 @@ public boolean contains(AtomicValue key) { @Override public boolean containsReference(final Item item) { - for (final Iterator it = map.values().iterator(); it.hasNext();) { - final Sequence value = it.next(); + for (final Sequence value : map.values()) { if (value == item || value.containsReference(item)) { return true; } @@ -290,8 +289,7 @@ public boolean containsReference(final Item item) { @Override public boolean contains(final Item item) { - for (final Iterator it = map.values().iterator(); it.hasNext();) { - final Sequence value = it.next(); + for (final Sequence value : map.values()) { if (value.equals(item) || value.contains(item)) { return true; } diff --git a/exist-core/src/main/java/org/exist/xquery/value/ArrayListValueSequence.java b/exist-core/src/main/java/org/exist/xquery/value/ArrayListValueSequence.java index 18d75900bad..af28f9b65df 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/ArrayListValueSequence.java +++ b/exist-core/src/main/java/org/exist/xquery/value/ArrayListValueSequence.java @@ -240,8 +240,7 @@ public boolean isPersistentSet() { @Override public boolean containsReference(final Item item) { - for (final Iterator it = values.iterator(); it.hasNext(); ) { - final Item value = it.next(); + for (final Item value : values) { if (value == item) { return true; } diff --git a/exist-core/src/main/java/org/exist/xquery/value/OrderedValueSequence.java b/exist-core/src/main/java/org/exist/xquery/value/OrderedValueSequence.java index d0008be2704..9b7e4f96241 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/OrderedValueSequence.java +++ b/exist-core/src/main/java/org/exist/xquery/value/OrderedValueSequence.java @@ -200,8 +200,8 @@ public void coerceTypesForOrderBy() throws XPathException { private int countSetBits(final BitSet bitSet, final int... bitIndex) { int setBitsCount = 0; - for (int i = 0; i < bitIndex.length; i++) { - if (bitSet.get(bitIndex[i])) { + for (int index : bitIndex) { + if (bitSet.get(index)) { setBitsCount++; } } diff --git a/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java b/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java index cb543142108..ce12135d9cf 100644 --- a/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java +++ b/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java @@ -91,9 +91,7 @@ public static SAXTransformerFactory getTransformerFactory(final BrokerPool pool) LOG.debug("Set transformer factory: {}", transformerFactoryClassName); } final Hashtable attributes = (Hashtable) pool.getConfiguration().getProperty(PROPERTY_TRANSFORMER_ATTRIBUTES); - final Iterator iterator = attributes.keySet().iterator(); - while (iterator.hasNext()) { - final String name = iterator.next(); + for (String name : attributes.keySet()) { final Object value = attributes.get(name); try { factory.setAttribute(name, value); diff --git a/exist-start/src/main/java/org/exist/start/CompatibleJavaVersionCheck.java b/exist-start/src/main/java/org/exist/start/CompatibleJavaVersionCheck.java index 4c0b926f376..ed76113e83d 100644 --- a/exist-start/src/main/java/org/exist/start/CompatibleJavaVersionCheck.java +++ b/exist-start/src/main/java/org/exist/start/CompatibleJavaVersionCheck.java @@ -82,9 +82,7 @@ static void checkForCompatibleJavaVersion(final Optional checkJavaVersio /* @Nullable */ final Integer minorJavaVersion = javaVersionComponents.length > 1 ? javaVersionComponents[1] : null; /* @Nullable */ final Integer patchJavaVersion = javaVersionComponents.length > 2 ? javaVersionComponents[2] : null; - for (int i = 0; i < INCOMPATIBLE_JAVA_VERSIONS.length; i++) { - final IncompatibleJavaVersion incompatibleJavaVersion = INCOMPATIBLE_JAVA_VERSIONS[i]; - + for (final IncompatibleJavaVersion incompatibleJavaVersion : INCOMPATIBLE_JAVA_VERSIONS) { // compare major versions if (majorJavaVersion == incompatibleJavaVersion.major) { From 66432d27bb40c99178d5d5d092f2e3347a372392 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 20:57:44 +0100 Subject: [PATCH 02/14] [refactor] Java5: Use StringBuilder --- .../src/main/java/org/exist/http/filter/DumpFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exist-core/src/main/java/org/exist/http/filter/DumpFilter.java b/exist-core/src/main/java/org/exist/http/filter/DumpFilter.java index 3d219c094b3..d26b72eb229 100644 --- a/exist-core/src/main/java/org/exist/http/filter/DumpFilter.java +++ b/exist-core/src/main/java/org/exist/http/filter/DumpFilter.java @@ -86,7 +86,7 @@ public void doFilter(ServletRequest request, ServletResponse response, LOG.info(" contentLength={}", request.getContentLength()); LOG.info(" contentType={}", request.getContentType()); LOG.info(" locale={}", request.getLocale()); - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); buffer.append(" locales="); final Enumeration locales = request.getLocales(); boolean first = true; @@ -102,7 +102,7 @@ public void doFilter(ServletRequest request, ServletResponse response, Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) { final String name = (String) names.nextElement(); - buffer = new StringBuffer(); + buffer = new StringBuilder(); buffer.append(" parameter=").append(name).append("="); final String values[] = request.getParameterValues(name); for (int i = 0; i < values.length; i++) { From 56c883d70257397d346fcbf561d64a9861f4ae71 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 20:59:05 +0100 Subject: [PATCH 03/14] [refactor] Java7: explicit type van be replaced by <> --- .../src/main/java/org/exist/config/Configurator.java | 8 ++++---- .../java/org/exist/dom/persistent/NamedNode.java | 2 +- .../java/org/exist/dom/persistent/NodeProxy.java | 6 +++--- .../main/java/org/exist/http/jaxb/Collection.java | 2 +- .../src/main/java/org/exist/http/jaxb/Query.java | 2 +- .../src/main/java/org/exist/http/jaxb/Result.java | 4 ++-- .../src/main/java/org/exist/http/jaxb/Sequence.java | 2 +- .../java/org/exist/http/servlets/XSLTServlet.java | 12 ++++++------ .../java/org/exist/security/internal/RealmImpl.java | 6 ++++-- .../java/org/exist/xmldb/RemoteRestoreService.java | 2 +- .../exist/xquery/functions/transform/Transform.java | 12 ++++++------ 11 files changed, 30 insertions(+), 28 deletions(-) diff --git a/exist-core/src/main/java/org/exist/config/Configurator.java b/exist-core/src/main/java/org/exist/config/Configurator.java index 286523eb57f..d981239f7d5 100644 --- a/exist-core/src/main/java/org/exist/config/Configurator.java +++ b/exist-core/src/main/java/org/exist/config/Configurator.java @@ -1418,8 +1418,8 @@ public AField findByAnnotationValue(final String value) { @Override public Iterator iterator() { - return new Iterator() { - + return new Iterator<>() { + private final Iterator> itAttributes = attributes.iterator(); private final Iterator> itElements = elements.iterator(); @@ -1432,10 +1432,10 @@ public boolean hasNext() { public AField next() { if (itAttributes.hasNext()) { return itAttributes.next(); - + } else if (itElements.hasNext()) { return itElements.next(); - + } else { throw new NoSuchElementException(); } diff --git a/exist-core/src/main/java/org/exist/dom/persistent/NamedNode.java b/exist-core/src/main/java/org/exist/dom/persistent/NamedNode.java index ff3907c943e..9ae3111014c 100644 --- a/exist-core/src/main/java/org/exist/dom/persistent/NamedNode.java +++ b/exist-core/src/main/java/org/exist/dom/persistent/NamedNode.java @@ -74,7 +74,7 @@ protected NamedNode(final Expression expression, final NamedNode other) { * Extracts just the details of the NamedNode */ public NamedNode extract() { - return new NamedNode(getExpression(), this) { + return new NamedNode<>(getExpression(), this) { }; } diff --git a/exist-core/src/main/java/org/exist/dom/persistent/NodeProxy.java b/exist-core/src/main/java/org/exist/dom/persistent/NodeProxy.java index 16dd1bb34fe..97c5996e63b 100644 --- a/exist-core/src/main/java/org/exist/dom/persistent/NodeProxy.java +++ b/exist-core/src/main/java/org/exist/dom/persistent/NodeProxy.java @@ -1073,7 +1073,7 @@ public DocumentSet getDocumentSet() { @Override public Iterator getCollectionIterator() { - return new Iterator() { + return new Iterator<>() { boolean hasNext = true; @Override @@ -1417,7 +1417,7 @@ public final void setPosition(final NodeProxy proxy) { @Override public Iterator getDocumentIterator() { - return new Iterator() { + return new Iterator<>() { private boolean hasMore = true; @@ -1428,7 +1428,7 @@ public final boolean hasNext() { @Override public final DocumentImpl next() { - if(!hasMore) { + if (!hasMore) { throw new NoSuchElementException(); } else { hasMore = false; diff --git a/exist-core/src/main/java/org/exist/http/jaxb/Collection.java b/exist-core/src/main/java/org/exist/http/jaxb/Collection.java index f15a37b70f2..a5b7d5ab80f 100644 --- a/exist-core/src/main/java/org/exist/http/jaxb/Collection.java +++ b/exist-core/src/main/java/org/exist/http/jaxb/Collection.java @@ -99,7 +99,7 @@ public class Collection { */ public List getCollection() { if (collection == null) { - collection = new ArrayList(); + collection = new ArrayList<>(); } return this.collection; } diff --git a/exist-core/src/main/java/org/exist/http/jaxb/Query.java b/exist-core/src/main/java/org/exist/http/jaxb/Query.java index 8ea71b2dd55..7521e667bbd 100644 --- a/exist-core/src/main/java/org/exist/http/jaxb/Query.java +++ b/exist-core/src/main/java/org/exist/http/jaxb/Query.java @@ -506,7 +506,7 @@ public static class Properties { */ public List getProperty() { if (property == null) { - property = new ArrayList(); + property = new ArrayList<>(); } return this.property; } diff --git a/exist-core/src/main/java/org/exist/http/jaxb/Result.java b/exist-core/src/main/java/org/exist/http/jaxb/Result.java index 1b3c39b276a..6122ba3e24b 100644 --- a/exist-core/src/main/java/org/exist/http/jaxb/Result.java +++ b/exist-core/src/main/java/org/exist/http/jaxb/Result.java @@ -136,7 +136,7 @@ public void setCollection(Collection value) { */ public List getValue() { if (value == null) { - value = new ArrayList(); + value = new ArrayList<>(); } return this.value; } @@ -319,7 +319,7 @@ public static class Value { */ public List getContent() { if (content == null) { - content = new ArrayList(); + content = new ArrayList<>(); } return this.content; } diff --git a/exist-core/src/main/java/org/exist/http/jaxb/Sequence.java b/exist-core/src/main/java/org/exist/http/jaxb/Sequence.java index 74c7ebcd288..4a628989ebe 100644 --- a/exist-core/src/main/java/org/exist/http/jaxb/Sequence.java +++ b/exist-core/src/main/java/org/exist/http/jaxb/Sequence.java @@ -96,7 +96,7 @@ public class Sequence { */ public List getValue() { if (value == null) { - value = new ArrayList(); + value = new ArrayList<>(); } return this.value; } diff --git a/exist-core/src/main/java/org/exist/http/servlets/XSLTServlet.java b/exist-core/src/main/java/org/exist/http/servlets/XSLTServlet.java index 317f7a29890..6ec1eacecc8 100644 --- a/exist-core/src/main/java/org/exist/http/servlets/XSLTServlet.java +++ b/exist-core/src/main/java/org/exist/http/servlets/XSLTServlet.java @@ -86,13 +86,13 @@ public class XSLTServlet extends HttpServlet { private final static Logger LOG = LogManager.getLogger(XSLTServlet.class); private final static XSLTErrorsListener errorListener = - new XSLTErrorsListener(true, false) { + new XSLTErrorsListener<>(true, false) { - @Override - protected void raiseError(final String error, final TransformerException ex) throws ServletException { - throw new ServletException(error, ex); - } - }; + @Override + protected void raiseError(final String error, final TransformerException ex) throws ServletException { + throw new ServletException(error, ex); + } + }; private BrokerPool pool; diff --git a/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java b/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java index 48f821ab96f..bb613dd01c4 100644 --- a/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java +++ b/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java @@ -105,8 +105,10 @@ protected RealmImpl(final DBBroker broker, final SecurityManagerImpl sm, final C //guest group GROUP_GUEST = new GroupImpl(broker, this, GUEST_GROUP_ID, SecurityManager.GUEST_GROUP); - GROUP_GUEST.setManagers(new ArrayList>(){ - { add(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)); } + GROUP_GUEST.setManagers(new ArrayList<>() { + { + add(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)); + } }); GROUP_GUEST.setMetadataValue(EXistSchemaType.DESCRIPTION, "Anonymous Users"); sm.registerGroup(GROUP_GUEST); diff --git a/exist-core/src/main/java/org/exist/xmldb/RemoteRestoreService.java b/exist-core/src/main/java/org/exist/xmldb/RemoteRestoreService.java index 93522cdaa07..5dee9638244 100644 --- a/exist-core/src/main/java/org/exist/xmldb/RemoteRestoreService.java +++ b/exist-core/src/main/java/org/exist/xmldb/RemoteRestoreService.java @@ -242,7 +242,7 @@ private Path zipBackupDir(final Path dir, final RestoreServiceTaskListener resto final Path zipFile = Files.createTempFile("remote-restore-service", "zip"); try (final OutputStream fos = new BufferedOutputStream(Files.newOutputStream(zipFile)); final ZipOutputStream zos = new ZipOutputStream(fos)) { - Files.walkFileTree(dir, new SimpleFileVisitor() { + Files.walkFileTree(dir, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { final Path zipEntryPath = dir.relativize(file); diff --git a/exist-core/src/main/java/org/exist/xquery/functions/transform/Transform.java b/exist-core/src/main/java/org/exist/xquery/functions/transform/Transform.java index 37d300fee34..8169200095f 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/transform/Transform.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/transform/Transform.java @@ -186,12 +186,12 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathExce final XSLTErrorsListener errorListener = - new XSLTErrorsListener(stopOnError, stopOnWarn) { - @Override - protected void raiseError(final String error, final TransformerException ex) throws XPathException { - throw new XPathException(Transform.this, error, ex); - } - }; + new XSLTErrorsListener<>(stopOnError, stopOnWarn) { + @Override + protected void raiseError(final String error, final TransformerException ex) throws XPathException { + throw new XPathException(Transform.this, error, ex); + } + }; // Setup handler and error listener final TransformerHandler handler = createHandler(stylesheetItem, stylesheetParams, attributes, errorListener); From 4e690d992d52c366612c51c254eb08ffd2e8294d Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:00:00 +0100 Subject: [PATCH 04/14] [refactor] Java7: Use Object.equals for readability --- .../triggers/TriggerStatePerThread.java | 9 +++++---- .../collections/triggers/XQueryTrigger.java | 20 +++++++------------ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java b/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java index 58e0d54841e..1e24fb9aa58 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/TriggerStatePerThread.java @@ -27,6 +27,7 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.Iterator; +import java.util.Objects; /** * Avoid infinite recursions in Triggers by preventing the same trigger @@ -238,7 +239,7 @@ private boolean equals(final Object o, final boolean ignorePhase) { return false; } - return dst != null ? dst.equals(that.dst) : that.dst == null; + return Objects.equals(dst, that.dst); } private boolean equalsIgnoringPhase(final Trigger otherTrigger, final TriggerEvent otherTriggerEvent, final XmldbURI otherSrc, @Nullable final XmldbURI otherDst) { @@ -254,7 +255,7 @@ private boolean equalsIgnoringPhase(final Trigger otherTrigger, final TriggerEve return false; } - return dst != null ? dst.equals(otherDst) : otherDst == null; + return Objects.equals(dst, otherDst); } public boolean isCompletedBy(final Trigger otherTrigger, final TriggerPhase otherTriggerPhase, final TriggerEvent otherTriggerEvent, final XmldbURI otherSrc, @Nullable final XmldbURI otherDst) { @@ -275,7 +276,7 @@ public boolean isCompletedBy(final Trigger otherTrigger, final TriggerPhase othe return false; } - return dst != null ? dst.equals(otherDst) : otherDst == null; + return Objects.equals(dst, otherDst); } public boolean completes(final Object o) { @@ -306,7 +307,7 @@ public boolean completes(final Object o) { return false; } - return dst != null ? dst.equals(that.dst) : that.dst == null; + return Objects.equals(dst, that.dst); } } } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java index e05ae35d8ff..fa86dc15c68 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java @@ -22,13 +22,7 @@ package org.exist.collections.triggers; import java.io.IOException; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Properties; -import java.util.Set; +import java.util.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -490,27 +484,27 @@ public boolean equals(final Object o) { final XQueryTrigger that = (XQueryTrigger) o; - if (events != null ? !events.equals(that.events) : that.events != null) { + if (!Objects.equals(events, that.events)) { return false; } - if (collection != null ? !collection.equals(that.collection) : that.collection != null) { + if (!Objects.equals(collection, that.collection)) { return false; } - if (strQuery != null ? !strQuery.equals(that.strQuery) : that.strQuery != null) { + if (!Objects.equals(strQuery, that.strQuery)) { return false; } - if (urlQuery != null ? !urlQuery.equals(that.urlQuery) : that.urlQuery != null) { + if (!Objects.equals(urlQuery, that.urlQuery)) { return false; } - if (userDefinedVariables != null ? !userDefinedVariables.equals(that.userDefinedVariables) : that.userDefinedVariables != null) { + if (!Objects.equals(userDefinedVariables, that.userDefinedVariables)) { return false; } - return bindingPrefix != null ? bindingPrefix.equals(that.bindingPrefix) : that.bindingPrefix == null; + return Objects.equals(bindingPrefix, that.bindingPrefix); } //Collection's methods From 5cd0c6e5c385be56b91988d66f544e0ce7f32491 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:03:22 +0100 Subject: [PATCH 05/14] [refactor] Java8: Replace with simple Map method call --- .../main/java/org/exist/management/impl/JMXAgent.java | 9 +++------ .../src/main/java/org/exist/storage/lock/LockTable.java | 8 ++------ .../java/org/exist/xquery/AbstractInternalModule.java | 6 +----- .../main/java/org/exist/xquery/ExternalModuleImpl.java | 6 +----- 4 files changed, 7 insertions(+), 22 deletions(-) diff --git a/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java b/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java index dd3c57c89da..29cce832027 100755 --- a/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java +++ b/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java @@ -93,7 +93,8 @@ public synchronized void initDBInstance(final BrokerPool instance) { try { addMBean(perInstanceMBean); } catch (final DatabaseConfigurationException e) { - LOG.warn("Exception while registering JMX MBean: {}, for database: {}.", perInstanceMBean.getClass().getName(), instance.getId(), e); + LOG.warn("Exception while registering JMX MBean: {}, for database: {}.", + perInstanceMBean.getClass().getName(), instance.getId(), e); } } } @@ -116,11 +117,7 @@ public synchronized void addMBean(final PerInstanceMBean mbean) throws DatabaseC try { addMBean(mbean.getName(), mbean); if (mbean.getInstanceId() != null) { - Deque stack = registeredMBeans.get(mbean.getInstanceId()); - if (stack == null) { - stack = new ArrayDeque<>(); - registeredMBeans.put(mbean.getInstanceId(), stack); - } + Deque stack = registeredMBeans.computeIfAbsent(mbean.getInstanceId(), k -> new ArrayDeque<>()); stack.push(mbean.getName()); } beanInstances.put(mbean.getName(), mbean); diff --git a/exist-core/src/main/java/org/exist/storage/lock/LockTable.java b/exist-core/src/main/java/org/exist/storage/lock/LockTable.java index 009e86a69ea..6a608c63d8a 100644 --- a/exist-core/src/main/java/org/exist/storage/lock/LockTable.java +++ b/exist-core/src/main/java/org/exist/storage/lock/LockTable.java @@ -171,12 +171,8 @@ private void event(final LockEventType lockEventType, final long groupId, final switch (lockEventType) { case Attempt: - Entry entry = attempting.get(currentThread); - if (entry == null) { - // happens once per thread! - entry = new Entry(); - attempting.put(currentThread, entry); - } + // happens once per thread! + Entry entry = attempting.computeIfAbsent(currentThread, k -> new Entry()); entry.id = id; entry.lockType = lockType; diff --git a/exist-core/src/main/java/org/exist/xquery/AbstractInternalModule.java b/exist-core/src/main/java/org/exist/xquery/AbstractInternalModule.java index 5248ceafce4..4bbddbfd39f 100644 --- a/exist-core/src/main/java/org/exist/xquery/AbstractInternalModule.java +++ b/exist-core/src/main/java/org/exist/xquery/AbstractInternalModule.java @@ -179,11 +179,7 @@ public Iterator getGlobalVariables() { @Override public Variable declareVariable(final QName qname, final Object value) throws XPathException { final Sequence val = XPathUtil.javaObjectToXPath(value, null, null); - Variable var = mGlobalVariables.get(qname); - if (var == null){ - var = new VariableImpl(qname); - mGlobalVariables.put(qname, var); - } + Variable var = mGlobalVariables.computeIfAbsent(qname, VariableImpl::new); var.setValue(val); return var; } diff --git a/exist-core/src/main/java/org/exist/xquery/ExternalModuleImpl.java b/exist-core/src/main/java/org/exist/xquery/ExternalModuleImpl.java index 7c7dfeb09d7..72742be3f1e 100644 --- a/exist-core/src/main/java/org/exist/xquery/ExternalModuleImpl.java +++ b/exist-core/src/main/java/org/exist/xquery/ExternalModuleImpl.java @@ -188,11 +188,7 @@ public Collection getVariableDeclarations() { */ public Variable declareVariable(QName qname, Object value) throws XPathException { final Sequence val = XPathUtil.javaObjectToXPath(value, mContext, null); - Variable var = mStaticVariables.get(qname); - if (var == null) { - var = new VariableImpl(qname); - mStaticVariables.put(qname, var); - } + Variable var = mStaticVariables.computeIfAbsent(qname, VariableImpl::new); var.setValue(val); return var; } From 7d7eeda239c13d765b9730f74558c88cfdd67d6f Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:17:55 +0100 Subject: [PATCH 06/14] [refactor] Java9: If can be replaced by switch - readability --- .../collections/CollectionConfiguration.java | 64 ++--- .../triggers/DeferrableFilteringTrigger.java | 62 ++--- .../collections/triggers/XQueryTrigger.java | 50 ++-- .../exist/http/urlrewrite/RewriteConfig.java | 31 ++- .../http/urlrewrite/XQueryURLRewrite.java | 24 +- .../org/exist/management/client/JMXtoXML.java | 25 +- .../org/exist/repo/ExistPkgExtension.java | 17 +- .../resolver/XercesXmlResolverAdapter.java | 24 +- .../org/exist/security/internal/Password.java | 34 +-- .../java/org/exist/storage/btree/Repair.java | 28 +- .../exist/storage/serializers/Serializer.java | 15 +- .../io/FilterInputStreamCacheMonitor.java | 18 +- .../exist/xmldb/AbstractRemoteResource.java | 56 ++-- .../org/exist/xmldb/LocalBinaryResource.java | 70 ++--- .../org/exist/xmldb/LocalXMLResource.java | 19 +- .../org/exist/xmldb/RemoteCollection.java | 62 ++--- .../org/exist/xmlrpc/TupleSerializer.java | 59 +++-- .../exist/xquery/NamedFunctionReference.java | 58 +++-- .../main/java/org/exist/xquery/XPathUtil.java | 240 ++++++++++-------- .../functions/math/OneParamFunctions.java | 50 +--- .../xquery/functions/util/ModuleInfo.java | 181 ++++++------- .../org/exist/xquery/value/DecimalValue.java | 24 +- .../org/exist/xquery/value/FloatValue.java | 13 +- .../org/exist/xquery/value/IntegerValue.java | 21 +- .../exist/xquery/value/ItemComparator.java | 25 +- .../src/main/java/org/exist/start/Main.java | 56 ++-- .../restxq/impl/xquery/RegistryFunctions.java | 21 +- .../org/exist/indexing/lucene/LuceneUtil.java | 51 ++-- .../range/ComplexRangeIndexConfigElement.java | 19 +- 29 files changed, 719 insertions(+), 698 deletions(-) diff --git a/exist-core/src/main/java/org/exist/collections/CollectionConfiguration.java b/exist-core/src/main/java/org/exist/collections/CollectionConfiguration.java index 1da819c20e3..f894c9bb96e 100644 --- a/exist-core/src/main/java/org/exist/collections/CollectionConfiguration.java +++ b/exist-core/src/main/java/org/exist/collections/CollectionConfiguration.java @@ -133,44 +133,48 @@ protected void read(final DBBroker broker, final Document doc, final boolean che for (int i = 0; i < childNodes.getLength(); i++) { Node node = childNodes.item(i); if (NAMESPACE.equals(node.getNamespaceURI())) { - if (TRIGGERS_ELEMENT.equals(node.getLocalName())) { - final NodeList triggers = node.getChildNodes(); - for (int j = 0; j < triggers.getLength(); j++) { - node = triggers.item(j); - if (node.getNodeType() == Node.ELEMENT_NODE && node.getLocalName().equals(TRIGGER_ELEMENT)) { - configureTrigger(broker.getBrokerPool().getClassLoader(), (Element) node, srcCollectionURI, checkOnly); + switch (node.getLocalName()) { + case TRIGGERS_ELEMENT -> { + final NodeList triggers = node.getChildNodes(); + for (int j = 0; j < triggers.getLength(); j++) { + node = triggers.item(j); + if (node.getNodeType() == Node.ELEMENT_NODE && node.getLocalName().equals(TRIGGER_ELEMENT)) { + configureTrigger(broker.getBrokerPool().getClassLoader(), (Element) node, srcCollectionURI, checkOnly); + } } } - } else if (INDEX_ELEMENT.equals(node.getLocalName())) { - final Element elem = (Element) node; - try { - if (indexSpec == null) { - indexSpec = new IndexSpec(broker, elem); - } else { - indexSpec.read(broker, elem); + case INDEX_ELEMENT -> { + final Element elem = (Element) node; + try { + if (indexSpec == null) { + indexSpec = new IndexSpec(broker, elem); + } else { + indexSpec.read(broker, elem); + } + } catch (final DatabaseConfigurationException e) { + if (checkOnly) { + throw new CollectionConfigurationException(e.getMessage(), e); + } else { + LOG.warn(e.getMessage(), e); + } } - } catch (final DatabaseConfigurationException e) { - if (checkOnly) { - throw new CollectionConfigurationException(e.getMessage(), e); + + } + case VALIDATION_ELEMENT -> { + final Element elem = (Element) node; + final String mode = elem.getAttribute(VALIDATION_MODE_ATTR); + if (mode == null) { + LOG.debug("Unable to determine validation mode in {}", srcCollectionURI); + validationMode = XMLReaderObjectFactory.VALIDATION_SETTING.UNKNOWN; } else { - LOG.warn(e.getMessage(), e); + LOG.debug("{} : Validation mode={}", srcCollectionURI, mode); + validationMode = XMLReaderObjectFactory.VALIDATION_SETTING.fromOption(mode); } - } - } else if (VALIDATION_ELEMENT.equals(node.getLocalName())) { - final Element elem = (Element) node; - final String mode = elem.getAttribute(VALIDATION_MODE_ATTR); - if (mode == null) { - LOG.debug("Unable to determine validation mode in {}", srcCollectionURI); - validationMode = XMLReaderObjectFactory.VALIDATION_SETTING.UNKNOWN; - } else { - LOG.debug("{} : Validation mode={}", srcCollectionURI, mode); - validationMode = XMLReaderObjectFactory.VALIDATION_SETTING.fromOption(mode); } - - } else { - throwOrLog("Ignored node '" + node.getLocalName() + + case null, default -> throwOrLog("Ignored node '" + node.getLocalName() + "' in configuration document", checkOnly); + //TODO : throw an exception like above ? -pb } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/DeferrableFilteringTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/DeferrableFilteringTrigger.java index 677063f2223..1452e10fe3f 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/DeferrableFilteringTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/DeferrableFilteringTrigger.java @@ -241,42 +241,32 @@ public void comment(final char[] ch, final int start, final int length) throws S protected void applyDeferredEvents() throws SAXException { SAXEvent event = null; while((event = deferred.poll()) != null) { - if(event instanceof SetDocumentLocator setDocumentLocator) { - setDocumentLocator_deferred(setDocumentLocator.locator); - } else if(event instanceof StartDocument) { - startDocument_deferred(); - } else if(event instanceof EndDocument) { - endDocument_deferred(); - } else if(event instanceof StartPrefixMapping startPrefixMapping) { - startPrefixMapping_deferred(startPrefixMapping.prefix, startPrefixMapping.uri); - } else if(event instanceof EndPrefixMapping endPrefixMapping) { - endPrefixMapping_deferred(endPrefixMapping.prefix); - } else if(event instanceof StartElement startElement) { - startElement_deferred(startElement.namespaceURI, startElement.localName, startElement.qname, startElement.attributes); - } else if(event instanceof EndElement endElement) { - endElement_deferred(endElement.namespaceURI, endElement.localName, endElement.qname); - } else if(event instanceof Characters characters) { - characters_deferred(characters.ch, 0, characters.ch.length); - } else if(event instanceof IgnorableWhitespace ignorableWhitespace) { - ignorableWhitespace_deferred(ignorableWhitespace.ch, 0, ignorableWhitespace.ch.length); - } else if(event instanceof ProcessingInstruction processingInstruction) { - processingInstruction_deferred(processingInstruction.target, processingInstruction.data); - } else if(event instanceof SkippedEntity skippedEntity) { - skippedEntity_deferred(skippedEntity.name); - } else if(event instanceof StartDTD startDTD) { - startDTD_deferred(startDTD.name, startDTD.publicId, startDTD.systemId); - } else if(event instanceof EndDTD) { - endDTD_deferred(); - } else if(event instanceof StartEntity startEntity) { - startEntity_deferred(startEntity.name); - } else if(event instanceof EndEntity endEntity) { - endEntity_deferred(endEntity.name); - } else if(event instanceof StartCDATA) { - startCDATA_deferred(); - } else if(event instanceof EndCDATA) { - endCDATA_deferred(); - } else if(event instanceof Comment comment) { - comment_deferred(comment.ch, 0, comment.ch.length); + switch (event) { + case SetDocumentLocator setDocumentLocator -> setDocumentLocator_deferred(setDocumentLocator.locator); + case StartDocument startDocument -> startDocument_deferred(); + case EndDocument endDocument -> endDocument_deferred(); + case StartPrefixMapping startPrefixMapping -> + startPrefixMapping_deferred(startPrefixMapping.prefix, startPrefixMapping.uri); + case EndPrefixMapping endPrefixMapping -> endPrefixMapping_deferred(endPrefixMapping.prefix); + case StartElement startElement -> + startElement_deferred(startElement.namespaceURI, startElement.localName, startElement.qname, startElement.attributes); + case EndElement endElement -> + endElement_deferred(endElement.namespaceURI, endElement.localName, endElement.qname); + case Characters characters -> characters_deferred(characters.ch, 0, characters.ch.length); + case IgnorableWhitespace ignorableWhitespace -> + ignorableWhitespace_deferred(ignorableWhitespace.ch, 0, ignorableWhitespace.ch.length); + case ProcessingInstruction processingInstruction -> + processingInstruction_deferred(processingInstruction.target, processingInstruction.data); + case SkippedEntity skippedEntity -> skippedEntity_deferred(skippedEntity.name); + case StartDTD startDTD -> startDTD_deferred(startDTD.name, startDTD.publicId, startDTD.systemId); + case EndDTD endDTD -> endDTD_deferred(); + case StartEntity startEntity -> startEntity_deferred(startEntity.name); + case EndEntity endEntity -> endEntity_deferred(endEntity.name); + case StartCDATA startCDATA -> startCDATA_deferred(); + case EndCDATA endCDATA -> endCDATA_deferred(); + case Comment comment -> comment_deferred(comment.ch, 0, comment.ch.length); + default -> { + } } } } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java index fa86dc15c68..99e81ec2ef9 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java @@ -144,31 +144,31 @@ public void configure(final DBBroker broker, final Txn transaction, final Collec final Object paramValue = entry.getValue().get(0); //get the binding prefix (if any) - if ("bindingPrefix".equals(paramName)) { - final String bindingPrefix = (String) paramValue; - if (bindingPrefix != null && !bindingPrefix.trim().isEmpty()) { - this.bindingPrefix = bindingPrefix.trim() + ":"; - } - } - - //get the URL of the query (if any) - else if ("url".equals(paramName)) { - this.urlQuery = (String) paramValue; - } - - //get the query (if any) - else if ("query".equals(paramName)) { - this.strQuery = (String) paramValue; - } - - //make any other parameters available as external variables for the query - else { - //TODO could be enhanced to setup a sequence etc - if (userDefinedVariables == null) { - this.userDefinedVariables = new Properties(); - } - this.userDefinedVariables.put(paramName, paramValue); - } + switch (paramName) { + case "bindingPrefix" -> { + final String bindingPrefix = (String) paramValue; + if (bindingPrefix != null && !bindingPrefix.trim().isEmpty()) { + this.bindingPrefix = bindingPrefix.trim() + ":"; + } + } + + //get the URL of the query (if any) + case "url" -> this.urlQuery = (String) paramValue; + + + //get the query (if any) + case "query" -> this.strQuery = (String) paramValue; + + + //make any other parameters available as external variables for the query + case null, default -> { + //TODO could be enhanced to setup a sequence etc + if (userDefinedVariables == null) { + this.userDefinedVariables = new Properties(); + } + this.userDefinedVariables.put(paramName, paramValue); + } + } } //set a default binding prefix if none was specified diff --git a/exist-core/src/main/java/org/exist/http/urlrewrite/RewriteConfig.java b/exist-core/src/main/java/org/exist/http/urlrewrite/RewriteConfig.java index 34db5f04c02..b3d8766e6ad 100644 --- a/exist-core/src/main/java/org/exist/http/urlrewrite/RewriteConfig.java +++ b/exist-core/src/main/java/org/exist/http/urlrewrite/RewriteConfig.java @@ -221,24 +221,23 @@ private void parse(final Document doc) throws ServletException { private URLRewrite parseAction(final ServletConfig config, final String pattern, final Element action) throws ServletException { final URLRewrite rewrite; - if ("forward".equals(action.getLocalName())) { - rewrite = new PathForward(config, action, pattern); - } else if ("redirect".equals(action.getLocalName())) { - rewrite = new Redirect(action, pattern); - } else if ("root".equals(action.getLocalName())) { - final ControllerForward cf = new ControllerForward(action, pattern); + switch (action.getLocalName()) { + case "forward" -> rewrite = new PathForward(config, action, pattern); + case "redirect" -> rewrite = new Redirect(action, pattern); + case "root" -> { + final ControllerForward cf = new ControllerForward(action, pattern); - /* - * If there is a server-name attribute on the root tag, then add that - * as an attribute on the ControllerForward object. - */ - final String serverName = action.getAttribute(SERVER_NAME_ATTRIBUTE); - if (serverName != null && serverName.length() > 0) { - cf.setServerName(serverName); + /* + * If there is a server-name attribute on the root tag, then add that + * as an attribute on the ControllerForward object. + */ + final String serverName = action.getAttribute(SERVER_NAME_ATTRIBUTE); + if (serverName != null && serverName.length() > 0) { + cf.setServerName(serverName); + } + rewrite = cf; } - rewrite = cf; - } else { - rewrite = null; + case null, default -> rewrite = null; } return rewrite; } diff --git a/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java b/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java index a61dfc989ac..a2de9ca2543 100644 --- a/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java +++ b/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java @@ -275,17 +275,19 @@ protected void service(final HttpServletRequest request, final HttpServletRespon final String nodeNs = node.getNamespaceURI(); if (node.getNodeType() == Node.ELEMENT_NODE && Namespaces.EXIST_NS.equals(nodeNs)) { final Element action = (Element) node; - if ("view".equals(action.getLocalName())) { - parseViews(modifiedRequest, action, modelView); - } else if ("error-handler".equals(action.getLocalName())) { - parseErrorHandlers(modifiedRequest, action, modelView); - } else if ("cache-control".equals(action.getLocalName())) { - final String option = action.getAttribute("cache"); - modelView.setUseCache("yes".equals(option)); - } else { - final URLRewrite urw = parseAction(modifiedRequest, action); - if (urw != null) { - modelView.setModel(urw); + switch (action.getLocalName()) { + case "view" -> parseViews(modifiedRequest, action, modelView); + case "error-handler" -> + parseErrorHandlers(modifiedRequest, action, modelView); + case "cache-control" -> { + final String option = action.getAttribute("cache"); + modelView.setUseCache("yes".equals(option)); + } + case null, default -> { + final URLRewrite urw = parseAction(modifiedRequest, action); + if (urw != null) { + modelView.setModel(urw); + } } } } diff --git a/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java b/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java index 281ddc98217..f9bf3a53539 100644 --- a/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java +++ b/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java @@ -394,24 +394,17 @@ private void queryMBeans(final MemTreeBuilder builder, final ObjectName query) } private void serializeObject(final MemTreeBuilder builder, final Object object) throws SAXException { - if (object == null) { - return; + switch (object) { + case null -> { + return; + } + case TabularData tabularData -> serialize(builder, tabularData); + case CompositeData[] compositeData -> serialize(builder, compositeData); + case CompositeData compositeData -> serialize(builder, compositeData); + case Object[] objects -> serialize(builder, objects); + default -> builder.characters(object.toString()); } - if (object instanceof TabularData) { - serialize(builder, (TabularData) object); - - } else if (object instanceof CompositeData[]) { - serialize(builder, (CompositeData[]) object); - } else if (object instanceof CompositeData) { - serialize(builder, (CompositeData) object); - - } else if (object instanceof Object[]) { - serialize(builder, (Object[]) object); - - } else { - builder.characters(object.toString()); - } } private void serialize(final MemTreeBuilder builder, final Object[] data) throws SAXException { diff --git a/exist-core/src/main/java/org/exist/repo/ExistPkgExtension.java b/exist-core/src/main/java/org/exist/repo/ExistPkgExtension.java index 49de308023b..f54829b5a46 100644 --- a/exist-core/src/main/java/org/exist/repo/ExistPkgExtension.java +++ b/exist-core/src/main/java/org/exist/repo/ExistPkgExtension.java @@ -91,15 +91,14 @@ protected void parseDescriptor(XMLStreamReader parser, Package pkg) private void handleElement(XMLStreamReader parser, Package pkg, ExistPkgInfo info) throws PackageException, XMLStreamException { final String local = parser.getLocalName(); - if ("jar".equals(local)) { - final String jar = myXSHelper.getElementValue(parser); - info.addJar(jar); - } else if ("java".equals(local)) { - handleJava(parser, info); - } else if ("xquery".equals(local)) { - handleXQuery(parser, pkg, info); - } else { - throw new PackageException("Unknown eXist component type: " + local); + switch (local) { + case "jar" -> { + final String jar = myXSHelper.getElementValue(parser); + info.addJar(jar); + } + case "java" -> handleJava(parser, info); + case "xquery" -> handleXQuery(parser, pkg, info); + case null, default -> throw new PackageException("Unknown eXist component type: " + local); } } diff --git a/exist-core/src/main/java/org/exist/resolver/XercesXmlResolverAdapter.java b/exist-core/src/main/java/org/exist/resolver/XercesXmlResolverAdapter.java index d1bc76e1995..5e6bec75c54 100644 --- a/exist-core/src/main/java/org/exist/resolver/XercesXmlResolverAdapter.java +++ b/exist-core/src/main/java/org/exist/resolver/XercesXmlResolverAdapter.java @@ -68,18 +68,18 @@ public XMLInputSource resolveEntity(final XMLResourceIdentifier xmlResourceIdent try { // get the name final String name; - if (xmlResourceIdentifier instanceof XSDDescription) { - final QName triggeringComponent = ((XSDDescription) xmlResourceIdentifier).getTriggeringComponent(); - name = triggeringComponent != null ? triggeringComponent.localpart : null; - } else if (xmlResourceIdentifier instanceof XMLSchemaDescription) { - final QName triggeringComponent = ((XMLSchemaDescription) xmlResourceIdentifier).getTriggeringComponent(); - name = triggeringComponent != null ? triggeringComponent.localpart : null; - } else if (xmlResourceIdentifier instanceof XMLEntityDescriptionImpl) { - name = ((XMLEntityDescriptionImpl)xmlResourceIdentifier).getEntityName(); - } else if (xmlResourceIdentifier instanceof XMLDTDDescription) { - name = ((XMLDTDDescription)xmlResourceIdentifier).getRootName(); - } else { - name = null; + switch (xmlResourceIdentifier) { + case XSDDescription xsdDescription -> { + final QName triggeringComponent = xsdDescription.getTriggeringComponent(); + name = triggeringComponent != null ? triggeringComponent.localpart : null; + } + case XMLSchemaDescription xmlSchemaDescription -> { + final QName triggeringComponent = xmlSchemaDescription.getTriggeringComponent(); + name = triggeringComponent != null ? triggeringComponent.localpart : null; + } + case XMLEntityDescriptionImpl xmlEntityDescription -> name = xmlEntityDescription.getEntityName(); + case XMLDTDDescription xmldtdDescription -> name = xmldtdDescription.getRootName(); + case null, default -> name = null; } // get the systemId diff --git a/exist-core/src/main/java/org/exist/security/internal/Password.java b/exist-core/src/main/java/org/exist/security/internal/Password.java index 859637e33c0..a8f78fd701b 100644 --- a/exist-core/src/main/java/org/exist/security/internal/Password.java +++ b/exist-core/src/main/java/org/exist/security/internal/Password.java @@ -152,25 +152,27 @@ public boolean equals(Object obj) { if(obj == this) { return true; } - - if(obj == null) { - return false; - } - - if(obj instanceof Password p) { - if(algorithm != p.algorithm) { - throw new RuntimeException("Cannot compare passwords with different algorithms i.e. " + algorithm + " and " + p.algorithm); + switch (obj) { + case null -> { + return false; + } + case Password p -> { + + if (algorithm != p.algorithm) { + throw new RuntimeException("Cannot compare passwords with different algorithms i.e. " + algorithm + " and " + p.algorithm); + } + + return (Objects.equals(pw, p.pw)); + } + case String s -> { + return (hashAndEncode(s)).equals(pw); + } + default -> { } - - return (Objects.equals(pw, p.pw)); - } - - if(obj instanceof String) { - return (hashAndEncode((String) obj)).equals(pw); } - - return false; + + return false; } @Override diff --git a/exist-core/src/main/java/org/exist/storage/btree/Repair.java b/exist-core/src/main/java/org/exist/storage/btree/Repair.java index fe077620ae9..f04f93c838e 100644 --- a/exist-core/src/main/java/org/exist/storage/btree/Repair.java +++ b/exist-core/src/main/java/org/exist/storage/btree/Repair.java @@ -56,22 +56,22 @@ public void repair(String id) { try(final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()))) { BTree btree = null; - if ("collections".equals(id)) { - btree = ((NativeBroker)broker).getStorage(NativeBroker.COLLECTIONS_DBX_ID); - } else if ("dom".equals(id)) { - btree = ((NativeBroker)broker).getStorage(NativeBroker.DOM_DBX_ID); - } else if ("range".equals(id)) { - btree = ((NativeBroker)broker).getStorage(NativeBroker.VALUES_DBX_ID); - } else if ("structure".equals(id)) { - NativeStructuralIndexWorker index = (NativeStructuralIndexWorker) - broker.getIndexController().getWorkerByIndexName(StructuralIndex.STRUCTURAL_INDEX_ID); - btree = index.getStorage(); - } else { - // use index id defined in conf.xml - Index index = pool.getIndexManager().getIndexByName(id); - if (index != null) { + switch (id) { + case "collections" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.COLLECTIONS_DBX_ID); + case "dom" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.DOM_DBX_ID); + case "range" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.VALUES_DBX_ID); + case "structure" -> { + NativeStructuralIndexWorker index = (NativeStructuralIndexWorker) + broker.getIndexController().getWorkerByIndexName(StructuralIndex.STRUCTURAL_INDEX_ID); btree = index.getStorage(); } + case null, default -> { + // use index id defined in conf.xml + Index index = pool.getIndexManager().getIndexByName(id); + if (index != null) { + btree = index.getStorage(); + } + } } if (btree == null) { System.console().printf("Unkown index: %s\n", id); diff --git a/exist-core/src/main/java/org/exist/storage/serializers/Serializer.java b/exist-core/src/main/java/org/exist/storage/serializers/Serializer.java index 6112ad53e75..a3adc0499e2 100644 --- a/exist-core/src/main/java/org/exist/storage/serializers/Serializer.java +++ b/exist-core/src/main/java/org/exist/storage/serializers/Serializer.java @@ -315,15 +315,12 @@ public boolean isStylesheetApplied() { protected int getHighlightingMode() { final String option = getProperty(EXistOutputKeys.HIGHLIGHT_MATCHES, "elements"); - if ("both".equals(option) || "all".equals(option)) { - return TAG_BOTH; - } else if ("elements".equals(option)) { - return TAG_ELEMENT_MATCHES; - } else if ("attributes".equals(option)) { - return TAG_ATTRIBUTE_MATCHES; - } else { - return TAG_NONE; - } + return switch (option) { + case "both", "all" -> TAG_BOTH; + case "elements" -> TAG_ELEMENT_MATCHES; + case "attributes" -> TAG_ATTRIBUTE_MATCHES; + case null, default -> TAG_NONE; + }; } /** diff --git a/exist-core/src/main/java/org/exist/util/io/FilterInputStreamCacheMonitor.java b/exist-core/src/main/java/org/exist/util/io/FilterInputStreamCacheMonitor.java index ad0772e5456..8534dddd70a 100644 --- a/exist-core/src/main/java/org/exist/util/io/FilterInputStreamCacheMonitor.java +++ b/exist-core/src/main/java/org/exist/util/io/FilterInputStreamCacheMonitor.java @@ -73,16 +73,14 @@ public String dump() { final StringBuilder builder = new StringBuilder(); for (final FilterInputStreamCacheInfo info : getActive()) { final FilterInputStreamCache cache = info.getCache(); - final String id; - if (cache instanceof FileFilterInputStreamCache) { - id = ((FileFilterInputStreamCache)cache).getFilePath().normalize().toAbsolutePath().toString(); - } else if (cache instanceof MemoryMappedFileFilterInputStreamCache) { - id = ((MemoryMappedFileFilterInputStreamCache)cache).getFilePath().normalize().toAbsolutePath().toString(); - } else if (cache instanceof MemoryFilterInputStreamCache) { - id = "mem"; - } else { - id = "unknown"; - } + final String id = switch (cache) { + case FileFilterInputStreamCache fileFilterInputStreamCache -> + fileFilterInputStreamCache.getFilePath().normalize().toAbsolutePath().toString(); + case MemoryMappedFileFilterInputStreamCache memoryMappedFileFilterInputStreamCache -> + memoryMappedFileFilterInputStreamCache.getFilePath().normalize().toAbsolutePath().toString(); + case MemoryFilterInputStreamCache memoryFilterInputStreamCache -> "mem"; + case null, default -> "unknown"; + }; builder.append(info.getRegistered()).append(": ").append(id); } return builder.toString(); diff --git a/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java b/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java index 0a0cc121e7d..c409239ba0d 100644 --- a/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java @@ -86,16 +86,24 @@ public Object getContent() throws XMLDBException { final Object res = getExtendedContent(); if (res != null) { - if (res instanceof byte[]) { - return res; - } else if (res instanceof Path) { - return readFile((Path) res); - } else if (res instanceof java.io.File) { - return readFile(((java.io.File) res).toPath()); - } else if (res instanceof InputSource) { - return readFile((InputSource) res); - } else if (res instanceof ContentFile) { - return ((ContentFile) res).getBytes(); + switch (res) { + case byte[] bytes -> { + return res; + } + case Path path1 -> { + return readFile(path1); + } + case File file1 -> { + return readFile(file1.toPath()); + } + case InputSource source -> { + return readFile(source); + } + case ContentFile contentFile1 -> { + return contentFile1.getBytes(); + } + default -> { + } } } return res; @@ -115,16 +123,24 @@ protected byte[] getData() throws XMLDBException { final Object res = getExtendedContent(); if (res != null) { - if (res instanceof Path) { - return readFile((Path) res); - } else if (res instanceof java.io.File) { - return readFile(((java.io.File) res).toPath()); - } else if (res instanceof InputSource) { - return readFile((InputSource) res); - } else if (res instanceof String) { - return ((String) res).getBytes(UTF_8); - } else if (res instanceof ContentFile) { - return ((ContentFile) res).getBytes(); + switch (res) { + case Path path1 -> { + return readFile(path1); + } + case File file1 -> { + return readFile(file1.toPath()); + } + case InputSource source -> { + return readFile(source); + } + case String s -> { + return s.getBytes(UTF_8); + } + case ContentFile contentFile1 -> { + return contentFile1.getBytes(); + } + default -> { + } } } diff --git a/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java b/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java index ba721af3495..936ffbc3642 100644 --- a/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java @@ -121,26 +121,35 @@ Object getContent(final DBBroker broker, final Txn transaction) throws XMLDBExce private Object getContent(final Object res) throws XMLDBException { if(res != null) { - if(res instanceof Path) { - return readFile((Path)res); - } else if(res instanceof java.io.File) { - return readFile(((java.io.File)res).toPath()); - } else if(res instanceof InputSource) { - return readFile((InputSource) res); - } else if(res instanceof byte[]) { - return res; - } else if(res instanceof BinaryValue) { - try(final UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream()) { - ((BinaryValue) res).streamBinaryTo(baos); - return baos.toByteArray(); - } catch (final IOException e) { - throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); + switch (res) { + case Path path -> { + return readFile(path); } - } else if(res instanceof InputStream) { - try(final InputStream is = (InputStream)res) { - return readFile(is); - } catch (final IOException e) { - throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); + case File file1 -> { + return readFile(file1.toPath()); + } + case InputSource source -> { + return readFile(source); + } + case byte[] bytes -> { + return res; + } + case BinaryValue value -> { + try (final UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream()) { + ((BinaryValue) res).streamBinaryTo(baos); + return baos.toByteArray(); + } catch (final IOException e) { + throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); + } + } + case InputStream inputStream -> { + try (final InputStream is = (InputStream) res) { + return readFile(is); + } catch (final IOException e) { + throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); + } + } + default -> { } } } @@ -149,20 +158,15 @@ private Object getContent(final Object res) throws XMLDBException { @Override public void setContent(final Object value) throws XMLDBException { - if(value instanceof Path) { - file = (Path)value; - } else if(value instanceof java.io.File) { - file = ((java.io.File)value).toPath(); - } else if(value instanceof InputSource) { - inputSource = (InputSource)value; - } else if(value instanceof byte[]) { - rawData = (byte[])value; - } else if(value instanceof String) { - rawData = ((String) value).getBytes(); - } else if(value instanceof BinaryValue) { - binaryValue = (BinaryValue)value; - } else { - throw new XMLDBException(ErrorCodes.VENDOR_ERROR, "don't know how to handle value of type " + value.getClass().getName()); + switch (value) { + case Path path -> file = path; + case File file1 -> file = file1.toPath(); + case InputSource source -> inputSource = source; + case byte[] bytes -> rawData = bytes; + case String s -> rawData = s.getBytes(); + case BinaryValue binaryValue1 -> binaryValue = binaryValue1; + case null, default -> + throw new XMLDBException(ErrorCodes.VENDOR_ERROR, "don't know how to handle value of type " + value.getClass().getName()); } isExternal = true; diff --git a/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java b/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java index 2250f484736..6c19528e9b9 100644 --- a/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java @@ -555,18 +555,13 @@ public void setContent(final Object obj) throws XMLDBException { inputSource = null; root = null; - if (obj instanceof Path) { - file = (Path) obj; - } else if (obj instanceof java.io.File) { - file = ((java.io.File) obj).toPath(); - } else if (obj instanceof AtomicValue) { - value = (AtomicValue) obj; - } else if (obj instanceof InputSource) { - inputSource=(InputSource) obj; - } else if (obj instanceof byte[]) { - content = new String((byte[])obj, UTF_8); - } else { - content = obj.toString(); + switch (obj) { + case Path path -> file = path; + case java.io.File file1 -> file = file1.toPath(); + case AtomicValue atomicValue -> value = atomicValue; + case InputSource source -> inputSource = source; + case byte[] bytes -> content = new String(bytes, UTF_8); + case null, default -> content = obj.toString(); } } diff --git a/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java b/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java index 11332e4110e..8ead07783cd 100644 --- a/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java +++ b/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java @@ -474,20 +474,22 @@ public void storeResource(final Resource res, final Instant a, final Instant b) final Object content = (res instanceof ExtendedResource) ? ((ExtendedResource) res).getExtendedContent() : res.getContent(); if (content instanceof Path || content instanceof File || content instanceof InputSource) { long fileLength = -1; - if (content instanceof Path) { - final Path file = (Path) content; - if (!Files.isReadable(file)) { - throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.toAbsolutePath()); + switch (content) { + case Path file -> { + if (!Files.isReadable(file)) { + throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.toAbsolutePath()); + } + fileLength = FileUtils.sizeQuietly(file); + } + case File file -> { + if (!file.canRead()) { + throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.getAbsolutePath()); + } + fileLength = file.length(); } - fileLength = FileUtils.sizeQuietly(file); - } else if (content instanceof File) { - final File file = (File) content; - if (!file.canRead()) { - throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.getAbsolutePath()); + case EXistInputSource eXistInputSource -> fileLength = eXistInputSource.getByteStreamLength(); + default -> { } - fileLength = file.length(); - } else if (content instanceof EXistInputSource) { - fileLength = ((EXistInputSource) content).getByteStreamLength(); } if (res instanceof AbstractRemoteResource) { ((AbstractRemoteResource) res).dateCreated = a; @@ -555,25 +557,27 @@ private void uploadAndStore(final Resource res) throws XMLDBException { descString = ((RemoteBinaryResource) res).getStreamSymbolicPath(); } else { final Object content = res.getContent(); - if (content instanceof File file) { - try { - is = new BufferedInputStream(new FileInputStream(file)); - } catch (final FileNotFoundException e) { - throw new XMLDBException( - ErrorCodes.INVALID_RESOURCE, - "could not read resource from file " + file.getAbsolutePath(), - e); + switch (content) { + case File file -> { + try { + is = new BufferedInputStream(new FileInputStream(file)); + } catch (final FileNotFoundException e) { + throw new XMLDBException( + ErrorCodes.INVALID_RESOURCE, + "could not read resource from file " + file.getAbsolutePath(), + e); + } } - } else if (content instanceof InputSource) { - is = ((InputSource) content).getByteStream(); - if (content instanceof EXistInputSource) { - descString = ((EXistInputSource) content).getSymbolicPath(); + case InputSource inputSource -> { + is = inputSource.getByteStream(); + if (content instanceof EXistInputSource) { + descString = ((EXistInputSource) content).getSymbolicPath(); + } } - } else if (content instanceof String) { - // TODO(AR) we really should not allow String to be used here, as we loose the encoding info and default to UTF-8! - is = new UnsynchronizedByteArrayInputStream(((String) content).getBytes(UTF_8)); - } else { - LOG.error("Unable to get content from {}", content); + case String s -> + // TODO(AR) we really should not allow String to be used here, as we loose the encoding info and default to UTF-8! + is = new UnsynchronizedByteArrayInputStream(s.getBytes(UTF_8)); + case null, default -> LOG.error("Unable to get content from {}", content); } } diff --git a/exist-core/src/main/java/org/exist/xmlrpc/TupleSerializer.java b/exist-core/src/main/java/org/exist/xmlrpc/TupleSerializer.java index a54323b89dc..d9abe08a12b 100644 --- a/exist-core/src/main/java/org/exist/xmlrpc/TupleSerializer.java +++ b/exist-core/src/main/java/org/exist/xmlrpc/TupleSerializer.java @@ -57,33 +57,38 @@ private void writeObject(final ContentHandler handler, final Object object) thro private void writeData(final ContentHandler handler, final Object object) throws SAXException { final Tuple tuple = (Tuple) object; - if(tuple instanceof Tuple2) { - writeObject(handler, ((Tuple2)tuple)._1); - writeObject(handler, ((Tuple2)tuple)._2); - } else if(tuple instanceof Tuple3) { - writeObject(handler, ((Tuple3)tuple)._1); - writeObject(handler, ((Tuple3)tuple)._2); - writeObject(handler, ((Tuple3)tuple)._3); - } else if(tuple instanceof Tuple4) { - writeObject(handler, ((Tuple4)tuple)._1); - writeObject(handler, ((Tuple4)tuple)._2); - writeObject(handler, ((Tuple4)tuple)._3); - writeObject(handler, ((Tuple4)tuple)._4); - } else if(tuple instanceof Tuple5) { - writeObject(handler, ((Tuple5)tuple)._1); - writeObject(handler, ((Tuple5)tuple)._2); - writeObject(handler, ((Tuple5)tuple)._3); - writeObject(handler, ((Tuple5)tuple)._4); - writeObject(handler, ((Tuple5)tuple)._5); - } else if(tuple instanceof Tuple6) { - writeObject(handler, ((Tuple6) tuple)._1); - writeObject(handler, ((Tuple6) tuple)._2); - writeObject(handler, ((Tuple6) tuple)._3); - writeObject(handler, ((Tuple6) tuple)._4); - writeObject(handler, ((Tuple6) tuple)._5); - writeObject(handler, ((Tuple6) tuple)._6); - } else { - throw new SAXException("Unsupported Tuple class: " + tuple.getClass().getName()); + switch (tuple) { + case Tuple2 tuple2 -> { + writeObject(handler, tuple2._1); + writeObject(handler, tuple2._2); + } + case Tuple3 tuple3 -> { + writeObject(handler, tuple3._1); + writeObject(handler, tuple3._2); + writeObject(handler, tuple3._3); + } + case Tuple4 tuple4 -> { + writeObject(handler, tuple4._1); + writeObject(handler, tuple4._2); + writeObject(handler, tuple4._3); + writeObject(handler, tuple4._4); + } + case Tuple5 tuple5 -> { + writeObject(handler, tuple5._1); + writeObject(handler, tuple5._2); + writeObject(handler, tuple5._3); + writeObject(handler, tuple5._4); + writeObject(handler, tuple5._5); + } + case Tuple6 tuple6 -> { + writeObject(handler, tuple6._1); + writeObject(handler, tuple6._2); + writeObject(handler, tuple6._3); + writeObject(handler, tuple6._4); + writeObject(handler, tuple6._5); + writeObject(handler, tuple6._6); + } + case null, default -> throw new SAXException("Unsupported Tuple class: " + tuple.getClass().getName()); } } diff --git a/exist-core/src/main/java/org/exist/xquery/NamedFunctionReference.java b/exist-core/src/main/java/org/exist/xquery/NamedFunctionReference.java index cd1ba8a4ad9..e3e222d0dcd 100644 --- a/exist-core/src/main/java/org/exist/xquery/NamedFunctionReference.java +++ b/exist-core/src/main/java/org/exist/xquery/NamedFunctionReference.java @@ -67,33 +67,37 @@ public static FunctionCall lookupFunction(Expression self, XQueryContext context args.add(new Function.Placeholder(context)); } final Expression fun = FunctionFactory.createFunction(context, funcName, ast, null, args, false); - if (fun == null) - {throw new XPathException(self, ErrorCodes.XPST0017, "Function not found: " + funcName);} - if (fun instanceof FunctionCall) { - if (((FunctionCall) fun).getFunction() == null) { - throw new XPathException(self, ErrorCodes.XPST0017, "Function not found: " + funcName); - } - // clear line and column as it will be misleading. should be set later to point - // to the location from where the function is called. - fun.setLocation(-1, -1); - return (FunctionCall) fun; - } else if (fun instanceof Function) { - final InternalFunctionCall funcCall; - if (fun instanceof InternalFunctionCall) { - funcCall = (InternalFunctionCall)fun; - } else { - funcCall = new InternalFunctionCall((Function)fun); - } - funcCall.setLocation(-1, -1); - return FunctionFactory.wrap(context, funcCall); - } else if (fun instanceof CastExpression) { - final InternalFunctionCall funcCall = new InternalFunctionCall(((CastExpression)fun).toFunction()); - funcCall.setLocation(-1, -1); - return FunctionFactory.wrap(context, funcCall); - } else - {throw new XPathException(self, ErrorCodes.XPST0017, "Named function reference should point to a function; found: " + - fun.getClass().getName());} - } + switch (fun) { + case null -> throw new XPathException(self, ErrorCodes.XPST0017, "Function not found: " + funcName); + case FunctionCall functionCall -> { + if (functionCall.getFunction() == null) { + throw new XPathException(self, ErrorCodes.XPST0017, "Function not found: " + funcName); + } + // clear line and column as it will be misleading. should be set later to point + // to the location from where the function is called. + fun.setLocation(-1, -1); + return functionCall; + } + case Function function -> { + final InternalFunctionCall funcCall; + if (fun instanceof InternalFunctionCall) { + funcCall = (InternalFunctionCall) fun; + } else { + funcCall = new InternalFunctionCall((Function) fun); + } + funcCall.setLocation(-1, -1); + return FunctionFactory.wrap(context, funcCall); + } + case CastExpression castExpression -> { + final InternalFunctionCall funcCall = new InternalFunctionCall(castExpression.toFunction()); + funcCall.setLocation(-1, -1); + return FunctionFactory.wrap(context, funcCall); + } + default -> + throw new XPathException(self, ErrorCodes.XPST0017, "Named function reference should point to a function; found: " + + fun.getClass().getName()); + } + } @Override public void dump(ExpressionDumper dumper) { diff --git a/exist-core/src/main/java/org/exist/xquery/XPathUtil.java b/exist-core/src/main/java/org/exist/xquery/XPathUtil.java index 77c4832c0bc..5e817da5ee5 100644 --- a/exist-core/src/main/java/org/exist/xquery/XPathUtil.java +++ b/exist-core/src/main/java/org/exist/xquery/XPathUtil.java @@ -92,130 +92,150 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context public static final Sequence javaObjectToXPath(Object obj, XQueryContext context, boolean expandChars, final Expression expression) throws XPathException { - if (obj == null) { - //return Sequence.EMPTY_SEQUENCE; - return null; - } else if (obj instanceof Sequence) { - return (Sequence) obj; - } else if (obj instanceof String) { - final StringValue v = new StringValue(expression, (String) obj); - return (expandChars ? v.expand() : v); - } else if (obj instanceof Boolean) { - return BooleanValue.valueOf(((Boolean) obj)); - } else if (obj instanceof Float) { - return new FloatValue(expression, ((Float) obj)); - } else if (obj instanceof Double) { - return new DoubleValue(expression, ((Double) obj)); - } else if (obj instanceof Short) { - return new IntegerValue(expression, ((Short) obj), Type.SHORT); - } else if (obj instanceof Integer) { - return new IntegerValue(expression, ((Integer) obj), Type.INT); - } else if (obj instanceof Long) { - return new IntegerValue(expression, ((Long) obj), Type.LONG); - } else if (obj instanceof BigInteger) { - return new IntegerValue(expression, (BigInteger) obj); - } else if (obj instanceof BigDecimal) { - return new DecimalValue(expression, (BigDecimal) obj); - } else if (obj instanceof byte[]) { - return BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), new UnsynchronizedByteArrayInputStream((byte[]) obj), expression); - } else if (obj instanceof ResourceSet) { - final Sequence seq = new AVLTreeNodeSet(); - try { - final DBBroker broker = context.getBroker(); - for (final ResourceIterator it = ((ResourceSet) obj).getIterator(); it.hasMoreResources();) { - seq.add(getNode(broker, (XMLResource) it.nextResource(), expression)); - } - } catch (final XMLDBException xe) { - throw new XPathException(expression, "Failed to convert ResourceSet to node: " + xe.getMessage()); + switch (obj) { + case null -> { + //return Sequence.EMPTY_SEQUENCE; + return null; + //return Sequence.EMPTY_SEQUENCE; } - return seq; - - } else if (obj instanceof XMLResource) { - return getNode(context.getBroker(), (XMLResource) obj, expression); - - } else if (obj instanceof Node) { - context.pushDocumentContext(); - final DOMStreamer streamer = (DOMStreamer) SerializerPool.getInstance().borrowObject(DOMStreamer.class); - try { - final MemTreeBuilder builder = context.getDocumentBuilder(); - builder.startDocument(); - final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); - streamer.setContentHandler(receiver); - streamer.serialize((Node) obj, false); - if(obj instanceof Document) { - return builder.getDocument(); - } else { - return builder.getDocument().getNode(1); + case Sequence sequence -> { + return sequence; + } + case String s -> { + final StringValue v = new StringValue(expression, s); + return (expandChars ? v.expand() : v); + } + case Boolean b -> { + return BooleanValue.valueOf(b); + } + case Float v -> { + return new FloatValue(expression, v); + } + case Double v -> { + return new DoubleValue(expression, v); + } + case Short aShort -> { + return new IntegerValue(expression, aShort, Type.SHORT); + } + case Integer integer -> { + return new IntegerValue(expression, integer, Type.INT); + } + case Long l -> { + return new IntegerValue(expression, l, Type.LONG); + } + case BigInteger bigInteger -> { + return new IntegerValue(expression, bigInteger); + } + case BigDecimal bigDecimal -> { + return new DecimalValue(expression, bigDecimal); + } + case byte[] bytes -> { + return BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), new UnsynchronizedByteArrayInputStream(bytes), expression); + } + case ResourceSet resourceSet -> { + final Sequence seq = new AVLTreeNodeSet(); + try { + final DBBroker broker = context.getBroker(); + for (final ResourceIterator it = ((ResourceSet) obj).getIterator(); it.hasMoreResources(); ) { + seq.add(getNode(broker, (XMLResource) it.nextResource(), expression)); + } + } catch (final XMLDBException xe) { + throw new XPathException(expression, "Failed to convert ResourceSet to node: " + xe.getMessage()); } - } catch (final SAXException e) { - throw new XPathException(expression, - "Failed to transform node into internal model: " - + e.getMessage()); - } finally { - context.popDocumentContext(); - SerializerPool.getInstance().returnObject(streamer); + return seq; + + } + case XMLResource xmlResource -> { + return getNode(context.getBroker(), xmlResource, expression); } + case Node node -> { + context.pushDocumentContext(); + final DOMStreamer streamer = (DOMStreamer) SerializerPool.getInstance().borrowObject(DOMStreamer.class); + try { + final MemTreeBuilder builder = context.getDocumentBuilder(); + builder.startDocument(); + final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); + streamer.setContentHandler(receiver); + streamer.serialize((Node) obj, false); + if (obj instanceof Document) { + return builder.getDocument(); + } else { + return builder.getDocument().getNode(1); + } + } catch (final SAXException e) { + throw new XPathException(expression, + "Failed to transform node into internal model: " + + e.getMessage()); + } finally { + context.popDocumentContext(); + SerializerPool.getInstance().returnObject(streamer); + } - } else if (obj instanceof List) { - boolean createNodeSequence = true; + } + case List objects -> { + boolean createNodeSequence = true; - for (Object next : ((List) obj)) { - if (!(next instanceof NodeProxy)) { - createNodeSequence = false; - break; + for (Object next : objects) { + if (!(next instanceof NodeProxy)) { + createNodeSequence = false; + break; + } } + Sequence seq = createNodeSequence ? new AVLTreeNodeSet() : new ValueSequence(); + for (Object o : objects) { + seq.add((Item) javaObjectToXPath(o, context, expandChars, expression)); + } + return seq; + } - Sequence seq = createNodeSequence ? new AVLTreeNodeSet() : new ValueSequence(); - for (Object o : ((List) obj)) { - seq.add((Item) javaObjectToXPath(o, context, expandChars, expression)); + case NodeList nodeList -> { + context.pushDocumentContext(); + final DOMStreamer streamer = (DOMStreamer) SerializerPool.getInstance().borrowObject(DOMStreamer.class); + try { + final MemTreeBuilder builder = context.getDocumentBuilder(); + builder.startDocument(); + final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); + streamer.setContentHandler(receiver); + final ValueSequence seq = new ValueSequence(); + final NodeList nl = (NodeList) obj; + int last = builder.getDocument().getLastNode(); + for (int i = 0; i < nl.getLength(); i++) { + final Node n = nl.item(i); + streamer.serialize(n, false); + final NodeImpl created = builder.getDocument().getNode(last + 1); + seq.add(created); + last = builder.getDocument().getLastNode(); + } + return seq; + } catch (final SAXException e) { + throw new XPathException(expression, + "Failed to transform node into internal model: " + + e.getMessage()); + } finally { + context.popDocumentContext(); + SerializerPool.getInstance().returnObject(streamer); + } + } - return seq; + case Object[] array -> { + boolean createNodeSequence = true; + for (Object arrayItem : array) { + if (!(arrayItem instanceof NodeProxy)) { + createNodeSequence = false; + break; + } + } - } else if (obj instanceof NodeList) { - context.pushDocumentContext(); - final DOMStreamer streamer = (DOMStreamer) SerializerPool.getInstance().borrowObject(DOMStreamer.class); - try { - final MemTreeBuilder builder = context.getDocumentBuilder(); - builder.startDocument(); - final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); - streamer.setContentHandler(receiver); - final ValueSequence seq = new ValueSequence(); - final NodeList nl = (NodeList) obj; - int last = builder.getDocument().getLastNode(); - for (int i = 0; i < nl.getLength(); i++) { - final Node n = nl.item(i); - streamer.serialize(n, false); - final NodeImpl created = builder.getDocument().getNode(last + 1); - seq.add(created); - last = builder.getDocument().getLastNode(); + Sequence seq = createNodeSequence ? new AVLTreeNodeSet() : new ValueSequence(); + for (Object arrayItem : array) { + seq.add((Item) javaObjectToXPath(arrayItem, context, expandChars, expression)); } return seq; - } catch (final SAXException e) { - throw new XPathException(expression, - "Failed to transform node into internal model: " - + e.getMessage()); - } finally { - context.popDocumentContext(); - SerializerPool.getInstance().returnObject(streamer); - } - } else if (obj instanceof Object[] array) { - boolean createNodeSequence = true; - for (Object arrayItem : array) { - if (!(arrayItem instanceof NodeProxy)) { - createNodeSequence = false; - break; - } } - - Sequence seq = createNodeSequence ? new AVLTreeNodeSet() : new ValueSequence(); - for (Object arrayItem : array) { - seq.add((Item) javaObjectToXPath(arrayItem, context, expandChars, expression)); + default -> { + return new JavaObjectValue(obj); } - return seq; - - } else { - return new JavaObjectValue(obj); } } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java b/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java index 75569f38377..1466fe2f6e6 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java @@ -145,42 +145,20 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathExce double calcValue = 0; final String functionName = getSignature().getName().getLocalPart(); - if (ACOS.equals(functionName)) { - calcValue = Math.acos(value.getDouble()); - - } else if (ASIN.equals(functionName)) { - calcValue = Math.asin(value.getDouble()); - - } else if (ATAN.equals(functionName)) { - calcValue = Math.atan(value.getDouble()); - - } else if (COS.equals(functionName)) { - calcValue = Math.cos(value.getDouble()); - - } else if (EXP.equals(functionName)) { - calcValue = Math.exp(value.getDouble()); - - } else if (EXP10.equals(functionName)) { - calcValue = Math.pow(10.0d, value.getDouble()); - - } else if (LOG.equals(functionName)) { - calcValue = Math.log(value.getDouble()); - - } else if (LOG10.equals(functionName)) { - calcValue = Math.log10(value.getDouble()); - - } else if (SIN.equals(functionName)) { - calcValue = Math.sin(value.getDouble()); - - } else if (SQRT.equals(functionName)) { - calcValue = Math.sqrt(value.getDouble()); - - } else if (TAN.equals(functionName)) { - calcValue = Math.tan(value.getDouble()); - - } else { - throw new XPathException(this, ERROR, "Function " + functionName + " not found."); - } + calcValue = switch (functionName) { + case ACOS -> Math.acos(value.getDouble()); + case ASIN -> Math.asin(value.getDouble()); + case ATAN -> Math.atan(value.getDouble()); + case COS -> Math.cos(value.getDouble()); + case EXP -> Math.exp(value.getDouble()); + case EXP10 -> Math.pow(10.0d, value.getDouble()); + case LOG -> Math.log(value.getDouble()); + case LOG10 -> Math.log10(value.getDouble()); + case SIN -> Math.sin(value.getDouble()); + case SQRT -> Math.sqrt(value.getDouble()); + case TAN -> Math.tan(value.getDouble()); + case null, default -> throw new XPathException(this, ERROR, "Function " + functionName + " not found."); + }; return new DoubleValue(this, calcValue); } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java b/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java index 4343145309b..1709cc227dc 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java @@ -152,93 +152,102 @@ public ModuleInfo(XQueryContext context, FunctionSignature signature) { @SuppressWarnings("unchecked") public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathException { - - if("get-module-description".equals(getSignature().getName().getLocalPart())) { - final String uri = args[0].getStringValue(); - final Module[] modules = context.getModules(uri); - if (isEmpty(modules)) { - throw new XPathException(this, "No module found matching namespace URI: " + uri); - } - final Sequence result = new ValueSequence(); - for (final Module module : modules) { - result.add(new StringValue(this, module.getDescription())); - } - return result; - } else if ("is-module-registered".equals(getSignature().getName().getLocalPart())) { - final String uri = args[0].getStringValue(); - final Module[] modules = context.getModules(uri); - return new BooleanValue(this, modules != null && modules.length > 0); - } else if ("mapped-modules".equals(getSignature().getName().getLocalPart())) { - final ValueSequence resultSeq = new ValueSequence(); - for (final Iterator i = context.getMappedModuleURIs(); i.hasNext();) { - resultSeq.add(new StringValue(this, i.next())); + + switch (getSignature().getName().getLocalPart()) { + case "get-module-description" -> { + final String uri = args[0].getStringValue(); + final Module[] modules = context.getModules(uri); + if (isEmpty(modules)) { + throw new XPathException(this, "No module found matching namespace URI: " + uri); + } + final Sequence result = new ValueSequence(); + for (final Module module : modules) { + result.add(new StringValue(this, module.getDescription())); + } + return result; } - return resultSeq; - } else if ("is-module-mapped".equals(getSignature().getName().getLocalPart())) { - final String uri = args[0].getStringValue(); - return new BooleanValue(this, ((Map)context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP)).get(uri) != null); - } else if ("map-module".equals(getSignature().getName().getLocalPart())) { - if (!context.getSubject().hasDbaRole()) { - final XPathException xPathException = new XPathException(this, "Permission denied, calling user '" + context.getSubject().getName() + "' must be a DBA to call this function."); - logger.error("Invalid user", xPathException); - throw xPathException; - } - final String namespace = args[0].getStringValue(); - final String location = args[1].getStringValue(); - final Map moduleMap = (Map)context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); - moduleMap.put(namespace, location); - return Sequence.EMPTY_SEQUENCE; - } else if ("unmap-module".equals(getSignature().getName().getLocalPart())) { - if (!context.getSubject().hasDbaRole()) { - final XPathException xPathException = new XPathException(this, "Permission denied, calling user '" + context.getSubject().getName() + "' must be a DBA to call this function."); - logger.error("Invalid user", xPathException); - throw xPathException; - } - final String namespace = args[0].getStringValue(); - final Map moduleMap = (Map)context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); - moduleMap.remove(namespace); - return Sequence.EMPTY_SEQUENCE; - } else if ("get-module-info".equals(getSignature().getName().getLocalPart())) { - context.pushDocumentContext(); - - try { - final MemTreeBuilder builder = context.getDocumentBuilder(); - builder.startElement(MODULES_QNAME, null); - - if (getArgumentCount() == 1) { - final Module[] modules = context.getModules(args[0].getStringValue()); - if (modules != null) { - outputModules(builder, modules); - } - } else { - for(final Iterator i = context.getRootModules(); i.hasNext(); ) { - final Module module = i.next(); - outputModule(builder, module); - } - } - return builder.getDocument().getNode(1); - } finally { - context.popDocumentContext(); - } - } else { - final ValueSequence resultSeq = new ValueSequence(); - final XQueryContext tempContext = new XQueryContext(context.getBroker().getBrokerPool()); - try { - for (final Iterator i = tempContext.getRootModules(); i.hasNext(); ) { - final Module module = i.next(); - resultSeq.add(new StringValue(this, module.getNamespaceURI())); - } - if (tempContext.getRepository().isPresent()) { - for (final URI uri : tempContext.getRepository().get().getJavaModules()) { - resultSeq.add(new StringValue(this, uri.toString())); - } - } - } finally { - tempContext.reset(); - tempContext.runCleanupTasks(); - } - return resultSeq; - } + case "is-module-registered" -> { + final String uri = args[0].getStringValue(); + final Module[] modules = context.getModules(uri); + return new BooleanValue(this, modules != null && modules.length > 0); + } + case "mapped-modules" -> { + final ValueSequence resultSeq = new ValueSequence(); + for (final Iterator i = context.getMappedModuleURIs(); i.hasNext(); ) { + resultSeq.add(new StringValue(this, i.next())); + } + return resultSeq; + } + case "is-module-mapped" -> { + final String uri = args[0].getStringValue(); + return new BooleanValue(this, ((Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP)).get(uri) != null); + } + case "map-module" -> { + if (!context.getSubject().hasDbaRole()) { + final XPathException xPathException = new XPathException(this, "Permission denied, calling user '" + context.getSubject().getName() + "' must be a DBA to call this function."); + logger.error("Invalid user", xPathException); + throw xPathException; + } + final String namespace = args[0].getStringValue(); + final String location = args[1].getStringValue(); + final Map moduleMap = (Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); + moduleMap.put(namespace, location); + return Sequence.EMPTY_SEQUENCE; + } + case "unmap-module" -> { + if (!context.getSubject().hasDbaRole()) { + final XPathException xPathException = new XPathException(this, "Permission denied, calling user '" + context.getSubject().getName() + "' must be a DBA to call this function."); + logger.error("Invalid user", xPathException); + throw xPathException; + } + final String namespace = args[0].getStringValue(); + final Map moduleMap = (Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); + moduleMap.remove(namespace); + return Sequence.EMPTY_SEQUENCE; + } + case "get-module-info" -> { + context.pushDocumentContext(); + + try { + final MemTreeBuilder builder = context.getDocumentBuilder(); + builder.startElement(MODULES_QNAME, null); + + if (getArgumentCount() == 1) { + final Module[] modules = context.getModules(args[0].getStringValue()); + if (modules != null) { + outputModules(builder, modules); + } + } else { + for (final Iterator i = context.getRootModules(); i.hasNext(); ) { + final Module module = i.next(); + outputModule(builder, module); + } + } + return builder.getDocument().getNode(1); + } finally { + context.popDocumentContext(); + } + } + case null, default -> { + final ValueSequence resultSeq = new ValueSequence(); + final XQueryContext tempContext = new XQueryContext(context.getBroker().getBrokerPool()); + try { + for (final Iterator i = tempContext.getRootModules(); i.hasNext(); ) { + final Module module = i.next(); + resultSeq.add(new StringValue(this, module.getNamespaceURI())); + } + if (tempContext.getRepository().isPresent()) { + for (final URI uri : tempContext.getRepository().get().getJavaModules()) { + resultSeq.add(new StringValue(this, uri.toString())); + } + } + } finally { + tempContext.reset(); + tempContext.runCleanupTasks(); + } + return resultSeq; + } + } } private void outputModules(final MemTreeBuilder builder, final Module[] modules) { diff --git a/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java b/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java index b465de5423b..771fc204277 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java +++ b/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java @@ -294,17 +294,19 @@ public boolean isPositive() { @Override protected @Nullable IntSupplier createComparisonWith(final NumericValue other) { final IntSupplier comparison; - if (other instanceof IntegerValue) { - comparison = () -> value.compareTo(new BigDecimal(((IntegerValue)other).value)); - } else if (other instanceof DecimalValue) { - comparison = () -> value.compareTo(((DecimalValue)other).value); - } else if (other instanceof DoubleValue) { - comparison = () -> value.compareTo(BigDecimal.valueOf(((DoubleValue)other).value)); - } else if (other instanceof FloatValue) { - final BigDecimal otherPromoted = new BigDecimal(Float.toString(((FloatValue)other).value)); - comparison = () -> value.compareTo(otherPromoted); - } else { - return null; + switch (other) { + case IntegerValue integerValue -> + comparison = () -> value.compareTo(new BigDecimal(((IntegerValue) other).value)); + case DecimalValue decimalValue -> comparison = () -> value.compareTo(((DecimalValue) other).value); + case DoubleValue doubleValue -> + comparison = () -> value.compareTo(BigDecimal.valueOf(((DoubleValue) other).value)); + case FloatValue floatValue -> { + final BigDecimal otherPromoted = new BigDecimal(Float.toString(floatValue.value)); + comparison = () -> value.compareTo(otherPromoted); + } + case null, default -> { + return null; + } } return comparison; } diff --git a/exist-core/src/main/java/org/exist/xquery/value/FloatValue.java b/exist-core/src/main/java/org/exist/xquery/value/FloatValue.java index 17a59c0714f..6c67124e711 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/FloatValue.java +++ b/exist-core/src/main/java/org/exist/xquery/value/FloatValue.java @@ -69,14 +69,11 @@ public FloatValue(final String stringValue) throws XPathException { public FloatValue(final Expression expression, String stringValue) throws XPathException { super(expression); try { - if ("INF".equals(stringValue)) { - value = Float.POSITIVE_INFINITY; - } else if ("-INF".equals(stringValue)) { - value = Float.NEGATIVE_INFINITY; - } else if ("NaN".equals(stringValue)) { - value = Float.NaN; - } else { - value = Float.parseFloat(stringValue); + switch (stringValue) { + case "INF" -> value = Float.POSITIVE_INFINITY; + case "-INF" -> value = Float.NEGATIVE_INFINITY; + case "NaN" -> value = Float.NaN; + case null, default -> value = Float.parseFloat(stringValue); } } catch (final NumberFormatException e) { throw new XPathException(getExpression(), ErrorCodes.FORG0001, "cannot construct " diff --git a/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java b/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java index 9bfe550fbc9..6131e3d78a1 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java +++ b/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java @@ -262,16 +262,17 @@ public boolean isPositive() { @Override protected @Nullable IntSupplier createComparisonWith(final NumericValue other) { final IntSupplier comparison; - if (other instanceof IntegerValue) { - comparison = () -> value.compareTo(((IntegerValue)other).value); - } else if (other instanceof DecimalValue) { - comparison = () -> new BigDecimal(value).compareTo(((DecimalValue)other).value); - } else if (other instanceof DoubleValue) { - comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((DoubleValue)other).value)); - } else if (other instanceof FloatValue) { - comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((FloatValue)other).value)); - } else { - return null; + switch (other) { + case IntegerValue integerValue -> comparison = () -> value.compareTo(((IntegerValue) other).value); + case DecimalValue decimalValue -> + comparison = () -> new BigDecimal(value).compareTo(((DecimalValue) other).value); + case DoubleValue doubleValue -> + comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((DoubleValue) other).value)); + case FloatValue floatValue -> + comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((FloatValue) other).value)); + case null, default -> { + return null; + } } return comparison; } diff --git a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java index 65d1c610abd..7adfa6347b4 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java +++ b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java @@ -66,17 +66,22 @@ public ItemComparator(@Nullable final Collator collator) { @Override public int compare(final Item n1, final Item n2) { - if (n1 instanceof org.exist.dom.memtree.NodeImpl && (!(n2 instanceof org.exist.dom.memtree.NodeImpl))) { - return Constants.INFERIOR; - } else if (n1 instanceof AtomicValue && n2 instanceof AtomicValue) { - if (atomicValueComparator == null) { - atomicValueComparator = new AtomicValueComparator(collator); + switch (n1) { + case org.exist.dom.memtree.NodeImpl node when (!(n2 instanceof org.exist.dom.memtree.NodeImpl)) -> { + return Constants.INFERIOR; + } + case AtomicValue atomicValue when n2 instanceof AtomicValue -> { + if (atomicValueComparator == null) { + atomicValueComparator = new AtomicValueComparator(collator); + } + return atomicValueComparator.compare(atomicValue, (AtomicValue) n2); + } + case Comparable comparable -> { + return comparable.compareTo(n2); + } + case null, default -> { + return Constants.INFERIOR; } - return atomicValueComparator.compare((AtomicValue)n1, (AtomicValue)n2); - } else if (n1 instanceof Comparable) { - return ((Comparable) n1).compareTo(n2); - } else { - return Constants.INFERIOR; } } } diff --git a/exist-start/src/main/java/org/exist/start/Main.java b/exist-start/src/main/java/org/exist/start/Main.java index a9e1a5024aa..59475223b47 100644 --- a/exist-start/src/main/java/org/exist/start/Main.java +++ b/exist-start/src/main/java/org/exist/start/Main.java @@ -174,33 +174,35 @@ public void runEx(String[] args) throws StartException { final String _classname; if (args.length > 0) { - if ("client".equals(args[0])) { - _classname = "org.exist.client.InteractiveClient"; - _mode = "client"; - - } else if ("backup".equals(args[0])) { - _classname = "org.exist.backup.Main"; - _mode = "backup"; - - } else if ("jetty".equals(args[0]) || "standalone".equals(args[0])) { - _classname = "org.exist.jetty.JettyStart"; - _mode = args[0]; - - } else if ("launch".equals(args[0])) { - _classname = "org.exist.launcher.LauncherWrapper"; - _mode = "jetty"; - - } else if ("launcher".equals(args[0])) { - _classname = "org.exist.launcher.LauncherWrapper"; - _mode = "other"; - - } else if ("shutdown".equals(args[0])) { - _classname = "org.exist.jetty.ServerShutdown"; - _mode = "other"; - - } else { - _classname = args[0]; - _mode = "other"; + switch (args[0]) { + case "client" -> { + _classname = "org.exist.client.InteractiveClient"; + _mode = "client"; + } + case "backup" -> { + _classname = "org.exist.backup.Main"; + _mode = "backup"; + } + case "jetty", "standalone" -> { + _classname = "org.exist.jetty.JettyStart"; + _mode = args[0]; + } + case "launch" -> { + _classname = "org.exist.launcher.LauncherWrapper"; + _mode = "jetty"; + } + case "launcher" -> { + _classname = "org.exist.launcher.LauncherWrapper"; + _mode = "other"; + } + case "shutdown" -> { + _classname = "org.exist.jetty.ServerShutdown"; + _mode = "other"; + } + case null, default -> { + _classname = args[0]; + _mode = "other"; + } } final String[] nargs = new String[args.length - 1]; diff --git a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/xquery/RegistryFunctions.java b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/xquery/RegistryFunctions.java index 68378203717..c34f9d52c8a 100644 --- a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/xquery/RegistryFunctions.java +++ b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/xquery/RegistryFunctions.java @@ -214,17 +214,16 @@ private static void serializeAnnotations(final MemTreeBuilder builder, final Res static void serializeSerializationAnnotation(final MemTreeBuilder builder, final SerializationAnnotation serializationAnnotation) { builder.startElement(QName.fromJavaQName(serializationAnnotation.getName()), null); - if(serializationAnnotation instanceof AbstractYesNoSerializationAnnotation) { - builder.characters(((AbstractYesNoSerializationAnnotation) serializationAnnotation).getStringValue()); - - } else if(serializationAnnotation instanceof org.exquery.serialization.annotation.MediaTypeAnnotation) { - builder.characters(((org.exquery.serialization.annotation.MediaTypeAnnotation) serializationAnnotation).getValue()); - - } else if(serializationAnnotation instanceof org.exquery.serialization.annotation.EncodingAnnotation) { - builder.characters(((org.exquery.serialization.annotation.EncodingAnnotation) serializationAnnotation).getValue()); - - } else if(serializationAnnotation instanceof MethodAnnotation) { - builder.characters(((org.exquery.serialization.annotation.MethodAnnotation) serializationAnnotation).getMethod()); + switch (serializationAnnotation) { + case AbstractYesNoSerializationAnnotation abstractYesNoSerializationAnnotation -> + builder.characters(abstractYesNoSerializationAnnotation.getStringValue()); + case org.exquery.serialization.annotation.MediaTypeAnnotation mediaTypeAnnotation -> + builder.characters(mediaTypeAnnotation.getValue()); + case org.exquery.serialization.annotation.EncodingAnnotation encodingAnnotation -> + builder.characters(encodingAnnotation.getValue()); + case MethodAnnotation methodAnnotation -> builder.characters(methodAnnotation.getMethod()); + default -> { + } } //TODO further output: annotations as they are implemented diff --git a/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/LuceneUtil.java b/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/LuceneUtil.java index 14a13967006..a5810757798 100644 --- a/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/LuceneUtil.java +++ b/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/LuceneUtil.java @@ -142,34 +142,29 @@ public static String[] extractFields(final Query query, final IndexReader reader * @throws UnsupportedOperationException if the query type is not supported */ public static void extractTerms(final Query query, final Map terms, final IndexReader reader, final boolean includeFields) throws IOException, UnsupportedOperationException { - if (query instanceof BooleanQuery) { - extractTermsFromBoolean((BooleanQuery) query, terms, reader, includeFields); - } else if (query instanceof TermQuery) { - extractTermsFromTerm((TermQuery) query, terms, includeFields); - } else if (query instanceof WildcardQuery) { - extractTermsFromWildcard((WildcardQuery) query, terms, reader, includeFields); - } else if (query instanceof RegexpQuery) { - extractTermsFromRegex((RegexpQuery) query, terms, reader, includeFields); - } else if (query instanceof FuzzyQuery) { - extractTermsFromFuzzy((FuzzyQuery) query, terms, reader, includeFields); - } else if (query instanceof PrefixQuery) { - extractTermsFromPrefix((PrefixQuery) query, terms, reader, includeFields); - } else if (query instanceof PhraseQuery) { - extractTermsFromPhrase((PhraseQuery) query, terms, includeFields); - } else if (query instanceof TermRangeQuery) { - extractTermsFromTermRange((TermRangeQuery) query, terms, reader, includeFields); - } else if (query instanceof DrillDownQuery) { - extractTermsFromDrillDown((DrillDownQuery) query, terms, reader, includeFields); - } else { - // fallback to Lucene's Query.extractTerms if none of the - // above matches - final Set tempSet = new TreeSet<>(); - query.extractTerms(tempSet); - for (final Term t : tempSet) { - if (includeFields) { - terms.put(t, query); - } else { - terms.put(t.text(), query); + switch (query) { + case BooleanQuery booleanClauses -> extractTermsFromBoolean(booleanClauses, terms, reader, includeFields); + case TermQuery termQuery -> extractTermsFromTerm(termQuery, terms, includeFields); + case WildcardQuery wildcardQuery -> extractTermsFromWildcard(wildcardQuery, terms, reader, includeFields); + case RegexpQuery regexpQuery -> extractTermsFromRegex(regexpQuery, terms, reader, includeFields); + case FuzzyQuery fuzzyQuery -> extractTermsFromFuzzy(fuzzyQuery, terms, reader, includeFields); + case PrefixQuery prefixQuery -> extractTermsFromPrefix(prefixQuery, terms, reader, includeFields); + case PhraseQuery phraseQuery -> extractTermsFromPhrase(phraseQuery, terms, includeFields); + case TermRangeQuery termRangeQuery -> + extractTermsFromTermRange(termRangeQuery, terms, reader, includeFields); + case DrillDownQuery drillDownQuery -> + extractTermsFromDrillDown(drillDownQuery, terms, reader, includeFields); + case null, default -> { + // fallback to Lucene's Query.extractTerms if none of the + // above matches + final Set tempSet = new TreeSet<>(); + query.extractTerms(tempSet); + for (final Term t : tempSet) { + if (includeFields) { + terms.put(t, query); + } else { + terms.put(t.text(), query); + } } } } diff --git a/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexRangeIndexConfigElement.java b/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexRangeIndexConfigElement.java index 243b76ab0be..133d77ccb08 100644 --- a/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexRangeIndexConfigElement.java +++ b/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexRangeIndexConfigElement.java @@ -63,15 +63,16 @@ public ComplexRangeIndexConfigElement(final Element node, final NodeList childre for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) { - if (FIELD_ELEMENT.equals(child.getLocalName())) { - RangeIndexConfigField field = new RangeIndexConfigField(path, (Element) child, namespaces); - fields.put(field.getName(), field); - } else if (CONDITION_ELEMENT.equals(child.getLocalName())){ - conditions.add(new RangeIndexConfigAttributeCondition((Element) child, path)); - } else if (FILTER_ELEMENT.equals(child.getLocalName())) { - analyzer.addFilter((Element) child); - } else { - LOG.warn("Invalid element encountered for range index configuration: {}", child.getLocalName()); + switch (child.getLocalName()) { + case FIELD_ELEMENT -> { + RangeIndexConfigField field = new RangeIndexConfigField(path, (Element) child, namespaces); + fields.put(field.getName(), field); + } + case CONDITION_ELEMENT -> + conditions.add(new RangeIndexConfigAttributeCondition((Element) child, path)); + case FILTER_ELEMENT -> analyzer.addFilter((Element) child); + case null, default -> + LOG.warn("Invalid element encountered for range index configuration: {}", child.getLocalName()); } } } From 4e843be2ff8b35d65f9f5753d30ec800fc968224 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:24:18 +0100 Subject: [PATCH 07/14] [refactor] Java11: Use Files.read/writeString --- exist-core/src/main/java/org/exist/source/FileSource.java | 2 +- exist-core/src/main/java/org/exist/storage/NativeBroker.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exist-core/src/main/java/org/exist/source/FileSource.java b/exist-core/src/main/java/org/exist/source/FileSource.java index 6241a568712..60569646012 100644 --- a/exist-core/src/main/java/org/exist/source/FileSource.java +++ b/exist-core/src/main/java/org/exist/source/FileSource.java @@ -103,7 +103,7 @@ public InputStream getInputStream() throws IOException { @Override public String getContent() throws IOException { checkEncoding(); - return new String(Files.readAllBytes(path), encoding); + return Files.readString(path, encoding); } @Override diff --git a/exist-core/src/main/java/org/exist/storage/NativeBroker.java b/exist-core/src/main/java/org/exist/storage/NativeBroker.java index 0ae299b738b..d1476287645 100644 --- a/exist-core/src/main/java/org/exist/storage/NativeBroker.java +++ b/exist-core/src/main/java/org/exist/storage/NativeBroker.java @@ -722,7 +722,7 @@ private XmldbURI prepend(final XmldbURI uri) { .map(h -> h.resolve("etc").resolve(INIT_COLLECTION_CONFIG)) .orElse(Paths.get("etc").resolve(INIT_COLLECTION_CONFIG)); if (Files.exists(fInitCollectionConfig)) { - return new String(Files.readAllBytes(fInitCollectionConfig), UTF_8); + return Files.readString(fInitCollectionConfig); } // 2) fallback to attempting to load from classpath From f87d34777d702c71e25de6b4547f50c81ff2c320 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:35:15 +0100 Subject: [PATCH 08/14] [refactor] Java16: Use pattern Variable --- .../main/java/org/exist/config/Configurator.java | 3 +-- .../org/exist/dom/persistent/DocumentImpl.java | 3 +-- .../src/main/java/org/exist/jetty/JettyStart.java | 6 ++---- .../org/exist/security/internal/AccountImpl.java | 6 ++---- .../src/main/java/org/exist/util/XMLString.java | 3 +-- .../java/org/exist/xmldb/LocalXMLResource.java | 14 +++++--------- .../main/java/org/exist/xquery/LocationStep.java | 3 +-- .../org/exist/xquery/PerformanceStatsImpl.java | 4 +--- 8 files changed, 14 insertions(+), 28 deletions(-) diff --git a/exist-core/src/main/java/org/exist/config/Configurator.java b/exist-core/src/main/java/org/exist/config/Configurator.java index d981239f7d5..c2570869fa8 100644 --- a/exist-core/src/main/java/org/exist/config/Configurator.java +++ b/exist-core/src/main/java/org/exist/config/Configurator.java @@ -229,8 +229,7 @@ public static Configuration configure(final Configurable instance, final Configu //XXX: throw new ConfigurationException("No configuration [" + configName + "]"); } - if (config instanceof ConfigurationImpl) { - final ConfigurationImpl impl = (ConfigurationImpl) config; + if (config instanceof ConfigurationImpl impl) { //XXX: lock issue here, fix it Configurable configurable = null; if (impl.configuredObjectReference != null) { diff --git a/exist-core/src/main/java/org/exist/dom/persistent/DocumentImpl.java b/exist-core/src/main/java/org/exist/dom/persistent/DocumentImpl.java index be759097782..b09099dbfb4 100644 --- a/exist-core/src/main/java/org/exist/dom/persistent/DocumentImpl.java +++ b/exist-core/src/main/java/org/exist/dom/persistent/DocumentImpl.java @@ -948,10 +948,9 @@ public int compareTo(@EnsureLocked(mode=READ_LOCK) final DocumentImpl other) { @Override public IStoredNode updateChild(final Txn transaction, final Node oldChild, final Node newChild) throws DOMException { - if(!(oldChild instanceof StoredNode)) { + if(!(oldChild instanceof IStoredNode oldNode)) { throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Node does not belong to this document"); } - final IStoredNode oldNode = (IStoredNode) oldChild; final IStoredNode newNode = (IStoredNode) newChild; final IStoredNode previousNode = (IStoredNode) oldNode.getPreviousSibling(); if(previousNode == null) { diff --git a/exist-core/src/main/java/org/exist/jetty/JettyStart.java b/exist-core/src/main/java/org/exist/jetty/JettyStart.java index 9fb029c0b21..4a297769d08 100644 --- a/exist-core/src/main/java/org/exist/jetty/JettyStart.java +++ b/exist-core/src/main/java/org/exist/jetty/JettyStart.java @@ -320,13 +320,11 @@ public synchronized void run(final String[] args, final Observer observer) { final LinkedHashSet handlers = getAllHandlers(server.getHandler()); for (final Handler handler: handlers) { - if (handler instanceof ContextHandler) { - final ContextHandler contextHandler = (ContextHandler) handler; + if (handler instanceof ContextHandler contextHandler) { logger.info("{} ({})", contextHandler.getContextPath(), contextHandler.getDisplayName()); } - if (handler instanceof ServletContextHandler) { - final ServletContextHandler contextHandler = (ServletContextHandler) handler; + if (handler instanceof ServletContextHandler contextHandler) { final ServiceLoader services = ServiceLoader.load(ExistExtensionServlet.class); for (ExistExtensionServlet existExtensionServlet : services) { diff --git a/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java b/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java index 8c1507235d7..b9e107b1d5b 100644 --- a/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java +++ b/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java @@ -172,8 +172,7 @@ private void instantiate(final Account from_user) throws PermissionDeniedExcepti //copy umask setUserMask(from_user.getUserMask()); - if(from_user instanceof AccountImpl) { - final AccountImpl user = (AccountImpl) from_user; + if(from_user instanceof AccountImpl user) { groups = new ArrayList<>(user.groups); @@ -183,8 +182,7 @@ private void instantiate(final Account from_user) throws PermissionDeniedExcepti hasDbaRole = user.hasDbaRole; _cred = user._cred; - } else if(from_user instanceof UserAider) { - final UserAider user = (UserAider) from_user; + } else if(from_user instanceof UserAider user) { final String[] groups = user.getGroups(); for (final String group : groups) { diff --git a/exist-core/src/main/java/org/exist/util/XMLString.java b/exist-core/src/main/java/org/exist/util/XMLString.java index b65fe7d79b5..caac304299a 100644 --- a/exist-core/src/main/java/org/exist/util/XMLString.java +++ b/exist-core/src/main/java/org/exist/util/XMLString.java @@ -332,8 +332,7 @@ public boolean equals(final Object anObject) { if (this == anObject) { return true; } - if (anObject instanceof XMLString) { - final XMLString anotherString = (XMLString) anObject; + if (anObject instanceof XMLString anotherString) { if (length_ == anotherString.length_) { int n = length_; final char[] v1 = value_; diff --git a/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java b/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java index 6c19528e9b9..e65ef8489dc 100644 --- a/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/LocalXMLResource.java @@ -397,22 +397,18 @@ public Object invoke(final Object proxy, final Method method, final Object[] arg */ Object domResult = null; if(method.getName().equals("equals") - && proxy instanceof StoredNodeIdentity - && args.length == 1 && args[0] instanceof StoredNodeIdentity) { - final StoredNodeIdentity ni1 = ((StoredNodeIdentity) proxy); - final StoredNodeIdentity ni2 = ((StoredNodeIdentity) args[0]); + && proxy instanceof StoredNodeIdentity ni1 + && args.length == 1 && args[0] instanceof StoredNodeIdentity ni2) { final Optional niEquals = ni1.getNodeId().flatMap(n1id -> ni2.getNodeId().map(n1id::equals)); if (niEquals.isPresent()) { domResult = niEquals.get(); } } else if(method.getName().equals("equals") - && proxy instanceof MemtreeNodeIdentity - && args.length == 1 && args[0] instanceof MemtreeNodeIdentity) { - final MemtreeNodeIdentity ni1 = ((MemtreeNodeIdentity) proxy); - final MemtreeNodeIdentity ni2 = ((MemtreeNodeIdentity) args[0]); + && proxy instanceof MemtreeNodeIdentity ni1 + && args.length == 1 && args[0] instanceof MemtreeNodeIdentity ni2) { - final Optional niEquals = ni1.getNodeId().flatMap(n1id -> ni2.getNodeId().map(n2id -> n1id._1 == n2id._1 && n1id._2 == n2id._2 && n1id._3 == n2id._3)); + final Optional niEquals = ni1.getNodeId().flatMap(n1id -> ni2.getNodeId().map(n2id -> n1id._1 == n2id._1 && n1id._2 == n2id._2 && n1id._3 == n2id._3)); if (niEquals.isPresent()) { domResult = niEquals.get(); } diff --git a/exist-core/src/main/java/org/exist/xquery/LocationStep.java b/exist-core/src/main/java/org/exist/xquery/LocationStep.java index b16f78b3a49..bdf5c3afb82 100644 --- a/exist-core/src/main/java/org/exist/xquery/LocationStep.java +++ b/exist-core/src/main/java/org/exist/xquery/LocationStep.java @@ -287,8 +287,7 @@ public void analyze(final AnalyzeContextInfo contextInfo) throws XPathException // case Constants.DESCENDANT_AXIS: case Constants.DESCENDANT_SELF_AXIS: final Expression contextStep = contextInfo.getContextStep(); - if (contextStep instanceof LocationStep) { - final LocationStep cStep = (LocationStep) contextStep; + if (contextStep instanceof LocationStep cStep) { if (( cStep.getTest().getType() == Type.ATTRIBUTE || diff --git a/exist-core/src/main/java/org/exist/xquery/PerformanceStatsImpl.java b/exist-core/src/main/java/org/exist/xquery/PerformanceStatsImpl.java index caa988390c0..1aec8917cdf 100644 --- a/exist-core/src/main/java/org/exist/xquery/PerformanceStatsImpl.java +++ b/exist-core/src/main/java/org/exist/xquery/PerformanceStatsImpl.java @@ -295,12 +295,10 @@ public void recordAll(final PerformanceStats otherPerformanceStats) { return; } - if (!(otherPerformanceStats instanceof PerformanceStatsImpl)) { + if (!(otherPerformanceStats instanceof PerformanceStatsImpl other)) { throw new IllegalArgumentException("Argument must be of type: " + getClass().getName()); } - final PerformanceStatsImpl other = (PerformanceStatsImpl) otherPerformanceStats; - for (final QueryStats otherQueryStats : other.queries.values()) { final QueryStats copy = QueryStats.copy(otherQueryStats); @Nullable final QueryStats mine = queries.get(copy.source); From 654f237e1eab8ab3d0e44eaf0a90b3d53e4d1b43 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Wed, 5 Mar 2025 21:37:13 +0100 Subject: [PATCH 09/14] [refactor] Java21: Use SequencedCollection (readability) --- .../org/exist/client/InteractiveClient.java | 2 +- .../triggers/CSVExtractingTrigger.java | 4 +-- .../collections/triggers/HistoryTrigger.java | 2 +- .../triggers/STXTransformerTrigger.java | 2 +- .../collections/triggers/XQueryTrigger.java | 6 ++--- .../org/exist/config/ConfigurationImpl.java | 2 +- .../java/org/exist/dom/persistent/Match.java | 4 +-- .../http/servlets/HttpRequestWrapper.java | 2 +- .../servlets/HttpServletRequestWrapper.java | 2 +- .../http/urlrewrite/XQueryURLRewrite.java | 2 +- .../main/java/org/exist/jetty/JettyStart.java | 2 +- .../org/exist/management/client/JMXtoXML.java | 2 +- .../org/exist/management/impl/JMXAgent.java | 2 +- .../URLStreamHandlerStartupTrigger.java | 2 +- .../org/exist/repo/AutoDeploymentTrigger.java | 2 +- .../org/exist/security/AbstractAccount.java | 2 +- .../storage/lock/EnsureLockingAspect.java | 2 +- .../storage/lock/LockEventLogListener.java | 2 +- .../org/exist/storage/lock/LockTable.java | 6 ++--- .../exist/storage/lock/LockedDocumentMap.java | 6 ++--- .../java/org/exist/util/Configuration.java | 2 +- .../main/java/org/exist/util/MimeTable.java | 2 +- .../org/exist/xmldb/LocalResourceSet.java | 2 +- .../java/org/exist/xmlrpc/ACEAiderParser.java | 2 +- .../exist/xquery/AttributeConstructor.java | 2 +- .../main/java/org/exist/xquery/BinaryOp.java | 2 +- .../java/org/exist/xquery/CastExpression.java | 2 +- .../org/exist/xquery/FilteredExpression.java | 2 +- .../org/exist/xquery/FunctionFactory.java | 2 +- .../org/exist/xquery/GeneralComparison.java | 2 +- .../main/java/org/exist/xquery/JavaCall.java | 2 +- .../main/java/org/exist/xquery/PathExpr.java | 26 +++++++++---------- .../org/exist/xquery/TryCatchExpression.java | 2 +- .../functions/array/ArrayConstructor.java | 2 +- .../exist/xquery/functions/fn/FunMatches.java | 2 +- .../exist/xquery/functions/fn/FunPath.java | 2 +- .../xquery/functions/fn/FunXmlToJson.java | 2 +- .../functions/fn/transform/Options.java | 2 +- .../functions/fn/transform/TreeUtils.java | 4 +-- .../integer/DigitsIntegerPicture.java | 6 ++--- .../functions/integer/IntegerPicture.java | 2 +- .../xquery/functions/map/MapFunction.java | 2 +- .../functions/util/QNameIndexLookup.java | 2 +- .../xquery/functions/util/UtilModule.java | 2 +- .../xquery/functions/xmldb/XMLDBModule.java | 2 +- .../main/java/org/exist/start/Classpath.java | 2 +- .../org/exist/start/LatestFileResolver.java | 2 +- .../exist/exiftool/xquery/ExiftoolModule.java | 4 +-- .../indexing/lucene/PlainTextHighlighter.java | 4 +-- .../exist/xquery/modules/lucene/Query.java | 4 +-- .../xquery/modules/ngram/NGramSearch.java | 12 ++++----- .../query/WildcardedExpressionSequence.java | 24 ++++++++--------- .../indexing/range/ComplexTextCollector.java | 4 +-- .../xquery/modules/range/FieldLookup.java | 2 +- .../exist/xquery/modules/range/Lookup.java | 4 +-- .../modules/range/RangeQueryRewriter.java | 2 +- .../xquery/modules/cache/CacheModule.java | 2 +- .../exist/xquery/modules/process/Execute.java | 6 ++--- .../exist/xquery/modules/sql/SQLModule.java | 4 +-- .../xquery/modules/xslfo/XSLFOModule.java | 2 +- .../exist/security/realm/ldap/LDAPRealm.java | 2 +- 61 files changed, 108 insertions(+), 108 deletions(-) diff --git a/exist-core/src/main/java/org/exist/client/InteractiveClient.java b/exist-core/src/main/java/org/exist/client/InteractiveClient.java index 7511b01fe6b..2d1f1303106 100644 --- a/exist-core/src/main/java/org/exist/client/InteractiveClient.java +++ b/exist-core/src/main/java/org/exist/client/InteractiveClient.java @@ -1943,7 +1943,7 @@ private boolean processCommandLineActions() throws IOException { } else if (options.xpath.isPresent() || !options.queryFiles.isEmpty()) { String xpath = null; if (!options.queryFiles.isEmpty()) { - try (final BufferedReader reader = Files.newBufferedReader(options.queryFiles.get(0))) { + try (final BufferedReader reader = Files.newBufferedReader(options.queryFiles.getFirst())) { final StringBuilder buf = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { diff --git a/exist-core/src/main/java/org/exist/collections/triggers/CSVExtractingTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/CSVExtractingTrigger.java index 3f30dc1c727..f3196e602c9 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/CSVExtractingTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/CSVExtractingTrigger.java @@ -104,7 +104,7 @@ public void configure(final DBBroker broker, final Txn transaction, final Collec if(separators == null || separators.size() != 1) { throw new TriggerException("A separator parameter must be provided to the CSVExtractingTrigger configuration"); } else { - this.separator = separators.get(0); + this.separator = separators.getFirst(); } //get the extractions @@ -112,7 +112,7 @@ public void configure(final DBBroker broker, final Txn transaction, final Collec for(final Map path : paths){ final List xpaths = path.get("xpath"); if(xpaths != null && xpaths.size() == 1) { - String xpath = xpaths.get(0); + String xpath = xpaths.getFirst(); //split out the path and preficate (if present) from the xpath String pathExpr; diff --git a/exist-core/src/main/java/org/exist/collections/triggers/HistoryTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/HistoryTrigger.java index 2621e956d61..108bb567839 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/HistoryTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/HistoryTrigger.java @@ -81,7 +81,7 @@ public void configure(final DBBroker broker, final Txn transaction, final Collec if(parameters.containsKey(PARAM_ROOT_NAME)) { try { - rootPath = XmldbURI.xmldbUriFor(parameters.get(PARAM_ROOT_NAME).get(0).toString()); + rootPath = XmldbURI.xmldbUriFor(parameters.get(PARAM_ROOT_NAME).getFirst().toString()); } catch(final URISyntaxException e) { throw new TriggerException(e); } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/STXTransformerTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/STXTransformerTrigger.java index 8cb2c67a63b..cde3f9e5d7e 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/STXTransformerTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/STXTransformerTrigger.java @@ -63,7 +63,7 @@ public class STXTransformerTrigger extends SAXTrigger implements DocumentTrigger @Override public void configure(DBBroker broker, Txn transaction, Collection parent, Map> parameters) throws TriggerException { super.configure(broker, transaction, parent, parameters); - final String stylesheet = (String)parameters.get("src").get(0); + final String stylesheet = (String)parameters.get("src").getFirst(); if(stylesheet == null) { throw new TriggerException("STXTransformerTrigger requires an attribute 'src'"); } diff --git a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java index 99e81ec2ef9..2e4bd8c2328 100644 --- a/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java +++ b/exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java @@ -134,14 +134,14 @@ public void configure(final DBBroker broker, final Txn transaction, final Collec } final List urlQueries = (List) parameters.get("url"); - this.urlQuery = urlQueries != null ? urlQueries.get(0) : null; + this.urlQuery = urlQueries != null ? urlQueries.getFirst() : null; final List strQueries = (List) parameters.get("query"); - this.strQuery = strQueries != null ? strQueries.get(0) : null; + this.strQuery = strQueries != null ? strQueries.getFirst() : null; for (final Map.Entry> entry : parameters.entrySet()) { final String paramName = entry.getKey(); - final Object paramValue = entry.getValue().get(0); + final Object paramValue = entry.getValue().getFirst(); //get the binding prefix (if any) switch (paramName) { diff --git a/exist-core/src/main/java/org/exist/config/ConfigurationImpl.java b/exist-core/src/main/java/org/exist/config/ConfigurationImpl.java index e577dbd3eeb..15b815084a7 100644 --- a/exist-core/src/main/java/org/exist/config/ConfigurationImpl.java +++ b/exist-core/src/main/java/org/exist/config/ConfigurationImpl.java @@ -81,7 +81,7 @@ public Configuration getConfiguration(String name) { if (list == null) {return null;} if (list.size() > 0) - {return list.get(0);} + {return list.getFirst();} return null; } diff --git a/exist-core/src/main/java/org/exist/dom/persistent/Match.java b/exist-core/src/main/java/org/exist/dom/persistent/Match.java index 08d83224a20..f66f497dd1a 100644 --- a/exist-core/src/main/java/org/exist/dom/persistent/Match.java +++ b/exist-core/src/main/java/org/exist/dom/persistent/Match.java @@ -202,7 +202,7 @@ public Match continuedBy(final Match other) { return null; } - final int wildCardSize = newMatchOffsets.get(0).length - matchTerm.length() - other.matchTerm.length(); + final int wildCardSize = newMatchOffsets.getFirst().length - matchTerm.length() - other.matchTerm.length(); final StringBuilder matched = new StringBuilder(matchTerm); for (int ii = 0; ii < wildCardSize; ii++) { matched.append('?'); @@ -319,7 +319,7 @@ public Match filterOutOverlappingOffsets() { } }); final List nonOverlappingMatchOffsets = new LinkedList<>(); - nonOverlappingMatchOffsets.add(newMatchOffsets.remove(0)); + nonOverlappingMatchOffsets.add(newMatchOffsets.removeFirst()); for (final Offset o : newMatchOffsets) { boolean overlapsExistingOffset = false; for (final Offset eo : nonOverlappingMatchOffsets) { diff --git a/exist-core/src/main/java/org/exist/http/servlets/HttpRequestWrapper.java b/exist-core/src/main/java/org/exist/http/servlets/HttpRequestWrapper.java index 9499ebd355f..55e5107b79e 100644 --- a/exist-core/src/main/java/org/exist/http/servlets/HttpRequestWrapper.java +++ b/exist-core/src/main/java/org/exist/http/servlets/HttpRequestWrapper.java @@ -494,7 +494,7 @@ public String getParameter(final String name) { // If Parameter is a List, get first entry. The data is used later on if (o instanceof List lst) { - o = lst.get(0); + o = lst.getFirst(); } // If parameter is file item, convert to string diff --git a/exist-core/src/main/java/org/exist/http/servlets/HttpServletRequestWrapper.java b/exist-core/src/main/java/org/exist/http/servlets/HttpServletRequestWrapper.java index 3b32cd3d0f7..5d3e437d4a0 100644 --- a/exist-core/src/main/java/org/exist/http/servlets/HttpServletRequestWrapper.java +++ b/exist-core/src/main/java/org/exist/http/servlets/HttpServletRequestWrapper.java @@ -200,7 +200,7 @@ public String getParameter(final String name) { final List vecParameterValues = params.get(name); //return the first value in the vector - return vecParameterValues.get(0).getValue(); + return vecParameterValues.getFirst().getValue(); } else { return null; } diff --git a/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java b/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java index a2de9ca2543..e5f1575651d 100644 --- a/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java +++ b/exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java @@ -1198,7 +1198,7 @@ public void addParameter(final String name, final String value) { public String getParameter(final String name) { final List paramValues = addedParams.get(name); if (paramValues != null && paramValues.size() > 0) { - return paramValues.get(0); + return paramValues.getFirst(); } return null; } diff --git a/exist-core/src/main/java/org/exist/jetty/JettyStart.java b/exist-core/src/main/java/org/exist/jetty/JettyStart.java index 4a297769d08..61e8a4d6565 100644 --- a/exist-core/src/main/java/org/exist/jetty/JettyStart.java +++ b/exist-core/src/main/java/org/exist/jetty/JettyStart.java @@ -307,7 +307,7 @@ public synchronized void run(final String[] args, final Observer observer) { //************************************************************* final List serverUris = getSeverURIs(server); if(!serverUris.isEmpty()) { - this.primaryPort = serverUris.get(0).getPort(); + this.primaryPort = serverUris.getFirst().getPort(); } logger.info("-----------------------------------------------------"); diff --git a/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java b/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java index f9bf3a53539..66acc57f2f6 100644 --- a/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java +++ b/exist-core/src/main/java/org/exist/management/client/JMXtoXML.java @@ -147,7 +147,7 @@ private static void putCategory(final String categoryName, final String... objec public void connect() { final List servers = MBeanServerFactory.findMBeanServer(null); if (servers.size() > 0) { - this.connection = servers.get(0); + this.connection = servers.getFirst(); } } diff --git a/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java b/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java index 29cce832027..6755c2a574c 100755 --- a/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java +++ b/exist-core/src/main/java/org/exist/management/impl/JMXAgent.java @@ -60,7 +60,7 @@ public JMXAgent() { final ArrayList servers = MBeanServerFactory.findMBeanServer(null); if (servers.size() > 0) { - server = servers.get(0); + server = servers.getFirst(); } else { server = MBeanServerFactory.createMBeanServer(); } diff --git a/exist-core/src/main/java/org/exist/protocolhandler/URLStreamHandlerStartupTrigger.java b/exist-core/src/main/java/org/exist/protocolhandler/URLStreamHandlerStartupTrigger.java index 86165f6041c..817755726f5 100644 --- a/exist-core/src/main/java/org/exist/protocolhandler/URLStreamHandlerStartupTrigger.java +++ b/exist-core/src/main/java/org/exist/protocolhandler/URLStreamHandlerStartupTrigger.java @@ -58,7 +58,7 @@ public void execute(final DBBroker sysBroker, final Txn transaction, final Map list = params.get("mode"); if (list != null && list.size() == 1) { - mode = list.get(0).toString(); + mode = list.getFirst().toString(); } } diff --git a/exist-core/src/main/java/org/exist/repo/AutoDeploymentTrigger.java b/exist-core/src/main/java/org/exist/repo/AutoDeploymentTrigger.java index 6f376045cce..33fb14cd8c6 100644 --- a/exist-core/src/main/java/org/exist/repo/AutoDeploymentTrigger.java +++ b/exist-core/src/main/java/org/exist/repo/AutoDeploymentTrigger.java @@ -136,7 +136,7 @@ public void execute(final DBBroker sysBroker, final Txn transaction, final Map T getFirstParamValue(final Map> params, final String paramName, final Function valueConverter) { final List values = params.get(paramName); if (values != null && values.size() > 0) { - final Object value = values.get(0); + final Object value = values.getFirst(); if (value != null) { return valueConverter.apply(value); } diff --git a/exist-core/src/main/java/org/exist/security/AbstractAccount.java b/exist-core/src/main/java/org/exist/security/AbstractAccount.java index 23e15d2f471..4a3bf7c2b56 100644 --- a/exist-core/src/main/java/org/exist/security/AbstractAccount.java +++ b/exist-core/src/main/java/org/exist/security/AbstractAccount.java @@ -283,7 +283,7 @@ public final String getPrimaryGroup() { @Override public Group getDefaultGroup() { if(groups != null && !groups.isEmpty()) { - return groups.get(0); + return groups.getFirst(); } return null; diff --git a/exist-core/src/main/java/org/exist/storage/lock/EnsureLockingAspect.java b/exist-core/src/main/java/org/exist/storage/lock/EnsureLockingAspect.java index af6025cb42b..078a26487e5 100644 --- a/exist-core/src/main/java/org/exist/storage/lock/EnsureLockingAspect.java +++ b/exist-core/src/main/java/org/exist/storage/lock/EnsureLockingAspect.java @@ -817,7 +817,7 @@ private Tuple2 getLockMode(final Lock.LockMode specified } else { final List lockModeArgs = getLockModeArgs(args); if(lockModeArgs.size() == 1) { - mode = new Tuple2<>(lockModeArgs.get(0), true); + mode = new Tuple2<>(lockModeArgs.getFirst(), true); } else if(lockModeArgs.isEmpty()) { throw new IllegalArgumentException("No mode or modeParam was specified on @EnsureLocked and no LockMode parameter was found"); } else { diff --git a/exist-core/src/main/java/org/exist/storage/lock/LockEventLogListener.java b/exist-core/src/main/java/org/exist/storage/lock/LockEventLogListener.java index 9d028ba5a67..350ac00af4e 100644 --- a/exist-core/src/main/java/org/exist/storage/lock/LockEventLogListener.java +++ b/exist-core/src/main/java/org/exist/storage/lock/LockEventLogListener.java @@ -63,7 +63,7 @@ public void accept(final LockTable.LockEventType lockEventType, final long times final int localCount = entry.count; log.log(level, LockTable.formatString(lockEventType, groupId, entry.id, entry.lockType, entry.lockMode, - entry.owner, localCount, timestamp, entry.stackTraces == null ? null : entry.stackTraces.get(0))); + entry.owner, localCount, timestamp, entry.stackTraces == null ? null : entry.stackTraces.getFirst())); } } } diff --git a/exist-core/src/main/java/org/exist/storage/lock/LockTable.java b/exist-core/src/main/java/org/exist/storage/lock/LockTable.java index 6a608c63d8a..05c6f14cb6e 100644 --- a/exist-core/src/main/java/org/exist/storage/lock/LockTable.java +++ b/exist-core/src/main/java/org/exist/storage/lock/LockTable.java @@ -360,7 +360,7 @@ public Entry unmerge(final String id, final LockType lockType, final LockMode lo // do the unmerge bit if (local.stackTraces != null) { - local.stackTraces.remove(local.stackTraces.size() - 1); + local.stackTraces.removeLast(); } local.count = local.count - 1; @@ -391,7 +391,7 @@ public Entry unmerge(final String id, final LockType lockType, final LockMode lo } else { // do the unmerge bit if (local.stackTraces != null) { - local.stackTraces.remove(local.stackTraces.size() - 1); + local.stackTraces.removeLast(); } local.count = local.count - 1; @@ -535,7 +535,7 @@ public Map>> getAttempting() { if (v1 == null) { v1 = new ArrayList<>(); } - v1.add(new LockModeOwner(entry.lockMode, entry.owner, entry.stackTraces != null ? entry.stackTraces.get(0) : null)); + v1.add(new LockModeOwner(entry.lockMode, entry.owner, entry.stackTraces != null ? entry.stackTraces.getFirst() : null)); return v1; }); diff --git a/exist-core/src/main/java/org/exist/storage/lock/LockedDocumentMap.java b/exist-core/src/main/java/org/exist/storage/lock/LockedDocumentMap.java index 69a0d9dd613..de6a509272f 100644 --- a/exist-core/src/main/java/org/exist/storage/lock/LockedDocumentMap.java +++ b/exist-core/src/main/java/org/exist/storage/lock/LockedDocumentMap.java @@ -57,7 +57,7 @@ public void add(final LockedDocument lockedDocument) { public MutableDocumentSet toDocumentSet() { final MutableDocumentSet docs = new DefaultDocumentSet(map.size()); for(final List documentLocks : map.values()) { - docs.add(documentLocks.get(0).getDocument()); + docs.add(documentLocks.getFirst().getDocument()); } return docs; } @@ -68,7 +68,7 @@ public DocumentSet getDocsByCollection(final Collection collection, MutableDocum } for(final List documentLocks : map.values()) { - final DocumentImpl doc = documentLocks.get(0).getDocument(); + final DocumentImpl doc = documentLocks.getFirst().getDocument(); if(doc.getCollection().getURI().startsWith(collection.getURI())) { targetSet.add(doc); } @@ -98,7 +98,7 @@ public LockedDocumentMap unlockSome(final DocumentSet keep) { for(int i = len - 1; i >= 0; i--) { final List documentLocks = documentsLockedDocuments.get(i); - final int docId = documentLocks.get(0).getDocument().getDocId(); + final int docId = documentLocks.getFirst().getDocument().getDocId(); if(!keep.contains(docId)) { for (int j = documentLocks.size() - 1; j >= 0; j--) { final LockedDocument documentLock = documentLocks.get(j); diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index ab0e90814f3..cb7c8b144d6 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -865,7 +865,7 @@ private void addJobToList(final List jobList, final Element job) { for (final Entry> param : params.entrySet()) { final List values = param.getValue(); if (values != null && !values.isEmpty()) { - jobConfig.addParameter(param.getKey(), values.get(0).toString()); + jobConfig.addParameter(param.getKey(), values.getFirst().toString()); if (values.size() > 1) { LOG.warn("Parameter '{}' for job '{}' has more than one value, ignoring further values.", param.getKey(), jobName); diff --git a/exist-core/src/main/java/org/exist/util/MimeTable.java b/exist-core/src/main/java/org/exist/util/MimeTable.java index 938292c9351..9739eef9902 100644 --- a/exist-core/src/main/java/org/exist/util/MimeTable.java +++ b/exist-core/src/main/java/org/exist/util/MimeTable.java @@ -184,7 +184,7 @@ public List getAllExtensions(String mimeType) { final String preferred = preferredExtension.get(mimeType); if(preferred != null && !extns.contains(preferred)) { - extns.add(0, preferred); + extns.addFirst(preferred); } return extns; diff --git a/exist-core/src/main/java/org/exist/xmldb/LocalResourceSet.java b/exist-core/src/main/java/org/exist/xmldb/LocalResourceSet.java index 769e39dcdd2..97370bfd67a 100644 --- a/exist-core/src/main/java/org/exist/xmldb/LocalResourceSet.java +++ b/exist-core/src/main/java/org/exist/xmldb/LocalResourceSet.java @@ -214,7 +214,7 @@ public Sequence toSequence() { if (resources.isEmpty()) { return Sequence.EMPTY_SEQUENCE; } else if (resources.size() == 1) { - return ((Item) resources.get(0)).toSequence(); + return ((Item) resources.getFirst()).toSequence(); } else { final ValueSequence s = new ValueSequence(); for (Object resource : resources) { diff --git a/exist-core/src/main/java/org/exist/xmlrpc/ACEAiderParser.java b/exist-core/src/main/java/org/exist/xmlrpc/ACEAiderParser.java index 4b54dd16e1d..d67494525ea 100644 --- a/exist-core/src/main/java/org/exist/xmlrpc/ACEAiderParser.java +++ b/exist-core/src/main/java/org/exist/xmlrpc/ACEAiderParser.java @@ -133,7 +133,7 @@ private static ACEAider toAceAider(final List list) throws SAXException throw new SAXException("Inavlis list size for ACEAider"); } - Object object = list.get(0); + Object object = list.getFirst(); final ACE_ACCESS_TYPE aceAccessType; if (object instanceof String) { try { diff --git a/exist-core/src/main/java/org/exist/xquery/AttributeConstructor.java b/exist-core/src/main/java/org/exist/xquery/AttributeConstructor.java index 8f7675e538f..64cc95731f8 100644 --- a/exist-core/src/main/java/org/exist/xquery/AttributeConstructor.java +++ b/exist-core/src/main/java/org/exist/xquery/AttributeConstructor.java @@ -124,7 +124,7 @@ private void evalEnclosedExpr(Sequence seq, StringBuilder buf) throws XPathExcep public String getLiteralValue() { if(contents.size() == 0) {return "";} - return (String)contents.get(0); + return (String)contents.getFirst(); } /* (non-Javadoc) diff --git a/exist-core/src/main/java/org/exist/xquery/BinaryOp.java b/exist-core/src/main/java/org/exist/xquery/BinaryOp.java index 6bdbf047a4c..894f9f32ac9 100644 --- a/exist-core/src/main/java/org/exist/xquery/BinaryOp.java +++ b/exist-core/src/main/java/org/exist/xquery/BinaryOp.java @@ -47,7 +47,7 @@ public Expression getRight() { } public void setLeft(Expression expr) { - steps.add(0, expr); + steps.addFirst(expr); } public void setRight(Expression expr) { diff --git a/exist-core/src/main/java/org/exist/xquery/CastExpression.java b/exist-core/src/main/java/org/exist/xquery/CastExpression.java index 68a5f2da53b..8911c5c6144 100644 --- a/exist-core/src/main/java/org/exist/xquery/CastExpression.java +++ b/exist-core/src/main/java/org/exist/xquery/CastExpression.java @@ -199,7 +199,7 @@ protected FunctionWrapper(final CastExpression castExpression, final FunctionSig @Override public void setArguments(final List arguments) { - castExpression.setExpression(arguments.get(0)); + castExpression.setExpression(arguments.getFirst()); } @Override diff --git a/exist-core/src/main/java/org/exist/xquery/FilteredExpression.java b/exist-core/src/main/java/org/exist/xquery/FilteredExpression.java index 00f9b78bacb..cc99b6fad1f 100644 --- a/exist-core/src/main/java/org/exist/xquery/FilteredExpression.java +++ b/exist-core/src/main/java/org/exist/xquery/FilteredExpression.java @@ -103,7 +103,7 @@ public Sequence eval(Sequence contextSequence, final Item contextItem) throws XP if (seq.isEmpty()) { result = Sequence.EMPTY_SEQUENCE; } else { - final Predicate pred = predicates.get(0); + final Predicate pred = predicates.getFirst(); context.setContextSequencePosition(0, seq); // If the current step is an // abbreviated step, we have to treat the predicate // specially to get the context position right. //a[1] translates diff --git a/exist-core/src/main/java/org/exist/xquery/FunctionFactory.java b/exist-core/src/main/java/org/exist/xquery/FunctionFactory.java index 07c9549a95c..adcf7d3d5cb 100644 --- a/exist-core/src/main/java/org/exist/xquery/FunctionFactory.java +++ b/exist-core/src/main/java/org/exist/xquery/FunctionFactory.java @@ -244,7 +244,7 @@ private static CastExpression castExpression(XQueryContext context, throw new XPathException(ast.getLine(), ast.getColumn(), ErrorCodes.XPST0017, "Wrong number of arguments for constructor function"); } - final Expression arg = params.get(0); + final Expression arg = params.getFirst(); final int code = Type.getType(qname); final CastExpression castExpr = new CastExpression(context, arg, code, Cardinality.ZERO_OR_ONE); castExpr.setLocation(ast.getLine(), ast.getColumn()); diff --git a/exist-core/src/main/java/org/exist/xquery/GeneralComparison.java b/exist-core/src/main/java/org/exist/xquery/GeneralComparison.java index d277e81f75f..f0f16a3cfc3 100644 --- a/exist-core/src/main/java/org/exist/xquery/GeneralComparison.java +++ b/exist-core/src/main/java/org/exist/xquery/GeneralComparison.java @@ -191,7 +191,7 @@ public void visitCastExpr( CastExpression expression ) if( !steps.isEmpty() ) { LocationStep firstStep = steps.get( 0 ); - LocationStep lastStep = steps.get( steps.size() - 1 ); + LocationStep lastStep = steps.getLast(); if( firstStep != null && steps.size() == 1 && firstStep.getAxis() == Constants.SELF_AXIS) { final Expression outerExpr = contextInfo.getContextStep(); diff --git a/exist-core/src/main/java/org/exist/xquery/JavaCall.java b/exist-core/src/main/java/org/exist/xquery/JavaCall.java index 25d53e4d4a8..4cea0c82fef 100644 --- a/exist-core/src/main/java/org/exist/xquery/JavaCall.java +++ b/exist-core/src/main/java/org/exist/xquery/JavaCall.java @@ -188,7 +188,7 @@ public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathExc // get the actual arguments final Sequence args[] = getArguments(contextSequence, contextItem); - AccessibleObject bestMethod = candidateMethods.get(0); + AccessibleObject bestMethod = candidateMethods.getFirst(); int conversionPrefs[] = getConversionPreferences(bestMethod, args); for (AccessibleObject nextMethod : candidateMethods) { diff --git a/exist-core/src/main/java/org/exist/xquery/PathExpr.java b/exist-core/src/main/java/org/exist/xquery/PathExpr.java index 27e71d4510b..6f48fdf5600 100644 --- a/exist-core/src/main/java/org/exist/xquery/PathExpr.java +++ b/exist-core/src/main/java/org/exist/xquery/PathExpr.java @@ -95,7 +95,7 @@ public void addPath(final PathExpr path) { */ public void addPredicate(final Predicate predicate) { if (!steps.isEmpty()) { - final Expression e = steps.get(steps.size() - 1); + final Expression e = steps.getLast(); if (e instanceof Step) { ((Step) e).addPredicate(predicate); } @@ -133,7 +133,7 @@ public Expression getPrevious(final Expression current) { @Override public Expression getFirst() { - return steps.isEmpty() ? null : steps.get(0); + return steps.isEmpty() ? null : steps.getFirst(); } @Override @@ -215,7 +215,7 @@ public Sequence eval(Sequence contextSequence, final Item contextItem) throws XP result = contextSequence; Sequence currentContext = contextSequence; DocumentSet contextDocs = null; - Expression expr = steps.get(0); + Expression expr = steps.getFirst(); if (expr instanceof VariableReference) { final Variable var = ((VariableReference) expr).getVariable(new AnalyzeContextInfo(parent, 0)); //TOUNDERSTAND : how null could be possible here ? -pb @@ -372,7 +372,7 @@ public Expression getSubExpression(final int pos) { } public Expression getLastExpression() { - return steps.isEmpty() ? null : steps.get(steps.size() - 1); + return steps.isEmpty() ? null : steps.getLast(); } /** @@ -395,7 +395,7 @@ public int getSubExpressionCount() { @Override public boolean allowMixedNodesInReturn() { if (steps.size() == 1) { - return steps.get(0).allowMixedNodesInReturn(); + return steps.getFirst().allowMixedNodesInReturn(); } return super.allowMixedNodesInReturn(); } @@ -471,7 +471,7 @@ public int returnsType() { //Not so simple. ITEM should be re-tuned in some circumstances that have to be determined return Type.NODE; } - return steps.get(steps.size() - 1).returnsType(); + return steps.getLast().returnsType(); } @Override @@ -479,7 +479,7 @@ public Cardinality getCardinality() { if (steps.size() == 0) { return Cardinality.EMPTY_SEQUENCE; } - return (steps.get(steps.size() - 1)).getCardinality(); + return (steps.getLast()).getCardinality(); } @Override @@ -502,7 +502,7 @@ public String getLiteralValue() { if (steps.size() == 0) { return ""; } - final Expression next = steps.get(0); + final Expression next = steps.getFirst(); if (next instanceof LiteralValue) { try { return ((LiteralValue) next).getValue().getStringValue(); @@ -519,7 +519,7 @@ public String getLiteralValue() { @Override public int getLine() { if (line <= 0 && !steps.isEmpty()) { - return steps.get(0).getLine(); + return steps.getFirst().getLine(); } return line; } @@ -527,7 +527,7 @@ public int getLine() { @Override public int getColumn() { if (column <= 0 && !steps.isEmpty()) { - return steps.get(0).getColumn(); + return steps.getFirst().getColumn(); } return column; } @@ -535,14 +535,14 @@ public int getColumn() { @Override public void setPrimaryAxis(final int axis) { if (steps.size() > 0) { - steps.get(0).setPrimaryAxis(axis); + steps.getFirst().setPrimaryAxis(axis); } } @Override public int getPrimaryAxis() { if (steps.size() > 0) { - return steps.get(0).getPrimaryAxis(); + return steps.getFirst().getPrimaryAxis(); } return Constants.UNKNOWN_AXIS; } @@ -579,7 +579,7 @@ public void setContext(final XQueryContext context) { @Override public Expression simplify() { if (steps.size() == 1) { - return steps.get(0).simplify(); + return steps.getFirst().simplify(); } return this; } diff --git a/exist-core/src/main/java/org/exist/xquery/TryCatchExpression.java b/exist-core/src/main/java/org/exist/xquery/TryCatchExpression.java index 036029b3851..ca9093acd23 100644 --- a/exist-core/src/main/java/org/exist/xquery/TryCatchExpression.java +++ b/exist-core/src/main/java/org/exist/xquery/TryCatchExpression.java @@ -437,7 +437,7 @@ public String toString() { @Override public int returnsType() { // fixme! /ljo - return ((Expression) catchClauses.get(0).getCatchExpr()).returnsType(); + return ((Expression) catchClauses.getFirst().getCatchExpr()).returnsType(); } /* (non-Javadoc) diff --git a/exist-core/src/main/java/org/exist/xquery/functions/array/ArrayConstructor.java b/exist-core/src/main/java/org/exist/xquery/functions/array/ArrayConstructor.java index 48149aebea1..f5d69038fb6 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/array/ArrayConstructor.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/array/ArrayConstructor.java @@ -74,7 +74,7 @@ public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathExc } return new ArrayType(this, context, items); default: - final Sequence result = arguments.isEmpty() ? Sequence.EMPTY_SEQUENCE : arguments.get(0).eval(contextSequence, contextItem); + final Sequence result = arguments.isEmpty() ? Sequence.EMPTY_SEQUENCE : arguments.getFirst().eval(contextSequence, contextItem); return new ArrayType(this, context, result); } } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunMatches.java b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunMatches.java index f0e3ef9d35f..6f06bd772ce 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunMatches.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunMatches.java @@ -149,7 +149,7 @@ public void setArguments(final List arguments) throws XPathException final List steps = BasicExpressionVisitor.findLocationSteps(path); if (!steps.isEmpty()) { final LocationStep firstStep = steps.get(0); - LocationStep lastStep = steps.get(steps.size() - 1); + LocationStep lastStep = steps.getLast(); if (firstStep != null && lastStep != null) { final NodeTest test = lastStep.getTest(); if (!test.isWildcardTest() && test.getName() != null) { diff --git a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunPath.java b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunPath.java index 70539fe9d3a..1596e1d35fc 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunPath.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunPath.java @@ -95,7 +95,7 @@ public Sequence eval(final Sequence[] args, final Sequence contextSequence) thro !((org.exist.dom.memtree.DocumentImpl) node.getOwnerDocument()).isExplicitlyCreated()))) { // This string is prefixed by "Q{http://www.w3.org/2005/xpath-functions}root()" // if the root node is not a document node. - pathValues.remove(0); + pathValues.removeFirst(); result = new StringValue(this, String.format("Q{%s}root()", Namespaces.XPATH_FUNCTIONS_NS) + String.join("", pathValues)); } else { result = new StringValue(this, String.join("", pathValues)); diff --git a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunXmlToJson.java b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunXmlToJson.java index 35b44ab0bff..565f24718f8 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/fn/FunXmlToJson.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/fn/FunXmlToJson.java @@ -168,7 +168,7 @@ private void nodeValueToJson(final NodeValue nodeValue, final Writer writer) thr jsonGenerator.writeBoolean(tempBoolean); break; case "map": - while (!mapkeyArrayList.isEmpty() && mapkeyArrayList.remove(mapkeyArrayList.size() - 1) != stackSeparator) { + while (!mapkeyArrayList.isEmpty() && mapkeyArrayList.removeLast() != stackSeparator) { } jsonGenerator.writeEndObject(); break; diff --git a/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/Options.java b/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/Options.java index 0782409397d..cb4b4a8a8ad 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/Options.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/Options.java @@ -487,7 +487,7 @@ private Tuple2 getStylesheet(final MapType options) throws XPath throw new XPathException(fnTransform, ErrorCodes.FOXT0002, "None of stylesheet-location, stylesheet-node, or stylesheet-text was set"); } - return results.get(0); + return results.getFirst(); } /** diff --git a/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/TreeUtils.java b/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/TreeUtils.java index a23c6e10a25..db1f9a323c2 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/TreeUtils.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/fn/transform/TreeUtils.java @@ -46,7 +46,7 @@ static StringBuilder pathTo(final Node node) { priors.add(prev); prev = prev.getPreviousSibling(); } - final Node parent = priors.get(0).getParentNode(); + final Node parent = priors.getFirst().getParentNode(); final StringBuilder sb; if (parent == null || parent instanceof Document) { sb = new StringBuilder(); @@ -83,7 +83,7 @@ static XdmNode xdmNodeAtIndex(final XdmNode xdmNode, final List index) } else { int i = 0; for (final XdmNode child : xdmNode.children()) { - if (i++ == index.get(0)) { + if (i++ == index.getFirst()) { return xdmNodeAtIndex(child, index.subList(1,index.size())); } } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/integer/DigitsIntegerPicture.java b/exist-core/src/main/java/org/exist/xquery/functions/integer/DigitsIntegerPicture.java index 246eb6ad3ba..a8697e207a2 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/integer/DigitsIntegerPicture.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/integer/DigitsIntegerPicture.java @@ -141,7 +141,7 @@ private void buildGroups() throws XPathException { if (formatParser.end()) { throw new XPathException((Expression) null, ErrorCodes.FODF1310, "Primary format token " + primaryFormatToken + " ends with a separator at " + formatParser.match()); } - group.separator = Optional.of(String.valueOf(Character.toChars(formatParser.matchCodes().get(0)))); + group.separator = Optional.of(String.valueOf(Character.toChars(formatParser.matchCodes().getFirst()))); groups.add(group); } else { groups.add(group); @@ -178,7 +178,7 @@ private void countMandatoryDigits() { */ private void regularizeGroups() { groupsAreRegular = false; - Group prev = groups.get(0); + Group prev = groups.getFirst(); for (int i = 1; i < groups.size(); i++) { final Group group = groups.get(i); @@ -206,7 +206,7 @@ private void regularizeGroups() { */ private Group getGroupFromEnd(final int index) { if (groupsAreRegular) { - return groups.get(0); + return groups.getFirst(); } else if (index < groups.size()) { return groups.get(groups.size() - index - 1); } else { diff --git a/exist-core/src/main/java/org/exist/xquery/functions/integer/IntegerPicture.java b/exist-core/src/main/java/org/exist/xquery/functions/integer/IntegerPicture.java index 61f1954e8fc..4b610762490 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/integer/IntegerPicture.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/integer/IntegerPicture.java @@ -107,7 +107,7 @@ public static IntegerPicture fromString(final String pictureFormat) throws XPath // Rule 9 - sequences // final List codePoints = IntegerPicture.codePoints(primaryFormatToken); - final Optional numberingPicture = NumberingPicture.fromIndexCodePoint(codePoints.get(0), formatModifier); + final Optional numberingPicture = NumberingPicture.fromIndexCodePoint(codePoints.getFirst(), formatModifier); return numberingPicture.orElse(IntegerPicture.defaultPictureWithModifier(formatModifier)); } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/map/MapFunction.java b/exist-core/src/main/java/org/exist/xquery/functions/map/MapFunction.java index a15e77bb5ce..59ce01a9176 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/map/MapFunction.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/map/MapFunction.java @@ -307,7 +307,7 @@ private Sequence merge(final Sequence[] args) throws XPathException { return Sequence.EMPTY_SEQUENCE; }); if (!mergeExceptions.isEmpty()) { - throw mergeExceptions.get(0); + throw mergeExceptions.getFirst(); } return merged; } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/util/QNameIndexLookup.java b/exist-core/src/main/java/org/exist/xquery/functions/util/QNameIndexLookup.java index 67a46513ff6..015763fc7e1 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/util/QNameIndexLookup.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/util/QNameIndexLookup.java @@ -104,7 +104,7 @@ public int getDependencies() { public void setArguments(List arguments) throws XPathException { // wrap arguments into a cardinality check, so an error will be generated if // one of the arguments returns an empty sequence - Expression arg = arguments.get(0); + Expression arg = arguments.getFirst(); arg = new DynamicCardinalityCheck(context, Cardinality.ONE_OR_MORE, arg, new Error(Error.FUNC_PARAM_CARDINALITY, "1", getSignature())); steps.add(arg); diff --git a/exist-core/src/main/java/org/exist/xquery/functions/util/UtilModule.java b/exist-core/src/main/java/org/exist/xquery/functions/util/UtilModule.java index 7400257f01e..b9e49a04b9b 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/util/UtilModule.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/util/UtilModule.java @@ -170,7 +170,7 @@ public UtilModule(final Map> parameters) throws X final List evalDisabledParamList = (List) getParameter("evalDisabled"); if (evalDisabledParamList != null && !evalDisabledParamList.isEmpty()) { - final String strEvalDisabled = evalDisabledParamList.get(0); + final String strEvalDisabled = evalDisabledParamList.getFirst(); if (strEvalDisabled != null) { this.evalDisabled = Boolean.parseBoolean(strEvalDisabled); } diff --git a/exist-core/src/main/java/org/exist/xquery/functions/xmldb/XMLDBModule.java b/exist-core/src/main/java/org/exist/xquery/functions/xmldb/XMLDBModule.java index eef6edcbc1c..23409a2e565 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/xmldb/XMLDBModule.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/xmldb/XMLDBModule.java @@ -119,7 +119,7 @@ public XMLDBModule(final Map> parameters) { final List allowAnyUriParameterList = (List) getParameter("allowAnyUri"); if (allowAnyUriParameterList != null && !allowAnyUriParameterList.isEmpty()) { - final String strAllowAnyUri = allowAnyUriParameterList.get(0); + final String strAllowAnyUri = allowAnyUriParameterList.getFirst(); if (strAllowAnyUri != null) { this.allowAnyUri = Boolean.parseBoolean(strAllowAnyUri); } diff --git a/exist-start/src/main/java/org/exist/start/Classpath.java b/exist-start/src/main/java/org/exist/start/Classpath.java index c7e5d76edad..e30302fdd94 100644 --- a/exist-start/src/main/java/org/exist/start/Classpath.java +++ b/exist-start/src/main/java/org/exist/start/Classpath.java @@ -115,7 +115,7 @@ public String toString() { final StringBuilder cp = new StringBuilder(1024); final int cnt = _elements.size(); if (cnt >= 1) { - cp.append(_elements.get(0)); + cp.append(_elements.getFirst()); } for (int i=1; i < cnt; i++) { cp.append(File.pathSeparatorChar); diff --git a/exist-start/src/main/java/org/exist/start/LatestFileResolver.java b/exist-start/src/main/java/org/exist/start/LatestFileResolver.java index 5707c4c6516..f3e9c36bde7 100644 --- a/exist-start/src/main/java/org/exist/start/LatestFileResolver.java +++ b/exist-start/src/main/java/org/exist/start/LatestFileResolver.java @@ -97,7 +97,7 @@ public String getResolvedFileName(final String filename) { } if (!jars.isEmpty()) { - final String actualFileName = jars.get(0).toAbsolutePath().toString(); + final String actualFileName = jars.getFirst().toAbsolutePath().toString(); if (_debug) { System.err.println( "Found match: " + actualFileName diff --git a/extensions/exiftool/src/main/java/org/exist/exiftool/xquery/ExiftoolModule.java b/extensions/exiftool/src/main/java/org/exist/exiftool/xquery/ExiftoolModule.java index 30268012f5f..9469d51d7fe 100644 --- a/extensions/exiftool/src/main/java/org/exist/exiftool/xquery/ExiftoolModule.java +++ b/extensions/exiftool/src/main/java/org/exist/exiftool/xquery/ExiftoolModule.java @@ -67,11 +67,11 @@ public String getReleaseVersion() { } protected String getExiftoolPath() { - return (String)getParameter("exiftool-path").get(0); + return (String)getParameter("exiftool-path").getFirst(); } protected String getPerlPath() { - return (String)getParameter("perl-path").get(0); + return (String)getParameter("perl-path").getFirst(); } diff --git a/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/PlainTextHighlighter.java b/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/PlainTextHighlighter.java index 0b3970580f5..eee4a4ca613 100644 --- a/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/PlainTextHighlighter.java +++ b/extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/PlainTextHighlighter.java @@ -108,14 +108,14 @@ public List getOffsets(String content, Analyzer analyzer) throws IOExcep offsets = new ArrayList<>(); - stream.restoreState(stateList.get(0)); + stream.restoreState(stateList.getFirst()); int start = stream.getAttribute(OffsetAttribute.class).startOffset(); stream.restoreState(stateList.get(terms.length - 1)); int end = stream.getAttribute(OffsetAttribute.class).endOffset(); offsets.add(new Offset(start, end)); //restore state as before - stream.restoreState(stateList.get(stateList.size() - 1)); + stream.restoreState(stateList.getLast()); } } } else { diff --git a/extensions/indexes/lucene/src/main/java/org/exist/xquery/modules/lucene/Query.java b/extensions/indexes/lucene/src/main/java/org/exist/xquery/modules/lucene/Query.java index ddb9488a368..0210abc6c95 100644 --- a/extensions/indexes/lucene/src/main/java/org/exist/xquery/modules/lucene/Query.java +++ b/extensions/indexes/lucene/src/main/java/org/exist/xquery/modules/lucene/Query.java @@ -120,8 +120,8 @@ public void analyze(final AnalyzeContextInfo contextInfo) throws XPathException final List steps = BasicExpressionVisitor.findLocationSteps(getArgument(0)); if (!steps.isEmpty()) { - final LocationStep firstStep = steps.get(0); - final LocationStep lastStep = steps.get(steps.size() - 1); + final LocationStep firstStep = steps.getFirst(); + final LocationStep lastStep = steps.getLast(); if (firstStep != null && steps.size() == 1 && firstStep.getAxis() == Constants.SELF_AXIS) { final Expression outerExpr = contextInfo.getContextStep(); if (outerExpr instanceof final LocationStep outerLocationStep) { diff --git a/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/NGramSearch.java b/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/NGramSearch.java index 9027ae335ae..3aa6154b21c 100644 --- a/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/NGramSearch.java +++ b/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/NGramSearch.java @@ -155,8 +155,8 @@ public void analyze(AnalyzeContextInfo contextInfo) throws XPathException { super.analyze(contextInfo); List steps = BasicExpressionVisitor.findLocationSteps(getArgument(0)); if (!steps.isEmpty()) { - LocationStep firstStep = steps.get(0); - LocationStep lastStep = steps.get(steps.size() - 1); + LocationStep firstStep = steps.getFirst(); + LocationStep lastStep = steps.getLast(); if (firstStep != null && steps.size() == 1 && firstStep.getAxis() == Constants.SELF_AXIS) { final Expression outerExpr = contextInfo.getContextStep(); if (outerExpr instanceof LocationStep outerStep) { @@ -321,18 +321,18 @@ private EvaluatableExpression parseQuery(final String query) throws XPathExcepti List expressions = new ArrayList<>(); - if (queryTokens.get(0).equals("^")) { + if (queryTokens.getFirst().equals("^")) { expressions.add(new StartAnchor()); - queryTokens.remove(0); + queryTokens.removeFirst(); } if (queryTokens.isEmpty()) return new EmptyExpression(); boolean endAnchorPresent = false; - if (queryTokens.get(queryTokens.size() - 1).equals("$")) { + if (queryTokens.getLast().equals("$")) { endAnchorPresent = true; - queryTokens.remove(queryTokens.size() - 1); + queryTokens.removeLast(); } if (queryTokens.isEmpty()) diff --git a/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/query/WildcardedExpressionSequence.java b/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/query/WildcardedExpressionSequence.java index 128adce51dd..483350db7e4 100644 --- a/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/query/WildcardedExpressionSequence.java +++ b/extensions/indexes/ngram/src/main/java/org/exist/xquery/modules/ngram/query/WildcardedExpressionSequence.java @@ -48,7 +48,7 @@ public WildcardedExpressionSequence(final List expressions this.expressions = new ArrayList<>(expressions.size()); - WildcardedExpression currentExpression = expressions.remove(0); + WildcardedExpression currentExpression = expressions.removeFirst(); for (WildcardedExpression expression : expressions) { if (currentExpression instanceof MergeableExpression @@ -70,24 +70,24 @@ public NodeSet eval( final int axis, final int expressionId) throws XPathException { boolean startAnchorPresent = false; - if (!expressions.isEmpty() && expressions.get(0) instanceof StartAnchor) { + if (!expressions.isEmpty() && expressions.getFirst() instanceof StartAnchor) { startAnchorPresent = true; - expressions.remove(0); + expressions.removeFirst(); } Wildcard leadingWildcard = null; - if (!expressions.isEmpty() && expressions.get(0) instanceof Wildcard) - leadingWildcard = (Wildcard) expressions.remove(0); + if (!expressions.isEmpty() && expressions.getFirst() instanceof Wildcard) + leadingWildcard = (Wildcard) expressions.removeFirst(); boolean endAnchorPresent = false; - if (!expressions.isEmpty() && expressions.get(expressions.size() - 1) instanceof EndAnchor) { + if (!expressions.isEmpty() && expressions.getLast() instanceof EndAnchor) { endAnchorPresent = true; - expressions.remove(expressions.size() - 1); + expressions.removeLast(); } Wildcard trailingWildcard = null; - if (!expressions.isEmpty() && expressions.get(expressions.size() - 1) instanceof Wildcard) - trailingWildcard = (Wildcard) expressions.remove(expressions.size() - 1); + if (!expressions.isEmpty() && expressions.getLast() instanceof Wildcard) + trailingWildcard = (Wildcard) expressions.removeLast(); while (expressions.size() >= 3) { formEvaluatableTriples(expressionId); @@ -97,13 +97,13 @@ public NodeSet eval( return new EmptyNodeSet(); // TODO: Should probably return nodes the satisfying the size constraint when wildcards are present - if (expressions.size() != 1 || !(expressions.get(0) instanceof EvaluatableExpression)) { // Should not happen. + if (expressions.size() != 1 || !(expressions.getFirst() instanceof EvaluatableExpression)) { // Should not happen. LOG.error("Expression {} could not be evaluated", toString()); throw new XPathException((Expression) null, "Could not evaluate wildcarded query."); } LOG.trace("Evaluating expression {}", toString()); - NodeSet result = ((EvaluatableExpression) expressions.get(0)).eval(index, docs, qnames, nodeSet, axis, + NodeSet result = ((EvaluatableExpression) expressions.getFirst()).eval(index, docs, qnames, nodeSet, axis, expressionId); if (leadingWildcard != null) @@ -152,7 +152,7 @@ private void formEvaluatableTriples(final int expressionId) { WildcardedExpressionTriple triple = new WildcardedExpressionTriple((EvaluatableExpression) first, (Wildcard) second, (EvaluatableExpression) third); expressions.subList(0, 3).clear(); - expressions.add(0, triple); + expressions.addFirst(triple); } else { throw new IllegalArgumentException("Could not form evaluatable triples at the beginning of " + toString()); diff --git a/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexTextCollector.java b/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexTextCollector.java index 1752daf62a5..2a83760b1e9 100644 --- a/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexTextCollector.java +++ b/extensions/indexes/range/src/main/java/org/exist/indexing/range/ComplexTextCollector.java @@ -65,14 +65,14 @@ public void attribute(AttrImpl attribute, NodePath path) { if (fieldConf != null) { Field field = new Field(fieldConf.getName(), true, fieldConf.whitespaceTreatment(), fieldConf.isCaseSensitive()); field.append(attribute.getValue()); - fields.add(0, field); + fields.addFirst(field); } } @Override public void characters(AbstractCharacterData text, NodePath path) { if (currentField != null) { - Field field = fields.get(fields.size() - 1); + Field field = fields.getLast(); if (!field.isAttribute() && (currentField.includeNested() || currentField.match(path))) { field.append(text.getXMLString()); length += text.getXMLString().length(); diff --git a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/FieldLookup.java b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/FieldLookup.java index 2fc50684739..729505f5cdf 100644 --- a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/FieldLookup.java +++ b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/FieldLookup.java @@ -159,7 +159,7 @@ public void setFallback(Expression expression) { public void setArguments(List arguments) throws XPathException { steps.clear(); - Expression path = arguments.get(0); + Expression path = arguments.getFirst(); path = new DynamicCardinalityCheck(context, Cardinality.ONE_OR_MORE, path, new Error(Error.FUNC_PARAM_CARDINALITY, "1", getSignature())); steps.add(path); diff --git a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/Lookup.java b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/Lookup.java index 2ba42773210..b6890b25dcc 100644 --- a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/Lookup.java +++ b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/Lookup.java @@ -227,8 +227,8 @@ public void analyze(AnalyzeContextInfo contextInfo) throws XPathException { List steps = BasicExpressionVisitor.findLocationSteps(getArgument(0)); if (!steps.isEmpty()) { - final LocationStep firstStep = steps.get(0); - final LocationStep lastStep = steps.get(steps.size() - 1); + final LocationStep firstStep = steps.getFirst(); + final LocationStep lastStep = steps.getLast(); if (firstStep != null && steps.size() == 1 && firstStep.getAxis() == Constants.SELF_AXIS) { final Expression outerExpr = contextInfo.getContextStep(); if (outerExpr instanceof LocationStep outerStep) { diff --git a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/RangeQueryRewriter.java b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/RangeQueryRewriter.java index 7a4574c6747..35a51d44134 100644 --- a/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/RangeQueryRewriter.java +++ b/extensions/indexes/range/src/main/java/org/exist/xquery/modules/range/RangeQueryRewriter.java @@ -248,7 +248,7 @@ protected static List getPrecedingSteps(LocationStep current) { Expression previous = parent.getPrevious(current); if (previous != null) { while (previous != null && previous != parent.getFirst() && previous instanceof LocationStep prevStep) { - prevSteps.add(0, prevStep); + prevSteps.addFirst(prevStep); previous = parent.getPrevious(previous); } } diff --git a/extensions/modules/cache/src/main/java/org/exist/xquery/modules/cache/CacheModule.java b/extensions/modules/cache/src/main/java/org/exist/xquery/modules/cache/CacheModule.java index 8fe6f15f7b6..6e2c68d1cd0 100644 --- a/extensions/modules/cache/src/main/java/org/exist/xquery/modules/cache/CacheModule.java +++ b/extensions/modules/cache/src/main/java/org/exist/xquery/modules/cache/CacheModule.java @@ -186,7 +186,7 @@ private static Optional parseParameters(final Map> private static Optional getFirstString(final Map> parameters, final String paramName) { return Optional.ofNullable(parameters.get(paramName)) .filter(l -> l.size() == 1) - .map(l -> l.get(0)) + .map(l -> l.getFirst()) .filter(o -> o instanceof String) .map(o -> (String)o); } diff --git a/extensions/modules/process/src/main/java/org/exist/xquery/modules/process/Execute.java b/extensions/modules/process/src/main/java/org/exist/xquery/modules/process/Execute.java index 3fbef44dd5d..4df7edf385d 100644 --- a/extensions/modules/process/src/main/java/org/exist/xquery/modules/process/Execute.java +++ b/extensions/modules/process/src/main/java/org/exist/xquery/modules/process/Execute.java @@ -118,7 +118,7 @@ public Sequence eval(final Sequence[] args, final Sequence contextSequence) thro } } if (LOG.isDebugEnabled()) - LOG.debug("Creating process {}", cmdArgs.get(0)); + LOG.debug("Creating process {}", cmdArgs.getFirst()); ProcessBuilder pb = new ProcessBuilder(cmdArgs); pb.redirectErrorStream(true); @@ -141,9 +141,9 @@ public Sequence eval(final Sequence[] args, final Sequence contextSequence) thro int exitValue = process.waitFor(); return createReport(exitValue, output, cmdArgs); } catch (IOException e) { - throw new XPathException(this, "An IO error occurred while executing the process " + cmdArgs.get(0) + ": " + e.getMessage(), e); + throw new XPathException(this, "An IO error occurred while executing the process " + cmdArgs.getFirst() + ": " + e.getMessage(), e); } catch (InterruptedException e) { - throw new XPathException(this, "process:execute was interrupted while waiting for process " + cmdArgs.get(0)); + throw new XPathException(this, "process:execute was interrupted while waiting for process " + cmdArgs.getFirst()); } } diff --git a/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/SQLModule.java b/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/SQLModule.java index 27368e4cc88..38ca38e4c8a 100644 --- a/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/SQLModule.java +++ b/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/SQLModule.java @@ -100,7 +100,7 @@ public SQLModule(final Map> parameters) { if (poolNameMatcher.matches()) { if (parameter.getValue() != null && parameter.getValue().size() == 1) { final String poolId = poolNameMatcher.group(1); - final String poolName = parameter.getValue().get(0).toString(); + final String poolName = parameter.getValue().getFirst().toString(); if (poolName != null && !poolName.isEmpty()) { if (!CONNECTION_POOLS.containsKey(poolName)) { @@ -112,7 +112,7 @@ public SQLModule(final Map> parameters) { if (poolParameter.getKey().startsWith(poolPropertiesPrefix)) { if (poolParameter.getValue() != null && poolParameter.getValue().size() == 1) { final String propertyName = poolParameter.getKey().replace(poolPropertiesPrefix, ""); - final String propertyValue = poolParameter.getValue().get(0).toString(); + final String propertyValue = poolParameter.getValue().getFirst().toString(); poolProperties.setProperty(propertyName, propertyValue); } } diff --git a/extensions/modules/xslfo/src/main/java/org/exist/xquery/modules/xslfo/XSLFOModule.java b/extensions/modules/xslfo/src/main/java/org/exist/xquery/modules/xslfo/XSLFOModule.java index 74a9b6299de..432b0b6f86c 100644 --- a/extensions/modules/xslfo/src/main/java/org/exist/xquery/modules/xslfo/XSLFOModule.java +++ b/extensions/modules/xslfo/src/main/java/org/exist/xquery/modules/xslfo/XSLFOModule.java @@ -84,7 +84,7 @@ public synchronized ProcessorAdapter getProcessorAdapter() { if (adapter == null) { final List processorAdapterParamList = (List) getParameter("processorAdapter"); if (!processorAdapterParamList.isEmpty()) { - final String processorAdapter = processorAdapterParamList.get(0); + final String processorAdapter = processorAdapterParamList.getFirst(); try { final Class clazzAdapter = (Class) Class.forName(processorAdapter); diff --git a/extensions/security/ldap/src/main/java/org/exist/security/realm/ldap/LDAPRealm.java b/extensions/security/ldap/src/main/java/org/exist/security/realm/ldap/LDAPRealm.java index 0da40c2028d..190279ac368 100644 --- a/extensions/security/ldap/src/main/java/org/exist/security/realm/ldap/LDAPRealm.java +++ b/extensions/security/ldap/src/main/java/org/exist/security/realm/ldap/LDAPRealm.java @@ -234,7 +234,7 @@ public Account refreshAccountFromLdap(final Account account) throws PermissionDe //append the ldap primaryGroup to the head of the ldap group list, and compare //to the account group list - memberOf_groups.add(0, getGroup(ctx2, broker, primaryGroup)); + memberOf_groups.addFirst(getGroup(ctx2, broker, primaryGroup)); final String accountGroups[] = account.getGroups(); From 584a93afa1590477bc1893795aa1ccea4b1d9e52 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Sun, 9 Mar 2025 20:24:46 +0100 Subject: [PATCH 10/14] [refactor] Processed feedback review - java21 upgrade --- .../exist/security/internal/RealmImpl.java | 13 +-- .../java/org/exist/storage/NativeBroker.java | 3 +- .../exist/xmldb/AbstractRemoteResource.java | 87 +++++---------- .../main/java/org/exist/xquery/XPathUtil.java | 101 +++++++----------- .../xquery/functions/util/ModuleInfo.java | 20 ++-- .../org/exist/xquery/value/DecimalValue.java | 23 ++-- .../org/exist/xquery/value/IntegerValue.java | 21 ++-- .../exist/xquery/value/ItemComparator.java | 22 ++-- .../xslt/TransformerFactoryAllocator.java | 14 +-- 9 files changed, 107 insertions(+), 197 deletions(-) diff --git a/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java b/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java index bb613dd01c4..5a8319d13fd 100644 --- a/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java +++ b/exist-core/src/main/java/org/exist/security/internal/RealmImpl.java @@ -29,7 +29,6 @@ import org.exist.EXistException; import org.exist.config.Configuration; import org.exist.config.ConfigurationException; -import org.exist.config.Reference; import org.exist.config.ReferenceImpl; import org.exist.security.AXSchemaType; import org.exist.security.AbstractAccount; @@ -91,7 +90,7 @@ protected RealmImpl(final DBBroker broker, final SecurityManagerImpl sm, final C //DBA group GROUP_DBA = new GroupImpl(broker, this, DBA_GROUP_ID, SecurityManager.DBA_GROUP); - GROUP_DBA.setManagers(new ArrayList<>(Arrays.asList(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)))); + GROUP_DBA.setManagers(new ArrayList<>(List.of(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)))); GROUP_DBA.setMetadataValue(EXistSchemaType.DESCRIPTION, "Database Administrators"); sm.registerGroup(GROUP_DBA); registerGroup(GROUP_DBA); @@ -105,11 +104,9 @@ protected RealmImpl(final DBBroker broker, final SecurityManagerImpl sm, final C //guest group GROUP_GUEST = new GroupImpl(broker, this, GUEST_GROUP_ID, SecurityManager.GUEST_GROUP); - GROUP_GUEST.setManagers(new ArrayList<>() { - { - add(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)); - } - }); + GROUP_GUEST.setManagers(new ArrayList<>( + List.of(new ReferenceImpl<>(sm, "getAccount", SecurityManager.DBA_USER)) + )); GROUP_GUEST.setMetadataValue(EXistSchemaType.DESCRIPTION, "Anonymous Users"); sm.registerGroup(GROUP_GUEST); registerGroup(GROUP_GUEST); @@ -268,7 +265,7 @@ public boolean deleteGroup(final Group group) throws PermissionDeniedException, } @Override - public Subject authenticate(final String accountName, Object credentials) throws AuthenticationException { + public Subject authenticate(final String accountName, final Object credentials) throws AuthenticationException { final Account account = getAccount(accountName); if(account == null) { diff --git a/exist-core/src/main/java/org/exist/storage/NativeBroker.java b/exist-core/src/main/java/org/exist/storage/NativeBroker.java index d1476287645..7786747b7ac 100644 --- a/exist-core/src/main/java/org/exist/storage/NativeBroker.java +++ b/exist-core/src/main/java/org/exist/storage/NativeBroker.java @@ -85,6 +85,7 @@ import javax.xml.stream.XMLStreamException; import java.io.*; import java.net.URI; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -722,7 +723,7 @@ private XmldbURI prepend(final XmldbURI uri) { .map(h -> h.resolve("etc").resolve(INIT_COLLECTION_CONFIG)) .orElse(Paths.get("etc").resolve(INIT_COLLECTION_CONFIG)); if (Files.exists(fInitCollectionConfig)) { - return Files.readString(fInitCollectionConfig); + return Files.readString(fInitCollectionConfig, UTF_8); } // 2) fallback to attempting to load from classpath diff --git a/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java b/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java index c409239ba0d..7e9a5d19503 100644 --- a/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/AbstractRemoteResource.java @@ -82,31 +82,15 @@ public Properties getProperties() { } @Override - public Object getContent() - throws XMLDBException { - final Object res = getExtendedContent(); - if (res != null) { - switch (res) { - case byte[] bytes -> { - return res; - } - case Path path1 -> { - return readFile(path1); - } - case File file1 -> { - return readFile(file1.toPath()); - } - case InputSource source -> { - return readFile(source); - } - case ContentFile contentFile1 -> { - return contentFile1.getBytes(); - } - default -> { - } - } - } - return res; + public Object getContent() throws XMLDBException { + return switch (getExtendedContent()) { + case byte[] bytes -> bytes; + case Path path -> readFile(path); + case File file -> readFile(file.toPath()); + case InputSource inputSource -> readFile(inputSource); + case ContentFile contentFile -> contentFile.getBytes(); + default -> null; + }; } /** @@ -119,49 +103,29 @@ public Object getContent() * @deprecated instead use {@link org.xmldb.api.base.Resource#getContent()} */ @Deprecated - protected byte[] getData() - throws XMLDBException { - final Object res = getExtendedContent(); - if (res != null) { - switch (res) { - case Path path1 -> { - return readFile(path1); - } - case File file1 -> { - return readFile(file1.toPath()); - } - case InputSource source -> { - return readFile(source); - } - case String s -> { - return s.getBytes(UTF_8); - } - case ContentFile contentFile1 -> { - return contentFile1.getBytes(); - } - default -> { - } - } - } - - return (byte[]) res; + protected byte[] getData() throws XMLDBException { + return switch (getExtendedContent()) { + case Path path -> readFile(path); + case File file -> readFile(file.toPath()); + case InputSource inputSource -> readFile(inputSource); + case String string -> string.getBytes(UTF_8); + case ContentFile contentFile -> contentFile.getBytes(); + case null, default -> null; + }; } @Override - public long getContentLength() - throws XMLDBException { + public long getContentLength() throws XMLDBException { return contentLen; } @Override - public Instant getCreationTime() - throws XMLDBException { + public Instant getCreationTime() throws XMLDBException { return dateCreated; } @Override - public Instant getLastModificationTime() - throws XMLDBException { + public Instant getLastModificationTime() throws XMLDBException { return dateModified; } @@ -182,8 +146,7 @@ public void setLastModificationTime(final Instant dateModified) throws XMLDBExce } } - public long getExtendedContentLength() - throws XMLDBException { + public long getExtendedContentLength() throws XMLDBException { return contentLen; } @@ -193,8 +156,7 @@ public String getMimeType() { } @Override - public Collection getParentCollection() - throws XMLDBException { + public Collection getParentCollection() throws XMLDBException { return collection; } @@ -203,8 +165,7 @@ public Permission getPermissions() { return permissions; } - protected boolean setContentInternal(final Object value) - throws XMLDBException { + protected boolean setContentInternal(final Object value) throws XMLDBException { boolean wasSet = false; try { diff --git a/exist-core/src/main/java/org/exist/xquery/XPathUtil.java b/exist-core/src/main/java/org/exist/xquery/XPathUtil.java index 5e817da5ee5..cbc3c5e8d72 100644 --- a/exist-core/src/main/java/org/exist/xquery/XPathUtil.java +++ b/exist-core/src/main/java/org/exist/xquery/XPathUtil.java @@ -90,64 +90,41 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context } public static final Sequence javaObjectToXPath(Object obj, XQueryContext context, - boolean expandChars, final Expression expression) throws XPathException { + boolean expandChars, final Expression expression) throws XPathException { - switch (obj) { - case null -> { - //return Sequence.EMPTY_SEQUENCE; - return null; - //return Sequence.EMPTY_SEQUENCE; - } - case Sequence sequence -> { - return sequence; - } - case String s -> { - final StringValue v = new StringValue(expression, s); - return (expandChars ? v.expand() : v); - } - case Boolean b -> { - return BooleanValue.valueOf(b); - } - case Float v -> { - return new FloatValue(expression, v); - } - case Double v -> { - return new DoubleValue(expression, v); - } - case Short aShort -> { - return new IntegerValue(expression, aShort, Type.SHORT); - } - case Integer integer -> { - return new IntegerValue(expression, integer, Type.INT); - } - case Long l -> { - return new IntegerValue(expression, l, Type.LONG); - } - case BigInteger bigInteger -> { - return new IntegerValue(expression, bigInteger); - } - case BigDecimal bigDecimal -> { - return new DecimalValue(expression, bigDecimal); - } - case byte[] bytes -> { - return BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), new UnsynchronizedByteArrayInputStream(bytes), expression); + return switch (obj) { + case null -> null; //return Sequence.EMPTY_SEQUENCE; + case Sequence sequence -> sequence; + case String stringValue -> { + final StringValue v = new StringValue(expression, stringValue); + yield (expandChars ? v.expand() : v); } + case Boolean booleanValue -> BooleanValue.valueOf(booleanValue); + case Float floatValue -> new FloatValue(expression, floatValue); + case Double doubleValue -> new DoubleValue(expression, doubleValue); + case Short shortValue -> new IntegerValue(expression, shortValue, Type.SHORT); + case Integer integerValue -> new IntegerValue(expression, integerValue, Type.INT); + case Long longValue -> new IntegerValue(expression, longValue, Type.LONG); + case BigInteger bigInteger -> new IntegerValue(expression, bigInteger); + case BigDecimal bigDecimal -> new DecimalValue(expression, bigDecimal); + case byte[] bytes -> + BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), + new UnsynchronizedByteArrayInputStream(bytes), expression); case ResourceSet resourceSet -> { final Sequence seq = new AVLTreeNodeSet(); try { final DBBroker broker = context.getBroker(); - for (final ResourceIterator it = ((ResourceSet) obj).getIterator(); it.hasMoreResources(); ) { + for (final ResourceIterator it = resourceSet.getIterator(); it.hasMoreResources(); ) { seq.add(getNode(broker, (XMLResource) it.nextResource(), expression)); } } catch (final XMLDBException xe) { throw new XPathException(expression, "Failed to convert ResourceSet to node: " + xe.getMessage()); } - return seq; + yield seq; } - case XMLResource xmlResource -> { - return getNode(context.getBroker(), xmlResource, expression); - } + case XMLResource xmlResource -> getNode(context.getBroker(), xmlResource, expression); + case Node node -> { context.pushDocumentContext(); final DOMStreamer streamer = (DOMStreamer) SerializerPool.getInstance().borrowObject(DOMStreamer.class); @@ -156,16 +133,14 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context builder.startDocument(); final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); streamer.setContentHandler(receiver); - streamer.serialize((Node) obj, false); - if (obj instanceof Document) { - return builder.getDocument(); + streamer.serialize(node, false); + if (node instanceof Document) { + yield builder.getDocument(); } else { - return builder.getDocument().getNode(1); + yield builder.getDocument().getNode(1); } } catch (final SAXException e) { - throw new XPathException(expression, - "Failed to transform node into internal model: " - + e.getMessage()); + throw new XPathException(expression, "Failed to transform node into internal model: " + e.getMessage()); } finally { context.popDocumentContext(); SerializerPool.getInstance().returnObject(streamer); @@ -185,7 +160,7 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context for (Object o : objects) { seq.add((Item) javaObjectToXPath(o, context, expandChars, expression)); } - return seq; + yield seq; } case NodeList nodeList -> { @@ -197,20 +172,17 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context final DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(expression, builder); streamer.setContentHandler(receiver); final ValueSequence seq = new ValueSequence(); - final NodeList nl = (NodeList) obj; int last = builder.getDocument().getLastNode(); - for (int i = 0; i < nl.getLength(); i++) { - final Node n = nl.item(i); + for (int i = 0; i < nodeList.getLength(); i++) { + final Node n = nodeList.item(i); streamer.serialize(n, false); final NodeImpl created = builder.getDocument().getNode(last + 1); seq.add(created); last = builder.getDocument().getLastNode(); } - return seq; + yield seq; } catch (final SAXException e) { - throw new XPathException(expression, - "Failed to transform node into internal model: " - + e.getMessage()); + throw new XPathException(expression, "Failed to transform node into internal model: " + e.getMessage()); } finally { context.popDocumentContext(); SerializerPool.getInstance().returnObject(streamer); @@ -230,13 +202,12 @@ public static final Sequence javaObjectToXPath(Object obj, XQueryContext context for (Object arrayItem : array) { seq.add((Item) javaObjectToXPath(arrayItem, context, expandChars, expression)); } - return seq; + yield seq; } - default -> { - return new JavaObjectValue(obj); - } - } + default -> new JavaObjectValue(obj); + + }; } public static final int javaClassToXPath(Class clazz) { diff --git a/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java b/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java index 1709cc227dc..65d2387c4fb 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/util/ModuleInfo.java @@ -153,7 +153,7 @@ public ModuleInfo(XQueryContext context, FunctionSignature signature) { public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathException { - switch (getSignature().getName().getLocalPart()) { + return switch (getSignature().getName().getLocalPart()) { case "get-module-description" -> { final String uri = args[0].getStringValue(); final Module[] modules = context.getModules(uri); @@ -164,23 +164,23 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) for (final Module module : modules) { result.add(new StringValue(this, module.getDescription())); } - return result; + yield result; } case "is-module-registered" -> { final String uri = args[0].getStringValue(); final Module[] modules = context.getModules(uri); - return new BooleanValue(this, modules != null && modules.length > 0); + yield new BooleanValue(this, modules != null && modules.length > 0); } case "mapped-modules" -> { final ValueSequence resultSeq = new ValueSequence(); for (final Iterator i = context.getMappedModuleURIs(); i.hasNext(); ) { resultSeq.add(new StringValue(this, i.next())); } - return resultSeq; + yield resultSeq; } case "is-module-mapped" -> { final String uri = args[0].getStringValue(); - return new BooleanValue(this, ((Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP)).get(uri) != null); + yield new BooleanValue(this, ((Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP)).get(uri) != null); } case "map-module" -> { if (!context.getSubject().hasDbaRole()) { @@ -192,7 +192,7 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) final String location = args[1].getStringValue(); final Map moduleMap = (Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); moduleMap.put(namespace, location); - return Sequence.EMPTY_SEQUENCE; + yield Sequence.EMPTY_SEQUENCE; } case "unmap-module" -> { if (!context.getSubject().hasDbaRole()) { @@ -203,7 +203,7 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) final String namespace = args[0].getStringValue(); final Map moduleMap = (Map) context.getBroker().getConfiguration().getProperty(XQueryContext.PROPERTY_STATIC_MODULE_MAP); moduleMap.remove(namespace); - return Sequence.EMPTY_SEQUENCE; + yield Sequence.EMPTY_SEQUENCE; } case "get-module-info" -> { context.pushDocumentContext(); @@ -223,7 +223,7 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) outputModule(builder, module); } } - return builder.getDocument().getNode(1); + yield builder.getDocument().getNode(1); } finally { context.popDocumentContext(); } @@ -245,9 +245,9 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) tempContext.reset(); tempContext.runCleanupTasks(); } - return resultSeq; + yield resultSeq; } - } + }; } private void outputModules(final MemTreeBuilder builder, final Module[] modules) { diff --git a/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java b/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java index 771fc204277..d69144666b9 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java +++ b/exist-core/src/main/java/org/exist/xquery/value/DecimalValue.java @@ -293,22 +293,13 @@ public boolean isPositive() { @Override protected @Nullable IntSupplier createComparisonWith(final NumericValue other) { - final IntSupplier comparison; - switch (other) { - case IntegerValue integerValue -> - comparison = () -> value.compareTo(new BigDecimal(((IntegerValue) other).value)); - case DecimalValue decimalValue -> comparison = () -> value.compareTo(((DecimalValue) other).value); - case DoubleValue doubleValue -> - comparison = () -> value.compareTo(BigDecimal.valueOf(((DoubleValue) other).value)); - case FloatValue floatValue -> { - final BigDecimal otherPromoted = new BigDecimal(Float.toString(floatValue.value)); - comparison = () -> value.compareTo(otherPromoted); - } - case null, default -> { - return null; - } - } - return comparison; + return switch (other) { + case IntegerValue integerValue -> () -> value.compareTo(new BigDecimal(integerValue.value)); + case DecimalValue decimalValue -> () -> value.compareTo(decimalValue.value); + case DoubleValue doubleValue -> () -> value.compareTo(BigDecimal.valueOf(doubleValue.value)); + case FloatValue floatValue -> () -> value.compareTo(new BigDecimal(Float.toString(floatValue.value))); + case null, default -> null; + }; } /* (non-Javadoc) diff --git a/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java b/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java index 6131e3d78a1..56da7dd8815 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java +++ b/exist-core/src/main/java/org/exist/xquery/value/IntegerValue.java @@ -261,20 +261,13 @@ public boolean isPositive() { @Override protected @Nullable IntSupplier createComparisonWith(final NumericValue other) { - final IntSupplier comparison; - switch (other) { - case IntegerValue integerValue -> comparison = () -> value.compareTo(((IntegerValue) other).value); - case DecimalValue decimalValue -> - comparison = () -> new BigDecimal(value).compareTo(((DecimalValue) other).value); - case DoubleValue doubleValue -> - comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((DoubleValue) other).value)); - case FloatValue floatValue -> - comparison = () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(((FloatValue) other).value)); - case null, default -> { - return null; - } - } - return comparison; + return switch (other) { + case IntegerValue integerValue -> () -> value.compareTo(integerValue.value); + case DecimalValue decimalValue -> () -> new BigDecimal(value).compareTo(decimalValue.value); + case DoubleValue doubleValue -> () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(doubleValue.value)); + case FloatValue floatValue -> () -> new BigDecimal(value).compareTo(BigDecimal.valueOf(floatValue.value)); + case null, default -> null; + }; } @Override diff --git a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java index 7adfa6347b4..3d69ba8d91c 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java +++ b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java @@ -34,6 +34,7 @@ import com.ibm.icu.text.Collator; import net.jcip.annotations.NotThreadSafe; +import org.exist.dom.memtree.NodeImpl; import org.exist.xquery.Constants; import javax.annotation.Nullable; @@ -65,23 +66,16 @@ public ItemComparator(@Nullable final Collator collator) { } @Override - public int compare(final Item n1, final Item n2) { - switch (n1) { - case org.exist.dom.memtree.NodeImpl node when (!(n2 instanceof org.exist.dom.memtree.NodeImpl)) -> { - return Constants.INFERIOR; - } - case AtomicValue atomicValue when n2 instanceof AtomicValue -> { + public int compare(final Item left, final Item right) { + return switch (left) { + case AtomicValue atomicValue when right instanceof AtomicValue -> { if (atomicValueComparator == null) { atomicValueComparator = new AtomicValueComparator(collator); } - return atomicValueComparator.compare(atomicValue, (AtomicValue) n2); - } - case Comparable comparable -> { - return comparable.compareTo(n2); - } - case null, default -> { - return Constants.INFERIOR; + yield atomicValueComparator.compare(atomicValue, (AtomicValue) right); } - } + case Comparable comparable -> comparable.compareTo(right); + case null, default -> Constants.INFERIOR; + }; } } diff --git a/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java b/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java index ce12135d9cf..ddd3184529d 100644 --- a/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java +++ b/exist-core/src/main/java/org/exist/xslt/TransformerFactoryAllocator.java @@ -22,7 +22,7 @@ package org.exist.xslt; import java.util.Hashtable; -import java.util.Iterator; +import java.util.Map; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXTransformerFactory; @@ -91,17 +91,19 @@ public static SAXTransformerFactory getTransformerFactory(final BrokerPool pool) LOG.debug("Set transformer factory: {}", transformerFactoryClassName); } final Hashtable attributes = (Hashtable) pool.getConfiguration().getProperty(PROPERTY_TRANSFORMER_ATTRIBUTES); - for (String name : attributes.keySet()) { - final Object value = attributes.get(name); + + for(Map.Entry entry : attributes.entrySet()){ try { - factory.setAttribute(name, value); + factory.setAttribute(entry.getKey(), entry.getValue()); if (LOG.isDebugEnabled()) { - LOG.debug("Set transformer attribute: , name: {}, value: {}", name, value); + LOG.debug("Set transformer attribute: name: {}, value: {}", entry.getKey(), entry.getValue()); } } catch (final IllegalArgumentException iae) { - LOG.warn("Unable to set attribute for TransformerFactory: '{}', name: {}, value: {}, exception: {}", transformerFactoryClassName, name, value, iae.getMessage()); + LOG.warn("Unable to set attribute for TransformerFactory: '{}', name: {}, value: {}, exception: {}", + transformerFactoryClassName, entry.getKey(), entry.getValue(), iae.getMessage()); } } + try { factory.setAttribute(PROPERTY_BROKER_POOL, pool); } catch (final Exception e) { From bdba447b9a3e85f1f725fb8f3719cb96a43ee97c Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Sun, 9 Mar 2025 20:46:01 +0100 Subject: [PATCH 11/14] [refactor] Processed feedback review (repair build) java21 upgrade --- .../java/org/exist/xquery/value/ItemComparator.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java index 3d69ba8d91c..f5dd8f8a82a 100644 --- a/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java +++ b/exist-core/src/main/java/org/exist/xquery/value/ItemComparator.java @@ -66,15 +66,16 @@ public ItemComparator(@Nullable final Collator collator) { } @Override - public int compare(final Item left, final Item right) { - return switch (left) { - case AtomicValue atomicValue when right instanceof AtomicValue -> { + public int compare(final Item n1, final Item n2) { + return switch (n1) { + case NodeImpl node when (!(n2 instanceof org.exist.dom.memtree.NodeImpl)) -> Constants.INFERIOR; + case AtomicValue atomicValue when n2 instanceof AtomicValue -> { if (atomicValueComparator == null) { atomicValueComparator = new AtomicValueComparator(collator); } - yield atomicValueComparator.compare(atomicValue, (AtomicValue) right); + yield atomicValueComparator.compare(atomicValue, (AtomicValue) n2); } - case Comparable comparable -> comparable.compareTo(right); + case Comparable comparable -> comparable.compareTo(n2); case null, default -> Constants.INFERIOR; }; } From 3062ed602ca520f3ff8279a6a1d9972c2b8bfc82 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Sun, 9 Mar 2025 20:51:34 +0100 Subject: [PATCH 12/14] [refactor] Java10: Use pre-defined charset, making catch exception not needed anymore --- .../org/exist/client/InteractiveClient.java | 2 +- .../storage/serializers/XIncludeFilter.java | 12 +++----- .../main/java/org/exist/xmldb/XmldbURI.java | 9 ++---- .../java/org/exist/xquery/util/URIUtils.java | 29 +++++-------------- 4 files changed, 14 insertions(+), 38 deletions(-) diff --git a/exist-core/src/main/java/org/exist/client/InteractiveClient.java b/exist-core/src/main/java/org/exist/client/InteractiveClient.java index 2d1f1303106..d7ff1253a30 100644 --- a/exist-core/src/main/java/org/exist/client/InteractiveClient.java +++ b/exist-core/src/main/java/org/exist/client/InteractiveClient.java @@ -2090,7 +2090,7 @@ public boolean run() throws Exception { printNotice(); // Fix "uri" property: Excalibur CLI can't parse dashes, so we need to URL encode them: - properties.setProperty(URI, URLDecoder.decode(properties.getProperty(URI), UTF_8.name())); + properties.setProperty(URI, URLDecoder.decode(properties.getProperty(URI), UTF_8)); final boolean interactive = isInteractive(); diff --git a/exist-core/src/main/java/org/exist/storage/serializers/XIncludeFilter.java b/exist-core/src/main/java/org/exist/storage/serializers/XIncludeFilter.java index a4189f22c9f..70a1b349206 100644 --- a/exist-core/src/main/java/org/exist/storage/serializers/XIncludeFilter.java +++ b/exist-core/src/main/java/org/exist/storage/serializers/XIncludeFilter.java @@ -608,14 +608,10 @@ protected Map processParameters(final String args) { value = args.substring(start, end - 1); } start = end; - try { - param = URLDecoder.decode(param, UTF_8.name()); - value = URLDecoder.decode(value, UTF_8.name()); - LOG.debug("parameter: {} = {}", param, value); - parameters.put(param, value); - } catch (final UnsupportedEncodingException e) { - LOG.warn(e.getMessage(), e); - } + param = URLDecoder.decode(param, UTF_8); + value = URLDecoder.decode(value, UTF_8); + LOG.debug("parameter: {} = {}", param, value); + parameters.put(param, value); } return parameters; } diff --git a/exist-core/src/main/java/org/exist/xmldb/XmldbURI.java b/exist-core/src/main/java/org/exist/xmldb/XmldbURI.java index 0dc088c7679..35508ab7040 100644 --- a/exist-core/src/main/java/org/exist/xmldb/XmldbURI.java +++ b/exist-core/src/main/java/org/exist/xmldb/XmldbURI.java @@ -387,13 +387,8 @@ public String getCollectionPath() { return null; } - try { - //TODO: we might want to cache this value - return URLDecoder.decode(encodedCollectionPath, UTF_8.name()); - } catch (final UnsupportedEncodingException e) { - //Should never happen - throw new IllegalArgumentException(encodedCollectionPath + " can not be properly escaped"); - } + //TODO: we might want to cache this value + return URLDecoder.decode(encodedCollectionPath, UTF_8); } public XmldbURI toCollectionPathURI() { diff --git a/exist-core/src/main/java/org/exist/xquery/util/URIUtils.java b/exist-core/src/main/java/org/exist/xquery/util/URIUtils.java index 5695012a177..b87ec3f25d8 100644 --- a/exist-core/src/main/java/org/exist/xquery/util/URIUtils.java +++ b/exist-core/src/main/java/org/exist/xquery/util/URIUtils.java @@ -324,14 +324,9 @@ public static String escapeHtmlURI(String uri){ * @return The UTF-8 encoded value of the supplied uri */ public static String urlEncodeUtf8(String uri) { - try { - final String almostEncoded = URLEncoder.encode(uri, UTF_8.name()); - return almostEncoded.replaceAll("\\+","%20"); - } catch(final UnsupportedEncodingException e) { - //wrap with a runtime Exception - throw new RuntimeException(e); - } - } + final String almostEncoded = URLEncoder.encode(uri, UTF_8); + return almostEncoded.replaceAll("\\+","%20"); + } /** * This method decodes the provided uri for human readability. The @@ -342,13 +337,8 @@ public static String urlEncodeUtf8(String uri) { * @return The decoded value of the supplied uri */ public static String urlDecodeUtf8(String uri) { - try { - return URLDecoder.decode(uri, UTF_8.name()); - } catch(final UnsupportedEncodingException e) { - //wrap with a runtime Exception - throw new RuntimeException(e); - } - } + return URLDecoder.decode(uri, UTF_8); + } /** * This method decodes the provided uri for human readability. The @@ -359,13 +349,8 @@ public static String urlDecodeUtf8(String uri) { * @return The decoded value of the supplied uri */ public static String urlDecodeUtf8(XmldbURI uri) { - try { - return URLDecoder.decode(uri.toString(), UTF_8.name()); - } catch(final UnsupportedEncodingException e) { - //wrap with a runtime Exception - throw new RuntimeException(e); - } - } + return URLDecoder.decode(uri.toString(), UTF_8); + } /** * This method splits the supplied url on the character From 10b1df25df80ce7459043aa1dcd8c10edb2c71b3 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Tue, 11 Mar 2025 21:42:46 +0100 Subject: [PATCH 13/14] [refactor] Use switch expressions (in a better way) --- .../exist/security/internal/AccountImpl.java | 36 +++++----- .../org/exist/security/internal/Password.java | 41 +++++------- .../java/org/exist/storage/btree/Repair.java | 23 ++++--- .../org/exist/xmldb/LocalBinaryResource.java | 65 ++++++++++--------- .../org/exist/xmldb/RemoteCollection.java | 33 ++++++---- .../functions/math/OneParamFunctions.java | 6 +- 6 files changed, 103 insertions(+), 101 deletions(-) diff --git a/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java b/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java index b9e107b1d5b..0be45fd1f28 100644 --- a/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java +++ b/exist-core/src/main/java/org/exist/security/internal/AccountImpl.java @@ -172,27 +172,23 @@ private void instantiate(final Account from_user) throws PermissionDeniedExcepti //copy umask setUserMask(from_user.getUserMask()); - if(from_user instanceof AccountImpl user) { - - groups = new ArrayList<>(user.groups); - - password = user.password; - digestPassword = user.digestPassword; - - hasDbaRole = user.hasDbaRole; - - _cred = user._cred; - } else if(from_user instanceof UserAider user) { - - final String[] groups = user.getGroups(); - for (final String group : groups) { - addGroup(group); + switch (from_user) { + case AccountImpl user -> { + groups = new ArrayList<>(user.groups); + password = user.password; + digestPassword = user.digestPassword; + hasDbaRole = user.hasDbaRole; + _cred = user._cred; } - - setPassword(user.getPassword()); - digestPassword = user.getDigestPassword(); - } else { - addGroup(from_user.getDefaultGroup()); + case UserAider user -> { + final String[] groups = user.getGroups(); + for (final String group : groups) { + addGroup(group); + } + setPassword(user.getPassword()); + digestPassword = user.getDigestPassword(); + } + default -> addGroup(from_user.getDefaultGroup()); //TODO: groups } } diff --git a/exist-core/src/main/java/org/exist/security/internal/Password.java b/exist-core/src/main/java/org/exist/security/internal/Password.java index a8f78fd701b..342ef233eb7 100644 --- a/exist-core/src/main/java/org/exist/security/internal/Password.java +++ b/exist-core/src/main/java/org/exist/security/internal/Password.java @@ -54,15 +54,15 @@ public enum Hash { final Pattern ptnHash = Pattern.compile("\\{([A-Z0-9]+)\\}(.*)"); - public Password(Account account, String password) { - + public Password(final Account account, final String password) { + if (password == null) { this.algorithm = DEFAULT_ALGORITHM; this.pw = null; this.digestPw = null; - } else{ + } else { final Matcher mtcHash = ptnHash.matcher(password); - + if (mtcHash.matches()) { this.algorithm = Hash.valueOf(mtcHash.group(1)); this.pw = mtcHash.group(2); @@ -70,7 +70,7 @@ public Password(Account account, String password) { this.algorithm = DEFAULT_ALGORITHM; this.pw = hashAndEncode(password); } - + this.digestPw = digest(account.getName(), account.getRealmId(), pw); } } @@ -148,31 +148,22 @@ public boolean check(Object credentials) { @Override public boolean equals(Object obj) { - - if(obj == this) { + + if (obj == this) { return true; } - switch (obj) { - case null -> { - return false; - } - case Password p -> { - - if (algorithm != p.algorithm) { - throw new RuntimeException("Cannot compare passwords with different algorithms i.e. " + algorithm + " and " + p.algorithm); + return switch (obj) { + case Password password -> { + if (algorithm != password.algorithm) { + throw new RuntimeException("Cannot compare passwords with different algorithms i.e. " + + algorithm + " and " + password.algorithm); } - - return (Objects.equals(pw, p.pw)); - } - case String s -> { - return (hashAndEncode(s)).equals(pw); - } - default -> { + yield Objects.equals(pw, password.pw); } - } - - return false; + case String s -> (hashAndEncode(s)).equals(pw); + case null, default -> false; + }; } @Override diff --git a/exist-core/src/main/java/org/exist/storage/btree/Repair.java b/exist-core/src/main/java/org/exist/storage/btree/Repair.java index f04f93c838e..a6b4e6f13f5 100644 --- a/exist-core/src/main/java/org/exist/storage/btree/Repair.java +++ b/exist-core/src/main/java/org/exist/storage/btree/Repair.java @@ -53,26 +53,29 @@ public Repair() { } public void repair(String id) { - try(final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()))) { + try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()))) { - BTree btree = null; - switch (id) { - case "collections" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.COLLECTIONS_DBX_ID); - case "dom" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.DOM_DBX_ID); - case "range" -> btree = ((NativeBroker) broker).getStorage(NativeBroker.VALUES_DBX_ID); + final BTree btree = switch (id) { + case null -> null; // prevent NPE in index lookup (default) + case "collections" -> ((NativeBroker) broker).getStorage(NativeBroker.COLLECTIONS_DBX_ID); + case "dom" -> ((NativeBroker) broker).getStorage(NativeBroker.DOM_DBX_ID); + case "range" -> ((NativeBroker) broker).getStorage(NativeBroker.VALUES_DBX_ID); case "structure" -> { NativeStructuralIndexWorker index = (NativeStructuralIndexWorker) broker.getIndexController().getWorkerByIndexName(StructuralIndex.STRUCTURAL_INDEX_ID); - btree = index.getStorage(); + yield index.getStorage(); } - case null, default -> { + default -> { // use index id defined in conf.xml Index index = pool.getIndexManager().getIndexByName(id); if (index != null) { - btree = index.getStorage(); + yield index.getStorage(); + } else { + yield null; } } - } + }; + if (btree == null) { System.console().printf("Unkown index: %s\n", id); return; diff --git a/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java b/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java index 936ffbc3642..34558b42d36 100644 --- a/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java +++ b/exist-core/src/main/java/org/exist/xmldb/LocalBinaryResource.java @@ -120,42 +120,47 @@ Object getContent(final DBBroker broker, final Txn transaction) throws XMLDBExce } private Object getContent(final Object res) throws XMLDBException { - if(res != null) { - switch (res) { - case Path path -> { - return readFile(path); - } - case File file1 -> { - return readFile(file1.toPath()); - } - case InputSource source -> { - return readFile(source); - } - case byte[] bytes -> { - return res; - } - case BinaryValue value -> { - try (final UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream()) { - ((BinaryValue) res).streamBinaryTo(baos); - return baos.toByteArray(); - } catch (final IOException e) { - throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); - } - } - case InputStream inputStream -> { - try (final InputStream is = (InputStream) res) { - return readFile(is); - } catch (final IOException e) { - throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); - } + + /* + DW: can use "return switch(res)" as this will give deep Java Validation errors. + This might be a java bug. + */ + switch (res) { + case Path path -> { + return readFile(path); + } + case File file -> { + return readFile(file.toPath()); + } + case InputSource inputSource -> { + return readFile(inputSource); + } + case byte[] bytes -> { + return res; + } + case BinaryValue binaryValue -> { + try (final UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream()) { + binaryValue.streamBinaryTo(baos); + return baos.toByteArray(); + } catch (final IOException e) { + throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); } - default -> { + } + case InputStream inputStream -> { + /* This will manage the inputstream */ + try (final InputStream is = inputStream) { + return readFile(is); + } catch (final IOException e) { + throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e.getMessage(), e); } } + case null, default -> { + return null; + } } - return res; } + @Override public void setContent(final Object value) throws XMLDBException { switch (value) { diff --git a/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java b/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java index 8ead07783cd..1a0a712dc88 100644 --- a/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java +++ b/exist-core/src/main/java/org/exist/xmldb/RemoteCollection.java @@ -471,36 +471,43 @@ public void storeResource(final Resource res) throws XMLDBException { @Override public void storeResource(final Resource res, final Instant a, final Instant b) throws XMLDBException { - final Object content = (res instanceof ExtendedResource) ? ((ExtendedResource) res).getExtendedContent() : res.getContent(); + + final Object content = (res instanceof ExtendedResource) + ? ((ExtendedResource) res).getExtendedContent() + : res.getContent(); + if (content instanceof Path || content instanceof File || content instanceof InputSource) { - long fileLength = -1; - switch (content) { - case Path file -> { - if (!Files.isReadable(file)) { - throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.toAbsolutePath()); + long fileLength = switch (content) { + case Path path -> { + if (!Files.isReadable(path)) { + throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, + "Failed to read resource from file " + path.toAbsolutePath()); } - fileLength = FileUtils.sizeQuietly(file); + yield FileUtils.sizeQuietly(path); } case File file -> { if (!file.canRead()) { - throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Failed to read resource from file " + file.getAbsolutePath()); + throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, + "Failed to read resource from file " + file.getAbsolutePath()); } - fileLength = file.length(); + yield file.length(); } - case EXistInputSource eXistInputSource -> fileLength = eXistInputSource.getByteStreamLength(); - default -> { - } - } + case EXistInputSource eXistInputSource -> eXistInputSource.getByteStreamLength(); + default -> -1; + }; + if (res instanceof AbstractRemoteResource) { ((AbstractRemoteResource) res).dateCreated = a; ((AbstractRemoteResource) res).dateModified = b; } + if (!BINARY_RESOURCE.equals(res.getResourceType()) && fileLength != -1 && fileLength < MAX_CHUNK_LENGTH) { store((RemoteXMLResource) res); } else { uploadAndStore(res); } + } else { ((AbstractRemoteResource) res).dateCreated = a; ((AbstractRemoteResource) res).dateModified = b; diff --git a/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java b/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java index 1466fe2f6e6..ca3f330249a 100644 --- a/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java +++ b/exist-core/src/main/java/org/exist/xquery/functions/math/OneParamFunctions.java @@ -142,10 +142,9 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathExce } else { final NumericValue value = (NumericValue) firstArgument.itemAt(0).convertTo(Type.DOUBLE); - double calcValue = 0; final String functionName = getSignature().getName().getLocalPart(); - calcValue = switch (functionName) { + final double calcValue = switch (functionName) { case ACOS -> Math.acos(value.getDouble()); case ASIN -> Math.asin(value.getDouble()); case ATAN -> Math.atan(value.getDouble()); @@ -157,7 +156,8 @@ public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathExce case SIN -> Math.sin(value.getDouble()); case SQRT -> Math.sqrt(value.getDouble()); case TAN -> Math.tan(value.getDouble()); - case null, default -> throw new XPathException(this, ERROR, "Function " + functionName + " not found."); + case null -> throw new XPathException(this, ERROR, "Function " + functionName + " not found."); + default -> 0; }; return new DoubleValue(this, calcValue); } From 730f52adf420b9d54eb46784b0f831692f9bdb16 Mon Sep 17 00:00:00 2001 From: Dannes Wessels Date: Tue, 11 Mar 2025 23:02:09 +0100 Subject: [PATCH 14/14] [ignore] Remove unused import. --- exist-core/src/main/java/org/exist/storage/NativeBroker.java | 1 - 1 file changed, 1 deletion(-) diff --git a/exist-core/src/main/java/org/exist/storage/NativeBroker.java b/exist-core/src/main/java/org/exist/storage/NativeBroker.java index 7786747b7ac..b0daf00fce6 100644 --- a/exist-core/src/main/java/org/exist/storage/NativeBroker.java +++ b/exist-core/src/main/java/org/exist/storage/NativeBroker.java @@ -85,7 +85,6 @@ import javax.xml.stream.XMLStreamException; import java.io.*; import java.net.URI; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;