| /* |
| * 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.jena.riot.system; |
| |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.apache.jena.atlas.lib.Pair; |
| import org.apache.jena.atlas.logging.Log; |
| import org.apache.jena.iri.IRI; |
| |
| // UNUSED |
| /** |
| * Implementation of a {@link PrefixMap} which extends another prefix map |
| * without ever altering the parent. |
| * <p> |
| * This allows code to modify a prefix map based off of another map without |
| * modifying that original map. This is somewhat different than simply making a |
| * copy of an existing map since this implementation is partly a view over |
| * another map so will reflect changes that happen to the other map. |
| * </p> |
| */ |
| public class PrefixMapExtended extends PrefixMapBase { |
| PrefixMap parent; |
| PrefixMap local; |
| |
| /** |
| * Creates an extended prefix map |
| * |
| * @param ext |
| * Prefix Map to extend |
| */ |
| public PrefixMapExtended(PrefixMap ext) { |
| if (ext == null) |
| throw new IllegalArgumentException("Prefix Map to extend cannot be null"); |
| this.parent = ext; |
| this.local = PrefixMapFactory.create(); |
| } |
| |
| @Override |
| public void add(String prefix, IRI iri) { |
| prefix = canonicalPrefix(prefix); |
| // Add to local always. |
| local.add(prefix, iri); |
| } |
| |
| @Override |
| public void delete(String prefix) { |
| prefix = canonicalPrefix(prefix); |
| local.delete(prefix); |
| if (parent.contains(prefix)) |
| Log.warn(this, "Attempt to delete a prefix in the parent"); |
| } |
| |
| @Override |
| public void clear() { |
| local.clear(); |
| // if (!parent.isEmpty() ) |
| // Log.warn(this, "clear() : Parent not empty") ; |
| } |
| |
| @Override |
| public String expand(String prefix, String localName) { |
| prefix = canonicalPrefix(prefix); |
| String x = local.expand(prefix, localName); |
| if (x != null) |
| return x; |
| return parent.expand(prefix, localName); |
| } |
| |
| @Override |
| public Map<String, IRI> getMapping() { |
| Map<String, IRI> mapping = new HashMap<>(); |
| mapping.putAll(parent.getMapping()); |
| mapping.putAll(local.getMapping()); |
| return Collections.unmodifiableMap(mapping); |
| } |
| |
| @Override |
| public boolean contains(String prefix) { |
| return local.contains(prefix) || parent.contains(prefix); |
| } |
| |
| @Override |
| public String abbreviate(String uriStr) { |
| String x = local.abbreviate(uriStr); |
| if (x != null) |
| return x; |
| return parent.abbreviate(uriStr); |
| } |
| |
| @Override |
| public Pair<String, String> abbrev(String uriStr) { |
| Pair<String, String> p = local.abbrev(uriStr); |
| if (p != null) |
| return p; |
| return parent.abbrev(uriStr); |
| } |
| |
| @Override |
| public boolean isEmpty() |
| { |
| return parent.isEmpty() && local.isEmpty() ; |
| } |
| |
| @Override |
| public int size() |
| { |
| return parent.size() + local.size() ; |
| } |
| } |