dew/src/main/java/org/apidesign/bck2brwsr/dew/BaseFileObject.java
author tzezula
Wed, 02 Oct 2013 21:00:24 +0200
changeset 1324 263482b074e9
child 1326 8ae6a6c42b5f
permissions -rw-r--r--
ClassLoaderFileManager
tzezula@1324
     1
/*
tzezula@1324
     2
 * To change this license header, choose License Headers in Project Properties.
tzezula@1324
     3
 * To change this template file, choose Tools | Templates
tzezula@1324
     4
 * and open the template in the editor.
tzezula@1324
     5
 */
tzezula@1324
     6
tzezula@1324
     7
package org.apidesign.bck2brwsr.dew;
tzezula@1324
     8
tzezula@1324
     9
import java.net.URI;
tzezula@1324
    10
import javax.lang.model.element.Modifier;
tzezula@1324
    11
import javax.lang.model.element.NestingKind;
tzezula@1324
    12
tzezula@1324
    13
/**
tzezula@1324
    14
 *
tzezula@1324
    15
 * @author tom
tzezula@1324
    16
 */
tzezula@1324
    17
public abstract class BaseFileObject implements InferableJavaFileObject {
tzezula@1324
    18
tzezula@1324
    19
    protected final String path;
tzezula@1324
    20
    protected final Kind kind;
tzezula@1324
    21
tzezula@1324
    22
    BaseFileObject(
tzezula@1324
    23
        String path,
tzezula@1324
    24
        Kind kind) {
tzezula@1324
    25
        if (!path.startsWith("/")) {    //NOI18N
tzezula@1324
    26
            throw new IllegalArgumentException();
tzezula@1324
    27
        }
tzezula@1324
    28
        this.path = path;
tzezula@1324
    29
        this.kind = kind;
tzezula@1324
    30
    }
tzezula@1324
    31
tzezula@1324
    32
tzezula@1324
    33
    @Override
tzezula@1324
    34
    public String infer() {
tzezula@1324
    35
        return ClassLoaderFileManager.convertResourceToFQN(path);
tzezula@1324
    36
    }
tzezula@1324
    37
tzezula@1324
    38
    @Override
tzezula@1324
    39
    public Kind getKind() {
tzezula@1324
    40
        return kind;
tzezula@1324
    41
    }
tzezula@1324
    42
tzezula@1324
    43
    @Override
tzezula@1324
    44
    public boolean isNameCompatible(String simpleName, Kind kind) {
tzezula@1324
    45
        return this.kind == kind &&
tzezula@1324
    46
        getSimpleName(path).equals(simpleName);
tzezula@1324
    47
    }
tzezula@1324
    48
tzezula@1324
    49
    @Override
tzezula@1324
    50
    public NestingKind getNestingKind() {
tzezula@1324
    51
        return null;
tzezula@1324
    52
    }
tzezula@1324
    53
tzezula@1324
    54
    @Override
tzezula@1324
    55
    public Modifier getAccessLevel() {
tzezula@1324
    56
        return null;
tzezula@1324
    57
    }
tzezula@1324
    58
tzezula@1324
    59
    @Override
tzezula@1324
    60
    public URI toUri() {
tzezula@1324
    61
        return URI.create(escape(path));
tzezula@1324
    62
    }
tzezula@1324
    63
tzezula@1324
    64
    @Override
tzezula@1324
    65
    public String getName() {
tzezula@1324
    66
        return path;
tzezula@1324
    67
    }
tzezula@1324
    68
tzezula@1324
    69
tzezula@1324
    70
tzezula@1324
    71
    protected static String getSimpleName(String path) {
tzezula@1324
    72
        int slashIndex = path.lastIndexOf('/');
tzezula@1324
    73
        assert slashIndex >= 0;
tzezula@1324
    74
        return (slashIndex + 1 < path.length()) ?
tzezula@1324
    75
            path.substring(slashIndex + 1) :
tzezula@1324
    76
            ""; //NOI18N
tzezula@1324
    77
    }
tzezula@1324
    78
tzezula@1324
    79
    protected static Kind getKind(final String path) {
tzezula@1324
    80
        final String simpleName = getSimpleName(path);
tzezula@1324
    81
        final int dotIndex = simpleName.lastIndexOf('.'); //NOI18N
tzezula@1324
    82
        final String ext = dotIndex > 0 ?
tzezula@1324
    83
            simpleName.substring(dotIndex) :
tzezula@1324
    84
            "";
tzezula@1324
    85
        for (Kind k : Kind.values()) {
tzezula@1324
    86
            if (k.extension.equals(ext)) {
tzezula@1324
    87
                return k;
tzezula@1324
    88
            }
tzezula@1324
    89
        }
tzezula@1324
    90
        return Kind.OTHER;
tzezula@1324
    91
    }
tzezula@1324
    92
tzezula@1324
    93
    private String escape(String path) {
tzezula@1324
    94
        return path;
tzezula@1324
    95
    }
tzezula@1324
    96
tzezula@1324
    97
tzezula@1324
    98
}