/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.internal.navigation.ui.filter;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.riena.core.util.StringMatcher;
import org.eclipse.riena.ui.core.marker.ValidationTime;
import org.eclipse.riena.ui.filter.IUIFilterRuleValidatorRidget;
import org.eclipse.riena.ui.filter.impl.AbstractUIFilterRuleValidator;
import org.eclipse.riena.ui.ridgets.IEditableRidget;
/**
* Filter rule to provide a validator for a ridget.
*/
public class UIFilterRuleRidgetValidator extends AbstractUIFilterRuleValidator implements IUIFilterRuleValidatorRidget {
private RidgetMatcher matcher;
private String ridgetIdPattern;
/**
* Creates a new instance of {@code UIFilterRuleRidgetValidator}.
*/
public UIFilterRuleRidgetValidator() {
super();
}
/**
* Creates a new instance of {@code UIFilterRuleRidgetValidator}.
*
* @param ridgetIdPattern
* pattern ({@link StringMatcher}) for ridget IDs
* @param validator
* validator
* @param validationTime
* time of validation
*/
public UIFilterRuleRidgetValidator(final String ridgetIdPattern, final IValidator validator,
final ValidationTime validationTime) {
super(validator, validationTime);
this.ridgetIdPattern = ridgetIdPattern;
}
/**
* Returns and - if necessary - creates the matcher.
*
* @return matcher
*/
private RidgetMatcher getMatcher() {
if (matcher == null) {
matcher = new RidgetMatcher(ridgetIdPattern);
}
return matcher;
}
/**
* This method compares the ID of this rule and the given ID of a ridget.
*
* @see org.eclipse.riena.ui.internal.IUIFilterRule.IUIFilterAttribute#matches(java.lang.Object)
*/
public boolean matches(final Object... args) {
if ((args == null) || (args.length <= 0)) {
return false;
}
return getMatcher().matches(args);
}
/**
* Adds the validator of this rule to the given object (if the object is an
* editable ridget).
*
* @see org.eclipse.riena.ui.internal.IUIFilterRule.IUIFilterAttribute#apply(java.lang.Object)
*/
public void apply(final Object object) {
if (object instanceof IEditableRidget) {
final IEditableRidget editableRidget = (IEditableRidget) object;
editableRidget.addValidationRule(getValidator(), getValidationTime());
editableRidget.updateFromModel();
}
}
/**
* Removes the validator of this rule from the given object (if the object
* is an editable ridget).
*
* @see org.eclipse.riena.ui.internal.IUIFilterRule.IUIFilterAttribute#remove(java.lang.Object)
*/
public void remove(final Object object) {
if (object instanceof IEditableRidget) {
final IEditableRidget editableRidget = (IEditableRidget) object;
editableRidget.removeValidationRule(getValidator());
editableRidget.updateFromModel();
}
}
public void setId(final String idPattern) {
this.ridgetIdPattern = idPattern;
matcher = null;
}
}