/* * $Id: IWSlideChangeEventClient.java,v 1.3 2007/05/11 11:21:55 eiki Exp $ * Created on May 9, 2007 * * Copyright (C) 2007 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.slide.event; import org.apache.slide.authenticate.CredentialsToken; import org.apache.slide.authenticate.SecurityToken; import org.apache.slide.common.Domain; import org.apache.slide.common.NamespaceAccessToken; import org.apache.slide.common.SlideTokenImpl; import org.apache.slide.common.Uri; import org.apache.slide.event.ContentEvent; import org.apache.slide.store.ExtendedStore; import org.apache.slide.store.Store; import org.apache.slide.util.logger.Logger; import com.idega.core.event.MethodCallEvent; import com.idega.core.event.impl.EventClient; import com.idega.slide.business.IWContentEvent; import com.idega.slide.business.IWSlideChangeListener; /** * * Last modified: $Date: 2007/05/11 11:21:55 $ by $Author: eiki $ * * @author <a href="mailto:thomas@idega.com">thomas</a> * @version $Revision: 1.3 $ */ public class IWSlideChangeEventClient extends EventClient implements IWSlideChangeListener { private static final String LOG_CHANNEL = IWSlideChangeEventClient.class.getName(); private static final String URI ="URI"; private String storeKey = null; private String removeKey = null; private String createKey = null; public IWSlideChangeEventClient() { storeKey = ContentEvent.STORE.getName(); removeKey = ContentEvent.REMOVE.getName(); createKey = ContentEvent.CREATE.getName(); initialize(IWSlideChangeEventClient.class); } public void onSlideChange(IWContentEvent event) { if (isNothingToDo()) return; String methodName = event.getMethod().getName(); String uri = event.getContentEvent().getUri(); fireEvent(methodName, URI, uri); } public void handleEvent(MethodCallEvent methodCallEvent) { if (isEventCompatible(methodCallEvent)) { contentChanged(methodCallEvent); structureChanged(methodCallEvent); } } public void contentChanged(MethodCallEvent methodCallEvent) { if (isMethod(methodCallEvent, storeKey)){ String uri = methodCallEvent.get(URI); removeObject(uri, false); } } public void structureChanged(MethodCallEvent methodCallEvent) { if (isMethod(methodCallEvent, removeKey) || isMethod(methodCallEvent,createKey)){ String uri = methodCallEvent.get(URI); removeObject(uri, true); } } private void removeObject(String uri, boolean getParent) { NamespaceAccessToken nat = Domain.accessNamespace(new SecurityToken(this), Domain.getDefaultNamespace()); try { nat.begin(); Uri theUri = nat.getUri(new SlideTokenImpl(new CredentialsToken("")), uri); // get the parent theUri = (getParent) ? theUri.getParentUri() : theUri; Store store = theUri.getStore(); if (store instanceof ExtendedStore) { Domain.log("Resetting cache for " + theUri, LOG_CHANNEL, Logger.INFO); ((ExtendedStore) store).removeObjectFromCache(theUri); } nat.commit(); } catch(Exception e) { if (Domain.isEnabled(LOG_CHANNEL, Logger.ERROR)) { Domain.log("Error clearing cache: " + e + ". See stderr for stacktrace.", LOG_CHANNEL, Logger.ERROR); e.printStackTrace(); } } } }