blob: 63172ce1955a9a38f2c0289a2575c12b37d0839f [file] [log] [blame]
// Copyright (C) 2013 The Android Open Source Project
//
// 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 com.google.gerrit.extensions.webui;
import com.google.gerrit.extensions.restapi.RestResource;
import com.google.gerrit.extensions.restapi.RestView;
public interface UiAction<R extends RestResource> extends RestView<R> {
/**
* Get the description of the action customized for the resource.
*
* @param resource the resource the view would act upon if the action is
* invoked by the client. Information from the resource can be used to
* customize the description.
* @return a description of the action. The server will populate the
* {@code id} and {@code method} properties. If null the action will
* assumed unavailable and not presented. This is usually the same as
* {@code setVisible(false)}.
*/
public Description getDescription(R resource);
/** Describes an action invokable through the web interface. */
public static class Description {
private String method;
private String id;
private String label;
private String title;
private boolean visible = true;
private boolean enabled = true;
public String getMethod() {
return method;
}
/** {@code PrivateInternals_UiActionDescription.setMethod()} */
void setMethod(String method) {
this.method = method;
}
public String getId() {
return id;
}
/** {@code PrivateInternals_UiActionDescription.setId()} */
void setId(String id) {
this.id = id;
}
public String getLabel() {
return label;
}
/** Set the label to appear on the button to activate this action. */
public Description setLabel(String label) {
this.label = label;
return this;
}
public String getTitle() {
return title;
}
/** Set the tool-tip text to appear when the mouse hovers on the button. */
public Description setTitle(String title) {
this.title = title;
return this;
}
public boolean isVisible() {
return visible;
}
/**
* Set if the action's button is visible on screen for the current client.
* If not visible the action description may not be sent to the client.
*/
public Description setVisible(boolean visible) {
this.visible = visible;
return this;
}
public boolean isEnabled() {
return enabled && isVisible();
}
/** Set if the button should be invokable (true), or greyed out (false). */
public Description setEnabled(boolean enabled) {
this.enabled = enabled;
return this;
}
}
}