Passed
Push — master ( d5a095...990124 )
by Vincent
04:15 queued 12s
created

configureService(ContainerConfigurator)   B

Complexity

Conditions 2

Size

Total Lines 62
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 31
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 41
c 1
b 0
f 0
dl 0
loc 62
ccs 31
cts 31
cp 1
crap 2
rs 8.896

1 Method

Rating   Name   Duplication   Size   Complexity  
fr.quatrevieux.araknemu.game.admin.AdminModule.$AbstractContextConfigurator$.configure(GlobalContext) 0 3 ?

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
/*
2
 * This file is part of Araknemu.
3
 *
4
 * Araknemu is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * Araknemu is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with Araknemu.  If not, see <https://www.gnu.org/licenses/>.
16
 *
17
 * Copyright (c) 2017-2020 Vincent Quatrevieux
18
 */
19
20
package fr.quatrevieux.araknemu.game.admin;
21
22
import fr.quatrevieux.araknemu.Araknemu;
23
import fr.quatrevieux.araknemu.common.account.banishment.BanIpService;
24
import fr.quatrevieux.araknemu.common.account.banishment.BanishmentService;
25
import fr.quatrevieux.araknemu.core.di.ContainerConfigurator;
26
import fr.quatrevieux.araknemu.core.di.ContainerModule;
27
import fr.quatrevieux.araknemu.data.living.repository.account.AccountRepository;
28
import fr.quatrevieux.araknemu.data.world.repository.environment.MapTemplateRepository;
29
import fr.quatrevieux.araknemu.game.GameService;
30
import fr.quatrevieux.araknemu.game.ShutdownService;
31
import fr.quatrevieux.araknemu.game.account.AccountService;
32
import fr.quatrevieux.araknemu.game.admin.account.AccountContext;
33
import fr.quatrevieux.araknemu.game.admin.account.AccountContextResolver;
34
import fr.quatrevieux.araknemu.game.admin.account.Ban;
35
import fr.quatrevieux.araknemu.game.admin.account.Info;
36
import fr.quatrevieux.araknemu.game.admin.context.AbstractContextConfigurator;
37
import fr.quatrevieux.araknemu.game.admin.context.AggregationContext;
38
import fr.quatrevieux.araknemu.game.admin.context.ContextResolver;
39
import fr.quatrevieux.araknemu.game.admin.context.SelfContextResolver;
40
import fr.quatrevieux.araknemu.game.admin.debug.Area;
41
import fr.quatrevieux.araknemu.game.admin.debug.DebugContext;
42
import fr.quatrevieux.araknemu.game.admin.debug.DebugContextResolver;
43
import fr.quatrevieux.araknemu.game.admin.debug.FightPos;
44
import fr.quatrevieux.araknemu.game.admin.debug.LineOfSight;
45
import fr.quatrevieux.araknemu.game.admin.debug.MapStats;
46
import fr.quatrevieux.araknemu.game.admin.debug.Movement;
47
import fr.quatrevieux.araknemu.game.admin.exception.ExceptionHandler;
48
import fr.quatrevieux.araknemu.game.admin.executor.CommandExecutor;
49
import fr.quatrevieux.araknemu.game.admin.executor.DefaultCommandExecutor;
50
import fr.quatrevieux.araknemu.game.admin.executor.argument.ArgumentsHydrator;
51
import fr.quatrevieux.araknemu.game.admin.executor.argument.HydratorsAggregate;
52
import fr.quatrevieux.araknemu.game.admin.global.GlobalContext;
53
import fr.quatrevieux.araknemu.game.admin.global.Help;
54
import fr.quatrevieux.araknemu.game.admin.player.GetItem;
55
import fr.quatrevieux.araknemu.game.admin.player.PlayerContext;
56
import fr.quatrevieux.araknemu.game.admin.player.PlayerContextResolver;
57
import fr.quatrevieux.araknemu.game.admin.player.teleport.CellResolver;
58
import fr.quatrevieux.araknemu.game.admin.player.teleport.Goto;
59
import fr.quatrevieux.araknemu.game.admin.player.teleport.LocationResolver;
60
import fr.quatrevieux.araknemu.game.admin.player.teleport.MapResolver;
61
import fr.quatrevieux.araknemu.game.admin.player.teleport.PlayerResolver;
62
import fr.quatrevieux.araknemu.game.admin.player.teleport.PositionResolver;
63
import fr.quatrevieux.araknemu.game.admin.server.Banip;
64
import fr.quatrevieux.araknemu.game.admin.server.Online;
65
import fr.quatrevieux.araknemu.game.admin.server.ServerContext;
66
import fr.quatrevieux.araknemu.game.admin.server.ServerContextResolver;
67
import fr.quatrevieux.araknemu.game.admin.server.Shutdown;
68
import fr.quatrevieux.araknemu.game.exploration.map.ExplorationMapService;
69
import fr.quatrevieux.araknemu.game.exploration.map.GeolocationService;
70
import fr.quatrevieux.araknemu.game.fight.FightService;
71
import fr.quatrevieux.araknemu.game.item.ItemService;
72
import fr.quatrevieux.araknemu.game.player.PlayerService;
73
import fr.quatrevieux.araknemu.game.spell.effect.SpellEffectService;
74
import org.apache.logging.log4j.LogManager;
75
76
/**
77
 * Register the admin service and console commands
78
 *
79
 * Note: Only commands which needs dependencies from the container should be defined here. "simple" commands may be defined directly on the context
80
 */
