package com.idega.slide.business; import java.util.logging.Level; import org.apache.slide.common.NamespaceAccessToken; import org.apache.slide.common.SlideCommonUtil; import org.apache.slide.common.SlideToken; import org.apache.slide.content.RevisionDescriptorNotFoundException; import org.apache.slide.macro.Macro; import org.apache.slide.macro.MacroImpl; import org.apache.slide.structure.ObjectNotFoundException; import com.idega.slide.bean.SlideAction; public class DeleteWorker extends RepositoryWorker { private String deletePath; public DeleteWorker(IWSlideServiceBean repositoryService, IWSimpleSlideServiceImp simpleRepositoryService, String repositoryPath) { super(repositoryService, simpleRepositoryService, repositoryPath); deletePath = repositoryPath; } @Override protected void doWork() { try { IWSimpleSlideServiceImp simpleRepositoryService = getSimpleRepositoryService(); if (!simpleRepositoryService.checkExistance(deletePath)) { result = Boolean.FALSE; return; } NamespaceAccessToken namespace = getSimpleRepositoryService().startTransaction(SlideAction.COMMIT); if (namespace == null) { result = Boolean.FALSE; return; } boolean deleteXML = true; try { SlideToken token = simpleRepositoryService.getContentToken(); org.apache.slide.common.Namespace slideNamespace = SlideCommonUtil.getInstance().getDefaultNamespace(); Macro macro = new MacroImpl(slideNamespace, slideNamespace.getConfig(), simpleRepositoryService.getSecurity(), simpleRepositoryService.getContent(), simpleRepositoryService.getStructure(), namespace.getLockHelper()); macro.delete(token, deletePath); simpleRepositoryService.removeValueFromCache(IWSimpleSlideServiceImp.CACHE_RESOURCE_DESCRIPTORS_NAME, IWSimpleSlideServiceImp.THREE_MINUTES, deletePath); simpleRepositoryService.removeValueFromCache(IWSimpleSlideServiceImp.CACHE_RESOURCE_DESCRIPTOR_NAME, IWSimpleSlideServiceImp.THREE_MINUTES, deletePath); simpleRepositoryService.removeValueFromCache(IWSimpleSlideServiceImp.CACHE_RESOURCE_EXISTANCE_NAME, -1, deletePath); } catch (Throwable t) { getLogger().log(Level.WARNING, "Unable to delete: " + deletePath, t); deleteXML = t instanceof ObjectNotFoundException || t instanceof RevisionDescriptorNotFoundException; if (!deleteXML) { simpleRepositoryService.rollbackTransaction(namespace); result = Boolean.FALSE; return; } } finally { if (deleteXML) { simpleRepositoryService.deletetDefinitionFile(deletePath); } } simpleRepositoryService.commitTransaction(namespace); result = Boolean.TRUE; } catch (Throwable t) { result = Boolean.FALSE; getLogger().log(Level.WARNING, "Error deleting: " + deletePath, t); } finally { getRepositoryService().removeFromQueue(getRepositoryPath(), getWorkId()); } } }