if (!CACHE_Q.equals(elem.getQName())) {
handleException("Unable to create the cache mediator. " +
"Unexpected element as the cache mediator configuration");
}
CacheMediator cache = new CacheMediator();
OMAttribute idAttr = elem.getAttribute(ATT_ID);
if (idAttr != null && idAttr.getAttributeValue() != null) {
cache.setId(idAttr.getAttributeValue());
}
OMAttribute scopeAttr = elem.getAttribute(ATT_SCOPE);
if (scopeAttr != null && scopeAttr.getAttributeValue() != null &&
isValidScope(scopeAttr.getAttributeValue(), cache.getId())) {
cache.setScope(scopeAttr.getAttributeValue());
} else {
cache.setScope(CachingConstants.SCOPE_PER_HOST);
}
OMAttribute collectorAttr = elem.getAttribute(ATT_COLLECTOR);
if (collectorAttr != null && collectorAttr.getAttributeValue() != null &&
"true".equals(collectorAttr.getAttributeValue())) {
cache.setCollector(true);
} else {
cache.setCollector(false);
OMAttribute hashGeneratorAttr = elem.getAttribute(ATT_HASH_GENERATOR);
if (hashGeneratorAttr != null && hashGeneratorAttr.getAttributeValue() != null) {
try {
Class generator = Class.forName(hashGeneratorAttr.getAttributeValue());
Object o = generator.newInstance();
if (o instanceof DigestGenerator) {
cache.setDigestGenerator((DigestGenerator) o);
} else {
handleException("Specified class for the hashGenerator is not a " +
"DigestGenerator. It *must* implement " +
"org.wso2.caching.digest.DigestGenerator interface");
}
} catch (ClassNotFoundException e) {
handleException("Unable to load the hash generator class", e);
} catch (IllegalAccessException e) {
handleException("Unable to access the hash generator class", e);
} catch (InstantiationException e) {
handleException("Unable to instantiate the hash generator class", e);
}
}
OMAttribute timeoutAttr = elem.getAttribute(ATT_TIMEOUT);
if (timeoutAttr != null && timeoutAttr.getAttributeValue() != null) {
cache.setTimeout(Long.parseLong(timeoutAttr.getAttributeValue()));
} else {
cache.setTimeout(DEFAULT_TIMEOUT);
}
OMAttribute maxMessageSizeAttr = elem.getAttribute(ATT_MAX_MSG_SIZE);
if (maxMessageSizeAttr != null && maxMessageSizeAttr.getAttributeValue() != null) {
cache.setMaxMessageSize(Integer.parseInt(maxMessageSizeAttr.getAttributeValue()));
}
OMElement onCacheHitElem = elem.getFirstChildWithName(ON_CACHE_HIT_Q);
if (onCacheHitElem != null) {
OMAttribute sequenceAttr = onCacheHitElem.getAttribute(ATT_SEQUENCE);
if (sequenceAttr != null && sequenceAttr.getAttributeValue() != null) {
cache.setOnCacheHitRef(sequenceAttr.getAttributeValue());
} else if (onCacheHitElem.getFirstElement() != null) {
cache.setOnCacheHitSequence(new SequenceMediatorFactory()
.createAnonymousSequence(onCacheHitElem, properties));
}
}
for (Iterator itr = elem.getChildrenWithName(IMPLEMENTATION_Q); itr.hasNext();) {
OMElement implElem = (OMElement) itr.next();
OMAttribute typeAttr = implElem.getAttribute(ATT_TYPE);
OMAttribute sizeAttr = implElem.getAttribute(ATT_SIZE);
if (typeAttr != null && typeAttr.getAttributeValue() != null) {
String type = typeAttr.getAttributeValue();
if (CachingConstants.TYPE_MEMORY.equals(type) && sizeAttr != null &&
sizeAttr.getAttributeValue() != null) {
cache.setInMemoryCacheSize(Integer.parseInt(sizeAttr.getAttributeValue()));
} else if (CachingConstants.TYPE_DISK.equals(type)) {
log.warn("Disk based and hirearchycal caching is not implemented yet");
if (sizeAttr != null && sizeAttr.getAttributeValue() != null) {
cache.setDiskCacheSize(Integer.parseInt(sizeAttr.getAttributeValue()));
} else {
cache.setDiskCacheSize(DEFAULT_DISK_CACHE_SIZE);
}
} else {
handleException("unknown implementation type for the Cache mediator");
}
}