/*
* 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.directory.studio.openldap.config.acl.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* The Acl what-attrs clause. We either have an attribute val clause, or an attribute list clause.
*
* <pre>
* <what-attrs> ::= ( 'attrs' | 'attr' ) SP '=' SP <attrs>
* <attrs> ::= IDENT SP 'val' <mr-e> <attr-val-style> SP? '=' SP? REGEX | <what-attr> <what-attr-list>
* <attr-val-style> ::= '.' <basic-style> | e
* <basic-style> ::= 'exact' | 'base' | 'baseobject' | 'regex'
* <mr-e> ::= '/' IDENT | e
* <what-attr-list> ::= ',' <what-attr> <what-attr-list> | e
* <what-attr> ::= IDENT | '@' IDENT | '!' IDENT | 'entry' | 'children'
* </pre>
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class AclWhatClauseAttributes extends AclWhatClause
{
/** The attributeVal element */
private AclAttributeVal aclAttributeVal;
/**
* Creates an instance of AclWhatClauseAttributes
*/
public AclWhatClauseAttributes()
{
aclAttributeVal = new AclAttributeVal();
}
/**
* Gets the attributes list.
*
* @return the attributes list
*/
public List<AclAttribute> getAttributes()
{
List<AclAttribute> copyAttributes = new ArrayList<AclAttribute>( aclAttributeVal.getAclAttributes().size() );
copyAttributes.addAll( aclAttributeVal.getAclAttributes() );
return copyAttributes;
}
/**
* Adds an attribute.
*
* @param attribute the attribute to add
*/
public void addAttribute( String attribute )
{
aclAttributeVal.getAclAttributes().add( new AclAttribute( attribute, null ) );
}
/**
* Adds a {@link Collection} of attributes.
*
* @param attributes the {@link Collection} of attributes
*/
public void addAllAttributes( Collection<AclAttribute> attributes )
{
aclAttributeVal.getAclAttributes().addAll( attributes );
}
/**
* Clears attributes.
*/
public void clearAttributes()
{
aclAttributeVal.getAclAttributes().clear();
}
/**
* @return true if the AclWhatClauseAttributes has a val flag
*/
public boolean hasVal()
{
return aclAttributeVal.hasVal();
}
/**
* Set the val flag
*
* @param val The val flag value
*/
public void setVal( boolean val )
{
aclAttributeVal.setVal( val );
}
/**
* @return true if the AclWhatClauseAttributes has a MatchingRule flag
*/
public boolean hasMatchingRule()
{
return aclAttributeVal.hasMatchingRule();
}
/**
* set the matchingRule flag
*/
public void setMatchingRule( boolean matchingRule )
{
aclAttributeVal.setMatchingRule( matchingRule );
}
/**
* @return The AclAttribute style
*/
public AclAttributeStyleEnum getStyle()
{
return aclAttributeVal.getStyle();
}
/**
* @param style The AttributeVal style
*/
public void setStyle( AclAttributeStyleEnum style )
{
aclAttributeVal.setStyle( style );
}
/**
* @return The AclAttribute value
*/
public String getValue()
{
return aclAttributeVal.getValue();
}
/**
* Sets the AclWhatClauseAttributes value
*
* @param value The AttributeVal value
*/
public void setValue( String value )
{
aclAttributeVal.setValue( value );
}
/**
* {@inheritDoc}
*/
public String toString()
{
StringBuilder sb = new StringBuilder();
// Attrs
sb.append( "attrs" );
// Attributes
if ( ( aclAttributeVal.getAclAttributes() != null ) && ( aclAttributeVal.getAclAttributes().size() > 0 ) )
{
sb.append( '=' );
boolean isFirst = true;
for ( AclAttribute attribute : aclAttributeVal.getAclAttributes() )
{
if ( isFirst )
{
isFirst = false;
}
else
{
sb.append( ',' );
}
sb.append( attribute );
}
}
// The val
if ( aclAttributeVal.hasVal() )
{
sb.append( " val" );
if ( aclAttributeVal.hasMatchingRule() )
{
sb.append( "/matchingRule" );
}
if ( aclAttributeVal.getStyle() != AclAttributeStyleEnum.NONE )
{
sb.append( '.' );
sb.append( aclAttributeVal.getStyle().getName() );
}
sb.append( "=\"" );
sb.append( aclAttributeVal.getValue() );
sb.append( '"' );
}
return sb.toString();
}
}