Gridarta Editor
net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R > Class Template Reference

Maintains a MapsIndex for the maps directory. More...

+ Inheritance diagram for net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >:
+ Collaboration diagram for net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >:

Classes

enum  State
 Indexer states. More...
 

Public Member Functions

 MapsIndexer (@NotNull final MapsIndex mapsIndex, @NotNull final MapManager< G, A, R > mapManager, @NotNull final ProjectSettings projectSettings)
 Creates a new instance. More...
 
void start ()
 Starts indexing. More...
 
void stop () throws InterruptedException
 Stops indexing. More...
 
void waitForIdle () throws InterruptedException
 Blocks the calling thread until all pending maps have been indexed. More...
 

Private Member Functions

void indexPendingMaps ()
 Indexes one pending map from mapsIndex. More...
 
void loadMapsIndex ()
 Loads mapsIndex from its cache file. More...
 
void reportStateChange ()
 Logs a changed value of state. More...
 
void saveMapsIndex ()
 Saves mapsIndex to its cache file if modified. More...
 
void scanMapsDirectoryInt (@NotNull final MapFile dir, @NotNull final String mapPath)
 Scans a directory for files. More...
 
void setState (@NotNull final State state)
 Sets a new value to state. More...
 
void updateMapsDirectory ()
 Checks whether newMapsDirectory has been set and updates mapsDirectory accordingly. More...
 

Static Private Member Functions

static File getCacheFile (@NotNull final File mapsDirectory)
 Returns the cache file for a given maps directory. More...
 

Private Attributes

final IndexListener< MapFileindexListener
 The IndexListener attached to mapsIndex to detect newly added pending maps. More...
 
final MapControlListener< G, A, R > mapControlListener
 The MapControlListener attached to all opened maps. More...
 
final MapManager< G, A, R > mapManager
 The MapManager for loading map files. More...
 
final MapManagerListener< G, A, R > mapManagerListener
 The MapManagerListener attached to mapManager to detect current map changes. More...
 
File mapsDirectory
 The currently indexed maps directory. More...
 
final MapsIndex mapsIndex
 The MapsIndex being updated. More...
 
final Semaphore mapsIndexSemaphore = new Semaphore(1)
 A pending map may exist in mapsIndex if a permit is available. More...
 
File newMapsDirectory
 The maps directory to index. More...
 
final ProjectSettings projectSettings
 The ProjectSettings instance. More...
 
final ProjectSettingsListener projectSettingsListener
 The ProjectSettingsListener attached to projectSettings for tracking changed maps directories. More...
 
final Runnable runnable
 The Runnable scanning the maps directory and updating the index. More...
 
State state = State.INIT
 The indexer state. More...
 
final Object syncMapsDirectory = new Object()
 The object for synchronizing access to mapsDirectory and newMapsDirectory. More...
 
final Object syncState = new Object()
 The object for synchronizing access to state. More...
 
final Thread thread = new Thread(runnable, "indexer")
 The Thread executing runnable. More...
 

Static Private Attributes

static final Category LOG = Logger.getLogger(MapsIndexer.class)
 The Logger for printing log messages. More...
 

Detailed Description

Maintains a MapsIndex for the maps directory.

Changed maps are tracked and the index is updated.

Author
Andreas Kirschbaum

Definition at line 57 of file MapsIndexer.java.

Constructor & Destructor Documentation

◆ MapsIndexer()

net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.MapsIndexer ( @NotNull final MapsIndex  mapsIndex,
@NotNull final MapManager< G, A, R >  mapManager,
@NotNull final ProjectSettings  projectSettings 
)

Creates a new instance.

Parameters
mapsIndexthe maps index to update
mapManagerthe map manager for loading map files
projectSettingsthe project settings instance; defines the indexed maps directory

Definition at line 285 of file MapsIndexer.java.

Member Function Documentation

◆ getCacheFile()