81
public final class AdminModule implements ContainerModule {
82
    private final Araknemu app;
83
84 1
    public AdminModule(Araknemu app) {
85 1
        this.app = app;
86 1
    }
87
88
    @Override
89
    public void configure(ContainerConfigurator configurator) {
90 1
        configureService(configurator);
91 1
        configureResolvers(configurator);
92 1
    }
93
94
    private void configureService(ContainerConfigurator configurator) {
95 1
        configurator.factory(Araknemu.class, container -> app);
96
97 1
        configurator.persist(
98
            AdminSessionService.class,
99 1
            container -> new AdminSessionService(
100 1
                container.get(AdminUser.Factory.class)
101
            )
102
        );
103
104 1
        configurator.persist(
105
            AdminUser.Factory.class,
106 1
            container -> ((player) -> new AdminUser(
107
                player,
108 1
                container.get(CommandExecutor.class),
109 1
                container.get(CommandParser.class),
110 1
                container.get(PlayerContextResolver.class).resolve(player),
111 1
                container.get(ExceptionHandler.class),
112 1
                LogManager.getLogger(AdminModule.class)
113
            ))
114
        );
115
116 1
        configurator.persist(
117
            GlobalContext.class,
118 1
            container -> new GlobalContext().register(new AbstractContextConfigurator<GlobalContext>() {
119
                @Override
120
                public void configure(GlobalContext context) {
121 1
                    add(new Help(container.get(ArgumentsHydrator.class)));
122 1
                }
123
            })
124
        );
125
126 1
        configurator.persist(SelfContextResolver.class, container -> new SelfContextResolver());
127
128 1
        configurator.persist(
129
            CommandExecutor.class,
130 1
            container -> new DefaultCommandExecutor(container.get(ArgumentsHydrator.class))
131
        );
132
133 1
        configurator.persist(
134
            ArgumentsHydrator.class,
135 1
            container -> new HydratorsAggregate()
136
        );
137
138 1
        configurator.persist(
139
            CommandParser.class,
140 1
            container -> new ContextCommandParser(
141 1
                performer -> new AggregationContext(
142 1
                    performer.self(),
143 1
                    container.get(ServerContextResolver.class).resolve(performer, null)
144
                ),
145
                new ContextResolver[]{
146 1
                    container.get(PlayerContextResolver.class),
147 1
                    container.get(AccountContextResolver.class),
148 1
                    container.get(DebugContextResolver.class),
149 1
                    container.get(ServerContextResolver.class),
150 1
                    container.get(SelfContextResolver.class),
151
                }
152
            )
153
        );
154
155 1
        configurator.persist(ExceptionHandler.class, container -> new ExceptionHandler());
156 1
    }
157
158
    private void configureResolvers(ContainerConfigurator configurator) {
159 1
        configurator.factory(
160
            PlayerContextResolver.class,
161 1
            container -> new PlayerContextResolver(container.get(PlayerService.class), container.get(AccountContextResolver.class))
162 1
                .register(new AbstractContextConfigurator<PlayerContext>() {
163
                    @Override
164
                    public void configure(PlayerContext context) {
165 1
                        add(new GetItem(context.player(), container.get(ItemService.class)));
166 1
                        add(new Goto(context.player(), container.get(ExplorationMapService.class), new LocationResolver[] {
167 1
                            new MapResolver(container.get(ExplorationMapService.class)),
168 1
                            new PositionResolver(context.player(), container.get(GeolocationService.class)),
169 1
                            new PlayerResolver(container.get(PlayerService.class), container.get(ExplorationMapService.class)),
170
                            new CellResolver(),
171
                        }));
172 1
                    }
173
                })
174
        );
175
176 1
        configurator.persist(
177
            AccountContextResolver.class,
178 1
            container -> new AccountContextResolver(container.get(AccountService.class), container.get(GlobalContext.class))
179 1
                .register(new AbstractContextConfigurator<AccountContext>() {
180
                    @Override
181
                    public void configure(AccountContext context) {
182 1
                        add(new Info(context.account(), container.get(AccountRepository.class)));
183 1
                        add(new Ban(context.account(), container.get(BanishmentService.class)));
184 1
                    }
185
                })
186
        );
187
188 1
        configurator.persist(
189
            DebugContextResolver.class,
190 1
            container -> new DebugContextResolver(container.get(GlobalContext.class))
191 1
                .register(new AbstractContextConfigurator<DebugContext>() {
192
                    @Override
193
                    public void configure(DebugContext context) {
194 1
                        add(new FightPos());
195 1
                        add(new Movement(container.get(MapTemplateRepository.class)));
196 1
                        add(new MapStats(container.get(MapTemplateRepository.class)));
197 1
                        add(new Area(container.get(SpellEffectService.class)));
198 1
                        add(new LineOfSight(container.get(MapTemplateRepository.class)));
199 1
                    }
200
                })
201
        );
202
203 1
        configurator.persist(
204
            ServerContextResolver.class,
205 1
            container -> new ServerContextResolver(container.get(GlobalContext.class))
206 1
                .register(new AbstractContextConfigurator<ServerContext>() {
207
                    @Override
208
                    public void configure(ServerContext context) {
209 1
                        add(new Online(
210 1
                            container.get(PlayerService.class),
211 1
                            container.get(ExplorationMapService.class),
212 1
                            container.get(GameService.class)
213
                        ));
214 1
                        add(new Shutdown(container.get(ShutdownService.class)));
215 1
                        add(new Banip(container.get(BanIpService.class)));
216 1
                        add(new fr.quatrevieux.araknemu.game.admin.server.Info(
217 1
                            container.get(Araknemu.class),
218 1
                            container.get(PlayerService.class),
219 1
                            container.get(GameService.class),
220 1
                            container.get(FightService.class)
221
                        ));
222 1
                    }
223
                })
224
        );
225 1
    }
226
}
227