/**
* Copyright 2015 Santhosh Kumar Tekuri
*
* The JLibs authors license this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package jlibs.xml.sax.binding.impl;
import jlibs.xml.QNameFake;
import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.Map;
/**
* @author Santhosh Kumar T
*/
public class Registry{
public static final String STAR = "*";
public static final QName ANY = new QName(STAR, STAR);
public Map<QName, BindingRelation> registry;
public Registry register(QName qname, int bindingState, Binding binding, int relationState, Relation relation){
if(registry ==null)
registry = new HashMap<QName, BindingRelation>();
BindingRelation bindingRelation = new BindingRelation(qname, bindingState, binding, relationState, relation);
registry.put(qname, bindingRelation);
return bindingRelation.binding.registry;
}
public void register(QName qname, int bindingState, Binding binding){
register(qname, bindingState, binding, 0, TempRelation.PUT);
}
public void register(QName qname){
register(qname, 0, TextBinding.INSTANCE);
}
public void register(QName qname, int relationState, Relation relation){
register(qname, 0, TextBinding.INSTANCE, relationState, relation);
}
@SuppressWarnings({"SuspiciousMethodCalls"})
public BindingRelation get(QNameFake qname){
if(registry==null)
return null;
else{
BindingRelation br = registry.get(qname);
String namespaceURI = qname.namespaceURI;
String localPart = qname.localPart;
if(br==null)
br = registry.get(qname.set(STAR, localPart));
if(br==null)
br = registry.get(qname.set(namespaceURI, STAR));
if(br==null)
br = registry.get(ANY);
return br;
}
}
}