class XMLResources implements Comparator<Object> {

	@Override
	@SuppressWarnings({"checkstyle:cyclomaticcomplexity", "checkstyle:npathcomplexity"})
	@Pure
	public int compare(Object o1, Object o2) {
		if (o1 == o2) {
			return 0;
		}
		if (o1 == null) {
			return Integer.MIN_VALUE;
		}
		if (o2 == null) {
			return Integer.MAX_VALUE;
		}

		if (o1 instanceof byte[] && o2 instanceof byte[]) {
			return compareArrays((byte[]) o1, (byte[]) o2);
		} else if (o1 instanceof byte[]) {
			return Integer.MAX_VALUE;
		} else if (o2 instanceof byte[]) {
			return Integer.MIN_VALUE;
		}

		final URL a1;
		final URL a2;
		if (this.pathBuilder != null) {
			if (o1 instanceof URL) {
				a1 = this.pathBuilder.makeAbsolute((URL) o1);
			} else if (o1 instanceof File) {
				a1 = this.pathBuilder.makeAbsolute((File) o1);
			} else {
				throw new IllegalStateException();
			}
			if (o2 instanceof URL) {
				a2 = this.pathBuilder.makeAbsolute((URL) o2);
			} else if (o2 instanceof File) {
				a2 = this.pathBuilder.makeAbsolute((File) o2);
			} else {
				throw new IllegalStateException();
			}
		} else {
			if (o1 instanceof URL) {
				a1 = (URL) o1;
			} else if (o1 instanceof File) {
				try {
					a1 = ((File) o1).toURI().toURL();
				} catch (MalformedURLException e) {
					throw new IllegalStateException(e);
				}
			} else {
				throw new IllegalStateException();
			}
			if (o2 instanceof URL) {
				a2 = (URL) o2;
			} else if (o2 instanceof File) {
				try {
					a2 = ((File) o2).toURI().toURL();
				} catch (MalformedURLException e) {
					throw new IllegalStateException(e);
				}
			} else {
				throw new IllegalStateException();
			}
		}
		return a1.toString().compareTo(a2.toString());
	}

	public  XMLResources(PathBuilder pathBuilder);

}