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    }