http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFListImpl.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFListImpl.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFListImpl.java deleted file mode 100644 index 86c4251..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFListImpl.java +++ /dev/null @@ -1,1058 +0,0 @@ -/* - * 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.security.model.impl; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.rdf.model.* ; -import org.apache.jena.security.AccessDeniedException; -import org.apache.jena.security.SecurityEvaluator; -import org.apache.jena.security.SecurityEvaluator.Action; -import org.apache.jena.security.impl.ItemHolder; -import org.apache.jena.security.impl.SecuredItemImpl; -import org.apache.jena.security.impl.SecuredItemInvoker; -import org.apache.jena.security.model.SecuredModel; -import org.apache.jena.security.model.SecuredRDFList; -import org.apache.jena.security.model.SecuredRDFNode; -import org.apache.jena.security.utils.RDFListIterator; -import org.apache.jena.security.utils.RDFListSecFilter; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.Map1 ; -import org.apache.jena.util.iterator.WrappedIterator ; -import org.apache.jena.vocabulary.RDF ; - -public class SecuredRDFListImpl extends SecuredResourceImpl implements - SecuredRDFList -{ - // called plain node but still returns a secured node - private class PlainNodeMap implements Map1<RDFList, RDFNode> - { - - @Override - public RDFNode map1( final RDFList o ) - { - return SecuredRDFNodeImpl.getInstance(getModel(), o - .getRequiredProperty(listFirst()).getObject()); - } - - } - - private class SecuredListMap implements Map1<RDFList, SecuredRDFList> - { - - @Override - public SecuredRDFList map1( final RDFList o ) - { - return SecuredRDFListImpl.getInstance(getModel(), o); - } - - } - - private class SecuredNodeMap implements Map1<RDFList, SecuredRDFNode> - { - - private Property p; - public SecuredNodeMap(Property p) - { - this.p=p; - } - - @Override - public SecuredRDFNode map1( final RDFList o ) - { - return SecuredRDFNodeImpl.getInstance(getModel(), o - .getRequiredProperty(p).getObject()); - } - - } - - /* - * private class SecuredRDFListIterator implements Iterator<SecuredRDFList> - * { - * private SecuredRDFList current; - * private Boolean found; - * private final Set<Action> restrictions; - * - * private SecuredRDFListIterator( final Action restriction ) - * { - * this(SecurityEvaluator.Util.asSet(new Action[] { restriction })); - * } - * - * private SecuredRDFListIterator( final Set<Action> restrictions ) - * { - * this.current = SecuredRDFListImpl.this.holder.getSecuredItem(); - * this.restrictions = restrictions; - * } - * - * private boolean checkCandidate() - * { - * if (!endOfList()) - * { - * final SecNode candidate = current.getRequiredProperty(listFirst()) - * .getObject().asNode(); - * return getSecurityEvaluator().evaluate( - * restrictions, - * getModelNode(), - * new SecurityEvaluator.SecTriple(SecuredItemImpl - * .convert(current.asNode()), SecuredItemImpl - * .convert(RDF.first.asNode()), SecuredItemImpl - * .convert(candidate))); - * } - * return false; - * } - * - * private boolean endOfList() - * { - * return current.equals(listNil()); - * } - * - * @Override - * public boolean hasNext() - * { - * if ((found == null) && !endOfList()) - * { - * found = checkCandidate(); - * while (!found && !endOfList()) - * { - * incrementCurrent(); - * found = checkCandidate(); - * } - * } - * return found == null ? false : found; - * } - * - * private void incrementCurrent() - * { - * if (!endOfList()) - * { - * current = (SecuredRDFList) current - * .getRequiredProperty(listRest()).getResource() - * .as(RDFList.class); - * } - * } - * - * @Override - * public SecuredRDFList next() - * { - * if (hasNext()) - * { - * found = null; - * final SecuredRDFList retval = current; - * incrementCurrent(); - * return retval; - * } - * throw new NoSuchElementException(); - * } - * - * @Override - * public void remove() - * { - * throw new UnsupportedOperationException(); - * } - * - * } - */ - /** - * Get an instance of SecuredProperty - * - * @param securedModel - * the Secured Model to use. - * @param rdfList - * The rdfList to secure - * @return The SecuredProperty - */ - public static <T extends RDFList> SecuredRDFList getInstance( final SecuredModel securedModel, - final T rdfList ) - { - if (securedModel == null) - { - throw new IllegalArgumentException( - "Secured securedModel may not be null"); - } - if (rdfList == null) - { - throw new IllegalArgumentException("RDFList may not be null"); - } - - // check that property has a securedModel. - RDFList goodList = rdfList; - if (goodList.getModel() == null) - { - goodList = securedModel.createList(rdfList.asJavaList().iterator()); - } - - final ItemHolder<RDFList, SecuredRDFList> holder = new ItemHolder<RDFList, SecuredRDFList>( - goodList); - final SecuredRDFListImpl checker = new SecuredRDFListImpl(securedModel, - holder); - // if we are going to create a duplicate proxy, just return this - // one. - if (goodList instanceof SecuredRDFList) - { - if (checker.isEquivalent((SecuredRDFList) goodList)) - { - return (SecuredRDFList) goodList; - } - } - return holder.setSecuredItem(new SecuredItemInvoker(rdfList.getClass(), - checker)); - } - - /** Error message if validity check fails */ - protected String m_errorMsg = null; - - /** Pointer to the node that is the tail of the list */ - protected RDFList m_tail = null; - - /** The URI for the 'first' property in this list */ - protected Property m_listFirst = RDF.first; - - /** The URI for the 'rest' property in this list */ - protected Property m_listRest = RDF.rest; - - /** The URI for the 'nil' Resource in this list */ - protected Resource m_listNil = RDF.nil; - - /** The URI for the rdf:type of this list */ - protected Resource m_listType = RDF.List; - - private final ItemHolder<RDFList, SecuredRDFList> holder; - - protected SecuredRDFListImpl( final SecuredModel securedModel, - final ItemHolder<RDFList, SecuredRDFList> holder ) - { - super(securedModel, holder); - this.holder = holder; - } - - @Override - public void add( final RDFNode value ) - { - checkUpdate(); - checkCreateNewList(value, listNil()); - holder.getBaseItem().add(value); - } - - @Override - public SecuredRDFList append( final Iterator<? extends RDFNode> nodes ) - { - SecuredRDFList copy = copy(); - if (nodes.hasNext()) - { - if (((RDFList)copy.getBaseItem()).size()>0) -// if (copy.size() > 0) - { - copy.concatenate(copy.getModel().createList(nodes)); - } - else - { - copy = copy.getModel().createList(nodes); - } - } - return copy; - } - - @Override - public RDFList append( final RDFList list ) - { - if (holder.getBaseItem().isEmpty()) - { - return list.size() == 0 ? ModelFactory.createDefaultModel() - .createList() : list.copy(); - } - else - { - final RDFList copy = copy(); - if (list.size() > 0) - { - copy.concatenate(list.copy()); - } - return copy; - } - } - - @Override - public void apply( final ApplyFn fn ) - { - // iterator() checks Read - final ExtendedIterator<RDFNode> i = iterator(); - try - { - while (i.hasNext()) - { - fn.apply(i.next()); - } - } - finally - { - i.close(); - } - } - - @Override - public void apply( final Set<Action> perms, final ApplyFn fn ) - { - // iterator() checks Read - final ExtendedIterator<RDFNode> i = iterator(perms); - try - { - while (i.hasNext()) - { - fn.apply(i.next()); - } - } - finally - { - i.close(); - } - } - - @Override - public List<RDFNode> asJavaList() - { - // iterator() checks Read - return iterator().toList(); - } - - /** - * Removes val from underlying list. - * - * @param val - * @return the modified RDFList. - */ - private RDFList baseRemove( final RDFList val ) - { - - RDFList prev = null; - RDFList cell = holder.getBaseItem(); - final boolean searching = true; - - while (searching && !cell.isEmpty()) - { - if (cell.equals(val)) - { - // found the value to be removed - final RDFList tail = cell.getTail(); - if (prev != null) - { - prev.setTail(tail); - } - - cell.removeProperties(); - - // return this unless we have removed the head element - return (prev == null) ? tail : this; - } - else - { - // not found yet - prev = cell; - cell = cell.getTail(); - } - } - - // not found - return this; - } - - private void checkCreateNewList( final RDFNode value, final Resource tail ) - { - checkCreate(new SecurityEvaluator.SecTriple( - SecurityEvaluator.SecNode.FUTURE, - SecuredItemImpl.convert(listFirst().asNode()), - SecuredItemImpl.convert(value.asNode()))); - checkCreate(new SecurityEvaluator.SecTriple( - SecurityEvaluator.SecNode.FUTURE, - SecuredItemImpl.convert(listRest().asNode()), - SecuredItemImpl.convert(tail.asNode()))); - } - - private Set<Statement> collectStatements( final Set<Action> actions ) - { - final Set<Statement> stmts = new HashSet<Statement>(); - final ExtendedIterator<RDFList> iter = WrappedIterator.create( - new RDFListIterator(holder.getBaseItem())).filterKeep( - new RDFListSecFilter<RDFList>(this, actions)); - try - { - while (iter.hasNext()) - { - stmts.addAll(iter.next().listProperties().toSet()); - } - return stmts; - } - finally - { - iter.close(); - } - } - - @Override - public void concatenate( final Iterator<? extends RDFNode> nodes ) - { - checkUpdate(); - if (holder.getBaseItem().isEmpty()) - { - // concatenating list onto the empty list is an error - throw new EmptyListUpdateException( - "Tried to concatenate onto the empty list"); - } - else - { - final org.apache.jena.security.SecurityEvaluator.SecNode p = SecuredItemImpl - .convert(listFirst().asNode()); - org.apache.jena.security.SecurityEvaluator.SecTriple t = new org.apache.jena.security.SecurityEvaluator.SecTriple( - org.apache.jena.security.SecurityEvaluator.SecNode.FUTURE, - p, org.apache.jena.security.SecurityEvaluator.SecNode.ANY); - if (!canCreate(t)) - { - final List<RDFNode> list = new ArrayList<RDFNode>(); - while (nodes.hasNext()) - { - final RDFNode n = nodes.next(); - t = new org.apache.jena.security.SecurityEvaluator.SecTriple( - org.apache.jena.security.SecurityEvaluator.SecNode.FUTURE, - p, SecuredItemImpl.convert(n.asNode())); - checkCreate(t); - list.add(n); - } - holder.getBaseItem().concatenate(list.iterator()); - - } - else - { - holder.getBaseItem().concatenate(nodes); - } - } - } - - @Override - public void concatenate( final RDFList list ) - { - checkUpdate(); - if (holder.getBaseItem().isEmpty()) - { - // concatenating list onto the empty list is an error - throw new EmptyListUpdateException( - "Tried to concatenate onto the empty list"); - } - else - { - final org.apache.jena.security.SecurityEvaluator.SecNode p = SecuredItemImpl - .convert(listFirst().asNode()); - org.apache.jena.security.SecurityEvaluator.SecTriple t = new org.apache.jena.security.SecurityEvaluator.SecTriple( - org.apache.jena.security.SecurityEvaluator.SecNode.FUTURE, - p, org.apache.jena.security.SecurityEvaluator.SecNode.ANY); - if (!canCreate(t)) - { - final ExtendedIterator<RDFNode> iter = list.iterator(); - try - { - while (iter.hasNext()) - { - t = new org.apache.jena.security.SecurityEvaluator.SecTriple( - org.apache.jena.security.SecurityEvaluator.SecNode.FUTURE, - p, SecuredItemImpl - .convert(iter.next().asNode())); - checkCreate(t); - } - } - finally - { - iter.close(); - } - } - holder.getBaseItem().concatenate(list); - } - } - - @Override - public SecuredRDFList cons( final RDFNode value ) - { - checkUpdate(); - checkCreateNewList(value, holder.getBaseItem()); - return SecuredRDFListImpl.getInstance(getModel(), holder.getBaseItem() - .cons(value)); - } - - @Override - public boolean contains( final RDFNode value ) - { - // iterator() checks Read - final ExtendedIterator<RDFNode> iter = iterator(); - try - { - while (iter.hasNext()) - { - if (value.equals(iter.next())) - { - return true; - } - } - return false; - } - finally - { - iter.close(); - } - } - - @Override - public SecuredRDFList copy() - { - SecuredRDFList retval = null; - if (canRead()) - { - final ExtendedIterator<RDFNode> iter = getSecuredRDFListIterator(Action.Read) - .mapWith( new Map1<RDFList, RDFNode>() - { - - @Override - public RDFNode map1( final RDFList o ) - { - return o.getRequiredProperty(listFirst()).getObject(); - } - - }); - if (iter.hasNext()) - { - retval = getModel().createList(iter); - } - else - { - retval = getModel().createList(); - } - } - else - { - retval = getModel().createList(); - } - return retval; - } - - @Override - public SecuredRDFNode get( final int i ) - { - checkRead(); - final ExtendedIterator<SecuredRDFNode> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredNodeMap(listFirst())); - int idx = 0; - try - { - while (iter.hasNext()) - { - if (i == idx) - { - return iter.next(); - } - else - { - idx++; - iter.next(); - } - - } - throw new ListIndexException(); - } - finally - { - iter.close(); - } - } - - @Override - public SecuredRDFNode getHead() - { - checkRead(); - Statement s = holder.getBaseItem().getRequiredProperty( listFirst() ); - checkRead( s ); - return SecuredRDFNodeImpl.getInstance(getModel(), s.getObject()); - } - - private ExtendedIterator<RDFList> getSecuredRDFListIterator( - final Action perm ) - { - return WrappedIterator - .create(new RDFListIterator(holder.getBaseItem())).filterKeep( - new RDFListSecFilter<RDFList>(this, perm)); - } - - private ExtendedIterator<RDFList> getSecuredRDFListIterator( - final Set<Action> perm ) - { - return WrappedIterator - .create(new RDFListIterator(holder.getBaseItem())).filterKeep( - new RDFListSecFilter<RDFList>(this, perm)); - } - - @Override - public boolean getStrict() - { - return holder.getBaseItem().getStrict(); - } - - @Override - public SecuredRDFList getTail() - { - checkRead(); - Statement s = holder.getBaseItem().getRequiredProperty( listRest() ); - checkRead( s ); - return SecuredRDFListImpl.getInstance(getModel(), s.getObject().as(RDFList.class)); - } - - @Override - public String getValidityErrorMessage() - { - checkRead(); - return holder.getBaseItem().getValidityErrorMessage(); - } - - @Override - public int indexOf( final RDFNode value ) - { - checkRead(); - final ExtendedIterator<SecuredRDFNode> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredNodeMap(listFirst())); - try - { - int retval = 0; - while (iter.hasNext()) - { - if (value.equals(iter.next())) - { - return retval; - } - else - { - retval++; - } - } - return -1; - } - finally - { - iter.close(); - } - } - - @Override - public int indexOf( final RDFNode value, final int start ) - { - checkRead(); - final ExtendedIterator<SecuredRDFNode> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredNodeMap(listFirst())); - try - { - int retval = 0; - while (iter.hasNext() && (retval < start)) - { - iter.next(); - retval++; - } - while (iter.hasNext()) - { - if (value.equals(iter.next())) - { - return retval; - } - else - { - retval++; - } - } - return -1; - } - finally - { - iter.close(); - } - } - - @Override - public boolean isEmpty() - { - checkRead(); - final ExtendedIterator<RDFNode> iter = iterator(); - try - { - return !iter.hasNext(); - } - finally - { - iter.close(); - } - } - - @Override - public boolean isValid() - { - checkRead(); - return holder.getBaseItem().isValid(); - } - - @Override - public ExtendedIterator<RDFNode> iterator() - { - checkRead(); - return getSecuredRDFListIterator(Action.Read).mapWith( - new PlainNodeMap()); - - } - - @Override - public ExtendedIterator<RDFNode> iterator( final Set<Action> constraints ) - { - checkRead(); - final Set<Action> req = new HashSet<Action>(constraints); - req.add(Action.Read); - return getSecuredRDFListIterator(req).mapWith(new PlainNodeMap()); - - } - - public Class<? extends RDFList> listAbstractionClass() - { - return RDFList.class; - } - - public Property listFirst() - { - return m_listFirst; - } - - public Resource listNil() - { - return m_listNil; - } - - public Property listRest() - { - return m_listRest; - } - - public Resource listType() - { - return m_listType; - } - - @Override - public <T> ExtendedIterator<T> mapWith( final Map1<RDFNode, T> fn ) - { - return iterator().mapWith(fn); - } - - @Override - public Object reduce( final ReduceFn fn, final Object initial ) - { - Object acc = initial; - - for (final Iterator<RDFNode> i = iterator(); i.hasNext();) - { - acc = fn.reduce(i.next(), acc); - } - - return acc; - } - - @Override - public Object reduce( final Set<Action> requiredActions, final ReduceFn fn, - final Object initial ) throws AccessDeniedException, - EmptyListException, ListIndexException, InvalidListException - { - Object acc = initial; - final Set<Action> perms = new HashSet<Action>(requiredActions); - perms.add(Action.Read); - for (final Iterator<RDFNode> i = iterator(perms); i.hasNext();) - { - acc = fn.reduce(i.next(), acc); - } - - return acc; - } - - @Override - public RDFList remove( final RDFNode val ) - { - checkUpdate(); - RDFList cell = null; - boolean denied = false; - - if (!canDelete(new Triple(Node.ANY, listFirst().asNode(), val.asNode()))) - { - // iterate over the deletable items - final ExtendedIterator<RDFList> iter = getSecuredRDFListIterator(Action.Delete);// .mapWith(new - // SecuredListMap()); - while (iter.hasNext()) - { - cell = iter.next(); - - if (val.equals(cell.getRequiredProperty(listFirst()) - .getObject())) - { - if (canDelete(new Triple(cell.asNode(), listFirst() - .asNode(), val.asNode()))) - { - return SecuredRDFListImpl.getInstance(getModel(), - baseRemove(cell)); - - } - else - { - denied = true; - } - } - } - if (denied) - { - throw new AccessDeniedException(getModelNode(), Action.Delete); - } - else - { - return this; - } - } - else - { - return SecuredRDFListImpl.getInstance(getModel(), holder - .getBaseItem().remove(val)); - } - } - - @Override - @Deprecated - public void removeAll() - { - removeList(); - } - - @Override - public SecuredRDFList removeHead() - { - checkUpdate(); - final ExtendedIterator<SecuredRDFList> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredListMap()); - try - { - if (!iter.hasNext()) - { - throw new EmptyListException( - "Attempted to delete the head of a nil list"); - } - final SecuredRDFList cell = iter.next(); - final Statement s = cell.getRequiredProperty(RDF.first); - checkDelete(s); - return SecuredRDFListImpl.getInstance(getModel(), baseRemove(cell)); - - } - finally - { - iter.close(); - } - } - - @Override - public void removeList() - { - checkUpdate(); - final Triple t = new Triple(Node.ANY, listFirst().asNode(), Node.ANY); - /* - * if (!canRead(t)) - * { - * throw new EmptyListException( - * "Attempted to delete the head of a nil list" ); - * } - */ - // have to be able to read and delete to delete all. - final Set<Action> perms = SecurityEvaluator.Util.asSet(new Action[] { - Action.Delete, Action.Read }); - if (getSecurityEvaluator().evaluate(getSecurityEvaluator().getPrincipal(), perms, this.getModelNode(), - SecuredItemImpl.convert(t))) - { - holder.getBaseItem().removeList(); - } - else - { - for (final Statement s : collectStatements(perms)) - { - if (canDelete(s.asTriple())) - { - s.remove(); - } - } - } - } - - @Override - public SecuredRDFNode replace( final int i, final RDFNode value ) - { - checkUpdate(); - final SecuredNodeMap map = new SecuredNodeMap(listFirst()); - final ExtendedIterator<SecuredRDFList> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredListMap()); - int idx = 0; - try - { - while (iter.hasNext()) - { - if (i == idx) - { - final SecuredRDFList list = iter.next(); - final SecuredRDFNode retval = map.map1(list); - final Triple t = new Triple(list.asNode(), listFirst() - .asNode(), retval.asNode()); - final Triple t2 = new Triple(list.asNode(), listFirst() - .asNode(), value.asNode()); - checkUpdate(t, t2); - final RDFList base = (RDFList) list.getBaseItem(); - base.getRequiredProperty(listFirst()).changeObject(value); - return retval; - } - else - { - idx++; - iter.next(); - } - - } - throw new ListIndexException(); - } - finally - { - iter.close(); - } - } - - @Override - public boolean sameListAs( final RDFList list ) - { - checkRead(); - ExtendedIterator<RDFNode> thisIter = null; - ExtendedIterator<RDFNode> thatIter = null; - try - { - thisIter = iterator(); - thatIter = list.iterator(); - while (thisIter.hasNext() && thatIter.hasNext()) - { - final RDFNode thisN = thisIter.next(); - final RDFNode thatN = thatIter.next(); - if ((thisN == null) || !thisN.equals(thatN)) - { - // not equal at this position - return false; - } - } - return !(thisIter.hasNext() || thatIter.hasNext()); - } - finally - { - if (thisIter != null) - { - thisIter.close(); - } - if (thatIter != null) - { - thatIter.close(); - } - } - } - - @Override - public SecuredRDFNode setHead( final RDFNode value ) - { - final ExtendedIterator<SecuredRDFList> iter = getSecuredRDFListIterator( - Action.Read).mapWith(new SecuredListMap()); - try - { - if (iter.hasNext()) - { - return replace(0, value); - } - else - { - throw new EmptyListException( - "Tried to set the head of an empty list"); - } - } - finally - { - iter.close(); - } - } - - @Override - public void setStrict( final boolean strict ) - { - checkUpdate(); - holder.getBaseItem().setStrict(strict); - } - - @Override - public SecuredRDFList setTail( final RDFList tail ) - { - checkUpdate(); - - final Statement rest = holder.getBaseItem().getRequiredProperty( - listRest()); - final RDFNode retval = rest.getObject(); - final Triple t = new Triple(holder.getBaseItem().asNode(), listRest() - .asNode(), retval.asNode()); - final Triple t2 = new Triple(holder.getBaseItem().asNode(), listRest() - .asNode(), tail.asNode()); - checkUpdate(t, t2); - rest.changeObject(tail); - return SecuredRDFListImpl.getInstance(getModel(), - retval.as(RDFList.class)); - } - - @Override - public int size() - { - checkRead(); - final Triple t = new Triple(Node.ANY, listFirst().asNode(), Node.ANY); - if (canRead(t)) - { - return holder.getBaseItem().size(); - } - final ExtendedIterator<RDFNode> iter = iterator(); - int i = 0; - while (iter.hasNext()) - { - i++; - iter.next(); - } - return i; - } - - @Override - public SecuredRDFList with( final RDFNode value ) - { - checkUpdate(); - checkCreate(new SecurityEvaluator.SecTriple( - SecurityEvaluator.SecNode.FUTURE, - SecuredItemImpl.convert(listFirst().asNode()), - SecuredItemImpl.convert(value.asNode()))); - return SecuredRDFListImpl.getInstance(getModel(), holder.getBaseItem() - .with(value)); - } -}
http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFNodeImpl.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFNodeImpl.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFNodeImpl.java deleted file mode 100644 index f538653..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRDFNodeImpl.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * 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.security.model.impl; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.apache.jena.enhanced.UnsupportedPolymorphismException ; -import org.apache.jena.graph.FrontsNode ; -import org.apache.jena.graph.Node ; -import org.apache.jena.rdf.model.Literal ; -import org.apache.jena.rdf.model.Model ; -import org.apache.jena.rdf.model.RDFNode ; -import org.apache.jena.rdf.model.Resource ; -import org.apache.jena.security.impl.ItemHolder; -import org.apache.jena.security.impl.SecuredItemImpl; -import org.apache.jena.security.model.SecuredModel; -import org.apache.jena.security.model.SecuredRDFNode; -import org.apache.jena.security.model.SecuredUnsupportedPolymorphismException; - -/** - * Implementation of SecuredRDFNode to be used by a SecuredItemInvoker proxy. - */ -public abstract class SecuredRDFNodeImpl extends SecuredItemImpl implements - SecuredRDFNode -{ - /** - * - * @param securedModel - * the Secured Model to use. - * @param rdfNode the node to secure. - * @return the secured RDFNode - */ - public static SecuredRDFNode getInstance( final SecuredModel securedModel, - final RDFNode rdfNode ) - { - if (rdfNode instanceof Literal) - { - return SecuredLiteralImpl.getInstance(securedModel, - (Literal) rdfNode); - } - else - { - return SecuredResourceImpl.getInstance(securedModel, - (Resource) rdfNode); - } - } - - // the item holder that contains this SecuredRDFNode - private final ItemHolder<? extends RDFNode, ? extends SecuredRDFNode> holder; - - // the secured securedModel that contains this node. - private final SecuredModel securedModel; - - /** - * Constructor - * - * @param securedModel - * the Secured Model to use. - * @param holder - * the item holder that will contain this SecuredRDFNode. - */ - protected SecuredRDFNodeImpl( final SecuredModel securedModel, - final ItemHolder<? extends RDFNode, ? extends SecuredRDFNode> holder ) - { - super(securedModel, holder); - if (holder.getBaseItem().getModel() == null) - { - throw new IllegalArgumentException(String.format( - "Holder base item (%s) must have a securedModel", holder - .getBaseItem().getClass())); - } - this.securedModel = securedModel; - this.holder = holder; - } - - @SuppressWarnings( "unchecked" ) - @Override - public <T extends RDFNode> T as( final Class<T> view ) - { - checkRead(); - // see if the base Item can as - T baseAs = holder.getBaseItem().as(view); - - if (view.equals(SecuredRDFNodeImpl.class) - || view.equals(RDFNode.class)) - { - return (T) this; - } - final Method m = getConstructor(view); - if (m == null) - { - throw new SecuredUnsupportedPolymorphismException(this, view); - } - try - { - return (T) m.invoke(null, securedModel, holder.getBaseItem() - .as(view)); - } - catch (final UnsupportedPolymorphismException e) - { - throw new SecuredUnsupportedPolymorphismException(this, view); - } - catch (final IllegalArgumentException e) - { - throw new RuntimeException(e); - } - catch (final IllegalAccessException e) - { - throw new RuntimeException(e); - } - catch (final InvocationTargetException e) - { - throw new RuntimeException(e); - } - /* - else - { - throw new SecuredUnsupportedPolymorphismException(this, view); - } - */ - } - - @Override - public Node asNode() - { - checkRead(); - return holder.getBaseItem().asNode(); - } - - @Override - public <T extends RDFNode> boolean canAs( final Class<T> view ) - { - checkRead(); - // see if the base Item can as - if (holder.getBaseItem().canAs(view)) - { - return getConstructor(view) != null; - } - return false; - } - - private <T extends RDFNode> Method getConstructor( final Class<T> view ) - { - String classNm = SecuredRDFNodeImpl.class.getName(); - classNm = String.format("%s.Secured%sImpl", - classNm.substring(0, classNm.lastIndexOf(".")), - view.getSimpleName()); - try - { - final Class<?> c = Class.forName(classNm); - return c.getDeclaredMethod("getInstance", SecuredModel.class, view); - } - catch (final ClassNotFoundException e) - { - return null; - } - catch (final SecurityException e) - { - return null; - } - catch (final NoSuchMethodException e) - { - return null; - } - } - - @Override - public SecuredModel getModel() - { - return securedModel; - } - - @Override - public RDFNode inModel( final Model m ) - { - checkRead(); - if (securedModel.equals(m)) - { - return this; - } - if (m instanceof SecuredModel) - { - return SecuredRDFNodeImpl.getInstance((SecuredModel) m, holder - .getBaseItem().inModel(m)); - } - return holder.getBaseItem().inModel(m); - } - - @Override - public boolean isAnon() - { - return holder.getBaseItem().isAnon(); - } - - @Override - public boolean isLiteral() - { - return holder.getBaseItem().isLiteral(); - } - - @Override - public boolean isResource() - { - return holder.getBaseItem().isResource(); - } - - @Override - public boolean isURIResource() - { - return holder.getBaseItem().isURIResource(); - } - - /** - * An RDFNode is equal to another enhanced node n iff the underlying - * nodes are equal. We generalise to allow the other object to be any class - * implementing asNode, because we allow other implemementations of - * Resource, at least in principle. - * This is deemed to be a complete and correct interpretation of RDFNode - * equality, which is why this method has been marked final. - * - * @param o An object to test for equality with this node - * @return True if o is equal to this node. - */ - @Override final public boolean equals( Object o ) - { - checkRead(); - return o instanceof FrontsNode && asNode().equals(((FrontsNode) o).asNode()); - } - - /** - * The hash code of an RDFnode is defined to be the same as the underlying node. - * @return The hashcode as an int - */ - @Override final public int hashCode() { - return holder.getBaseItem().asNode().hashCode(); - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRSIterator.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRSIterator.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRSIterator.java deleted file mode 100644 index a52da02..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredRSIterator.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * 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.security.model.impl; - -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.apache.jena.rdf.model.RSIterator ; -import org.apache.jena.rdf.model.ReifiedStatement ; -import org.apache.jena.security.SecurityEvaluator; -import org.apache.jena.security.SecurityEvaluator.Action; -import org.apache.jena.security.SecurityEvaluator.SecNode; -import org.apache.jena.security.impl.SecuredItemImpl; -import org.apache.jena.security.model.SecuredModel; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.Filter ; -import org.apache.jena.util.iterator.Map1 ; - -/** - * A secured RSIterator implementation - */ -public class SecuredRSIterator implements RSIterator -{ - private class PermReifiedStatementFilter extends Filter<ReifiedStatement> - { - private final SecurityEvaluator evaluator; - private final SecNode modelNode; - private final Set<Action> actions; - - public PermReifiedStatementFilter( final Action[] actions, - final SecuredModel securedModel ) - { - this.modelNode = securedModel.getModelNode(); - this.actions = SecurityEvaluator.Util.asSet(actions); - this.evaluator = securedModel.getSecurityEvaluator(); - } - - @Override - public boolean accept( final ReifiedStatement t ) - { - return evaluator.evaluateAny(evaluator.getPrincipal(), actions, modelNode, - SecuredItemImpl.convert(t.getStatement().asTriple())); - } - - } - - private class PermReifiedStatementMap implements - Map1<ReifiedStatement, ReifiedStatement> - { - private final SecuredModel securedModel; - - public PermReifiedStatementMap( final SecuredModel securedModel ) - { - this.securedModel = securedModel; - } - - @Override - public ReifiedStatement map1( final ReifiedStatement o ) - { - return SecuredReifiedStatementImpl.getInstance(securedModel, o); - } - } - - private final ExtendedIterator<ReifiedStatement> iter; - - /** - * Constructor - * - * @param securedModel - * The secured model that provides the security context - * @param wrapped - * The wrapped iterator. - */ - public SecuredRSIterator( final SecuredModel securedModel, - final ExtendedIterator<ReifiedStatement> wrapped ) - { - final PermReifiedStatementFilter filter = new PermReifiedStatementFilter( - new Action[] { Action.Read }, securedModel); - final PermReifiedStatementMap map1 = new PermReifiedStatementMap( - securedModel); - iter = wrapped.filterKeep(filter).mapWith(map1); - } - - @Override - public <X extends ReifiedStatement> ExtendedIterator<ReifiedStatement> andThen( - final Iterator<X> other ) - { - return iter.andThen(other); - } - - @Override - public void close() - { - iter.close(); - } - - @Override - public ExtendedIterator<ReifiedStatement> filterDrop( - final Filter<ReifiedStatement> f ) - { - return iter.filterDrop(f); - } - - @Override - public ExtendedIterator<ReifiedStatement> filterKeep( - final Filter<ReifiedStatement> f ) - { - return iter.filterKeep(f); - } - - @Override - public boolean hasNext() - { - return iter.hasNext(); - } - - @Override - public <U> ExtendedIterator<U> mapWith( final Map1<ReifiedStatement, U> map1 ) - { - return iter.mapWith(map1); - } - - @Override - public ReifiedStatement next() - { - return iter.next(); - } - - @Override - public ReifiedStatement nextRS() - { - return next(); - } - - @Override - public void remove() - { - iter.remove(); - } - - @Override - public ReifiedStatement removeNext() - { - return iter.removeNext(); - } - - @Override - public List<ReifiedStatement> toList() - { - return iter.toList(); - } - - @Override - public Set<ReifiedStatement> toSet() - { - return iter.toSet(); - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredReifiedStatementImpl.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredReifiedStatementImpl.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredReifiedStatementImpl.java deleted file mode 100644 index a357b55..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredReifiedStatementImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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.security.model.impl; - -import org.apache.jena.rdf.model.ReifiedStatement ; -import org.apache.jena.security.impl.ItemHolder; -import org.apache.jena.security.impl.SecuredItemInvoker; -import org.apache.jena.security.model.SecuredModel; -import org.apache.jena.security.model.SecuredReifiedStatement; -import org.apache.jena.security.model.SecuredStatement; - -/** - * Implementation of SecuredReifiedStatement to be used by a SecuredItemInvoker - * proxy. - */ -public class SecuredReifiedStatementImpl extends SecuredResourceImpl implements - SecuredReifiedStatement -{ - /** - * Get an instance of SecuredReifiedStatement - * - * @param securedModel - * the Secured Model to use. - * @param stmt - * The ReifiedStatement to secure. - * @return SecuredReifiedStatement - */ - public static SecuredReifiedStatement getInstance( - final SecuredModel securedModel, final ReifiedStatement stmt ) - { - if (securedModel == null) - { - throw new IllegalArgumentException( - "Secured securedModel may not be null"); - } - if (stmt == null) - { - throw new IllegalArgumentException("Statement may not be null"); - } - final ItemHolder<ReifiedStatement, SecuredReifiedStatement> holder = new ItemHolder<ReifiedStatement, SecuredReifiedStatement>( - stmt); - final SecuredReifiedStatementImpl checker = new SecuredReifiedStatementImpl( - securedModel, holder); - // if we are going to create a duplicate proxy, just return this - // one. - if (stmt instanceof SecuredReifiedStatement) - { - if (checker.isEquivalent((SecuredReifiedStatement) stmt)) - { - return (SecuredReifiedStatement) stmt; - } - } - return holder.setSecuredItem(new SecuredItemInvoker(stmt.getClass(), - checker)); - } - - // the item holder that contains this SecuredResource - private final ItemHolder<? extends ReifiedStatement, ? extends SecuredReifiedStatement> holder; - - /** - * Constructor - * - * @param securedModel - * The secured model to use - * @param holder - * the item holder that will contain this SecuredReifiedStatement - */ - protected SecuredReifiedStatementImpl( - final SecuredModel securedModel, - final ItemHolder<? extends ReifiedStatement, ? extends SecuredReifiedStatement> holder ) - { - super(securedModel, holder); - this.holder = holder; - } - - @Override - public SecuredStatement getStatement() - { - checkRead(); - return SecuredStatementImpl.getInstance(getModel(), holder - .getBaseItem().getStatement()); - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResIterator.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResIterator.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResIterator.java deleted file mode 100644 index 338c389..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResIterator.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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.security.model.impl; - -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.apache.jena.rdf.model.ResIterator ; -import org.apache.jena.rdf.model.Resource ; -import org.apache.jena.security.model.SecuredModel; -import org.apache.jena.security.model.SecuredResource; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.Filter ; -import org.apache.jena.util.iterator.Map1 ; - -public class SecuredResIterator implements ResIterator -{ - - private class PermResourceMap implements Map1<Resource, Resource> - { - private final SecuredModel securedModel; - - public PermResourceMap( final SecuredModel securedModel ) - { - this.securedModel = securedModel; - } - - @Override - public SecuredResource map1( final Resource o ) - { - return SecuredResourceImpl.getInstance(securedModel, o); - } - } - - private final ExtendedIterator<Resource> iter; - - public SecuredResIterator( final SecuredModel securedModel, - final ExtendedIterator<Resource> wrapped) - { - - final PermResourceMap map1 = new PermResourceMap(securedModel); - iter = wrapped.mapWith(map1); - } - - @Override - public <X extends Resource> ExtendedIterator<Resource> andThen( - final Iterator<X> other ) - { - return iter.andThen(other); - } - - @Override - public void close() - { - iter.close(); - } - - @Override - public ExtendedIterator<Resource> filterDrop( final Filter<Resource> f ) - { - return iter.filterDrop(f); - } - - @Override - public ExtendedIterator<Resource> filterKeep( final Filter<Resource> f ) - { - return iter.filterKeep(f); - } - - @Override - public boolean hasNext() - { - return iter.hasNext(); - } - - @Override - public <U> ExtendedIterator<U> mapWith( final Map1<Resource, U> map1 ) - { - return iter.mapWith(map1); - } - - @Override - public Resource next() - { - return iter.next(); - } - - @Override - public Resource nextResource() - { - return next(); - } - - @Override - public void remove() - { - iter.remove(); - } - - @Override - public Resource removeNext() - { - return iter.removeNext(); - } - - @Override - public List<Resource> toList() - { - return iter.toList(); - } - - @Override - public Set<Resource> toSet() - { - return iter.toSet(); - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResourceImpl.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResourceImpl.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResourceImpl.java deleted file mode 100644 index 4a8dc70..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredResourceImpl.java +++ /dev/null @@ -1,893 +0,0 @@ -/* - * 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.security.model.impl; - -import org.apache.jena.datatypes.RDFDatatype ; -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.NodeFactory ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.rdf.model.* ; -import org.apache.jena.security.AccessDeniedException ; -import org.apache.jena.security.SecurityEvaluator.Action ; -import org.apache.jena.security.impl.ItemHolder ; -import org.apache.jena.security.impl.SecuredItemImpl ; -import org.apache.jena.security.impl.SecuredItemInvoker ; -import org.apache.jena.security.model.SecuredModel ; -import org.apache.jena.security.model.SecuredResource ; -import org.apache.jena.security.model.SecuredStatement ; -import org.apache.jena.security.utils.PermStatementFilter ; -import org.apache.jena.shared.PropertyNotFoundException ; -import org.apache.jena.util.iterator.ExtendedIterator ; - -/** - * Implementation of SecuredResource to be used by a SecuredItemInvoker proxy. - */ -public class SecuredResourceImpl extends SecuredRDFNodeImpl implements - SecuredResource -{ - /** - * Get a SecuredResource. - * - * @param securedModel - * the securedItem that provides the security context. - * @param resource - * The resource to secure. - * @return The SecuredResource - */ - public static SecuredResource getInstance( final SecuredModel securedModel, - final Resource resource ) - { - if (securedModel == null) - { - throw new IllegalArgumentException( - "Secured securedModel may not be null"); - } - if (resource == null) - { - throw new IllegalArgumentException("Resource may not be null"); - } - if (resource.isLiteral()) - { - throw new IllegalArgumentException("Resource may not be a literal"); - } - // check that resource has a securedModel. - Resource goodResource = resource; - if (goodResource.getModel() == null) - { - final Node n = resource.asNode(); - if (resource.isAnon()) - { - goodResource = securedModel.createResource(n.getBlankNodeId()); - } - else - { - goodResource = securedModel.createResource(n.getURI()); - } - } - - final ItemHolder<Resource, SecuredResource> holder = new ItemHolder<Resource, SecuredResource>( - goodResource); - - final SecuredResourceImpl checker = new SecuredResourceImpl( - securedModel, holder); - // if we are going to create a duplicate proxy, just return this - // one. - if (goodResource instanceof SecuredResource) - { - if (checker.isEquivalent((SecuredResource) goodResource)) - { - return (SecuredResource) goodResource; - } - } - - return holder.setSecuredItem(new SecuredItemInvoker( - resource.getClass(), checker)); - - } - - // the item holder that contains this SecuredResource - private final ItemHolder<? extends Resource, ? extends SecuredResource> holder; - - /** - * Constructor. - * - * @param securedModel - * The secured model to use - * @param holder - * the item holder that will contain this SecuredResource. - */ - protected SecuredResourceImpl( - final SecuredModel securedModel, - final ItemHolder<? extends Resource, ? extends SecuredResource> holder ) - { - super(securedModel, holder); - this.holder = holder; - } - - /** - * Abort the transaction in the associated securedModel. - * - * @return This resource to permit cascading. - */ - @Override - public SecuredResource abort() - { - holder.getBaseItem().abort(); - return holder.getSecuredItem(); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property p, final boolean o ) - { - return addProperty( p, ResourceFactory.createTypedLiteral(o) ); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property p, final char o ) - { - return addProperty( p, ResourceFactory.createTypedLiteral(o)); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property value, final double d ) - { - return addProperty( value, ResourceFactory.createTypedLiteral(d)); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property value, final float d ) - { - return addProperty( value, ResourceFactory.createTypedLiteral(d) ); - } - - /** - * Add the property <code>p</code> with the pre-constructed Literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, o) to this's - * securedModel. Answer this resource. <b>NOTE</b> thjat this is distinct - * from the - * other addLiteral methods in that the Literal is not turned into a - * Literal. - */ - @Override - public SecuredResource addLiteral( final Property p, final Literal o ) - { - return addProperty( p, o ); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property p, final long o ) - { - return addProperty( p, ResourceFactory.createTypedLiteral(o)); - } - - /** - * Add the property <code>p</code> with the typed-literal value - * <code>o</code> to this resource, <i>ie</i> add (this, p, typed(o)) to - * this's securedModel. Answer - * this resource. The typed literal is equal to one constructed by using - * <code>this.getModel().createTypedLiteral(o)</code>. - */ - @Override - public SecuredResource addLiteral( final Property p, final Object o ) - { - return addProperty( p, ResourceFactory.createTypedLiteral(o)); - } - - /** - * Add a property to this resource. - * - * <p> - * A statement with this resource as the subject, p as the predicate and o - * as the object is added to the securedModel associated with this resource. - * </p> - * - * @param p - * The property to be added. - * @param o - * The value of the property to be added. - * @return This resource to allow cascading calls. - */ - @Override - public SecuredResource addProperty( final Property p, final RDFNode o ) - { - checkUpdate(); - checkCreate(new Triple(holder.getBaseItem().asNode(), p.asNode(), - o.asNode())); - holder.getBaseItem().addProperty(p, o); - return holder.getSecuredItem(); - } - - /** - * Add a property to this resource. - * - * <p> - * A statement with this resource as the subject, p as the predicate and o - * as the object is added to the securedModel associated with this resource. - * </p> - * - * @param p - * The property to be added. - * @param o - * The value of the property to be added. - * @return This resource to allow cascading calls. - */ - @Override - public SecuredResource addProperty( final Property p, final String o ) - { - return addProperty( p, o, ""); - } - - /** - * Add a property to this resource. - * - * <p> - * A statement with this resource as the subject, p as the predicate and o - * as the object is added to the securedModel associated with this resource. - * </p> - * - * @param p - * The property to be added. - * @param lexicalForm - * The lexical form of the literal - * @param datatype - * The datatype - * @return This resource to allow cascading calls. - */ - @Override - public SecuredResource addProperty( final Property p, final String lexicalForm, - final RDFDatatype datatype ) - { - checkUpdate(); - final Literal l = ResourceFactory.createTypedLiteral(lexicalForm, - datatype); - checkCreate(new Triple(holder.getBaseItem().asNode(), p.asNode(), - l.asNode())); - holder.getBaseItem().addProperty(p, l); - return holder.getSecuredItem(); - } - - /** - * Add a property to this resource. - * - * <p> - * A statement with this resource as the subject, p as the predicate and o - * as the object is added to the securedModel associated with this resource. - * </p> - * - * @param p - * The property to be added. - * @param o - * The value of the property to be added. - * @param l - * the language of the property - * @return This resource to allow cascading calls. - */ - @Override - public SecuredResource addProperty( final Property p, final String o, - final String l ) - { - checkUpdate(); - checkCreate(new Triple(holder.getBaseItem().asNode(), p.asNode(), - NodeFactory.createLiteral(o, l, false))); - holder.getBaseItem().addProperty(p, o, l); - return holder.getSecuredItem(); - } - - @Override - public Literal asLiteral() - { - throw new LiteralRequiredException(asNode()); - } - - @Override - public SecuredResource asResource() - { - return holder.getSecuredItem(); - } - - /** - * Begin a transaction in the associated securedModel. - * - * @return This resource to permit cascading. - */ - @Override - public SecuredResource begin() - { - holder.getBaseItem().begin(); - return holder.getSecuredItem(); - } - - public boolean canReadProperty( final Node p ) - { - return canRead(new Triple(holder.getBaseItem().asNode(), p, Node.ANY)); - } - - protected void checkReadProperty( final Node p ) - { - if (!canReadProperty(p)) - { - throw new AccessDeniedException(getModelNode(), SecuredItemImpl - .convert( - new Triple(holder.getBaseItem().asNode(), p, - Node.ANY)).toString(), Action.Read); - } - } - - /** - * Commit the transaction in the associated securedModel. - * - * @return This resource to permit cascading. - */ - @Override - public SecuredResource commit() - { - holder.getBaseItem().commit(); - return holder.getSecuredItem(); - } - - /** - * Returns an a unique identifier for anonymous resources. - * - * <p> - * The id is unique within the scope of a particular implementation. All - * models within an implementation will use the same id for the same - * anonymous resource. - * </p> - * - * <p> - * This method is undefined if called on resources which are not anonymous - * and may raise an exception. - * </p> - * - * @return A unique id for an anonymous resource. - */ - @Override - public AnonId getId() - { - checkRead(); - return holder.getBaseItem().getId(); - - } - - /** - * Returns the name of this resource within its namespace. - * - * @return The name of this property within its namespace. - */ - @Override - public String getLocalName() - { - checkRead(); - return holder.getBaseItem().getLocalName(); - } - - /** - * Returns the namespace associated with this resource. - * - * @return The namespace for this property. - */ - @Override - public String getNameSpace() - { - checkRead(); - return holder.getBaseItem().getNameSpace(); - } - - /** - * Answer some statement (this, p, O) in the associated securedModel. If - * there are - * several - * such statements, any one of them may be returned. If no such statements - * exist, - * null is returned - in this is differs from getRequiredProperty. - * - * @param p - * the property sought - * @return a statement (this, p, O), or null if no such statements exist - * here - */ - @Override - public SecuredStatement getProperty( final Property p ) - { - checkRead(); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .listProperties(p) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - if (iter.hasNext()) - { - return org.apache.jena.security.model.impl.SecuredStatementImpl - .getInstance(getModel(), iter.next()); - } - else - { - return null; - } - } - finally - { - iter.close(); - } - } - - /** - * Answer some resource R for which this.hasProperty( p, R ), - * or null if no such R exists. - */ - @Override - public SecuredResource getPropertyResourceValue( final Property p ) - { - final SecuredStatementIterator iter = listProperties(p); - try - { - while (iter.hasNext()) - { - final Statement s = iter.next(); - if (s.getObject().isResource()) - { - return SecuredResourceImpl.getInstance(getModel(), s - .getObject().asResource()); - } - } - return null; - } - finally - { - iter.close(); - } - } - - /** - * Get a property value of this resource. - * - * <p> - * The securedModel associated with the resource instance is searched for - * statements whose subject is this resource and whose predicate is p. If - * such a statement is found, it is returned. If several such statements are - * found, any one may be returned. If no such statements are found, an - * exception is thrown. - * </p> - * - * @param p - * The property sought. - * @return some (this, p, ?O) statement if one exists - * @throws PropertyNotFoundException - * if no such statement found - */ - @Override - public SecuredStatement getRequiredProperty( final Property p ) - throws PropertyNotFoundException - { - checkRead(); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .listProperties(p) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - if (iter.hasNext()) - { - return org.apache.jena.security.model.impl.SecuredStatementImpl - .getInstance(getModel(), iter.next()); - } - else - { - throw new PropertyNotFoundException(p); - } - } - finally - { - iter.close(); - } - // return org.apache.jena.security.model.impl.Factory.getInstance( - // this, holder.getBaseItem().getRequiredProperty(p)); - } - - /** - * Return the URI of the resource, or null if it's a bnode. - * - * @return The URI of the resource, or null if it's a bnode. - */ - @Override - public String getURI() - { - checkRead(); - return holder.getBaseItem().getURI(); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final boolean o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final char o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final double o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final float o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final long o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Answer true iff this resource has the value <code>o</code> for - * property <code>p</code>. <code>o</code> is interpreted as - * a typed literal with the appropriate RDF type. - */ - @Override - public boolean hasLiteral( final Property p, final Object o ) - { - checkRead(); - checkRead(new Triple(holder.getBaseItem().asNode(), p.asNode(), - ResourceFactory.createTypedLiteral(o).asNode())); - return holder.getBaseItem().hasLiteral(p, o); - } - - /** - * Determine whether this resource has any values for a given property. - * - * @param p - * The property sought. - * @return true if and only if this resource has at least one - * value for the property. - */ - @Override - public boolean hasProperty( final Property p ) - { - checkRead(); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .listProperties(p) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - return iter.hasNext(); - } - finally - { - iter.close(); - } - } - - /** - * Test if this resource has a given property with a given value. - * - * @param p - * The property sought. - * @param o - * The value of the property sought. - * @return true if and only if this resource has property p with - * value o. - */ - @Override - public boolean hasProperty( final Property p, final RDFNode o ) - { - checkRead(); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .getModel().listStatements(this, p, o) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - return iter.hasNext(); - } - finally - { - iter.close(); - } - } - - /** - * Test if this resource has a given property with a given value. - * - * @param p - * The property sought. - * @param o - * The value of the property sought. - * @return true if and only if this resource has property p with - * value o. - */ - @Override - public boolean hasProperty( final Property p, final String o ) - { - checkRead(); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .getModel().listStatements(this, p, o) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - return iter.hasNext(); - } - finally - { - iter.close(); - } - } - - /** - * Test if this resource has a given property with a given value. - * - * @param p - * The property sought. - * @param o - * The value of the property sought. - * @param l - * The language of the property sought. - * @return true if and only if this resource has property p with - * value o. - */ - @Override - public boolean hasProperty( final Property p, final String o, final String l ) - { - checkRead(); - final Literal ll = holder.getBaseItem().getModel().createLiteral(o, l); - final ExtendedIterator<Statement> iter = holder.getBaseItem() - .getModel().listStatements(this, p, ll) - .filterKeep(new PermStatementFilter(Action.Read, this)); - try - { - return iter.hasNext(); - } - finally - { - iter.close(); - } - } - - /** - * Answer true iff this Resource is a URI resource with the given URI. - * Using this is preferred to using getURI() and .equals(). - */ - @Override - public boolean hasURI( final String uri ) - { - checkRead(); - return holder.getBaseItem().hasURI(uri); - } - - @Override - public Resource inModel( final Model m ) - { - return (Resource) super.inModel(m); - } - - /** - * Return an iterator over all the properties of this resource. - * - * <p> - * The securedModel associated with this resource is search and an iterator - * is returned which iterates over all the statements which have this - * resource as a subject. - * </p> - * - * @return An iterator over all the statements about this object. - */ - @Override - public SecuredStatementIterator listProperties() - { - checkRead(); - return new SecuredStatementIterator(getModel(), holder.getBaseItem() - .listProperties()); - } - - /** - * List all the values of the property p. - * - * <p> - * Returns an iterator over all the statements in the associated - * securedModel whose subject is this resource and whose predicate is p. - * </p> - * - * @param p - * The predicate sought. - * @return An iterator over the statements. - */ - @Override - public SecuredStatementIterator listProperties( final Property p ) - { - checkRead(); - return new SecuredStatementIterator(getModel(), holder.getBaseItem() - .listProperties(p)); - - } - - /** - * Delete all the statements with predicate <code>p</code> for this resource - * from its associated securedModel. - * - * @param p - * the property to remove - * @return this resource, to permit cascading - */ - @Override - public SecuredResource removeAll( final Property p ) - { - checkUpdate(); - if (!canDelete(new Triple(holder.getBaseItem().asNode(), p.asNode(), - Node.ANY))) - { - final StmtIterator iter = holder.getBaseItem().listProperties(p); - try - { - if (!iter.hasNext()) - { - // thre arn't any to delete -- so return - return holder.getSecuredItem(); - } - while (iter.hasNext()) - { - checkDelete(iter.next().asTriple()); - } - } - finally - { - iter.close(); - } - } - holder.getBaseItem().removeAll(p); - return holder.getSecuredItem(); - } - - /** - * Delete all the properties for this resource from the associated - * securedModel. - * - * @return This resource to permit cascading. - */ - @Override - public SecuredResource removeProperties() - { - checkUpdate(); - if (!canDelete(new Triple(holder.getBaseItem().asNode(), Node.ANY, - Node.ANY))) - { - final StmtIterator iter = holder.getBaseItem().listProperties(); - try - { - if (!iter.hasNext()) - { - // thre arn't any to delete -- so return - return holder.getSecuredItem(); - } - while (iter.hasNext()) - { - checkDelete(iter.next().asTriple()); - } - } - finally - { - iter.close(); - } - } - holder.getBaseItem().removeProperties(); - return holder.getSecuredItem(); - } - - /** - * Return a string representation of the resource. - * - * Returns the URI of the resource unless the resource is anonymous - * in which case it returns the id of the resource enclosed in square - * brackets. - * - * @return Return a string representation of the resource. - * if it is anonymous. - */ - @Override - public String toString() - { - return holder.getBaseItem().toString(); - } - - @Override - public Object visitWith( final RDFVisitor rv ) - { - return isAnon() ? rv.visitBlank(this, getId()) : rv.visitURI(this, - getURI()); - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSelector.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSelector.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSelector.java deleted file mode 100644 index 9102a2a..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSelector.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.security.model.impl; - -import org.apache.jena.rdf.model.* ; -import org.apache.jena.security.SecurityEvaluator.SecNode; -import org.apache.jena.security.SecurityEvaluator.SecTriple; -import org.apache.jena.security.impl.SecuredItem; -import org.apache.jena.security.impl.SecuredItemImpl; - -public class SecuredSelector implements Selector -{ - private final SecuredItem securedItem; - private final Selector selector; - - public SecuredSelector( final SecuredItem securedItem ) - { - this(securedItem, new SimpleSelector()); - } - - public SecuredSelector( final SecuredItem securedItem, - final Selector selector ) - { - this.securedItem = securedItem; - this.selector = selector; - } - - private SecNode getNode( final RDFNode node ) - { - return node == null ? SecNode.ANY : SecuredItemImpl.convert(node - .asNode()); - } - - @Override - public RDFNode getObject() - { - return selector.getObject(); - } - - @Override - public Property getPredicate() - { - return selector.getPredicate(); - } - - @Override - public Resource getSubject() - { - return selector.getSubject(); - } - - @Override - public boolean isSimple() - { - return securedItem.canRead(SecTriple.ANY); - } - - /** - * This method is designed to be over ridden by subclasses to define - * application - * specific constraints on the statements selected. - * - * @param s - * the statement to be tested - * @return true if the statement satisfies the constraint - */ - @Override - public boolean test( final Statement s ) - { - if (selector.test(s)) - { - final SecTriple t = new SecTriple(getNode(s.getSubject()), - getNode(s.getPredicate()), getNode(s.getObject())); - return securedItem.canRead(t); - } - return false; - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/c4b0113d/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSeqImpl.java ---------------------------------------------------------------------- diff --git a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSeqImpl.java b/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSeqImpl.java deleted file mode 100644 index 9514417..0000000 --- a/jena-permissions/src/main/java/org/apache/jena/security/model/impl/SecuredSeqImpl.java +++ /dev/null @@ -1,511 +0,0 @@ -/* - * 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.security.model.impl; - -import org.apache.jena.graph.Triple ; -import org.apache.jena.rdf.model.* ; -import org.apache.jena.security.impl.ItemHolder ; -import org.apache.jena.security.impl.SecuredItemInvoker ; -import org.apache.jena.security.model.* ; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.Filter ; -import org.apache.jena.vocabulary.RDF ; - -/** - * Implementation of SecuredSeq to be used by a SecuredItemInvoker proxy. - * - * Sequence may have breaks in the order. - * http://www.w3.org/TR/2004/REC-rdf-mt-20040210/#Containers - * - */ -public class SecuredSeqImpl extends SecuredContainerImpl implements SecuredSeq -{ - private class RDFNodeFilter extends Filter<Statement> - { - private final RDFNode n; - - public RDFNodeFilter( final RDFNode n ) - { - this.n = n; - } - - @Override - public boolean accept( final Statement o ) - { - return (o.getPredicate().getOrdinal() != 0) - && n.equals(o.getObject()); - } - - } - - /** - * get a SecuredSeq. - * - * @param securedModel - * The secured model that provides the security context - * @param seq - * The Seq to secure. - * @return the SecuredSeq - */ - public static SecuredSeq getInstance( final SecuredModel securedModel, - final Seq seq ) - { - if (securedModel == null) - { - throw new IllegalArgumentException( - "Secured securedModel may not be null"); - } - if (seq == null) - { - throw new IllegalArgumentException("Seq may not be null"); - } - final ItemHolder<Seq, SecuredSeq> holder = new ItemHolder<Seq, SecuredSeq>( - seq); - final SecuredSeqImpl checker = new SecuredSeqImpl(securedModel, holder); - // if we are going to create a duplicate proxy, just return this - // one. - if (seq instanceof SecuredSeq) - { - if (checker.isEquivalent((SecuredSeq) seq)) - { - return (SecuredSeq) seq; - } - } - return holder.setSecuredItem(new SecuredItemInvoker(seq.getClass(), - checker)); - } - - // the item holder that contains this SecuredSeq. - private final ItemHolder<? extends Seq, ? extends SecuredSeq> holder; - - /** - * Constructor. - * - * @param securedModel - * The secured model that provides the security context - * @param holder - * The item holder that will contain this SecuredSeq. - */ - protected SecuredSeqImpl( final SecuredModel securedModel, - final ItemHolder<? extends Seq, ? extends SecuredSeq> holder ) - { - super(securedModel, holder); - this.holder = holder; - } - - @Override - public SecuredSeq add( final int index, final boolean o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final char o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final double o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final float o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final long o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final Object o ) - { - return add( index, asObject( o )); - } - - @Override - public SecuredSeq add( final int index, final RDFNode o ) - { - checkUpdate(); - final Literal l = holder.getBaseItem().getModel().createTypedLiteral(o); - checkCreate(index, l); - holder.getBaseItem().add(index, o); - return holder.getSecuredItem(); - } - - @Override - public SecuredSeq add( final int index, final String o ) - { - return add( index, o, "" ); - } - - @Override - public SecuredSeq add( final int index, final String o, final String l ) - { - return add( index, holder.getBaseItem().getModel().createLiteral(o, l)); - } - - private void checkCreate( final int index, final Literal l ) - { - checkCreate(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), l.asNode())); - } - - private Statement containerIndexOf( final RDFNode n ) - { - final ExtendedIterator<Statement> iter = listProperties().filterKeep( - new RDFNodeFilter(n)); - try - { - if (iter.hasNext()) - { - return iter.next(); - } - else - { - return null; - } - } - finally - { - iter.close(); - } - } - - @Override - public SecuredAlt getAlt( final int index ) - { - checkRead(); - final Alt a = holder.getBaseItem().getAlt(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), a.asNode())); - return SecuredAltImpl.getInstance(getModel(), a); - } - - @Override - public SecuredBag getBag( final int index ) - { - checkRead(); - final Bag b = holder.getBaseItem().getBag(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), b.asNode())); - return SecuredBagImpl.getInstance(getModel(), b); - } - - @Override - public boolean getBoolean( final int index ) - { - checkRead(); - final boolean retval = holder.getBaseItem().getBoolean(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public byte getByte( final int index ) - { - checkRead(); - final byte retval = holder.getBaseItem().getByte(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public char getChar( final int index ) - { - checkRead(); - final char retval = holder.getBaseItem().getChar(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - - } - - @Override - public double getDouble( final int index ) - { - checkRead(); - final double retval = holder.getBaseItem().getDouble(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public float getFloat( final int index ) - { - checkRead(); - final float retval = holder.getBaseItem().getFloat(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public int getInt( final int index ) - { - checkRead(); - final int retval = holder.getBaseItem().getInt(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public String getLanguage( final int index ) - { - checkRead(); - final Literal literal = holder.getBaseItem().getLiteral(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), literal.asNode())); - return literal.getLanguage(); - } - - @Override - public SecuredLiteral getLiteral( final int index ) - { - checkRead(); - final Literal literal = holder.getBaseItem().getLiteral(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), literal.asNode())); - return SecuredLiteralImpl.getInstance(getModel(), literal); - } - - @Override - public long getLong( final int index ) - { - checkRead(); - final long retval = holder.getBaseItem().getLong(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), asObject(retval).asNode())); - return retval; - } - - @Override - public SecuredRDFNode getObject( final int index ) - { - checkRead(); - final RDFNode retval = holder.getBaseItem().getObject(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), retval.asNode())); - return SecuredRDFNodeImpl.getInstance(getModel(), retval); - } - - @Override - public SecuredResource getResource( final int index ) - { - checkRead(); - final Resource retval = holder.getBaseItem().getResource(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), retval.asNode())); - return SecuredResourceImpl.getInstance(getModel(), retval); - } - - @Override - @Deprecated - public SecuredResource getResource( final int index, final ResourceF f ) - { - checkRead(); - final Resource retval = holder.getBaseItem().getResource(index, f); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), retval.asNode())); - return SecuredResourceImpl.getInstance(getModel(), retval); - } - - @Override - public SecuredSeq getSeq( final int index ) - { - checkRead(); - final Seq retval = holder.getBaseItem().getSeq(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), retval.asNode())); - return SecuredSeqImpl.getInstance(getModel(), retval); - } - - @Override - public short getShort( final int index ) - { - checkRead(); - final short retval = holder.getBaseItem().getShort(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), ResourceFactory.createTypedLiteral(retval).asNode())); - return retval; - } - - @Override - public String getString( final int index ) - { - checkRead(); - final String retval = holder.getBaseItem().getString(index); - checkRead(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), ResourceFactory.createTypedLiteral(retval).asNode())); - return retval; - } - - @Override - public int indexOf( final boolean o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final char o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final double o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final float o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final long o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final Object o ) - { - return indexOf( asObject( o )); - } - - @Override - public int indexOf( final RDFNode o ) - { - checkRead(); - final Statement stmt = containerIndexOf(o); - if (stmt == null) - { - return 0; - } - checkRead(stmt); - return stmt.getPredicate().getOrdinal(); - } - - @Override - public int indexOf( final String o ) - { - return indexOf( asLiteral( o, "" )); - } - - @Override - public int indexOf( final String o, final String l ) - { - return indexOf( asLiteral( o, l)); - } - - @Override - public SecuredSeq remove( final int index ) - { - checkUpdate(); - final RDFNode rdfNode = holder.getBaseItem().getObject(index); - if (rdfNode != null) - { - checkDelete(new Triple(holder.getBaseItem().asNode(), RDF.li(index) - .asNode(), rdfNode.asNode())); - holder.getBaseItem().remove(index); - } - return holder.getSecuredItem(); - } - - @Override - public SecuredSeq set( final int index, final boolean o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final char o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final double o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final float o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final long o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final Object o ) - { - return set( index, asObject( o )); - } - - @Override - public SecuredSeq set( final int index, final RDFNode o ) - { - checkUpdate(); - final Triple t2 = new Triple(holder.getBaseItem().asNode(), RDF.li( - index).asNode(), o.asNode()); - final RDFNode rdfNode = holder.getBaseItem().getObject(index); - if (rdfNode != null) - { - final Triple t1 = new Triple(holder.getBaseItem().asNode(), RDF.li( - index).asNode(), rdfNode.asNode()); - checkUpdate(t1, t2); - } - else - { - checkCreate(t2); - } - holder.getBaseItem().set(index, o); - return holder.getSecuredItem(); - } - - @Override - public SecuredSeq set( final int index, final String o ) - { - return set( index, asLiteral( o, "" )); - } - - @Override - public SecuredSeq set( final int index, final String o, final String l ) - { - return set( index, asLiteral(o, l)); - } -}
