Gridarta Editor
SlayingChecker.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.util.ArrayList;
23 import java.util.Collection;
24 import java.util.regex.Pattern;
35 import org.jetbrains.annotations.NotNull;
36 
42 public class SlayingChecker<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 
48  @NotNull
49  private final Pattern defaultRegex;
50 
54  @NotNull
55  private final Collection<Entry<G, A, R>> entries = new ArrayList<>();
56 
63  public SlayingChecker(@NotNull final ValidatorPreferences validatorPreferences, @NotNull final Pattern defaultRegex) {
64  super(validatorPreferences);
65  this.defaultRegex = defaultRegex;
66  }
67 
73  public void addMatcher(@NotNull final GameObjectMatcher gameObjectMatcher, @NotNull final Pattern regex) {
74  entries.add(new Entry<>(gameObjectMatcher, regex));
75  }
76 
77  @Override
78  public void validateGameObject(@NotNull final G gameObject, @NotNull final ErrorCollector<G, A, R> errorCollector) {
79  boolean useDefaultRegex = true;
80  for (final Entry<G, A, R> entry : entries) {
81  if (entry.validate(gameObject, errorCollector)) {
82  useDefaultRegex = false;
83  }
84  }
85 
86  if (useDefaultRegex) {
87  final CharSequence slaying = gameObject.getAttributeString(BaseObject.SLAYING, true);
88  if (!defaultRegex.matcher(slaying).matches()) {
89  errorCollector.collect(new SlayingError<>(gameObject));
90  }
91  }
92  }
93 
94 }
This is the base class for validators.
Interface for classes that match GameObjects.
This package contains classes related to matching GameObjects, so called GameObjectMatchers.
This package contains the framework for validating maps.
String SLAYING
The name of the "slaying" attribute.
An GameObjectValidator to assert that game objects do not have critical slaying strings.
Base package of all Gridarta classes.
Reflects a game object (object on a map).
Definition: GameObject.java:36
SlayingChecker(@NotNull final ValidatorPreferences validatorPreferences, @NotNull final Pattern defaultRegex)
Creates a new instance.
GameObjects are the objects based on Archetypes found on maps.
final Pattern defaultRegex
The regular expression for any "slaying" field not matching any specific game object.
final ValidatorPreferences validatorPreferences
The ValidatorPreferences to use.
An entry to match consisting of a GameObjectMatcher and a regular expression which defined the allowe...
Definition: Entry.java:37
final Collection< Entry< G, A, R > > entries
The matchers to check.
Validation error that&#39;s used when the SlayingChecker detected a possible error on the map...
An interface for classes that collect errors.
void validateGameObject(@NotNull final G gameObject, @NotNull final ErrorCollector< G, A, R > errorCollector)
Validates a game object.
void addMatcher(@NotNull final GameObjectMatcher gameObjectMatcher, @NotNull final Pattern regex)
Adds a matcher to check.