/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.backuprestore; import org.geoserver.GeoServerConfigurationLock; import org.geoserver.GeoServerConfigurationLock.LockType; /** * @author Alessio Fabiani, GeoSolutions * */ public class BackupRestoreConfigurationLockCallback implements BackupRestoreCallback { GeoServerConfigurationLock locker; static ThreadLocal<LockType> THREAD_LOCK = new ThreadLocal<GeoServerConfigurationLock.LockType>(); public BackupRestoreConfigurationLockCallback(GeoServerConfigurationLock locker) { this.locker = locker; } @Override public void onBeginRequest(String requestedType) { LockType type = THREAD_LOCK.get(); if (type != null || requestedType == null) { return; } type = LockType.READ; if (requestedType.equals(Backup.RESTORE_JOB_NAME)) { type = LockType.WRITE; } locker.lock(type); THREAD_LOCK.set(type); } @Override public void onEndRequest() { LockType type = THREAD_LOCK.get(); if (type != null) { THREAD_LOCK.remove(); locker.unlock(); } } }