Package org.apache.jena.security.model.impl

Source Code of org.apache.jena.security.model.impl.SecuredAltImpl

/*
* 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 com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.rdf.model.Alt;
import com.hp.hpl.jena.rdf.model.AltHasNoDefaultException;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.ResourceF;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

import org.apache.jena.security.SecurityEvaluator.Action;
import org.apache.jena.security.impl.ItemHolder;
import org.apache.jena.security.impl.SecuredItemInvoker;
import org.apache.jena.security.model.SecuredAlt;
import org.apache.jena.security.model.SecuredBag;
import org.apache.jena.security.model.SecuredLiteral;
import org.apache.jena.security.model.SecuredModel;
import org.apache.jena.security.model.SecuredRDFNode;
import org.apache.jena.security.model.SecuredResource;
import org.apache.jena.security.model.SecuredSeq;

/**
* Implementation of SecuredAlt to be used by a SecuredItemInvoker proxy.
*/
public class SecuredAltImpl extends SecuredContainerImpl implements SecuredAlt
{
  /**
   * Get an instance of SecuredAlt.
   *
   * @param securedModel
   *            the Secured Model to use.
   * @param alt
   *            The Alt to be secured.
   * @return The secured Alt instance.
   */
  public static SecuredAlt getInstance( final SecuredModel securedModel,
      final Alt alt )
  {
    if (securedModel == null)
    {
      throw new IllegalArgumentException(
          "Secured securedModel may not be null");
    }
    if (alt == null)
    {
      throw new IllegalArgumentException("Alt may not be null");
    }
    final ItemHolder<Alt, SecuredAlt> holder = new ItemHolder<Alt, SecuredAlt>(
        alt);
    final SecuredAltImpl checker = new SecuredAltImpl(securedModel, holder);
    // if we are going to create a duplicate proxy, just return this
    // one.
    if (alt instanceof SecuredAlt)
    {
      if (checker.isEquivalent((SecuredAlt) alt))
      {
        return (SecuredAlt) alt;
      }
    }
    return holder.setSecuredItem(new SecuredItemInvoker(alt.getClass(),
        checker));
  }

  // The item holder holding this SecuredAlt
  private final ItemHolder<? extends Alt, ? extends SecuredAlt> holder;

  /**
   * Constructor.
   *
   * @param securedModel
   *            the securedModel to use.
   * @param holder
   *            The item holder that will hold this SecuredAlt.
   */
  protected SecuredAltImpl( final SecuredModel securedModel,
      final ItemHolder<? extends Alt, ? extends SecuredAlt> holder )
  {
    super(securedModel, holder);
    this.holder = holder;
  }

  @Override
  public SecuredRDFNode getDefault()
  {
    // getDefaultStatement() calls checkRead
    return SecuredRDFNodeImpl.getInstance(getModel(), getDefaultStatement()
        .getObject());
  }

  @Override
  public SecuredAlt getDefaultAlt()
  {
    // getDefaultStatement() calls checkRead
    return SecuredAltImpl.getInstance(getModel(), getDefaultStatement()
        .getAlt());
  }

  @Override
  public SecuredBag getDefaultBag()
  {
    // getDefaultStatement() calls checkRead
    return SecuredBagImpl.getInstance(getModel(), getDefaultStatement()
        .getBag());
  }

  @Override
  public boolean getDefaultBoolean()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getBoolean();
  }

  @Override
  public byte getDefaultByte()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getByte();
  }

  @Override
  public char getDefaultChar()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getChar();
  }

  @Override
  public double getDefaultDouble()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getDouble();
  }

  @Override
  public float getDefaultFloat()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getFloat();
  }

  @Override
  public int getDefaultInt()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getInt();
  }

  @Override
  public String getDefaultLanguage()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getLanguage();
  }

  @Override
  public SecuredLiteral getDefaultLiteral()
  {
    // getDefaultStatement() calls checkRead
    return SecuredLiteralImpl.getInstance(getModel(), getDefaultStatement()
        .getLiteral());
  }

  @Override
  public long getDefaultLong()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getLong();
  }

  @Override
  public SecuredResource getDefaultResource()
  {
    // getDefaultStatement() calls checkRead
    return SecuredResourceImpl.getInstance(getModel(),
        getDefaultStatement().getResource());
  }

  @Override
  @Deprecated
  public SecuredResource getDefaultResource( final ResourceF f )
  {
    // getDefaultStatement() calls checkRead
    return SecuredResourceImpl.getInstance(getModel(),
        getDefaultStatement().getResource(f));
  }

  @Override
  public SecuredSeq getDefaultSeq()
  {
    // getDefaultStatement() calls checkRead
    return SecuredSeqImpl.getInstance(getModel(), getDefaultStatement()
        .getSeq());
  }

  @Override
  public short getDefaultShort()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getShort();

  }

  private Statement getDefaultStatement()
  {
    checkRead();
    final ExtendedIterator<Statement> iter = getStatementIterator(Action.Read);
    try
    {
      if (iter.hasNext())
      {
        return iter.next();
      }
      throw new AltHasNoDefaultException(this);
    }
    finally
    {
      iter.close();
    }
  }

  @Override
  public String getDefaultString()
  {
    // getDefaultStatement() calls checkRead
    return getDefaultStatement().getString();

  }

  /*
   * private SecTriple getDefaultTriple()
   * {
   * final StmtIterator iter = holder.getBaseItem().getModel()
   * .listStatements(this, RDF.li(1), (RDFNode) null);
   * try
   * {
   * return iter.hasNext() ? iter.nextStatement().asTriple() : null;
   * }
   * finally
   * {
   * iter.close();
   * }
   *
   * }
   *
   * private SecTriple getNewTriple( final SecTriple t, final Object o )
   * {
   * return new SecTriple(t.getSubject(), t.getPredicate(),
   * SecNode.createLiteral(
   * String.valueOf(o), "", false));
   * }
   */
  @Override
  public SecuredAlt setDefault( final boolean o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final char o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final double o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final float o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final long o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final Object o )
  {
    return setDefault( asObject( o ));
  }

  @Override
  public SecuredAlt setDefault( final RDFNode o )
  {
    checkUpdate();     
    final ExtendedIterator<Statement> iter = getStatementIterator(Action.Read);
    try {
      if (iter.hasNext())
      {
        final Statement stmt = iter.next();
        final Triple t = stmt.asTriple();
        final Triple t2 = new Triple(t.getSubject(), t.getPredicate(),
            o.asNode());
        checkUpdate(t, t2);
        stmt.changeObject(o);
        return holder.getSecuredItem();
      }
      else
      {
        add( o );
        return holder.getSecuredItem();
      }
    }
    finally {
      iter.close();
    }
   
  }

  @Override
  public SecuredAlt setDefault( final String o )
  {
    return setDefault( asLiteral( o, "" ));
  }

  @Override
  public SecuredAlt setDefault( final String o, final String l )
  {
    return setDefault( asLiteral( o, l) );
  }
}
TOP

Related Classes of org.apache.jena.security.model.impl.SecuredAltImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.