All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dw.xmlrpc.Locker Maven / Gradle / Ivy

package dw.xmlrpc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import dw.xmlrpc.exception.DokuException;

//! @cond
class Locker {
	private final CoreClient _client;

	public Locker(CoreClient client){
		_client = client;
	}

	public LockResult lock(String pageId) throws DokuException{
		List pageIds = new ArrayList();
		pageIds.add(pageId);
		return setLocks(pageIds, null);
	}

	public LockResult unlock(String pageId) throws DokuException{
		List pageIds = new ArrayList();
		pageIds.add(pageId);
		return setLocks(null, pageIds);
	}

	@SuppressWarnings("unchecked")
	public LockResult setLocks(List pagesToLock, List pagesToUnlock) throws DokuException{
		Map params = BuildParams(pagesToLock, pagesToUnlock);
		Object result = _client.genericQuery("dokuwiki.setLocks", params);
		return BuildLockResult((Map) result);
	}

	private Map BuildParams(List pagesToLock, List pagesToUnlock){
		Map params = new HashMap();
		params.put("lock", pagesToLock == null ? new Object[]{} : pagesToLock.toArray());
		params.put("unlock", pagesToUnlock == null ? new Object[]{} : pagesToUnlock.toArray());
		return params;
	}

	private LockResult BuildLockResult(Map data){
		Object lockedObj = data.get("locked");
		Object lockfailObj = data.get("lockfail");
		Object unlockedObj = data.get("unlocked");
		Object unlockfailObj = data.get("unlockfail");

		return new LockResult(objToStr(lockedObj),
				objToStr(lockfailObj),
				objToStr(unlockedObj),
				objToStr(unlockfailObj));
	}

	private Set objToStr(Object objects){
		return objToStr((Object[]) objects);
	}

	private Set objToStr(Object[] objects){
		Set result = new HashSet();
		if ( objects == null ){
			return result;
		}

		for(Object o : objects){
			result.add((String) o);
		}

		return result;
	}
//! @endcond
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy