All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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