/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.client.mvp;
import jsinterop.annotations.JsType;
import org.uberfire.client.workbench.events.ChangeTitleWidgetEvent;
/**
* Provides functionality to lock a file or directory, associated with a widget
* (i.e a workbench screen or editor).
*/
@JsType
public interface LockManager {
/**
* Retrieves the latest lock information for the provided target and fires
* events to update the corresponding UI.
* @param lockTarget the {@link LockTarget} providing information about what to
* lock.
*/
void init(LockTarget lockTarget);
/**
* Notifies this lock manager that the lock target's widget got focus to
* initialize widget-specific state i.e. to publish JavaScript methods for
* lock management which can be used by non-native editors (i.e editors that
* are rendered on the server). The lock manager must be initialized before
* calling this method (see {@link #init(LockTarget)}).
*/
void onFocus();
/**
* Attempts to acquire a lock where the consuming code knows a lock needs to
* be acquired. If the target is already locked by another user and the lock
* cannot be acquired, the user will be notified and the lock target's reload
* runnable will be executed. Attempts to acquire a lock will always cause
* an {@link ChangeTitleWidgetEvent} to be fired. Errors in the execution of
* this method are propagated to the global RPC/MessageBus error handler.
* The lock manager must be initialized before calling this method (see
* {@link #init(LockTarget)}).
*/
void acquireLock();
/**
* Registers DOM handlers to detect changes on
* {@link LockTarget#getWidget()} and, if required (see
* {@link LockDemandDetector}), automatically tries to acquire a lock. If
* the target is already locked by another user and the lock can't be
* acquired, the user will be notified and the lock target's reload runnable
* will be executed. Errors in the execution of this method are propagated
* to the global RPC/MessageBus error handler. The lock manager must be
* initialized before calling this method (see {@link #init(LockTarget)}).
*/
void acquireLockOnDemand();
/**
* Releases the previously acquired lock. Errors in the execution of this
* method are propagated to the global RPC/MessageBus error handler.
*/
void releaseLock();
}