/*
* 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.permissions.graph.impl;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.jena.permissions.graph.SecuredPrefixMapping;
import org.apache.jena.permissions.impl.ItemHolder;
import org.apache.jena.permissions.impl.SecuredItemImpl;
import org.apache.jena.shared.AuthenticationRequiredException;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.shared.ReadDeniedException;
import org.apache.jena.shared.UpdateDeniedException;
import org.apache.jena.shared.impl.PrefixMappingImpl;
/**
* Implementation of SecuredPrefixMapping to be used by a SecuredItemInvoker
* proxy.
*/
public class SecuredPrefixMappingImpl extends SecuredItemImpl implements
SecuredPrefixMapping {
// the item holder that holds this SecuredPrefixMapping
private final ItemHolder<PrefixMapping, SecuredPrefixMapping> holder;
/**
* Constructor
*
* @param graph
* The Secured graph this mapping is for.
* @param holder
* The item holder that will contain this SecuredPrefixMapping.
*/
SecuredPrefixMappingImpl(final SecuredGraphImpl graph,
final ItemHolder<PrefixMapping, SecuredPrefixMapping> holder) {
super(graph, holder);
this.holder = holder;
}
@Override
public String expandPrefix(final String prefixed)
throws ReadDeniedException, AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().expandPrefix(prefixed);
}
@Override
public Map<String, String> getNsPrefixMap() throws ReadDeniedException,
AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().getNsPrefixMap();
}
@Override
public String getNsPrefixURI(final String prefix)
throws ReadDeniedException, AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().getNsPrefixURI(prefix);
}
@Override
public String getNsURIPrefix(final String uri) throws ReadDeniedException,
AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().getNsURIPrefix(uri);
}
@Override
public SecuredPrefixMapping lock() throws UpdateDeniedException,
AuthenticationRequiredException {
checkUpdate();
holder.getBaseItem().lock();
return holder.getSecuredItem();
}
@Override
public String qnameFor(final String uri) throws ReadDeniedException,
AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().qnameFor(uri);
}
@Override
public SecuredPrefixMapping removeNsPrefix(final String prefix)
throws UpdateDeniedException, AuthenticationRequiredException {
checkUpdate();
holder.getBaseItem().removeNsPrefix(prefix);
return holder.getSecuredItem();
}
@Override
public PrefixMapping clearNsPrefixMap() {
checkUpdate();
holder.getBaseItem().clearNsPrefixMap() ;
return holder.getSecuredItem();
}
@Override
public boolean samePrefixMappingAs(final PrefixMapping other)
throws ReadDeniedException, AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().samePrefixMappingAs(other);
}
@Override
public SecuredPrefixMapping setNsPrefix(final String prefix,
final String uri) throws UpdateDeniedException,
AuthenticationRequiredException {
checkUpdate();
holder.getBaseItem().setNsPrefix(prefix, uri);
return holder.getSecuredItem();
}
@Override
public SecuredPrefixMapping setNsPrefixes(final Map<String, String> map)
throws UpdateDeniedException, AuthenticationRequiredException {
checkUpdate();
holder.getBaseItem().setNsPrefixes(map);
return holder.getSecuredItem();
}
@Override
public SecuredPrefixMapping setNsPrefixes(final PrefixMapping other)
throws UpdateDeniedException, AuthenticationRequiredException {
checkUpdate();
holder.getBaseItem().setNsPrefixes(other);
return holder.getSecuredItem();
}
@Override
public String shortForm(final String uri) throws ReadDeniedException,
AuthenticationRequiredException {
checkRead();
return holder.getBaseItem().shortForm(uri);
}
@Override
public SecuredPrefixMapping withDefaultMappings(final PrefixMapping map)
throws UpdateDeniedException, AuthenticationRequiredException {
// mapping only updates if there are map entries to add. Since this gets
// called
// when we are doing deep triple checks while writing we need to attempt
// the
// update only if there are new updates to add.
PrefixMapping m = holder.getBaseItem();
PrefixMappingImpl pm = new PrefixMappingImpl();
for (Entry<String, String> e : map.getNsPrefixMap().entrySet()) {
if (m.getNsPrefixURI(e.getKey()) == null
&& m.getNsURIPrefix(e.getValue()) == null) {
pm.setNsPrefix(e.getKey(), e.getValue());
}
}
if (!pm.getNsPrefixMap().isEmpty()) {
checkUpdate();
holder.getBaseItem().withDefaultMappings(pm);
}
return holder.getSecuredItem();
}
}