Gridarta Editor
ExitChecker.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.model.validation.checks;
21 
22 import java.io.File;
36 import org.jetbrains.annotations.NotNull;
37 
42 public class ExitChecker<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractValidator<G, A, R> implements GameObjectValidator<G, A, R> {
43 
47  private final int exitTypeNo;
48 
54  public ExitChecker(@NotNull final ValidatorPreferences validatorPreferences, final int exitTypeNo) {
55  super(validatorPreferences);
56  this.exitTypeNo = exitTypeNo;
57  }
58 
59  @Override
60  public void validateGameObject(@NotNull final G gameObject, @NotNull final ErrorCollector<G, A, R> errorCollector) {
61  if (gameObject.getTypeNo() != exitTypeNo) {
62  return;
63  }
64 
65  final String path = gameObject.getAttributeString(BaseObject.SLAYING, false);
66  if (path.length() <= 0 || path.equals("/!") || path.startsWith("/random/")) {
67  return;
68  }
69 
70  final MapSquare<G, A, R> mapSquare = gameObject.getMapSquare();
71  assert mapSquare != null;
72  try {
73  final File file = mapSquare.getMapModel().getMapFile(MapPathUtils.newMapPath(path)).getFile();
74  if (!file.exists() || file.isDirectory()) {
75  errorCollector.collect(new ExitError<>(gameObject, path));
76  }
77  } catch (final SameMapException ignored) {
78  } catch (final UnsavedMapException ignored) {
79  }
80  }
81 
82 }
static MapPath newMapPath(@NotNull final String string)
Creates a MapPath instance from string representation.
Exception thrown if the destination path points to the source map.
This is the base class for validators.
final int exitTypeNo
The archetype type number of exits.
MapModel< G, A, R > getMapModel()
Returns the MapModel this map square is part of.
Definition: MapSquare.java:99
This package contains the framework for validating maps.
void validateGameObject(@NotNull final G gameObject, @NotNull final ErrorCollector< G, A, R > errorCollector)
Validates a game object.
Validation error that&#39;s used when a map has wrong exit paths.
Definition: ExitError.java:32
String SLAYING
The name of the "slaying" attribute.
Base package of all Gridarta classes.
ExitChecker(@NotNull final ValidatorPreferences validatorPreferences, final int exitTypeNo)
Create a ExitChecker.
Reflects a game object (object on a map).
Definition: GameObject.java:36
A Validator to assert that exits are connected to maps properly.
GameObjects are the objects based on Archetypes found on maps.
Utility class for MapPath related functions.
final ValidatorPreferences validatorPreferences
The ValidatorPreferences to use.
Exception thrown if an operation is attempted on an unsaved map.
MapFile getMapFile()
Returns the map file.
An interface for classes that collect errors.