001    package de.deepamehta.core.model;
002    
003    import de.deepamehta.core.RelatedTopic;
004    import de.deepamehta.core.Topic;
005    
006    import org.codehaus.jettison.json.JSONArray;
007    import org.codehaus.jettison.json.JSONObject;
008    
009    import java.util.ArrayList;
010    import java.util.List;
011    import java.util.logging.Logger;
012    
013    
014    
015    public enum IndexMode {
016    
017        OFF, KEY, FULLTEXT, FULLTEXT_KEY;
018    
019        private static final String INDEX_MODES_NAMESPACE = "dm4.core.";
020    
021        // -------------------------------------------------------------------------------------------------- Public Methods
022    
023        public static List<IndexMode> fromTopics(List<RelatedTopicModel> topics) {
024            List<IndexMode> indexModes = new ArrayList();
025            for (TopicModel topic : topics) {
026                indexModes.add(fromUri(topic.getUri()));
027            }
028            return indexModes;
029        }
030    
031        public String toUri() {
032            return INDEX_MODES_NAMESPACE + name().toLowerCase();
033        }
034    
035        // ----------------------------------------------------------------------------------------- Package Private Methods
036    
037        static List<IndexMode> parse(JSONObject topicTypeModel) {
038            try {
039                List<IndexMode> indexModes = new ArrayList();
040                JSONArray indexModeUris = topicTypeModel.optJSONArray("index_mode_uris");
041                if (indexModeUris != null) {
042                    for (int i = 0; i < indexModeUris.length(); i++) {
043                        indexModes.add(fromUri(indexModeUris.getString(i)));
044                    }
045                }
046                return indexModes;
047            } catch (Exception e) {
048                throw new RuntimeException("Parsing index modes failed (topicTypeModel=" + topicTypeModel + ")", e);
049            }
050        }
051    
052        static void toJSON(List<IndexMode> indexModes, JSONObject o) throws Exception {
053            List indexModeUris = new ArrayList();
054            for (IndexMode indexMode : indexModes) {
055                indexModeUris.add(indexMode.toUri());
056            }
057            o.put("index_mode_uris", indexModeUris);
058        }
059    
060        // ------------------------------------------------------------------------------------------------- Private Methods
061    
062        private static IndexMode fromUri(String uri) {
063            if (!uri.startsWith(INDEX_MODES_NAMESPACE)) {
064                throw new RuntimeException("\"" + uri + "\" is not a valid index mode URI");
065            }
066            String name = uri.substring(INDEX_MODES_NAMESPACE.length()).toUpperCase();
067            return IndexMode.valueOf(name);
068        }
069    }