Package restx.specs

Source Code of restx.specs.SpecRecorderRouteFactoryMachine

package restx.specs;

import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
import restx.AppSettings;
import restx.RestxContext;
import restx.admin.AdminPage;
import restx.factory.*;

@Machine
public class SpecRecorderRouteFactoryMachine extends DefaultFactoryMachine {
    public static final Name<SpecRecorderRoute> RECORDER_ROUTE_NAME = Name.of(SpecRecorderRoute.class, "SpecRecorderRoute");

    private static final Factory.Query<AppSettings> appSettings = Factory.Query.byClass(AppSettings.class).mandatory();
    private static final Factory.Query<RestxSpecRecorder.Repository> recordedSpecRepo = Factory.Query.byClass(RestxSpecRecorder.Repository.class);
    private static final Factory.Query<RestxSpec.StorageSettings> storageSettings = Factory.Query.byClass(RestxSpec.StorageSettings.class).mandatory();
    private static final Name<AdminPage> ADMIN_PAGE_NAME = Name.of(AdminPage.class, "Recorder");

    public SpecRecorderRouteFactoryMachine() {
        super(0,
            // add recorder route only if spec recorder is available
            new MachineEngine<SpecRecorderRoute>() {
                @Override
                public Name<SpecRecorderRoute> getName() {
                    return RECORDER_ROUTE_NAME;
                }

                @Override
                public int getPriority() {
                    return 0;
                }

                @Override
                public BillOfMaterials getBillOfMaterial() {
                    return new BillOfMaterials(ImmutableSet.<Factory.Query<?>>of(recordedSpecRepo, storageSettings));
                }

                @Override
                public ComponentBox<SpecRecorderRoute> newComponent(SatisfiedBOM satisfiedBOM) {
                    Optional<NamedComponent<RestxSpecRecorder.Repository>> recorder = satisfiedBOM.getOne(recordedSpecRepo);
                    if (!recorder.isPresent()) {
                        return new EmptyBox<>(RECORDER_ROUTE_NAME);
                    }
                    return BoundlessComponentBox.FACTORY.of(new NamedComponent<>(RECORDER_ROUTE_NAME,
                            new SpecRecorderRoute(recorder.get().getComponent(),
                                    satisfiedBOM.getOneAsComponent(storageSettings).get()
                                    )));
                }

                @Override
                public String toString() {
                    return "SpecRecorderRouteFactoryMachineEngine";
                }
            },
            // add admin page only in RECORDING mode
            new MachineEngine<AdminPage>() {
                @Override
                public Name<AdminPage> getName() {
                    return ADMIN_PAGE_NAME;
                }

                @Override
                public int getPriority() {
                    return 0;
                }

                @Override
                public BillOfMaterials getBillOfMaterial() {
                    return new BillOfMaterials(ImmutableSet.<Factory.Query<?>>of(appSettings));
                }

                @Override
                public ComponentBox<AdminPage> newComponent(SatisfiedBOM satisfiedBOM) {
                    AppSettings settings = satisfiedBOM.getOne(appSettings).get().getComponent();
                    if (!RestxContext.Modes.RECORDING.equals(settings.mode())) {
                        return new EmptyBox<>(ADMIN_PAGE_NAME);
                    }
                    return BoundlessComponentBox.FACTORY.of(new NamedComponent<>(ADMIN_PAGE_NAME,
                            new AdminPage("/@/ui/recorder/", "Recorder")));
                }
            }
        );
    }

}
TOP

Related Classes of restx.specs.SpecRecorderRouteFactoryMachine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.