static File net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.getCacheFile ( @NotNull final File  mapsDirectory)
staticprivate

Returns the cache file for a given maps directory.

Parameters
mapsDirectorythe maps directory
Returns
the cache file

Definition at line 490 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.loadMapsIndex(), and net.sf.gridarta.model.index.MapsIndexer< G, A, R >.saveMapsIndex().

+ Here is the caller graph for this function:

◆ indexPendingMaps()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.indexPendingMaps ( )
private

Indexes one pending map from mapsIndex.

Does nothing if no pending map exists.

Definition at line 455 of file MapsIndexer.java.

◆ loadMapsIndex()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.loadMapsIndex ( )
private

Loads mapsIndex from its cache file.

Definition at line 406 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.updateMapsDirectory().

+ Here is the caller graph for this function:

◆ reportStateChange()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.reportStateChange ( )
private

Logs a changed value of state.

Definition at line 547 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.MapsIndexer(), and net.sf.gridarta.model.index.MapsIndexer< G, A, R >.setState().

+ Here is the caller graph for this function:

◆ saveMapsIndex()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.saveMapsIndex ( )
private

Saves mapsIndex to its cache file if modified.

Definition at line 373 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.stop(), and net.sf.gridarta.model.index.MapsIndexer< G, A, R >.updateMapsDirectory().

+ Here is the caller graph for this function:

◆ scanMapsDirectoryInt()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.scanMapsDirectoryInt ( @NotNull final MapFile  dir,
@NotNull final String  mapPath 
)
private

Scans a directory for files.

Adds all files found to mapsIndex.

Parameters
dirthe directory to scan
mapPaththe map path corresponding to
dir

Definition at line 435 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.scanMapsDirectoryInt(), and net.sf.gridarta.model.index.MapsIndexer< G, A, R >.updateMapsDirectory().

+ Here is the caller graph for this function:

◆ setState()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.setState ( @NotNull final State  state)
private

Sets a new value to state.

Logs changed values.

Parameters
statethe new state

Definition at line 532 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.indexPendingMaps(), and net.sf.gridarta.model.index.MapsIndexer< G, A, R >.updateMapsDirectory().

+ Here is the caller graph for this function:

◆ start()

◆ stop()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.stop ( ) throws InterruptedException

Stops indexing.

Must not be called more than once or before start() has been called.

Exceptions
InterruptedExceptionif the current thread was interrupted

Definition at line 310 of file MapsIndexer.java.

Referenced by net.sf.gridarta.gui.dialog.gomap.GoMapDialogManager< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.GoMapDialogManager(), and net.sf.gridarta.model.index.MapsIndexerTest.test1().

+ Here is the caller graph for this function:

◆ updateMapsDirectory()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.updateMapsDirectory ( )
private

Checks whether newMapsDirectory has been set and updates mapsDirectory accordingly.

Definition at line 347 of file MapsIndexer.java.

◆ waitForIdle()

void net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.waitForIdle ( ) throws InterruptedException

Blocks the calling thread until all pending maps have been indexed.

Exceptions
InterruptedExceptionif the current thread was interrupted during wait

Definition at line 335 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexerTest.test1(), and net.sf.gridarta.model.index.MapsIndexerTest.test2().

+ Here is the caller graph for this function:

Member Data Documentation

◆ indexListener

final IndexListener<MapFile> net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.indexListener
private
Initial value:
= new IndexListener<MapFile>() {
@Override
public void valueAdded(@NotNull final MapFile value) {
}
@Override
public void valueRemoved(@NotNull final MapFile value) {
}
@Override
public void nameChanged() {
}
@Override
public void pendingChanged() {
mapsIndexSemaphore.release();
}
@Override
public void indexingFinished() {
}
}

The IndexListener attached to mapsIndex to detect newly added pending maps.

Definition at line 219 of file MapsIndexer.java.

◆ LOG

final Category net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.LOG = Logger.getLogger(MapsIndexer.class)
staticprivate

