
com.microsoft.azure.toolkit.lib.common.action.AzureActionManager Maven / Gradle / Ivy
The newest version!
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
package com.microsoft.azure.toolkit.lib.common.action;
import com.microsoft.azure.toolkit.lib.common.messager.IAzureMessage;
import com.microsoft.azure.toolkit.lib.common.view.IView;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Iterator;
import java.util.ServiceLoader;
import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
public abstract class AzureActionManager {
public String getPlace(final ActionInstance action) {
return Action.EMPTY_PLACE;
}
private static final class Holder {
private static AzureActionManager instance = null;
@Nullable
private static AzureActionManager loadActionManager() {
final ClassLoader current = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(AzureActionManager.class.getClassLoader());
final ServiceLoader loader = ServiceLoader.load(AzureActionManagerProvider.class, AzureActionManager.class.getClassLoader());
final Iterator iterator = loader.iterator();
if (iterator.hasNext()) {
return iterator.next().getActionManager();
}
return new DummyActionManager();
} finally {
Thread.currentThread().setContextClassLoader(current);
}
}
}
public static synchronized AzureActionManager getInstance() {
if (Holder.instance == null) {
Holder.instance = Holder.loadActionManager();
}
return Holder.instance;
}
public abstract void registerAction(Action action);
public void registerAction(Action.Id id, Consumer action) {
this.registerAction(new Action<>(id).withHandler(action));
}
public abstract Action getAction(Action.Id id);
public abstract void registerGroup(String id, ActionGroup group);
public abstract IActionGroup getGroup(String id);
public void registerHandler(@Nonnull Action.Id id, @Nonnull Predicate condition, @Nonnull Consumer handler) {
final Action action = this.getAction(id);
action.withHandler(condition, handler);
}
public void registerHandler(@Nonnull Action.Id id, @Nonnull Consumer handler) {
final Action action = this.getAction(id);
action.withHandler(o -> true, handler);
}
public void registerHandler(@Nonnull Action.Id id, @Nonnull BiPredicate condition, @Nonnull BiConsumer handler) {
final Action action = this.getAction(id);
action.withHandler(condition, handler);
}
public void registerHandler(@Nonnull Action.Id id, @Nonnull BiConsumer handler) {
final Action action = this.getAction(id);
action.withHandler((r, e) -> true, handler);
}
@Nonnull
public Shortcuts getIDEDefaultShortcuts() {
return new Shortcuts() {
};
}
public interface Shortcuts {
default Object add() {
return null;
}
default Object delete() {
return null;
}
default Object view() {
return null;
}
default Object edit() {
return null;
}
default Object refresh() {
return null;
}
default Object start() {
return null;
}
default Object stop() {
return null;
}
default Object restart() {
return null;
}
default Object deploy() {
return null;
}
default Object copy() {
return null;
}
default Object paste() {
return null;
}
}
public static class DummyActionManager extends AzureActionManager {
@Override
public void registerAction(Action action) {
}
@Override
public Action getAction(Action.Id id) {
if (id == Action.OPEN_URL) { // only open url is supported
//noinspection unchecked
return (Action) new DummyOpenUrlAction();
}
return null;
}
@Override
public void registerGroup(String id, ActionGroup group) {
}
@Override
public ActionGroup getGroup(String id) {
return null;
}
}
public static class DummyOpenUrlAction extends Action {
private DummyOpenUrlAction() {
super(Action.OPEN_URL);
}
public String toString(IAzureMessage.ValueDecorator decorator) {
final IView.Label view = this.getView(this.target);
return String.format("[%s](%s)", view.getLabel(), decorator.decorateValue(this.target, null));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy