blob: 91d9feefda08f9c0774d29091f64f8a08132fe8e [file] [log] [blame]
/*
* 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.fortress.core.model;
import java.util.StringTokenizer;
import org.apache.commons.lang.StringUtils;
import org.apache.directory.fortress.core.ValidationException;
import org.apache.directory.fortress.core.util.Config;
import org.apache.directory.fortress.core.util.ConstraintValidator;
import org.apache.directory.fortress.core.util.VUtil;
/**
* Utilities to copy constraints attributes between entities.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ConstraintUtil
{
private static final ConstraintValidator constraintValidator = VUtil.getConstraintValidator();
/**
* Copy source constraint to target. Both must be created before calling this utility.
*
* @param srcC contains constraint source.
* @param trgC contains target constraint.
*/
public static void copy( Constraint srcC, Constraint trgC )
{
// Both variables must be instantiated before being passed in to this method.
trgC.setTimeout( srcC.getTimeout() );
if ( StringUtils.isNotEmpty( srcC.getName() ) )
{
trgC.setName( srcC.getName() );
}
if ( StringUtils.isNotEmpty( srcC.getBeginTime() ) )
{
trgC.setBeginTime( srcC.getBeginTime() );
}
if ( StringUtils.isNotEmpty( srcC.getEndTime() ) )
{
trgC.setEndTime( srcC.getEndTime() );
}
if ( StringUtils.isNotEmpty( srcC.getDayMask() ) )
{
trgC.setDayMask( srcC.getDayMask() );
}
if ( StringUtils.isNotEmpty( srcC.getBeginDate() ) )
{
trgC.setBeginDate( srcC.getBeginDate() );
}
if ( StringUtils.isNotEmpty( srcC.getEndDate() ) )
{
trgC.setEndDate( srcC.getEndDate() );
}
if ( StringUtils.isNotEmpty( srcC.getBeginLockDate() ) )
{
trgC.setBeginLockDate( srcC.getBeginLockDate() );
}
if ( StringUtils.isNotEmpty( srcC.getEndLockDate() ) )
{
trgC.setEndLockDate( srcC.getEndLockDate() );
}
}
/**
* Validate the non-null attributes on the constraint.
*
* @param c1 contains the temporal values associated with an entity.
* @throws org.apache.directory.fortress.core.ValidationException on first invalid attribute found.
*/
public static void validate( Constraint c1 )
throws ValidationException
{
if ( c1.getTimeout() != null )
{
constraintValidator.timeout( c1.getTimeout() );
}
if ( StringUtils.isNotEmpty( c1.getBeginTime() ) )
{
constraintValidator.beginTime( c1.getBeginTime() );
}
if ( StringUtils.isNotEmpty( c1.getEndTime() ) )
{
constraintValidator.endTime( c1.getEndTime() );
}
if ( StringUtils.isNotEmpty( c1.getBeginDate() ) )
{
constraintValidator.beginDate( c1.getBeginDate() );
}
if ( StringUtils.isNotEmpty( c1.getEndDate() ) )
{
constraintValidator.endDate( c1.getEndDate() );
}
if ( StringUtils.isNotEmpty( c1.getDayMask() ) )
{
constraintValidator.dayMask( c1.getDayMask() );
}
if ( StringUtils.isNotEmpty( c1.getBeginLockDate() ) )
{
constraintValidator.beginDate( c1.getBeginLockDate() );
}
if ( StringUtils.isNotEmpty( c1.getEndLockDate() ) )
{
constraintValidator.endDate( c1.getEndLockDate() );
}
}
/**
* Used by DAO utilities to convert from a string with comma delimited values to fortress internal format {@link Constraint}.
*
* @param inputString contains raw data format which is comma delimited containing temporal data.
* @param constraint used by internal processing to perform validations.
*/
public static void setConstraint( String inputString, Constraint constraint )
{
if ( StringUtils.isNotEmpty( inputString ) )
{
StringTokenizer tkn = new StringTokenizer( inputString, Config.getInstance().getDelimiter(), true );
if ( tkn.countTokens() > 0 )
{
int count = tkn.countTokens();
int index = 0;
boolean previousTokenWasDelimiter = false;
for ( int i = 0; i < count; i++ )
{
String szValue = tkn.nextToken();
if ( szValue.equals( Config.getInstance().getDelimiter() ) && !previousTokenWasDelimiter )
{
previousTokenWasDelimiter = true;
}
else if ( szValue.equals( Config.getInstance().getDelimiter() ) )
{
previousTokenWasDelimiter = true;
index++;
}
else
{
previousTokenWasDelimiter = false;
switch ( index++ )
{
case 0:
// only set the name attr if it isn't already set:
if ( ( constraint.getName() == null ) || ( constraint.getName().length() == 0 ) )
{
constraint.setName( szValue );
}
break;
case 1:
constraint.setTimeout( Integer.parseInt( szValue ) );
break;
case 2:
constraint.setBeginTime( szValue );
break;
case 3:
constraint.setEndTime( szValue );
break;
case 4:
constraint.setBeginDate( szValue );
break;
case 5:
constraint.setEndDate( szValue );
break;
case 6:
constraint.setBeginLockDate( szValue );
break;
case 7:
constraint.setEndLockDate( szValue );
break;
case 8:
constraint.setDayMask( szValue );
break;
}
}
}
}
}
}
/**
* Convert from fortress {@link Constraint} to comma delimited ldap format.
*
* @param constraint contains the temporal data.
* @return string containing raw data bound for ldap.
*/
public static String setConstraint( Constraint constraint )
{
String szConstraint = null;
String delimiter = Config.getInstance().getDelimiter();
if ( constraint != null )
{
StringBuilder sb = new StringBuilder();
sb.append( constraint.getName() );
sb.append( delimiter );
if ( constraint.getTimeout() != null )
{
sb.append( constraint.getTimeout() );
}
sb.append( delimiter );
if ( constraint.getBeginTime() != null )
{
sb.append( constraint.getBeginTime() );
}
sb.append( delimiter );
if ( constraint.getEndTime() != null )
{
sb.append( constraint.getEndTime() );
}
sb.append( delimiter );
if ( constraint.getBeginDate() != null )
{
sb.append( constraint.getBeginDate() );
}
sb.append( delimiter );
if ( constraint.getEndDate() != null )
{
sb.append( constraint.getEndDate() );
}
sb.append( delimiter );
if ( constraint.getBeginLockDate() != null )
{
sb.append( constraint.getBeginLockDate() );
}
sb.append( delimiter );
if ( constraint.getEndLockDate() != null )
{
sb.append( constraint.getEndLockDate() );
}
sb.append( delimiter );
if ( constraint.getDayMask() != null )
{
sb.append( constraint.getDayMask() );
}
szConstraint = sb.toString();
}
return szConstraint;
}
/**
* Utility is used during processing of constraint values. The rule used here is if the target constraint will
* accept the source constraint attribute only when not set initially. If target constraint's attribute is set,
* validation on the constraint will be performed.
*
* @param srcC Contains instantiated constraint with one or more attributes to be copied.
* @param trgC instantiated object may contain zero or more attributes set. Copy will not be performed on set attrs.
* @throws org.apache.directory.fortress.core.ValidationException on first invalid attribute found.
*/
public static void validateOrCopy( Constraint srcC, Constraint trgC )
throws ValidationException
{
if ( trgC.getTimeout() != null )
{
srcC.setTimeout( trgC.getTimeout() );
}
else if ( srcC.getTimeout() != null )
{
trgC.setTimeout( srcC.getTimeout() );
}
if ( StringUtils.isNotEmpty( trgC.getBeginTime() ) )
{
constraintValidator.beginTime( trgC.getBeginTime() );
}
else if ( StringUtils.isNotEmpty( srcC.getBeginTime() ) )
{
trgC.setBeginTime( srcC.getBeginTime() );
}
if ( StringUtils.isNotEmpty( trgC.getEndTime() ) )
{
constraintValidator.endTime( trgC.getEndTime() );
}
else if ( StringUtils.isNotEmpty( srcC.getEndTime() ) )
{
trgC.setEndTime( srcC.getEndTime() );
}
if ( StringUtils.isNotEmpty( trgC.getBeginDate() ) )
{
constraintValidator.beginDate( trgC.getBeginDate() );
}
else if ( StringUtils.isNotEmpty( srcC.getBeginDate() ) )
{
trgC.setBeginDate( srcC.getBeginDate() );
}
if ( StringUtils.isNotEmpty( trgC.getEndDate() ) )
{
constraintValidator.endDate( trgC.getEndDate() );
}
else if ( StringUtils.isNotEmpty( srcC.getEndDate() ) )
{
trgC.setEndDate( srcC.getEndDate() );
}
if ( StringUtils.isNotEmpty( trgC.getDayMask() ) )
{
constraintValidator.dayMask( trgC.getDayMask() );
}
else if ( StringUtils.isNotEmpty( srcC.getDayMask() ) )
{
trgC.setDayMask( srcC.getDayMask() );
}
if ( StringUtils.isNotEmpty( trgC.getBeginLockDate() ) )
{
constraintValidator.beginDate( trgC.getBeginLockDate() );
}
else if ( StringUtils.isNotEmpty( srcC.getBeginLockDate() ) )
{
trgC.setBeginLockDate( srcC.getBeginLockDate() );
}
if ( StringUtils.isNotEmpty( trgC.getEndLockDate() ) )
{
constraintValidator.endDate( trgC.getEndLockDate() );
}
else if ( StringUtils.isNotEmpty( srcC.getEndLockDate() ) )
{
trgC.setEndLockDate( srcC.getEndLockDate() );
}
}
}