The Logger for printing log messages.

Definition at line 63 of file MapsIndexer.java.

◆ mapControlListener

final MapControlListener<G, A, R> net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapControlListener
private
Initial value:
= new MapControlListener<G, A, R>() {
@Override
public void saved(@NotNull final DefaultMapControl<G, A, R> mapControl) {
final MapFile mapFile = mapControl.getMapModel().getMapFile();
if (mapFile != null) {
}
}
}

The MapControlListener attached to all opened maps.

Definition at line 186 of file MapsIndexer.java.

◆ mapManager

final MapManager<G, A, R> net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapManager
private

The MapManager for loading map files.

Definition at line 81 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.MapsIndexer().

◆ mapManagerListener

final MapManagerListener<G, A, R> net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapManagerListener
private
Initial value:
= new MapManagerListener<G, A, R>() {
@Override
public void currentMapChanged(@Nullable final MapControl<G, A, R> mapControl) {
}
@Override
public void mapCreated(@NotNull final MapControl<G, A, R> mapControl, final boolean interactive) {
if (!mapControl.isPickmap()) {
mapControl.addMapControlListener(mapControlListener);
}
}
@Override
public void mapClosing(@NotNull final MapControl<G, A, R> mapControl) {
}
@Override
public void mapClosed(@NotNull final MapControl<G, A, R> mapControl) {
if (!mapControl.isPickmap()) {
mapControl.removeMapControlListener(mapControlListener);
}
}
}

The MapManagerListener attached to mapManager to detect current map changes.

Definition at line 154 of file MapsIndexer.java.

◆ mapsDirectory

File net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapsDirectory
private

The currently indexed maps directory.

Definition at line 100 of file MapsIndexer.java.

◆ mapsIndex

final MapsIndex net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapsIndex
private

The MapsIndex being updated.

Definition at line 75 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.MapsIndexer().

◆ mapsIndexSemaphore

final Semaphore net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.mapsIndexSemaphore = new Semaphore(1)
private

A pending map may exist in mapsIndex if a permit is available.

Definition at line 69 of file MapsIndexer.java.

◆ newMapsDirectory

File net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.newMapsDirectory
private

The maps directory to index.

If

null

, mapsDirectory is valid.

Definition at line 107 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.updateMapsDirectory().

◆ projectSettings

final ProjectSettings net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.projectSettings
private

◆ projectSettingsListener

final ProjectSettingsListener net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.projectSettingsListener
private
Initial value:
= new ProjectSettingsListener() {
@Override
public void mapsDirectoryChanged(@NotNull final File mapsDirectory) {
synchronized (syncMapsDirectory) {
}
}
}

The ProjectSettingsListener attached to projectSettings for tracking changed maps directories.

Definition at line 203 of file MapsIndexer.java.

◆ runnable

final Runnable net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.runnable
private
Initial value:
= new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
if (state == State.IDLE) {
try {
mapsIndexSemaphore.acquire();
} catch (final InterruptedException ignored) {
Thread.currentThread().interrupt();
break;
}
}
}
}
}

The Runnable scanning the maps directory and updating the index.

Definition at line 252 of file MapsIndexer.java.

◆ state

State net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.state = State.INIT
private

The indexer state.

Definition at line 119 of file MapsIndexer.java.

Referenced by net.sf.gridarta.model.index.MapsIndexer< G, A, R >.setState().

◆ syncMapsDirectory

final Object net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.syncMapsDirectory = new Object()
private

◆ syncState

final Object net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.syncState = new Object()
private

◆ thread

final Thread net.sf.gridarta.model.index.MapsIndexer< G extends GameObject< G, A, R, A extends MapArchObject< A, R extends Archetype< G, A, R >.thread = new Thread(runnable, "indexer")
private

The Thread executing runnable.

Definition at line 276 of file MapsIndexer.java.


The documentation for this class was generated from the following file: