blob: 47f92a0550dd9ed29f3166ece4da0627e0c7ce00 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Abstract class for EJB Validation rules
*/
package org.eclipse.jst.j2ee.model.internal.validation;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Level;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.ejb.EJBJar;
/**
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public abstract class AbstractEJBValidationRuleFactory {
/**
*
*/
public AbstractEJBValidationRuleFactory() {
//Default
}
protected HashMap _ruleList = null;
public void release(IValidationRule rule) {
if(rule == null) {
return;
}
// Since we don't put a lock on the rule when it's checked out via getRule(Object),
// there's nothing to do other than reset the rule to prepare it for reuse.
rule.reset();
}
protected Iterator addDependentRuleToRuleList() {
Iterator iterator = _ruleList.values().iterator();
while(iterator.hasNext()) {
IValidationRule rule = (IValidationRule)iterator.next();
Object[] ids = rule.getDependsOn();
if(ids == null) {
continue;
}
for(int i=0; i<ids.length; i++) {
IValidationRule dRule = (IValidationRule)_ruleList.get(ids[i]);
if(dRule != null) {
dRule.addDependent(rule);
}
}
}
return iterator;
}
protected void logAllDependentRules() {
Iterator iterator;
Logger logger = getMsgLogger();
if (logger.isLoggingLevel(Level.FINEST)) {
iterator = _ruleList.values().iterator();
Iterator depIterator = null;
while(iterator.hasNext()) {
IValidationRule rule = (IValidationRule)iterator.next();
Set dependents = rule.getDependents();
StringBuffer buffer = new StringBuffer();
buffer.append("list of dependents for rule:"); //$NON-NLS-1$
buffer.append(rule.getClass().getName());
buffer.append("\n"); //$NON-NLS-1$
if(dependents != null) {
depIterator = dependents.iterator();
while(depIterator.hasNext()) {
IValidationRule dRule = (IValidationRule)depIterator.next();
buffer.append("\t"); //$NON-NLS-1$
buffer.append(dRule.getClass().getName());
buffer.append("\n"); //$NON-NLS-1$
}
}
buffer.append("\n"); //$NON-NLS-1$
logger.write(Level.FINEST, buffer.toString());
}
}
}
/**
* @return
*/
protected abstract Logger getMsgLogger();
protected EJBJar getEJBJar(IEJBValidationContext vc) {
return (EJBJar)vc.loadModel(EJBValidatorModelEnum.EJB_MODEL);
}
/**
* This method will return the identified IValidationRule.
* If the ruleid is not registered, or if there is a problem
* instantiating the IValidationRule, then null will be returned.
*/
public IValidationRule getRule(IEJBValidationContext vc, Object ruleId) {
// To avoid loading a rule until it is needed, intialize
// the list with a rule id as the key, and a String class name
// as a value. When a rule is loaded, if the value is a String,
// then the IValidationRule has not been instantiated. Create an
// instance and store that in place of the String. If the value
// is already an IValidationRule instance, return it.
Object rule = _ruleList.get(ruleId);
if(rule == null) {
// No such ruleId registered.
Logger logger = vc.getMsgLogger();
if (logger != null && logger.isLoggingLevel(Level.FINE)) {
logger.write(Level.FINE, "Cannot load rule from ruleId: " + ruleId); //$NON-NLS-1$
}
return null;
}
return (IValidationRule)rule;
}
}