2026-03-17 13:31:18 -07:00

497 lines
13 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* javax.baja.nre.util.TextUtil
*/
package javax.baja.file;
import javax.baja.naming.OrdQuery;
import javax.baja.naming.OrdQueryList;
import javax.baja.naming.Path;
import javax.baja.naming.SyntaxException;
import javax.baja.nre.util.TextUtil;
import javax.baja.sys.IllegalNameException;
/*
* Illegal identifiers - consider using --renameillegalidents true
*/
public class FilePath
implements OrdQuery,
Path,
Comparable {
public static final int RELATIVE = 0;
public static final int AUTHORITY_ABSOLUTE = 1;
public static final int LOCAL_ABSOLUTE = 2;
public static final int SYS_HOME_ABSOLUTE = 3;
public static final int STATION_HOME_ABSOLUTE = 4;
private static final String[] NO_NAMES = new String[0];
private String scheme;
private String body;
private int absMode;
private String authority;
private int backupDepth;
private String[] names;
private String fragment;
protected FilePath newInstance(String string) {
return new FilePath(this.getScheme(), string);
}
public boolean isAbsolute() {
boolean bl = false;
if (this.absMode != 0) {
bl = true;
}
return bl;
}
public boolean isRelative() {
boolean bl = false;
if (this.absMode == 0) {
bl = true;
}
return bl;
}
public int getAbsoluteMode() {
return this.absMode;
}
public boolean isAuthorityAbsolute() {
boolean bl = false;
if (this.absMode == 1) {
bl = true;
}
return bl;
}
public boolean isLocalAbsolute() {
boolean bl = false;
if (this.absMode == 2) {
bl = true;
}
return bl;
}
public boolean isSysHomeAbsolute() {
boolean bl = false;
if (this.absMode == 3) {
bl = true;
}
return bl;
}
public boolean isStationHomeAbsolute() {
boolean bl = false;
if (this.absMode == 4) {
bl = true;
}
return bl;
}
public String getAbsoluteBase() {
switch (this.absMode) {
case 0: {
return "";
}
case 1: {
return "//" + this.authority + '/';
}
case 2: {
return "/";
}
case 3: {
return "!";
}
case 4: {
return "^";
}
}
throw new IllegalStateException();
}
public String getAuthority() {
return this.authority;
}
public String getFragment() {
return this.fragment;
}
public String getName() {
if (this.names.length == 0) {
return this.getAbsoluteBase();
}
return this.names[this.names.length - 1];
}
public int getBackupDepth() {
return this.backupDepth;
}
public int depth() {
return this.names.length;
}
public String nameAt(int n) {
return this.names[n];
}
public String[] getNames() {
return (String[])this.names.clone();
}
public Path getParentPath() {
return this.getParent();
}
public FilePath getParent() {
int n;
if (this.names.length == 0) {
return null;
}
StringBuffer stringBuffer = new StringBuffer();
if (this.isAbsolute()) {
stringBuffer.append(this.getAbsoluteBase());
} else {
n = this.getBackupDepth();
int n2 = 0;
while (n2 < n) {
stringBuffer.append("../");
++n2;
}
}
n = 0;
while (n < this.names.length - 1) {
if (n > 0) {
stringBuffer.append('/');
}
stringBuffer.append(this.names[n]);
++n;
}
return this.newInstance(stringBuffer.toString());
}
public static boolean isValidName(String string) {
try {
int n = string.length();
if (n == 0) {
return false;
}
int n2 = 0;
while (n2 < n) {
char c = string.charAt(n2);
if (!FilePath.isName(c) || c == ':') {
return false;
}
++n2;
}
return true;
}
catch (Exception exception) {
return false;
}
}
public static void verifyValidName(String string) {
if (!FilePath.isValidName(string)) {
throw new IllegalNameException("baja", "IllegalNameException.name", new Object[]{string});
}
}
public String getScheme() {
return this.scheme;
}
public String getBody() {
return this.body;
}
public boolean isHost() {
return false;
}
public boolean isSession() {
return false;
}
public void normalize(OrdQueryList ordQueryList, int n) {
if (ordQueryList.isSameScheme(n, n + 1)) {
FilePath filePath = (FilePath)ordQueryList.get(n + 1);
ordQueryList.merge(n, this.merge(filePath));
}
ordQueryList.shiftToSession(n);
}
public FilePath merge(String string) {
return this.merge(this.newInstance(string));
}
public FilePath merge(FilePath filePath) {
if (filePath.isAbsolute()) {
if (this.isAuthorityAbsolute() && !filePath.isAuthorityAbsolute()) {
return this.newInstance("//" + this.authority + filePath.body);
}
return filePath;
}
if (this.isAbsolute() || filePath.getBackupDepth() < this.depth()) {
StringBuffer stringBuffer = new StringBuffer(this.getAbsoluteBase());
boolean bl = false;
int n = 0;
while (n < this.depth() - filePath.getBackupDepth()) {
if (bl) {
stringBuffer.append('/');
} else {
bl = true;
}
stringBuffer.append(this.nameAt(n));
++n;
}
n = 0;
while (n < filePath.depth()) {
if (bl) {
stringBuffer.append('/');
} else {
bl = true;
}
stringBuffer.append(filePath.nameAt(n));
++n;
}
if (filePath.fragment != null) {
stringBuffer.append('#').append(filePath.fragment);
}
return this.newInstance(stringBuffer.toString());
}
throw new SyntaxException("Invalid merge " + this + " + " + filePath);
}
public String toString() {
return this.scheme + ':' + this.body;
}
void parse() {
try {
if (this.body.length() == 0) {
return;
}
String string = this.body;
int n = this.body.indexOf(35);
if (n >= 0) {
this.fragment = this.body.substring(n + 1);
this.body = this.body.substring(0, n);
}
int n2 = this.parsePrefix();
this.parseNames(n2);
this.body = string;
}
catch (SyntaxException syntaxException) {
throw syntaxException;
}
catch (Throwable throwable) {
throw new SyntaxException(this.body, throwable);
}
}
int parsePrefix() {
String string = this.body;
int n = string.length();
int n2 = -1;
if (n > 0) {
n2 = string.charAt(0);
}
int n3 = -1;
if (n > 1) {
n3 = string.charAt(1);
}
if (n2 == 47) {
if (n3 == 47) {
this.absMode = 1;
int n4 = string.indexOf(47, 3);
if (n4 < 0) {
this.authority = string.substring(2, n);
this.checkAuthority(this.authority);
return n;
}
this.authority = string.substring(2, n4);
this.checkAuthority(this.authority);
return n4 + 1;
}
this.absMode = 2;
return this.skipSlash(string, 1);
}
if (n2 == 33) {
this.absMode = 3;
return 1;
}
if (n2 == 94) {
this.absMode = 4;
return 1;
}
if (n2 == 46) {
this.absMode = 0;
return this.parseBackup();
}
this.absMode = 0;
return 0;
}
int parseBackup() {
String string = this.body;
int n = string.length();
if (n == 1) {
throw new SyntaxException("Dot not supported: " + string);
}
char c = string.charAt(1);
if (c != '.') {
if (c == '/') {
throw new SyntaxException("Dot/ not supported: " + string);
}
return 0;
}
int n2 = 0;
while (n2 < n) {
int n3;
char c2 = string.charAt(n2);
int n4 = n2 + 1 < n ? (int)string.charAt(n2 + 1) : -1;
int n5 = n3 = n2 + 2 < n ? (int)string.charAt(n2 + 2) : 47;
if (c2 != '.') {
return n2;
}
if (n4 != 46) {
if (n4 == 47) {
throw new SyntaxException("Single dot unsupported: " + string);
}
return n2;
}
if (n3 != 47) {
throw new SyntaxException("Expecting ../ backup: " + string);
}
++this.backupDepth;
n2 += 3;
}
return n;
}
void parseNames(int n) {
String string;
String string2 = this.body;
int n2 = string2.length();
if (n >= n2) {
return;
}
if (string2.charAt(n2 - 1) == '/') {
throw new SyntaxException("Trailing slash: " + string2);
}
String[] stringArray = new String[64];
int n3 = 0;
int n4 = n;
while (n4 < n2) {
char c = string2.charAt(n4);
if (c == '/') {
if (n4 == n) {
throw new SyntaxException("Illegal double slashes: " + string2);
}
string = string2.substring(n, n4);
if (string.startsWith("..")) {
throw new SyntaxException("Illegal backup in path: " + string2);
}
stringArray[n3++] = string;
n = n4 + 1;
} else if (!FilePath.isName(c)) {
throw new SyntaxException("Illegal char '" + (char)c + "' in body: " + string2);
}
++n4;
}
string = string2.substring(n, n2);
if (string.startsWith("..")) {
throw new SyntaxException("Illegal backup in path: " + string2);
}
stringArray[n3++] = string;
this.names = new String[n3];
System.arraycopy(stringArray, 0, this.names, 0, n3);
}
int skipSlash(String string, int n) {
if (n >= string.length()) {
return n;
}
if (string.charAt(n) == '/') {
return n + 1;
}
return n;
}
void checkAuthority(String string) {
if (string.length() == 0) {
throw new SyntaxException("Missing authority name: " + this.body);
}
int n = 0;
while (n < string.length()) {
if (!FilePath.isAuthority(string.charAt(n))) {
throw new SyntaxException("Illegal char '" + string.charAt(n) + "' in authority: " + this.body);
}
++n;
}
}
public int hashCode() {
return (this.scheme + ':' + this.body).hashCode();
}
public boolean equals(Object object) {
if (!(object instanceof FilePath)) {
return false;
}
if (!this.body.equals(((FilePath)object).body)) {
return false;
}
return this.scheme.equals(((FilePath)object).scheme);
}
public int compareTo(Object object) {
if (!(object instanceof FilePath)) {
return 0;
}
if (!this.scheme.equals(((FilePath)object).scheme)) {
return this.scheme.compareTo(((FilePath)object).scheme);
}
return this.body.compareTo(((FilePath)object).body);
}
static boolean isName(int n) {
boolean bl = false;
if (n <= 31 || n == 127 || n == 34 || n == 92 || n == 60 || n == 62 || n == 63 || n == 42 || n == 47 || n == 124) {
bl = true;
}
return bl ^ true;
}
static boolean isAuthority(int n) {
boolean bl = false;
if (n >= 97 && n <= 122 || n >= 65 && n <= 90 || n >= 48 && n <= 57 || n == 95 || n == 46 || n == 45) {
bl = true;
}
return bl;
}
private final /* synthetic */ void this() {
this.names = NO_NAMES;
}
public FilePath(String string, String string2) throws SyntaxException {
this.this();
this.scheme = TextUtil.toLowerCase((String)string).trim();
this.body = string2.trim();
this.parse();
}
public FilePath(String string) throws SyntaxException {
this.this();
this.scheme = "file";
this.body = string.trim();
this.parse();
}
}