1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/BaseFileObject.java Wed Oct 02 21:00:24 2013 +0200
1.3 @@ -0,0 +1,98 @@
1.4 +/*
1.5 + * To change this license header, choose License Headers in Project Properties.
1.6 + * To change this template file, choose Tools | Templates
1.7 + * and open the template in the editor.
1.8 + */
1.9 +
1.10 +package org.apidesign.bck2brwsr.dew;
1.11 +
1.12 +import java.net.URI;
1.13 +import javax.lang.model.element.Modifier;
1.14 +import javax.lang.model.element.NestingKind;
1.15 +
1.16 +/**
1.17 + *
1.18 + * @author tom
1.19 + */
1.20 +public abstract class BaseFileObject implements InferableJavaFileObject {
1.21 +
1.22 + protected final String path;
1.23 + protected final Kind kind;
1.24 +
1.25 + BaseFileObject(
1.26 + String path,
1.27 + Kind kind) {
1.28 + if (!path.startsWith("/")) { //NOI18N
1.29 + throw new IllegalArgumentException();
1.30 + }
1.31 + this.path = path;
1.32 + this.kind = kind;
1.33 + }
1.34 +
1.35 +
1.36 + @Override
1.37 + public String infer() {
1.38 + return ClassLoaderFileManager.convertResourceToFQN(path);
1.39 + }
1.40 +
1.41 + @Override
1.42 + public Kind getKind() {
1.43 + return kind;
1.44 + }
1.45 +
1.46 + @Override
1.47 + public boolean isNameCompatible(String simpleName, Kind kind) {
1.48 + return this.kind == kind &&
1.49 + getSimpleName(path).equals(simpleName);
1.50 + }
1.51 +
1.52 + @Override
1.53 + public NestingKind getNestingKind() {
1.54 + return null;
1.55 + }
1.56 +
1.57 + @Override
1.58 + public Modifier getAccessLevel() {
1.59 + return null;
1.60 + }
1.61 +
1.62 + @Override
1.63 + public URI toUri() {
1.64 + return URI.create(escape(path));
1.65 + }
1.66 +
1.67 + @Override
1.68 + public String getName() {
1.69 + return path;
1.70 + }
1.71 +
1.72 +
1.73 +
1.74 + protected static String getSimpleName(String path) {
1.75 + int slashIndex = path.lastIndexOf('/');
1.76 + assert slashIndex >= 0;
1.77 + return (slashIndex + 1 < path.length()) ?
1.78 + path.substring(slashIndex + 1) :
1.79 + ""; //NOI18N
1.80 + }
1.81 +
1.82 + protected static Kind getKind(final String path) {
1.83 + final String simpleName = getSimpleName(path);
1.84 + final int dotIndex = simpleName.lastIndexOf('.'); //NOI18N
1.85 + final String ext = dotIndex > 0 ?
1.86 + simpleName.substring(dotIndex) :
1.87 + "";
1.88 + for (Kind k : Kind.values()) {
1.89 + if (k.extension.equals(ext)) {
1.90 + return k;
1.91 + }
1.92 + }
1.93 + return Kind.OTHER;
1.94 + }
1.95 +
1.96 + private String escape(String path) {
1.97 + return path;
1.98 + }
1.99 +
1.100 +
1.101 +}