Gridarta Editor
PickmapState.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 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.gui.mapfiles;
21 
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.Collection;
25 import java.util.regex.Pattern;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
45 public class PickmapState<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> {
46 
50  @NotNull
51  private static final Pattern PATTERN_VALID_PICKMAP_NAME = Pattern.compile("[-a-zA-Z_+ 0-9,]+");
52 
56  @NotNull
58 
62  @NotNull
63  private final String name;
64 
68  @NotNull
70 
74  @NotNull
76 
81  @Nullable
83 
88  @Nullable
90 
94  @NotNull
96 
101  @NotNull
102  private final Object sync = new Object();
103 
114  if (!isValidPickmapName(name)) {
115  throw new InvalidNameException(name);
116  }
117 
118  this.mapFolder = mapFolder;
119  this.name = name;
120  this.pickmapManager = pickmapManager;
121  this.mapReaderFactory = mapReaderFactory;
122  this.mapViewsManager = mapViewsManager;
123  }
124 
130  public static boolean isValidPickmapName(@NotNull final CharSequence name) {
131  return PATTERN_VALID_PICKMAP_NAME.matcher(name).matches();
132  }
133 
138  @NotNull
139  public File getFile() {
140  return new File(mapFolder.getDir(), name);
141  }
142 
149  @Nullable
151  synchronized (sync) {
152  return pickmap;
153  }
154  }
155 
162  @Nullable
164  synchronized (sync) {
165  return pickmapView;
166  }
167  }
168 
173  public void loadPickmap() throws IOException {
174  synchronized (sync) {
175  if (pickmap != null) {
176  return;
177  }
178 
179  final File file = getFile();
180  final MapReader<G, A> decoder = mapReaderFactory.newMapReader(file);
181  pickmap = pickmapManager.newMap(decoder.getGameObjects(), decoder.getMapArchObject(), new MapFile(file), true);
183  }
184  }
185 
189  public void freePickmap() {
190  synchronized (sync) {
191  if (pickmap != null) {
192  assert pickmapView != null;
194  assert pickmap != null;
196  pickmap = null;
197  }
198  }
199  }
200 
205  public void getUnsavedPickmaps(@NotNull final Collection<MapControl<G, A, R>> unsavedPickmaps) {
206  synchronized (sync) {
207  if (pickmap != null && pickmap.getMapModel().isModified()) {
208  unsavedPickmaps.add(pickmap);
209  }
210  }
211  }
212 
217  public void remove(final boolean deleteFile) {
218  mapFolder.removePickmap(this, deleteFile);
219  }
220 
226  public void save() throws IOException {
227  final MapControl<G, A, R> oldPickmap = getPickmap();
228  if (oldPickmap != null && oldPickmap.getMapModel().isModified()) {
229  oldPickmap.save();
230  }
231  }
232 
238  public void revert() throws IOException {
239  final MapControl<G, A, R> oldPickmap = getPickmap();
240  if (oldPickmap != null) {
241  freePickmap();
242  loadPickmap();
243  mapFolder.firePickmapReverted(this, oldPickmap);
244  }
245  }
246 
247 }
net.sf.gridarta.gui.mapfiles.PickmapState.freePickmap
void freePickmap()
Unloads the map file.
Definition: PickmapState.java:189
net.sf.gridarta.gui.mapfiles.PickmapState.getUnsavedPickmaps
void getUnsavedPickmaps(@NotNull final Collection< MapControl< G, A, R >> unsavedPickmaps)
Returns this pickmap if it has been loaded and is modified.
Definition: PickmapState.java:205
net.sf.gridarta.model.mapmanager
Definition: AbstractMapManager.java:20
net.sf.gridarta.gui.mapfiles.PickmapState.getFile
File getFile()
Returns the underlying map file.
Definition: PickmapState.java:139
net.sf.gridarta.model.io.MapReader
Interface for classes that read map files.
Definition: MapReader.java:31
net.sf.gridarta.model.mapmanager.MapManager
A MapManager manages all opened maps.
Definition: MapManager.java:37
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.mapfiles.PickmapState.getMapView
MapView< G, A, R > getMapView()
Returns the MapView instance for this pickmap.
Definition: PickmapState.java:163
net.sf.gridarta.gui.mapfiles.PickmapState.revert
void revert()
Reverts this pickmap to its underlying map file.
Definition: PickmapState.java:238
net.sf.gridarta.model.io.MapReaderFactory
A factory for creating MapReader instances.
Definition: MapReaderFactory.java:32
net.sf.gridarta.gui.mapfiles.PickmapState.pickmapView
MapView< G, A, R > pickmapView
The MapView or pickmap, or.
Definition: PickmapState.java:89
net.sf.gridarta.gui.mapfiles.PickmapState.isValidPickmapName
static boolean isValidPickmapName(@NotNull final CharSequence name)
Returns whether a pickmap name is valid.
Definition: PickmapState.java:130
net.sf
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.gui.mapfiles.PickmapState.loadPickmap
void loadPickmap()
Loads the pickmap from the underlying map file.
Definition: PickmapState.java:173
net.sf.gridarta.model.mapmanager.MapManager.newMap
MapControl< G, A, R > newMap(@Nullable List< G > objects, @NotNull A mapArchObject, @Nullable MapFile mapFile, boolean interactive)
Creates a new map control without view.
net.sf.gridarta.model.io.MapReader.getGameObjects
List< G > getGameObjects()
Return the decoded game objects.
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Reflects a game object (object on a map).
Definition: GameObject.java:36
net.sf.gridarta.model.mapcontrol
Definition: DefaultMapControl.java:20
net.sf.gridarta.model.mapmodel.MapModel.isModified
boolean isModified()
Return whether the map has been modified from the on-disk state.
net.sf.gridarta.gui.mapfiles.PickmapState.pickmapManager
final MapManager< G, A, R > pickmapManager
The MapManager for creating new pickmaps.
Definition: PickmapState.java:69
net.sf.gridarta.model.io.MapReaderFactory.newMapReader
MapReader< G, A > newMapReader(@NotNull File file)
Creates a new MapReader instance.
net.sf.gridarta.gui
Graphical User Interface of Gridarta.
net.sf.gridarta.gui.map.mapview.MapViewsManager.closeView
void closeView(@NotNull final MapView< G, A, R > mapView)
Closes a view of a MapControl.
Definition: MapViewsManager.java:238
net.sf.gridarta.gui.mapfiles.MapFolder.getDir
File getDir()
Returns the base directory.
Definition: MapFolder.java:143
net.sf.gridarta.gui.mapfiles.PickmapState.save
void save()
Saves this pickmap.
Definition: PickmapState.java:226
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.mapfiles.InvalidNameException
Indicates that a folder or pickmap name is invalid.
Definition: InvalidNameException.java:28
net.sf.gridarta.gui.mapfiles.MapFolder.firePickmapReverted
void firePickmapReverted(@NotNull final PickmapState< G, A, R > pickmapState, @NotNull final MapControl< G, A, R > oldPickmap)
Notifies all listeners about a reverted pickmap.
Definition: MapFolder.java:256
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.gui.mapfiles.PickmapState.pickmap
MapControl< G, A, R > pickmap
The MapControl instance representing the map file, or.
Definition: PickmapState.java:82
net.sf.gridarta.gui.map.mapview
Definition: AbstractMapView.java:20
net.sf.gridarta.gui.mapfiles.MapFolder< G, A, R >
net.sf.gridarta.gui.map.mapview.MapView
A map view consists of a map grid and a map cursor, and is attached to a map control.
Definition: MapView.java:43
net.sf.gridarta.gui.mapfiles.PickmapState.name
final String name
The underlying map file name.
Definition: PickmapState.java:63
net.sf.gridarta.model.mapcontrol.MapControl.save
void save()
Saves the map to a file.
net.sf.gridarta.model.mapmodel.MapFile
The location of a map file with a map directory.
Definition: MapFile.java:31
net.sf.gridarta.gui.map.mapview.MapViewsManager.newMapView
MapView< G, A, R > newMapView(@NotNull final MapControl< G, A, R > mapControl, @Nullable final Point viewPosition)
Creates a new map view.
Definition: MapViewsManager.java:229
net.sf.gridarta.model.io
Reading and writing of maps, handling of paths.
Definition: AbstractAnimationObjectsReader.java:20
net.sf.gridarta.gui.mapfiles.PickmapState
Maintains the state of a pickmap file.
Definition: PickmapState.java:45
net.sf.gridarta.model.mapmanager.MapManager.release
void release(@NotNull MapControl< G, A, R > mapControl)
Releases a MapControl instance.
net.sf.gridarta.gui.mapfiles.PickmapState.PickmapState
PickmapState(@NotNull final MapFolder< G, A, R > mapFolder, @NotNull final String name, @NotNull final MapReaderFactory< G, A > mapReaderFactory, @NotNull final MapManager< G, A, R > pickmapManager, @NotNull final MapViewsManager< G, A, R > mapViewsManager)
Creates a new instance.
Definition: PickmapState.java:113
net.sf.gridarta.model
net.sf.gridarta.gui.mapfiles.PickmapState.PATTERN_VALID_PICKMAP_NAME
static final Pattern PATTERN_VALID_PICKMAP_NAME
The Pattern that matches valid pickmap names.
Definition: PickmapState.java:51
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.gui.map
Base classes for rendering maps.
Definition: AbstractPerMapDialogManager.java:20
net.sf.gridarta.gui.mapfiles.MapFolder.removePickmap
void removePickmap(@NotNull final PickmapState< G, A, R > pickmapState, final boolean deleteFile)
Removes a PickmapState from this folder.
Definition: MapFolder.java:172
net.sf.gridarta.gui.mapfiles.PickmapState.mapReaderFactory
final MapReaderFactory< G, A > mapReaderFactory
The MapReaderFactory to use.
Definition: PickmapState.java:75
net.sf.gridarta.gui.mapfiles.PickmapState.sync
final Object sync
The synchronization object for accessed to pickmap and {}.
Definition: PickmapState.java:102
net.sf.gridarta.model.mapcontrol.MapControl
Currently nothing more than a marker interface for unification.
Definition: MapControl.java:35
net.sf.gridarta.model.mapcontrol.MapControl.getMapModel
MapModel< G, A, R > getMapModel()
Returns the map model.
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.model.io.MapReader.getMapArchObject
A getMapArchObject()
Returns the MapArchObject read from this MapFileDecode.
net.sf.gridarta.gui.map.mapview.MapViewsManager
Stores all existing MapViews.
Definition: MapViewsManager.java:47
net.sf.gridarta.gui.mapfiles.PickmapState.getPickmap
MapControl< G, A, R > getPickmap()
Returns the MapControl representing this pickmap.
Definition: PickmapState.java:150
net.sf.gridarta.gui.mapfiles.PickmapState.mapViewsManager
final MapViewsManager< G, A, R > mapViewsManager
The MapViewsManager.
Definition: PickmapState.java:95
net.sf.gridarta.gui.mapfiles.PickmapState.mapFolder
final MapFolder< G, A, R > mapFolder
The folder this pickmap is part of.
Definition: PickmapState.java:57