diff options
author | Stephan Wahlbrink | 2019-03-13 15:07:57 +0000 |
---|---|---|
committer | Stephan Wahlbrink | 2019-03-14 08:28:01 +0000 |
commit | deb9862590e9327c486a25600b6e10d3b49ca54d (patch) | |
tree | 0a5e5c37f383cca947958933df8ca71df0f6b51f | |
parent | 12cbc1c2609e16bd10014ae017dd475719ec4137 (diff) | |
download | org.eclipse.statet-rj-deb9862590e9327c486a25600b6e10d3b49ca54d.tar.gz org.eclipse.statet-rj-deb9862590e9327c486a25600b6e10d3b49ca54d.tar.xz org.eclipse.statet-rj-deb9862590e9327c486a25600b6e10d3b49ca54d.zip |
[RJ-Server] Improve RJContext/PathEntryProvider
- Add support of path detection for any bundles
- Simplify handling of multiple PathEntryProvider
2 files changed, 39 insertions, 3 deletions
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/PathEntryProvider.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/PathEntryProvider.java index 7e8f8d17..3644c57c 100644 --- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/PathEntryProvider.java +++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/PathEntryProvider.java @@ -77,6 +77,18 @@ public abstract class PathEntryProvider { } } + + @Override + public int hashCode() { + return super.hashCode() + this.namePattern.hashCode() * 17; + } + + @Override + public boolean equals(final @Nullable Object obj) { + return (super.equals(obj) + && this.namePattern.pattern().equals(((JarFilePathEntryProvider) obj).namePattern.pattern()) ); + } + } public static class DevBinPathEntryProvider extends PathEntryProvider { @@ -125,15 +137,15 @@ public abstract class PathEntryProvider { // jar:file:/../rhelp.server-4.0.0-SNAPSHOT.jar!/BOOT-INF/lib/org.eclipse.statet.rj.server-3.0.0-SNAPSHOT.jar!/ private static final String FILE_PROTOCOL_REGEX= "\\Qfile:/\\E"; private static final String JAR_FILE_PROTOCOL_REGEX= "\\Qjar:file:/\\E"; - private static final String SERVER_BUNDLE_ID_REGEX= "\\Q" + ServerUtils.RJ_SERVER_ID + "\\E"; + private static final String BUNDLE_ID_REGEX= "[a-z]+(?:\\.?[a-z]+)*"; private static final String VER_1_REGEX= "\\_\\d+\\.\\d+[^!/]+"; private static final String VER_2_REGEX= "\\-\\d+\\.\\d+[^!/]+"; private static final String JAR_REGEX= "\\Q.jar\\E"; private static final String AUTODETECT_REGEX= "(?:" + - "(" + FILE_PROTOCOL_REGEX + ".*)/" + SERVER_BUNDLE_ID_REGEX + "\\Q/bin/\\E" + // match 1= file: .. + "(" + FILE_PROTOCOL_REGEX + ".*)/" + BUNDLE_ID_REGEX + "\\Q/bin/\\E" + // match 1= file: .. "|" + - "(" + JAR_FILE_PROTOCOL_REGEX + ".*)/" + SERVER_BUNDLE_ID_REGEX + // match 2= jar:file: .. + "(" + JAR_FILE_PROTOCOL_REGEX + ".*)/" + BUNDLE_ID_REGEX + // match 2= jar:file: .. "(?:(" + VER_1_REGEX + ")|(" + VER_2_REGEX + "))?" + // match 3= ver_1, match 4= ver_2 JAR_REGEX + "\\Q!/\\E" + ")"; @@ -143,6 +155,7 @@ public abstract class PathEntryProvider { private static final Pattern JAR_VER_1_PATTERN= Pattern.compile("(.+)" + VER_1_REGEX + JAR_REGEX); //$NON-NLS-1$ private static final Pattern JAR_VER_2_PATTERN= Pattern.compile("(.+)" + VER_2_REGEX + JAR_REGEX); //$NON-NLS-1$ + public static PathEntryProvider detectLibPaths(final Class<?> refClass, final @Nullable List<Path> expliciteBaseDirectories) throws RjInitFailedException { String refUrl= null; @@ -300,4 +313,22 @@ public abstract class PathEntryProvider { protected abstract void getEntries(final Path baseDirectory, final List<PathEntry> entries) throws IOException; + + @Override + public int hashCode() { + return getClass().hashCode() + this.baseDirectories.hashCode(); + } + + @Override + public boolean equals(final @Nullable Object obj) { + if (this == obj) { + return true; + } + if (obj != null && getClass() == obj.getClass()) { + final PathEntryProvider other= (PathEntryProvider) obj; + return (this.baseDirectories.equals(other.baseDirectories)); + } + return false; + } + } diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/RJContext.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/RJContext.java index 73488935..c0968bf6 100644 --- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/RJContext.java +++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/RJContext.java @@ -27,6 +27,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Properties; @@ -80,6 +81,10 @@ public class RJContext { 0, pathEntryProvider); } + public RJContext(final Collection<PathEntryProvider> pathEntryProviders) { + this.libPathEntryProviders= ImCollections.toList(pathEntryProviders); + } + protected RJContext() { } |