package org.ovirt.engine.ui.uicommonweb;
import java.util.List;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.ICommand;
import org.ovirt.engine.ui.uicompat.ObservableCollection;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
/**
* Represents a command adapted to use in model-viewmodel pattern + binding.
*/
@SuppressWarnings("unused")
public class UICommand extends Model implements ICommand {
public static UICommand createDefaultOkUiCommand(String name, ICommandTarget target) {
UICommand command = createOkUiCommand(name, target);
command.setIsDefault(true);
return command;
}
public static UICommand createOkUiCommand(String name, ICommandTarget target) {
UICommand command = new UICommand(name, target);
command.setTitle(ConstantsManager.getInstance().getConstants().ok());
return command;
}
public static UICommand createCancelUiCommand(String name, ICommandTarget target) {
UICommand command = new UICommand(name, target);
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
command.setIsCancel(true);
return command;
}
public static UICommand createDefaultCancelUiCommand(String name, ICommandTarget target) {
UICommand result = createCancelUiCommand(name, target);
result.setIsDefault(true);
return result;
}
private boolean isExecutionAllowed;
/**
* Gets or sets the flag indicating whether this command is available but can't be executed from some reasons.
*/
public boolean getIsExecutionAllowed() {
return isExecutionAllowed;
}
/*
* Call this method after adding execute prohibition reasons.
*/
public UICommand setIsExecutionAllowed(boolean value) {
if (isExecutionAllowed != value) {
isExecutionAllowed = value;
if (value) {
getExecuteProhibitionReasons().clear();
}
onPropertyChanged(new PropertyChangedEventArgs("IsExecutionAllowed")); //$NON-NLS-1$
}
return this;
}
private List<String> privateExecuteProhibitionReasons;
public List<String> getExecuteProhibitionReasons() {
return privateExecuteProhibitionReasons;
}
public UICommand setExecuteProhibitionReasons(List<String> value) {
privateExecuteProhibitionReasons = value;
return this;
}
private boolean privateIsDefault;
public boolean getIsDefault() {
return privateIsDefault;
}
public UICommand setIsDefault(boolean value) {
privateIsDefault = value;
return this;
}
private boolean privateIsVisible = true;
public boolean getIsVisible() {
return privateIsVisible;
}
public UICommand setIsVisible(boolean value) {
privateIsVisible = value;
return this;
}
private boolean privateIsCancel;
public boolean getIsCancel() {
return privateIsCancel;
}
public UICommand setIsCancel(boolean value) {
privateIsCancel = value;
return this;
}
private String privateName;
public String getName() {
return privateName;
}
public UICommand setName(String value) {
privateName = value;
return this;
}
public ICommandTarget getTarget() {
return target;
}
public UICommand setTarget(ICommandTarget target) {
this.target = target;
return this;
}
private ICommandTarget target;
private final boolean autoRefresh;
public UICommand(String name, ICommandTarget target, boolean autoRefresh) {
this(autoRefresh);
setName(name);
setTitle(name);
this.target = target;
}
public UICommand(String name, ICommandTarget target) {
this(name, target, false);
}
private UICommand(boolean autoRefresh) {
setExecuteProhibitionReasons(new ObservableCollection<String>());
setIsExecutionAllowed(true);
this.autoRefresh = autoRefresh;
}
public boolean isAutoRefresh() {
return autoRefresh;
}
public boolean canExecute(Object parameter) {
return true;
}
/**
* Execute Command with parameters
*/
public void execute(Object... parameters) {
if (!getIsAvailable() || !getIsExecutionAllowed()) {
return;
}
if (target != null) {
if (parameters == null || parameters.length == 0) {
target.executeCommand(this);
} else {
target.executeCommand(this, parameters);
}
}
}
/**
* Execute command with no parameters
*/
public void execute() {
execute(new Object[0]);
}
@Override
public UICommand setTitle(String value) {
super.setTitle(value);
return this;
}
}