001package de.deepamehta.core.service.accesscontrol;
002
003import java.util.HashMap;
004import java.util.Map;
005
006
007
008public enum SharingMode {
009
010    // ### TODO: move to dm4.core namespace?
011    PRIVATE("dm4.workspaces.private"),
012    CONFIDENTIAL("dm4.workspaces.confidential"),
013    COLLABORATIVE("dm4.workspaces.collaborative"),
014    PUBLIC("dm4.workspaces.public"),
015    COMMON("dm4.workspaces.common");
016
017    // ------------------------------------------------------------------------------------------------- Class Variables
018
019    private static Map<String, SharingMode> sharingModes;
020
021    // ---------------------------------------------------------------------------------------------- Instance Variables
022
023    private final String uri;
024
025    // ---------------------------------------------------------------------------------------------------- Constructors
026
027    private SharingMode(String uri) {
028        this.uri = uri;
029        put(uri, this);
030        // sharingModes.put(uri, this);   // ### "illegal reference to static field from initializer"
031    }
032
033    // -------------------------------------------------------------------------------------------------- Public Methods
034
035    public String getUri() {
036        return uri;
037    }
038
039    // Called also by JAX-RS container to get a SharingMode instance from a @PathParam or @QueryParam
040    public static SharingMode fromString(String uri) {
041        SharingMode sharingMode = sharingModes.get(uri);
042        if (sharingMode == null) {
043            throw new RuntimeException("\"" + uri + "\" is an unexpected sharing mode URI");
044        }
045        return sharingMode;
046    }
047
048    // ------------------------------------------------------------------------------------------------- Private Methods
049
050    private void put(String uri, SharingMode sharingMode) {
051        if (sharingModes == null) {
052            sharingModes = new HashMap();
053        }
054        sharingModes.put(uri, sharingMode);
055    }
056}