/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses 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 org.apache.stanbol.entityhub.core.impl; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.apache.felix.scr.annotations.ReferencePolicy; import org.apache.felix.scr.annotations.ReferenceStrategy; import org.apache.felix.scr.annotations.Service; import org.apache.stanbol.entityhub.servicesapi.yard.Cache; import org.apache.stanbol.entityhub.servicesapi.yard.Yard; import org.apache.stanbol.entityhub.servicesapi.yard.YardManager; @Component(immediate = true) @Service public class YardManagerImpl implements YardManager { // private static final Logger log = LoggerFactory.getLogger(YardManagerImpl.class); @Reference( cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, referenceInterface=Yard.class, strategy=ReferenceStrategy.EVENT, policy=ReferencePolicy.DYNAMIC, bind="bindYard", unbind="unbindYard") private Map<String,Yard> yards = Collections.emptyMap(); @Reference( cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, referenceInterface=Cache.class, strategy=ReferenceStrategy.EVENT, policy=ReferencePolicy.DYNAMIC, bind="bindCache", unbind="unbindCache") private Map<String,Cache> caches = Collections.emptyMap();// stat with a empty map! // private ComponentContext context; // @Activate // protected void activate(ComponentContext context){ // log.debug("activating "+getClass()+" with "+context); // //nothing to do for now! // this.context = context; // } // @Deactivate // protected void deactivate(ComponentContext context){ // context = null; // } protected void bindYard(Yard yard){ if(yard != null){ Map<String, Yard> tmp = new HashMap<String, Yard>(yards); tmp.put(yard.getId(),yard); this.yards = Collections.unmodifiableMap(tmp); } } protected void unbindYard(Yard yard){ if(yard != null && yards.containsKey(yard.getId())){ Map<String, Yard> tmp = new HashMap<String, Yard>(yards); tmp.remove(yard.getId()); this.yards = Collections.unmodifiableMap(tmp); } } protected void bindCache(Cache cache){ if(cache != null){ Map<String, Cache> tmp = new HashMap<String, Cache>(caches); tmp.put(cache.getId(),cache); this.caches = Collections.unmodifiableMap(tmp); } } protected void unbindCache(Cache cache){ if(cache != null && caches.containsKey(cache.getId())){ Map<String, Cache> tmp = new HashMap<String, Cache>(caches); tmp.remove(cache.getId()); this.caches = Collections.unmodifiableMap(tmp); } } @Override public Yard getYard(String id) { return yards.get(id); } @Override public Collection<String> getYardIDs() { return yards.keySet(); } @Override public boolean isYard(String id) { return yards.containsKey(id); } @Override public Cache getCache(String id) { return caches.get(id); } @Override public Collection<String> getCacheIDs() { return caches.keySet(); } @Override public boolean isCache(String id) { return caches.containsKey(id); } }