blob: 50e06f7153c46a22c818d25c6cdeb40424c3785e [file] [log] [blame]
/*
* 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() ;
}
}