001 package de.deepamehta.core.service.accesscontrol;
002
003 import java.util.HashMap;
004 import java.util.Map;
005
006
007
008 public 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 }