/**
 *  Syntax
 *  Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt am Main, Germany
 *  First released 17.12.2011 at https://yacy.net
 *
 *  $LastChangedDate: 2011-04-14 00:04:23 +0200 (Do, 14 Apr 2011) $
 *  $LastChangedRevision: 7653 $
 *  $LastChangedBy: orbiter $
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *  
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *  
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program in the file lgpl21.txt
 *  If not, see <http://www.gnu.org/licenses/>.
 */

package net.yacy.cora.lod;

import java.util.HashMap;
import java.util.Map;

import net.yacy.cora.lod.vocabulary.CreativeCommons;
import net.yacy.cora.lod.vocabulary.DublinCore;
import net.yacy.cora.lod.vocabulary.Foaf;
import net.yacy.cora.lod.vocabulary.Geo;
import net.yacy.cora.lod.vocabulary.HttpHeader;
import net.yacy.cora.lod.vocabulary.Rdf;
import net.yacy.cora.lod.vocabulary.YaCyMetadata;

/**
 * helper class to understand xml tags and vocabularies
 */
public class Syntax {

    private final static Class<?>[] vocabularies = new Class<?>[]{
        CreativeCommons.class,
        DublinCore.class,
        Foaf.class,
        Geo.class,
        HttpHeader.class,
        Rdf.class,
        YaCyMetadata.class
    };
    
    private final static Map<String, Vocabulary> tagMap = new HashMap<String, Vocabulary>();
    
    static {
        Vocabulary voc;
        for (Class<?> v: vocabularies) {
            Object[] cs = v.getEnumConstants();
            for (Object c: cs) {
                voc = (Vocabulary) c;
                tagMap.put(voc.getPredicate(), voc);
            }
        }
    }
    
    /**
     * recognizer for vocabulary tag names
     * @param tag
     * @return the vocabulary object for the given tag
     */
    public static Vocabulary getVocabulary(String tag) {
        return tagMap.get(tag);
    }
    
    public static void main(String[] args) {
        System.out.println(tagMap);
    }
}
