Gridarta Editor
AbstractServerActions.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.actions;
21 
22 import java.awt.Point;
23 import java.io.IOException;
24 import javax.swing.Action;
35 import net.sf.japi.swing.action.ActionMethod;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
44 public abstract class AbstractServerActions<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> implements EditorAction, MapViewManagerListener<G, A, R> {
45 
49  @Nullable
51 
55  @NotNull
57 
61  @Nullable
62  private Action aOpenInClient;
63 
69  this.fileControl = fileControl;
70  }
71 
75  @ActionMethod
76  public void openInClient() {
77  doOpenInClient(true);
78  }
79 
83  private void updateActions() {
84  if (aOpenInClient != null) {
85  aOpenInClient.setEnabled(doOpenInClient(false));
86  }
87  }
88 
94  private boolean doOpenInClient(final boolean performAction) {
95  final MapView<G, A, R> mapView = currentMapView;
96  if (mapView == null) {
97  return false;
98  }
99 
100  final MapControl<G, A, R> mapControl = mapView.getMapControl();
101  final MapModel<G, A, R> mapModel = mapControl.getMapModel();
102  final MapFile mapFile = mapModel.getMapFile();
103  if (mapFile == null) {
104  return false;
105  }
106 
107  if (performAction) {
108  if (mapModel.isModified() && !fileControl.save(mapControl)) {
109  return false;
110  }
111 
112  final Point cursor = mapView.getMapCursor().getLocation();
113  final int mapX = cursor.x;
114  final int mapY = cursor.y;
115  final String mapPath = mapFile.getMapPath().toString();
116  try {
117  resetMap(mapPath); // TODO: remove from here and add to map saving
118  teleportCharacterToMap(mapPath, mapX, mapY);
119  } catch (final IOException ex) {
120  fileControl.reportTeleportCharacterError(mapPath, ex.getMessage());
121  }
122  }
123 
124  return true;
125  }
126 
132  protected abstract void resetMap(@NotNull String mapPath) throws IOException;
133 
141  protected abstract void teleportCharacterToMap(@NotNull String mapPath, int mapX, int mapY) throws IOException;
142 
143  @Override
144  public void setAction(@NotNull final Action action, @NotNull final String name) {
145  aOpenInClient = action;
146  updateActions();
147  }
148 
149  @Override
150  public void activeMapViewChanged(@Nullable final MapView<G, A, R> mapView) {
151  currentMapView = mapView;
152  updateActions();
153  }
154 
158  @Override
159  public void mapViewCreated(@NotNull final MapView<G, A, R> mapView) {
160  // ignore
161  }
162 
166  @Override
167  public void mapViewClosing(@NotNull final MapView<G, A, R> mapView) {
168  // ignore
169  }
170 
171 }
net.sf.gridarta.model.mapmodel.MapFile
Definition: MapFile.java:31
net.sf.gridarta.model.mapmanager
Definition: AbstractMapManager.java:20
net.sf.gridarta.model.mapmanager.FileControl.save
boolean save(@NotNull MapControl< G, A, R > mapControl)
net.sf.gridarta
net.sf.gridarta.model.mapmanager.FileControl
Definition: FileControl.java:30
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.actions.AbstractServerActions.teleportCharacterToMap
abstract void teleportCharacterToMap(@NotNull String mapPath, int mapX, int mapY)
net.sf
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.actions.AbstractServerActions
Definition: AbstractServerActions.java:44
net.sf.gridarta.model.mapcontrol
Definition: DefaultMapControl.java:20
net.sf.gridarta.model.mapmanager.FileControl.reportTeleportCharacterError
void reportTeleportCharacterError(@NotNull String mapPath, @NotNull String message)
net.sf.gridarta.model.mapmodel.MapModel
Definition: MapModel.java:75
net.sf.gridarta.actions.AbstractServerActions.currentMapView
MapView< G, A, R > currentMapView
Definition: AbstractServerActions.java:50
net.sf.gridarta.gui
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.actions.AbstractServerActions.mapViewCreated
void mapViewCreated(@NotNull final MapView< G, A, R > mapView)
Definition: AbstractServerActions.java:159
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.actions.AbstractServerActions.aOpenInClient
Action aOpenInClient
Definition: AbstractServerActions.java:62
net.sf.gridarta.actions.AbstractServerActions.openInClient
void openInClient()
Definition: AbstractServerActions.java:76
net.sf.gridarta.model.mapmodel.MapModel.getMapFile
MapFile getMapFile()
net.sf.gridarta.gui.map.mapview
Definition: AbstractMapView.java:20
net.sf.gridarta.model.mapmodel.AbsoluteMapPath.toString
String toString()
Definition: AbsoluteMapPath.java:117
net.sf.gridarta.actions.AbstractServerActions.resetMap
abstract void resetMap(@NotNull String mapPath)
net.sf.gridarta.gui.map.mapview.MapView.getMapControl
MapControl< G, A, R > getMapControl()
net.sf.gridarta.model.mapcursor.MapCursor.getLocation
Point getLocation()
Definition: MapCursor.java:227
net.sf.gridarta.actions.AbstractServerActions.setAction
void setAction(@NotNull final Action action, @NotNull final String name)
Definition: AbstractServerActions.java:144
net.sf.gridarta.gui.map.mapview.MapView
Definition: MapView.java:43
name
name
Definition: ArchetypeTypeSetParserTest-ignoreDefaultAttribute1-result.txt:2
net.sf.gridarta.actions.AbstractServerActions.AbstractServerActions
AbstractServerActions(@NotNull final FileControl< G, A, R > fileControl)
Definition: AbstractServerActions.java:68
net.sf.gridarta.actions.AbstractServerActions.fileControl
final FileControl< G, A, R > fileControl
Definition: AbstractServerActions.java:56
net.sf.gridarta.model.mapcontrol.MapControl
Definition: MapControl.java:35
net.sf.gridarta.model.mapmodel.MapModel.isModified
boolean isModified()
net.sf.gridarta.gui.map.mapview.MapViewManagerListener
Definition: MapViewManagerListener.java:33
net.sf.gridarta.actions.AbstractServerActions.doOpenInClient
boolean doOpenInClient(final boolean performAction)
Definition: AbstractServerActions.java:94
net.sf.gridarta.actions.AbstractServerActions.activeMapViewChanged
void activeMapViewChanged(@Nullable final MapView< G, A, R > mapView)
Definition: AbstractServerActions.java:150
net.sf.gridarta.model
net.sf.gridarta.utils.EditorAction
Definition: EditorAction.java:29
net.sf.gridarta.actions.AbstractServerActions.mapViewClosing
void mapViewClosing(@NotNull final MapView< G, A, R > mapView)
Definition: AbstractServerActions.java:167
net.sf.gridarta.gui.map
Definition: AbstractPerMapDialogManager.java:20
net.sf.gridarta.actions.AbstractServerActions.updateActions
void updateActions()
Definition: AbstractServerActions.java:83
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.model.mapmodel.MapFile.getMapPath
AbsoluteMapPath getMapPath()
Definition: MapFile.java:93
net.sf.gridarta.model.mapcontrol.MapControl.getMapModel
MapModel< G, A, R > getMapModel()
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.map.mapview.MapView.getMapCursor
MapCursor< G, A, R > getMapCursor()