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));
-       }
-}

Reply via email to