Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Wahlbrink2019-03-13 15:07:57 +0000
committerStephan Wahlbrink2019-03-14 08:28:01 +0000
commitdeb9862590e9327c486a25600b6e10d3b49ca54d (patch)
tree0a5e5c37f383cca947958933df8ca71df0f6b51f
parent12cbc1c2609e16bd10014ae017dd475719ec4137 (diff)
downloadorg.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
-rw-r--r--core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/PathEntryProvider.java37
-rw-r--r--core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/util/RJContext.java5
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() {
}

Back to the top