tikhomirov@215: /*
tikhomirov@215:  * Copyright (c) 2011 TMate Software Ltd
tikhomirov@215:  *  
tikhomirov@215:  * This program is free software; you can redistribute it and/or modify
tikhomirov@215:  * it under the terms of the GNU General Public License as published by
tikhomirov@215:  * the Free Software Foundation; version 2 of the License.
tikhomirov@215:  *
tikhomirov@215:  * This program is distributed in the hope that it will be useful,
tikhomirov@215:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
tikhomirov@215:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
tikhomirov@215:  * GNU General Public License for more details.
tikhomirov@215:  *
tikhomirov@215:  * For information on how to redistribute this software under
tikhomirov@215:  * the terms of a license other than GNU General Public License
tikhomirov@215:  * contact TMate Software at support@hg4j.com
tikhomirov@215:  */
tikhomirov@215: package org.tmatesoft.hg.core;
tikhomirov@215: 
tikhomirov@215: import org.tmatesoft.hg.util.CancelSupport;
tikhomirov@215: import org.tmatesoft.hg.util.ProgressSupport;
tikhomirov@215: 
tikhomirov@215: /**
tikhomirov@215:  * intentionally package-local, might be removed or refactored in future
tikhomirov@215:  * 
tikhomirov@215:  * @author Artem Tikhomirov
tikhomirov@215:  * @author TMate Software Ltd.
tikhomirov@215:  */
tikhomirov@215: class HgAbstractCommand<T extends HgAbstractCommand<?>> implements ProgressSupport.Target<T>, CancelSupport.Target<T> {
tikhomirov@215: 	private ProgressSupport progressHelper;
tikhomirov@215: 	private CancelSupport cancelHelper;
tikhomirov@215: 
tikhomirov@215: 	@SuppressWarnings("unchecked")
tikhomirov@215: 	public T set(ProgressSupport ps) {
tikhomirov@215: 		progressHelper = ps;
tikhomirov@215: 		return (T) this;
tikhomirov@215: 	}
tikhomirov@215: 	
tikhomirov@215: 	@SuppressWarnings("unchecked")
tikhomirov@215: 	public T set(CancelSupport cs) {
tikhomirov@215: 		cancelHelper = cs;
tikhomirov@215: 		return (T) this;
tikhomirov@215: 	}
tikhomirov@215: 
tikhomirov@215: 	// shall not return null
tikhomirov@215: 	protected ProgressSupport getProgressSupport(Object context) {
tikhomirov@215: 		if (progressHelper != null) {
tikhomirov@215: 			return progressHelper;
tikhomirov@215: 		}
tikhomirov@215: 		return ProgressSupport.Factory.get(context);
tikhomirov@215: 	}
tikhomirov@215: 
tikhomirov@322: 	// shall not return null if create is true
tikhomirov@322: 	// CancelSupport from context, if any, takes precedence
tikhomirov@322: 	protected CancelSupport getCancelSupport(Object context, boolean create) {
tikhomirov@322: 		CancelSupport rv = CancelSupport.Factory.get(context, null);
tikhomirov@322: 		if (rv != null) {
tikhomirov@322: 			return rv;
tikhomirov@322: 		}
tikhomirov@215: 		if (cancelHelper != null) {
tikhomirov@215: 			return cancelHelper;
tikhomirov@215: 		}
tikhomirov@322: 		if (create) {
tikhomirov@322: 			return CancelSupport.Factory.get(null);
tikhomirov@322: 		}
tikhomirov@322: 		return null;
tikhomirov@215: 	}
tikhomirov@215: 
tikhomirov@215: }