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