001    /*
002     * Copyright 2005,2009 Ivan SZKIBA
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.ini4j;
017    
018    import java.nio.charset.Charset;
019    
020    import java.util.HashMap;
021    import java.util.Map;
022    
023    public interface Registry extends Profile
024    {
025        enum Hive
026        {
027            HKEY_CLASSES_ROOT,
028            HKEY_CURRENT_CONFIG,
029            HKEY_CURRENT_USER,
030            HKEY_LOCAL_MACHINE,
031            HKEY_USERS;
032        }
033    
034        // TODO handle delete operations with special Type
035        enum Type
036        {
037            REG_NONE("hex(0)"),
038            REG_SZ(""),
039            REG_EXPAND_SZ("hex(2)"),
040            REG_BINARY("hex"),
041            REG_DWORD("dword"),
042            REG_DWORD_BIG_ENDIAN("hex(5)"),
043            REG_LINK("hex(6)"),
044            REG_MULTI_SZ("hex(7)"),
045            REG_RESOURCE_LIST("hex(8)"),
046            REG_FULL_RESOURCE_DESCRIPTOR("hex(9)"),
047            REG_RESOURCE_REQUIREMENTS_LIST("hex(a)"),
048            REG_QWORD("hex(b)");
049            private static final Map<String, Type> MAPPING;
050    
051            static
052            {
053                MAPPING = new HashMap<String, Type>();
054                for (Type t : values())
055                {
056                    MAPPING.put(t.toString(), t);
057                }
058            }
059    
060            public static final char SEPARATOR_CHAR = ':';
061            public static final String SEPARATOR = String.valueOf(SEPARATOR_CHAR);
062            public static final char REMOVE_CHAR = '-';
063            public static final String REMOVE = String.valueOf(REMOVE_CHAR);
064            private final String _prefix;
065    
066            private Type(String prefix)
067            {
068                _prefix = prefix;
069            }
070    
071            public static Type fromString(String str)
072            {
073                return MAPPING.get(str);
074            }
075    
076            @Override public String toString()
077            {
078                return _prefix;
079            }
080        }
081    
082        char ESCAPE_CHAR = '\\';
083        Charset FILE_ENCODING = Charset.forName("UnicodeLittle");
084        char KEY_SEPARATOR = '\\';
085        String LINE_SEPARATOR = "\r\n";
086        char TYPE_SEPARATOR = ':';
087        String VERSION = "Windows Registry Editor Version 5.00";
088    
089        String getVersion();
090    
091        void setVersion(String value);
092    
093        @Override Key get(Object key);
094    
095        @Override Key get(Object key, int index);
096    
097        @Override Key put(String key, Section value);
098    
099        @Override Key put(String key, Section value, int index);
100    
101        @Override Key remove(Object key);
102    
103        @Override Key remove(Object key, int index);
104    
105        interface Key extends Section
106        {
107            String DEFAULT_NAME = "@";
108    
109            @Override Key getChild(String key);
110    
111            @Override Key getParent();
112    
113            Type getType(Object key);
114    
115            Type getType(Object key, Type defaulType);
116    
117            @Override Key addChild(String key);
118    
119            @Override Key lookup(String... path);
120    
121            Type putType(String key, Type type);
122    
123            Type removeType(Object key);
124        }
125    }