diff --git a/src/.directory b/src/.directory
deleted file mode 100644
index a931c4fe..00000000
--- a/src/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2015,9,1,6,42,59
-Version=3
-ViewMode=1
diff --git a/src/alias/Alias.java b/src/main/java/alias/Alias.java
similarity index 100%
rename from src/alias/Alias.java
rename to src/main/java/alias/Alias.java
diff --git a/src/alias/AliasController.java b/src/main/java/alias/AliasController.java
similarity index 100%
rename from src/alias/AliasController.java
rename to src/main/java/alias/AliasController.java
diff --git a/src/alias/AliasEditor.java b/src/main/java/alias/AliasEditor.java
similarity index 100%
rename from src/alias/AliasEditor.java
rename to src/main/java/alias/AliasEditor.java
diff --git a/src/alias/AliasEvent.java b/src/main/java/alias/AliasEvent.java
similarity index 100%
rename from src/alias/AliasEvent.java
rename to src/main/java/alias/AliasEvent.java
diff --git a/src/alias/AliasFactory.java b/src/main/java/alias/AliasFactory.java
similarity index 100%
rename from src/alias/AliasFactory.java
rename to src/main/java/alias/AliasFactory.java
diff --git a/src/alias/AliasList.java b/src/main/java/alias/AliasList.java
similarity index 100%
rename from src/alias/AliasList.java
rename to src/main/java/alias/AliasList.java
diff --git a/src/alias/AliasModel.java b/src/main/java/alias/AliasModel.java
similarity index 100%
rename from src/alias/AliasModel.java
rename to src/main/java/alias/AliasModel.java
diff --git a/src/alias/AliasNameEditor.java b/src/main/java/alias/AliasNameEditor.java
similarity index 100%
rename from src/alias/AliasNameEditor.java
rename to src/main/java/alias/AliasNameEditor.java
diff --git a/src/alias/ComponentEditor.java b/src/main/java/alias/ComponentEditor.java
similarity index 100%
rename from src/alias/ComponentEditor.java
rename to src/main/java/alias/ComponentEditor.java
diff --git a/src/alias/ComponentValidationException.java b/src/main/java/alias/ComponentValidationException.java
similarity index 100%
rename from src/alias/ComponentValidationException.java
rename to src/main/java/alias/ComponentValidationException.java
diff --git a/src/alias/MultipleAliasEditor.java b/src/main/java/alias/MultipleAliasEditor.java
similarity index 100%
rename from src/alias/MultipleAliasEditor.java
rename to src/main/java/alias/MultipleAliasEditor.java
diff --git a/src/alias/PatchGroupAlias.java b/src/main/java/alias/PatchGroupAlias.java
similarity index 100%
rename from src/alias/PatchGroupAlias.java
rename to src/main/java/alias/PatchGroupAlias.java
diff --git a/src/alias/action/AliasAction.java b/src/main/java/alias/action/AliasAction.java
similarity index 100%
rename from src/alias/action/AliasAction.java
rename to src/main/java/alias/action/AliasAction.java
diff --git a/src/alias/action/AliasActionEditor.java b/src/main/java/alias/action/AliasActionEditor.java
similarity index 100%
rename from src/alias/action/AliasActionEditor.java
rename to src/main/java/alias/action/AliasActionEditor.java
diff --git a/src/alias/action/AliasActionListener.java b/src/main/java/alias/action/AliasActionListener.java
similarity index 100%
rename from src/alias/action/AliasActionListener.java
rename to src/main/java/alias/action/AliasActionListener.java
diff --git a/src/alias/action/AliasActionManager.java b/src/main/java/alias/action/AliasActionManager.java
similarity index 100%
rename from src/alias/action/AliasActionManager.java
rename to src/main/java/alias/action/AliasActionManager.java
diff --git a/src/alias/action/AliasActionType.java b/src/main/java/alias/action/AliasActionType.java
similarity index 100%
rename from src/alias/action/AliasActionType.java
rename to src/main/java/alias/action/AliasActionType.java
diff --git a/src/alias/action/RecurringAction.java b/src/main/java/alias/action/RecurringAction.java
similarity index 100%
rename from src/alias/action/RecurringAction.java
rename to src/main/java/alias/action/RecurringAction.java
diff --git a/src/alias/action/beep/BeepAction.java b/src/main/java/alias/action/beep/BeepAction.java
similarity index 100%
rename from src/alias/action/beep/BeepAction.java
rename to src/main/java/alias/action/beep/BeepAction.java
diff --git a/src/alias/action/beep/BeepActionEditor.java b/src/main/java/alias/action/beep/BeepActionEditor.java
similarity index 100%
rename from src/alias/action/beep/BeepActionEditor.java
rename to src/main/java/alias/action/beep/BeepActionEditor.java
diff --git a/src/alias/action/clip/ClipAction.java b/src/main/java/alias/action/clip/ClipAction.java
similarity index 100%
rename from src/alias/action/clip/ClipAction.java
rename to src/main/java/alias/action/clip/ClipAction.java
diff --git a/src/alias/action/clip/ClipActionEditor.java b/src/main/java/alias/action/clip/ClipActionEditor.java
similarity index 100%
rename from src/alias/action/clip/ClipActionEditor.java
rename to src/main/java/alias/action/clip/ClipActionEditor.java
diff --git a/src/alias/action/script/ScriptAction.java b/src/main/java/alias/action/script/ScriptAction.java
similarity index 100%
rename from src/alias/action/script/ScriptAction.java
rename to src/main/java/alias/action/script/ScriptAction.java
diff --git a/src/alias/action/script/ScriptActionEditor.java b/src/main/java/alias/action/script/ScriptActionEditor.java
similarity index 100%
rename from src/alias/action/script/ScriptActionEditor.java
rename to src/main/java/alias/action/script/ScriptActionEditor.java
diff --git a/src/alias/id/AliasID.java b/src/main/java/alias/id/AliasID.java
similarity index 100%
rename from src/alias/id/AliasID.java
rename to src/main/java/alias/id/AliasID.java
diff --git a/src/alias/id/AliasIDType.java b/src/main/java/alias/id/AliasIDType.java
similarity index 100%
rename from src/alias/id/AliasIDType.java
rename to src/main/java/alias/id/AliasIDType.java
diff --git a/src/alias/id/AliasIdentifierEditor.java b/src/main/java/alias/id/AliasIdentifierEditor.java
similarity index 100%
rename from src/alias/id/AliasIdentifierEditor.java
rename to src/main/java/alias/id/AliasIdentifierEditor.java
diff --git a/src/alias/id/WildcardID.java b/src/main/java/alias/id/WildcardID.java
similarity index 100%
rename from src/alias/id/WildcardID.java
rename to src/main/java/alias/id/WildcardID.java
diff --git a/src/alias/id/broadcast/BroadcastChannel.java b/src/main/java/alias/id/broadcast/BroadcastChannel.java
similarity index 100%
rename from src/alias/id/broadcast/BroadcastChannel.java
rename to src/main/java/alias/id/broadcast/BroadcastChannel.java
diff --git a/src/alias/id/broadcast/BroadcastChannelEditor.java b/src/main/java/alias/id/broadcast/BroadcastChannelEditor.java
similarity index 100%
rename from src/alias/id/broadcast/BroadcastChannelEditor.java
rename to src/main/java/alias/id/broadcast/BroadcastChannelEditor.java
diff --git a/src/alias/id/esn/ESNEditor.java b/src/main/java/alias/id/esn/ESNEditor.java
similarity index 100%
rename from src/alias/id/esn/ESNEditor.java
rename to src/main/java/alias/id/esn/ESNEditor.java
diff --git a/src/alias/id/esn/Esn.java b/src/main/java/alias/id/esn/Esn.java
similarity index 100%
rename from src/alias/id/esn/Esn.java
rename to src/main/java/alias/id/esn/Esn.java
diff --git a/src/alias/id/fleetsync/FleetsyncID.java b/src/main/java/alias/id/fleetsync/FleetsyncID.java
similarity index 100%
rename from src/alias/id/fleetsync/FleetsyncID.java
rename to src/main/java/alias/id/fleetsync/FleetsyncID.java
diff --git a/src/alias/id/fleetsync/FleetsyncIDEditor.java b/src/main/java/alias/id/fleetsync/FleetsyncIDEditor.java
similarity index 100%
rename from src/alias/id/fleetsync/FleetsyncIDEditor.java
rename to src/main/java/alias/id/fleetsync/FleetsyncIDEditor.java
diff --git a/src/alias/id/lojack/LoJackFunctionAndID.java b/src/main/java/alias/id/lojack/LoJackFunctionAndID.java
similarity index 100%
rename from src/alias/id/lojack/LoJackFunctionAndID.java
rename to src/main/java/alias/id/lojack/LoJackFunctionAndID.java
diff --git a/src/alias/id/lojack/LoJackIDEditor.java b/src/main/java/alias/id/lojack/LoJackIDEditor.java
similarity index 100%
rename from src/alias/id/lojack/LoJackIDEditor.java
rename to src/main/java/alias/id/lojack/LoJackIDEditor.java
diff --git a/src/alias/id/mdc/MDC1200ID.java b/src/main/java/alias/id/mdc/MDC1200ID.java
similarity index 100%
rename from src/alias/id/mdc/MDC1200ID.java
rename to src/main/java/alias/id/mdc/MDC1200ID.java
diff --git a/src/alias/id/mdc/MDC1200IDEditor.java b/src/main/java/alias/id/mdc/MDC1200IDEditor.java
similarity index 100%
rename from src/alias/id/mdc/MDC1200IDEditor.java
rename to src/main/java/alias/id/mdc/MDC1200IDEditor.java
diff --git a/src/alias/id/mobileID/MINEditor.java b/src/main/java/alias/id/mobileID/MINEditor.java
similarity index 100%
rename from src/alias/id/mobileID/MINEditor.java
rename to src/main/java/alias/id/mobileID/MINEditor.java
diff --git a/src/alias/id/mobileID/Min.java b/src/main/java/alias/id/mobileID/Min.java
similarity index 100%
rename from src/alias/id/mobileID/Min.java
rename to src/main/java/alias/id/mobileID/Min.java
diff --git a/src/alias/id/mpt1327/MPT1327ID.java b/src/main/java/alias/id/mpt1327/MPT1327ID.java
similarity index 100%
rename from src/alias/id/mpt1327/MPT1327ID.java
rename to src/main/java/alias/id/mpt1327/MPT1327ID.java
diff --git a/src/alias/id/mpt1327/MPT1327IDEditor.java b/src/main/java/alias/id/mpt1327/MPT1327IDEditor.java
similarity index 100%
rename from src/alias/id/mpt1327/MPT1327IDEditor.java
rename to src/main/java/alias/id/mpt1327/MPT1327IDEditor.java
diff --git a/src/alias/id/nonrecordable/NonRecordable.java b/src/main/java/alias/id/nonrecordable/NonRecordable.java
similarity index 100%
rename from src/alias/id/nonrecordable/NonRecordable.java
rename to src/main/java/alias/id/nonrecordable/NonRecordable.java
diff --git a/src/alias/id/nonrecordable/NonRecordableEditor.java b/src/main/java/alias/id/nonrecordable/NonRecordableEditor.java
similarity index 100%
rename from src/alias/id/nonrecordable/NonRecordableEditor.java
rename to src/main/java/alias/id/nonrecordable/NonRecordableEditor.java
diff --git a/src/alias/id/priority/Priority.java b/src/main/java/alias/id/priority/Priority.java
similarity index 100%
rename from src/alias/id/priority/Priority.java
rename to src/main/java/alias/id/priority/Priority.java
diff --git a/src/alias/id/priority/PriorityEditor.java b/src/main/java/alias/id/priority/PriorityEditor.java
similarity index 100%
rename from src/alias/id/priority/PriorityEditor.java
rename to src/main/java/alias/id/priority/PriorityEditor.java
diff --git a/src/alias/id/siteID/SiteID.java b/src/main/java/alias/id/siteID/SiteID.java
similarity index 100%
rename from src/alias/id/siteID/SiteID.java
rename to src/main/java/alias/id/siteID/SiteID.java
diff --git a/src/alias/id/siteID/SiteIDEditor.java b/src/main/java/alias/id/siteID/SiteIDEditor.java
similarity index 100%
rename from src/alias/id/siteID/SiteIDEditor.java
rename to src/main/java/alias/id/siteID/SiteIDEditor.java
diff --git a/src/alias/id/status/StatusID.java b/src/main/java/alias/id/status/StatusID.java
similarity index 100%
rename from src/alias/id/status/StatusID.java
rename to src/main/java/alias/id/status/StatusID.java
diff --git a/src/alias/id/status/StatusIDEditor.java b/src/main/java/alias/id/status/StatusIDEditor.java
similarity index 100%
rename from src/alias/id/status/StatusIDEditor.java
rename to src/main/java/alias/id/status/StatusIDEditor.java
diff --git a/src/alias/id/talkgroup/TalkgroupID.java b/src/main/java/alias/id/talkgroup/TalkgroupID.java
similarity index 100%
rename from src/alias/id/talkgroup/TalkgroupID.java
rename to src/main/java/alias/id/talkgroup/TalkgroupID.java
diff --git a/src/alias/id/talkgroup/TalkgroupIDEditor.java b/src/main/java/alias/id/talkgroup/TalkgroupIDEditor.java
similarity index 100%
rename from src/alias/id/talkgroup/TalkgroupIDEditor.java
rename to src/main/java/alias/id/talkgroup/TalkgroupIDEditor.java
diff --git a/src/alias/id/uniqueID/UniqueID.java b/src/main/java/alias/id/uniqueID/UniqueID.java
similarity index 100%
rename from src/alias/id/uniqueID/UniqueID.java
rename to src/main/java/alias/id/uniqueID/UniqueID.java
diff --git a/src/alias/id/uniqueID/UniqueIDEditor.java b/src/main/java/alias/id/uniqueID/UniqueIDEditor.java
similarity index 100%
rename from src/alias/id/uniqueID/UniqueIDEditor.java
rename to src/main/java/alias/id/uniqueID/UniqueIDEditor.java
diff --git a/src/audio/AudioChannelPanel.java b/src/main/java/audio/AudioChannelPanel.java
similarity index 100%
rename from src/audio/AudioChannelPanel.java
rename to src/main/java/audio/AudioChannelPanel.java
diff --git a/src/audio/AudioChannelsPanel.java b/src/main/java/audio/AudioChannelsPanel.java
similarity index 100%
rename from src/audio/AudioChannelsPanel.java
rename to src/main/java/audio/AudioChannelsPanel.java
diff --git a/src/audio/AudioEvent.java b/src/main/java/audio/AudioEvent.java
similarity index 100%
rename from src/audio/AudioEvent.java
rename to src/main/java/audio/AudioEvent.java
diff --git a/src/audio/AudioException.java b/src/main/java/audio/AudioException.java
similarity index 100%
rename from src/audio/AudioException.java
rename to src/main/java/audio/AudioException.java
diff --git a/src/audio/AudioFormats.java b/src/main/java/audio/AudioFormats.java
similarity index 100%
rename from src/audio/AudioFormats.java
rename to src/main/java/audio/AudioFormats.java
diff --git a/src/audio/AudioManager.java b/src/main/java/audio/AudioManager.java
similarity index 100%
rename from src/audio/AudioManager.java
rename to src/main/java/audio/AudioManager.java
diff --git a/src/audio/AudioModule.java b/src/main/java/audio/AudioModule.java
similarity index 100%
rename from src/audio/AudioModule.java
rename to src/main/java/audio/AudioModule.java
diff --git a/src/audio/AudioPacket.java b/src/main/java/audio/AudioPacket.java
similarity index 100%
rename from src/audio/AudioPacket.java
rename to src/main/java/audio/AudioPacket.java
diff --git a/src/audio/AudioPacketRateCounter.java b/src/main/java/audio/AudioPacketRateCounter.java
similarity index 100%
rename from src/audio/AudioPacketRateCounter.java
rename to src/main/java/audio/AudioPacketRateCounter.java
diff --git a/src/audio/AudioPanel.java b/src/main/java/audio/AudioPanel.java
similarity index 100%
rename from src/audio/AudioPanel.java
rename to src/main/java/audio/AudioPanel.java
diff --git a/src/audio/AudioUtils.java b/src/main/java/audio/AudioUtils.java
similarity index 100%
rename from src/audio/AudioUtils.java
rename to src/main/java/audio/AudioUtils.java
diff --git a/src/audio/IAudioController.java b/src/main/java/audio/IAudioController.java
similarity index 100%
rename from src/audio/IAudioController.java
rename to src/main/java/audio/IAudioController.java
diff --git a/src/audio/IAudioPacketListener.java b/src/main/java/audio/IAudioPacketListener.java
similarity index 100%
rename from src/audio/IAudioPacketListener.java
rename to src/main/java/audio/IAudioPacketListener.java
diff --git a/src/audio/IAudioPacketProvider.java b/src/main/java/audio/IAudioPacketProvider.java
similarity index 100%
rename from src/audio/IAudioPacketProvider.java
rename to src/main/java/audio/IAudioPacketProvider.java
diff --git a/src/audio/InversionFrequency.java b/src/main/java/audio/InversionFrequency.java
similarity index 100%
rename from src/audio/InversionFrequency.java
rename to src/main/java/audio/InversionFrequency.java
diff --git a/src/audio/broadcast/AudioBroadcaster.java b/src/main/java/audio/broadcast/AudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/AudioBroadcaster.java
rename to src/main/java/audio/broadcast/AudioBroadcaster.java
diff --git a/src/audio/broadcast/AudioRecording.java b/src/main/java/audio/broadcast/AudioRecording.java
similarity index 100%
rename from src/audio/broadcast/AudioRecording.java
rename to src/main/java/audio/broadcast/AudioRecording.java
diff --git a/src/audio/broadcast/BroadcastConfiguration.java b/src/main/java/audio/broadcast/BroadcastConfiguration.java
similarity index 100%
rename from src/audio/broadcast/BroadcastConfiguration.java
rename to src/main/java/audio/broadcast/BroadcastConfiguration.java
diff --git a/src/audio/broadcast/BroadcastConfigurationEditor.java b/src/main/java/audio/broadcast/BroadcastConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/BroadcastConfigurationEditor.java
rename to src/main/java/audio/broadcast/BroadcastConfigurationEditor.java
diff --git a/src/audio/broadcast/BroadcastEvent.java b/src/main/java/audio/broadcast/BroadcastEvent.java
similarity index 100%
rename from src/audio/broadcast/BroadcastEvent.java
rename to src/main/java/audio/broadcast/BroadcastEvent.java
diff --git a/src/audio/broadcast/BroadcastFactory.java b/src/main/java/audio/broadcast/BroadcastFactory.java
similarity index 100%
rename from src/audio/broadcast/BroadcastFactory.java
rename to src/main/java/audio/broadcast/BroadcastFactory.java
diff --git a/src/audio/broadcast/BroadcastFormat.java b/src/main/java/audio/broadcast/BroadcastFormat.java
similarity index 100%
rename from src/audio/broadcast/BroadcastFormat.java
rename to src/main/java/audio/broadcast/BroadcastFormat.java
diff --git a/src/audio/broadcast/BroadcastModel.java b/src/main/java/audio/broadcast/BroadcastModel.java
similarity index 100%
rename from src/audio/broadcast/BroadcastModel.java
rename to src/main/java/audio/broadcast/BroadcastModel.java
diff --git a/src/audio/broadcast/BroadcastPanel.java b/src/main/java/audio/broadcast/BroadcastPanel.java
similarity index 100%
rename from src/audio/broadcast/BroadcastPanel.java
rename to src/main/java/audio/broadcast/BroadcastPanel.java
diff --git a/src/audio/broadcast/BroadcastServerType.java b/src/main/java/audio/broadcast/BroadcastServerType.java
similarity index 100%
rename from src/audio/broadcast/BroadcastServerType.java
rename to src/main/java/audio/broadcast/BroadcastServerType.java
diff --git a/src/audio/broadcast/BroadcastState.java b/src/main/java/audio/broadcast/BroadcastState.java
similarity index 100%
rename from src/audio/broadcast/BroadcastState.java
rename to src/main/java/audio/broadcast/BroadcastState.java
diff --git a/src/audio/broadcast/BroadcastStatusPanel.java b/src/main/java/audio/broadcast/BroadcastStatusPanel.java
similarity index 100%
rename from src/audio/broadcast/BroadcastStatusPanel.java
rename to src/main/java/audio/broadcast/BroadcastStatusPanel.java
diff --git a/src/audio/broadcast/IBroadcastMetadataUpdater.java b/src/main/java/audio/broadcast/IBroadcastMetadataUpdater.java
similarity index 100%
rename from src/audio/broadcast/IBroadcastMetadataUpdater.java
rename to src/main/java/audio/broadcast/IBroadcastMetadataUpdater.java
diff --git a/src/audio/broadcast/StreamManager.java b/src/main/java/audio/broadcast/StreamManager.java
similarity index 100%
rename from src/audio/broadcast/StreamManager.java
rename to src/main/java/audio/broadcast/StreamManager.java
diff --git a/src/audio/broadcast/broadcastify/BroadcastifyConfiguration.java b/src/main/java/audio/broadcast/broadcastify/BroadcastifyConfiguration.java
similarity index 100%
rename from src/audio/broadcast/broadcastify/BroadcastifyConfiguration.java
rename to src/main/java/audio/broadcast/broadcastify/BroadcastifyConfiguration.java
diff --git a/src/audio/broadcast/broadcastify/BroadcastifyConfigurationEditor.java b/src/main/java/audio/broadcast/broadcastify/BroadcastifyConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/broadcastify/BroadcastifyConfigurationEditor.java
rename to src/main/java/audio/broadcast/broadcastify/BroadcastifyConfigurationEditor.java
diff --git a/src/audio/broadcast/broadcastify/UserFeedSelectionDialog.java b/src/main/java/audio/broadcast/broadcastify/UserFeedSelectionDialog.java
similarity index 100%
rename from src/audio/broadcast/broadcastify/UserFeedSelectionDialog.java
rename to src/main/java/audio/broadcast/broadcastify/UserFeedSelectionDialog.java
diff --git a/src/audio/broadcast/icecast/IcecastAudioBroadcaster.java b/src/main/java/audio/broadcast/icecast/IcecastAudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastAudioBroadcaster.java
rename to src/main/java/audio/broadcast/icecast/IcecastAudioBroadcaster.java
diff --git a/src/audio/broadcast/icecast/IcecastBroadcastMetadataUpdater.java b/src/main/java/audio/broadcast/icecast/IcecastBroadcastMetadataUpdater.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastBroadcastMetadataUpdater.java
rename to src/main/java/audio/broadcast/icecast/IcecastBroadcastMetadataUpdater.java
diff --git a/src/audio/broadcast/icecast/IcecastConfiguration.java b/src/main/java/audio/broadcast/icecast/IcecastConfiguration.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastConfiguration.java
rename to src/main/java/audio/broadcast/icecast/IcecastConfiguration.java
diff --git a/src/audio/broadcast/icecast/IcecastHTTPAudioBroadcaster.java b/src/main/java/audio/broadcast/icecast/IcecastHTTPAudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastHTTPAudioBroadcaster.java
rename to src/main/java/audio/broadcast/icecast/IcecastHTTPAudioBroadcaster.java
diff --git a/src/audio/broadcast/icecast/IcecastHTTPConfiguration.java b/src/main/java/audio/broadcast/icecast/IcecastHTTPConfiguration.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastHTTPConfiguration.java
rename to src/main/java/audio/broadcast/icecast/IcecastHTTPConfiguration.java
diff --git a/src/audio/broadcast/icecast/IcecastHTTPConfigurationEditor.java b/src/main/java/audio/broadcast/icecast/IcecastHTTPConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastHTTPConfigurationEditor.java
rename to src/main/java/audio/broadcast/icecast/IcecastHTTPConfigurationEditor.java
diff --git a/src/audio/broadcast/icecast/IcecastHeader.java b/src/main/java/audio/broadcast/icecast/IcecastHeader.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastHeader.java
rename to src/main/java/audio/broadcast/icecast/IcecastHeader.java
diff --git a/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java b/src/main/java/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java
rename to src/main/java/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java
diff --git a/src/audio/broadcast/icecast/IcecastTCPConfiguration.java b/src/main/java/audio/broadcast/icecast/IcecastTCPConfiguration.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastTCPConfiguration.java
rename to src/main/java/audio/broadcast/icecast/IcecastTCPConfiguration.java
diff --git a/src/audio/broadcast/icecast/IcecastTCPConfigurationEditor.java b/src/main/java/audio/broadcast/icecast/IcecastTCPConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/icecast/IcecastTCPConfigurationEditor.java
rename to src/main/java/audio/broadcast/icecast/IcecastTCPConfigurationEditor.java
diff --git a/src/audio/broadcast/icecast/codec/IcecastCodecFactory.java b/src/main/java/audio/broadcast/icecast/codec/IcecastCodecFactory.java
similarity index 100%
rename from src/audio/broadcast/icecast/codec/IcecastCodecFactory.java
rename to src/main/java/audio/broadcast/icecast/codec/IcecastCodecFactory.java
diff --git a/src/audio/broadcast/icecast/codec/IcecastEncoder.java b/src/main/java/audio/broadcast/icecast/codec/IcecastEncoder.java
similarity index 100%
rename from src/audio/broadcast/icecast/codec/IcecastEncoder.java
rename to src/main/java/audio/broadcast/icecast/codec/IcecastEncoder.java
diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastMetadata.java b/src/main/java/audio/broadcast/shoutcast/v1/ShoutcastMetadata.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v1/ShoutcastMetadata.java
rename to src/main/java/audio/broadcast/shoutcast/v1/ShoutcastMetadata.java
diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java b/src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java
rename to src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java
diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastV1BroadcastMetadataUpdater.java b/src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1BroadcastMetadataUpdater.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v1/ShoutcastV1BroadcastMetadataUpdater.java
rename to src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1BroadcastMetadataUpdater.java
diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastV1Configuration.java b/src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1Configuration.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v1/ShoutcastV1Configuration.java
rename to src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1Configuration.java
diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastV1ConfigurationEditor.java b/src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1ConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v1/ShoutcastV1ConfigurationEditor.java
rename to src/main/java/audio/broadcast/shoutcast/v1/ShoutcastV1ConfigurationEditor.java
diff --git a/src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java b/src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java
diff --git a/src/audio/broadcast/shoutcast/v2/ShoutcastV2Configuration.java b/src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2Configuration.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ShoutcastV2Configuration.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2Configuration.java
diff --git a/src/audio/broadcast/shoutcast/v2/ShoutcastV2ConfigurationEditor.java b/src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2ConfigurationEditor.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ShoutcastV2ConfigurationEditor.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ShoutcastV2ConfigurationEditor.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/AuthenticateBroadcast.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/AuthenticateBroadcast.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/AuthenticateBroadcast.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/AuthenticateBroadcast.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/CacheableXMLMetadata.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/CacheableXMLMetadata.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/CacheableXMLMetadata.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/CacheableXMLMetadata.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyGenre.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyGenre.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyGenre.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyGenre.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyName.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyName.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyName.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyName.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyPublic.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyPublic.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyPublic.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyPublic.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyURL.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyURL.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyURL.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/ConfigureIcyURL.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/FlushCachedMetadata.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/FlushCachedMetadata.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/FlushCachedMetadata.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/FlushCachedMetadata.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/MP3Audio.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/MP3Audio.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/MP3Audio.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/MP3Audio.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/NegotiateBufferSize.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/NegotiateBufferSize.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/NegotiateBufferSize.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/NegotiateBufferSize.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/NegotiateMaxPayloadSize.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/NegotiateMaxPayloadSize.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/NegotiateMaxPayloadSize.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/NegotiateMaxPayloadSize.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/PassThroughXMLMetadata.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/PassThroughXMLMetadata.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/PassThroughXMLMetadata.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/PassThroughXMLMetadata.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/RequestCipher.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/RequestCipher.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/RequestCipher.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/RequestCipher.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/SetupBroadcast.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/SetupBroadcast.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/SetupBroadcast.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/SetupBroadcast.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/Standby.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/Standby.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/Standby.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/Standby.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/StreamMimeType.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/StreamMimeType.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/StreamMimeType.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/StreamMimeType.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/TerminateBroadcast.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/TerminateBroadcast.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/TerminateBroadcast.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/TerminateBroadcast.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxDecoder.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxDecoder.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxDecoder.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxDecoder.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxEncoder.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxEncoder.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxEncoder.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxEncoder.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessage.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessage.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessage.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessage.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageClass.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageClass.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageClass.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageClass.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageFactory.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageFactory.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageFactory.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageFactory.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageType.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageType.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageType.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMessageType.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMetadata.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMetadata.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxMetadata.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxMetadata.java
diff --git a/src/audio/broadcast/shoutcast/v2/ultravox/UltravoxProtocolFactory.java b/src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxProtocolFactory.java
similarity index 100%
rename from src/audio/broadcast/shoutcast/v2/ultravox/UltravoxProtocolFactory.java
rename to src/main/java/audio/broadcast/shoutcast/v2/ultravox/UltravoxProtocolFactory.java
diff --git a/src/audio/convert/IAudioConverter.java b/src/main/java/audio/convert/IAudioConverter.java
similarity index 100%
rename from src/audio/convert/IAudioConverter.java
rename to src/main/java/audio/convert/IAudioConverter.java
diff --git a/src/audio/convert/ISilenceGenerator.java b/src/main/java/audio/convert/ISilenceGenerator.java
similarity index 100%
rename from src/audio/convert/ISilenceGenerator.java
rename to src/main/java/audio/convert/ISilenceGenerator.java
diff --git a/src/audio/convert/MP3AudioConverter.java b/src/main/java/audio/convert/MP3AudioConverter.java
similarity index 100%
rename from src/audio/convert/MP3AudioConverter.java
rename to src/main/java/audio/convert/MP3AudioConverter.java
diff --git a/src/audio/convert/MP3FrameInspector.java b/src/main/java/audio/convert/MP3FrameInspector.java
similarity index 100%
rename from src/audio/convert/MP3FrameInspector.java
rename to src/main/java/audio/convert/MP3FrameInspector.java
diff --git a/src/audio/convert/MP3SilenceGenerator.java b/src/main/java/audio/convert/MP3SilenceGenerator.java
similarity index 100%
rename from src/audio/convert/MP3SilenceGenerator.java
rename to src/main/java/audio/convert/MP3SilenceGenerator.java
diff --git a/src/audio/invert/AudioAdapter.java b/src/main/java/audio/invert/AudioAdapter.java
similarity index 100%
rename from src/audio/invert/AudioAdapter.java
rename to src/main/java/audio/invert/AudioAdapter.java
diff --git a/src/audio/invert/AudioInverter.java b/src/main/java/audio/invert/AudioInverter.java
similarity index 100%
rename from src/audio/invert/AudioInverter.java
rename to src/main/java/audio/invert/AudioInverter.java
diff --git a/src/audio/invert/AudioType.java b/src/main/java/audio/invert/AudioType.java
similarity index 100%
rename from src/audio/invert/AudioType.java
rename to src/main/java/audio/invert/AudioType.java
diff --git a/src/audio/invert/IAudioTypeListener.java b/src/main/java/audio/invert/IAudioTypeListener.java
similarity index 100%
rename from src/audio/invert/IAudioTypeListener.java
rename to src/main/java/audio/invert/IAudioTypeListener.java
diff --git a/src/audio/output/AudioOutput.java b/src/main/java/audio/output/AudioOutput.java
similarity index 100%
rename from src/audio/output/AudioOutput.java
rename to src/main/java/audio/output/AudioOutput.java
diff --git a/src/audio/output/MonoAudioOutput.java b/src/main/java/audio/output/MonoAudioOutput.java
similarity index 100%
rename from src/audio/output/MonoAudioOutput.java
rename to src/main/java/audio/output/MonoAudioOutput.java
diff --git a/src/audio/output/StereoAudioOutput.java b/src/main/java/audio/output/StereoAudioOutput.java
similarity index 100%
rename from src/audio/output/StereoAudioOutput.java
rename to src/main/java/audio/output/StereoAudioOutput.java
diff --git a/src/audio/squelch/ISquelchStateListener.java b/src/main/java/audio/squelch/ISquelchStateListener.java
similarity index 100%
rename from src/audio/squelch/ISquelchStateListener.java
rename to src/main/java/audio/squelch/ISquelchStateListener.java
diff --git a/src/audio/squelch/ISquelchStateProvider.java b/src/main/java/audio/squelch/ISquelchStateProvider.java
similarity index 100%
rename from src/audio/squelch/ISquelchStateProvider.java
rename to src/main/java/audio/squelch/ISquelchStateProvider.java
diff --git a/src/audio/squelch/ManualSquelchController.java b/src/main/java/audio/squelch/ManualSquelchController.java
similarity index 100%
rename from src/audio/squelch/ManualSquelchController.java
rename to src/main/java/audio/squelch/ManualSquelchController.java
diff --git a/src/audio/squelch/SquelchController.java b/src/main/java/audio/squelch/SquelchController.java
similarity index 100%
rename from src/audio/squelch/SquelchController.java
rename to src/main/java/audio/squelch/SquelchController.java
diff --git a/src/audio/squelch/SquelchMode.java b/src/main/java/audio/squelch/SquelchMode.java
similarity index 100%
rename from src/audio/squelch/SquelchMode.java
rename to src/main/java/audio/squelch/SquelchMode.java
diff --git a/src/audio/squelch/SquelchState.java b/src/main/java/audio/squelch/SquelchState.java
similarity index 100%
rename from src/audio/squelch/SquelchState.java
rename to src/main/java/audio/squelch/SquelchState.java
diff --git a/src/audio/squelch/TrunkingSquelchController.java b/src/main/java/audio/squelch/TrunkingSquelchController.java
similarity index 100%
rename from src/audio/squelch/TrunkingSquelchController.java
rename to src/main/java/audio/squelch/TrunkingSquelchController.java
diff --git a/src/bits/BinaryMessage.java b/src/main/java/bits/BinaryMessage.java
similarity index 100%
rename from src/bits/BinaryMessage.java
rename to src/main/java/bits/BinaryMessage.java
diff --git a/src/bits/BitSetFullException.java b/src/main/java/bits/BitSetFullException.java
similarity index 100%
rename from src/bits/BitSetFullException.java
rename to src/main/java/bits/BitSetFullException.java
diff --git a/src/bits/CorrectedBinaryMessage.java b/src/main/java/bits/CorrectedBinaryMessage.java
similarity index 100%
rename from src/bits/CorrectedBinaryMessage.java
rename to src/main/java/bits/CorrectedBinaryMessage.java
diff --git a/src/bits/ISyncDetectListener.java b/src/main/java/bits/ISyncDetectListener.java
similarity index 100%
rename from src/bits/ISyncDetectListener.java
rename to src/main/java/bits/ISyncDetectListener.java
diff --git a/src/bits/ISyncProcessor.java b/src/main/java/bits/ISyncProcessor.java
similarity index 100%
rename from src/bits/ISyncProcessor.java
rename to src/main/java/bits/ISyncProcessor.java
diff --git a/src/bits/MessageFramer.java b/src/main/java/bits/MessageFramer.java
similarity index 100%
rename from src/bits/MessageFramer.java
rename to src/main/java/bits/MessageFramer.java
diff --git a/src/bits/MultiSyncPatternMatcher.java b/src/main/java/bits/MultiSyncPatternMatcher.java
similarity index 100%
rename from src/bits/MultiSyncPatternMatcher.java
rename to src/main/java/bits/MultiSyncPatternMatcher.java
diff --git a/src/bits/SoftSyncDetector.java b/src/main/java/bits/SoftSyncDetector.java
similarity index 100%
rename from src/bits/SoftSyncDetector.java
rename to src/main/java/bits/SoftSyncDetector.java
diff --git a/src/bits/SyncDetector.java b/src/main/java/bits/SyncDetector.java
similarity index 100%
rename from src/bits/SyncDetector.java
rename to src/main/java/bits/SyncDetector.java
diff --git a/src/bits/SyncPattern.java b/src/main/java/bits/SyncPattern.java
similarity index 100%
rename from src/bits/SyncPattern.java
rename to src/main/java/bits/SyncPattern.java
diff --git a/src/bits/SyncPatternMatcher.java b/src/main/java/bits/SyncPatternMatcher.java
similarity index 100%
rename from src/bits/SyncPatternMatcher.java
rename to src/main/java/bits/SyncPatternMatcher.java
diff --git a/src/buffer/BooleanAveragingBuffer.java b/src/main/java/buffer/BooleanAveragingBuffer.java
similarity index 100%
rename from src/buffer/BooleanAveragingBuffer.java
rename to src/main/java/buffer/BooleanAveragingBuffer.java
diff --git a/src/buffer/CircularBuffer.java b/src/main/java/buffer/CircularBuffer.java
similarity index 100%
rename from src/buffer/CircularBuffer.java
rename to src/main/java/buffer/CircularBuffer.java
diff --git a/src/buffer/ComplexCircularBuffer.java b/src/main/java/buffer/ComplexCircularBuffer.java
similarity index 100%
rename from src/buffer/ComplexCircularBuffer.java
rename to src/main/java/buffer/ComplexCircularBuffer.java
diff --git a/src/buffer/ComplexTappedCircularBuffer.java b/src/main/java/buffer/ComplexTappedCircularBuffer.java
similarity index 100%
rename from src/buffer/ComplexTappedCircularBuffer.java
rename to src/main/java/buffer/ComplexTappedCircularBuffer.java
diff --git a/src/buffer/DoubleCircularBuffer.java b/src/main/java/buffer/DoubleCircularBuffer.java
similarity index 100%
rename from src/buffer/DoubleCircularBuffer.java
rename to src/main/java/buffer/DoubleCircularBuffer.java
diff --git a/src/buffer/FloatAveragingBuffer.java b/src/main/java/buffer/FloatAveragingBuffer.java
similarity index 100%
rename from src/buffer/FloatAveragingBuffer.java
rename to src/main/java/buffer/FloatAveragingBuffer.java
diff --git a/src/buffer/FloatCircularBuffer.java b/src/main/java/buffer/FloatCircularBuffer.java
similarity index 100%
rename from src/buffer/FloatCircularBuffer.java
rename to src/main/java/buffer/FloatCircularBuffer.java
diff --git a/src/channel/details/ChannelDetailPanel.java b/src/main/java/channel/details/ChannelDetailPanel.java
similarity index 100%
rename from src/channel/details/ChannelDetailPanel.java
rename to src/main/java/channel/details/ChannelDetailPanel.java
diff --git a/src/channel/heartbeat/Heartbeat.java b/src/main/java/channel/heartbeat/Heartbeat.java
similarity index 100%
rename from src/channel/heartbeat/Heartbeat.java
rename to src/main/java/channel/heartbeat/Heartbeat.java
diff --git a/src/channel/heartbeat/IHeartbeatListener.java b/src/main/java/channel/heartbeat/IHeartbeatListener.java
similarity index 100%
rename from src/channel/heartbeat/IHeartbeatListener.java
rename to src/main/java/channel/heartbeat/IHeartbeatListener.java
diff --git a/src/channel/heartbeat/IHeartbeatProvider.java b/src/main/java/channel/heartbeat/IHeartbeatProvider.java
similarity index 100%
rename from src/channel/heartbeat/IHeartbeatProvider.java
rename to src/main/java/channel/heartbeat/IHeartbeatProvider.java
diff --git a/src/channel/metadata/AliasedIdentifier.java b/src/main/java/channel/metadata/AliasedIdentifier.java
similarity index 100%
rename from src/channel/metadata/AliasedIdentifier.java
rename to src/main/java/channel/metadata/AliasedIdentifier.java
diff --git a/src/channel/metadata/AliasedIntegerAttributeMonitor.java b/src/main/java/channel/metadata/AliasedIntegerAttributeMonitor.java
similarity index 100%
rename from src/channel/metadata/AliasedIntegerAttributeMonitor.java
rename to src/main/java/channel/metadata/AliasedIntegerAttributeMonitor.java
diff --git a/src/channel/metadata/AliasedStringAttributeMonitor.java b/src/main/java/channel/metadata/AliasedStringAttributeMonitor.java
similarity index 100%
rename from src/channel/metadata/AliasedStringAttributeMonitor.java
rename to src/main/java/channel/metadata/AliasedStringAttributeMonitor.java
diff --git a/src/channel/metadata/Attribute.java b/src/main/java/channel/metadata/Attribute.java
similarity index 100%
rename from src/channel/metadata/Attribute.java
rename to src/main/java/channel/metadata/Attribute.java
diff --git a/src/channel/metadata/AttributeChangeRequest.java b/src/main/java/channel/metadata/AttributeChangeRequest.java
similarity index 100%
rename from src/channel/metadata/AttributeChangeRequest.java
rename to src/main/java/channel/metadata/AttributeChangeRequest.java
diff --git a/src/channel/metadata/AttributeMonitor.java b/src/main/java/channel/metadata/AttributeMonitor.java
similarity index 100%
rename from src/channel/metadata/AttributeMonitor.java
rename to src/main/java/channel/metadata/AttributeMonitor.java
diff --git a/src/channel/metadata/ChannelMetadataModel.java b/src/main/java/channel/metadata/ChannelMetadataModel.java
similarity index 100%
rename from src/channel/metadata/ChannelMetadataModel.java
rename to src/main/java/channel/metadata/ChannelMetadataModel.java
diff --git a/src/channel/metadata/ChannelMetadataPanel.java b/src/main/java/channel/metadata/ChannelMetadataPanel.java
similarity index 100%
rename from src/channel/metadata/ChannelMetadataPanel.java
rename to src/main/java/channel/metadata/ChannelMetadataPanel.java
diff --git a/src/channel/metadata/ChannelMetadataViewer.java b/src/main/java/channel/metadata/ChannelMetadataViewer.java
similarity index 100%
rename from src/channel/metadata/ChannelMetadataViewer.java
rename to src/main/java/channel/metadata/ChannelMetadataViewer.java
diff --git a/src/channel/metadata/IAttributeChangeRequestListener.java b/src/main/java/channel/metadata/IAttributeChangeRequestListener.java
similarity index 100%
rename from src/channel/metadata/IAttributeChangeRequestListener.java
rename to src/main/java/channel/metadata/IAttributeChangeRequestListener.java
diff --git a/src/channel/metadata/IAttributeChangeRequestProvider.java b/src/main/java/channel/metadata/IAttributeChangeRequestProvider.java
similarity index 100%
rename from src/channel/metadata/IAttributeChangeRequestProvider.java
rename to src/main/java/channel/metadata/IAttributeChangeRequestProvider.java
diff --git a/src/channel/metadata/Metadata.java b/src/main/java/channel/metadata/Metadata.java
similarity index 100%
rename from src/channel/metadata/Metadata.java
rename to src/main/java/channel/metadata/Metadata.java
diff --git a/src/channel/metadata/MutableMetadata.java b/src/main/java/channel/metadata/MutableMetadata.java
similarity index 100%
rename from src/channel/metadata/MutableMetadata.java
rename to src/main/java/channel/metadata/MutableMetadata.java
diff --git a/src/channel/metadata/MutableMetadataChangeEvent.java b/src/main/java/channel/metadata/MutableMetadataChangeEvent.java
similarity index 100%
rename from src/channel/metadata/MutableMetadataChangeEvent.java
rename to src/main/java/channel/metadata/MutableMetadataChangeEvent.java
diff --git a/src/channel/state/AlwaysUnsquelchedDecoderState.java b/src/main/java/channel/state/AlwaysUnsquelchedDecoderState.java
similarity index 100%
rename from src/channel/state/AlwaysUnsquelchedDecoderState.java
rename to src/main/java/channel/state/AlwaysUnsquelchedDecoderState.java
diff --git a/src/channel/state/ChangeChannelTimeoutEvent.java b/src/main/java/channel/state/ChangeChannelTimeoutEvent.java
similarity index 100%
rename from src/channel/state/ChangeChannelTimeoutEvent.java
rename to src/main/java/channel/state/ChangeChannelTimeoutEvent.java
diff --git a/src/channel/state/ChannelState.java b/src/main/java/channel/state/ChannelState.java
similarity index 100%
rename from src/channel/state/ChannelState.java
rename to src/main/java/channel/state/ChannelState.java
diff --git a/src/channel/state/ChannelStateSelectionListener.java b/src/main/java/channel/state/ChannelStateSelectionListener.java
similarity index 100%
rename from src/channel/state/ChannelStateSelectionListener.java
rename to src/main/java/channel/state/ChannelStateSelectionListener.java
diff --git a/src/channel/state/DecoderState.java b/src/main/java/channel/state/DecoderState.java
similarity index 100%
rename from src/channel/state/DecoderState.java
rename to src/main/java/channel/state/DecoderState.java
diff --git a/src/channel/state/DecoderStateEvent.java b/src/main/java/channel/state/DecoderStateEvent.java
similarity index 100%
rename from src/channel/state/DecoderStateEvent.java
rename to src/main/java/channel/state/DecoderStateEvent.java
diff --git a/src/channel/state/IDecoderStateEventListener.java b/src/main/java/channel/state/IDecoderStateEventListener.java
similarity index 100%
rename from src/channel/state/IDecoderStateEventListener.java
rename to src/main/java/channel/state/IDecoderStateEventListener.java
diff --git a/src/channel/state/IDecoderStateEventProvider.java b/src/main/java/channel/state/IDecoderStateEventProvider.java
similarity index 100%
rename from src/channel/state/IDecoderStateEventProvider.java
rename to src/main/java/channel/state/IDecoderStateEventProvider.java
diff --git a/src/channel/state/State.java b/src/main/java/channel/state/State.java
similarity index 100%
rename from src/channel/state/State.java
rename to src/main/java/channel/state/State.java
diff --git a/src/channel/traffic/TrafficChannelAllocationEvent.java b/src/main/java/channel/traffic/TrafficChannelAllocationEvent.java
similarity index 100%
rename from src/channel/traffic/TrafficChannelAllocationEvent.java
rename to src/main/java/channel/traffic/TrafficChannelAllocationEvent.java
diff --git a/src/channel/traffic/TrafficChannelManager.java b/src/main/java/channel/traffic/TrafficChannelManager.java
similarity index 100%
rename from src/channel/traffic/TrafficChannelManager.java
rename to src/main/java/channel/traffic/TrafficChannelManager.java
diff --git a/src/controller/ControllerPanel.java b/src/main/java/controller/ControllerPanel.java
similarity index 100%
rename from src/controller/ControllerPanel.java
rename to src/main/java/controller/ControllerPanel.java
diff --git a/src/controller/NamingThreadFactory.java b/src/main/java/controller/NamingThreadFactory.java
similarity index 100%
rename from src/controller/NamingThreadFactory.java
rename to src/main/java/controller/NamingThreadFactory.java
diff --git a/src/controller/channel/Channel.java b/src/main/java/controller/channel/Channel.java
similarity index 100%
rename from src/controller/channel/Channel.java
rename to src/main/java/controller/channel/Channel.java
diff --git a/src/controller/channel/ChannelController.java b/src/main/java/controller/channel/ChannelController.java
similarity index 100%
rename from src/controller/channel/ChannelController.java
rename to src/main/java/controller/channel/ChannelController.java
diff --git a/src/controller/channel/ChannelEditor.java b/src/main/java/controller/channel/ChannelEditor.java
similarity index 100%
rename from src/controller/channel/ChannelEditor.java
rename to src/main/java/controller/channel/ChannelEditor.java
diff --git a/src/controller/channel/ChannelEvent.java b/src/main/java/controller/channel/ChannelEvent.java
similarity index 100%
rename from src/controller/channel/ChannelEvent.java
rename to src/main/java/controller/channel/ChannelEvent.java
diff --git a/src/controller/channel/ChannelEventListener.java b/src/main/java/controller/channel/ChannelEventListener.java
similarity index 100%
rename from src/controller/channel/ChannelEventListener.java
rename to src/main/java/controller/channel/ChannelEventListener.java
diff --git a/src/controller/channel/ChannelModel.java b/src/main/java/controller/channel/ChannelModel.java
similarity index 100%
rename from src/controller/channel/ChannelModel.java
rename to src/main/java/controller/channel/ChannelModel.java
diff --git a/src/controller/channel/ChannelProcessingManager.java b/src/main/java/controller/channel/ChannelProcessingManager.java
similarity index 100%
rename from src/controller/channel/ChannelProcessingManager.java
rename to src/main/java/controller/channel/ChannelProcessingManager.java
diff --git a/src/controller/channel/ChannelSelectionManager.java b/src/main/java/controller/channel/ChannelSelectionManager.java
similarity index 100%
rename from src/controller/channel/ChannelSelectionManager.java
rename to src/main/java/controller/channel/ChannelSelectionManager.java
diff --git a/src/controller/channel/ChannelUtils.java b/src/main/java/controller/channel/ChannelUtils.java
similarity index 100%
rename from src/controller/channel/ChannelUtils.java
rename to src/main/java/controller/channel/ChannelUtils.java
diff --git a/src/controller/channel/ConfigurationValidationException.java b/src/main/java/controller/channel/ConfigurationValidationException.java
similarity index 100%
rename from src/controller/channel/ConfigurationValidationException.java
rename to src/main/java/controller/channel/ConfigurationValidationException.java
diff --git a/src/controller/channel/IChannelEventBroadcaster.java b/src/main/java/controller/channel/IChannelEventBroadcaster.java
similarity index 100%
rename from src/controller/channel/IChannelEventBroadcaster.java
rename to src/main/java/controller/channel/IChannelEventBroadcaster.java
diff --git a/src/controller/channel/IChannelEventListener.java b/src/main/java/controller/channel/IChannelEventListener.java
similarity index 100%
rename from src/controller/channel/IChannelEventListener.java
rename to src/main/java/controller/channel/IChannelEventListener.java
diff --git a/src/controller/channel/IChannelEventProvider.java b/src/main/java/controller/channel/IChannelEventProvider.java
similarity index 100%
rename from src/controller/channel/IChannelEventProvider.java
rename to src/main/java/controller/channel/IChannelEventProvider.java
diff --git a/src/controller/channel/NameConfigurationEditor.java b/src/main/java/controller/channel/NameConfigurationEditor.java
similarity index 100%
rename from src/controller/channel/NameConfigurationEditor.java
rename to src/main/java/controller/channel/NameConfigurationEditor.java
diff --git a/src/controller/channel/TrafficChannelEvent.java b/src/main/java/controller/channel/TrafficChannelEvent.java
similarity index 100%
rename from src/controller/channel/TrafficChannelEvent.java
rename to src/main/java/controller/channel/TrafficChannelEvent.java
diff --git a/src/controller/channel/map/ChannelMap.java b/src/main/java/controller/channel/map/ChannelMap.java
similarity index 100%
rename from src/controller/channel/map/ChannelMap.java
rename to src/main/java/controller/channel/map/ChannelMap.java
diff --git a/src/controller/channel/map/ChannelMapEditor.java b/src/main/java/controller/channel/map/ChannelMapEditor.java
similarity index 100%
rename from src/controller/channel/map/ChannelMapEditor.java
rename to src/main/java/controller/channel/map/ChannelMapEditor.java
diff --git a/src/controller/channel/map/ChannelMapEvent.java b/src/main/java/controller/channel/map/ChannelMapEvent.java
similarity index 100%
rename from src/controller/channel/map/ChannelMapEvent.java
rename to src/main/java/controller/channel/map/ChannelMapEvent.java
diff --git a/src/controller/channel/map/ChannelMapManager.java b/src/main/java/controller/channel/map/ChannelMapManager.java
similarity index 100%
rename from src/controller/channel/map/ChannelMapManager.java
rename to src/main/java/controller/channel/map/ChannelMapManager.java
diff --git a/src/controller/channel/map/ChannelMapManagerFrame.java b/src/main/java/controller/channel/map/ChannelMapManagerFrame.java
similarity index 100%
rename from src/controller/channel/map/ChannelMapManagerFrame.java
rename to src/main/java/controller/channel/map/ChannelMapManagerFrame.java
diff --git a/src/controller/channel/map/ChannelMapModel.java b/src/main/java/controller/channel/map/ChannelMapModel.java
similarity index 100%
rename from src/controller/channel/map/ChannelMapModel.java
rename to src/main/java/controller/channel/map/ChannelMapModel.java
diff --git a/src/controller/channel/map/ChannelRange.java b/src/main/java/controller/channel/map/ChannelRange.java
similarity index 100%
rename from src/controller/channel/map/ChannelRange.java
rename to src/main/java/controller/channel/map/ChannelRange.java
diff --git a/src/controller/channel/map/ChannelRangeModel.java b/src/main/java/controller/channel/map/ChannelRangeModel.java
similarity index 100%
rename from src/controller/channel/map/ChannelRangeModel.java
rename to src/main/java/controller/channel/map/ChannelRangeModel.java
diff --git a/src/controller/config/Configuration.java b/src/main/java/controller/config/Configuration.java
similarity index 100%
rename from src/controller/config/Configuration.java
rename to src/main/java/controller/config/Configuration.java
diff --git a/src/dsp/NRZDecoder.java b/src/main/java/dsp/NRZDecoder.java
similarity index 100%
rename from src/dsp/NRZDecoder.java
rename to src/main/java/dsp/NRZDecoder.java
diff --git a/src/dsp/am/AMDemodulator.java b/src/main/java/dsp/am/AMDemodulator.java
similarity index 94%
rename from src/dsp/am/AMDemodulator.java
rename to src/main/java/dsp/am/AMDemodulator.java
index 261adc80..be8aaae0 100644
--- a/src/dsp/am/AMDemodulator.java
+++ b/src/main/java/dsp/am/AMDemodulator.java
@@ -1,22 +1,22 @@
-package dsp.am;
-
-public abstract class AMDemodulator
-{
- private float mGain;
-
- public AMDemodulator( float gain )
- {
- mGain = gain;
- }
-
- public float demodulate( float inphase, float quadrature )
- {
- return (float)Math.sqrt( ( inphase * inphase ) +
- ( quadrature * quadrature ) ) * mGain;
- }
-
- public void setGain( float gain )
- {
- mGain = gain;
- }
-}
+package dsp.am;
+
+public abstract class AMDemodulator
+{
+ private float mGain;
+
+ public AMDemodulator( float gain )
+ {
+ mGain = gain;
+ }
+
+ public float demodulate( float inphase, float quadrature )
+ {
+ return (float)Math.sqrt( ( inphase * inphase ) +
+ ( quadrature * quadrature ) ) * mGain;
+ }
+
+ public void setGain( float gain )
+ {
+ mGain = gain;
+ }
+}
diff --git a/src/dsp/am/AMDemodulator_CB.java b/src/main/java/dsp/am/AMDemodulator_CB.java
similarity index 100%
rename from src/dsp/am/AMDemodulator_CB.java
rename to src/main/java/dsp/am/AMDemodulator_CB.java
diff --git a/src/dsp/filter/BooleanAveragingFilter.java b/src/main/java/dsp/filter/BooleanAveragingFilter.java
similarity index 100%
rename from src/dsp/filter/BooleanAveragingFilter.java
rename to src/main/java/dsp/filter/BooleanAveragingFilter.java
diff --git a/src/dsp/filter/ComplexFilter.java b/src/main/java/dsp/filter/ComplexFilter.java
similarity index 100%
rename from src/dsp/filter/ComplexFilter.java
rename to src/main/java/dsp/filter/ComplexFilter.java
diff --git a/src/dsp/filter/FilterFactory.java b/src/main/java/dsp/filter/FilterFactory.java
similarity index 100%
rename from src/dsp/filter/FilterFactory.java
rename to src/main/java/dsp/filter/FilterFactory.java
diff --git a/src/dsp/filter/Filters.java b/src/main/java/dsp/filter/Filters.java
similarity index 100%
rename from src/dsp/filter/Filters.java
rename to src/main/java/dsp/filter/Filters.java
diff --git a/src/dsp/filter/FloatFIRFilter.java b/src/main/java/dsp/filter/FloatFIRFilter.java
similarity index 100%
rename from src/dsp/filter/FloatFIRFilter.java
rename to src/main/java/dsp/filter/FloatFIRFilter.java
diff --git a/src/dsp/filter/FloatHalfBandFilter.java b/src/main/java/dsp/filter/FloatHalfBandFilter.java
similarity index 100%
rename from src/dsp/filter/FloatHalfBandFilter.java
rename to src/main/java/dsp/filter/FloatHalfBandFilter.java
diff --git a/src/dsp/filter/FloatHalfBandNoDecimateFilter.java b/src/main/java/dsp/filter/FloatHalfBandNoDecimateFilter.java
similarity index 100%
rename from src/dsp/filter/FloatHalfBandNoDecimateFilter.java
rename to src/main/java/dsp/filter/FloatHalfBandNoDecimateFilter.java
diff --git a/src/dsp/filter/GoertzelFilter.java b/src/main/java/dsp/filter/GoertzelFilter.java
similarity index 100%
rename from src/dsp/filter/GoertzelFilter.java
rename to src/main/java/dsp/filter/GoertzelFilter.java
diff --git a/src/dsp/filter/IIRBiQuadraticFilter.java b/src/main/java/dsp/filter/IIRBiQuadraticFilter.java
similarity index 100%
rename from src/dsp/filter/IIRBiQuadraticFilter.java
rename to src/main/java/dsp/filter/IIRBiQuadraticFilter.java
diff --git a/src/dsp/filter/LTRPulseShapingFilter.java b/src/main/java/dsp/filter/LTRPulseShapingFilter.java
similarity index 100%
rename from src/dsp/filter/LTRPulseShapingFilter.java
rename to src/main/java/dsp/filter/LTRPulseShapingFilter.java
diff --git a/src/dsp/filter/SquaringFilter.java b/src/main/java/dsp/filter/SquaringFilter.java
similarity index 100%
rename from src/dsp/filter/SquaringFilter.java
rename to src/main/java/dsp/filter/SquaringFilter.java
diff --git a/src/dsp/filter/Window.java b/src/main/java/dsp/filter/Window.java
similarity index 100%
rename from src/dsp/filter/Window.java
rename to src/main/java/dsp/filter/Window.java
diff --git a/src/dsp/filter/cic/ComplexPrimeCICDecimate.java b/src/main/java/dsp/filter/cic/ComplexPrimeCICDecimate.java
similarity index 100%
rename from src/dsp/filter/cic/ComplexPrimeCICDecimate.java
rename to src/main/java/dsp/filter/cic/ComplexPrimeCICDecimate.java
diff --git a/src/dsp/filter/cic/RealPrimeCICDecimate.java b/src/main/java/dsp/filter/cic/RealPrimeCICDecimate.java
similarity index 100%
rename from src/dsp/filter/cic/RealPrimeCICDecimate.java
rename to src/main/java/dsp/filter/cic/RealPrimeCICDecimate.java
diff --git a/src/dsp/filter/dc/DCRemovalFilter.java b/src/main/java/dsp/filter/dc/DCRemovalFilter.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilter.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilter.java
diff --git a/src/dsp/filter/dc/DCRemovalFilterLyons.java b/src/main/java/dsp/filter/dc/DCRemovalFilterLyons.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilterLyons.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilterLyons.java
diff --git a/src/dsp/filter/dc/DCRemovalFilter_CB.java b/src/main/java/dsp/filter/dc/DCRemovalFilter_CB.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilter_CB.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilter_CB.java
diff --git a/src/dsp/filter/dc/DCRemovalFilter_RB.java b/src/main/java/dsp/filter/dc/DCRemovalFilter_RB.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilter_RB.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilter_RB.java
diff --git a/src/dsp/filter/dc/DCRemovalFilter_R_R.java b/src/main/java/dsp/filter/dc/DCRemovalFilter_R_R.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilter_R_R.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilter_R_R.java
diff --git a/src/dsp/filter/dc/DCRemovalFilter_RealBuffer.java b/src/main/java/dsp/filter/dc/DCRemovalFilter_RealBuffer.java
similarity index 100%
rename from src/dsp/filter/dc/DCRemovalFilter_RealBuffer.java
rename to src/main/java/dsp/filter/dc/DCRemovalFilter_RealBuffer.java
diff --git a/src/dsp/filter/dc/IIRSinglePoleDCRemovalFilter.java b/src/main/java/dsp/filter/dc/IIRSinglePoleDCRemovalFilter.java
similarity index 100%
rename from src/dsp/filter/dc/IIRSinglePoleDCRemovalFilter.java
rename to src/main/java/dsp/filter/dc/IIRSinglePoleDCRemovalFilter.java
diff --git a/src/dsp/filter/dc/IIRSinglePoleDCRemovalFilter_RB.java b/src/main/java/dsp/filter/dc/IIRSinglePoleDCRemovalFilter_RB.java
similarity index 100%
rename from src/dsp/filter/dc/IIRSinglePoleDCRemovalFilter_RB.java
rename to src/main/java/dsp/filter/dc/IIRSinglePoleDCRemovalFilter_RB.java
diff --git a/src/dsp/filter/design/FilterDesignException.java b/src/main/java/dsp/filter/design/FilterDesignException.java
similarity index 100%
rename from src/dsp/filter/design/FilterDesignException.java
rename to src/main/java/dsp/filter/design/FilterDesignException.java
diff --git a/src/dsp/filter/design/FilterView.css b/src/main/java/dsp/filter/design/FilterView.css
similarity index 100%
rename from src/dsp/filter/design/FilterView.css
rename to src/main/java/dsp/filter/design/FilterView.css
diff --git a/src/dsp/filter/design/FilterView.java b/src/main/java/dsp/filter/design/FilterView.java
similarity index 100%
rename from src/dsp/filter/design/FilterView.java
rename to src/main/java/dsp/filter/design/FilterView.java
diff --git a/src/dsp/filter/design/FilterViewer.java b/src/main/java/dsp/filter/design/FilterViewer.java
similarity index 100%
rename from src/dsp/filter/design/FilterViewer.java
rename to src/main/java/dsp/filter/design/FilterViewer.java
diff --git a/src/dsp/filter/equalizer/CMAEqualizer.java b/src/main/java/dsp/filter/equalizer/CMAEqualizer.java
similarity index 100%
rename from src/dsp/filter/equalizer/CMAEqualizer.java
rename to src/main/java/dsp/filter/equalizer/CMAEqualizer.java
diff --git a/src/dsp/filter/fir/FIRFilter.java b/src/main/java/dsp/filter/fir/FIRFilter.java
similarity index 100%
rename from src/dsp/filter/fir/FIRFilter.java
rename to src/main/java/dsp/filter/fir/FIRFilter.java
diff --git a/src/dsp/filter/fir/FIRFilterSpecification.java b/src/main/java/dsp/filter/fir/FIRFilterSpecification.java
similarity index 100%
rename from src/dsp/filter/fir/FIRFilterSpecification.java
rename to src/main/java/dsp/filter/fir/FIRFilterSpecification.java
diff --git a/src/dsp/filter/fir/complex/ComplexFIRFilter.java b/src/main/java/dsp/filter/fir/complex/ComplexFIRFilter.java
similarity index 100%
rename from src/dsp/filter/fir/complex/ComplexFIRFilter.java
rename to src/main/java/dsp/filter/fir/complex/ComplexFIRFilter.java
diff --git a/src/dsp/filter/fir/complex/ComplexFIRFilter_CB_CB.java b/src/main/java/dsp/filter/fir/complex/ComplexFIRFilter_CB_CB.java
similarity index 100%
rename from src/dsp/filter/fir/complex/ComplexFIRFilter_CB_CB.java
rename to src/main/java/dsp/filter/fir/complex/ComplexFIRFilter_CB_CB.java
diff --git a/src/dsp/filter/fir/real/RealFIRFilter.java b/src/main/java/dsp/filter/fir/real/RealFIRFilter.java
similarity index 100%
rename from src/dsp/filter/fir/real/RealFIRFilter.java
rename to src/main/java/dsp/filter/fir/real/RealFIRFilter.java
diff --git a/src/dsp/filter/fir/real/RealFIRFilter_RB_RB.java b/src/main/java/dsp/filter/fir/real/RealFIRFilter_RB_RB.java
similarity index 100%
rename from src/dsp/filter/fir/real/RealFIRFilter_RB_RB.java
rename to src/main/java/dsp/filter/fir/real/RealFIRFilter_RB_RB.java
diff --git a/src/dsp/filter/fir/real/RealFIRFilter_R_R.java b/src/main/java/dsp/filter/fir/real/RealFIRFilter_R_R.java
similarity index 100%
rename from src/dsp/filter/fir/real/RealFIRFilter_R_R.java
rename to src/main/java/dsp/filter/fir/real/RealFIRFilter_R_R.java
diff --git a/src/dsp/filter/fir/remez/FIRLinearPhaseFilterType.java b/src/main/java/dsp/filter/fir/remez/FIRLinearPhaseFilterType.java
similarity index 100%
rename from src/dsp/filter/fir/remez/FIRLinearPhaseFilterType.java
rename to src/main/java/dsp/filter/fir/remez/FIRLinearPhaseFilterType.java
diff --git a/src/dsp/filter/fir/remez/Grid.java b/src/main/java/dsp/filter/fir/remez/Grid.java
similarity index 100%
rename from src/dsp/filter/fir/remez/Grid.java
rename to src/main/java/dsp/filter/fir/remez/Grid.java
diff --git a/src/dsp/filter/fir/remez/RemezFIRFilterDesigner.java b/src/main/java/dsp/filter/fir/remez/RemezFIRFilterDesigner.java
similarity index 100%
rename from src/dsp/filter/fir/remez/RemezFIRFilterDesigner.java
rename to src/main/java/dsp/filter/fir/remez/RemezFIRFilterDesigner.java
diff --git a/src/dsp/filter/halfband/complex/HalfBandFilter_CB_CB.java b/src/main/java/dsp/filter/halfband/complex/HalfBandFilter_CB_CB.java
similarity index 100%
rename from src/dsp/filter/halfband/complex/HalfBandFilter_CB_CB.java
rename to src/main/java/dsp/filter/halfband/complex/HalfBandFilter_CB_CB.java
diff --git a/src/dsp/filter/halfband/real/HalfBandFilter.java b/src/main/java/dsp/filter/halfband/real/HalfBandFilter.java
similarity index 100%
rename from src/dsp/filter/halfband/real/HalfBandFilter.java
rename to src/main/java/dsp/filter/halfband/real/HalfBandFilter.java
diff --git a/src/dsp/filter/halfband/real/HalfBandFilter_RB_RB.java b/src/main/java/dsp/filter/halfband/real/HalfBandFilter_RB_RB.java
similarity index 100%
rename from src/dsp/filter/halfband/real/HalfBandFilter_RB_RB.java
rename to src/main/java/dsp/filter/halfband/real/HalfBandFilter_RB_RB.java
diff --git a/src/dsp/filter/hilbert/HilbertTransform.java b/src/main/java/dsp/filter/hilbert/HilbertTransform.java
similarity index 100%
rename from src/dsp/filter/hilbert/HilbertTransform.java
rename to src/main/java/dsp/filter/hilbert/HilbertTransform.java
diff --git a/src/dsp/filter/hilbert/InterpolatingHilbertTransform.java b/src/main/java/dsp/filter/hilbert/InterpolatingHilbertTransform.java
similarity index 100%
rename from src/dsp/filter/hilbert/InterpolatingHilbertTransform.java
rename to src/main/java/dsp/filter/hilbert/InterpolatingHilbertTransform.java
diff --git a/src/dsp/filter/iir/DeemphasisFilter.java b/src/main/java/dsp/filter/iir/DeemphasisFilter.java
similarity index 100%
rename from src/dsp/filter/iir/DeemphasisFilter.java
rename to src/main/java/dsp/filter/iir/DeemphasisFilter.java
diff --git a/src/dsp/filter/interpolator/Interpolator.java b/src/main/java/dsp/filter/interpolator/Interpolator.java
similarity index 100%
rename from src/dsp/filter/interpolator/Interpolator.java
rename to src/main/java/dsp/filter/interpolator/Interpolator.java
diff --git a/src/dsp/filter/interpolator/RealInterpolator.java b/src/main/java/dsp/filter/interpolator/RealInterpolator.java
similarity index 100%
rename from src/dsp/filter/interpolator/RealInterpolator.java
rename to src/main/java/dsp/filter/interpolator/RealInterpolator.java
diff --git a/src/dsp/filter/polyphase/FilterStage.java b/src/main/java/dsp/filter/polyphase/FilterStage.java
similarity index 100%
rename from src/dsp/filter/polyphase/FilterStage.java
rename to src/main/java/dsp/filter/polyphase/FilterStage.java
diff --git a/src/dsp/filter/polyphase/PolyphaseFIRDecimatingFilter_RB.java b/src/main/java/dsp/filter/polyphase/PolyphaseFIRDecimatingFilter_RB.java
similarity index 100%
rename from src/dsp/filter/polyphase/PolyphaseFIRDecimatingFilter_RB.java
rename to src/main/java/dsp/filter/polyphase/PolyphaseFIRDecimatingFilter_RB.java
diff --git a/src/dsp/filter/polyphase/PolyphaseFIRInterpolatingFilter.java b/src/main/java/dsp/filter/polyphase/PolyphaseFIRInterpolatingFilter.java
similarity index 100%
rename from src/dsp/filter/polyphase/PolyphaseFIRInterpolatingFilter.java
rename to src/main/java/dsp/filter/polyphase/PolyphaseFIRInterpolatingFilter.java
diff --git a/src/dsp/filter/smoothing/GaussianSmoothingFilter.java b/src/main/java/dsp/filter/smoothing/GaussianSmoothingFilter.java
similarity index 100%
rename from src/dsp/filter/smoothing/GaussianSmoothingFilter.java
rename to src/main/java/dsp/filter/smoothing/GaussianSmoothingFilter.java
diff --git a/src/dsp/filter/smoothing/NoSmoothingFilter.java b/src/main/java/dsp/filter/smoothing/NoSmoothingFilter.java
similarity index 100%
rename from src/dsp/filter/smoothing/NoSmoothingFilter.java
rename to src/main/java/dsp/filter/smoothing/NoSmoothingFilter.java
diff --git a/src/dsp/filter/smoothing/RectangularSmoothingFilter.java b/src/main/java/dsp/filter/smoothing/RectangularSmoothingFilter.java
similarity index 100%
rename from src/dsp/filter/smoothing/RectangularSmoothingFilter.java
rename to src/main/java/dsp/filter/smoothing/RectangularSmoothingFilter.java
diff --git a/src/dsp/filter/smoothing/SmoothingFilter.java b/src/main/java/dsp/filter/smoothing/SmoothingFilter.java
similarity index 100%
rename from src/dsp/filter/smoothing/SmoothingFilter.java
rename to src/main/java/dsp/filter/smoothing/SmoothingFilter.java
diff --git a/src/dsp/filter/smoothing/TriangularSmoothingFilter.java b/src/main/java/dsp/filter/smoothing/TriangularSmoothingFilter.java
similarity index 100%
rename from src/dsp/filter/smoothing/TriangularSmoothingFilter.java
rename to src/main/java/dsp/filter/smoothing/TriangularSmoothingFilter.java
diff --git a/src/dsp/fm/FMDemodulator.java b/src/main/java/dsp/fm/FMDemodulator.java
similarity index 100%
rename from src/dsp/fm/FMDemodulator.java
rename to src/main/java/dsp/fm/FMDemodulator.java
diff --git a/src/dsp/fm/FMDemodulator_CB.java b/src/main/java/dsp/fm/FMDemodulator_CB.java
similarity index 100%
rename from src/dsp/fm/FMDemodulator_CB.java
rename to src/main/java/dsp/fm/FMDemodulator_CB.java
diff --git a/src/dsp/fm/FMDiscriminator.java b/src/main/java/dsp/fm/FMDiscriminator.java
similarity index 100%
rename from src/dsp/fm/FMDiscriminator.java
rename to src/main/java/dsp/fm/FMDiscriminator.java
diff --git a/src/dsp/fsk/FSK2Decoder.java b/src/main/java/dsp/fsk/FSK2Decoder.java
similarity index 100%
rename from src/dsp/fsk/FSK2Decoder.java
rename to src/main/java/dsp/fsk/FSK2Decoder.java
diff --git a/src/dsp/fsk/LTRFSKDecoder.java b/src/main/java/dsp/fsk/LTRFSKDecoder.java
similarity index 100%
rename from src/dsp/fsk/LTRFSKDecoder.java
rename to src/main/java/dsp/fsk/LTRFSKDecoder.java
diff --git a/src/dsp/gain/AutomaticGainControl.java b/src/main/java/dsp/gain/AutomaticGainControl.java
similarity index 100%
rename from src/dsp/gain/AutomaticGainControl.java
rename to src/main/java/dsp/gain/AutomaticGainControl.java
diff --git a/src/dsp/gain/AutomaticGainControl_RB.java b/src/main/java/dsp/gain/AutomaticGainControl_RB.java
similarity index 100%
rename from src/dsp/gain/AutomaticGainControl_RB.java
rename to src/main/java/dsp/gain/AutomaticGainControl_RB.java
diff --git a/src/dsp/gain/ComplexAutomaticGainControl.java b/src/main/java/dsp/gain/ComplexAutomaticGainControl.java
similarity index 100%
rename from src/dsp/gain/ComplexAutomaticGainControl.java
rename to src/main/java/dsp/gain/ComplexAutomaticGainControl.java
diff --git a/src/dsp/gain/ComplexFeedForwardGainControl.java b/src/main/java/dsp/gain/ComplexFeedForwardGainControl.java
similarity index 100%
rename from src/dsp/gain/ComplexFeedForwardGainControl.java
rename to src/main/java/dsp/gain/ComplexFeedForwardGainControl.java
diff --git a/src/dsp/gain/ComplexGain.java b/src/main/java/dsp/gain/ComplexGain.java
similarity index 100%
rename from src/dsp/gain/ComplexGain.java
rename to src/main/java/dsp/gain/ComplexGain.java
diff --git a/src/dsp/gain/DirectGainControl.java b/src/main/java/dsp/gain/DirectGainControl.java
similarity index 100%
rename from src/dsp/gain/DirectGainControl.java
rename to src/main/java/dsp/gain/DirectGainControl.java
diff --git a/src/dsp/gain/GainController.java b/src/main/java/dsp/gain/GainController.java
similarity index 100%
rename from src/dsp/gain/GainController.java
rename to src/main/java/dsp/gain/GainController.java
diff --git a/src/dsp/gain/NonClippingGain.java b/src/main/java/dsp/gain/NonClippingGain.java
similarity index 100%
rename from src/dsp/gain/NonClippingGain.java
rename to src/main/java/dsp/gain/NonClippingGain.java
diff --git a/src/dsp/mixer/Oscillator.java b/src/main/java/dsp/mixer/Oscillator.java
similarity index 100%
rename from src/dsp/mixer/Oscillator.java
rename to src/main/java/dsp/mixer/Oscillator.java
diff --git a/src/dsp/psk/LSMDemodulator.java b/src/main/java/dsp/psk/LSMDemodulator.java
similarity index 100%
rename from src/dsp/psk/LSMDemodulator.java
rename to src/main/java/dsp/psk/LSMDemodulator.java
diff --git a/src/dsp/psk/QPSKPolarSlicer.java b/src/main/java/dsp/psk/QPSKPolarSlicer.java
similarity index 100%
rename from src/dsp/psk/QPSKPolarSlicer.java
rename to src/main/java/dsp/psk/QPSKPolarSlicer.java
diff --git a/src/dsp/psk/QPSKStarSlicer.java b/src/main/java/dsp/psk/QPSKStarSlicer.java
similarity index 100%
rename from src/dsp/psk/QPSKStarSlicer.java
rename to src/main/java/dsp/psk/QPSKStarSlicer.java
diff --git a/src/dsp/symbol/Dibit.java b/src/main/java/dsp/symbol/Dibit.java
similarity index 100%
rename from src/dsp/symbol/Dibit.java
rename to src/main/java/dsp/symbol/Dibit.java
diff --git a/src/dsp/symbol/FrameSync.java b/src/main/java/dsp/symbol/FrameSync.java
similarity index 100%
rename from src/dsp/symbol/FrameSync.java
rename to src/main/java/dsp/symbol/FrameSync.java
diff --git a/src/dsp/symbol/Slicer.java b/src/main/java/dsp/symbol/Slicer.java
similarity index 100%
rename from src/dsp/symbol/Slicer.java
rename to src/main/java/dsp/symbol/Slicer.java
diff --git a/src/dsp/symbol/SymbolEvent.java b/src/main/java/dsp/symbol/SymbolEvent.java
similarity index 100%
rename from src/dsp/symbol/SymbolEvent.java
rename to src/main/java/dsp/symbol/SymbolEvent.java
diff --git a/src/dsp/symbol/SyncDetectListener.java b/src/main/java/dsp/symbol/SyncDetectListener.java
similarity index 100%
rename from src/dsp/symbol/SyncDetectListener.java
rename to src/main/java/dsp/symbol/SyncDetectListener.java
diff --git a/src/dsp/symbol/SyncDetectProvider.java b/src/main/java/dsp/symbol/SyncDetectProvider.java
similarity index 100%
rename from src/dsp/symbol/SyncDetectProvider.java
rename to src/main/java/dsp/symbol/SyncDetectProvider.java
diff --git a/src/edac/BCH_63_16_11.java b/src/main/java/edac/BCH_63_16_11.java
similarity index 100%
rename from src/edac/BCH_63_16_11.java
rename to src/main/java/edac/BCH_63_16_11.java
diff --git a/src/edac/BerlekempMassey_63.java b/src/main/java/edac/BerlekempMassey_63.java
similarity index 100%
rename from src/edac/BerlekempMassey_63.java
rename to src/main/java/edac/BerlekempMassey_63.java
diff --git a/src/edac/CRC.java b/src/main/java/edac/CRC.java
similarity index 100%
rename from src/edac/CRC.java
rename to src/main/java/edac/CRC.java
diff --git a/src/edac/CRCFleetsync.java b/src/main/java/edac/CRCFleetsync.java
similarity index 100%
rename from src/edac/CRCFleetsync.java
rename to src/main/java/edac/CRCFleetsync.java
diff --git a/src/edac/CRCLJ.java b/src/main/java/edac/CRCLJ.java
similarity index 100%
rename from src/edac/CRCLJ.java
rename to src/main/java/edac/CRCLJ.java
diff --git a/src/edac/CRCLTR.java b/src/main/java/edac/CRCLTR.java
similarity index 100%
rename from src/edac/CRCLTR.java
rename to src/main/java/edac/CRCLTR.java
diff --git a/src/edac/CRCP25.java b/src/main/java/edac/CRCP25.java
similarity index 100%
rename from src/edac/CRCP25.java
rename to src/main/java/edac/CRCP25.java
diff --git a/src/edac/CRCPassport.java b/src/main/java/edac/CRCPassport.java
similarity index 100%
rename from src/edac/CRCPassport.java
rename to src/main/java/edac/CRCPassport.java
diff --git a/src/edac/CRCUtil.java b/src/main/java/edac/CRCUtil.java
similarity index 100%
rename from src/edac/CRCUtil.java
rename to src/main/java/edac/CRCUtil.java
diff --git a/src/edac/Checksum.java b/src/main/java/edac/Checksum.java
similarity index 100%
rename from src/edac/Checksum.java
rename to src/main/java/edac/Checksum.java
diff --git a/src/edac/ChecksumTest.java b/src/main/java/edac/ChecksumTest.java
similarity index 100%
rename from src/edac/ChecksumTest.java
rename to src/main/java/edac/ChecksumTest.java
diff --git a/src/edac/ChecksumType.java b/src/main/java/edac/ChecksumType.java
similarity index 100%
rename from src/edac/ChecksumType.java
rename to src/main/java/edac/ChecksumType.java
diff --git a/src/edac/Golay18.java b/src/main/java/edac/Golay18.java
similarity index 100%
rename from src/edac/Golay18.java
rename to src/main/java/edac/Golay18.java
diff --git a/src/edac/Golay23.java b/src/main/java/edac/Golay23.java
similarity index 100%
rename from src/edac/Golay23.java
rename to src/main/java/edac/Golay23.java
diff --git a/src/edac/Golay24.java b/src/main/java/edac/Golay24.java
similarity index 100%
rename from src/edac/Golay24.java
rename to src/main/java/edac/Golay24.java
diff --git a/src/edac/Hamming10.java b/src/main/java/edac/Hamming10.java
similarity index 100%
rename from src/edac/Hamming10.java
rename to src/main/java/edac/Hamming10.java
diff --git a/src/edac/Hamming15.java b/src/main/java/edac/Hamming15.java
similarity index 100%
rename from src/edac/Hamming15.java
rename to src/main/java/edac/Hamming15.java
diff --git a/src/edac/ReedSolomon_63_47_17.java b/src/main/java/edac/ReedSolomon_63_47_17.java
similarity index 100%
rename from src/edac/ReedSolomon_63_47_17.java
rename to src/main/java/edac/ReedSolomon_63_47_17.java
diff --git a/src/edac/trellis/DMRNode.java b/src/main/java/edac/trellis/DMRNode.java
similarity index 100%
rename from src/edac/trellis/DMRNode.java
rename to src/main/java/edac/trellis/DMRNode.java
diff --git a/src/edac/trellis/Node.java b/src/main/java/edac/trellis/Node.java
similarity index 100%
rename from src/edac/trellis/Node.java
rename to src/main/java/edac/trellis/Node.java
diff --git a/src/edac/trellis/Path.java b/src/main/java/edac/trellis/Path.java
similarity index 100%
rename from src/edac/trellis/Path.java
rename to src/main/java/edac/trellis/Path.java
diff --git a/src/edac/trellis/ViterbiDecoder.java b/src/main/java/edac/trellis/ViterbiDecoder.java
similarity index 100%
rename from src/edac/trellis/ViterbiDecoder.java
rename to src/main/java/edac/trellis/ViterbiDecoder.java
diff --git a/src/edac/trellis/ViterbiDecoder_3_4_DMR.java b/src/main/java/edac/trellis/ViterbiDecoder_3_4_DMR.java
similarity index 100%
rename from src/edac/trellis/ViterbiDecoder_3_4_DMR.java
rename to src/main/java/edac/trellis/ViterbiDecoder_3_4_DMR.java
diff --git a/src/external/radioreference/RadioReferenceService.java b/src/main/java/external/radioreference/RadioReferenceService.java
similarity index 100%
rename from src/external/radioreference/RadioReferenceService.java
rename to src/main/java/external/radioreference/RadioReferenceService.java
diff --git a/src/filter/AllPassFilter.java b/src/main/java/filter/AllPassFilter.java
similarity index 100%
rename from src/filter/AllPassFilter.java
rename to src/main/java/filter/AllPassFilter.java
diff --git a/src/filter/Filter.java b/src/main/java/filter/Filter.java
similarity index 100%
rename from src/filter/Filter.java
rename to src/main/java/filter/Filter.java
diff --git a/src/filter/FilterEditorPanel.java b/src/main/java/filter/FilterEditorPanel.java
similarity index 100%
rename from src/filter/FilterEditorPanel.java
rename to src/main/java/filter/FilterEditorPanel.java
diff --git a/src/filter/FilterElement.java b/src/main/java/filter/FilterElement.java
similarity index 100%
rename from src/filter/FilterElement.java
rename to src/main/java/filter/FilterElement.java
diff --git a/src/filter/FilterSet.java b/src/main/java/filter/FilterSet.java
similarity index 100%
rename from src/filter/FilterSet.java
rename to src/main/java/filter/FilterSet.java
diff --git a/src/filter/IFilter.java b/src/main/java/filter/IFilter.java
similarity index 100%
rename from src/filter/IFilter.java
rename to src/main/java/filter/IFilter.java
diff --git a/src/gui/ChannelMemoryLogger.java b/src/main/java/gui/ChannelMemoryLogger.java
similarity index 100%
rename from src/gui/ChannelMemoryLogger.java
rename to src/main/java/gui/ChannelMemoryLogger.java
diff --git a/src/gui/SDRTrunk.java b/src/main/java/gui/SDRTrunk.java
similarity index 100%
rename from src/gui/SDRTrunk.java
rename to src/main/java/gui/SDRTrunk.java
diff --git a/src/gui/control/ConstellationViewer.java b/src/main/java/gui/control/ConstellationViewer.java
similarity index 100%
rename from src/gui/control/ConstellationViewer.java
rename to src/main/java/gui/control/ConstellationViewer.java
diff --git a/src/gui/control/CurveFittedAreaChart.java b/src/main/java/gui/control/CurveFittedAreaChart.java
similarity index 100%
rename from src/gui/control/CurveFittedAreaChart.java
rename to src/main/java/gui/control/CurveFittedAreaChart.java
diff --git a/src/gui/control/JFrequencyControl.java b/src/main/java/gui/control/JFrequencyControl.java
similarity index 100%
rename from src/gui/control/JFrequencyControl.java
rename to src/main/java/gui/control/JFrequencyControl.java
diff --git a/src/gui/editor/DocumentListenerEditor.java b/src/main/java/gui/editor/DocumentListenerEditor.java
similarity index 100%
rename from src/gui/editor/DocumentListenerEditor.java
rename to src/main/java/gui/editor/DocumentListenerEditor.java
diff --git a/src/gui/editor/Editor.java b/src/main/java/gui/editor/Editor.java
similarity index 100%
rename from src/gui/editor/Editor.java
rename to src/main/java/gui/editor/Editor.java
diff --git a/src/gui/editor/EditorValidationException.java b/src/main/java/gui/editor/EditorValidationException.java
similarity index 100%
rename from src/gui/editor/EditorValidationException.java
rename to src/main/java/gui/editor/EditorValidationException.java
diff --git a/src/gui/editor/EmptyEditor.java b/src/main/java/gui/editor/EmptyEditor.java
similarity index 100%
rename from src/gui/editor/EmptyEditor.java
rename to src/main/java/gui/editor/EmptyEditor.java
diff --git a/src/gui/editor/EmptyValidatingEditor.java b/src/main/java/gui/editor/EmptyValidatingEditor.java
similarity index 100%
rename from src/gui/editor/EmptyValidatingEditor.java
rename to src/main/java/gui/editor/EmptyValidatingEditor.java
diff --git a/src/gui/editor/ValidatingEditor.java b/src/main/java/gui/editor/ValidatingEditor.java
similarity index 100%
rename from src/gui/editor/ValidatingEditor.java
rename to src/main/java/gui/editor/ValidatingEditor.java
diff --git a/src/icon/Icon.java b/src/main/java/icon/Icon.java
similarity index 100%
rename from src/icon/Icon.java
rename to src/main/java/icon/Icon.java
diff --git a/src/icon/IconEditor.java b/src/main/java/icon/IconEditor.java
similarity index 100%
rename from src/icon/IconEditor.java
rename to src/main/java/icon/IconEditor.java
diff --git a/src/icon/IconListCellRenderer.java b/src/main/java/icon/IconListCellRenderer.java
similarity index 100%
rename from src/icon/IconListCellRenderer.java
rename to src/main/java/icon/IconListCellRenderer.java
diff --git a/src/icon/IconManager.java b/src/main/java/icon/IconManager.java
similarity index 100%
rename from src/icon/IconManager.java
rename to src/main/java/icon/IconManager.java
diff --git a/src/icon/IconSelector.java b/src/main/java/icon/IconSelector.java
similarity index 100%
rename from src/icon/IconSelector.java
rename to src/main/java/icon/IconSelector.java
diff --git a/src/icon/IconSet.java b/src/main/java/icon/IconSet.java
similarity index 100%
rename from src/icon/IconSet.java
rename to src/main/java/icon/IconSet.java
diff --git a/src/icon/IconTableCellRenderer.java b/src/main/java/icon/IconTableCellRenderer.java
similarity index 100%
rename from src/icon/IconTableCellRenderer.java
rename to src/main/java/icon/IconTableCellRenderer.java
diff --git a/src/icon/IconTableModel.java b/src/main/java/icon/IconTableModel.java
similarity index 100%
rename from src/icon/IconTableModel.java
rename to src/main/java/icon/IconTableModel.java
diff --git a/src/icon/ImageFilter.java b/src/main/java/icon/ImageFilter.java
similarity index 100%
rename from src/icon/ImageFilter.java
rename to src/main/java/icon/ImageFilter.java
diff --git a/src/instrument/Instrumentable.java b/src/main/java/instrument/Instrumentable.java
similarity index 100%
rename from src/instrument/Instrumentable.java
rename to src/main/java/instrument/Instrumentable.java
diff --git a/src/instrument/InstrumentableProcessingChain.java b/src/main/java/instrument/InstrumentableProcessingChain.java
similarity index 100%
rename from src/instrument/InstrumentableProcessingChain.java
rename to src/main/java/instrument/InstrumentableProcessingChain.java
diff --git a/src/instrument/gui/ConstellationPanel.java b/src/main/java/instrument/gui/ConstellationPanel.java
similarity index 100%
rename from src/instrument/gui/ConstellationPanel.java
rename to src/main/java/instrument/gui/ConstellationPanel.java
diff --git a/src/instrument/gui/DecoderSelectionFrame.java b/src/main/java/instrument/gui/DecoderSelectionFrame.java
similarity index 100%
rename from src/instrument/gui/DecoderSelectionFrame.java
rename to src/main/java/instrument/gui/DecoderSelectionFrame.java
diff --git a/src/instrument/gui/DecoderViewFrame.java b/src/main/java/instrument/gui/DecoderViewFrame.java
similarity index 100%
rename from src/instrument/gui/DecoderViewFrame.java
rename to src/main/java/instrument/gui/DecoderViewFrame.java
diff --git a/src/instrument/gui/SampleModel.java b/src/main/java/instrument/gui/SampleModel.java
similarity index 100%
rename from src/instrument/gui/SampleModel.java
rename to src/main/java/instrument/gui/SampleModel.java
diff --git a/src/instrument/gui/SourceControllerFrame.java b/src/main/java/instrument/gui/SourceControllerFrame.java
similarity index 100%
rename from src/instrument/gui/SourceControllerFrame.java
rename to src/main/java/instrument/gui/SourceControllerFrame.java
diff --git a/src/instrument/gui/Viewer.java b/src/main/java/instrument/gui/Viewer.java
similarity index 100%
rename from src/instrument/gui/Viewer.java
rename to src/main/java/instrument/gui/Viewer.java
diff --git a/src/instrument/tap/Tap.java b/src/main/java/instrument/tap/Tap.java
similarity index 100%
rename from src/instrument/tap/Tap.java
rename to src/main/java/instrument/tap/Tap.java
diff --git a/src/instrument/tap/TapGroup.java b/src/main/java/instrument/tap/TapGroup.java
similarity index 100%
rename from src/instrument/tap/TapGroup.java
rename to src/main/java/instrument/tap/TapGroup.java
diff --git a/src/instrument/tap/TapListener.java b/src/main/java/instrument/tap/TapListener.java
similarity index 100%
rename from src/instrument/tap/TapListener.java
rename to src/main/java/instrument/tap/TapListener.java
diff --git a/src/instrument/tap/TapType.java b/src/main/java/instrument/tap/TapType.java
similarity index 100%
rename from src/instrument/tap/TapType.java
rename to src/main/java/instrument/tap/TapType.java
diff --git a/src/instrument/tap/TapViewPanel.java b/src/main/java/instrument/tap/TapViewPanel.java
similarity index 100%
rename from src/instrument/tap/TapViewPanel.java
rename to src/main/java/instrument/tap/TapViewPanel.java
diff --git a/src/instrument/tap/event/SyncDetectTap.java b/src/main/java/instrument/tap/event/SyncDetectTap.java
similarity index 100%
rename from src/instrument/tap/event/SyncDetectTap.java
rename to src/main/java/instrument/tap/event/SyncDetectTap.java
diff --git a/src/instrument/tap/stream/AdditiveFloatTap.java b/src/main/java/instrument/tap/stream/AdditiveFloatTap.java
similarity index 100%
rename from src/instrument/tap/stream/AdditiveFloatTap.java
rename to src/main/java/instrument/tap/stream/AdditiveFloatTap.java
diff --git a/src/instrument/tap/stream/BinaryTap.java b/src/main/java/instrument/tap/stream/BinaryTap.java
similarity index 100%
rename from src/instrument/tap/stream/BinaryTap.java
rename to src/main/java/instrument/tap/stream/BinaryTap.java
diff --git a/src/instrument/tap/stream/BinaryTapViewPanel.java b/src/main/java/instrument/tap/stream/BinaryTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/BinaryTapViewPanel.java
rename to src/main/java/instrument/tap/stream/BinaryTapViewPanel.java
diff --git a/src/instrument/tap/stream/ComplexSampleTap.java b/src/main/java/instrument/tap/stream/ComplexSampleTap.java
similarity index 100%
rename from src/instrument/tap/stream/ComplexSampleTap.java
rename to src/main/java/instrument/tap/stream/ComplexSampleTap.java
diff --git a/src/instrument/tap/stream/ComplexSampleTapViewPanel.java b/src/main/java/instrument/tap/stream/ComplexSampleTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/ComplexSampleTapViewPanel.java
rename to src/main/java/instrument/tap/stream/ComplexSampleTapViewPanel.java
diff --git a/src/instrument/tap/stream/ComplexTap.java b/src/main/java/instrument/tap/stream/ComplexTap.java
similarity index 100%
rename from src/instrument/tap/stream/ComplexTap.java
rename to src/main/java/instrument/tap/stream/ComplexTap.java
diff --git a/src/instrument/tap/stream/ComplexTapViewPanel.java b/src/main/java/instrument/tap/stream/ComplexTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/ComplexTapViewPanel.java
rename to src/main/java/instrument/tap/stream/ComplexTapViewPanel.java
diff --git a/src/instrument/tap/stream/DibitTap.java b/src/main/java/instrument/tap/stream/DibitTap.java
similarity index 100%
rename from src/instrument/tap/stream/DibitTap.java
rename to src/main/java/instrument/tap/stream/DibitTap.java
diff --git a/src/instrument/tap/stream/DibitTapViewPanel.java b/src/main/java/instrument/tap/stream/DibitTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/DibitTapViewPanel.java
rename to src/main/java/instrument/tap/stream/DibitTapViewPanel.java
diff --git a/src/instrument/tap/stream/EyeDiagramData.java b/src/main/java/instrument/tap/stream/EyeDiagramData.java
similarity index 100%
rename from src/instrument/tap/stream/EyeDiagramData.java
rename to src/main/java/instrument/tap/stream/EyeDiagramData.java
diff --git a/src/instrument/tap/stream/EyeDiagramDataTap.java b/src/main/java/instrument/tap/stream/EyeDiagramDataTap.java
similarity index 100%
rename from src/instrument/tap/stream/EyeDiagramDataTap.java
rename to src/main/java/instrument/tap/stream/EyeDiagramDataTap.java
diff --git a/src/instrument/tap/stream/EyeDiagramDataTapPanel.java b/src/main/java/instrument/tap/stream/EyeDiagramDataTapPanel.java
similarity index 100%
rename from src/instrument/tap/stream/EyeDiagramDataTapPanel.java
rename to src/main/java/instrument/tap/stream/EyeDiagramDataTapPanel.java
diff --git a/src/instrument/tap/stream/FloatBufferTap.java b/src/main/java/instrument/tap/stream/FloatBufferTap.java
similarity index 100%
rename from src/instrument/tap/stream/FloatBufferTap.java
rename to src/main/java/instrument/tap/stream/FloatBufferTap.java
diff --git a/src/instrument/tap/stream/FloatTap.java b/src/main/java/instrument/tap/stream/FloatTap.java
similarity index 100%
rename from src/instrument/tap/stream/FloatTap.java
rename to src/main/java/instrument/tap/stream/FloatTap.java
diff --git a/src/instrument/tap/stream/FloatTapPhaseViewPanel.java b/src/main/java/instrument/tap/stream/FloatTapPhaseViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/FloatTapPhaseViewPanel.java
rename to src/main/java/instrument/tap/stream/FloatTapPhaseViewPanel.java
diff --git a/src/instrument/tap/stream/FloatTapViewPanel.java b/src/main/java/instrument/tap/stream/FloatTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/FloatTapViewPanel.java
rename to src/main/java/instrument/tap/stream/FloatTapViewPanel.java
diff --git a/src/instrument/tap/stream/GainFloatTap.java b/src/main/java/instrument/tap/stream/GainFloatTap.java
similarity index 100%
rename from src/instrument/tap/stream/GainFloatTap.java
rename to src/main/java/instrument/tap/stream/GainFloatTap.java
diff --git a/src/instrument/tap/stream/QPSKTap.java b/src/main/java/instrument/tap/stream/QPSKTap.java
similarity index 100%
rename from src/instrument/tap/stream/QPSKTap.java
rename to src/main/java/instrument/tap/stream/QPSKTap.java
diff --git a/src/instrument/tap/stream/QPSKTapPanel.java b/src/main/java/instrument/tap/stream/QPSKTapPanel.java
similarity index 100%
rename from src/instrument/tap/stream/QPSKTapPanel.java
rename to src/main/java/instrument/tap/stream/QPSKTapPanel.java
diff --git a/src/instrument/tap/stream/StreamTap.java b/src/main/java/instrument/tap/stream/StreamTap.java
similarity index 100%
rename from src/instrument/tap/stream/StreamTap.java
rename to src/main/java/instrument/tap/stream/StreamTap.java
diff --git a/src/instrument/tap/stream/SymbolEventTap.java b/src/main/java/instrument/tap/stream/SymbolEventTap.java
similarity index 100%
rename from src/instrument/tap/stream/SymbolEventTap.java
rename to src/main/java/instrument/tap/stream/SymbolEventTap.java
diff --git a/src/instrument/tap/stream/SymbolEventTapViewPanel.java b/src/main/java/instrument/tap/stream/SymbolEventTapViewPanel.java
similarity index 100%
rename from src/instrument/tap/stream/SymbolEventTapViewPanel.java
rename to src/main/java/instrument/tap/stream/SymbolEventTapViewPanel.java
diff --git a/src/map/DefaultIcon.java b/src/main/java/map/DefaultIcon.java
similarity index 100%
rename from src/map/DefaultIcon.java
rename to src/main/java/map/DefaultIcon.java
diff --git a/src/map/MapIcon.java b/src/main/java/map/MapIcon.java
similarity index 100%
rename from src/map/MapIcon.java
rename to src/main/java/map/MapIcon.java
diff --git a/src/map/MapMouseListener.java b/src/main/java/map/MapMouseListener.java
similarity index 100%
rename from src/map/MapMouseListener.java
rename to src/main/java/map/MapMouseListener.java
diff --git a/src/map/MapPanel.java b/src/main/java/map/MapPanel.java
similarity index 100%
rename from src/map/MapPanel.java
rename to src/main/java/map/MapPanel.java
diff --git a/src/map/MapService.java b/src/main/java/map/MapService.java
similarity index 100%
rename from src/map/MapService.java
rename to src/main/java/map/MapService.java
diff --git a/src/map/Plottable.java b/src/main/java/map/Plottable.java
similarity index 100%
rename from src/map/Plottable.java
rename to src/main/java/map/Plottable.java
diff --git a/src/map/PlottableEntity.java b/src/main/java/map/PlottableEntity.java
similarity index 100%
rename from src/map/PlottableEntity.java
rename to src/main/java/map/PlottableEntity.java
diff --git a/src/map/PlottableEntityPainter.java b/src/main/java/map/PlottableEntityPainter.java
similarity index 96%
rename from src/map/PlottableEntityPainter.java
rename to src/main/java/map/PlottableEntityPainter.java
index 17f7d6df..8ea2a3ba 100644
--- a/src/map/PlottableEntityPainter.java
+++ b/src/main/java/map/PlottableEntityPainter.java
@@ -1,79 +1,79 @@
-
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package map;
-
-import icon.IconManager;
-import org.jdesktop.swingx.JXMapViewer;
-import org.jdesktop.swingx.painter.AbstractPainter;
-
-import java.awt.*;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-public class PlottableEntityPainter extends AbstractPainter
-{
- private PlottableEntityRenderer mRenderer;
- private Set mEntities = new HashSet();
-
- public PlottableEntityPainter(IconManager iconManager)
- {
- mRenderer = new PlottableEntityRenderer(iconManager);
- setAntialiasing(true);
- setCacheable(false);
- }
-
- public void addEntity(PlottableEntity entity)
- {
- mEntities.add(entity);
- }
-
- public void removeEntity(PlottableEntity entity)
- {
- mEntities.remove(entity);
- }
-
- public void clearEntities()
- {
- mEntities.clear();
- }
-
- private Set getEntities()
- {
- return Collections.unmodifiableSet(mEntities);
- }
-
- @Override
- protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
- {
- Rectangle viewportBounds = map.getViewportBounds();
-
- g.translate(-viewportBounds.getX(), -viewportBounds.getY());
-
- Set entities = getEntities();
-
- for(PlottableEntity entity : entities)
- {
- mRenderer.paintPlottableEntity(g, map, entity, true);
- }
-
- g.translate(viewportBounds.getX(), viewportBounds.getY());
- }
-}
+
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package map;
+
+import icon.IconManager;
+import org.jdesktop.swingx.JXMapViewer;
+import org.jdesktop.swingx.painter.AbstractPainter;
+
+import java.awt.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+public class PlottableEntityPainter extends AbstractPainter
+{
+ private PlottableEntityRenderer mRenderer;
+ private Set mEntities = new HashSet();
+
+ public PlottableEntityPainter(IconManager iconManager)
+ {
+ mRenderer = new PlottableEntityRenderer(iconManager);
+ setAntialiasing(true);
+ setCacheable(false);
+ }
+
+ public void addEntity(PlottableEntity entity)
+ {
+ mEntities.add(entity);
+ }
+
+ public void removeEntity(PlottableEntity entity)
+ {
+ mEntities.remove(entity);
+ }
+
+ public void clearEntities()
+ {
+ mEntities.clear();
+ }
+
+ private Set getEntities()
+ {
+ return Collections.unmodifiableSet(mEntities);
+ }
+
+ @Override
+ protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
+ {
+ Rectangle viewportBounds = map.getViewportBounds();
+
+ g.translate(-viewportBounds.getX(), -viewportBounds.getY());
+
+ Set entities = getEntities();
+
+ for(PlottableEntity entity : entities)
+ {
+ mRenderer.paintPlottableEntity(g, map, entity, true);
+ }
+
+ g.translate(viewportBounds.getX(), viewportBounds.getY());
+ }
+}
diff --git a/src/map/PlottableEntityRenderer.java b/src/main/java/map/PlottableEntityRenderer.java
similarity index 100%
rename from src/map/PlottableEntityRenderer.java
rename to src/main/java/map/PlottableEntityRenderer.java
diff --git a/src/map/PlottableUpdateListener.java b/src/main/java/map/PlottableUpdateListener.java
similarity index 100%
rename from src/map/PlottableUpdateListener.java
rename to src/main/java/map/PlottableUpdateListener.java
diff --git a/src/map/SelectionAdapter.java b/src/main/java/map/SelectionAdapter.java
similarity index 100%
rename from src/map/SelectionAdapter.java
rename to src/main/java/map/SelectionAdapter.java
diff --git a/src/map/SelectionPainter.java b/src/main/java/map/SelectionPainter.java
similarity index 100%
rename from src/map/SelectionPainter.java
rename to src/main/java/map/SelectionPainter.java
diff --git a/src/message/IMessageListener.java b/src/main/java/message/IMessageListener.java
similarity index 100%
rename from src/message/IMessageListener.java
rename to src/main/java/message/IMessageListener.java
diff --git a/src/message/IMessageProvider.java b/src/main/java/message/IMessageProvider.java
similarity index 100%
rename from src/message/IMessageProvider.java
rename to src/main/java/message/IMessageProvider.java
diff --git a/src/message/Message.java b/src/main/java/message/Message.java
similarity index 100%
rename from src/message/Message.java
rename to src/main/java/message/Message.java
diff --git a/src/message/MessageDirection.java b/src/main/java/message/MessageDirection.java
similarity index 100%
rename from src/message/MessageDirection.java
rename to src/main/java/message/MessageDirection.java
diff --git a/src/message/MessageType.java b/src/main/java/message/MessageType.java
similarity index 100%
rename from src/message/MessageType.java
rename to src/main/java/message/MessageType.java
diff --git a/src/module/Module.java b/src/main/java/module/Module.java
similarity index 100%
rename from src/module/Module.java
rename to src/main/java/module/Module.java
diff --git a/src/module/ProcessingChain.java b/src/main/java/module/ProcessingChain.java
similarity index 100%
rename from src/module/ProcessingChain.java
rename to src/main/java/module/ProcessingChain.java
diff --git a/src/module/decode/AuxDecodeConfigurationEditor.java b/src/main/java/module/decode/AuxDecodeConfigurationEditor.java
similarity index 100%
rename from src/module/decode/AuxDecodeConfigurationEditor.java
rename to src/main/java/module/decode/AuxDecodeConfigurationEditor.java
diff --git a/src/module/decode/DecodeConfigurationEditor.java b/src/main/java/module/decode/DecodeConfigurationEditor.java
similarity index 100%
rename from src/module/decode/DecodeConfigurationEditor.java
rename to src/main/java/module/decode/DecodeConfigurationEditor.java
diff --git a/src/module/decode/Decoder.java b/src/main/java/module/decode/Decoder.java
similarity index 100%
rename from src/module/decode/Decoder.java
rename to src/main/java/module/decode/Decoder.java
diff --git a/src/module/decode/DecoderFactory.java b/src/main/java/module/decode/DecoderFactory.java
similarity index 100%
rename from src/module/decode/DecoderFactory.java
rename to src/main/java/module/decode/DecoderFactory.java
diff --git a/src/module/decode/DecoderType.java b/src/main/java/module/decode/DecoderType.java
similarity index 100%
rename from src/module/decode/DecoderType.java
rename to src/main/java/module/decode/DecoderType.java
diff --git a/src/module/decode/PrimaryDecoder.java b/src/main/java/module/decode/PrimaryDecoder.java
similarity index 100%
rename from src/module/decode/PrimaryDecoder.java
rename to src/main/java/module/decode/PrimaryDecoder.java
diff --git a/src/module/decode/am/AMDecoder.java b/src/main/java/module/decode/am/AMDecoder.java
similarity index 96%
rename from src/module/decode/am/AMDecoder.java
rename to src/main/java/module/decode/am/AMDecoder.java
index c5b371e3..d518a0c7 100644
--- a/src/module/decode/am/AMDecoder.java
+++ b/src/main/java/module/decode/am/AMDecoder.java
@@ -1,54 +1,54 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014,2015 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-
-package module.decode.am;
-
-import java.util.concurrent.ScheduledExecutorService;
-
-import module.decode.DecoderType;
-import module.decode.PrimaryDecoder;
-import module.decode.config.DecodeConfiguration;
-
-public class AMDecoder extends PrimaryDecoder
-{
- public AMDecoder( DecodeConfiguration config )
- {
- super( config );
- }
-
- @Override
- public DecoderType getDecoderType()
- {
- return DecoderType.AM;
- }
-
- @Override
- public void reset()
- {
- }
-
- @Override
- public void start( ScheduledExecutorService executor )
- {
- }
-
- @Override
- public void stop()
- {
- }
-}
+/*******************************************************************************
+ * SDR Trunk
+ * Copyright (C) 2014,2015 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ ******************************************************************************/
+
+package module.decode.am;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+import module.decode.DecoderType;
+import module.decode.PrimaryDecoder;
+import module.decode.config.DecodeConfiguration;
+
+public class AMDecoder extends PrimaryDecoder
+{
+ public AMDecoder( DecodeConfiguration config )
+ {
+ super( config );
+ }
+
+ @Override
+ public DecoderType getDecoderType()
+ {
+ return DecoderType.AM;
+ }
+
+ @Override
+ public void reset()
+ {
+ }
+
+ @Override
+ public void start( ScheduledExecutorService executor )
+ {
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+}
diff --git a/src/module/decode/am/AMDecoderEditor.java b/src/main/java/module/decode/am/AMDecoderEditor.java
similarity index 100%
rename from src/module/decode/am/AMDecoderEditor.java
rename to src/main/java/module/decode/am/AMDecoderEditor.java
diff --git a/src/module/decode/am/DecodeConfigAM.java b/src/main/java/module/decode/am/DecodeConfigAM.java
similarity index 100%
rename from src/module/decode/am/DecodeConfigAM.java
rename to src/main/java/module/decode/am/DecodeConfigAM.java
diff --git a/src/module/decode/config/AuxDecodeConfiguration.java b/src/main/java/module/decode/config/AuxDecodeConfiguration.java
similarity index 100%
rename from src/module/decode/config/AuxDecodeConfiguration.java
rename to src/main/java/module/decode/config/AuxDecodeConfiguration.java
diff --git a/src/module/decode/config/DecodeConfiguration.java b/src/main/java/module/decode/config/DecodeConfiguration.java
similarity index 100%
rename from src/module/decode/config/DecodeConfiguration.java
rename to src/main/java/module/decode/config/DecodeConfiguration.java
diff --git a/src/module/decode/event/ActivitySummaryFrame.java b/src/main/java/module/decode/event/ActivitySummaryFrame.java
similarity index 100%
rename from src/module/decode/event/ActivitySummaryFrame.java
rename to src/main/java/module/decode/event/ActivitySummaryFrame.java
diff --git a/src/module/decode/event/ActivitySummaryProvider.java b/src/main/java/module/decode/event/ActivitySummaryProvider.java
similarity index 100%
rename from src/module/decode/event/ActivitySummaryProvider.java
rename to src/main/java/module/decode/event/ActivitySummaryProvider.java
diff --git a/src/module/decode/event/CallEvent.java b/src/main/java/module/decode/event/CallEvent.java
similarity index 100%
rename from src/module/decode/event/CallEvent.java
rename to src/main/java/module/decode/event/CallEvent.java
diff --git a/src/module/decode/event/CallEventAliasCellRenderer.java b/src/main/java/module/decode/event/CallEventAliasCellRenderer.java
similarity index 100%
rename from src/module/decode/event/CallEventAliasCellRenderer.java
rename to src/main/java/module/decode/event/CallEventAliasCellRenderer.java
diff --git a/src/module/decode/event/CallEventModel.java b/src/main/java/module/decode/event/CallEventModel.java
similarity index 100%
rename from src/module/decode/event/CallEventModel.java
rename to src/main/java/module/decode/event/CallEventModel.java
diff --git a/src/module/decode/event/CallEventPanel.java b/src/main/java/module/decode/event/CallEventPanel.java
similarity index 100%
rename from src/module/decode/event/CallEventPanel.java
rename to src/main/java/module/decode/event/CallEventPanel.java
diff --git a/src/module/decode/event/ICallEventListener.java b/src/main/java/module/decode/event/ICallEventListener.java
similarity index 100%
rename from src/module/decode/event/ICallEventListener.java
rename to src/main/java/module/decode/event/ICallEventListener.java
diff --git a/src/module/decode/event/ICallEventProvider.java b/src/main/java/module/decode/event/ICallEventProvider.java
similarity index 100%
rename from src/module/decode/event/ICallEventProvider.java
rename to src/main/java/module/decode/event/ICallEventProvider.java
diff --git a/src/module/decode/event/MessageActivityModel.java b/src/main/java/module/decode/event/MessageActivityModel.java
similarity index 100%
rename from src/module/decode/event/MessageActivityModel.java
rename to src/main/java/module/decode/event/MessageActivityModel.java
diff --git a/src/module/decode/event/MessageActivityPanel.java b/src/main/java/module/decode/event/MessageActivityPanel.java
similarity index 100%
rename from src/module/decode/event/MessageActivityPanel.java
rename to src/main/java/module/decode/event/MessageActivityPanel.java
diff --git a/src/module/decode/fleetsync1/Fleetsync1Message.java b/src/main/java/module/decode/fleetsync1/Fleetsync1Message.java
similarity index 100%
rename from src/module/decode/fleetsync1/Fleetsync1Message.java
rename to src/main/java/module/decode/fleetsync1/Fleetsync1Message.java
diff --git a/src/module/decode/fleetsync1/Fleetsync1MessageProcessor.java b/src/main/java/module/decode/fleetsync1/Fleetsync1MessageProcessor.java
similarity index 100%
rename from src/module/decode/fleetsync1/Fleetsync1MessageProcessor.java
rename to src/main/java/module/decode/fleetsync1/Fleetsync1MessageProcessor.java
diff --git a/src/module/decode/fleetsync2/Fleetsync2Decoder.java b/src/main/java/module/decode/fleetsync2/Fleetsync2Decoder.java
similarity index 100%
rename from src/module/decode/fleetsync2/Fleetsync2Decoder.java
rename to src/main/java/module/decode/fleetsync2/Fleetsync2Decoder.java
diff --git a/src/module/decode/fleetsync2/Fleetsync2DecoderState.java b/src/main/java/module/decode/fleetsync2/Fleetsync2DecoderState.java
similarity index 100%
rename from src/module/decode/fleetsync2/Fleetsync2DecoderState.java
rename to src/main/java/module/decode/fleetsync2/Fleetsync2DecoderState.java
diff --git a/src/module/decode/fleetsync2/Fleetsync2MessageProcessor.java b/src/main/java/module/decode/fleetsync2/Fleetsync2MessageProcessor.java
similarity index 100%
rename from src/module/decode/fleetsync2/Fleetsync2MessageProcessor.java
rename to src/main/java/module/decode/fleetsync2/Fleetsync2MessageProcessor.java
diff --git a/src/module/decode/fleetsync2/FleetsyncCallEvent.java b/src/main/java/module/decode/fleetsync2/FleetsyncCallEvent.java
similarity index 100%
rename from src/module/decode/fleetsync2/FleetsyncCallEvent.java
rename to src/main/java/module/decode/fleetsync2/FleetsyncCallEvent.java
diff --git a/src/module/decode/fleetsync2/FleetsyncMessage.java b/src/main/java/module/decode/fleetsync2/FleetsyncMessage.java
similarity index 100%
rename from src/module/decode/fleetsync2/FleetsyncMessage.java
rename to src/main/java/module/decode/fleetsync2/FleetsyncMessage.java
diff --git a/src/module/decode/fleetsync2/FleetsyncMessageFilter.java b/src/main/java/module/decode/fleetsync2/FleetsyncMessageFilter.java
similarity index 100%
rename from src/module/decode/fleetsync2/FleetsyncMessageFilter.java
rename to src/main/java/module/decode/fleetsync2/FleetsyncMessageFilter.java
diff --git a/src/module/decode/fleetsync2/FleetsyncMessageType.java b/src/main/java/module/decode/fleetsync2/FleetsyncMessageType.java
similarity index 100%
rename from src/module/decode/fleetsync2/FleetsyncMessageType.java
rename to src/main/java/module/decode/fleetsync2/FleetsyncMessageType.java
diff --git a/src/module/decode/lj1200/LJ1200CallEvent.java b/src/main/java/module/decode/lj1200/LJ1200CallEvent.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200CallEvent.java
rename to src/main/java/module/decode/lj1200/LJ1200CallEvent.java
diff --git a/src/module/decode/lj1200/LJ1200Decoder.java b/src/main/java/module/decode/lj1200/LJ1200Decoder.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200Decoder.java
rename to src/main/java/module/decode/lj1200/LJ1200Decoder.java
diff --git a/src/module/decode/lj1200/LJ1200DecoderState.java b/src/main/java/module/decode/lj1200/LJ1200DecoderState.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200DecoderState.java
rename to src/main/java/module/decode/lj1200/LJ1200DecoderState.java
diff --git a/src/module/decode/lj1200/LJ1200Message.java b/src/main/java/module/decode/lj1200/LJ1200Message.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200Message.java
rename to src/main/java/module/decode/lj1200/LJ1200Message.java
diff --git a/src/module/decode/lj1200/LJ1200MessageFilter.java b/src/main/java/module/decode/lj1200/LJ1200MessageFilter.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200MessageFilter.java
rename to src/main/java/module/decode/lj1200/LJ1200MessageFilter.java
diff --git a/src/module/decode/lj1200/LJ1200MessageProcessor.java b/src/main/java/module/decode/lj1200/LJ1200MessageProcessor.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200MessageProcessor.java
rename to src/main/java/module/decode/lj1200/LJ1200MessageProcessor.java
diff --git a/src/module/decode/lj1200/LJ1200TransponderMessage.java b/src/main/java/module/decode/lj1200/LJ1200TransponderMessage.java
similarity index 100%
rename from src/module/decode/lj1200/LJ1200TransponderMessage.java
rename to src/main/java/module/decode/lj1200/LJ1200TransponderMessage.java
diff --git a/src/module/decode/ltrnet/DecodeConfigLTRNet.java b/src/main/java/module/decode/ltrnet/DecodeConfigLTRNet.java
similarity index 100%
rename from src/module/decode/ltrnet/DecodeConfigLTRNet.java
rename to src/main/java/module/decode/ltrnet/DecodeConfigLTRNet.java
diff --git a/src/module/decode/ltrnet/LTRCallEvent.java b/src/main/java/module/decode/ltrnet/LTRCallEvent.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRCallEvent.java
rename to src/main/java/module/decode/ltrnet/LTRCallEvent.java
diff --git a/src/module/decode/ltrnet/LTRNetDecoder.java b/src/main/java/module/decode/ltrnet/LTRNetDecoder.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetDecoder.java
rename to src/main/java/module/decode/ltrnet/LTRNetDecoder.java
diff --git a/src/module/decode/ltrnet/LTRNetDecoderEditor.java b/src/main/java/module/decode/ltrnet/LTRNetDecoderEditor.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetDecoderEditor.java
rename to src/main/java/module/decode/ltrnet/LTRNetDecoderEditor.java
diff --git a/src/module/decode/ltrnet/LTRNetDecoderState.java b/src/main/java/module/decode/ltrnet/LTRNetDecoderState.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetDecoderState.java
rename to src/main/java/module/decode/ltrnet/LTRNetDecoderState.java
diff --git a/src/module/decode/ltrnet/LTRNetISWMessage.java b/src/main/java/module/decode/ltrnet/LTRNetISWMessage.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetISWMessage.java
rename to src/main/java/module/decode/ltrnet/LTRNetISWMessage.java
diff --git a/src/module/decode/ltrnet/LTRNetMessage.java b/src/main/java/module/decode/ltrnet/LTRNetMessage.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetMessage.java
rename to src/main/java/module/decode/ltrnet/LTRNetMessage.java
diff --git a/src/module/decode/ltrnet/LTRNetMessageFilter.java b/src/main/java/module/decode/ltrnet/LTRNetMessageFilter.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetMessageFilter.java
rename to src/main/java/module/decode/ltrnet/LTRNetMessageFilter.java
diff --git a/src/module/decode/ltrnet/LTRNetMessageProcessor.java b/src/main/java/module/decode/ltrnet/LTRNetMessageProcessor.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetMessageProcessor.java
rename to src/main/java/module/decode/ltrnet/LTRNetMessageProcessor.java
diff --git a/src/module/decode/ltrnet/LTRNetOSWMessage.java b/src/main/java/module/decode/ltrnet/LTRNetOSWMessage.java
similarity index 100%
rename from src/module/decode/ltrnet/LTRNetOSWMessage.java
rename to src/main/java/module/decode/ltrnet/LTRNetOSWMessage.java
diff --git a/src/module/decode/ltrstandard/DecodeConfigLTRStandard.java b/src/main/java/module/decode/ltrstandard/DecodeConfigLTRStandard.java
similarity index 100%
rename from src/module/decode/ltrstandard/DecodeConfigLTRStandard.java
rename to src/main/java/module/decode/ltrstandard/DecodeConfigLTRStandard.java
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoder.java b/src/main/java/module/decode/ltrstandard/LTRStandardDecoder.java
similarity index 100%
rename from src/module/decode/ltrstandard/LTRStandardDecoder.java
rename to src/main/java/module/decode/ltrstandard/LTRStandardDecoder.java
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoderEditor.java b/src/main/java/module/decode/ltrstandard/LTRStandardDecoderEditor.java
similarity index 100%
rename from src/module/decode/ltrstandard/LTRStandardDecoderEditor.java
rename to src/main/java/module/decode/ltrstandard/LTRStandardDecoderEditor.java
diff --git a/src/module/decode/ltrstandard/LTRStandardDecoderState.java b/src/main/java/module/decode/ltrstandard/LTRStandardDecoderState.java
similarity index 100%
rename from src/module/decode/ltrstandard/LTRStandardDecoderState.java
rename to src/main/java/module/decode/ltrstandard/LTRStandardDecoderState.java
diff --git a/src/module/decode/ltrstandard/LTRStandardMessageFilter.java b/src/main/java/module/decode/ltrstandard/LTRStandardMessageFilter.java
similarity index 100%
rename from src/module/decode/ltrstandard/LTRStandardMessageFilter.java
rename to src/main/java/module/decode/ltrstandard/LTRStandardMessageFilter.java
diff --git a/src/module/decode/ltrstandard/LTRStandardMessageProcessor.java b/src/main/java/module/decode/ltrstandard/LTRStandardMessageProcessor.java
similarity index 100%
rename from src/module/decode/ltrstandard/LTRStandardMessageProcessor.java
rename to src/main/java/module/decode/ltrstandard/LTRStandardMessageProcessor.java
diff --git a/src/module/decode/ltrstandard/message/CallEndMessage.java b/src/main/java/module/decode/ltrstandard/message/CallEndMessage.java
similarity index 100%
rename from src/module/decode/ltrstandard/message/CallEndMessage.java
rename to src/main/java/module/decode/ltrstandard/message/CallEndMessage.java
diff --git a/src/module/decode/ltrstandard/message/CallMessage.java b/src/main/java/module/decode/ltrstandard/message/CallMessage.java
similarity index 100%
rename from src/module/decode/ltrstandard/message/CallMessage.java
rename to src/main/java/module/decode/ltrstandard/message/CallMessage.java
diff --git a/src/module/decode/ltrstandard/message/IdleMessage.java b/src/main/java/module/decode/ltrstandard/message/IdleMessage.java
similarity index 100%
rename from src/module/decode/ltrstandard/message/IdleMessage.java
rename to src/main/java/module/decode/ltrstandard/message/IdleMessage.java
diff --git a/src/module/decode/ltrstandard/message/LTRStandardMessage.java b/src/main/java/module/decode/ltrstandard/message/LTRStandardMessage.java
similarity index 100%
rename from src/module/decode/ltrstandard/message/LTRStandardMessage.java
rename to src/main/java/module/decode/ltrstandard/message/LTRStandardMessage.java
diff --git a/src/module/decode/ltrstandard/message/UnknownMessage.java b/src/main/java/module/decode/ltrstandard/message/UnknownMessage.java
similarity index 100%
rename from src/module/decode/ltrstandard/message/UnknownMessage.java
rename to src/main/java/module/decode/ltrstandard/message/UnknownMessage.java
diff --git a/src/module/decode/mdc1200/MDCCallEvent.java b/src/main/java/module/decode/mdc1200/MDCCallEvent.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCCallEvent.java
rename to src/main/java/module/decode/mdc1200/MDCCallEvent.java
diff --git a/src/module/decode/mdc1200/MDCDecoder.java b/src/main/java/module/decode/mdc1200/MDCDecoder.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCDecoder.java
rename to src/main/java/module/decode/mdc1200/MDCDecoder.java
diff --git a/src/module/decode/mdc1200/MDCDecoderState.java b/src/main/java/module/decode/mdc1200/MDCDecoderState.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCDecoderState.java
rename to src/main/java/module/decode/mdc1200/MDCDecoderState.java
diff --git a/src/module/decode/mdc1200/MDCMessage.java b/src/main/java/module/decode/mdc1200/MDCMessage.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCMessage.java
rename to src/main/java/module/decode/mdc1200/MDCMessage.java
diff --git a/src/module/decode/mdc1200/MDCMessageFilter.java b/src/main/java/module/decode/mdc1200/MDCMessageFilter.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCMessageFilter.java
rename to src/main/java/module/decode/mdc1200/MDCMessageFilter.java
diff --git a/src/module/decode/mdc1200/MDCMessageProcessor.java b/src/main/java/module/decode/mdc1200/MDCMessageProcessor.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCMessageProcessor.java
rename to src/main/java/module/decode/mdc1200/MDCMessageProcessor.java
diff --git a/src/module/decode/mdc1200/MDCMessageType.java b/src/main/java/module/decode/mdc1200/MDCMessageType.java
similarity index 100%
rename from src/module/decode/mdc1200/MDCMessageType.java
rename to src/main/java/module/decode/mdc1200/MDCMessageType.java
diff --git a/src/module/decode/mpt1327/DecodeConfigMPT1327.java b/src/main/java/module/decode/mpt1327/DecodeConfigMPT1327.java
similarity index 100%
rename from src/module/decode/mpt1327/DecodeConfigMPT1327.java
rename to src/main/java/module/decode/mpt1327/DecodeConfigMPT1327.java
diff --git a/src/module/decode/mpt1327/MPT1327CallEvent.java b/src/main/java/module/decode/mpt1327/MPT1327CallEvent.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327CallEvent.java
rename to src/main/java/module/decode/mpt1327/MPT1327CallEvent.java
diff --git a/src/module/decode/mpt1327/MPT1327Decoder.java b/src/main/java/module/decode/mpt1327/MPT1327Decoder.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327Decoder.java
rename to src/main/java/module/decode/mpt1327/MPT1327Decoder.java
diff --git a/src/module/decode/mpt1327/MPT1327DecoderEditor.java b/src/main/java/module/decode/mpt1327/MPT1327DecoderEditor.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327DecoderEditor.java
rename to src/main/java/module/decode/mpt1327/MPT1327DecoderEditor.java
diff --git a/src/module/decode/mpt1327/MPT1327DecoderState.java b/src/main/java/module/decode/mpt1327/MPT1327DecoderState.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327DecoderState.java
rename to src/main/java/module/decode/mpt1327/MPT1327DecoderState.java
diff --git a/src/module/decode/mpt1327/MPT1327Message.java b/src/main/java/module/decode/mpt1327/MPT1327Message.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327Message.java
rename to src/main/java/module/decode/mpt1327/MPT1327Message.java
diff --git a/src/module/decode/mpt1327/MPT1327MessageFilter.java b/src/main/java/module/decode/mpt1327/MPT1327MessageFilter.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327MessageFilter.java
rename to src/main/java/module/decode/mpt1327/MPT1327MessageFilter.java
diff --git a/src/module/decode/mpt1327/MPT1327MessageProcessor.java b/src/main/java/module/decode/mpt1327/MPT1327MessageProcessor.java
similarity index 100%
rename from src/module/decode/mpt1327/MPT1327MessageProcessor.java
rename to src/main/java/module/decode/mpt1327/MPT1327MessageProcessor.java
diff --git a/src/module/decode/nbfm/DecodeConfigNBFM.java b/src/main/java/module/decode/nbfm/DecodeConfigNBFM.java
similarity index 100%
rename from src/module/decode/nbfm/DecodeConfigNBFM.java
rename to src/main/java/module/decode/nbfm/DecodeConfigNBFM.java
diff --git a/src/module/decode/nbfm/NBFMDecoder.java b/src/main/java/module/decode/nbfm/NBFMDecoder.java
similarity index 100%
rename from src/module/decode/nbfm/NBFMDecoder.java
rename to src/main/java/module/decode/nbfm/NBFMDecoder.java
diff --git a/src/module/decode/nbfm/NBFMDecoderEditor.java b/src/main/java/module/decode/nbfm/NBFMDecoderEditor.java
similarity index 100%
rename from src/module/decode/nbfm/NBFMDecoderEditor.java
rename to src/main/java/module/decode/nbfm/NBFMDecoderEditor.java
diff --git a/src/module/decode/p25/C4FMFrameListener.java b/src/main/java/module/decode/p25/C4FMFrameListener.java
similarity index 100%
rename from src/module/decode/p25/C4FMFrameListener.java
rename to src/main/java/module/decode/p25/C4FMFrameListener.java
diff --git a/src/module/decode/p25/C4FMSlicer.java b/src/main/java/module/decode/p25/C4FMSlicer.java
similarity index 100%
rename from src/module/decode/p25/C4FMSlicer.java
rename to src/main/java/module/decode/p25/C4FMSlicer.java
diff --git a/src/module/decode/p25/C4FMSymbolFilter.java b/src/main/java/module/decode/p25/C4FMSymbolFilter.java
similarity index 100%
rename from src/module/decode/p25/C4FMSymbolFilter.java
rename to src/main/java/module/decode/p25/C4FMSymbolFilter.java
diff --git a/src/module/decode/p25/DecodeConfigP25Phase1.java b/src/main/java/module/decode/p25/DecodeConfigP25Phase1.java
similarity index 100%
rename from src/module/decode/p25/DecodeConfigP25Phase1.java
rename to src/main/java/module/decode/p25/DecodeConfigP25Phase1.java
diff --git a/src/module/decode/p25/P25CallEvent.java b/src/main/java/module/decode/p25/P25CallEvent.java
similarity index 100%
rename from src/module/decode/p25/P25CallEvent.java
rename to src/main/java/module/decode/p25/P25CallEvent.java
diff --git a/src/module/decode/p25/P25Decoder.java b/src/main/java/module/decode/p25/P25Decoder.java
similarity index 100%
rename from src/module/decode/p25/P25Decoder.java
rename to src/main/java/module/decode/p25/P25Decoder.java
diff --git a/src/module/decode/p25/P25DecoderEditor.java b/src/main/java/module/decode/p25/P25DecoderEditor.java
similarity index 100%
rename from src/module/decode/p25/P25DecoderEditor.java
rename to src/main/java/module/decode/p25/P25DecoderEditor.java
diff --git a/src/module/decode/p25/P25DecoderState.java b/src/main/java/module/decode/p25/P25DecoderState.java
similarity index 100%
rename from src/module/decode/p25/P25DecoderState.java
rename to src/main/java/module/decode/p25/P25DecoderState.java
diff --git a/src/module/decode/p25/P25Interleave.java b/src/main/java/module/decode/p25/P25Interleave.java
similarity index 100%
rename from src/module/decode/p25/P25Interleave.java
rename to src/main/java/module/decode/p25/P25Interleave.java
diff --git a/src/module/decode/p25/P25MessageFramer.java b/src/main/java/module/decode/p25/P25MessageFramer.java
similarity index 100%
rename from src/module/decode/p25/P25MessageFramer.java
rename to src/main/java/module/decode/p25/P25MessageFramer.java
diff --git a/src/module/decode/p25/P25MessageProcessor.java b/src/main/java/module/decode/p25/P25MessageProcessor.java
similarity index 100%
rename from src/module/decode/p25/P25MessageProcessor.java
rename to src/main/java/module/decode/p25/P25MessageProcessor.java
diff --git a/src/module/decode/p25/P25_C4FMDecoder.java b/src/main/java/module/decode/p25/P25_C4FMDecoder.java
similarity index 100%
rename from src/module/decode/p25/P25_C4FMDecoder.java
rename to src/main/java/module/decode/p25/P25_C4FMDecoder.java
diff --git a/src/module/decode/p25/P25_LSMDecoder.java b/src/main/java/module/decode/p25/P25_LSMDecoder.java
similarity index 100%
rename from src/module/decode/p25/P25_LSMDecoder.java
rename to src/main/java/module/decode/p25/P25_LSMDecoder.java
diff --git a/src/module/decode/p25/PatchGroup.java b/src/main/java/module/decode/p25/PatchGroup.java
similarity index 100%
rename from src/module/decode/p25/PatchGroup.java
rename to src/main/java/module/decode/p25/PatchGroup.java
diff --git a/src/module/decode/p25/PatchGroupManager.java b/src/main/java/module/decode/p25/PatchGroupManager.java
similarity index 100%
rename from src/module/decode/p25/PatchGroupManager.java
rename to src/main/java/module/decode/p25/PatchGroupManager.java
diff --git a/src/module/decode/p25/Trellis_1_2_Rate.java b/src/main/java/module/decode/p25/Trellis_1_2_Rate.java
similarity index 100%
rename from src/module/decode/p25/Trellis_1_2_Rate.java
rename to src/main/java/module/decode/p25/Trellis_1_2_Rate.java
diff --git a/src/module/decode/p25/Trellis_3_4_Rate.java b/src/main/java/module/decode/p25/Trellis_3_4_Rate.java
similarity index 100%
rename from src/module/decode/p25/Trellis_3_4_Rate.java
rename to src/main/java/module/decode/p25/Trellis_3_4_Rate.java
diff --git a/src/module/decode/p25/audio/P25AudioModule.java b/src/main/java/module/decode/p25/audio/P25AudioModule.java
similarity index 100%
rename from src/module/decode/p25/audio/P25AudioModule.java
rename to src/main/java/module/decode/p25/audio/P25AudioModule.java
diff --git a/src/module/decode/p25/message/IAdjacentSite.java b/src/main/java/module/decode/p25/message/IAdjacentSite.java
similarity index 100%
rename from src/module/decode/p25/message/IAdjacentSite.java
rename to src/main/java/module/decode/p25/message/IAdjacentSite.java
diff --git a/src/module/decode/p25/message/IBandIdentifier.java b/src/main/java/module/decode/p25/message/IBandIdentifier.java
similarity index 100%
rename from src/module/decode/p25/message/IBandIdentifier.java
rename to src/main/java/module/decode/p25/message/IBandIdentifier.java
diff --git a/src/module/decode/p25/message/IdentifierReceiver.java b/src/main/java/module/decode/p25/message/IdentifierReceiver.java
similarity index 100%
rename from src/module/decode/p25/message/IdentifierReceiver.java
rename to src/main/java/module/decode/p25/message/IdentifierReceiver.java
diff --git a/src/module/decode/p25/message/P25Message.java b/src/main/java/module/decode/p25/message/P25Message.java
similarity index 100%
rename from src/module/decode/p25/message/P25Message.java
rename to src/main/java/module/decode/p25/message/P25Message.java
diff --git a/src/module/decode/p25/message/filter/HDUMessageFilter.java b/src/main/java/module/decode/p25/message/filter/HDUMessageFilter.java
similarity index 100%
rename from src/module/decode/p25/message/filter/HDUMessageFilter.java
rename to src/main/java/module/decode/p25/message/filter/HDUMessageFilter.java
diff --git a/src/module/decode/p25/message/filter/LDUMessageFilter.java b/src/main/java/module/decode/p25/message/filter/LDUMessageFilter.java
similarity index 100%
rename from src/module/decode/p25/message/filter/LDUMessageFilter.java
rename to src/main/java/module/decode/p25/message/filter/LDUMessageFilter.java
diff --git a/src/module/decode/p25/message/filter/P25MessageFilterSet.java b/src/main/java/module/decode/p25/message/filter/P25MessageFilterSet.java
similarity index 100%
rename from src/module/decode/p25/message/filter/P25MessageFilterSet.java
rename to src/main/java/module/decode/p25/message/filter/P25MessageFilterSet.java
diff --git a/src/module/decode/p25/message/filter/PDUMessageFilter.java b/src/main/java/module/decode/p25/message/filter/PDUMessageFilter.java
similarity index 100%
rename from src/module/decode/p25/message/filter/PDUMessageFilter.java
rename to src/main/java/module/decode/p25/message/filter/PDUMessageFilter.java
diff --git a/src/module/decode/p25/message/filter/TDULCMessageFilter.java b/src/main/java/module/decode/p25/message/filter/TDULCMessageFilter.java
similarity index 100%
rename from src/module/decode/p25/message/filter/TDULCMessageFilter.java
rename to src/main/java/module/decode/p25/message/filter/TDULCMessageFilter.java
diff --git a/src/module/decode/p25/message/filter/TDUMessageFilter.java b/src/main/java/module/decode/p25/message/filter/TDUMessageFilter.java
similarity index 100%
rename from src/module/decode/p25/message/filter/TDUMessageFilter.java
rename to src/main/java/module/decode/p25/message/filter/TDUMessageFilter.java
diff --git a/src/module/decode/p25/message/filter/TSBKMessageFilterSet.java b/src/main/java/module/decode/p25/message/filter/TSBKMessageFilterSet.java
similarity index 100%
rename from src/module/decode/p25/message/filter/TSBKMessageFilterSet.java
rename to src/main/java/module/decode/p25/message/filter/TSBKMessageFilterSet.java
diff --git a/src/module/decode/p25/message/hdu/HDUMessage.java b/src/main/java/module/decode/p25/message/hdu/HDUMessage.java
similarity index 100%
rename from src/module/decode/p25/message/hdu/HDUMessage.java
rename to src/main/java/module/decode/p25/message/hdu/HDUMessage.java
diff --git a/src/module/decode/p25/message/ldu/LDU1Message.java b/src/main/java/module/decode/p25/message/ldu/LDU1Message.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/LDU1Message.java
rename to src/main/java/module/decode/p25/message/ldu/LDU1Message.java
diff --git a/src/module/decode/p25/message/ldu/LDU2Message.java b/src/main/java/module/decode/p25/message/ldu/LDU2Message.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/LDU2Message.java
rename to src/main/java/module/decode/p25/message/ldu/LDU2Message.java
diff --git a/src/module/decode/p25/message/ldu/LDUMessage.java b/src/main/java/module/decode/p25/message/ldu/LDUMessage.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/LDUMessage.java
rename to src/main/java/module/decode/p25/message/ldu/LDUMessage.java
diff --git a/src/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/AdjacentSiteStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/CallAlert.java b/src/main/java/module/decode/p25/message/ldu/lc/CallAlert.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/CallAlert.java
rename to src/main/java/module/decode/p25/message/ldu/lc/CallAlert.java
diff --git a/src/module/decode/p25/message/ldu/lc/CallTermination.java b/src/main/java/module/decode/p25/message/ldu/lc/CallTermination.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/CallTermination.java
rename to src/main/java/module/decode/p25/message/ldu/lc/CallTermination.java
diff --git a/src/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdate.java b/src/main/java/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdate.java
rename to src/main/java/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdate.java
diff --git a/src/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdateExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdateExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/ChannelIdentifierUpdateExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/ExtendedFunctionCommand.java b/src/main/java/module/decode/p25/message/ldu/lc/ExtendedFunctionCommand.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/ExtendedFunctionCommand.java
rename to src/main/java/module/decode/p25/message/ldu/lc/ExtendedFunctionCommand.java
diff --git a/src/module/decode/p25/message/ldu/lc/GroupAffiliationQuery.java b/src/main/java/module/decode/p25/message/ldu/lc/GroupAffiliationQuery.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/GroupAffiliationQuery.java
rename to src/main/java/module/decode/p25/message/ldu/lc/GroupAffiliationQuery.java
diff --git a/src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdate.java b/src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdate.java
rename to src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdate.java
diff --git a/src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdateExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdateExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUpdateExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUser.java b/src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/GroupVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/ldu/lc/GroupVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/ldu/lc/LDULCMessageFactory.java b/src/main/java/module/decode/p25/message/ldu/lc/LDULCMessageFactory.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/LDULCMessageFactory.java
rename to src/main/java/module/decode/p25/message/ldu/lc/LDULCMessageFactory.java
diff --git a/src/module/decode/p25/message/ldu/lc/MessageUpdate.java b/src/main/java/module/decode/p25/message/ldu/lc/MessageUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/MessageUpdate.java
rename to src/main/java/module/decode/p25/message/ldu/lc/MessageUpdate.java
diff --git a/src/module/decode/p25/message/ldu/lc/NetworkStatusBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/NetworkStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/NetworkStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/NetworkStatusBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/NetworkStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/NetworkStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/NetworkStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/NetworkStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/ProtectionParameterBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/ProtectionParameterBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/ProtectionParameterBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/ProtectionParameterBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/RFSSStatusBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/RFSSStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/RFSSStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/RFSSStatusBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/RFSSStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/RFSSStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/RFSSStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/RFSSStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcastExplicit.java b/src/main/java/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/ldu/lc/SecondaryControlChannelBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/ldu/lc/StatusQuery.java b/src/main/java/module/decode/p25/message/ldu/lc/StatusQuery.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/StatusQuery.java
rename to src/main/java/module/decode/p25/message/ldu/lc/StatusQuery.java
diff --git a/src/module/decode/p25/message/ldu/lc/StatusUpdate.java b/src/main/java/module/decode/p25/message/ldu/lc/StatusUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/StatusUpdate.java
rename to src/main/java/module/decode/p25/message/ldu/lc/StatusUpdate.java
diff --git a/src/module/decode/p25/message/ldu/lc/SystemServiceBroadcast.java b/src/main/java/module/decode/p25/message/ldu/lc/SystemServiceBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/SystemServiceBroadcast.java
rename to src/main/java/module/decode/p25/message/ldu/lc/SystemServiceBroadcast.java
diff --git a/src/module/decode/p25/message/ldu/lc/TelephoneInterconnectAnswerRequest.java b/src/main/java/module/decode/p25/message/ldu/lc/TelephoneInterconnectAnswerRequest.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/TelephoneInterconnectAnswerRequest.java
rename to src/main/java/module/decode/p25/message/ldu/lc/TelephoneInterconnectAnswerRequest.java
diff --git a/src/module/decode/p25/message/ldu/lc/TelephoneInterconnectVoiceChannelUser.java b/src/main/java/module/decode/p25/message/ldu/lc/TelephoneInterconnectVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/TelephoneInterconnectVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/ldu/lc/TelephoneInterconnectVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/ldu/lc/UnitAuthenticationCommand.java b/src/main/java/module/decode/p25/message/ldu/lc/UnitAuthenticationCommand.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/UnitAuthenticationCommand.java
rename to src/main/java/module/decode/p25/message/ldu/lc/UnitAuthenticationCommand.java
diff --git a/src/module/decode/p25/message/ldu/lc/UnitRegistrationCommand.java b/src/main/java/module/decode/p25/message/ldu/lc/UnitRegistrationCommand.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/UnitRegistrationCommand.java
rename to src/main/java/module/decode/p25/message/ldu/lc/UnitRegistrationCommand.java
diff --git a/src/module/decode/p25/message/ldu/lc/UnitToUnitAnswerRequest.java b/src/main/java/module/decode/p25/message/ldu/lc/UnitToUnitAnswerRequest.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/UnitToUnitAnswerRequest.java
rename to src/main/java/module/decode/p25/message/ldu/lc/UnitToUnitAnswerRequest.java
diff --git a/src/module/decode/p25/message/ldu/lc/UnitToUnitVoiceChannelUser.java b/src/main/java/module/decode/p25/message/ldu/lc/UnitToUnitVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/UnitToUnitVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/ldu/lc/UnitToUnitVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/ldu/lc/motorola/MotorolaOpcode_0.java b/src/main/java/module/decode/p25/message/ldu/lc/motorola/MotorolaOpcode_0.java
similarity index 100%
rename from src/module/decode/p25/message/ldu/lc/motorola/MotorolaOpcode_0.java
rename to src/main/java/module/decode/p25/message/ldu/lc/motorola/MotorolaOpcode_0.java
diff --git a/src/module/decode/p25/message/pdu/PDUMessage.java b/src/main/java/module/decode/p25/message/pdu/PDUMessage.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/PDUMessage.java
rename to src/main/java/module/decode/p25/message/pdu/PDUMessage.java
diff --git a/src/module/decode/p25/message/pdu/PDUMessageFactory.java b/src/main/java/module/decode/p25/message/pdu/PDUMessageFactory.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/PDUMessageFactory.java
rename to src/main/java/module/decode/p25/message/pdu/PDUMessageFactory.java
diff --git a/src/module/decode/p25/message/pdu/UnitToUnitChannelGrantExtended.java b/src/main/java/module/decode/p25/message/pdu/UnitToUnitChannelGrantExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/UnitToUnitChannelGrantExtended.java
rename to src/main/java/module/decode/p25/message/pdu/UnitToUnitChannelGrantExtended.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessage.java b/src/main/java/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessage.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessage.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessage.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessageFactory.java b/src/main/java/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessageFactory.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessageFactory.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/PDUConfirmedMessageFactory.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/PDUTypeUnknown.java b/src/main/java/module/decode/p25/message/pdu/confirmed/PDUTypeUnknown.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/PDUTypeUnknown.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/PDUTypeUnknown.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/PacketData.java b/src/main/java/module/decode/p25/message/pdu/confirmed/PacketData.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/PacketData.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/PacketData.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextAccept.java b/src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextAccept.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextAccept.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextAccept.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextReject.java b/src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextReject.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextReject.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextReject.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextRequest.java b/src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextRequest.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextRequest.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPActivateTDSContextRequest.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/SNDCPDeactivateTDSContext.java b/src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPDeactivateTDSContext.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/SNDCPDeactivateTDSContext.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPDeactivateTDSContext.java
diff --git a/src/module/decode/p25/message/pdu/confirmed/SNDCPUserData.java b/src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPUserData.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/confirmed/SNDCPUserData.java
rename to src/main/java/module/decode/p25/message/pdu/confirmed/SNDCPUserData.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/AdjacentStatusBroadcastExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/AdjacentStatusBroadcastExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/AdjacentStatusBroadcastExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/AdjacentStatusBroadcastExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/CallAlertExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/CallAlertExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/CallAlertExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/CallAlertExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/GroupAffiliationQueryExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/GroupAffiliationQueryExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/GroupAffiliationQueryExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/GroupAffiliationQueryExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/GroupAffiliationResponseExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/GroupAffiliationResponseExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/GroupAffiliationResponseExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/GroupAffiliationResponseExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/MessageUpdateExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/MessageUpdateExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/MessageUpdateExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/MessageUpdateExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/NetworkStatusBroadcastExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/NetworkStatusBroadcastExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/NetworkStatusBroadcastExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/NetworkStatusBroadcastExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/ProtectionParameterBroadcast.java b/src/main/java/module/decode/p25/message/pdu/osp/control/ProtectionParameterBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/ProtectionParameterBroadcast.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/ProtectionParameterBroadcast.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/RFSSStatusBroadcastExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/RFSSStatusBroadcastExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/RFSSStatusBroadcastExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/RFSSStatusBroadcastExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/RoamingAddressUpdateExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/RoamingAddressUpdateExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/RoamingAddressUpdateExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/RoamingAddressUpdateExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/StatusQueryExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/StatusQueryExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/StatusQueryExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/StatusQueryExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/StatusUpdateExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/StatusUpdateExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/StatusUpdateExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/StatusUpdateExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/control/UnitRegistrationResponseExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/control/UnitRegistrationResponseExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/control/UnitRegistrationResponseExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/control/UnitRegistrationResponseExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/data/GroupDataChannelGrantExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/data/GroupDataChannelGrantExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/data/GroupDataChannelGrantExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/data/GroupDataChannelGrantExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/data/IndividualDataChannelGrantExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/data/IndividualDataChannelGrantExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/data/IndividualDataChannelGrantExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/data/IndividualDataChannelGrantExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/GroupVoiceChannelGrantExplicit.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/GroupVoiceChannelGrantExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/GroupVoiceChannelGrantExplicit.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/GroupVoiceChannelGrantExplicit.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantExplicit.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantExplicit.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantExplicit.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantUpdateExplicit.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantUpdateExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/TelephoneInterconnectChannelGrantUpdateExplicit.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/UnitToUnitAnswerRequestExplicit.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitAnswerRequestExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/UnitToUnitAnswerRequestExplicit.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitAnswerRequestExplicit.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantExtended.java
diff --git a/src/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantUpdateExtended.java b/src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantUpdateExtended.java
similarity index 100%
rename from src/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantUpdateExtended.java
rename to src/main/java/module/decode/p25/message/pdu/osp/voice/UnitToUnitVoiceChannelGrantUpdateExtended.java
diff --git a/src/module/decode/p25/message/tdu/TDUMessage.java b/src/main/java/module/decode/p25/message/tdu/TDUMessage.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/TDUMessage.java
rename to src/main/java/module/decode/p25/message/tdu/TDUMessage.java
diff --git a/src/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/AdjacentSiteStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/CallAlert.java b/src/main/java/module/decode/p25/message/tdu/lc/CallAlert.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/CallAlert.java
rename to src/main/java/module/decode/p25/message/tdu/lc/CallAlert.java
diff --git a/src/module/decode/p25/message/tdu/lc/CallTermination.java b/src/main/java/module/decode/p25/message/tdu/lc/CallTermination.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/CallTermination.java
rename to src/main/java/module/decode/p25/message/tdu/lc/CallTermination.java
diff --git a/src/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdate.java b/src/main/java/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdate.java
rename to src/main/java/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdate.java
diff --git a/src/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdateExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdateExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/ChannelIdentifierUpdateExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/ExtendedFunctionCommand.java b/src/main/java/module/decode/p25/message/tdu/lc/ExtendedFunctionCommand.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/ExtendedFunctionCommand.java
rename to src/main/java/module/decode/p25/message/tdu/lc/ExtendedFunctionCommand.java
diff --git a/src/module/decode/p25/message/tdu/lc/GroupAffiliationQuery.java b/src/main/java/module/decode/p25/message/tdu/lc/GroupAffiliationQuery.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/GroupAffiliationQuery.java
rename to src/main/java/module/decode/p25/message/tdu/lc/GroupAffiliationQuery.java
diff --git a/src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdate.java b/src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdate.java
rename to src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdate.java
diff --git a/src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdateExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdateExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUpdateExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUser.java b/src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/GroupVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/tdu/lc/GroupVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/tdu/lc/MessageUpdate.java b/src/main/java/module/decode/p25/message/tdu/lc/MessageUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/MessageUpdate.java
rename to src/main/java/module/decode/p25/message/tdu/lc/MessageUpdate.java
diff --git a/src/module/decode/p25/message/tdu/lc/NetworkStatusBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/NetworkStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/NetworkStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/NetworkStatusBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/NetworkStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/NetworkStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/NetworkStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/NetworkStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/ProtectionParameterBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/ProtectionParameterBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/ProtectionParameterBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/ProtectionParameterBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/RFSSStatusBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/RFSSStatusBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/RFSSStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/RFSSStatusBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/RFSSStatusBroadcastExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/RFSSStatusBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/RFSSStatusBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/RFSSStatusBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcastExplicit.java b/src/main/java/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/tdu/lc/SecondaryControlChannelBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/tdu/lc/StatusQuery.java b/src/main/java/module/decode/p25/message/tdu/lc/StatusQuery.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/StatusQuery.java
rename to src/main/java/module/decode/p25/message/tdu/lc/StatusQuery.java
diff --git a/src/module/decode/p25/message/tdu/lc/StatusUpdate.java b/src/main/java/module/decode/p25/message/tdu/lc/StatusUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/StatusUpdate.java
rename to src/main/java/module/decode/p25/message/tdu/lc/StatusUpdate.java
diff --git a/src/module/decode/p25/message/tdu/lc/SystemServiceBroadcast.java b/src/main/java/module/decode/p25/message/tdu/lc/SystemServiceBroadcast.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/SystemServiceBroadcast.java
rename to src/main/java/module/decode/p25/message/tdu/lc/SystemServiceBroadcast.java
diff --git a/src/module/decode/p25/message/tdu/lc/TDULCMessageFactory.java b/src/main/java/module/decode/p25/message/tdu/lc/TDULCMessageFactory.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/TDULCMessageFactory.java
rename to src/main/java/module/decode/p25/message/tdu/lc/TDULCMessageFactory.java
diff --git a/src/module/decode/p25/message/tdu/lc/TDULinkControlMessage.java b/src/main/java/module/decode/p25/message/tdu/lc/TDULinkControlMessage.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/TDULinkControlMessage.java
rename to src/main/java/module/decode/p25/message/tdu/lc/TDULinkControlMessage.java
diff --git a/src/module/decode/p25/message/tdu/lc/TelephoneInterconnectAnswerRequest.java b/src/main/java/module/decode/p25/message/tdu/lc/TelephoneInterconnectAnswerRequest.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/TelephoneInterconnectAnswerRequest.java
rename to src/main/java/module/decode/p25/message/tdu/lc/TelephoneInterconnectAnswerRequest.java
diff --git a/src/module/decode/p25/message/tdu/lc/TelephoneInterconnectVoiceChannelUser.java b/src/main/java/module/decode/p25/message/tdu/lc/TelephoneInterconnectVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/TelephoneInterconnectVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/tdu/lc/TelephoneInterconnectVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/tdu/lc/UnitAuthenticationCommand.java b/src/main/java/module/decode/p25/message/tdu/lc/UnitAuthenticationCommand.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/UnitAuthenticationCommand.java
rename to src/main/java/module/decode/p25/message/tdu/lc/UnitAuthenticationCommand.java
diff --git a/src/module/decode/p25/message/tdu/lc/UnitRegistrationCommand.java b/src/main/java/module/decode/p25/message/tdu/lc/UnitRegistrationCommand.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/UnitRegistrationCommand.java
rename to src/main/java/module/decode/p25/message/tdu/lc/UnitRegistrationCommand.java
diff --git a/src/module/decode/p25/message/tdu/lc/UnitToUnitAnswerRequest.java b/src/main/java/module/decode/p25/message/tdu/lc/UnitToUnitAnswerRequest.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/UnitToUnitAnswerRequest.java
rename to src/main/java/module/decode/p25/message/tdu/lc/UnitToUnitAnswerRequest.java
diff --git a/src/module/decode/p25/message/tdu/lc/UnitToUnitVoiceChannelUser.java b/src/main/java/module/decode/p25/message/tdu/lc/UnitToUnitVoiceChannelUser.java
similarity index 100%
rename from src/module/decode/p25/message/tdu/lc/UnitToUnitVoiceChannelUser.java
rename to src/main/java/module/decode/p25/message/tdu/lc/UnitToUnitVoiceChannelUser.java
diff --git a/src/module/decode/p25/message/tsbk/ChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/ChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/ChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/ChannelGrant.java
index fa4893c7..9402f50e 100644
--- a/src/module/decode/p25/message/tsbk/ChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/ChannelGrant.java
@@ -1,110 +1,110 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.reference.DataUnitID;
-
-public abstract class ChannelGrant extends ServiceMessage implements IdentifierReceiver
-{
- public static final int[] PRIORITY = {85, 86, 87};
- public static final int[] CHANNEL_IDENTIFIER = {88, 89, 90, 91};
- public static final int[] CHANNEL_NUMBER = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
-
- private IBandIdentifier mIdentifierUpdate;
-
- public ChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- /**
- * Indicates if this channel grant is for a TDMA channel
- */
- public boolean isTDMAChannel()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.isTDMA();
- }
-
- return false;
- }
-
- /**
- * 1 = Lowest, 4 = Default, 7 = Highest
- */
- public int getPriority()
- {
- return mMessage.getInt(PRIORITY);
- }
-
- public int getChannelIdentifier()
- {
- return mMessage.getInt(CHANNEL_IDENTIFIER);
- }
-
- public int getChannelNumber()
- {
- return mMessage.getInt(CHANNEL_NUMBER);
- }
-
- public String getChannel()
- {
- return getChannelIdentifier() + "-" + getChannelNumber();
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- mIdentifierUpdate = message;
- }
-
- @Override
- public int[] getIdentifiers()
- {
- int[] identifiers = new int[1];
- identifiers[0] = getChannelIdentifier();
-
- return identifiers;
- }
-
- public long getDownlinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getDownlinkFrequency(getChannelNumber());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getUplinkFrequency(getChannelNumber());
- }
-
- return 0;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.reference.DataUnitID;
+
+public abstract class ChannelGrant extends ServiceMessage implements IdentifierReceiver
+{
+ public static final int[] PRIORITY = {85, 86, 87};
+ public static final int[] CHANNEL_IDENTIFIER = {88, 89, 90, 91};
+ public static final int[] CHANNEL_NUMBER = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
+
+ private IBandIdentifier mIdentifierUpdate;
+
+ public ChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ /**
+ * Indicates if this channel grant is for a TDMA channel
+ */
+ public boolean isTDMAChannel()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.isTDMA();
+ }
+
+ return false;
+ }
+
+ /**
+ * 1 = Lowest, 4 = Default, 7 = Highest
+ */
+ public int getPriority()
+ {
+ return mMessage.getInt(PRIORITY);
+ }
+
+ public int getChannelIdentifier()
+ {
+ return mMessage.getInt(CHANNEL_IDENTIFIER);
+ }
+
+ public int getChannelNumber()
+ {
+ return mMessage.getInt(CHANNEL_NUMBER);
+ }
+
+ public String getChannel()
+ {
+ return getChannelIdentifier() + "-" + getChannelNumber();
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ mIdentifierUpdate = message;
+ }
+
+ @Override
+ public int[] getIdentifiers()
+ {
+ int[] identifiers = new int[1];
+ identifiers[0] = getChannelIdentifier();
+
+ return identifiers;
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getDownlinkFrequency(getChannelNumber());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getUplinkFrequency(getChannelNumber());
+ }
+
+ return 0;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/GroupChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/GroupChannelGrant.java
similarity index 95%
rename from src/module/decode/p25/message/tsbk/GroupChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/GroupChannelGrant.java
index 446f3631..3160696a 100644
--- a/src/module/decode/p25/message/tsbk/GroupChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/GroupChannelGrant.java
@@ -1,93 +1,93 @@
-package module.decode.p25.message.tsbk;
-
-import module.decode.p25.reference.DataUnitID;
-import alias.Alias;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public abstract class GroupChannelGrant extends ChannelGrant
-{
- public static final int[] GROUP_ADDRESS = { 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119 };
-
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public GroupChannelGrant( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- public String getGroupAddress()
- {
- return mMessage.getHex( GROUP_ADDRESS, 4 );
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- if( isEmergency() )
- {
- sb.append( " EMERGENCY" );
- }
-
- sb.append( " SOURCE UNIT:" );
- sb.append( getSourceAddress() );
-
- sb.append( " GROUP:" );
- sb.append( getGroupAddress() );
-
- sb.append( " CHAN:" );
- sb.append( getChannelIdentifier() + "-" + getChannelNumber() );
-
- sb.append( " DN:" + getDownlinkFrequency() );
-
- sb.append( " UP:" + getUplinkFrequency() );
-
- return sb.toString();
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- @Override
- public Alias getFromIDAlias()
- {
- if( mAliasList != null )
- {
- return mAliasList.getTalkgroupAlias( getFromID() );
- }
-
- return null;
- }
-
- @Override
- public String getToID()
- {
- return getGroupAddress();
- }
-
- @Override
- public Alias getToIDAlias()
- {
- if( mAliasList != null )
- {
- return mAliasList.getTalkgroupAlias( getGroupAddress() );
- }
-
- return null;
- }
-}
+package module.decode.p25.message.tsbk;
+
+import module.decode.p25.reference.DataUnitID;
+import alias.Alias;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public abstract class GroupChannelGrant extends ChannelGrant
+{
+ public static final int[] GROUP_ADDRESS = { 104,105,106,107,108,109,110,111,
+ 112,113,114,115,116,117,118,119 };
+
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public GroupChannelGrant( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ public String getGroupAddress()
+ {
+ return mMessage.getHex( GROUP_ADDRESS, 4 );
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ if( isEmergency() )
+ {
+ sb.append( " EMERGENCY" );
+ }
+
+ sb.append( " SOURCE UNIT:" );
+ sb.append( getSourceAddress() );
+
+ sb.append( " GROUP:" );
+ sb.append( getGroupAddress() );
+
+ sb.append( " CHAN:" );
+ sb.append( getChannelIdentifier() + "-" + getChannelNumber() );
+
+ sb.append( " DN:" + getDownlinkFrequency() );
+
+ sb.append( " UP:" + getUplinkFrequency() );
+
+ return sb.toString();
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ @Override
+ public Alias getFromIDAlias()
+ {
+ if( mAliasList != null )
+ {
+ return mAliasList.getTalkgroupAlias( getFromID() );
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getGroupAddress();
+ }
+
+ @Override
+ public Alias getToIDAlias()
+ {
+ if( mAliasList != null )
+ {
+ return mAliasList.getTalkgroupAlias( getGroupAddress() );
+ }
+
+ return null;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java b/src/main/java/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java
rename to src/main/java/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java
index 5a656706..10446158 100644
--- a/src/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java
+++ b/src/main/java/module/decode/p25/message/tsbk/GroupChannelGrantExplicit.java
@@ -1,155 +1,155 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.reference.DataUnitID;
-
-public abstract class GroupChannelGrantExplicit extends ChannelGrant
-{
- public static final int[] TRANSMIT_IDENTIFIER = {96, 97, 98, 99};
- public static final int[] TRANSMIT_NUMBER = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
- public static final int[] RECEIVE_IDENTIFIER = {112, 113, 114, 115};
- public static final int[] RECEIVE_NUMBER = {116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127};
- public static final int[] GROUP_ADDRESS = {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143};
-
- private IBandIdentifier mTransmitIdentifierUpdate;
- private IBandIdentifier mReceiveIdentifierUpdate;
-
- public GroupChannelGrantExplicit(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public boolean isTDMAChannel()
- {
- if(mTransmitIdentifierUpdate != null)
- {
- return mTransmitIdentifierUpdate.isTDMA();
- }
-
- return false;
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- if(isEmergency())
- {
- sb.append(" EMERGENCY");
- }
-
- sb.append(" XMIT:");
- sb.append(getTransmitChannelIdentifier() + "/" + getTransmitChannelNumber());
-
- sb.append(" RCV:");
- sb.append(getReceiveChannelIdentifier() + "/" + getReceiveChannelNumber());
-
- sb.append(" GRP:");
- sb.append(getGroupAddress());
-
- return sb.toString();
- }
-
- public int getTransmitChannelIdentifier()
- {
- return mMessage.getInt(TRANSMIT_IDENTIFIER);
- }
-
- public int getTransmitChannelNumber()
- {
- return mMessage.getInt(TRANSMIT_NUMBER);
- }
-
- public String getTransmitChannel()
- {
- return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
- }
-
- public int getReceiveChannelIdentifier()
- {
- return mMessage.getInt(RECEIVE_IDENTIFIER);
- }
-
- public int getReceiveChannelNumber()
- {
- return mMessage.getInt(RECEIVE_NUMBER);
- }
-
- public String getReceiveChannel()
- {
- return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
- }
-
- public String getGroupAddress()
- {
- return mMessage.getHex(GROUP_ADDRESS, 4);
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- if(identifier == getTransmitChannelIdentifier())
- {
- mTransmitIdentifierUpdate = message;
- }
-
- if(identifier == getReceiveChannelIdentifier())
- {
- mReceiveIdentifierUpdate = message;
- }
- }
-
- @Override
- public int[] getIdentifiers()
- {
- int[] identifiers = new int[2];
- identifiers[0] = getTransmitChannelIdentifier();
- identifiers[1] = getReceiveChannelIdentifier();
-
- return identifiers;
- }
-
- public long getDownlinkFrequency()
- {
- if(mTransmitIdentifierUpdate != null)
- {
- return mTransmitIdentifierUpdate.getDownlinkFrequency(getTransmitChannelNumber());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency()
- {
- if(mReceiveIdentifierUpdate != null)
- {
- return mReceiveIdentifierUpdate.getUplinkFrequency(getReceiveChannelNumber());
- }
-
- return 0;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.reference.DataUnitID;
+
+public abstract class GroupChannelGrantExplicit extends ChannelGrant
+{
+ public static final int[] TRANSMIT_IDENTIFIER = {96, 97, 98, 99};
+ public static final int[] TRANSMIT_NUMBER = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
+ public static final int[] RECEIVE_IDENTIFIER = {112, 113, 114, 115};
+ public static final int[] RECEIVE_NUMBER = {116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127};
+ public static final int[] GROUP_ADDRESS = {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143};
+
+ private IBandIdentifier mTransmitIdentifierUpdate;
+ private IBandIdentifier mReceiveIdentifierUpdate;
+
+ public GroupChannelGrantExplicit(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public boolean isTDMAChannel()
+ {
+ if(mTransmitIdentifierUpdate != null)
+ {
+ return mTransmitIdentifierUpdate.isTDMA();
+ }
+
+ return false;
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ if(isEmergency())
+ {
+ sb.append(" EMERGENCY");
+ }
+
+ sb.append(" XMIT:");
+ sb.append(getTransmitChannelIdentifier() + "/" + getTransmitChannelNumber());
+
+ sb.append(" RCV:");
+ sb.append(getReceiveChannelIdentifier() + "/" + getReceiveChannelNumber());
+
+ sb.append(" GRP:");
+ sb.append(getGroupAddress());
+
+ return sb.toString();
+ }
+
+ public int getTransmitChannelIdentifier()
+ {
+ return mMessage.getInt(TRANSMIT_IDENTIFIER);
+ }
+
+ public int getTransmitChannelNumber()
+ {
+ return mMessage.getInt(TRANSMIT_NUMBER);
+ }
+
+ public String getTransmitChannel()
+ {
+ return getTransmitChannelIdentifier() + "-" + getTransmitChannelNumber();
+ }
+
+ public int getReceiveChannelIdentifier()
+ {
+ return mMessage.getInt(RECEIVE_IDENTIFIER);
+ }
+
+ public int getReceiveChannelNumber()
+ {
+ return mMessage.getInt(RECEIVE_NUMBER);
+ }
+
+ public String getReceiveChannel()
+ {
+ return getReceiveChannelIdentifier() + "-" + getReceiveChannelNumber();
+ }
+
+ public String getGroupAddress()
+ {
+ return mMessage.getHex(GROUP_ADDRESS, 4);
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ if(identifier == getTransmitChannelIdentifier())
+ {
+ mTransmitIdentifierUpdate = message;
+ }
+
+ if(identifier == getReceiveChannelIdentifier())
+ {
+ mReceiveIdentifierUpdate = message;
+ }
+ }
+
+ @Override
+ public int[] getIdentifiers()
+ {
+ int[] identifiers = new int[2];
+ identifiers[0] = getTransmitChannelIdentifier();
+ identifiers[1] = getReceiveChannelIdentifier();
+
+ return identifiers;
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mTransmitIdentifierUpdate != null)
+ {
+ return mTransmitIdentifierUpdate.getDownlinkFrequency(getTransmitChannelNumber());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mReceiveIdentifierUpdate != null)
+ {
+ return mReceiveIdentifierUpdate.getUplinkFrequency(getReceiveChannelNumber());
+ }
+
+ return 0;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java
index 8c2bf284..63584002 100644
--- a/src/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/GroupMultiChannelGrant.java
@@ -1,220 +1,220 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.reference.DataUnitID;
-
-public abstract class GroupMultiChannelGrant extends ChannelGrant implements IdentifierReceiver
-{
- public static final int[] CHANNEL_IDENTIFIER_1 = {80, 81, 82, 83};
- public static final int[] CHANNEL_NUMBER_1 = {84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95};
- public static final int[] GROUP_ADDRESS_1 = {96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
- public static final int[] CHANNEL_IDENTIFIER_2 = {112, 113, 114, 115};
- public static final int[] CHANNEL_NUMBER_2 = {116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127};
- public static final int[] GROUP_ADDRESS_2 = {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate1;
- private IBandIdentifier mIdentifierUpdate2;
-
- public GroupMultiChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" CHAN1:");
- sb.append(getChannelIdentifier1() + "/" + getChannelNumber1());
-
- sb.append(" GRP1:");
- sb.append(getGroupAddress1());
-
- if(hasChannelNumber2())
- {
- sb.append(" CHAN2:");
- sb.append(getChannelIdentifier2() + "/" + getChannelNumber2());
-
- sb.append(" GRP2:");
- sb.append(getGroupAddress2());
- }
-
- return sb.toString();
- }
-
- public int getChannelIdentifier1()
- {
- return mMessage.getInt(CHANNEL_IDENTIFIER_1);
- }
-
- public int getChannelNumber1()
- {
- return mMessage.getInt(CHANNEL_NUMBER_1);
- }
-
- public String getChannel1()
- {
- return getChannelIdentifier1() + "-" + getChannelNumber1();
- }
-
- public String getGroupAddress1()
- {
- return mMessage.getHex(GROUP_ADDRESS_1, 4);
- }
-
- public int getChannelIdentifier2()
- {
- return mMessage.getInt(CHANNEL_IDENTIFIER_2);
- }
-
- public int getChannelNumber2()
- {
- return mMessage.getInt(CHANNEL_NUMBER_2);
- }
-
- public String getChannel2()
- {
- return getChannelIdentifier2() + "-" + getChannelNumber2();
- }
-
- public String getGroupAddress2()
- {
- return mMessage.getHex(GROUP_ADDRESS_2, 4);
- }
-
- public boolean hasChannelNumber2()
- {
- return mMessage.getInt(CHANNEL_NUMBER_2) !=
- mMessage.getInt(CHANNEL_NUMBER_1);
- }
-
- @Override
- public String getFromID()
- {
- return getGroupAddress1();
- }
-
- @Override
- public String getToID()
- {
- return getGroupAddress2();
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- if(identifier == getChannelIdentifier1())
- {
- mIdentifierUpdate1 = message;
- }
-
- if(hasChannelNumber2() && identifier == getChannelIdentifier2())
- {
- mIdentifierUpdate2 = message;
- }
- }
-
- @Override
- public int[] getIdentifiers()
- {
- int[] identifiers;
-
- if(hasChannelNumber2())
- {
- identifiers = new int[2];
- identifiers[0] = getChannelIdentifier1();
- identifiers[1] = getChannelIdentifier2();
- }
- else
- {
- identifiers = new int[1];
- identifiers[0] = getChannelIdentifier1();
- }
-
- return identifiers;
- }
-
- public long getDownlinkFrequency1()
- {
- if(mIdentifierUpdate1 != null)
- {
- return mIdentifierUpdate1.getDownlinkFrequency(getChannelNumber1());
- }
-
- return 0;
- }
-
- public boolean isTDMAChannel1()
- {
- if(mIdentifierUpdate1 != null)
- {
- return mIdentifierUpdate1.isTDMA();
- }
-
- return false;
- }
-
- public long getUplinkFrequency1()
- {
- if(mIdentifierUpdate1 != null)
- {
- return mIdentifierUpdate1.getUplinkFrequency(getChannelNumber1());
- }
-
- return 0;
- }
-
- public long getDownlinkFrequency2()
- {
- if(mIdentifierUpdate2 != null)
- {
- return mIdentifierUpdate2.getDownlinkFrequency(getChannelNumber2());
- }
-
- return 0;
- }
-
- public boolean isTDMAChannel2()
- {
- if(mIdentifierUpdate2 != null)
- {
- return mIdentifierUpdate2.isTDMA();
- }
-
- return false;
- }
-
- public long getUplinkFrequency2()
- {
- if(mIdentifierUpdate2 != null)
- {
- return mIdentifierUpdate2.getUplinkFrequency(getChannelNumber2());
- }
-
- return 0;
- }
-
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.reference.DataUnitID;
+
+public abstract class GroupMultiChannelGrant extends ChannelGrant implements IdentifierReceiver
+{
+ public static final int[] CHANNEL_IDENTIFIER_1 = {80, 81, 82, 83};
+ public static final int[] CHANNEL_NUMBER_1 = {84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95};
+ public static final int[] GROUP_ADDRESS_1 = {96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
+ public static final int[] CHANNEL_IDENTIFIER_2 = {112, 113, 114, 115};
+ public static final int[] CHANNEL_NUMBER_2 = {116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127};
+ public static final int[] GROUP_ADDRESS_2 = {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate1;
+ private IBandIdentifier mIdentifierUpdate2;
+
+ public GroupMultiChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" CHAN1:");
+ sb.append(getChannelIdentifier1() + "/" + getChannelNumber1());
+
+ sb.append(" GRP1:");
+ sb.append(getGroupAddress1());
+
+ if(hasChannelNumber2())
+ {
+ sb.append(" CHAN2:");
+ sb.append(getChannelIdentifier2() + "/" + getChannelNumber2());
+
+ sb.append(" GRP2:");
+ sb.append(getGroupAddress2());
+ }
+
+ return sb.toString();
+ }
+
+ public int getChannelIdentifier1()
+ {
+ return mMessage.getInt(CHANNEL_IDENTIFIER_1);
+ }
+
+ public int getChannelNumber1()
+ {
+ return mMessage.getInt(CHANNEL_NUMBER_1);
+ }
+
+ public String getChannel1()
+ {
+ return getChannelIdentifier1() + "-" + getChannelNumber1();
+ }
+
+ public String getGroupAddress1()
+ {
+ return mMessage.getHex(GROUP_ADDRESS_1, 4);
+ }
+
+ public int getChannelIdentifier2()
+ {
+ return mMessage.getInt(CHANNEL_IDENTIFIER_2);
+ }
+
+ public int getChannelNumber2()
+ {
+ return mMessage.getInt(CHANNEL_NUMBER_2);
+ }
+
+ public String getChannel2()
+ {
+ return getChannelIdentifier2() + "-" + getChannelNumber2();
+ }
+
+ public String getGroupAddress2()
+ {
+ return mMessage.getHex(GROUP_ADDRESS_2, 4);
+ }
+
+ public boolean hasChannelNumber2()
+ {
+ return mMessage.getInt(CHANNEL_NUMBER_2) !=
+ mMessage.getInt(CHANNEL_NUMBER_1);
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getGroupAddress1();
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getGroupAddress2();
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ if(identifier == getChannelIdentifier1())
+ {
+ mIdentifierUpdate1 = message;
+ }
+
+ if(hasChannelNumber2() && identifier == getChannelIdentifier2())
+ {
+ mIdentifierUpdate2 = message;
+ }
+ }
+
+ @Override
+ public int[] getIdentifiers()
+ {
+ int[] identifiers;
+
+ if(hasChannelNumber2())
+ {
+ identifiers = new int[2];
+ identifiers[0] = getChannelIdentifier1();
+ identifiers[1] = getChannelIdentifier2();
+ }
+ else
+ {
+ identifiers = new int[1];
+ identifiers[0] = getChannelIdentifier1();
+ }
+
+ return identifiers;
+ }
+
+ public long getDownlinkFrequency1()
+ {
+ if(mIdentifierUpdate1 != null)
+ {
+ return mIdentifierUpdate1.getDownlinkFrequency(getChannelNumber1());
+ }
+
+ return 0;
+ }
+
+ public boolean isTDMAChannel1()
+ {
+ if(mIdentifierUpdate1 != null)
+ {
+ return mIdentifierUpdate1.isTDMA();
+ }
+
+ return false;
+ }
+
+ public long getUplinkFrequency1()
+ {
+ if(mIdentifierUpdate1 != null)
+ {
+ return mIdentifierUpdate1.getUplinkFrequency(getChannelNumber1());
+ }
+
+ return 0;
+ }
+
+ public long getDownlinkFrequency2()
+ {
+ if(mIdentifierUpdate2 != null)
+ {
+ return mIdentifierUpdate2.getDownlinkFrequency(getChannelNumber2());
+ }
+
+ return 0;
+ }
+
+ public boolean isTDMAChannel2()
+ {
+ if(mIdentifierUpdate2 != null)
+ {
+ return mIdentifierUpdate2.isTDMA();
+ }
+
+ return false;
+ }
+
+ public long getUplinkFrequency2()
+ {
+ if(mIdentifierUpdate2 != null)
+ {
+ return mIdentifierUpdate2.getUplinkFrequency(getChannelNumber2());
+ }
+
+ return 0;
+ }
+
+}
diff --git a/src/module/decode/p25/message/tsbk/ServiceMessage.java b/src/main/java/module/decode/p25/message/tsbk/ServiceMessage.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/ServiceMessage.java
rename to src/main/java/module/decode/p25/message/tsbk/ServiceMessage.java
index 78d200ca..c3e5c367 100644
--- a/src/module/decode/p25/message/tsbk/ServiceMessage.java
+++ b/src/main/java/module/decode/p25/message/tsbk/ServiceMessage.java
@@ -1,42 +1,42 @@
-package module.decode.p25.message.tsbk;
-
-import module.decode.p25.reference.DataUnitID;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public abstract class ServiceMessage extends TSBKMessage
-{
- /* Service Options */
- public static final int EMERGENCY_FLAG = 80;
- public static final int ENCRYPTED_CHANNEL_FLAG = 81;
- public static final int DUPLEX_MODE = 82;
- public static final int SESSION_MODE = 83;
-
- public ServiceMessage( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- public boolean isEmergency()
- {
- return mMessage.get( EMERGENCY_FLAG );
- }
-
- public boolean isEncryptedChannel()
- {
- return mMessage.get( ENCRYPTED_CHANNEL_FLAG );
- }
-
- public DuplexMode getDuplexMode()
- {
- return mMessage.get( DUPLEX_MODE ) ? DuplexMode.FULL : DuplexMode.HALF;
- }
-
- public SessionMode getSessionMode()
- {
- return mMessage.get( SESSION_MODE ) ?
- SessionMode.CIRCUIT : SessionMode.PACKET;
- }
-}
+package module.decode.p25.message.tsbk;
+
+import module.decode.p25.reference.DataUnitID;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public abstract class ServiceMessage extends TSBKMessage
+{
+ /* Service Options */
+ public static final int EMERGENCY_FLAG = 80;
+ public static final int ENCRYPTED_CHANNEL_FLAG = 81;
+ public static final int DUPLEX_MODE = 82;
+ public static final int SESSION_MODE = 83;
+
+ public ServiceMessage( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ public boolean isEmergency()
+ {
+ return mMessage.get( EMERGENCY_FLAG );
+ }
+
+ public boolean isEncryptedChannel()
+ {
+ return mMessage.get( ENCRYPTED_CHANNEL_FLAG );
+ }
+
+ public DuplexMode getDuplexMode()
+ {
+ return mMessage.get( DUPLEX_MODE ) ? DuplexMode.FULL : DuplexMode.HALF;
+ }
+
+ public SessionMode getSessionMode()
+ {
+ return mMessage.get( SESSION_MODE ) ?
+ SessionMode.CIRCUIT : SessionMode.PACKET;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/TSBKMessage.java b/src/main/java/module/decode/p25/message/tsbk/TSBKMessage.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/TSBKMessage.java
rename to src/main/java/module/decode/p25/message/tsbk/TSBKMessage.java
diff --git a/src/module/decode/p25/message/tsbk/TSBKMessageFactory.java b/src/main/java/module/decode/p25/message/tsbk/TSBKMessageFactory.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/TSBKMessageFactory.java
rename to src/main/java/module/decode/p25/message/tsbk/TSBKMessageFactory.java
diff --git a/src/module/decode/p25/message/tsbk/UnitChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/UnitChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/UnitChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/UnitChannelGrant.java
index 90e8b476..4752c8db 100644
--- a/src/module/decode/p25/message/tsbk/UnitChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/UnitChannelGrant.java
@@ -1,90 +1,90 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk;
-
-import alias.Alias;
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.reference.DataUnitID;
-
-public abstract class UnitChannelGrant extends ChannelGrant
-{
- public static final int[] TARGET_ADDRESS = {96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119};
- public static final int[] SOURCE_ADDRESS = {120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
-
- public UnitChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- if(isEmergency())
- {
- sb.append(" EMERGENCY");
- }
-
- sb.append(" FROM:");
- sb.append(getSourceAddress());
-
- sb.append(" TO:");
- sb.append(getTargetAddress());
-
- return sb.toString();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex(TARGET_ADDRESS, 6);
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex(SOURCE_ADDRESS, 6);
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- @Override
- public Alias getFromIDAlias()
- {
- if(mAliasList != null)
- {
- return mAliasList.getTalkgroupAlias(getFromID());
- }
-
- return null;
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk;
+
+import alias.Alias;
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.reference.DataUnitID;
+
+public abstract class UnitChannelGrant extends ChannelGrant
+{
+ public static final int[] TARGET_ADDRESS = {96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119};
+ public static final int[] SOURCE_ADDRESS = {120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
+
+ public UnitChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ if(isEmergency())
+ {
+ sb.append(" EMERGENCY");
+ }
+
+ sb.append(" FROM:");
+ sb.append(getSourceAddress());
+
+ sb.append(" TO:");
+ sb.append(getTargetAddress());
+
+ return sb.toString();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex(TARGET_ADDRESS, 6);
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex(SOURCE_ADDRESS, 6);
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ @Override
+ public Alias getFromIDAlias()
+ {
+ if(mAliasList != null)
+ {
+ return mAliasList.getTalkgroupAlias(getFromID());
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java b/src/main/java/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java
index be11983f..0e04e99a 100644
--- a/src/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java
+++ b/src/main/java/module/decode/p25/message/tsbk/motorola/ControlChannelBaseStationIdentification.java
@@ -1,145 +1,145 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.motorola;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.reference.DataUnitID;
-
-public class ControlChannelBaseStationIdentification extends MotorolaTSBKMessage implements IdentifierReceiver
-{
- public static final int[] CHARACTER_1 = {80, 81, 82, 83, 84, 85};
- public static final int[] CHARACTER_2 = {86, 87, 88, 89, 90, 91};
- public static final int[] CHARACTER_3 = {92, 93, 94, 95, 96, 97};
- public static final int[] CHARACTER_4 = {98, 99, 100, 101, 102, 103};
- public static final int[] CHARACTER_5 = {104, 105, 106, 107, 108, 109};
- public static final int[] CHARACTER_6 = {110, 111, 112, 113, 114, 115};
- public static final int[] CHARACTER_7 = {116, 117, 118, 119, 120, 121};
- public static final int[] CHARACTER_8 = {122, 123, 124, 125, 126, 127};
-
- public static final int[] IDENTIFIER = {128, 129, 130, 131};
- public static final int[] CHANNEL = {132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate;
-
- public ControlChannelBaseStationIdentification(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return MotorolaOpcode.CONTROL_CHANNEL_ID.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
-
- sb.append(" CWID:" + getCWID());
-
- sb.append(" DN:" + getDownlinkFrequency());
-
- sb.append(" UP:" + getUplinkFrequency());
-
- return sb.toString();
- }
-
-
- public String getCWID()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getCharacter(CHARACTER_1));
- sb.append(getCharacter(CHARACTER_2));
- sb.append(getCharacter(CHARACTER_3));
- sb.append(getCharacter(CHARACTER_4));
- sb.append(getCharacter(CHARACTER_5));
- sb.append(getCharacter(CHARACTER_6));
- sb.append(getCharacter(CHARACTER_7));
- sb.append(getCharacter(CHARACTER_8));
-
- return sb.toString();
- }
-
- private String getCharacter(int[] field)
- {
- int value = mMessage.getInt(field);
-
- if(value != 0)
- {
- return String.valueOf((char)(value + 43));
- }
-
- return null;
- }
-
- public int getIdentifier()
- {
- return mMessage.getInt(IDENTIFIER);
- }
-
- public int getChannel()
- {
- return mMessage.getInt(CHANNEL);
- }
-
- public long getUplinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- mIdentifierUpdate.getUplinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- public long getDownlinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- mIdentifierUpdate.getDownlinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- mIdentifierUpdate = message;
- }
-
- @Override
- public int[] getIdentifiers()
- {
- int[] identifiers = new int[1];
-
- identifiers[0] = getIdentifier();
-
- return identifiers;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.motorola;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.reference.DataUnitID;
+
+public class ControlChannelBaseStationIdentification extends MotorolaTSBKMessage implements IdentifierReceiver
+{
+ public static final int[] CHARACTER_1 = {80, 81, 82, 83, 84, 85};
+ public static final int[] CHARACTER_2 = {86, 87, 88, 89, 90, 91};
+ public static final int[] CHARACTER_3 = {92, 93, 94, 95, 96, 97};
+ public static final int[] CHARACTER_4 = {98, 99, 100, 101, 102, 103};
+ public static final int[] CHARACTER_5 = {104, 105, 106, 107, 108, 109};
+ public static final int[] CHARACTER_6 = {110, 111, 112, 113, 114, 115};
+ public static final int[] CHARACTER_7 = {116, 117, 118, 119, 120, 121};
+ public static final int[] CHARACTER_8 = {122, 123, 124, 125, 126, 127};
+
+ public static final int[] IDENTIFIER = {128, 129, 130, 131};
+ public static final int[] CHANNEL = {132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate;
+
+ public ControlChannelBaseStationIdentification(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return MotorolaOpcode.CONTROL_CHANNEL_ID.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
+
+ sb.append(" CWID:" + getCWID());
+
+ sb.append(" DN:" + getDownlinkFrequency());
+
+ sb.append(" UP:" + getUplinkFrequency());
+
+ return sb.toString();
+ }
+
+
+ public String getCWID()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getCharacter(CHARACTER_1));
+ sb.append(getCharacter(CHARACTER_2));
+ sb.append(getCharacter(CHARACTER_3));
+ sb.append(getCharacter(CHARACTER_4));
+ sb.append(getCharacter(CHARACTER_5));
+ sb.append(getCharacter(CHARACTER_6));
+ sb.append(getCharacter(CHARACTER_7));
+ sb.append(getCharacter(CHARACTER_8));
+
+ return sb.toString();
+ }
+
+ private String getCharacter(int[] field)
+ {
+ int value = mMessage.getInt(field);
+
+ if(value != 0)
+ {
+ return String.valueOf((char)(value + 43));
+ }
+
+ return null;
+ }
+
+ public int getIdentifier()
+ {
+ return mMessage.getInt(IDENTIFIER);
+ }
+
+ public int getChannel()
+ {
+ return mMessage.getInt(CHANNEL);
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ mIdentifierUpdate.getUplinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ mIdentifierUpdate.getDownlinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ mIdentifierUpdate = message;
+ }
+
+ @Override
+ public int[] getIdentifiers()
+ {
+ int[] identifiers = new int[1];
+
+ identifiers[0] = getIdentifier();
+
+ return identifiers;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/motorola/MotorolaOpcode.java b/src/main/java/module/decode/p25/message/tsbk/motorola/MotorolaOpcode.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/MotorolaOpcode.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/MotorolaOpcode.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java b/src/main/java/module/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PatchGroup.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroup.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/PatchGroup.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroup.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PatchGroupAdd.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupAdd.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/PatchGroupAdd.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupAdd.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PatchGroupDelete.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupDelete.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/PatchGroupDelete.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupDelete.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrant.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrant.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrantUpdate.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrantUpdate.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrantUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PatchGroupVoiceChannelGrantUpdate.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java b/src/main/java/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java
index 19f57c30..71768a1d 100644
--- a/src/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java
+++ b/src/main/java/module/decode/p25/message/tsbk/motorola/PlannedControlChannnelShutdown.java
@@ -1,30 +1,30 @@
-package module.decode.p25.message.tsbk.motorola;
-
-import module.decode.p25.reference.DataUnitID;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class PlannedControlChannnelShutdown extends MotorolaTSBKMessage
-{
- public PlannedControlChannnelShutdown( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return MotorolaOpcode.CCH_PLANNED_SHUTDOWN.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- return sb.toString();
- }
-}
+package module.decode.p25.message.tsbk.motorola;
+
+import module.decode.p25.reference.DataUnitID;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class PlannedControlChannnelShutdown extends MotorolaTSBKMessage
+{
+ public PlannedControlChannnelShutdown( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return MotorolaOpcode.CCH_PLANNED_SHUTDOWN.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ return sb.toString();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/motorola/SystemLoading.java b/src/main/java/module/decode/p25/message/tsbk/motorola/SystemLoading.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/motorola/SystemLoading.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/SystemLoading.java
diff --git a/src/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java b/src/main/java/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java
rename to src/main/java/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java
index d55ea401..4126afc0 100644
--- a/src/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java
+++ b/src/main/java/module/decode/p25/message/tsbk/motorola/TrafficChannelBaseStationIdentification.java
@@ -1,65 +1,65 @@
-package module.decode.p25.message.tsbk.motorola;
-
-import module.decode.p25.reference.DataUnitID;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class TrafficChannelBaseStationIdentification extends MotorolaTSBKMessage
-{
- public static final int[] CHARACTER_1 = { 80,81,82,83,84,85 };
- public static final int[] CHARACTER_2 = { 86,87,88,89,90,91 };
- public static final int[] CHARACTER_3 = { 92,93,94,95,96,97 };
- public static final int[] CHARACTER_4 = { 98,99,100,101,102,103 };
- public static final int[] CHARACTER_5 = { 104,105,106,107,108,109 };
- public static final int[] CHARACTER_6 = { 110,111,112,113,114,115 };
- public static final int[] CHARACTER_7 = { 116,117,118,119,120,121 };
- public static final int[] CHARACTER_8 = { 122,123,124,125,126,127 };
-
- public TrafficChannelBaseStationIdentification( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return MotorolaOpcode.TRAFFIC_CHANNEL_ID.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " ID:" + getID() );
-
- return sb.toString();
- }
-
-
- public String getID()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getCharacter( CHARACTER_1 ) );
- sb.append( getCharacter( CHARACTER_2 ) );
- sb.append( getCharacter( CHARACTER_3 ) );
- sb.append( getCharacter( CHARACTER_4 ) );
- sb.append( getCharacter( CHARACTER_5 ) );
- sb.append( getCharacter( CHARACTER_6 ) );
- sb.append( getCharacter( CHARACTER_7 ) );
- sb.append( getCharacter( CHARACTER_8 ) );
-
- return sb.toString();
- }
-
- private String getCharacter( int[] field )
- {
- int value = mMessage.getInt( field );
-
- return String.valueOf( (char)( value + 43 ) );
- }
-}
+package module.decode.p25.message.tsbk.motorola;
+
+import module.decode.p25.reference.DataUnitID;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class TrafficChannelBaseStationIdentification extends MotorolaTSBKMessage
+{
+ public static final int[] CHARACTER_1 = { 80,81,82,83,84,85 };
+ public static final int[] CHARACTER_2 = { 86,87,88,89,90,91 };
+ public static final int[] CHARACTER_3 = { 92,93,94,95,96,97 };
+ public static final int[] CHARACTER_4 = { 98,99,100,101,102,103 };
+ public static final int[] CHARACTER_5 = { 104,105,106,107,108,109 };
+ public static final int[] CHARACTER_6 = { 110,111,112,113,114,115 };
+ public static final int[] CHARACTER_7 = { 116,117,118,119,120,121 };
+ public static final int[] CHARACTER_8 = { 122,123,124,125,126,127 };
+
+ public TrafficChannelBaseStationIdentification( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return MotorolaOpcode.TRAFFIC_CHANNEL_ID.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " ID:" + getID() );
+
+ return sb.toString();
+ }
+
+
+ public String getID()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getCharacter( CHARACTER_1 ) );
+ sb.append( getCharacter( CHARACTER_2 ) );
+ sb.append( getCharacter( CHARACTER_3 ) );
+ sb.append( getCharacter( CHARACTER_4 ) );
+ sb.append( getCharacter( CHARACTER_5 ) );
+ sb.append( getCharacter( CHARACTER_6 ) );
+ sb.append( getCharacter( CHARACTER_7 ) );
+ sb.append( getCharacter( CHARACTER_8 ) );
+
+ return sb.toString();
+ }
+
+ private String getCharacter( int[] field )
+ {
+ int value = mMessage.getInt( field );
+
+ return String.valueOf( (char)( value + 43 ) );
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java
index 5e0bc56c..fe137628 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/AcknowledgeResponse.java
@@ -1,121 +1,121 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class AcknowledgeResponse extends TSBKMessage
-{
- public static final int ADDITIONAL_INFORMATION_FLAG = 80;
- public static final int EXTENDED_ADDRESS_FLAG = 81;
- public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
- public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
- 101,102,103,104,105,106,107 };
- public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
- 117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public AcknowledgeResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.ACKNOWLEDGE_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SVC TYPE: " + getServiceType() );
-
- if( hasAdditionalInformation() )
- {
- if( hasExtendedAddress() )
- {
- sb.append( " WACN: " + getWACN() );
- sb.append( " SYS ID: " + getSystemID() );
- }
- else
- {
- sb.append( " SRC: " + getSourceAddress() );
- }
- }
-
- return sb.toString();
- }
-
- public boolean hasAdditionalInformation()
- {
- return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
- }
-
- public boolean hasExtendedAddress()
- {
- return mMessage.get( EXTENDED_ADDRESS_FLAG );
- }
-
- public String getServiceType()
- {
- return mMessage.getHex( SERVICE_TYPE, 2 );
- }
-
- public String getWACN()
- {
- if( hasAdditionalInformation() && !hasExtendedAddress() )
- {
- return mMessage.getHex( WACN, 5 );
- }
-
- return null;
- }
-
- public String getSystemID()
- {
- if( hasAdditionalInformation() && !hasExtendedAddress() )
- {
- return mMessage.getHex( SYSTEM_ID, 3 );
- }
-
- return null;
- }
-
- public String getSourceAddress()
- {
- if( hasAdditionalInformation() && !hasExtendedAddress() )
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- return null;
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class AcknowledgeResponse extends TSBKMessage
+{
+ public static final int ADDITIONAL_INFORMATION_FLAG = 80;
+ public static final int EXTENDED_ADDRESS_FLAG = 81;
+ public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
+ public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
+ 101,102,103,104,105,106,107 };
+ public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
+ 117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public AcknowledgeResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.ACKNOWLEDGE_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SVC TYPE: " + getServiceType() );
+
+ if( hasAdditionalInformation() )
+ {
+ if( hasExtendedAddress() )
+ {
+ sb.append( " WACN: " + getWACN() );
+ sb.append( " SYS ID: " + getSystemID() );
+ }
+ else
+ {
+ sb.append( " SRC: " + getSourceAddress() );
+ }
+ }
+
+ return sb.toString();
+ }
+
+ public boolean hasAdditionalInformation()
+ {
+ return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
+ }
+
+ public boolean hasExtendedAddress()
+ {
+ return mMessage.get( EXTENDED_ADDRESS_FLAG );
+ }
+
+ public String getServiceType()
+ {
+ return mMessage.getHex( SERVICE_TYPE, 2 );
+ }
+
+ public String getWACN()
+ {
+ if( hasAdditionalInformation() && !hasExtendedAddress() )
+ {
+ return mMessage.getHex( WACN, 5 );
+ }
+
+ return null;
+ }
+
+ public String getSystemID()
+ {
+ if( hasAdditionalInformation() && !hasExtendedAddress() )
+ {
+ return mMessage.getHex( SYSTEM_ID, 3 );
+ }
+
+ return null;
+ }
+
+ public String getSourceAddress()
+ {
+ if( hasAdditionalInformation() && !hasExtendedAddress() )
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java
index 4ff1a876..0b59251b 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/AdjacentStatusBroadcast.java
@@ -1,216 +1,216 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.control;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IAdjacentSite;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-
-public class AdjacentStatusBroadcast extends TSBKMessage implements IdentifierReceiver, IAdjacentSite
-{
- public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
- public static final int CONVENTIONAL_CHANNEL_FLAG = 88;
- public static final int SITE_FAILURE_CONDITION_FLAG = 89;
- public static final int VALID_FLAG = 90;
- public static final int ACTIVE_NETWORK_CONNECTION_FLAG = 91;
- public static final int[] SYSTEM_ID = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
- public static final int[] RFSS_ID = {104, 105, 106, 107, 108, 109, 110, 111};
- public static final int[] SITE_ID = {112, 113, 114, 115, 116, 117, 118, 119};
- public static final int[] IDENTIFIER = {120, 121, 122, 123};
- public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
- public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate;
-
- public AdjacentStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.ADJACENT_STATUS_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" LRA:" + getLRA());
-
- sb.append(" SYS:" + getSystemID());
-
- sb.append(" SITE:" + getRFSS() + "-" + getSiteID());
-
- sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
-
- sb.append(" DN:" + getDownlinkFrequency());
-
- sb.append(" UP:" + getUplinkFrequency());
-
- if(isConventionalChannel())
- {
- sb.append(" CONVENTIONAL");
- }
-
- if(isSiteFailureCondition())
- {
- sb.append(" FAILURE-CONDITION");
- }
-
- if(isValidSiteInformation())
- {
- sb.append(" VALID-INFO");
- }
-
- if(hasActiveNetworkConnection())
- {
- sb.append(" ACTIVE-NETWORK-CONN");
- }
-
- sb.append(getSystemServiceClass());
-
- return sb.toString();
- }
-
- @Override
- public String getDownlinkChannel()
- {
- return getIdentifier() + "-" + getChannel();
- }
-
- @Override
- public String getUplinkChannel()
- {
- return getIdentifier() + "-" + getChannel();
- }
-
- public String getLRA()
- {
- return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
- }
-
- public boolean isConventionalChannel()
- {
- return mMessage.get(CONVENTIONAL_CHANNEL_FLAG);
- }
-
- public boolean isSiteFailureCondition()
- {
- return mMessage.get(SITE_FAILURE_CONDITION_FLAG);
- }
-
- public boolean isValidSiteInformation()
- {
- return mMessage.get(VALID_FLAG);
- }
-
- public boolean hasActiveNetworkConnection()
- {
- return mMessage.get(ACTIVE_NETWORK_CONNECTION_FLAG);
- }
-
- public String getUniqueID()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getSystemID());
- sb.append(":");
- sb.append(getRFSS());
- sb.append(":");
- sb.append(getSiteID());
-
- return sb.toString();
- }
-
- public String getSystemID()
- {
- return mMessage.getHex(SYSTEM_ID, 3);
- }
-
- public String getRFSS()
- {
- return mMessage.getHex(RFSS_ID, 2);
- }
-
- public String getSiteID()
- {
- return mMessage.getHex(SITE_ID, 2);
- }
-
- public int getChannel()
- {
- return mMessage.getInt(CHANNEL);
- }
-
- public int getIdentifier()
- {
- return mMessage.getInt(IDENTIFIER);
- }
-
- public String getSystemServiceClass()
- {
- return SystemService.toString(mMessage.getInt(SYSTEM_SERVICE_CLASS));
- }
-
- public long getDownlinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getDownlinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getUplinkFrequency(getChannel());
- }
-
- return 0;
- }
-
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- /* we're only expecting 1 identifier, so use whatever is received */
- mIdentifierUpdate = message;
- }
-
- public int[] getIdentifiers()
- {
- int[] idens = new int[1];
-
- idens[0] = getIdentifier();
-
- return idens;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.control;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IAdjacentSite;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+
+public class AdjacentStatusBroadcast extends TSBKMessage implements IdentifierReceiver, IAdjacentSite
+{
+ public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
+ public static final int CONVENTIONAL_CHANNEL_FLAG = 88;
+ public static final int SITE_FAILURE_CONDITION_FLAG = 89;
+ public static final int VALID_FLAG = 90;
+ public static final int ACTIVE_NETWORK_CONNECTION_FLAG = 91;
+ public static final int[] SYSTEM_ID = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
+ public static final int[] RFSS_ID = {104, 105, 106, 107, 108, 109, 110, 111};
+ public static final int[] SITE_ID = {112, 113, 114, 115, 116, 117, 118, 119};
+ public static final int[] IDENTIFIER = {120, 121, 122, 123};
+ public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
+ public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate;
+
+ public AdjacentStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.ADJACENT_STATUS_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" LRA:" + getLRA());
+
+ sb.append(" SYS:" + getSystemID());
+
+ sb.append(" SITE:" + getRFSS() + "-" + getSiteID());
+
+ sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
+
+ sb.append(" DN:" + getDownlinkFrequency());
+
+ sb.append(" UP:" + getUplinkFrequency());
+
+ if(isConventionalChannel())
+ {
+ sb.append(" CONVENTIONAL");
+ }
+
+ if(isSiteFailureCondition())
+ {
+ sb.append(" FAILURE-CONDITION");
+ }
+
+ if(isValidSiteInformation())
+ {
+ sb.append(" VALID-INFO");
+ }
+
+ if(hasActiveNetworkConnection())
+ {
+ sb.append(" ACTIVE-NETWORK-CONN");
+ }
+
+ sb.append(getSystemServiceClass());
+
+ return sb.toString();
+ }
+
+ @Override
+ public String getDownlinkChannel()
+ {
+ return getIdentifier() + "-" + getChannel();
+ }
+
+ @Override
+ public String getUplinkChannel()
+ {
+ return getIdentifier() + "-" + getChannel();
+ }
+
+ public String getLRA()
+ {
+ return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
+ }
+
+ public boolean isConventionalChannel()
+ {
+ return mMessage.get(CONVENTIONAL_CHANNEL_FLAG);
+ }
+
+ public boolean isSiteFailureCondition()
+ {
+ return mMessage.get(SITE_FAILURE_CONDITION_FLAG);
+ }
+
+ public boolean isValidSiteInformation()
+ {
+ return mMessage.get(VALID_FLAG);
+ }
+
+ public boolean hasActiveNetworkConnection()
+ {
+ return mMessage.get(ACTIVE_NETWORK_CONNECTION_FLAG);
+ }
+
+ public String getUniqueID()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getSystemID());
+ sb.append(":");
+ sb.append(getRFSS());
+ sb.append(":");
+ sb.append(getSiteID());
+
+ return sb.toString();
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex(SYSTEM_ID, 3);
+ }
+
+ public String getRFSS()
+ {
+ return mMessage.getHex(RFSS_ID, 2);
+ }
+
+ public String getSiteID()
+ {
+ return mMessage.getHex(SITE_ID, 2);
+ }
+
+ public int getChannel()
+ {
+ return mMessage.getInt(CHANNEL);
+ }
+
+ public int getIdentifier()
+ {
+ return mMessage.getInt(IDENTIFIER);
+ }
+
+ public String getSystemServiceClass()
+ {
+ return SystemService.toString(mMessage.getInt(SYSTEM_SERVICE_CLASS));
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getDownlinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getUplinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ /* we're only expecting 1 identifier, so use whatever is received */
+ mIdentifierUpdate = message;
+ }
+
+ public int[] getIdentifiers()
+ {
+ int[] idens = new int[1];
+
+ idens[0] = getIdentifier();
+
+ return idens;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java
index 8fc0f6b2..e6cfd42f 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/AuthenticationCommand.java
@@ -1,77 +1,77 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class AuthenticationCommand extends TSBKMessage
-{
- public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
- 101,102,103,104,105,106,107 };
- public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
- 117,118,119 };
- public static final int[] TARGET_ID = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public AuthenticationCommand( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.AUTHENTICATION_COMMAND.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " WACN: " + getWACN() );
- sb.append( " SYS ID: " + getSystemID() );
- sb.append( " TGT ID: " + getTargetID() );
-
- return sb.toString();
- }
-
- public String getWACN()
- {
- return mMessage.getHex( WACN, 5 );
- }
-
- public String getSystemID()
- {
- return mMessage.getHex( SYSTEM_ID, 3 );
- }
-
- public String getTargetID()
- {
- return mMessage.getHex( TARGET_ID, 6 );
- }
-
- public String getFullTargetID()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getWACN() );
- sb.append( "-" );
- sb.append( getSystemID() );
- sb.append( "-" );
- sb.append( getTargetID() );
-
- return sb.toString();
- }
-
- @Override
- public String getToID()
- {
- return getTargetID();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class AuthenticationCommand extends TSBKMessage
+{
+ public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
+ 101,102,103,104,105,106,107 };
+ public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
+ 117,118,119 };
+ public static final int[] TARGET_ID = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public AuthenticationCommand( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.AUTHENTICATION_COMMAND.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " WACN: " + getWACN() );
+ sb.append( " SYS ID: " + getSystemID() );
+ sb.append( " TGT ID: " + getTargetID() );
+
+ return sb.toString();
+ }
+
+ public String getWACN()
+ {
+ return mMessage.getHex( WACN, 5 );
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex( SYSTEM_ID, 3 );
+ }
+
+ public String getTargetID()
+ {
+ return mMessage.getHex( TARGET_ID, 6 );
+ }
+
+ public String getFullTargetID()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getWACN() );
+ sb.append( "-" );
+ sb.append( getSystemID() );
+ sb.append( "-" );
+ sb.append( getTargetID() );
+
+ return sb.toString();
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetID();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/CallAlert.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/CallAlert.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/CallAlert.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/CallAlert.java
index ce95f61f..66388423 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/CallAlert.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/CallAlert.java
@@ -1,62 +1,62 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class CallAlert extends TSBKMessage
-{
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ID = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public CallAlert( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.CALL_ALERT.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SRC ID: " + getSourceID() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getSourceID()
- {
- return mMessage.getHex( SOURCE_ID, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceID();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class CallAlert extends TSBKMessage
+{
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ID = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public CallAlert( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.CALL_ALERT.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SRC ID: " + getSourceID() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getSourceID()
+ {
+ return mMessage.getHex( SOURCE_ID, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceID();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/DenyResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/DenyResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/DenyResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/DenyResponse.java
index 7e3e67fe..775479a9 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/DenyResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/DenyResponse.java
@@ -1,95 +1,95 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.DenyReason;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class DenyResponse extends TSBKMessage
-{
- public static final int ADDITIONAL_INFORMATION_FLAG = 80;
- public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
- public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
-
- public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
- public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
- public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
- 105,106,107,108,109,110,111 };
-
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public DenyResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.DENY_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- sb.append( " REASON:" + getReason().name() );
-
- return sb.toString();
- }
-
- public DenyReason getReason()
- {
- int code = mMessage.getInt( REASON_CODE );
-
- return DenyReason.fromCode( code );
- }
-
- public boolean hasAdditionalInformation()
- {
- return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
- }
-
- public Opcode getServiceType()
- {
- return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
- }
-
- public String getSourceAddress()
- {
- switch( getServiceType() )
- {
- case GROUP_DATA_CHANNEL_GRANT:
- case GROUP_VOICE_CHANNEL_GRANT:
- return mMessage.getHex( SOURCE_GROUP, 4 );
- case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
- case INDIVIDUAL_DATA_CHANNEL_GRANT:
- case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- default:
- break;
- }
-
- return null;
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.DenyReason;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class DenyResponse extends TSBKMessage
+{
+ public static final int ADDITIONAL_INFORMATION_FLAG = 80;
+ public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
+ public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
+
+ public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
+ public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
+ public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
+ 105,106,107,108,109,110,111 };
+
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public DenyResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.DENY_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ sb.append( " REASON:" + getReason().name() );
+
+ return sb.toString();
+ }
+
+ public DenyReason getReason()
+ {
+ int code = mMessage.getInt( REASON_CODE );
+
+ return DenyReason.fromCode( code );
+ }
+
+ public boolean hasAdditionalInformation()
+ {
+ return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
+ }
+
+ public Opcode getServiceType()
+ {
+ return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
+ }
+
+ public String getSourceAddress()
+ {
+ switch( getServiceType() )
+ {
+ case GROUP_DATA_CHANNEL_GRANT:
+ case GROUP_VOICE_CHANNEL_GRANT:
+ return mMessage.getHex( SOURCE_GROUP, 4 );
+ case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
+ case INDIVIDUAL_DATA_CHANNEL_GRANT:
+ case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java
index 92cd17e8..0b73d83e 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/ExtendedFunctionCommand.java
@@ -1,87 +1,87 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.ExtendedFunction;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class ExtendedFunctionCommand extends TSBKMessage
-{
- public static final int[] EXTENDED_FUNCTION = { 80,81,82,83,84,85,86,87,
- 88,89,90,91,92,93,94,95 };
- public static final int[] ARGUMENT = { 96,97,98,99,100,101,102,103,104,105,
- 106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public ExtendedFunctionCommand( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.EXTENDED_FUNCTION_COMMAND.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " EXTENDED FUNCTION:" + getExtendedFunction().getLabel() );
-
- sb.append( " ARGUMENT: " + getTargetAddress() );
-
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public ExtendedFunction getExtendedFunction()
- {
- return ExtendedFunction.fromValue( mMessage.getInt( EXTENDED_FUNCTION ) );
- }
-
- public String getArgument()
- {
- return mMessage.getHex( ARGUMENT, 6 );
- }
-
- public String getSourceAddress()
- {
- switch( getExtendedFunction() )
- {
- case RADIO_CHECK:
- case RADIO_CHECK_ACK:
- case RADIO_DETACH:
- case RADIO_DETACH_ACK:
- case RADIO_INHIBIT:
- case RADIO_INHIBIT_ACK:
- case RADIO_UNINHIBIT:
- case RADIO_UNINHIBIT_ACK:
- return getArgument();
- default:
- break;
- }
-
- return null;
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.ExtendedFunction;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class ExtendedFunctionCommand extends TSBKMessage
+{
+ public static final int[] EXTENDED_FUNCTION = { 80,81,82,83,84,85,86,87,
+ 88,89,90,91,92,93,94,95 };
+ public static final int[] ARGUMENT = { 96,97,98,99,100,101,102,103,104,105,
+ 106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public ExtendedFunctionCommand( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.EXTENDED_FUNCTION_COMMAND.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " EXTENDED FUNCTION:" + getExtendedFunction().getLabel() );
+
+ sb.append( " ARGUMENT: " + getTargetAddress() );
+
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public ExtendedFunction getExtendedFunction()
+ {
+ return ExtendedFunction.fromValue( mMessage.getInt( EXTENDED_FUNCTION ) );
+ }
+
+ public String getArgument()
+ {
+ return mMessage.getHex( ARGUMENT, 6 );
+ }
+
+ public String getSourceAddress()
+ {
+ switch( getExtendedFunction() )
+ {
+ case RADIO_CHECK:
+ case RADIO_CHECK_ACK:
+ case RADIO_DETACH:
+ case RADIO_DETACH_ACK:
+ case RADIO_INHIBIT:
+ case RADIO_INHIBIT_ACK:
+ case RADIO_UNINHIBIT:
+ case RADIO_UNINHIBIT_ACK:
+ return getArgument();
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java
index 683ab076..61065dd5 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationQuery.java
@@ -1,63 +1,63 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupAffiliationQuery extends TSBKMessage
-{
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public GroupAffiliationQuery( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_AFFILIATION_QUERY.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SRC ADDR: " + getSourceAddress() );
-
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupAffiliationQuery extends TSBKMessage
+{
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public GroupAffiliationQuery( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_AFFILIATION_QUERY.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java
index 2c964a0c..190f6de0 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/GroupAffiliationResponse.java
@@ -1,86 +1,86 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.Response;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupAffiliationResponse extends TSBKMessage
-{
- public static final int LOCAL_GLOBAL_AFFILIATION_FLAG = 80;
- public static final int[] AFFILIATION_RESPONSE = { 86,87 };
- public static final int[] ANNOUNCEMENT_GROUP_ADDRESS = { 88,89,90,91,
- 92,93,94,95,96,97,98,99,100,101,102,103 };
- public static final int[] GROUP_ADDRESS = { 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public GroupAffiliationResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_AFFILIATION_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " AFFILIATION:" + getResponse().name() );
- sb.append( " ANNOUNCE GROUP:" + getAnnouncementGroupAddress() );
- sb.append( " GRP ADDR:" + getGroupAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getAffiliationScope()
- {
- return mMessage.get( LOCAL_GLOBAL_AFFILIATION_FLAG) ? " GLOBAL" : " LOCAL";
- }
-
- public Response getResponse()
- {
- int response = mMessage.getInt( AFFILIATION_RESPONSE );
-
- return Response.fromValue( response );
- }
-
- public String getAnnouncementGroupAddress()
- {
- return mMessage.getHex( ANNOUNCEMENT_GROUP_ADDRESS, 4 );
- }
-
- public String getGroupAddress()
- {
- return mMessage.getHex( GROUP_ADDRESS, 4 );
- }
-
- @Override
- public String getFromID()
- {
- return getGroupAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.Response;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupAffiliationResponse extends TSBKMessage
+{
+ public static final int LOCAL_GLOBAL_AFFILIATION_FLAG = 80;
+ public static final int[] AFFILIATION_RESPONSE = { 86,87 };
+ public static final int[] ANNOUNCEMENT_GROUP_ADDRESS = { 88,89,90,91,
+ 92,93,94,95,96,97,98,99,100,101,102,103 };
+ public static final int[] GROUP_ADDRESS = { 104,105,106,107,108,109,110,111,
+ 112,113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public GroupAffiliationResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_AFFILIATION_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " AFFILIATION:" + getResponse().name() );
+ sb.append( " ANNOUNCE GROUP:" + getAnnouncementGroupAddress() );
+ sb.append( " GRP ADDR:" + getGroupAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getAffiliationScope()
+ {
+ return mMessage.get( LOCAL_GLOBAL_AFFILIATION_FLAG) ? " GLOBAL" : " LOCAL";
+ }
+
+ public Response getResponse()
+ {
+ int response = mMessage.getInt( AFFILIATION_RESPONSE );
+
+ return Response.fromValue( response );
+ }
+
+ public String getAnnouncementGroupAddress()
+ {
+ return mMessage.getHex( ANNOUNCEMENT_GROUP_ADDRESS, 4 );
+ }
+
+ public String getGroupAddress()
+ {
+ return mMessage.getHex( GROUP_ADDRESS, 4 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getGroupAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java
index d0b64617..e6c401c2 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdate.java
@@ -1,83 +1,83 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public abstract class IdentifierUpdate extends TSBKMessage implements IBandIdentifier
-{
- public static final int[] IDENTIFIER = { 80,81,82,83 };
-
- public static final int[] CHANNEL_SPACING = { 102,103,104,105,106,107,108,
- 109,110,111 };
-
- public static final int[] BASE_FREQUENCY = { 112,113,114,115,116,117,118,
- 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,
- 137,138,139,140,141,142,143 };
-
- public IdentifierUpdate( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public int getIdentifier()
- {
- return mMessage.getInt( IDENTIFIER );
- }
-
- @Override
- public long getChannelSpacing()
- {
- return mMessage.getLong( CHANNEL_SPACING ) * 125l;
- }
-
- @Override
- public long getBaseFrequency()
- {
- return mMessage.getLong( BASE_FREQUENCY ) * 5l;
- }
-
- @Override
- public abstract long getTransmitOffset();
-
- @Override
- public long getDownlinkFrequency(int channelNumber)
- {
- return getBaseFrequency() + ( channelNumber * getChannelSpacing() );
- }
-
- @Override
- public long getUplinkFrequency(int channelNumber)
- {
- return getDownlinkFrequency(channelNumber) + getTransmitOffset();
- }
-
- @Override
- public boolean isTDMA()
- {
- return false;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public abstract class IdentifierUpdate extends TSBKMessage implements IBandIdentifier
+{
+ public static final int[] IDENTIFIER = { 80,81,82,83 };
+
+ public static final int[] CHANNEL_SPACING = { 102,103,104,105,106,107,108,
+ 109,110,111 };
+
+ public static final int[] BASE_FREQUENCY = { 112,113,114,115,116,117,118,
+ 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,
+ 137,138,139,140,141,142,143 };
+
+ public IdentifierUpdate( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public int getIdentifier()
+ {
+ return mMessage.getInt( IDENTIFIER );
+ }
+
+ @Override
+ public long getChannelSpacing()
+ {
+ return mMessage.getLong( CHANNEL_SPACING ) * 125l;
+ }
+
+ @Override
+ public long getBaseFrequency()
+ {
+ return mMessage.getLong( BASE_FREQUENCY ) * 5l;
+ }
+
+ @Override
+ public abstract long getTransmitOffset();
+
+ @Override
+ public long getDownlinkFrequency(int channelNumber)
+ {
+ return getBaseFrequency() + ( channelNumber * getChannelSpacing() );
+ }
+
+ @Override
+ public long getUplinkFrequency(int channelNumber)
+ {
+ return getDownlinkFrequency(channelNumber) + getTransmitOffset();
+ }
+
+ @Override
+ public boolean isTDMA()
+ {
+ return false;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java
index 0022f082..829aa0b8 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateNonVUHF.java
@@ -1,77 +1,77 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class IdentifierUpdateNonVUHF extends IdentifierUpdate
-{
- public static final int[] BANDWIDTH = { 84,85,86,87,88,89,90,91,92 };
-
- public static final int TRANSMIT_OFFSET_VHF_UHF_SIGN = 93;
-
- public static final int[] TRANSMIT_OFFSET = { 94,95,96,97,98,99,100,101 };
-
- public IdentifierUpdateNonVUHF( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.IDENTIFIER_UPDATE_NON_VUHF.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
- sb.append(toString());
-
- return sb.toString();
- }
-
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( " ID:" + getIdentifier() );
- sb.append( " BASE:" + getBaseFrequency() );
- sb.append( " BANDWIDTH:" + getBandwidth() );
- sb.append( " SPACING:" + getChannelSpacing() );
- sb.append( " OFFSET:" + getTransmitOffset() );
-
- return sb.toString();
- }
-
- /**
- * Channel bandwidth in hertz
- */
- public int getBandwidth()
- {
- return mMessage.getInt( BANDWIDTH ) * 125;
- }
-
- /**
- * Transmit offset in hertz
- */
- @Override
- public long getTransmitOffset()
- {
- long offset = mMessage.getLong( TRANSMIT_OFFSET ) * 250000l;
-
- if( mMessage.get( TRANSMIT_OFFSET_VHF_UHF_SIGN ) )
- {
- return offset;
- }
- else
- {
- return -offset;
- }
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class IdentifierUpdateNonVUHF extends IdentifierUpdate
+{
+ public static final int[] BANDWIDTH = { 84,85,86,87,88,89,90,91,92 };
+
+ public static final int TRANSMIT_OFFSET_VHF_UHF_SIGN = 93;
+
+ public static final int[] TRANSMIT_OFFSET = { 94,95,96,97,98,99,100,101 };
+
+ public IdentifierUpdateNonVUHF( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.IDENTIFIER_UPDATE_NON_VUHF.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+ sb.append(toString());
+
+ return sb.toString();
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " ID:" + getIdentifier() );
+ sb.append( " BASE:" + getBaseFrequency() );
+ sb.append( " BANDWIDTH:" + getBandwidth() );
+ sb.append( " SPACING:" + getChannelSpacing() );
+ sb.append( " OFFSET:" + getTransmitOffset() );
+
+ return sb.toString();
+ }
+
+ /**
+ * Channel bandwidth in hertz
+ */
+ public int getBandwidth()
+ {
+ return mMessage.getInt( BANDWIDTH ) * 125;
+ }
+
+ /**
+ * Transmit offset in hertz
+ */
+ @Override
+ public long getTransmitOffset()
+ {
+ long offset = mMessage.getLong( TRANSMIT_OFFSET ) * 250000l;
+
+ if( mMessage.get( TRANSMIT_OFFSET_VHF_UHF_SIGN ) )
+ {
+ return offset;
+ }
+ else
+ {
+ return -offset;
+ }
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java
index fc3b2d95..cd4fd085 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateTDMA.java
@@ -1,186 +1,186 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class IdentifierUpdateTDMA extends IdentifierUpdate
-{
- public static final int[] CHANNEL_TYPE = { 84,85,86,87 };
- public static final int TRANSMIT_OFFSET_SIGN = 88;
- public static final int[] TRANSMIT_OFFSET = { 89,90,91,92,93,94,95,96,97,98,
- 99,100,101 };
-
- public IdentifierUpdateTDMA( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.IDENTIFIER_UPDATE_TDMA.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
- sb.append(toString());
-
- return sb.toString();
- }
-
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( " ID:" + getIdentifier() );
- sb.append( " BASE:" + getBaseFrequency() );
- sb.append( " BANDWIDTH:" + getBandwidth() );
- sb.append( " SPACING:" + getChannelSpacing() );
- sb.append( " OFFSET:" + getTransmitOffset() );
- sb.append( " TYPE:" + getChannelType().toString() );
-
- return sb.toString();
- }
-
- public ChannelType getChannelType()
- {
- return ChannelType.fromValue( mMessage.getInt( CHANNEL_TYPE) );
- }
-
- /**
- * Channel bandwidth in hertz
- */
- public int getBandwidth()
- {
- return getChannelType().getBandwidth();
- }
-
- /**
- * Transmit offset in hertz
- */
- @Override
- public long getTransmitOffset()
- {
- long offset = mMessage.getLong( TRANSMIT_OFFSET ) *
- getChannelSpacing();
-
- if( mMessage.get( TRANSMIT_OFFSET_SIGN ) )
- {
- return offset;
- }
- else
- {
- return -offset;
- }
- }
-
- @Override
- public long getDownlinkFrequency(int channelNumber)
- {
- if(isTDMA())
- {
- return getBaseFrequency() + ( (channelNumber / getChannelType().getSlotsPerCarrier()) * getChannelSpacing() );
- }
- else
- {
- return super.getDownlinkFrequency(channelNumber);
- }
- }
-
- @Override
- public boolean isTDMA()
- {
- return getChannelType().getAccessType() == AccessType.TDMA;
- }
-
- public enum ChannelType
- {
- TYPE_0( AccessType.FDMA, 12500, 1, Vocoder.HALF_RATE ),
- TYPE_1( AccessType.FDMA, 12500, 1, Vocoder.FULL_RATE ),
- TYPE_2( AccessType.FDMA, 6250, 1, Vocoder.HALF_RATE ),
- TYPE_3( AccessType.TDMA, 12500, 2, Vocoder.HALF_RATE ),
- TYPE_4( AccessType.TDMA, 25000, 4, Vocoder.HALF_RATE ),
- TYPE_5( AccessType.TDMA, 12500, 2, Vocoder.HALF_RATE ), //HD8PSK simulcast
- UNKNOWN( AccessType.UNKNOWN, 0, 0, Vocoder.HALF_RATE );
-
- private AccessType mAccessType;
- private int mBandwidth;
- private int mSlotsPerCarrier;
- private Vocoder mVocoder;
-
- private ChannelType( AccessType accessType,
- int bandwidth,
- int slots,
- Vocoder vocoder )
- {
- mAccessType = accessType;
- mBandwidth = bandwidth;
- mSlotsPerCarrier = slots;
- mVocoder = vocoder;
- }
-
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
-
- if( this.equals( TYPE_5 ) )
- {
- sb.append("H-D8PSK SIMULCAST " );
- }
-
- sb.append( mAccessType.name() );
- sb.append( " BANDWIDTH:" + mBandwidth );
- sb.append( " TIMESLOTS PER CARRIER:" + mSlotsPerCarrier );
- sb.append( " VOCODER:" + mVocoder.name() );
-
- return sb.toString();
- }
-
- public static ChannelType fromValue( int value )
- {
- if( 0 <= value && value <= 5 )
- {
- return ChannelType.values()[ value ];
- }
-
- return ChannelType.UNKNOWN;
- }
-
- public AccessType getAccessType()
- {
- return mAccessType;
- }
-
- public int getBandwidth()
- {
- return mBandwidth;
- }
-
- public int getSlotsPerCarrier()
- {
- return mSlotsPerCarrier;
- }
-
- public Vocoder getVocoder()
- {
- return mVocoder;
- }
- }
-
- public enum AccessType
- {
- FDMA,TDMA,UNKNOWN;
- }
-
- public enum Vocoder
- {
- HALF_RATE, FULL_RATE;
- }
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class IdentifierUpdateTDMA extends IdentifierUpdate
+{
+ public static final int[] CHANNEL_TYPE = { 84,85,86,87 };
+ public static final int TRANSMIT_OFFSET_SIGN = 88;
+ public static final int[] TRANSMIT_OFFSET = { 89,90,91,92,93,94,95,96,97,98,
+ 99,100,101 };
+
+ public IdentifierUpdateTDMA( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.IDENTIFIER_UPDATE_TDMA.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+ sb.append(toString());
+
+ return sb.toString();
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " ID:" + getIdentifier() );
+ sb.append( " BASE:" + getBaseFrequency() );
+ sb.append( " BANDWIDTH:" + getBandwidth() );
+ sb.append( " SPACING:" + getChannelSpacing() );
+ sb.append( " OFFSET:" + getTransmitOffset() );
+ sb.append( " TYPE:" + getChannelType().toString() );
+
+ return sb.toString();
+ }
+
+ public ChannelType getChannelType()
+ {
+ return ChannelType.fromValue( mMessage.getInt( CHANNEL_TYPE) );
+ }
+
+ /**
+ * Channel bandwidth in hertz
+ */
+ public int getBandwidth()
+ {
+ return getChannelType().getBandwidth();
+ }
+
+ /**
+ * Transmit offset in hertz
+ */
+ @Override
+ public long getTransmitOffset()
+ {
+ long offset = mMessage.getLong( TRANSMIT_OFFSET ) *
+ getChannelSpacing();
+
+ if( mMessage.get( TRANSMIT_OFFSET_SIGN ) )
+ {
+ return offset;
+ }
+ else
+ {
+ return -offset;
+ }
+ }
+
+ @Override
+ public long getDownlinkFrequency(int channelNumber)
+ {
+ if(isTDMA())
+ {
+ return getBaseFrequency() + ( (channelNumber / getChannelType().getSlotsPerCarrier()) * getChannelSpacing() );
+ }
+ else
+ {
+ return super.getDownlinkFrequency(channelNumber);
+ }
+ }
+
+ @Override
+ public boolean isTDMA()
+ {
+ return getChannelType().getAccessType() == AccessType.TDMA;
+ }
+
+ public enum ChannelType
+ {
+ TYPE_0( AccessType.FDMA, 12500, 1, Vocoder.HALF_RATE ),
+ TYPE_1( AccessType.FDMA, 12500, 1, Vocoder.FULL_RATE ),
+ TYPE_2( AccessType.FDMA, 6250, 1, Vocoder.HALF_RATE ),
+ TYPE_3( AccessType.TDMA, 12500, 2, Vocoder.HALF_RATE ),
+ TYPE_4( AccessType.TDMA, 25000, 4, Vocoder.HALF_RATE ),
+ TYPE_5( AccessType.TDMA, 12500, 2, Vocoder.HALF_RATE ), //HD8PSK simulcast
+ UNKNOWN( AccessType.UNKNOWN, 0, 0, Vocoder.HALF_RATE );
+
+ private AccessType mAccessType;
+ private int mBandwidth;
+ private int mSlotsPerCarrier;
+ private Vocoder mVocoder;
+
+ private ChannelType( AccessType accessType,
+ int bandwidth,
+ int slots,
+ Vocoder vocoder )
+ {
+ mAccessType = accessType;
+ mBandwidth = bandwidth;
+ mSlotsPerCarrier = slots;
+ mVocoder = vocoder;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ if( this.equals( TYPE_5 ) )
+ {
+ sb.append("H-D8PSK SIMULCAST " );
+ }
+
+ sb.append( mAccessType.name() );
+ sb.append( " BANDWIDTH:" + mBandwidth );
+ sb.append( " TIMESLOTS PER CARRIER:" + mSlotsPerCarrier );
+ sb.append( " VOCODER:" + mVocoder.name() );
+
+ return sb.toString();
+ }
+
+ public static ChannelType fromValue( int value )
+ {
+ if( 0 <= value && value <= 5 )
+ {
+ return ChannelType.values()[ value ];
+ }
+
+ return ChannelType.UNKNOWN;
+ }
+
+ public AccessType getAccessType()
+ {
+ return mAccessType;
+ }
+
+ public int getBandwidth()
+ {
+ return mBandwidth;
+ }
+
+ public int getSlotsPerCarrier()
+ {
+ return mSlotsPerCarrier;
+ }
+
+ public Vocoder getVocoder()
+ {
+ return mVocoder;
+ }
+ }
+
+ public enum AccessType
+ {
+ FDMA,TDMA,UNKNOWN;
+ }
+
+ public enum Vocoder
+ {
+ HALF_RATE, FULL_RATE;
+ }
}
\ No newline at end of file
diff --git a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java
index fb7c7098..f9edd2e7 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/IdentifierUpdateVUHF.java
@@ -1,89 +1,89 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class IdentifierUpdateVUHF extends IdentifierUpdate
-{
- public static final int[] BANDWIDTH = { 84,85,86,87 };
-
- public static final int TRANSMIT_OFFSET_VHF_UHF_SIGN = 88;
-
- public static final int[] TRANSMIT_OFFSET = { 89,90,91,92,93,94,95,96,97,98,
- 99,100,101 };
-
- public IdentifierUpdateVUHF( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.IDENTIFIER_UPDATE_VHF_UHF_BANDS.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
- sb.append(toString());
-
- return sb.toString();
- }
-
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( " ID:" + getIdentifier() );
- sb.append( " BASE:" + getBaseFrequency() );
- sb.append( " BANDWIDTH:" + getBandwidth() );
- sb.append( " SPACING:" + getChannelSpacing() );
- sb.append( " OFFSET:" + getTransmitOffset() );
-
- return sb.toString();
- }
-
- /**
- * Channel bandwidth in hertz
- */
- public int getBandwidth()
- {
- int bandwidth = mMessage.getInt( BANDWIDTH );
-
- switch( bandwidth )
- {
- case 4:
- return 6250;
- case 5:
- return 12500;
- default:
- return 0;
- }
- }
-
- /**
- * Transmit offset in hertz
- */
- @Override
- public long getTransmitOffset()
- {
- long offset = mMessage.getLong( TRANSMIT_OFFSET ) *
- getChannelSpacing();
-
- if( mMessage.get( TRANSMIT_OFFSET_VHF_UHF_SIGN ) )
- {
- return offset;
- }
- else
- {
- return -offset;
- }
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class IdentifierUpdateVUHF extends IdentifierUpdate
+{
+ public static final int[] BANDWIDTH = { 84,85,86,87 };
+
+ public static final int TRANSMIT_OFFSET_VHF_UHF_SIGN = 88;
+
+ public static final int[] TRANSMIT_OFFSET = { 89,90,91,92,93,94,95,96,97,98,
+ 99,100,101 };
+
+ public IdentifierUpdateVUHF( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.IDENTIFIER_UPDATE_VHF_UHF_BANDS.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+ sb.append(toString());
+
+ return sb.toString();
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " ID:" + getIdentifier() );
+ sb.append( " BASE:" + getBaseFrequency() );
+ sb.append( " BANDWIDTH:" + getBandwidth() );
+ sb.append( " SPACING:" + getChannelSpacing() );
+ sb.append( " OFFSET:" + getTransmitOffset() );
+
+ return sb.toString();
+ }
+
+ /**
+ * Channel bandwidth in hertz
+ */
+ public int getBandwidth()
+ {
+ int bandwidth = mMessage.getInt( BANDWIDTH );
+
+ switch( bandwidth )
+ {
+ case 4:
+ return 6250;
+ case 5:
+ return 12500;
+ default:
+ return 0;
+ }
+ }
+
+ /**
+ * Transmit offset in hertz
+ */
+ @Override
+ public long getTransmitOffset()
+ {
+ long offset = mMessage.getLong( TRANSMIT_OFFSET ) *
+ getChannelSpacing();
+
+ if( mMessage.get( TRANSMIT_OFFSET_VHF_UHF_SIGN ) )
+ {
+ return offset;
+ }
+ else
+ {
+ return -offset;
+ }
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java
index aa84caf6..06154d45 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/LocationRegistrationResponse.java
@@ -1,78 +1,78 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.Response;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class LocationRegistrationResponse extends TSBKMessage
-{
- public static final int[] REGISTRATION_RESPONSE = { 86,87 };
- public static final int[] GROUP_ADDRESS = { 88,89,90,91,92,93,94,95,96,97,
- 98,99,100,101,102,103 };
- public static final int[] RFSS_ID = { 104,105,106,107,108,109,110,111 };
- public static final int[] SITE_ID = { 112,113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public LocationRegistrationResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.LOCATION_REGISTRATION_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " REGISTRATION:" + getResponse().name() );
- sb.append( " GROUP:" + getGroupAddress() );
- sb.append( " RFSS: " + getRFSSID() );
- sb.append( " SITE: " + getSiteID() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public Response getResponse()
- {
- return Response.fromValue( mMessage.getInt( REGISTRATION_RESPONSE ) );
- }
-
- public String getGroupAddress()
- {
- return mMessage.getHex( GROUP_ADDRESS, 4 );
- }
-
- public String getRFSSID()
- {
- return mMessage.getHex( RFSS_ID, 2 );
- }
-
- public String getSiteID()
- {
- return mMessage.getHex( SITE_ID, 2 );
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.Response;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class LocationRegistrationResponse extends TSBKMessage
+{
+ public static final int[] REGISTRATION_RESPONSE = { 86,87 };
+ public static final int[] GROUP_ADDRESS = { 88,89,90,91,92,93,94,95,96,97,
+ 98,99,100,101,102,103 };
+ public static final int[] RFSS_ID = { 104,105,106,107,108,109,110,111 };
+ public static final int[] SITE_ID = { 112,113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public LocationRegistrationResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.LOCATION_REGISTRATION_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " REGISTRATION:" + getResponse().name() );
+ sb.append( " GROUP:" + getGroupAddress() );
+ sb.append( " RFSS: " + getRFSSID() );
+ sb.append( " SITE: " + getSiteID() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public Response getResponse()
+ {
+ return Response.fromValue( mMessage.getInt( REGISTRATION_RESPONSE ) );
+ }
+
+ public String getGroupAddress()
+ {
+ return mMessage.getHex( GROUP_ADDRESS, 4 );
+ }
+
+ public String getRFSSID()
+ {
+ return mMessage.getHex( RFSS_ID, 2 );
+ }
+
+ public String getSiteID()
+ {
+ return mMessage.getHex( SITE_ID, 2 );
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java
index c3a17372..cacbdcd8 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/MessageUpdate.java
@@ -1,70 +1,70 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class MessageUpdate extends TSBKMessage
-{
- public static final int[] SHORT_DATA_MESSAGE = { 80,81,82,83,84,85,86,87,88,89,90,91,
- 92,93,94,95 };
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public MessageUpdate( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.MESSAGE_UPDATE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " MSG:" + getShortDataMessage() );
- sb.append( " SRC ADDR: " + getSourceAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getShortDataMessage()
- {
- return mMessage.getHex( SHORT_DATA_MESSAGE, 4 );
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class MessageUpdate extends TSBKMessage
+{
+ public static final int[] SHORT_DATA_MESSAGE = { 80,81,82,83,84,85,86,87,88,89,90,91,
+ 92,93,94,95 };
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public MessageUpdate( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.MESSAGE_UPDATE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " MSG:" + getShortDataMessage() );
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getShortDataMessage()
+ {
+ return mMessage.getHex( SHORT_DATA_MESSAGE, 4 );
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java
index a911693e..5d3d81a9 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/NetworkStatusBroadcast.java
@@ -1,147 +1,147 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.control;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.P25NetworkCallsign;
-
-public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierReceiver
-{
- public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
- public static final int[] WACN = {88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107};
- public static final int[] SYSTEM_ID = {108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119};
- public static final int[] IDENTIFIER = {120, 121, 122, 123};
- public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
- public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate;
-
- public NetworkStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.NETWORK_STATUS_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" LRA:" + getLocationRegistrationArea());
-
- sb.append(" WACN:" + getWACN());
-
- sb.append(" SYS:" + getSystemID());
-
- sb.append(" CTRL CHAN:" + getIdentifier() + "-" + getChannel());
-
- sb.append(" DN:" + getDownlinkFrequency());
-
- sb.append(" UP:" + getUplinkFrequency());
-
- sb.append(" SYS SVC CLASS:" +
- SystemService.toString(getSystemServiceClass()));
-
- return sb.toString();
- }
-
- public String getLocationRegistrationArea()
- {
- return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
- }
-
- public String getWACN()
- {
- return mMessage.getHex(WACN, 5);
- }
-
- public String getSystemID()
- {
- return mMessage.getHex(SYSTEM_ID, 3);
- }
-
- public String getNetworkCallsign()
- {
- return P25NetworkCallsign.getCallsign(mMessage.getInt(WACN),
- mMessage.getInt(SYSTEM_ID));
- }
-
- public int getIdentifier()
- {
- return mMessage.getInt(IDENTIFIER);
- }
-
- public int getChannel()
- {
- return mMessage.getInt(CHANNEL);
- }
-
- public int getSystemServiceClass()
- {
- return mMessage.getInt(SYSTEM_SERVICE_CLASS);
- }
-
- public long getDownlinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getDownlinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getUplinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- /* we're only expecting 1 identifier, so use whatever is received */
- mIdentifierUpdate = message;
- }
-
- public int[] getIdentifiers()
- {
- int[] idens = new int[1];
-
- idens[0] = getIdentifier();
-
- return idens;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.control;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.P25NetworkCallsign;
+
+public class NetworkStatusBroadcast extends TSBKMessage implements IdentifierReceiver
+{
+ public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
+ public static final int[] WACN = {88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107};
+ public static final int[] SYSTEM_ID = {108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119};
+ public static final int[] IDENTIFIER = {120, 121, 122, 123};
+ public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
+ public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate;
+
+ public NetworkStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.NETWORK_STATUS_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" LRA:" + getLocationRegistrationArea());
+
+ sb.append(" WACN:" + getWACN());
+
+ sb.append(" SYS:" + getSystemID());
+
+ sb.append(" CTRL CHAN:" + getIdentifier() + "-" + getChannel());
+
+ sb.append(" DN:" + getDownlinkFrequency());
+
+ sb.append(" UP:" + getUplinkFrequency());
+
+ sb.append(" SYS SVC CLASS:" +
+ SystemService.toString(getSystemServiceClass()));
+
+ return sb.toString();
+ }
+
+ public String getLocationRegistrationArea()
+ {
+ return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
+ }
+
+ public String getWACN()
+ {
+ return mMessage.getHex(WACN, 5);
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex(SYSTEM_ID, 3);
+ }
+
+ public String getNetworkCallsign()
+ {
+ return P25NetworkCallsign.getCallsign(mMessage.getInt(WACN),
+ mMessage.getInt(SYSTEM_ID));
+ }
+
+ public int getIdentifier()
+ {
+ return mMessage.getInt(IDENTIFIER);
+ }
+
+ public int getChannel()
+ {
+ return mMessage.getInt(CHANNEL);
+ }
+
+ public int getSystemServiceClass()
+ {
+ return mMessage.getInt(SYSTEM_SERVICE_CLASS);
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getDownlinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getUplinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ /* we're only expecting 1 identifier, so use whatever is received */
+ mIdentifierUpdate = message;
+ }
+
+ public int[] getIdentifiers()
+ {
+ int[] idens = new int[1];
+
+ idens[0] = getIdentifier();
+
+ return idens;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java
index 38134ae3..7e2efe7d 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/ProtectionParameterUpdate.java
@@ -1,66 +1,66 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Encryption;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class ProtectionParameterUpdate extends TSBKMessage
-{
- public static final int[] ALGORITHM_ID = { 96,97,98,99,100,101,102,103 };
- public static final int[] KEY_ID = { 104,105,106,107,108,109,110,111,112,
- 113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public ProtectionParameterUpdate( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.PROTECTION_PARAMETER_UPDATE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- sb.append( " ENCRYPTION ALGORITHM:" + getAlgorithm().name() );
-
- sb.append( " KEY:" + getKeyID() );
-
- return sb.toString();
- }
-
- public Encryption getAlgorithm()
- {
- return Encryption.fromValue( mMessage.getInt( ALGORITHM_ID ) );
- }
-
- public String getKeyID()
- {
- return mMessage.getHex( KEY_ID, 4 );
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Encryption;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class ProtectionParameterUpdate extends TSBKMessage
+{
+ public static final int[] ALGORITHM_ID = { 96,97,98,99,100,101,102,103 };
+ public static final int[] KEY_ID = { 104,105,106,107,108,109,110,111,112,
+ 113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public ProtectionParameterUpdate( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.PROTECTION_PARAMETER_UPDATE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ sb.append( " ENCRYPTION ALGORITHM:" + getAlgorithm().name() );
+
+ sb.append( " KEY:" + getKeyID() );
+
+ return sb.toString();
+ }
+
+ public Encryption getAlgorithm()
+ {
+ return Encryption.fromValue( mMessage.getInt( ALGORITHM_ID ) );
+ }
+
+ public String getKeyID()
+ {
+ return mMessage.getHex( KEY_ID, 4 );
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java
index 4a7de58b..f56279be 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/QueuedResponse.java
@@ -1,96 +1,96 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.QueuedResponseReason;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class QueuedResponse extends TSBKMessage
-{
- public static final int ADDITIONAL_INFORMATION_FLAG = 80;
- public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
- public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
-
- public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
- public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
- public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
- 105,106,107,108,109,110,111 };
-
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public QueuedResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.QUEUED_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- sb.append( " REASON:" + getReason().name() );
-
- return sb.toString();
- }
-
- public QueuedResponseReason getReason()
- {
- int code = mMessage.getInt( REASON_CODE );
-
- return QueuedResponseReason.fromCode( code );
- }
-
- public boolean hasAdditionalInformation()
- {
- return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
- }
-
- public Opcode getServiceType()
- {
- return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
- }
-
- public String getSourceAddress()
- {
- switch( getServiceType() )
- {
- case GROUP_DATA_CHANNEL_GRANT:
- case GROUP_VOICE_CHANNEL_GRANT:
- return mMessage.getHex( SOURCE_GROUP, 4 );
- case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
- case INDIVIDUAL_DATA_CHANNEL_GRANT:
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
- return "DELAY:" + ( mMessage.getInt( SOURCE_ADDRESS ) * 5 ) + "SECS";
- default:
- break;
- }
-
- return null;
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.QueuedResponseReason;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class QueuedResponse extends TSBKMessage
+{
+ public static final int ADDITIONAL_INFORMATION_FLAG = 80;
+ public static final int[] SERVICE_TYPE = { 82,83,84,85,86,87 };
+ public static final int[] REASON_CODE = { 88,89,90,91,92,93,94,95 };
+
+ public static final int[] CALL_OPTIONS = { 96,97,98,99,100,101,102,103 };
+ public static final int[] SOURCE_GROUP = { 104,105,106,107,108,109,110,111 };
+ public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,104,
+ 105,106,107,108,109,110,111 };
+
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public QueuedResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.QUEUED_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ sb.append( " REASON:" + getReason().name() );
+
+ return sb.toString();
+ }
+
+ public QueuedResponseReason getReason()
+ {
+ int code = mMessage.getInt( REASON_CODE );
+
+ return QueuedResponseReason.fromCode( code );
+ }
+
+ public boolean hasAdditionalInformation()
+ {
+ return mMessage.get( ADDITIONAL_INFORMATION_FLAG );
+ }
+
+ public Opcode getServiceType()
+ {
+ return Opcode.fromValue( mMessage.getInt( SERVICE_TYPE ) );
+ }
+
+ public String getSourceAddress()
+ {
+ switch( getServiceType() )
+ {
+ case GROUP_DATA_CHANNEL_GRANT:
+ case GROUP_VOICE_CHANNEL_GRANT:
+ return mMessage.getHex( SOURCE_GROUP, 4 );
+ case UNIT_TO_UNIT_VOICE_CHANNEL_GRANT:
+ case INDIVIDUAL_DATA_CHANNEL_GRANT:
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ case TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT:
+ return "DELAY:" + ( mMessage.getInt( SOURCE_ADDRESS ) * 5 ) + "SECS";
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java
index 8e5ed2d3..38d52eae 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/RFSSStatusBroadcast.java
@@ -1,158 +1,158 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.control;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-
-public class RFSSStatusBroadcast extends TSBKMessage implements IdentifierReceiver
-{
- public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
- public static final int ACTIVE_NETWORK_CONNECTION_FLAG = 91;
- public static final int[] SYSTEM_ID = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
- public static final int[] RFSS_ID = {104, 105, 106, 107, 108, 109, 110, 111};
- public static final int[] SITE_ID = {112, 113, 114, 115, 116, 117, 118, 119};
- public static final int[] IDENTIFIER = {120, 121, 122, 123};
- public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
- public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate;
-
- public RFSSStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.RFSS_STATUS_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" LRA:" + getLocationRegistrationArea());
-
- sb.append(" SYSID:" + getSystemID());
-
- sb.append(" RFSS:" + getRFSubsystemID());
-
- sb.append(" SITE:" + getSiteID());
-
- sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
-
- sb.append(" DN:" + getDownlinkFrequency());
-
- sb.append(" UP:" + getUplinkFrequency());
-
- if(hasActiveNetworkConnection())
- {
- sb.append(" ACTIVE-NETWORK-CONN");
- }
-
- sb.append(SystemService.toString(getSystemServiceClass()));
-
- return sb.toString();
- }
-
- public String getLocationRegistrationArea()
- {
- return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
- }
-
- public boolean hasActiveNetworkConnection()
- {
- return mMessage.get(ACTIVE_NETWORK_CONNECTION_FLAG);
- }
-
- public String getSystemID()
- {
- return mMessage.getHex(SYSTEM_ID, 3);
- }
-
- public String getRFSubsystemID()
- {
- return mMessage.getHex(RFSS_ID, 2);
- }
-
- public String getSiteID()
- {
- return mMessage.getHex(SITE_ID, 2);
- }
-
- public int getIdentifier()
- {
- return mMessage.getInt(IDENTIFIER);
- }
-
- public int getChannel()
- {
- return mMessage.getInt(CHANNEL);
- }
-
- public int getSystemServiceClass()
- {
- return mMessage.getInt(SYSTEM_SERVICE_CLASS);
- }
-
- public long getDownlinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getDownlinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency()
- {
- if(mIdentifierUpdate != null)
- {
- return mIdentifierUpdate.getUplinkFrequency(getChannel());
- }
-
- return 0;
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- /* we're only expecting 1 identifier, so use whatever is received */
- mIdentifierUpdate = message;
- }
-
- public int[] getIdentifiers()
- {
- int[] idens = new int[1];
-
- idens[0] = getIdentifier();
-
- return idens;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.control;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+
+public class RFSSStatusBroadcast extends TSBKMessage implements IdentifierReceiver
+{
+ public static final int[] LOCATION_REGISTRATION_AREA = {80, 81, 82, 83, 84, 85, 86, 87};
+ public static final int ACTIVE_NETWORK_CONNECTION_FLAG = 91;
+ public static final int[] SYSTEM_ID = {92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103};
+ public static final int[] RFSS_ID = {104, 105, 106, 107, 108, 109, 110, 111};
+ public static final int[] SITE_ID = {112, 113, 114, 115, 116, 117, 118, 119};
+ public static final int[] IDENTIFIER = {120, 121, 122, 123};
+ public static final int[] CHANNEL = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
+ public static final int[] SYSTEM_SERVICE_CLASS = {136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate;
+
+ public RFSSStatusBroadcast(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.RFSS_STATUS_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" LRA:" + getLocationRegistrationArea());
+
+ sb.append(" SYSID:" + getSystemID());
+
+ sb.append(" RFSS:" + getRFSubsystemID());
+
+ sb.append(" SITE:" + getSiteID());
+
+ sb.append(" CHAN:" + getIdentifier() + "-" + getChannel());
+
+ sb.append(" DN:" + getDownlinkFrequency());
+
+ sb.append(" UP:" + getUplinkFrequency());
+
+ if(hasActiveNetworkConnection())
+ {
+ sb.append(" ACTIVE-NETWORK-CONN");
+ }
+
+ sb.append(SystemService.toString(getSystemServiceClass()));
+
+ return sb.toString();
+ }
+
+ public String getLocationRegistrationArea()
+ {
+ return mMessage.getHex(LOCATION_REGISTRATION_AREA, 2);
+ }
+
+ public boolean hasActiveNetworkConnection()
+ {
+ return mMessage.get(ACTIVE_NETWORK_CONNECTION_FLAG);
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex(SYSTEM_ID, 3);
+ }
+
+ public String getRFSubsystemID()
+ {
+ return mMessage.getHex(RFSS_ID, 2);
+ }
+
+ public String getSiteID()
+ {
+ return mMessage.getHex(SITE_ID, 2);
+ }
+
+ public int getIdentifier()
+ {
+ return mMessage.getInt(IDENTIFIER);
+ }
+
+ public int getChannel()
+ {
+ return mMessage.getInt(CHANNEL);
+ }
+
+ public int getSystemServiceClass()
+ {
+ return mMessage.getInt(SYSTEM_SERVICE_CLASS);
+ }
+
+ public long getDownlinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getDownlinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency()
+ {
+ if(mIdentifierUpdate != null)
+ {
+ return mIdentifierUpdate.getUplinkFrequency(getChannel());
+ }
+
+ return 0;
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ /* we're only expecting 1 identifier, so use whatever is received */
+ mIdentifierUpdate = message;
+ }
+
+ public int[] getIdentifiers()
+ {
+ int[] idens = new int[1];
+
+ idens[0] = getIdentifier();
+
+ return idens;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java
index e4df302e..1b78429b 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/RadioUnitMonitorCommand.java
@@ -1,69 +1,69 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class RadioUnitMonitorCommand extends TSBKMessage
-{
- public static final int[] TX_MULTIPLIER = { 94,95 };
- public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public RadioUnitMonitorCommand( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.RADIO_UNIT_MONITOR_COMMAND.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " MULT:" + getTransmitMultiplier() );
- sb.append( " SRC ADDR: " + getSourceAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public int getTransmitMultiplier()
- {
- return mMessage.getInt( TX_MULTIPLIER );
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class RadioUnitMonitorCommand extends TSBKMessage
+{
+ public static final int[] TX_MULTIPLIER = { 94,95 };
+ public static final int[] SOURCE_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public RadioUnitMonitorCommand( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.RADIO_UNIT_MONITOR_COMMAND.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " MULT:" + getTransmitMultiplier() );
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public int getTransmitMultiplier()
+ {
+ return mMessage.getInt( TX_MULTIPLIER );
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java
index f1b19911..8f9235e8 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/RoamingAddressCommand.java
@@ -1,72 +1,72 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.StackOperation;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class RoamingAddressCommand extends TSBKMessage
-{
- public static final int[] STACK_OPERATION = { 80,81,82,83,84,85,86,87 };
- public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
- 101,102,103,104,105,106,107 };
- public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
- 117,118,119 };
- public static final int[] TARGET_ID = { 120,121,122,123,124,125,126,127,128,
- 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public RoamingAddressCommand( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.ROAMING_ADDRESS_COMMAND.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( getStackOperation().name() );
- sb.append( " WACN:" + getWACN() );
- sb.append( " SYSTEM: " + getSystemID() );
- sb.append( " TGT ID: " + getTargetID() );
-
- return sb.toString();
- }
-
- public StackOperation getStackOperation()
- {
- return StackOperation.fromValue( mMessage.getInt( STACK_OPERATION ) );
- }
-
- public String getWACN()
- {
- return mMessage.getHex( WACN, 5 );
- }
-
- public String getSystemID()
- {
- return mMessage.getHex( SYSTEM_ID, 3 );
- }
-
- public String getTargetID()
- {
- return mMessage.getHex( TARGET_ID, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetID();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.StackOperation;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class RoamingAddressCommand extends TSBKMessage
+{
+ public static final int[] STACK_OPERATION = { 80,81,82,83,84,85,86,87 };
+ public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
+ 101,102,103,104,105,106,107 };
+ public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,116,
+ 117,118,119 };
+ public static final int[] TARGET_ID = { 120,121,122,123,124,125,126,127,128,
+ 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public RoamingAddressCommand( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.ROAMING_ADDRESS_COMMAND.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( getStackOperation().name() );
+ sb.append( " WACN:" + getWACN() );
+ sb.append( " SYSTEM: " + getSystemID() );
+ sb.append( " TGT ID: " + getTargetID() );
+
+ return sb.toString();
+ }
+
+ public StackOperation getStackOperation()
+ {
+ return StackOperation.fromValue( mMessage.getInt( STACK_OPERATION ) );
+ }
+
+ public String getWACN()
+ {
+ return mMessage.getHex( WACN, 5 );
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex( SYSTEM_ID, 3 );
+ }
+
+ public String getTargetID()
+ {
+ return mMessage.getHex( TARGET_ID, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetID();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java
index e120c785..b72de6c4 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcast.java
@@ -1,266 +1,266 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.control;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.IBandIdentifier;
-import module.decode.p25.message.IdentifierReceiver;
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-
-public class SecondaryControlChannelBroadcast extends TSBKMessage implements IdentifierReceiver, Comparable
-{
- public static final int[] RFSS_ID = {80, 81, 82, 83, 84, 85, 86, 87};
- public static final int[] SITE_ID = {88, 89, 90, 91, 92, 93, 94, 95};
- public static final int[] IDENTIFIER_1 = {96, 97, 98, 99};
- public static final int[] CHANNEL_1 = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
- public static final int[] SYSTEM_SERVICE_CLASS_1 = {112, 113, 114, 115, 116, 117, 118, 119};
- public static final int[] IDENTIFIER_2 = {120, 121, 122, 123};
- public static final int[] CHANNEL_2 = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
- public static final int[] SYSTEM_SERVICE_CLASS_2 = {136, 137, 138, 139, 140, 141, 142, 143};
-
- private IBandIdentifier mIdentifierUpdate1;
- private IBandIdentifier mIdentifierUpdate2;
-
- public SecondaryControlChannelBroadcast(BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.SECONDARY_CONTROL_CHANNEL_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append(getMessageStub());
-
- sb.append(" SITE:" + getRFSS() + "-" + getSiteID());
-
- sb.append(" CHAN1:" + getIdentifier1() + "-" + getChannel1());
-
- sb.append(" DN1:" + getDownlinkFrequency1());
-
- sb.append(" UP1:" + getUplinkFrequency1());
-
- sb.append(" SVC1:" + SystemService.toString(getSystemServiceClass1()));
-
- if(hasChannel2())
- {
- sb.append(" CHAN2:" + getIdentifier2() + "-" + getChannel2());
-
- sb.append(" DN2:" + getDownlinkFrequency2());
-
- sb.append(" UP2:" + getUplinkFrequency2());
-
- sb.append(" SVC2:" + SystemService.toString(getSystemServiceClass2()));
- }
-
- return sb.toString();
- }
-
- public String getRFSS()
- {
- return mMessage.getHex(RFSS_ID, 2);
- }
-
- public String getSiteID()
- {
- return mMessage.getHex(SITE_ID, 2);
- }
-
- public int getIdentifier1()
- {
- return mMessage.getInt(IDENTIFIER_1);
- }
-
- public int getChannel1()
- {
- return mMessage.getInt(CHANNEL_1);
- }
-
- public int getSystemServiceClass1()
- {
- return mMessage.getInt(SYSTEM_SERVICE_CLASS_1);
- }
-
- public int getIdentifier2()
- {
- return mMessage.getInt(IDENTIFIER_2);
- }
-
- public int getChannel2()
- {
- return mMessage.getInt(CHANNEL_2);
- }
-
- public int getSystemServiceClass2()
- {
- return mMessage.getInt(SYSTEM_SERVICE_CLASS_2);
- }
-
- public boolean hasChannel2()
- {
- return getSystemServiceClass2() != 0;
- }
-
-
- public long getDownlinkFrequency1()
- {
- if(mIdentifierUpdate1 != null)
- {
- return mIdentifierUpdate1.getDownlinkFrequency(getChannel1());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency1()
- {
- if(mIdentifierUpdate1 != null)
- {
- return mIdentifierUpdate1.getUplinkFrequency(getChannel1());
- }
-
- return 0;
- }
-
- public long getDownlinkFrequency2()
- {
- if(mIdentifierUpdate2 != null)
- {
- return mIdentifierUpdate2.getDownlinkFrequency(getChannel2());
- }
-
- return 0;
- }
-
- public long getUplinkFrequency2()
- {
- if(mIdentifierUpdate2 != null)
- {
- return mIdentifierUpdate2.getUplinkFrequency(getChannel2());
- }
-
- return 0;
- }
-
- @Override
- public void setIdentifierMessage(int identifier, IBandIdentifier message)
- {
- if(identifier == getIdentifier1())
- {
- mIdentifierUpdate1 = message;
- }
-
- if(identifier == getIdentifier2())
- {
- mIdentifierUpdate2 = message;
- }
- }
-
- public int[] getIdentifiers()
- {
- int[] idens;
-
- if(hasChannel2())
- {
- idens = new int[2];
-
- idens[0] = getIdentifier1();
- idens[1] = getIdentifier2();
- }
- else
- {
- idens = new int[1];
-
- idens[0] = getIdentifier1();
- }
-
- return idens;
- }
-
- @Override
- public int compareTo(SecondaryControlChannelBroadcast other)
- {
- if(other.getRFSS().contentEquals(getRFSS()) &&
- other.getSiteID().contentEquals(getSiteID()) &&
- other.getIdentifier1() == getIdentifier1() &&
- other.getChannel1() == getChannel1())
- {
- return 0;
- }
- else if(other.getIdentifier1() < getIdentifier1())
- {
- return -1;
- }
- else
- {
- return 1;
- }
- }
-
- @Override
- public boolean equals(Object o)
- {
- if(this == o)
- {
- return true;
- }
- if(!(o instanceof SecondaryControlChannelBroadcast))
- {
- return false;
- }
-
- SecondaryControlChannelBroadcast that = (SecondaryControlChannelBroadcast)o;
-
- if(getRFSS() != that.getRFSS())
- {
- return false;
- }
- if(getSiteID() != that.getSiteID())
- {
- return false;
- }
- if(getIdentifier1() != that.getIdentifier1())
- {
- return false;
- }
-
- return getChannel1() == that.getChannel1();
- }
-
- @Override
- public int hashCode()
- {
- int result = getRFSS() != null ? getRFSS().hashCode() : 0;
- result = 31 * result + getSiteID() != null ? getSiteID().hashCode() : 0;
- result = 31 * result + getIdentifier1();
- result = 31 * result + getChannel1();
- return result;
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.control;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.IBandIdentifier;
+import module.decode.p25.message.IdentifierReceiver;
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+
+public class SecondaryControlChannelBroadcast extends TSBKMessage implements IdentifierReceiver, Comparable
+{
+ public static final int[] RFSS_ID = {80, 81, 82, 83, 84, 85, 86, 87};
+ public static final int[] SITE_ID = {88, 89, 90, 91, 92, 93, 94, 95};
+ public static final int[] IDENTIFIER_1 = {96, 97, 98, 99};
+ public static final int[] CHANNEL_1 = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111};
+ public static final int[] SYSTEM_SERVICE_CLASS_1 = {112, 113, 114, 115, 116, 117, 118, 119};
+ public static final int[] IDENTIFIER_2 = {120, 121, 122, 123};
+ public static final int[] CHANNEL_2 = {124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135};
+ public static final int[] SYSTEM_SERVICE_CLASS_2 = {136, 137, 138, 139, 140, 141, 142, 143};
+
+ private IBandIdentifier mIdentifierUpdate1;
+ private IBandIdentifier mIdentifierUpdate2;
+
+ public SecondaryControlChannelBroadcast(BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.SECONDARY_CONTROL_CHANNEL_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getMessageStub());
+
+ sb.append(" SITE:" + getRFSS() + "-" + getSiteID());
+
+ sb.append(" CHAN1:" + getIdentifier1() + "-" + getChannel1());
+
+ sb.append(" DN1:" + getDownlinkFrequency1());
+
+ sb.append(" UP1:" + getUplinkFrequency1());
+
+ sb.append(" SVC1:" + SystemService.toString(getSystemServiceClass1()));
+
+ if(hasChannel2())
+ {
+ sb.append(" CHAN2:" + getIdentifier2() + "-" + getChannel2());
+
+ sb.append(" DN2:" + getDownlinkFrequency2());
+
+ sb.append(" UP2:" + getUplinkFrequency2());
+
+ sb.append(" SVC2:" + SystemService.toString(getSystemServiceClass2()));
+ }
+
+ return sb.toString();
+ }
+
+ public String getRFSS()
+ {
+ return mMessage.getHex(RFSS_ID, 2);
+ }
+
+ public String getSiteID()
+ {
+ return mMessage.getHex(SITE_ID, 2);
+ }
+
+ public int getIdentifier1()
+ {
+ return mMessage.getInt(IDENTIFIER_1);
+ }
+
+ public int getChannel1()
+ {
+ return mMessage.getInt(CHANNEL_1);
+ }
+
+ public int getSystemServiceClass1()
+ {
+ return mMessage.getInt(SYSTEM_SERVICE_CLASS_1);
+ }
+
+ public int getIdentifier2()
+ {
+ return mMessage.getInt(IDENTIFIER_2);
+ }
+
+ public int getChannel2()
+ {
+ return mMessage.getInt(CHANNEL_2);
+ }
+
+ public int getSystemServiceClass2()
+ {
+ return mMessage.getInt(SYSTEM_SERVICE_CLASS_2);
+ }
+
+ public boolean hasChannel2()
+ {
+ return getSystemServiceClass2() != 0;
+ }
+
+
+ public long getDownlinkFrequency1()
+ {
+ if(mIdentifierUpdate1 != null)
+ {
+ return mIdentifierUpdate1.getDownlinkFrequency(getChannel1());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency1()
+ {
+ if(mIdentifierUpdate1 != null)
+ {
+ return mIdentifierUpdate1.getUplinkFrequency(getChannel1());
+ }
+
+ return 0;
+ }
+
+ public long getDownlinkFrequency2()
+ {
+ if(mIdentifierUpdate2 != null)
+ {
+ return mIdentifierUpdate2.getDownlinkFrequency(getChannel2());
+ }
+
+ return 0;
+ }
+
+ public long getUplinkFrequency2()
+ {
+ if(mIdentifierUpdate2 != null)
+ {
+ return mIdentifierUpdate2.getUplinkFrequency(getChannel2());
+ }
+
+ return 0;
+ }
+
+ @Override
+ public void setIdentifierMessage(int identifier, IBandIdentifier message)
+ {
+ if(identifier == getIdentifier1())
+ {
+ mIdentifierUpdate1 = message;
+ }
+
+ if(identifier == getIdentifier2())
+ {
+ mIdentifierUpdate2 = message;
+ }
+ }
+
+ public int[] getIdentifiers()
+ {
+ int[] idens;
+
+ if(hasChannel2())
+ {
+ idens = new int[2];
+
+ idens[0] = getIdentifier1();
+ idens[1] = getIdentifier2();
+ }
+ else
+ {
+ idens = new int[1];
+
+ idens[0] = getIdentifier1();
+ }
+
+ return idens;
+ }
+
+ @Override
+ public int compareTo(SecondaryControlChannelBroadcast other)
+ {
+ if(other.getRFSS().contentEquals(getRFSS()) &&
+ other.getSiteID().contentEquals(getSiteID()) &&
+ other.getIdentifier1() == getIdentifier1() &&
+ other.getChannel1() == getChannel1())
+ {
+ return 0;
+ }
+ else if(other.getIdentifier1() < getIdentifier1())
+ {
+ return -1;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if(this == o)
+ {
+ return true;
+ }
+ if(!(o instanceof SecondaryControlChannelBroadcast))
+ {
+ return false;
+ }
+
+ SecondaryControlChannelBroadcast that = (SecondaryControlChannelBroadcast)o;
+
+ if(getRFSS() != that.getRFSS())
+ {
+ return false;
+ }
+ if(getSiteID() != that.getSiteID())
+ {
+ return false;
+ }
+ if(getIdentifier1() != that.getIdentifier1())
+ {
+ return false;
+ }
+
+ return getChannel1() == that.getChannel1();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = getRFSS() != null ? getRFSS().hashCode() : 0;
+ result = 31 * result + getSiteID() != null ? getSiteID().hashCode() : 0;
+ result = 31 * result + getIdentifier1();
+ result = 31 * result + getChannel1();
+ return result;
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcastExplicit.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcastExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcastExplicit.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/SecondaryControlChannelBroadcastExplicit.java
diff --git a/src/module/decode/p25/message/tsbk/osp/control/StatusQuery.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/StatusQuery.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/StatusQuery.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/StatusQuery.java
index 8d856dbc..be68c63a 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/StatusQuery.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/StatusQuery.java
@@ -1,62 +1,62 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class StatusQuery extends TSBKMessage
-{
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public StatusQuery( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.STATUS_QUERY.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SRC ADDR: " + getSourceAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class StatusQuery extends TSBKMessage
+{
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public StatusQuery( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.STATUS_QUERY.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java
index 59290a61..b41ef047 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/StatusUpdate.java
@@ -1,76 +1,76 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class StatusUpdate extends TSBKMessage
-{
- public static final int[] USER_STATUS = { 72,73,74,75,88,89,90,91 };
- public static final int[] UNIT_STATUS = { 92,93,94,95,96,97,98,99 };
- public static final int[] TARGET_ADDRESS = { 112,113,114,115,116,117,118,
- 119,120,121,122,123,136,137,138,139,140,141,142,143,144,145,146,147 };
- public static final int[] SOURCE_ADDRESS = { 160,161,162,163,164,165,166,
- 167,168,169,170,171,184,185,186,187,188,189,190,190,192,193,194,195 };
-
- public StatusUpdate( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.STATUS_UPDATE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " STATUS USER:" + getUserStatus() );
- sb.append( " UNIT:" + getUnitStatus() );
- sb.append( " SRC ADDR: " + getSourceAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getUserStatus()
- {
- return mMessage.getHex( USER_STATUS, 2 );
- }
-
- public String getUnitStatus()
- {
- return mMessage.getHex( UNIT_STATUS, 2 );
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class StatusUpdate extends TSBKMessage
+{
+ public static final int[] USER_STATUS = { 72,73,74,75,88,89,90,91 };
+ public static final int[] UNIT_STATUS = { 92,93,94,95,96,97,98,99 };
+ public static final int[] TARGET_ADDRESS = { 112,113,114,115,116,117,118,
+ 119,120,121,122,123,136,137,138,139,140,141,142,143,144,145,146,147 };
+ public static final int[] SOURCE_ADDRESS = { 160,161,162,163,164,165,166,
+ 167,168,169,170,171,184,185,186,187,188,189,190,190,192,193,194,195 };
+
+ public StatusUpdate( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.STATUS_UPDATE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " STATUS USER:" + getUserStatus() );
+ sb.append( " UNIT:" + getUnitStatus() );
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getUserStatus()
+ {
+ return mMessage.getHex( USER_STATUS, 2 );
+ }
+
+ public String getUnitStatus()
+ {
+ return mMessage.getHex( UNIT_STATUS, 2 );
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java
index ecb9d25e..80affb7b 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/SyncBroadcast.java
@@ -1,274 +1,274 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.SimpleTimeZone;
-import java.util.TimeZone;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-/**
- * Sync Broadcast - used to broadcast FDMA-TDMA timing synchronization
- * information so that a subscriber unit that is time synchronized on an FDMA
- * control channel is also time synchronized with all TDMA traffic channels at
- * the site.
- */
-public class SyncBroadcast extends TSBKMessage
-{
- public static final int[] RESERVED = { 80,81,82,83,84,85,86,87,88,89,90,91,92 };
- public static final int SYSTEM_TIME_NOT_LOCKED_TO_EXTERNAL_REFERENCE = 93;
- public static final int MICRO_SLOTS_TO_MINUTE_ROLLOVER_UNLOCKED = 94;
- public static final int[] LEAP_SECOND_CORRECTION = { 95,96 };
- public static final int LOCAL_TIME_OFFSET_VALID = 97;
- public static final int LOCAL_TIME_OFFSET_SIGN = 98;
- public static final int[] LOCAL_TIME_OFFSET_HOURS = { 99,100,101,102 };
- public static final int LOCAL_TIME_OFFSET_HALF_HOUR = 103;
-
- public static final int[] YEAR = { 104,105,106,107,108,109,110 };
- public static final int[] MONTH = { 111,112,113,114 };
- public static final int[] DAY = { 115,116,117,118,119 };
- public static final int[] HOURS = { 120,121,122,123,124 };
- public static final int[] MINUTES = { 125,126,127,128,129,130 };
- public static final int[] MICRO_SLOTS = { 131,132,133,134,135,136,137,138,
- 139,140,141,142,143 };
- public static final int[] TSBK_CRC = { 144,145,146,147,148,149,150,151,152,
- 153,154,155,156,157,158,159 };
-
- private static final DateFormat TIME_FORMATTER = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS Z" );
- private static final TimeZone NO_TIME_ZONE = new SimpleTimeZone( 0, "NONE" );
-
- public SyncBroadcast( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.TDMA_SYNC_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SYSTEM TIME" );
-
- if( isSystemTimeNotLockedToExternalReference() )
- {
- sb.append( " UNLOCKED" );
- }
-
- sb.append( ":" );
-
- TIME_FORMATTER.setTimeZone( getTimeZone() );
- sb.append( " " + TIME_FORMATTER.format( new Date( getSystemTime() ) ) );
-
- sb.append( " LEAP-SECOND CORRECTION:" + getLeapSecondCorrection() + "mS" );
-
- if( isMicroslotsLockedToMinuteRollover() )
- {
- sb.append( " MICROSLOT-MINUTE ROLLOVER:LOCKED" );
- }
- else
- {
- sb.append( " MICROSLOT-MINUTE ROLLOVER:UNLOCKED" );
- }
-
- return sb.toString();
- }
-
- /**
- * System Time (UTC) in milliseconds since java epoch
- */
- public long getSystemTime()
- {
- Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) );
-
- cal.clear();
-
- cal.set( Calendar.YEAR, getYear() );
- cal.set( Calendar.MONTH, getMonth() - 1 );
- cal.set( Calendar.DAY_OF_MONTH, getDay() );
- cal.set( Calendar.HOUR_OF_DAY, getHours() );
- cal.set( Calendar.MINUTE, getMinutes() );
- cal.set( Calendar.MILLISECOND, getMilliSeconds() );
-
- return cal.getTimeInMillis();
- }
-
- /**
- * System Time not locked to external time reference indicator
- */
- public boolean isSystemTimeNotLockedToExternalReference()
- {
- return mMessage.get( SYSTEM_TIME_NOT_LOCKED_TO_EXTERNAL_REFERENCE );
- }
-
- /**
- * Micro-slot-to-Minute rollover boundary lock indicator.
- *
- * Note: we invert the message value so that true indicates that the micro
- * slots and minute rollovers are locked, whereas the ICD uses false to
- * indicate a lock.
- *
- * @return true if the microslots rollover at each minute interval is locked
- * to the system time minute rollover.
- *
- * @return false if the microslots and minutes rollover are not locked. This
- * indicates that the microslots minute rollover is free rolling.
- *
- */
- public boolean isMicroslotsLockedToMinuteRollover()
- {
- return !mMessage.get( MICRO_SLOTS_TO_MINUTE_ROLLOVER_UNLOCKED );
- }
-
- /**
- * Leap second correction value that should be applied to the system time.
- *
- * The leap-second correction field indicates the number of 2.5 millisecond
- * units that must be added to the system time to account for the insertion
- * of leap seconds when the system time is represented as UTC universal time.
- *
- * @return leap-second correction value in milliseconds 0.0-10.0
- */
- public double getLeapSecondCorrection()
- {
- return (double)mMessage.getInt( LEAP_SECOND_CORRECTION ) * 2.5d;
- }
-
-
-
- /**
- * Indicates the local time offset fields contain valid information.
- */
- public boolean isValidLocalTimeOffset()
- {
- return !mMessage.get( LOCAL_TIME_OFFSET_VALID );
- }
-
- /**
- * Local time zone offset from UTC universal time (zulu) when the VALID
- * LOCAL TIME OFFSET flag indicates a valid offset. Otherwise, this method
- * returns a static +00:00 indicating no local time offset.
- */
- public TimeZone getTimeZone()
- {
- if( isValidLocalTimeOffset() )
- {
- int offset = 0;
-
- offset += mMessage.getInt( LOCAL_TIME_OFFSET_HOURS ) * 3600000;
- offset += mMessage.get( LOCAL_TIME_OFFSET_HALF_HOUR ) ? 1800000 : 0;
- offset = mMessage.get( LOCAL_TIME_OFFSET_SIGN ) ? -offset : offset;
-
- return new SimpleTimeZone( offset, "LOCAL" );
- }
- else
- {
- return NO_TIME_ZONE;
- }
- }
-
- /**
- * System time - year.
- *
- * @return year in range 2000-2127
- */
- public int getYear()
- {
- return 2000 + mMessage.getInt( YEAR );
- }
-
- /**
- * System time - month
- *
- * @return month 1-12 where 1=January and 12=December
- */
- public int getMonth()
- {
- return mMessage.getInt( MONTH );
- }
-
- /**
- * System time - day of month
- *
- * @return day of month in range 1-31
- */
- public int getDay()
- {
- return mMessage.getInt( DAY );
- }
-
- /**
- * System time - hours
- *
- * @return hours in range 0 - 23
- */
- public int getHours()
- {
- return mMessage.getInt( HOURS );
- }
-
- /**
- * System time - minutes
- *
- * @return minutes in range 0 - 59
- */
- public int getMinutes()
- {
- return mMessage.getInt( MINUTES );
- }
-
- /**
- * System time - milli-seconds
- *
- * Note: sub-millisecond values are rounded to nearest millisecond unit to
- * conform to java Date internal milli-second precision level.
- *
- * @return milli-seconds in range 0 - 59999;
- */
- public int getMilliSeconds()
- {
- return (int)( (double)getMicroSlots() * 7.5 );
- }
-
- /**
- * TDMA Micro Slots.
- *
- * Number of 7.5 millisecond micro slots since the last minute rollover, or
- * since the last micro-slot counter rollover when the the micro-slot to
- * minute rollover is unlocked.
- *
- * @see isMicroslotsLockedToMinuteRollover() method.
- *
- * This value supports mobile subscriber timing alignment with a TDMA traffic
- * channel when a channel is granted from the control channels, so that when
- * the mobile changes from the control channel to the traffic channel, it is
- * already aligned with the traffic channel TDMA timing.
- *
- * Super frames occur every 360 ms (48 micro-slots) on FDMA and Ultra frames
- * occur every 4 super frames on TDMA.
- *
- * Valid micro-slot values range 0-7999 and represent 60,000
- * milliseconds ( 8000 x 7.5 ms).
- *
- * @return number of 7.5 mS micro-slots since last minute or micro-slot
- * rollover
- */
- public int getMicroSlots()
- {
- return mMessage.getInt( MICRO_SLOTS );
- }
+package module.decode.p25.message.tsbk.osp.control;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+/**
+ * Sync Broadcast - used to broadcast FDMA-TDMA timing synchronization
+ * information so that a subscriber unit that is time synchronized on an FDMA
+ * control channel is also time synchronized with all TDMA traffic channels at
+ * the site.
+ */
+public class SyncBroadcast extends TSBKMessage
+{
+ public static final int[] RESERVED = { 80,81,82,83,84,85,86,87,88,89,90,91,92 };
+ public static final int SYSTEM_TIME_NOT_LOCKED_TO_EXTERNAL_REFERENCE = 93;
+ public static final int MICRO_SLOTS_TO_MINUTE_ROLLOVER_UNLOCKED = 94;
+ public static final int[] LEAP_SECOND_CORRECTION = { 95,96 };
+ public static final int LOCAL_TIME_OFFSET_VALID = 97;
+ public static final int LOCAL_TIME_OFFSET_SIGN = 98;
+ public static final int[] LOCAL_TIME_OFFSET_HOURS = { 99,100,101,102 };
+ public static final int LOCAL_TIME_OFFSET_HALF_HOUR = 103;
+
+ public static final int[] YEAR = { 104,105,106,107,108,109,110 };
+ public static final int[] MONTH = { 111,112,113,114 };
+ public static final int[] DAY = { 115,116,117,118,119 };
+ public static final int[] HOURS = { 120,121,122,123,124 };
+ public static final int[] MINUTES = { 125,126,127,128,129,130 };
+ public static final int[] MICRO_SLOTS = { 131,132,133,134,135,136,137,138,
+ 139,140,141,142,143 };
+ public static final int[] TSBK_CRC = { 144,145,146,147,148,149,150,151,152,
+ 153,154,155,156,157,158,159 };
+
+ private static final DateFormat TIME_FORMATTER = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS Z" );
+ private static final TimeZone NO_TIME_ZONE = new SimpleTimeZone( 0, "NONE" );
+
+ public SyncBroadcast( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.TDMA_SYNC_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SYSTEM TIME" );
+
+ if( isSystemTimeNotLockedToExternalReference() )
+ {
+ sb.append( " UNLOCKED" );
+ }
+
+ sb.append( ":" );
+
+ TIME_FORMATTER.setTimeZone( getTimeZone() );
+ sb.append( " " + TIME_FORMATTER.format( new Date( getSystemTime() ) ) );
+
+ sb.append( " LEAP-SECOND CORRECTION:" + getLeapSecondCorrection() + "mS" );
+
+ if( isMicroslotsLockedToMinuteRollover() )
+ {
+ sb.append( " MICROSLOT-MINUTE ROLLOVER:LOCKED" );
+ }
+ else
+ {
+ sb.append( " MICROSLOT-MINUTE ROLLOVER:UNLOCKED" );
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * System Time (UTC) in milliseconds since java epoch
+ */
+ public long getSystemTime()
+ {
+ Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) );
+
+ cal.clear();
+
+ cal.set( Calendar.YEAR, getYear() );
+ cal.set( Calendar.MONTH, getMonth() - 1 );
+ cal.set( Calendar.DAY_OF_MONTH, getDay() );
+ cal.set( Calendar.HOUR_OF_DAY, getHours() );
+ cal.set( Calendar.MINUTE, getMinutes() );
+ cal.set( Calendar.MILLISECOND, getMilliSeconds() );
+
+ return cal.getTimeInMillis();
+ }
+
+ /**
+ * System Time not locked to external time reference indicator
+ */
+ public boolean isSystemTimeNotLockedToExternalReference()
+ {
+ return mMessage.get( SYSTEM_TIME_NOT_LOCKED_TO_EXTERNAL_REFERENCE );
+ }
+
+ /**
+ * Micro-slot-to-Minute rollover boundary lock indicator.
+ *
+ * Note: we invert the message value so that true indicates that the micro
+ * slots and minute rollovers are locked, whereas the ICD uses false to
+ * indicate a lock.
+ *
+ * @return true if the microslots rollover at each minute interval is locked
+ * to the system time minute rollover.
+ *
+ * @return false if the microslots and minutes rollover are not locked. This
+ * indicates that the microslots minute rollover is free rolling.
+ *
+ */
+ public boolean isMicroslotsLockedToMinuteRollover()
+ {
+ return !mMessage.get( MICRO_SLOTS_TO_MINUTE_ROLLOVER_UNLOCKED );
+ }
+
+ /**
+ * Leap second correction value that should be applied to the system time.
+ *
+ * The leap-second correction field indicates the number of 2.5 millisecond
+ * units that must be added to the system time to account for the insertion
+ * of leap seconds when the system time is represented as UTC universal time.
+ *
+ * @return leap-second correction value in milliseconds 0.0-10.0
+ */
+ public double getLeapSecondCorrection()
+ {
+ return (double)mMessage.getInt( LEAP_SECOND_CORRECTION ) * 2.5d;
+ }
+
+
+
+ /**
+ * Indicates the local time offset fields contain valid information.
+ */
+ public boolean isValidLocalTimeOffset()
+ {
+ return !mMessage.get( LOCAL_TIME_OFFSET_VALID );
+ }
+
+ /**
+ * Local time zone offset from UTC universal time (zulu) when the VALID
+ * LOCAL TIME OFFSET flag indicates a valid offset. Otherwise, this method
+ * returns a static +00:00 indicating no local time offset.
+ */
+ public TimeZone getTimeZone()
+ {
+ if( isValidLocalTimeOffset() )
+ {
+ int offset = 0;
+
+ offset += mMessage.getInt( LOCAL_TIME_OFFSET_HOURS ) * 3600000;
+ offset += mMessage.get( LOCAL_TIME_OFFSET_HALF_HOUR ) ? 1800000 : 0;
+ offset = mMessage.get( LOCAL_TIME_OFFSET_SIGN ) ? -offset : offset;
+
+ return new SimpleTimeZone( offset, "LOCAL" );
+ }
+ else
+ {
+ return NO_TIME_ZONE;
+ }
+ }
+
+ /**
+ * System time - year.
+ *
+ * @return year in range 2000-2127
+ */
+ public int getYear()
+ {
+ return 2000 + mMessage.getInt( YEAR );
+ }
+
+ /**
+ * System time - month
+ *
+ * @return month 1-12 where 1=January and 12=December
+ */
+ public int getMonth()
+ {
+ return mMessage.getInt( MONTH );
+ }
+
+ /**
+ * System time - day of month
+ *
+ * @return day of month in range 1-31
+ */
+ public int getDay()
+ {
+ return mMessage.getInt( DAY );
+ }
+
+ /**
+ * System time - hours
+ *
+ * @return hours in range 0 - 23
+ */
+ public int getHours()
+ {
+ return mMessage.getInt( HOURS );
+ }
+
+ /**
+ * System time - minutes
+ *
+ * @return minutes in range 0 - 59
+ */
+ public int getMinutes()
+ {
+ return mMessage.getInt( MINUTES );
+ }
+
+ /**
+ * System time - milli-seconds
+ *
+ * Note: sub-millisecond values are rounded to nearest millisecond unit to
+ * conform to java Date internal milli-second precision level.
+ *
+ * @return milli-seconds in range 0 - 59999;
+ */
+ public int getMilliSeconds()
+ {
+ return (int)( (double)getMicroSlots() * 7.5 );
+ }
+
+ /**
+ * TDMA Micro Slots.
+ *
+ * Number of 7.5 millisecond micro slots since the last minute rollover, or
+ * since the last micro-slot counter rollover when the the micro-slot to
+ * minute rollover is unlocked.
+ *
+ * @see isMicroslotsLockedToMinuteRollover() method.
+ *
+ * This value supports mobile subscriber timing alignment with a TDMA traffic
+ * channel when a channel is granted from the control channels, so that when
+ * the mobile changes from the control channel to the traffic channel, it is
+ * already aligned with the traffic channel TDMA timing.
+ *
+ * Super frames occur every 360 ms (48 micro-slots) on FDMA and Ultra frames
+ * occur every 4 super frames on TDMA.
+ *
+ * Valid micro-slot values range 0-7999 and represent 60,000
+ * milliseconds ( 8000 x 7.5 ms).
+ *
+ * @return number of 7.5 mS micro-slots since last minute or micro-slot
+ * rollover
+ */
+ public int getMicroSlots()
+ {
+ return mMessage.getInt( MICRO_SLOTS );
+ }
}
\ No newline at end of file
diff --git a/src/module/decode/p25/message/tsbk/osp/control/SystemService.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/SystemService.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/SystemService.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/SystemService.java
index e296775a..db694d06 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/SystemService.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/SystemService.java
@@ -1,87 +1,87 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-public class SystemService
-{
- public static boolean isCompositeControlChannel( int service )
- {
- return ( service & 0x01 ) == 0x01;
- }
-
- public static boolean isUpdateControlChannelOnly( int service )
- {
- return ( service & 0x02 ) == 0x02;
- }
-
- public static boolean isBackupControlChannelOnly( int service )
- {
- return ( service & 0x04 ) == 0x04;
- }
-
- public static boolean providesDataServiceRequests( int service )
- {
- return ( service & 0x10 ) == 0x10;
- }
-
- public static boolean providesVoiceServiceRequests( int service )
- {
- return ( service & 0x20 ) == 0x20;
- }
-
- public static boolean providesRegistrationServices( int service )
- {
- return ( service & 0x40 ) == 0x40;
- }
-
- public static boolean providesAuthenticationServices( int service )
- {
- return ( service & 0x80 ) == 0x80;
- }
-
- public static String toString( int service )
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( "CONTROL CHAN[" );
-
- if( isCompositeControlChannel( service ) )
- {
- sb.append( " COMPOSITE" );
- }
-
- if( isUpdateControlChannelOnly( service ) )
- {
- sb.append( " UPDATE" );
- }
-
- if( isBackupControlChannelOnly( service ) )
- {
- sb.append( " BACKUP" );
- }
-
- sb.append( " ] SERVICES[" );
-
- if( providesAuthenticationServices( service ) )
- {
- sb.append( " AUTHENTICATION" );
- }
-
- if( providesDataServiceRequests( service ) )
- {
- sb.append( " DATA" );
- }
-
- if( providesRegistrationServices( service ) )
- {
- sb.append( " REGISTRATION" );
- }
-
- if( providesVoiceServiceRequests( service ) )
- {
- sb.append( " VOICE" );
- }
-
- sb.append( " ]" );
-
- return sb.toString();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+public class SystemService
+{
+ public static boolean isCompositeControlChannel( int service )
+ {
+ return ( service & 0x01 ) == 0x01;
+ }
+
+ public static boolean isUpdateControlChannelOnly( int service )
+ {
+ return ( service & 0x02 ) == 0x02;
+ }
+
+ public static boolean isBackupControlChannelOnly( int service )
+ {
+ return ( service & 0x04 ) == 0x04;
+ }
+
+ public static boolean providesDataServiceRequests( int service )
+ {
+ return ( service & 0x10 ) == 0x10;
+ }
+
+ public static boolean providesVoiceServiceRequests( int service )
+ {
+ return ( service & 0x20 ) == 0x20;
+ }
+
+ public static boolean providesRegistrationServices( int service )
+ {
+ return ( service & 0x40 ) == 0x40;
+ }
+
+ public static boolean providesAuthenticationServices( int service )
+ {
+ return ( service & 0x80 ) == 0x80;
+ }
+
+ public static String toString( int service )
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "CONTROL CHAN[" );
+
+ if( isCompositeControlChannel( service ) )
+ {
+ sb.append( " COMPOSITE" );
+ }
+
+ if( isUpdateControlChannelOnly( service ) )
+ {
+ sb.append( " UPDATE" );
+ }
+
+ if( isBackupControlChannelOnly( service ) )
+ {
+ sb.append( " BACKUP" );
+ }
+
+ sb.append( " ] SERVICES[" );
+
+ if( providesAuthenticationServices( service ) )
+ {
+ sb.append( " AUTHENTICATION" );
+ }
+
+ if( providesDataServiceRequests( service ) )
+ {
+ sb.append( " DATA" );
+ }
+
+ if( providesRegistrationServices( service ) )
+ {
+ sb.append( " REGISTRATION" );
+ }
+
+ if( providesVoiceServiceRequests( service ) )
+ {
+ sb.append( " VOICE" );
+ }
+
+ sb.append( " ]" );
+
+ return sb.toString();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java
index 4ff2b25f..3192622f 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/SystemServiceBroadcast.java
@@ -1,64 +1,64 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import java.util.List;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.Service;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class SystemServiceBroadcast extends TSBKMessage
-{
- public static final int[] AVAILABLE_SERVICES = { 88,89,90,91,92,93,94,95,
- 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 };
- public static final int[] SUPPORTED_SERVICES = { 112,113,114,115,116,117,
- 118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135 };
- public static final int[] REQUEST_PRIORITY_LEVEL = { 136,137,138,139,140,
- 141,142,143 };
-
- public SystemServiceBroadcast( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.SYSTEM_SERVICE_BROADCAST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SERVICES AVAILABLE " );
-
- sb.append( getAvailableServices() );
-
- sb.append( " SUPPORTED " );
-
- sb.append( getSupportedServices() );
-
- return sb.toString();
- }
-
- public List getAvailableServices()
- {
- long bitmap = mMessage.getLong( AVAILABLE_SERVICES );
-
- return Service.getServices( bitmap );
- }
-
- public List getSupportedServices()
- {
- long bitmap = mMessage.getLong( SUPPORTED_SERVICES );
-
- return Service.getServices( bitmap );
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import java.util.List;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.Service;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class SystemServiceBroadcast extends TSBKMessage
+{
+ public static final int[] AVAILABLE_SERVICES = { 88,89,90,91,92,93,94,95,
+ 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 };
+ public static final int[] SUPPORTED_SERVICES = { 112,113,114,115,116,117,
+ 118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135 };
+ public static final int[] REQUEST_PRIORITY_LEVEL = { 136,137,138,139,140,
+ 141,142,143 };
+
+ public SystemServiceBroadcast( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.SYSTEM_SERVICE_BROADCAST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SERVICES AVAILABLE " );
+
+ sb.append( getAvailableServices() );
+
+ sb.append( " SUPPORTED " );
+
+ sb.append( getSupportedServices() );
+
+ return sb.toString();
+ }
+
+ public List getAvailableServices()
+ {
+ long bitmap = mMessage.getLong( AVAILABLE_SERVICES );
+
+ return Service.getServices( bitmap );
+ }
+
+ public List getSupportedServices()
+ {
+ long bitmap = mMessage.getLong( SUPPORTED_SERVICES );
+
+ return Service.getServices( bitmap );
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/TimeAndDateAnnouncement.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/TimeAndDateAnnouncement.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/osp/control/TimeAndDateAnnouncement.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/TimeAndDateAnnouncement.java
diff --git a/src/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java
index b6b7817a..595ba0c7 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitDeregistrationAcknowledge.java
@@ -1,64 +1,64 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitDeregistrationAcknowledge extends TSBKMessage
-{
- public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
- 101,102,103,104,105,106,107 };
- public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,
- 116,117,118,119 };
- public static final int[] SOURCE_ID = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public UnitDeregistrationAcknowledge( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_DEREGISTRATION_ACKNOWLEDGE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " WACN:" + getWACN() );
- sb.append( " SYSTEM:" + getSystemID() );
- sb.append( " SRC ID: " + getSourceID() );
-
- return sb.toString();
- }
-
- public String getWACN()
- {
- return mMessage.getHex( WACN, 5 );
- }
-
- public String getSystemID()
- {
- return mMessage.getHex( SYSTEM_ID, 3 );
- }
-
- public String getSourceID()
- {
- return mMessage.getHex( SOURCE_ID, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getSourceID();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitDeregistrationAcknowledge extends TSBKMessage
+{
+ public static final int[] WACN = { 88,89,90,91,92,93,94,95,96,97,98,99,100,
+ 101,102,103,104,105,106,107 };
+ public static final int[] SYSTEM_ID = { 108,109,110,111,112,113,114,115,
+ 116,117,118,119 };
+ public static final int[] SOURCE_ID = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public UnitDeregistrationAcknowledge( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_DEREGISTRATION_ACKNOWLEDGE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " WACN:" + getWACN() );
+ sb.append( " SYSTEM:" + getSystemID() );
+ sb.append( " SRC ID: " + getSourceID() );
+
+ return sb.toString();
+ }
+
+ public String getWACN()
+ {
+ return mMessage.getHex( WACN, 5 );
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex( SYSTEM_ID, 3 );
+ }
+
+ public String getSourceID()
+ {
+ return mMessage.getHex( SOURCE_ID, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getSourceID();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java
index b5d4b72a..73c51b8d 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationCommand.java
@@ -1,62 +1,62 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitRegistrationCommand extends TSBKMessage
-{
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public UnitRegistrationCommand( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_REGISTRATION_COMMAND.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " SRC ADDR: " + getSourceAddress() );
- sb.append( " TGT ADDR: " + getTargetAddress() );
-
- return sb.toString();
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getFromID()
- {
- return getSourceAddress();
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitRegistrationCommand extends TSBKMessage
+{
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public UnitRegistrationCommand( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_REGISTRATION_COMMAND.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+ sb.append( " TGT ADDR: " + getTargetAddress() );
+
+ return sb.toString();
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getFromID()
+ {
+ return getSourceAddress();
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java
index 7c85fd9a..21940d34 100644
--- a/src/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/control/UnitRegistrationResponse.java
@@ -1,71 +1,71 @@
-package module.decode.p25.message.tsbk.osp.control;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import module.decode.p25.reference.Response;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitRegistrationResponse extends TSBKMessage
-{
- public static final int[] REGISTRATION_RESPONSE = { 82,83 };
- public static final int[] SYSTEM_ID = { 84,85,86,87,88,89,90,91,92,93,94,95 };
- public static final int[] SOURCE_ID = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public UnitRegistrationResponse( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_REGISTRATION_RESPONSE.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " REGISTRATION:" + getResponse().name() );
- sb.append( " SYSTEM:" + getSystemID() );
- sb.append( " SRC ID: " + getSourceID() );
- sb.append( " SRC ADDR: " + getSourceAddress() );
-
- return sb.toString();
- }
-
- public Response getResponse()
- {
- return Response.fromValue( mMessage.getInt( REGISTRATION_RESPONSE ) );
- }
-
- public String getSystemID()
- {
- return mMessage.getHex( SYSTEM_ID, 3 );
- }
-
- public String getSourceID()
- {
- return mMessage.getHex( SOURCE_ID, 6 );
- }
-
- public String getSourceAddress()
- {
- return mMessage.getHex( SOURCE_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getSourceAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.control;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import module.decode.p25.reference.Response;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitRegistrationResponse extends TSBKMessage
+{
+ public static final int[] REGISTRATION_RESPONSE = { 82,83 };
+ public static final int[] SYSTEM_ID = { 84,85,86,87,88,89,90,91,92,93,94,95 };
+ public static final int[] SOURCE_ID = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public UnitRegistrationResponse( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_REGISTRATION_RESPONSE.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " REGISTRATION:" + getResponse().name() );
+ sb.append( " SYSTEM:" + getSystemID() );
+ sb.append( " SRC ID: " + getSourceID() );
+ sb.append( " SRC ADDR: " + getSourceAddress() );
+
+ return sb.toString();
+ }
+
+ public Response getResponse()
+ {
+ return Response.fromValue( mMessage.getInt( REGISTRATION_RESPONSE ) );
+ }
+
+ public String getSystemID()
+ {
+ return mMessage.getHex( SYSTEM_ID, 3 );
+ }
+
+ public String getSourceID()
+ {
+ return mMessage.getHex( SOURCE_ID, 6 );
+ }
+
+ public String getSourceAddress()
+ {
+ return mMessage.getHex( SOURCE_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getSourceAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java
index 27cbafe3..4499965e 100644
--- a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncement.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.data;
-
-import module.decode.p25.message.tsbk.GroupMultiChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupDataChannelAnnouncement extends GroupMultiChannelGrant
-{
- public GroupDataChannelAnnouncement( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_DATA_CHANNEL_ANNOUNCEMENT.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.data;
+
+import module.decode.p25.message.tsbk.GroupMultiChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupDataChannelAnnouncement extends GroupMultiChannelGrant
+{
+ public GroupDataChannelAnnouncement( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_DATA_CHANNEL_ANNOUNCEMENT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java
index fd4fe1bb..5f280ce3 100644
--- a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelAnnouncementExplicit.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.data;
-
-import module.decode.p25.message.tsbk.GroupChannelGrantExplicit;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupDataChannelAnnouncementExplicit extends GroupChannelGrantExplicit
-{
- public GroupDataChannelAnnouncementExplicit( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_DATA_CHANNEL_ANNOUNCEMENT_EXPLICIT.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.data;
+
+import module.decode.p25.message.tsbk.GroupChannelGrantExplicit;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupDataChannelAnnouncementExplicit extends GroupChannelGrantExplicit
+{
+ public GroupDataChannelAnnouncementExplicit( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_DATA_CHANNEL_ANNOUNCEMENT_EXPLICIT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java
similarity index 97%
rename from src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java
index 42be5c6b..f825e128 100644
--- a/src/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/data/GroupDataChannelGrant.java
@@ -1,40 +1,40 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package module.decode.p25.message.tsbk.osp.data;
-
-import alias.AliasList;
-import bits.BinaryMessage;
-import module.decode.p25.message.tsbk.GroupChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-
-public class GroupDataChannelGrant extends GroupChannelGrant
-
-{
- public GroupDataChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
- {
- super(message, duid, aliasList);
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_DATA_CHANNEL_GRANT.getDescription();
- }
-}
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package module.decode.p25.message.tsbk.osp.data;
+
+import alias.AliasList;
+import bits.BinaryMessage;
+import module.decode.p25.message.tsbk.GroupChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+
+public class GroupDataChannelGrant extends GroupChannelGrant
+
+{
+ public GroupDataChannelGrant(BinaryMessage message, DataUnitID duid, AliasList aliasList)
+ {
+ super(message, duid, aliasList);
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_DATA_CHANNEL_GRANT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java
index 905f9a5d..dc4f21f9 100644
--- a/src/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/data/IndividualDataChannelGrant.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.data;
-
-import module.decode.p25.message.tsbk.UnitChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class IndividualDataChannelGrant extends UnitChannelGrant
-{
- public IndividualDataChannelGrant( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.INDIVIDUAL_DATA_CHANNEL_GRANT.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.data;
+
+import module.decode.p25.message.tsbk.UnitChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class IndividualDataChannelGrant extends UnitChannelGrant
+{
+ public IndividualDataChannelGrant( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.INDIVIDUAL_DATA_CHANNEL_GRANT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/SNDCPData.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPData.java
similarity index 97%
rename from src/module/decode/p25/message/tsbk/osp/data/SNDCPData.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPData.java
index e5559def..4ebd26b3 100644
--- a/src/module/decode/p25/message/tsbk/osp/data/SNDCPData.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPData.java
@@ -1,29 +1,29 @@
-package module.decode.p25.message.tsbk.osp.data;
-
-import module.decode.p25.message.tsbk.ServiceMessage;
-import module.decode.p25.reference.DataUnitID;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public abstract class SNDCPData extends ServiceMessage
-{
- public static final int[] NETWORK_SERVICE_ACCESS_POINT_ID = { 84,85,86,87 };
-
- public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
-
- public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public SNDCPData( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- public String getNSAPI()
- {
- return mMessage.getHex( NETWORK_SERVICE_ACCESS_POINT_ID, 1 );
- }
-}
+package module.decode.p25.message.tsbk.osp.data;
+
+import module.decode.p25.message.tsbk.ServiceMessage;
+import module.decode.p25.reference.DataUnitID;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public abstract class SNDCPData extends ServiceMessage
+{
+ public static final int[] NETWORK_SERVICE_ACCESS_POINT_ID = { 84,85,86,87 };
+
+ public static final int[] TARGET_ADDRESS = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 };
+
+ public static final int[] SOURCE_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public SNDCPData( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ public String getNSAPI()
+ {
+ return mMessage.getHex( NETWORK_SERVICE_ACCESS_POINT_ID, 1 );
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelAnnouncementExplicit.java
diff --git a/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelGrant.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataChannelGrant.java
diff --git a/src/module/decode/p25/message/tsbk/osp/data/SNDCPDataPageRequest.java b/src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataPageRequest.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/osp/data/SNDCPDataPageRequest.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/data/SNDCPDataPageRequest.java
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java
index 982d9510..aa0cd7a9 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrant.java
@@ -1,24 +1,24 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.GroupChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupVoiceChannelGrant extends GroupChannelGrant
-{
- public GroupVoiceChannelGrant( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_VOICE_CHANNEL_GRANT.getDescription();
- }
-
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.GroupChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupVoiceChannelGrant extends GroupChannelGrant
+{
+ public GroupVoiceChannelGrant( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_VOICE_CHANNEL_GRANT.getDescription();
+ }
+
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java
index a202ecd1..84a5e219 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdate.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.GroupMultiChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupVoiceChannelGrantUpdate extends GroupMultiChannelGrant
-{
- public GroupVoiceChannelGrantUpdate( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.GroupMultiChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupVoiceChannelGrantUpdate extends GroupMultiChannelGrant
+{
+ public GroupVoiceChannelGrantUpdate( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java
index 46831755..5c630ecf 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/GroupVoiceChannelGrantUpdateExplicit.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.GroupChannelGrantExplicit;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class GroupVoiceChannelGrantUpdateExplicit extends GroupChannelGrantExplicit
-{
- public GroupVoiceChannelGrantUpdateExplicit( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.GROUP_VOICE_CHANNEL_GRANT_UPDATE_EXPLICIT.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.GroupChannelGrantExplicit;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class GroupVoiceChannelGrantUpdateExplicit extends GroupChannelGrantExplicit
+{
+ public GroupVoiceChannelGrantUpdateExplicit( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.GROUP_VOICE_CHANNEL_GRANT_UPDATE_EXPLICIT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java
similarity index 97%
rename from src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java
index c21efcd1..57834a05 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectAnswerRequest.java
@@ -1,85 +1,85 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import module.decode.p25.message.tsbk.TSBKMessage;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Digit;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class TelephoneInterconnectAnswerRequest extends TSBKMessage
-{
- public static final int[] DIGIT_1 = { 80,81,82,83 };
- public static final int[] DIGIT_2 = { 84,85,86,87 };
- public static final int[] DIGIT_3 = { 88,89,90,91 };
- public static final int[] DIGIT_4 = { 92,93,94,95 };
- public static final int[] DIGIT_5 = { 96,97,98,99 };
- public static final int[] DIGIT_6 = { 100,101,102,103 };
- public static final int[] DIGIT_7 = { 104,105,106,107 };
- public static final int[] DIGIT_8 = { 108,109,110,111 };
- public static final int[] DIGIT_9 = { 112,113,114,115 };
- public static final int[] DIGIT_10 = { 116,117,118,119 };
-
- public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
- 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
-
- public TelephoneInterconnectAnswerRequest( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.TELEPHONE_INTERCONNECT_ANSWER_REQUEST.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- sb.append( " TO:" );
- sb.append( getTargetAddress() );
-
- sb.append( " TEL:" );
- sb.append( getTelephoneNumber() );
-
- return sb.toString();
- }
-
- public String getTelephoneNumber()
- {
- List digits = new ArrayList();
-
- digits.add( mMessage.getInt( DIGIT_1 ) );
- digits.add( mMessage.getInt( DIGIT_2 ) );
- digits.add( mMessage.getInt( DIGIT_3 ) );
- digits.add( mMessage.getInt( DIGIT_4 ) );
- digits.add( mMessage.getInt( DIGIT_5 ) );
- digits.add( mMessage.getInt( DIGIT_6 ) );
- digits.add( mMessage.getInt( DIGIT_7 ) );
- digits.add( mMessage.getInt( DIGIT_8 ) );
- digits.add( mMessage.getInt( DIGIT_9 ) );
- digits.add( mMessage.getInt( DIGIT_10 ) );
-
- return Digit.decode( digits );
- }
-
- public String getTargetAddress()
- {
- return mMessage.getHex( TARGET_ADDRESS, 6 );
- }
-
- @Override
- public String getToID()
- {
- return getTargetAddress();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import module.decode.p25.message.tsbk.TSBKMessage;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Digit;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class TelephoneInterconnectAnswerRequest extends TSBKMessage
+{
+ public static final int[] DIGIT_1 = { 80,81,82,83 };
+ public static final int[] DIGIT_2 = { 84,85,86,87 };
+ public static final int[] DIGIT_3 = { 88,89,90,91 };
+ public static final int[] DIGIT_4 = { 92,93,94,95 };
+ public static final int[] DIGIT_5 = { 96,97,98,99 };
+ public static final int[] DIGIT_6 = { 100,101,102,103 };
+ public static final int[] DIGIT_7 = { 104,105,106,107 };
+ public static final int[] DIGIT_8 = { 108,109,110,111 };
+ public static final int[] DIGIT_9 = { 112,113,114,115 };
+ public static final int[] DIGIT_10 = { 116,117,118,119 };
+
+ public static final int[] TARGET_ADDRESS = { 120,121,122,123,124,125,126,
+ 127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 };
+
+ public TelephoneInterconnectAnswerRequest( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.TELEPHONE_INTERCONNECT_ANSWER_REQUEST.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ sb.append( " TO:" );
+ sb.append( getTargetAddress() );
+
+ sb.append( " TEL:" );
+ sb.append( getTelephoneNumber() );
+
+ return sb.toString();
+ }
+
+ public String getTelephoneNumber()
+ {
+ List digits = new ArrayList();
+
+ digits.add( mMessage.getInt( DIGIT_1 ) );
+ digits.add( mMessage.getInt( DIGIT_2 ) );
+ digits.add( mMessage.getInt( DIGIT_3 ) );
+ digits.add( mMessage.getInt( DIGIT_4 ) );
+ digits.add( mMessage.getInt( DIGIT_5 ) );
+ digits.add( mMessage.getInt( DIGIT_6 ) );
+ digits.add( mMessage.getInt( DIGIT_7 ) );
+ digits.add( mMessage.getInt( DIGIT_8 ) );
+ digits.add( mMessage.getInt( DIGIT_9 ) );
+ digits.add( mMessage.getInt( DIGIT_10 ) );
+
+ return Digit.decode( digits );
+ }
+
+ public String getTargetAddress()
+ {
+ return mMessage.getHex( TARGET_ADDRESS, 6 );
+ }
+
+ @Override
+ public String getToID()
+ {
+ return getTargetAddress();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java
index 61553d59..d3a3877d 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrant.java
@@ -1,66 +1,66 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.UnitChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class TelephoneInterconnectVoiceChannelGrant extends UnitChannelGrant
-{
- public static final int[] CALL_TIMER = { 96,97,98,99,100,101,102,103,
- 104,105,106,107,108,109,110,111 };
-
- public TelephoneInterconnectVoiceChannelGrant( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- if( isEmergency() )
- {
- sb.append( " EMERGENCY" );
- }
-
- sb.append( " ADDR:" + getSourceAddress() );
-
- sb.append( " CHAN:" );
- sb.append( getChannel() );
-
- sb.append( " CALL TIMER:" );
- sb.append( getCallTimer() );
-
- sb.append( " SECS TO:" );
- sb.append( getToID() );
-
- return sb.toString();
- }
-
- public String getAddress()
- {
- return getSourceAddress();
- }
-
- /**
- * Call timer in seconds
- */
- public int getCallTimer()
- {
- int units = mMessage.getInt( CALL_TIMER );
-
- return (int)( units / 10 );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.UnitChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class TelephoneInterconnectVoiceChannelGrant extends UnitChannelGrant
+{
+ public static final int[] CALL_TIMER = { 96,97,98,99,100,101,102,103,
+ 104,105,106,107,108,109,110,111 };
+
+ public TelephoneInterconnectVoiceChannelGrant( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ if( isEmergency() )
+ {
+ sb.append( " EMERGENCY" );
+ }
+
+ sb.append( " ADDR:" + getSourceAddress() );
+
+ sb.append( " CHAN:" );
+ sb.append( getChannel() );
+
+ sb.append( " CALL TIMER:" );
+ sb.append( getCallTimer() );
+
+ sb.append( " SECS TO:" );
+ sb.append( getToID() );
+
+ return sb.toString();
+ }
+
+ public String getAddress()
+ {
+ return getSourceAddress();
+ }
+
+ /**
+ * Call timer in seconds
+ */
+ public int getCallTimer()
+ {
+ int units = mMessage.getInt( CALL_TIMER );
+
+ return (int)( units / 10 );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java
index 02622b73..843f845b 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/TelephoneInterconnectVoiceChannelGrantUpdate.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class TelephoneInterconnectVoiceChannelGrantUpdate
- extends TelephoneInterconnectVoiceChannelGrant
-{
-
- public TelephoneInterconnectVoiceChannelGrantUpdate( BinaryMessage message,
- DataUnitID duid, AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class TelephoneInterconnectVoiceChannelGrantUpdate
+ extends TelephoneInterconnectVoiceChannelGrant
+{
+
+ public TelephoneInterconnectVoiceChannelGrantUpdate( BinaryMessage message,
+ DataUnitID duid, AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.TELEPHONE_INTERCONNECT_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java
index 370ee3d6..4168ccd7 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitAnswerRequest.java
@@ -1,23 +1,23 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.UnitChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitToUnitAnswerRequest extends UnitChannelGrant
-{
- public UnitToUnitAnswerRequest( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_TO_UNIT_ANSWER_REQUEST.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.UnitChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitToUnitAnswerRequest extends UnitChannelGrant
+{
+ public UnitToUnitAnswerRequest( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_TO_UNIT_ANSWER_REQUEST.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java
index abb224db..8229c6d5 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrant.java
@@ -1,47 +1,47 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.UnitChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitToUnitVoiceChannelGrant extends UnitChannelGrant
-{
- public UnitToUnitVoiceChannelGrant( BinaryMessage message,
- DataUnitID duid,
- AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_TO_UNIT_VOICE_CHANNEL_GRANT.getDescription();
- }
-
- public String getMessage()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( getMessageStub() );
-
- if( isEmergency() )
- {
- sb.append( " EMERGENCY" );
- }
-
- sb.append( " SOURCE UNIT:" );
- sb.append( getSourceAddress() );
-
- sb.append( " TARGET UNIT:" );
- sb.append( getTargetAddress() );
-
- sb.append( " CHAN:" + getChannelIdentifier() + "-" + getChannelNumber() );
- sb.append( " DN:" + getDownlinkFrequency() );
- sb.append( " UP:" + getUplinkFrequency() );
-
- return sb.toString();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.UnitChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitToUnitVoiceChannelGrant extends UnitChannelGrant
+{
+ public UnitToUnitVoiceChannelGrant( BinaryMessage message,
+ DataUnitID duid,
+ AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_TO_UNIT_VOICE_CHANNEL_GRANT.getDescription();
+ }
+
+ public String getMessage()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( getMessageStub() );
+
+ if( isEmergency() )
+ {
+ sb.append( " EMERGENCY" );
+ }
+
+ sb.append( " SOURCE UNIT:" );
+ sb.append( getSourceAddress() );
+
+ sb.append( " TARGET UNIT:" );
+ sb.append( getTargetAddress() );
+
+ sb.append( " CHAN:" + getChannelIdentifier() + "-" + getChannelNumber() );
+ sb.append( " DN:" + getDownlinkFrequency() );
+ sb.append( " UP:" + getUplinkFrequency() );
+
+ return sb.toString();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java
similarity index 96%
rename from src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java
rename to src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java
index 9b88d265..025021b9 100644
--- a/src/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java
+++ b/src/main/java/module/decode/p25/message/tsbk/osp/voice/UnitToUnitVoiceChannelGrantUpdate.java
@@ -1,22 +1,22 @@
-package module.decode.p25.message.tsbk.osp.voice;
-
-import module.decode.p25.message.tsbk.UnitChannelGrant;
-import module.decode.p25.reference.DataUnitID;
-import module.decode.p25.reference.Opcode;
-import alias.AliasList;
-import bits.BinaryMessage;
-
-public class UnitToUnitVoiceChannelGrantUpdate extends UnitChannelGrant
-{
- public UnitToUnitVoiceChannelGrantUpdate( BinaryMessage message,
- DataUnitID duid, AliasList aliasList )
- {
- super( message, duid, aliasList );
- }
-
- @Override
- public String getEventType()
- {
- return Opcode.UNIT_TO_UNIT_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
- }
-}
+package module.decode.p25.message.tsbk.osp.voice;
+
+import module.decode.p25.message.tsbk.UnitChannelGrant;
+import module.decode.p25.reference.DataUnitID;
+import module.decode.p25.reference.Opcode;
+import alias.AliasList;
+import bits.BinaryMessage;
+
+public class UnitToUnitVoiceChannelGrantUpdate extends UnitChannelGrant
+{
+ public UnitToUnitVoiceChannelGrantUpdate( BinaryMessage message,
+ DataUnitID duid, AliasList aliasList )
+ {
+ super( message, duid, aliasList );
+ }
+
+ @Override
+ public String getEventType()
+ {
+ return Opcode.UNIT_TO_UNIT_VOICE_CHANNEL_GRANT_UPDATE.getDescription();
+ }
+}
diff --git a/src/module/decode/p25/message/tsbk/vendor/VendorOpcode.java b/src/main/java/module/decode/p25/message/tsbk/vendor/VendorOpcode.java
similarity index 100%
rename from src/module/decode/p25/message/tsbk/vendor/VendorOpcode.java
rename to src/main/java/module/decode/p25/message/tsbk/vendor/VendorOpcode.java
diff --git a/src/module/decode/p25/message/vselp/VSELP1Message.java b/src/main/java/module/decode/p25/message/vselp/VSELP1Message.java
similarity index 100%
rename from src/module/decode/p25/message/vselp/VSELP1Message.java
rename to src/main/java/module/decode/p25/message/vselp/VSELP1Message.java
diff --git a/src/module/decode/p25/message/vselp/VSELP2Message.java b/src/main/java/module/decode/p25/message/vselp/VSELP2Message.java
similarity index 100%
rename from src/module/decode/p25/message/vselp/VSELP2Message.java
rename to src/main/java/module/decode/p25/message/vselp/VSELP2Message.java
diff --git a/src/module/decode/p25/reference/DataUnitID.java b/src/main/java/module/decode/p25/reference/DataUnitID.java
similarity index 100%
rename from src/module/decode/p25/reference/DataUnitID.java
rename to src/main/java/module/decode/p25/reference/DataUnitID.java
diff --git a/src/module/decode/p25/reference/DenyReason.java b/src/main/java/module/decode/p25/reference/DenyReason.java
similarity index 96%
rename from src/module/decode/p25/reference/DenyReason.java
rename to src/main/java/module/decode/p25/reference/DenyReason.java
index 1668bf68..6370e7e7 100644
--- a/src/module/decode/p25/reference/DenyReason.java
+++ b/src/main/java/module/decode/p25/reference/DenyReason.java
@@ -1,125 +1,125 @@
-package module.decode.p25.reference;
-
-public enum DenyReason
-{
- RESERVED( 0x00 ),
- REQUESTING_UNIT_NOT_VALID( 0x10 ),
- REQUESTING_UNIT_NOT_AUTHORIZED_FOR_SERVICE( 0x11 ),
- TARGET_UNIT_NOT_VALID( 0x20 ),
- TARGET_UNIT_NOT_AUTHORIZED_FOR_SERVICE( 0x21 ),
- TARGET_UNIT_REFUSED_CALL( 0x2F ),
- TARGET_GROUP_NOT_VALID( 0x30 ),
- TARGET_GROUP_NOT_AUTHORIZED_FOR_SERVICE( 0x31 ),
- INVALID_DIALING( 0x40 ),
- TELEPHONE_NUMBER_NOT_AUTHORIZED( 0x41 ),
- PSTN_NOT_VALID( 0x42 ),
- CALL_TIMEOUT( 0x50 ),
- LANDLINE_TERMINATED_CALL( 0x51 ),
- SUBSCRIBER_UNIT_TERMINATED_CALL( 0x52 ),
- CALL_PREEMPTED( 0x5F ),
- SITE_ACCESS_DENIAL( 0x60 ),
- USER_OR_SYSTEM_DEFINED( 0x61 ),
- CALL_OPTIONS_NOT_VALID_FOR_SERVICE( 0xF0 ),
- PROTECTION_SERVICE_OPTION_NOT_VALID( 0xF1 ),
- DUPLEX_SERVICE_OPTION_NOT_VALID( 0xF2 ),
- CIRCUIT_OR_PACKET_MODE_OPTION_NOT_VALID( 0xF3 ),
- SYSTEM_DOES_NOT_SUPPORT_SERVICE( 0xFF ),
- UNKNOWN( -1 );
-
- private int mCode;
-
- private DenyReason( int code )
- {
- mCode = code;
- }
-
- public static DenyReason fromCode( int code )
- {
- if( code == 0x10 )
- {
- return DenyReason.REQUESTING_UNIT_NOT_VALID;
- }
- else if( code == 0x11 )
- {
- return REQUESTING_UNIT_NOT_AUTHORIZED_FOR_SERVICE;
- }
- else if( code == 0x20 )
- {
- return DenyReason.TARGET_UNIT_NOT_VALID;
- }
- else if( code == 0x21 )
- {
- return TARGET_UNIT_NOT_AUTHORIZED_FOR_SERVICE;
- }
- else if( code == 0x2F )
- {
- return DenyReason.TARGET_UNIT_REFUSED_CALL;
- }
- else if( code == 0x30 )
- {
- return TARGET_GROUP_NOT_VALID;
- }
- else if( code == 0x31 )
- {
- return DenyReason.TARGET_GROUP_NOT_AUTHORIZED_FOR_SERVICE;
- }
- else if( code == 0x40 )
- {
- return DenyReason.INVALID_DIALING;
- }
- else if( code == 0x41 )
- {
- return DenyReason.TELEPHONE_NUMBER_NOT_AUTHORIZED;
- }
- else if( code == 0x42 )
- {
- return DenyReason.PSTN_NOT_VALID;
- }
- else if( code == 0x50 )
- {
- return CALL_TIMEOUT;
- }
- else if( code == 0x51 )
- {
- return LANDLINE_TERMINATED_CALL;
- }
- else if( code == 0x52 )
- {
- return SUBSCRIBER_UNIT_TERMINATED_CALL;
- }
- else if( code == 0x5F )
- {
- return DenyReason.CALL_PREEMPTED;
- }
- else if( code == 0x60 )
- {
- return SITE_ACCESS_DENIAL;
- }
- else if( code == 0xF0 )
- {
- return CALL_OPTIONS_NOT_VALID_FOR_SERVICE;
- }
- else if( code == 0xF1 )
- {
- return PROTECTION_SERVICE_OPTION_NOT_VALID;
- }
- else if( code == 0xF2 )
- {
- return DenyReason.DUPLEX_SERVICE_OPTION_NOT_VALID;
- }
- else if( code == 0xF3 )
- {
- return CIRCUIT_OR_PACKET_MODE_OPTION_NOT_VALID;
- }
- else if( code <= 0x5E )
- {
- return DenyReason.RESERVED;
- }
- else if( code >= 0x61 )
- {
- return DenyReason.USER_OR_SYSTEM_DEFINED;
- }
-
- return UNKNOWN;
- }
-}
+package module.decode.p25.reference;
+
+public enum DenyReason
+{
+ RESERVED( 0x00 ),
+ REQUESTING_UNIT_NOT_VALID( 0x10 ),
+ REQUESTING_UNIT_NOT_AUTHORIZED_FOR_SERVICE( 0x11 ),
+ TARGET_UNIT_NOT_VALID( 0x20 ),
+ TARGET_UNIT_NOT_AUTHORIZED_FOR_SERVICE( 0x21 ),
+ TARGET_UNIT_REFUSED_CALL( 0x2F ),
+ TARGET_GROUP_NOT_VALID( 0x30 ),
+ TARGET_GROUP_NOT_AUTHORIZED_FOR_SERVICE( 0x31 ),
+ INVALID_DIALING( 0x40 ),
+ TELEPHONE_NUMBER_NOT_AUTHORIZED( 0x41 ),
+ PSTN_NOT_VALID( 0x42 ),
+ CALL_TIMEOUT( 0x50 ),
+ LANDLINE_TERMINATED_CALL( 0x51 ),
+ SUBSCRIBER_UNIT_TERMINATED_CALL( 0x52 ),
+ CALL_PREEMPTED( 0x5F ),
+ SITE_ACCESS_DENIAL( 0x60 ),
+ USER_OR_SYSTEM_DEFINED( 0x61 ),
+ CALL_OPTIONS_NOT_VALID_FOR_SERVICE( 0xF0 ),
+ PROTECTION_SERVICE_OPTION_NOT_VALID( 0xF1 ),
+ DUPLEX_SERVICE_OPTION_NOT_VALID( 0xF2 ),
+ CIRCUIT_OR_PACKET_MODE_OPTION_NOT_VALID( 0xF3 ),
+ SYSTEM_DOES_NOT_SUPPORT_SERVICE( 0xFF ),
+ UNKNOWN( -1 );
+
+ private int mCode;
+
+ private DenyReason( int code )
+ {
+ mCode = code;
+ }
+
+ public static DenyReason fromCode( int code )
+ {
+ if( code == 0x10 )
+ {
+ return DenyReason.REQUESTING_UNIT_NOT_VALID;
+ }
+ else if( code == 0x11 )
+ {
+ return REQUESTING_UNIT_NOT_AUTHORIZED_FOR_SERVICE;
+ }
+ else if( code == 0x20 )
+ {
+ return DenyReason.TARGET_UNIT_NOT_VALID;
+ }
+ else if( code == 0x21 )
+ {
+ return TARGET_UNIT_NOT_AUTHORIZED_FOR_SERVICE;
+ }
+ else if( code == 0x2F )
+ {
+ return DenyReason.TARGET_UNIT_REFUSED_CALL;
+ }
+ else if( code == 0x30 )
+ {
+ return TARGET_GROUP_NOT_VALID;
+ }
+ else if( code == 0x31 )
+ {
+ return DenyReason.TARGET_GROUP_NOT_AUTHORIZED_FOR_SERVICE;
+ }
+ else if( code == 0x40 )
+ {
+ return DenyReason.INVALID_DIALING;
+ }
+ else if( code == 0x41 )
+ {
+ return DenyReason.TELEPHONE_NUMBER_NOT_AUTHORIZED;
+ }
+ else if( code == 0x42 )
+ {
+ return DenyReason.PSTN_NOT_VALID;
+ }
+ else if( code == 0x50 )
+ {
+ return CALL_TIMEOUT;
+ }
+ else if( code == 0x51 )
+ {
+ return LANDLINE_TERMINATED_CALL;
+ }
+ else if( code == 0x52 )
+ {
+ return SUBSCRIBER_UNIT_TERMINATED_CALL;
+ }
+ else if( code == 0x5F )
+ {
+ return DenyReason.CALL_PREEMPTED;
+ }
+ else if( code == 0x60 )
+ {
+ return SITE_ACCESS_DENIAL;
+ }
+ else if( code == 0xF0 )
+ {
+ return CALL_OPTIONS_NOT_VALID_FOR_SERVICE;
+ }
+ else if( code == 0xF1 )
+ {
+ return PROTECTION_SERVICE_OPTION_NOT_VALID;
+ }
+ else if( code == 0xF2 )
+ {
+ return DenyReason.DUPLEX_SERVICE_OPTION_NOT_VALID;
+ }
+ else if( code == 0xF3 )
+ {
+ return CIRCUIT_OR_PACKET_MODE_OPTION_NOT_VALID;
+ }
+ else if( code <= 0x5E )
+ {
+ return DenyReason.RESERVED;
+ }
+ else if( code >= 0x61 )
+ {
+ return DenyReason.USER_OR_SYSTEM_DEFINED;
+ }
+
+ return UNKNOWN;
+ }
+}
diff --git a/src/module/decode/p25/reference/Digit.java b/src/main/java/module/decode/p25/reference/Digit.java
similarity index 95%
rename from src/module/decode/p25/reference/Digit.java
rename to src/main/java/module/decode/p25/reference/Digit.java
index 88ea0448..135b53b7 100644
--- a/src/module/decode/p25/reference/Digit.java
+++ b/src/main/java/module/decode/p25/reference/Digit.java
@@ -1,81 +1,81 @@
-package module.decode.p25.reference;
-
-import java.util.List;
-
-public enum Digit
-{
- D0( "0", "A" ),
- D1( "1", "B" ),
- D2( "2", "C" ),
- D3( "3", "D" ),
- D4( "4", "-" ),
- D5( "5", "-" ),
- D6( "6", "-" ),
- D7( "7", "-" ),
- D8( "8", "-" ),
- D9( "9", "-" ),
- D10( "*", "-" ),
- D11( "#", "-" ),
- D12( "-", "-" ),
- D13( "HOOK FLASH", "-" ),
- D14( "PAUSE", "-" ),
- D15( "ESC", "NULL" ),
- DUNK( "?", "?" );
-
- private String mValue;
- private String mEscapedValue;
-
- private Digit( String value, String escapedValue )
- {
- mValue = value;
- mEscapedValue = escapedValue;
- }
-
- public String getValue()
- {
- return mValue;
- }
-
- public String getEscapedValue()
- {
- return mEscapedValue;
- }
-
- public static Digit fromValue( int value )
- {
- if( 0 <= value && value <= 15 )
- {
- return values()[ value ];
- }
-
- return DUNK;
- }
-
- public static String decode( List values )
- {
- StringBuilder sb = new StringBuilder();
-
- boolean escape = false;
-
- for( Integer value: values )
- {
- Digit d = Digit.fromValue( value );
-
- if( d == Digit.D15 )
- {
- escape = true;
- }
- else if( escape )
- {
- sb.append( d.getEscapedValue() );
- escape = false;
- }
- else
- {
- sb.append( d.getValue() );
- }
- }
-
- return sb.toString();
- }
-}
+package module.decode.p25.reference;
+
+import java.util.List;
+
+public enum Digit
+{
+ D0( "0", "A" ),
+ D1( "1", "B" ),
+ D2( "2", "C" ),
+ D3( "3", "D" ),
+ D4( "4", "-" ),
+ D5( "5", "-" ),
+ D6( "6", "-" ),
+ D7( "7", "-" ),
+ D8( "8", "-" ),
+ D9( "9", "-" ),
+ D10( "*", "-" ),
+ D11( "#", "-" ),
+ D12( "-", "-" ),
+ D13( "HOOK FLASH", "-" ),
+ D14( "PAUSE", "-" ),
+ D15( "ESC", "NULL" ),
+ DUNK( "?", "?" );
+
+ private String mValue;
+ private String mEscapedValue;
+
+ private Digit( String value, String escapedValue )
+ {
+ mValue = value;
+ mEscapedValue = escapedValue;
+ }
+
+ public String getValue()
+ {
+ return mValue;
+ }
+
+ public String getEscapedValue()
+ {
+ return mEscapedValue;
+ }
+
+ public static Digit fromValue( int value )
+ {
+ if( 0 <= value && value <= 15 )
+ {
+ return values()[ value ];
+ }
+
+ return DUNK;
+ }
+
+ public static String decode( List values )
+ {
+ StringBuilder sb = new StringBuilder();
+
+ boolean escape = false;
+
+ for( Integer value: values )
+ {
+ Digit d = Digit.fromValue( value );
+
+ if( d == Digit.D15 )
+ {
+ escape = true;
+ }
+ else if( escape )
+ {
+ sb.append( d.getEscapedValue() );
+ escape = false;
+ }
+ else
+ {
+ sb.append( d.getValue() );
+ }
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/src/module/decode/p25/reference/Encryption.java b/src/main/java/module/decode/p25/reference/Encryption.java
similarity index 100%
rename from src/module/decode/p25/reference/Encryption.java
rename to src/main/java/module/decode/p25/reference/Encryption.java
diff --git a/src/module/decode/p25/reference/ExtendedFunction.java b/src/main/java/module/decode/p25/reference/ExtendedFunction.java
similarity index 100%
rename from src/module/decode/p25/reference/ExtendedFunction.java
rename to src/main/java/module/decode/p25/reference/ExtendedFunction.java
diff --git a/src/module/decode/p25/reference/IPHeaderCompression.java b/src/main/java/module/decode/p25/reference/IPHeaderCompression.java
similarity index 100%
rename from src/module/decode/p25/reference/IPHeaderCompression.java
rename to src/main/java/module/decode/p25/reference/IPHeaderCompression.java
diff --git a/src/module/decode/p25/reference/IPProtocol.java b/src/main/java/module/decode/p25/reference/IPProtocol.java
similarity index 100%
rename from src/module/decode/p25/reference/IPProtocol.java
rename to src/main/java/module/decode/p25/reference/IPProtocol.java
diff --git a/src/module/decode/p25/reference/LinkControlOpcode.java b/src/main/java/module/decode/p25/reference/LinkControlOpcode.java
similarity index 100%
rename from src/module/decode/p25/reference/LinkControlOpcode.java
rename to src/main/java/module/decode/p25/reference/LinkControlOpcode.java
diff --git a/src/module/decode/p25/reference/MDPConfigurationOption.java b/src/main/java/module/decode/p25/reference/MDPConfigurationOption.java
similarity index 100%
rename from src/module/decode/p25/reference/MDPConfigurationOption.java
rename to src/main/java/module/decode/p25/reference/MDPConfigurationOption.java
diff --git a/src/module/decode/p25/reference/Opcode.java b/src/main/java/module/decode/p25/reference/Opcode.java
similarity index 100%
rename from src/module/decode/p25/reference/Opcode.java
rename to src/main/java/module/decode/p25/reference/Opcode.java
diff --git a/src/module/decode/p25/reference/P25NetworkCallsign.java b/src/main/java/module/decode/p25/reference/P25NetworkCallsign.java
similarity index 100%
rename from src/module/decode/p25/reference/P25NetworkCallsign.java
rename to src/main/java/module/decode/p25/reference/P25NetworkCallsign.java
diff --git a/src/module/decode/p25/reference/PDUFormat.java b/src/main/java/module/decode/p25/reference/PDUFormat.java
similarity index 100%
rename from src/module/decode/p25/reference/PDUFormat.java
rename to src/main/java/module/decode/p25/reference/PDUFormat.java
diff --git a/src/module/decode/p25/reference/PDUType.java b/src/main/java/module/decode/p25/reference/PDUType.java
similarity index 100%
rename from src/module/decode/p25/reference/PDUType.java
rename to src/main/java/module/decode/p25/reference/PDUType.java
diff --git a/src/module/decode/p25/reference/QueuedResponseReason.java b/src/main/java/module/decode/p25/reference/QueuedResponseReason.java
similarity index 96%
rename from src/module/decode/p25/reference/QueuedResponseReason.java
rename to src/main/java/module/decode/p25/reference/QueuedResponseReason.java
index b5de14dd..07920c95 100644
--- a/src/module/decode/p25/reference/QueuedResponseReason.java
+++ b/src/main/java/module/decode/p25/reference/QueuedResponseReason.java
@@ -1,69 +1,69 @@
-package module.decode.p25.reference;
-
-public enum QueuedResponseReason
-{
- RESERVED( 0x00 ),
- REQUESTING_UNIT_BUSY_OTHER_SERVICE( 0x10 ),
- TARGET_UNIT_BUSY_OTHER_SERVICE( 0x20 ),
- TARGET_UNIT_QUEUED_THIS_CALL( 0x2F ),
- TARGET_GROUP_CURRENTLY_ACTIVE( 0x30 ),
- CHANNEL_RESOURCES_UNAVAILABLE( 0x40 ),
- TELEPHONE_RESOURCES_UNAVAILABLE( 0x41 ),
- DATA_RESOURCES_UNAVAILABLE( 0x42 ),
- SUPERSEDING_SERVICE_CURRENTLY_ACTIVE( 0x50 ),
- USER_OR_SYSTEM_DEFINED( 0x80 ),
- UNKNOWN( -1 );
-
- private int mCode;
-
- private QueuedResponseReason( int code )
- {
- mCode = code;
- }
-
- public static QueuedResponseReason fromCode( int code )
- {
- if( code == 0x10 )
- {
- return QueuedResponseReason.REQUESTING_UNIT_BUSY_OTHER_SERVICE;
- }
- else if( code == 0x20 )
- {
- return QueuedResponseReason.TARGET_UNIT_BUSY_OTHER_SERVICE;
- }
- else if( code == 0x2F )
- {
- return QueuedResponseReason.TARGET_UNIT_QUEUED_THIS_CALL;
- }
- else if( code == 0x30 )
- {
- return QueuedResponseReason.TARGET_GROUP_CURRENTLY_ACTIVE;
- }
- else if( code == 0x40 )
- {
- return QueuedResponseReason.CHANNEL_RESOURCES_UNAVAILABLE;
- }
- else if( code == 0x41 )
- {
- return QueuedResponseReason.TELEPHONE_RESOURCES_UNAVAILABLE;
- }
- else if( code == 0x42 )
- {
- return QueuedResponseReason.DATA_RESOURCES_UNAVAILABLE;
- }
- else if( code == 0x50 )
- {
- return QueuedResponseReason.SUPERSEDING_SERVICE_CURRENTLY_ACTIVE;
- }
- else if( code <= 0x7F )
- {
- return QueuedResponseReason.RESERVED;
- }
- else if( code >= 0x80 )
- {
- return QueuedResponseReason.USER_OR_SYSTEM_DEFINED;
- }
-
- return UNKNOWN;
- }
-}
+package module.decode.p25.reference;
+
+public enum QueuedResponseReason
+{
+ RESERVED( 0x00 ),
+ REQUESTING_UNIT_BUSY_OTHER_SERVICE( 0x10 ),
+ TARGET_UNIT_BUSY_OTHER_SERVICE( 0x20 ),
+ TARGET_UNIT_QUEUED_THIS_CALL( 0x2F ),
+ TARGET_GROUP_CURRENTLY_ACTIVE( 0x30 ),
+ CHANNEL_RESOURCES_UNAVAILABLE( 0x40 ),
+ TELEPHONE_RESOURCES_UNAVAILABLE( 0x41 ),
+ DATA_RESOURCES_UNAVAILABLE( 0x42 ),
+ SUPERSEDING_SERVICE_CURRENTLY_ACTIVE( 0x50 ),
+ USER_OR_SYSTEM_DEFINED( 0x80 ),
+ UNKNOWN( -1 );
+
+ private int mCode;
+
+ private QueuedResponseReason( int code )
+ {
+ mCode = code;
+ }
+
+ public static QueuedResponseReason fromCode( int code )
+ {
+ if( code == 0x10 )
+ {
+ return QueuedResponseReason.REQUESTING_UNIT_BUSY_OTHER_SERVICE;
+ }
+ else if( code == 0x20 )
+ {
+ return QueuedResponseReason.TARGET_UNIT_BUSY_OTHER_SERVICE;
+ }
+ else if( code == 0x2F )
+ {
+ return QueuedResponseReason.TARGET_UNIT_QUEUED_THIS_CALL;
+ }
+ else if( code == 0x30 )
+ {
+ return QueuedResponseReason.TARGET_GROUP_CURRENTLY_ACTIVE;
+ }
+ else if( code == 0x40 )
+ {
+ return QueuedResponseReason.CHANNEL_RESOURCES_UNAVAILABLE;
+ }
+ else if( code == 0x41 )
+ {
+ return QueuedResponseReason.TELEPHONE_RESOURCES_UNAVAILABLE;
+ }
+ else if( code == 0x42 )
+ {
+ return QueuedResponseReason.DATA_RESOURCES_UNAVAILABLE;
+ }
+ else if( code == 0x50 )
+ {
+ return QueuedResponseReason.SUPERSEDING_SERVICE_CURRENTLY_ACTIVE;
+ }
+ else if( code <= 0x7F )
+ {
+ return QueuedResponseReason.RESERVED;
+ }
+ else if( code >= 0x80 )
+ {
+ return QueuedResponseReason.USER_OR_SYSTEM_DEFINED;
+ }
+
+ return UNKNOWN;
+ }
+}
diff --git a/src/module/decode/p25/reference/Response.java b/src/main/java/module/decode/p25/reference/Response.java
similarity index 100%
rename from src/module/decode/p25/reference/Response.java
rename to src/main/java/module/decode/p25/reference/Response.java
diff --git a/src/module/decode/p25/reference/SNDCPActivationRejectReason.java b/src/main/java/module/decode/p25/reference/SNDCPActivationRejectReason.java
similarity index 95%
rename from src/module/decode/p25/reference/SNDCPActivationRejectReason.java
rename to src/main/java/module/decode/p25/reference/SNDCPActivationRejectReason.java
index 210c4030..b1f55065 100644
--- a/src/module/decode/p25/reference/SNDCPActivationRejectReason.java
+++ b/src/main/java/module/decode/p25/reference/SNDCPActivationRejectReason.java
@@ -1,53 +1,53 @@
-package module.decode.p25.reference;
-
-public enum SNDCPActivationRejectReason
-{
- R0( 0, "ANY REASON" ),
- R1( 1, "MRC NOT PROVISIONED FOR TDS" ),
- R2( 2, "MRC DSUT NOT SUPPORTED" ),
- R3( 3, "MAX TDS CONTEXTS EXCEEDED" ),
- R4( 4, "SNDCP VERSION NOT SUPPORTED" ),
- R5( 5, "TDS NOT SUPPORTED BY FNE" ),
- R6( 6, "TDS NOT SUPPORTED BY THIS SYSTEM" ),
- R7( 7, "IPV4 STATIC ADDRESS NOT CORRECT" ),
- R8( 8, "IPV4 STATIC ADDRESS NOT ALLOWED" ),
- R9( 9, "IPV4 STATIC ADDRESS IN USE" ),
- R10( 10, "IPV4 NOT SUPPORTED" ),
- R11( 11, "IPV4 DYNAMIC ADDRESS POOL EMPTY" ),
- R12( 12, "IPV4 DYNAMIC ADDRESS NOT SUPPORTED" ),
- UNKNOWN( -1, "UNKNOWN" );
-
- private int mValue;
- public String mLabel;
-
- private SNDCPActivationRejectReason( int value, String label )
- {
- mValue = value;
- mLabel = label;
- }
-
- public int getValue()
- {
- return mValue;
- }
-
- public String getLabel()
- {
- return mLabel;
- }
-
- public String toString()
- {
- return getLabel();
- }
-
- public static SNDCPActivationRejectReason fromValue( int value )
- {
- if( 0 <= value && value <= 12 )
- {
- return values()[ value ];
- }
-
- return UNKNOWN;
- }
-}
+package module.decode.p25.reference;
+
+public enum SNDCPActivationRejectReason
+{
+ R0( 0, "ANY REASON" ),
+ R1( 1, "MRC NOT PROVISIONED FOR TDS" ),
+ R2( 2, "MRC DSUT NOT SUPPORTED" ),
+ R3( 3, "MAX TDS CONTEXTS EXCEEDED" ),
+ R4( 4, "SNDCP VERSION NOT SUPPORTED" ),
+ R5( 5, "TDS NOT SUPPORTED BY FNE" ),
+ R6( 6, "TDS NOT SUPPORTED BY THIS SYSTEM" ),
+ R7( 7, "IPV4 STATIC ADDRESS NOT CORRECT" ),
+ R8( 8, "IPV4 STATIC ADDRESS NOT ALLOWED" ),
+ R9( 9, "IPV4 STATIC ADDRESS IN USE" ),
+ R10( 10, "IPV4 NOT SUPPORTED" ),
+ R11( 11, "IPV4 DYNAMIC ADDRESS POOL EMPTY" ),
+ R12( 12, "IPV4 DYNAMIC ADDRESS NOT SUPPORTED" ),
+ UNKNOWN( -1, "UNKNOWN" );
+
+ private int mValue;
+ public String mLabel;
+
+ private SNDCPActivationRejectReason( int value, String label )
+ {
+ mValue = value;
+ mLabel = label;
+ }
+
+ public int getValue()
+ {
+ return mValue;
+ }
+
+ public String getLabel()
+ {
+ return mLabel;
+ }
+
+ public String toString()
+ {
+ return getLabel();
+ }
+
+ public static SNDCPActivationRejectReason fromValue( int value )
+ {
+ if( 0 <= value && value <= 12 )
+ {
+ return values()[ value ];
+ }
+
+ return UNKNOWN;
+ }
+}
diff --git a/src/module/decode/p25/reference/Service.java b/src/main/java/module/decode/p25/reference/Service.java
similarity index 100%
rename from src/module/decode/p25/reference/Service.java
rename to src/main/java/module/decode/p25/reference/Service.java
diff --git a/src/module/decode/p25/reference/ServiceAccessPoint.java b/src/main/java/module/decode/p25/reference/ServiceAccessPoint.java
similarity index 100%
rename from src/module/decode/p25/reference/ServiceAccessPoint.java
rename to src/main/java/module/decode/p25/reference/ServiceAccessPoint.java
diff --git a/src/module/decode/p25/reference/StackOperation.java b/src/main/java/module/decode/p25/reference/StackOperation.java
similarity index 100%
rename from src/module/decode/p25/reference/StackOperation.java
rename to src/main/java/module/decode/p25/reference/StackOperation.java
diff --git a/src/module/decode/p25/reference/Status.java b/src/main/java/module/decode/p25/reference/Status.java
similarity index 100%
rename from src/module/decode/p25/reference/Status.java
rename to src/main/java/module/decode/p25/reference/Status.java
diff --git a/src/module/decode/p25/reference/Vendor.java b/src/main/java/module/decode/p25/reference/Vendor.java
similarity index 100%
rename from src/module/decode/p25/reference/Vendor.java
rename to src/main/java/module/decode/p25/reference/Vendor.java
diff --git a/src/module/decode/p25/reference/VendorLinkControlOpcode.java b/src/main/java/module/decode/p25/reference/VendorLinkControlOpcode.java
similarity index 100%
rename from src/module/decode/p25/reference/VendorLinkControlOpcode.java
rename to src/main/java/module/decode/p25/reference/VendorLinkControlOpcode.java
diff --git a/src/module/decode/passport/DecodeConfigPassport.java b/src/main/java/module/decode/passport/DecodeConfigPassport.java
similarity index 100%
rename from src/module/decode/passport/DecodeConfigPassport.java
rename to src/main/java/module/decode/passport/DecodeConfigPassport.java
diff --git a/src/module/decode/passport/PassportBand.java b/src/main/java/module/decode/passport/PassportBand.java
similarity index 100%
rename from src/module/decode/passport/PassportBand.java
rename to src/main/java/module/decode/passport/PassportBand.java
diff --git a/src/module/decode/passport/PassportCallEvent.java b/src/main/java/module/decode/passport/PassportCallEvent.java
similarity index 100%
rename from src/module/decode/passport/PassportCallEvent.java
rename to src/main/java/module/decode/passport/PassportCallEvent.java
diff --git a/src/module/decode/passport/PassportDecoder.java b/src/main/java/module/decode/passport/PassportDecoder.java
similarity index 100%
rename from src/module/decode/passport/PassportDecoder.java
rename to src/main/java/module/decode/passport/PassportDecoder.java
diff --git a/src/module/decode/passport/PassportDecoderEditor.java b/src/main/java/module/decode/passport/PassportDecoderEditor.java
similarity index 100%
rename from src/module/decode/passport/PassportDecoderEditor.java
rename to src/main/java/module/decode/passport/PassportDecoderEditor.java
diff --git a/src/module/decode/passport/PassportDecoderState.java b/src/main/java/module/decode/passport/PassportDecoderState.java
similarity index 100%
rename from src/module/decode/passport/PassportDecoderState.java
rename to src/main/java/module/decode/passport/PassportDecoderState.java
diff --git a/src/module/decode/passport/PassportMessage.java b/src/main/java/module/decode/passport/PassportMessage.java
similarity index 100%
rename from src/module/decode/passport/PassportMessage.java
rename to src/main/java/module/decode/passport/PassportMessage.java
diff --git a/src/module/decode/passport/PassportMessageFilter.java b/src/main/java/module/decode/passport/PassportMessageFilter.java
similarity index 100%
rename from src/module/decode/passport/PassportMessageFilter.java
rename to src/main/java/module/decode/passport/PassportMessageFilter.java
diff --git a/src/module/decode/passport/PassportMessageProcessor.java b/src/main/java/module/decode/passport/PassportMessageProcessor.java
similarity index 100%
rename from src/module/decode/passport/PassportMessageProcessor.java
rename to src/main/java/module/decode/passport/PassportMessageProcessor.java
diff --git a/src/module/decode/tait/Tait1200ANIMessage.java b/src/main/java/module/decode/tait/Tait1200ANIMessage.java
similarity index 100%
rename from src/module/decode/tait/Tait1200ANIMessage.java
rename to src/main/java/module/decode/tait/Tait1200ANIMessage.java
diff --git a/src/module/decode/tait/Tait1200ANIMessageProcessor.java b/src/main/java/module/decode/tait/Tait1200ANIMessageProcessor.java
similarity index 100%
rename from src/module/decode/tait/Tait1200ANIMessageProcessor.java
rename to src/main/java/module/decode/tait/Tait1200ANIMessageProcessor.java
diff --git a/src/module/decode/tait/Tait1200CallEvent.java b/src/main/java/module/decode/tait/Tait1200CallEvent.java
similarity index 100%
rename from src/module/decode/tait/Tait1200CallEvent.java
rename to src/main/java/module/decode/tait/Tait1200CallEvent.java
diff --git a/src/module/decode/tait/Tait1200Decoder.java b/src/main/java/module/decode/tait/Tait1200Decoder.java
similarity index 100%
rename from src/module/decode/tait/Tait1200Decoder.java
rename to src/main/java/module/decode/tait/Tait1200Decoder.java
diff --git a/src/module/decode/tait/Tait1200DecoderState.java b/src/main/java/module/decode/tait/Tait1200DecoderState.java
similarity index 100%
rename from src/module/decode/tait/Tait1200DecoderState.java
rename to src/main/java/module/decode/tait/Tait1200DecoderState.java
diff --git a/src/module/decode/tait/Tait1200GPSMessage.java b/src/main/java/module/decode/tait/Tait1200GPSMessage.java
similarity index 100%
rename from src/module/decode/tait/Tait1200GPSMessage.java
rename to src/main/java/module/decode/tait/Tait1200GPSMessage.java
diff --git a/src/module/decode/tait/Tait1200GPSMessageProcessor.java b/src/main/java/module/decode/tait/Tait1200GPSMessageProcessor.java
similarity index 100%
rename from src/module/decode/tait/Tait1200GPSMessageProcessor.java
rename to src/main/java/module/decode/tait/Tait1200GPSMessageProcessor.java
diff --git a/src/module/decode/tait/Tait1200MessageFilter.java b/src/main/java/module/decode/tait/Tait1200MessageFilter.java
similarity index 100%
rename from src/module/decode/tait/Tait1200MessageFilter.java
rename to src/main/java/module/decode/tait/Tait1200MessageFilter.java
diff --git a/src/module/demodulate/am/AMDemodulatorModule.java b/src/main/java/module/demodulate/am/AMDemodulatorModule.java
similarity index 100%
rename from src/module/demodulate/am/AMDemodulatorModule.java
rename to src/main/java/module/demodulate/am/AMDemodulatorModule.java
diff --git a/src/module/demodulate/audio/DemodulatedAudioFilterModule.java b/src/main/java/module/demodulate/audio/DemodulatedAudioFilterModule.java
similarity index 100%
rename from src/module/demodulate/audio/DemodulatedAudioFilterModule.java
rename to src/main/java/module/demodulate/audio/DemodulatedAudioFilterModule.java
diff --git a/src/module/demodulate/fm/FMDemodulatorModule.java b/src/main/java/module/demodulate/fm/FMDemodulatorModule.java
similarity index 100%
rename from src/module/demodulate/fm/FMDemodulatorModule.java
rename to src/main/java/module/demodulate/fm/FMDemodulatorModule.java
diff --git a/src/module/log/CallEventLogger.java b/src/main/java/module/log/CallEventLogger.java
similarity index 100%
rename from src/module/log/CallEventLogger.java
rename to src/main/java/module/log/CallEventLogger.java
diff --git a/src/module/log/EventLogConfigurationEditor.java b/src/main/java/module/log/EventLogConfigurationEditor.java
similarity index 100%
rename from src/module/log/EventLogConfigurationEditor.java
rename to src/main/java/module/log/EventLogConfigurationEditor.java
diff --git a/src/module/log/EventLogManager.java b/src/main/java/module/log/EventLogManager.java
similarity index 100%
rename from src/module/log/EventLogManager.java
rename to src/main/java/module/log/EventLogManager.java
diff --git a/src/module/log/EventLogType.java b/src/main/java/module/log/EventLogType.java
similarity index 100%
rename from src/module/log/EventLogType.java
rename to src/main/java/module/log/EventLogType.java
diff --git a/src/module/log/EventLogger.java b/src/main/java/module/log/EventLogger.java
similarity index 100%
rename from src/module/log/EventLogger.java
rename to src/main/java/module/log/EventLogger.java
diff --git a/src/module/log/MessageEventLogger.java b/src/main/java/module/log/MessageEventLogger.java
similarity index 100%
rename from src/module/log/MessageEventLogger.java
rename to src/main/java/module/log/MessageEventLogger.java
diff --git a/src/module/log/config/EventLogConfiguration.java b/src/main/java/module/log/config/EventLogConfiguration.java
similarity index 100%
rename from src/module/log/config/EventLogConfiguration.java
rename to src/main/java/module/log/config/EventLogConfiguration.java
diff --git a/src/network.java b/src/main/java/network.java
similarity index 100%
rename from src/network.java
rename to src/main/java/network.java
diff --git a/src/org/jdesktop/beans/AbstractBean.java b/src/main/java/org/jdesktop/beans/AbstractBean.java
similarity index 100%
rename from src/org/jdesktop/beans/AbstractBean.java
rename to src/main/java/org/jdesktop/beans/AbstractBean.java
diff --git a/src/org/jdesktop/beans/AbstractSerializableBean.java b/src/main/java/org/jdesktop/beans/AbstractSerializableBean.java
similarity index 100%
rename from src/org/jdesktop/beans/AbstractSerializableBean.java
rename to src/main/java/org/jdesktop/beans/AbstractSerializableBean.java
diff --git a/src/org/jdesktop/swingx/JXMapKit.form b/src/main/java/org/jdesktop/swingx/JXMapKit.form
similarity index 100%
rename from src/org/jdesktop/swingx/JXMapKit.form
rename to src/main/java/org/jdesktop/swingx/JXMapKit.form
diff --git a/src/org/jdesktop/swingx/JXMapKit.java b/src/main/java/org/jdesktop/swingx/JXMapKit.java
similarity index 96%
rename from src/org/jdesktop/swingx/JXMapKit.java
rename to src/main/java/org/jdesktop/swingx/JXMapKit.java
index da422898..6fecf5d3 100644
--- a/src/org/jdesktop/swingx/JXMapKit.java
+++ b/src/main/java/org/jdesktop/swingx/JXMapKit.java
@@ -1,724 +1,724 @@
-/*
- * JXMapKit.java
- *
- * Created on November 19, 2006, 3:52 AM
- */
-
-package org.jdesktop.swingx;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JSlider;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-
-import org.jdesktop.swingx.mapviewer.DefaultTileFactory;
-import org.jdesktop.swingx.mapviewer.DefaultWaypoint;
-import org.jdesktop.swingx.mapviewer.GeoPosition;
-import org.jdesktop.swingx.mapviewer.TileFactory;
-import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
-import org.jdesktop.swingx.mapviewer.Waypoint;
-import org.jdesktop.swingx.mapviewer.WaypointPainter;
-import org.jdesktop.swingx.mapviewer.bmng.CylindricalProjectionTileFactory;
-import org.jdesktop.swingx.painter.AbstractPainter;
-import org.jdesktop.swingx.painter.CompoundPainter;
-import org.jdesktop.swingx.painter.Painter;
-
-/**
- * The JXMapKit is a pair of JXMapViewers preconfigured to be easy to use
- * with common features built in. This includes zoom buttons, a zoom slider,
- * and a mini-map in the lower right corner showing an overview of the map.
- * Each feature can be turned off using an appropriate
- * isXvisible property. For example, to turn
- * off the minimap call
- *
- *
jxMapKit.setMiniMapVisible(false);
- *
- *
- *
- * The JXMapViewer is preconfigured to connect to maps.swinglabs.org which
- * serves up global satellite imagery from NASA's
- * Blue
- * Marble NG image collection.
- *
- * @author joshy
- */
-public class JXMapKit extends JPanel
-{
- private static final long serialVersionUID = -8366577998349912380L;
- private boolean miniMapVisible = true;
- private boolean zoomSliderVisible = true;
- private boolean zoomButtonsVisible = true;
- private final boolean sliderReversed = false;
-
- @SuppressWarnings("javadoc")
- public enum DefaultProviders
- {
- SwingLabsBlueMarble, OpenStreetMaps, Custom
- }
-
- private DefaultProviders defaultProvider = DefaultProviders.SwingLabsBlueMarble;
-
- private boolean addressLocationShown = true;
-
- private boolean dataProviderCreditShown = true;
-
- /**
- * Creates a new JXMapKit
- */
- public JXMapKit()
- {
- initComponents();
- setDataProviderCreditShown(false);
-
- zoomSlider.setOpaque(false);
- try
- {
- Icon minusIcon = new ImageIcon(getClass().getResource("/org/jdesktop/swingx/mapviewer/resources/minus.png"));
- this.zoomOutButton.setIcon(minusIcon);
- this.zoomOutButton.setText("");
- Icon plusIcon = new ImageIcon(getClass().getResource("/org/jdesktop/swingx/mapviewer/resources/plus.png"));
- this.zoomInButton.setIcon(plusIcon);
- this.zoomInButton.setText("");
- }
- catch (Throwable thr)
- {
- System.out.println("error: " + thr.getMessage());
- thr.printStackTrace();
- }
-
- setTileFactory(new CylindricalProjectionTileFactory());
-
- mainMap.setCenterPosition(new GeoPosition(0, 0));
- miniMap.setCenterPosition(new GeoPosition(0, 0));
- mainMap.setRestrictOutsidePanning(true);
- miniMap.setRestrictOutsidePanning(true);
-
- rebuildMainMapOverlay();
-
- /*
- * // adapter to move the minimap after the main map has moved MouseInputAdapter ma = new MouseInputAdapter() {
- * public void mouseReleased(MouseEvent e) { miniMap.setCenterPosition(mapCenterPosition); } };
- * mainMap.addMouseMotionListener(ma); mainMap.addMouseListener(ma);
- */
-
- mainMap.addPropertyChangeListener("center", new PropertyChangeListener()
- {
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- Point2D mapCenter = (Point2D) evt.getNewValue();
- TileFactory tf = mainMap.getTileFactory();
- GeoPosition mapPos = tf.pixelToGeo(mapCenter, mainMap.getZoom());
- miniMap.setCenterPosition(mapPos);
- }
- });
-
- mainMap.addPropertyChangeListener("centerPosition", new PropertyChangeListener()
- {
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- mapCenterPosition = (GeoPosition) evt.getNewValue();
- miniMap.setCenterPosition(mapCenterPosition);
- Point2D pt = miniMap.getTileFactory().geoToPixel(mapCenterPosition, miniMap.getZoom());
- miniMap.setCenter(pt);
- miniMap.repaint();
- }
- });
-
- mainMap.addPropertyChangeListener("zoom", new PropertyChangeListener()
- {
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- zoomSlider.setValue(mainMap.getZoom());
- miniMap.setZoom(mainMap.getZoom() + 4);
- }
- });
-
- // an overlay for the mini-map which shows a rectangle representing the main map
- miniMap.setOverlayPainter(new Painter()
- {
- @Override
- public void paint(Graphics2D g, JXMapViewer map, int width, int height)
- {
- // get the viewport rect of the main map
- Rectangle mainMapBounds = mainMap.getViewportBounds();
-
- // convert to Point2Ds
- Point2D upperLeft2D = mainMapBounds.getLocation();
- Point2D lowerRight2D = new Point2D.Double(upperLeft2D.getX() + mainMapBounds.getWidth(), upperLeft2D
- .getY() + mainMapBounds.getHeight());
-
- // convert to GeoPostions
- GeoPosition upperLeft = mainMap.getTileFactory().pixelToGeo(upperLeft2D, mainMap.getZoom());
- GeoPosition lowerRight = mainMap.getTileFactory().pixelToGeo(lowerRight2D, mainMap.getZoom());
-
- // convert to Point2Ds on the mini-map
- upperLeft2D = map.getTileFactory().geoToPixel(upperLeft, map.getZoom());
- lowerRight2D = map.getTileFactory().geoToPixel(lowerRight, map.getZoom());
-
- g = (Graphics2D) g.create();
- Rectangle rect = map.getViewportBounds();
- // p("rect = " + rect);
- g.translate(-rect.x, -rect.y);
-// Point2D centerpos = map.getTileFactory().geoToPixel(mapCenterPosition, map.getZoom());
- // p("center pos = " + centerpos);
- g.setPaint(Color.RED);
- // g.drawRect((int)centerpos.getX()-30,(int)centerpos.getY()-30,60,60);
- g.drawRect((int) upperLeft2D.getX(), (int) upperLeft2D.getY(),
- (int) (lowerRight2D.getX() - upperLeft2D.getX()),
- (int) (lowerRight2D.getY() - upperLeft2D.getY()));
- g.setPaint(new Color(255, 0, 0, 50));
- g.fillRect((int) upperLeft2D.getX(), (int) upperLeft2D.getY(),
- (int) (lowerRight2D.getX() - upperLeft2D.getX()),
- (int) (lowerRight2D.getY() - upperLeft2D.getY()));
- // g.drawOval((int)lowerRight2D.getX(),(int)lowerRight2D.getY(),1,1);
- g.dispose();
- }
- });
-
- if (getDefaultProvider() == DefaultProviders.OpenStreetMaps)
- {
- setZoom(10);
- }
- else
- {
- setZoom(3);// joshy: hack, i shouldn't need this here
- }
- this.setCenterPosition(new GeoPosition(0, 0));
- }
-
- // private Point2D mapCenter = new Point2D.Double(0,0);
- private GeoPosition mapCenterPosition = new GeoPosition(0, 0);
- private boolean zoomChanging = false;
-
- /**
- * Set the current zoomlevel for the main map. The minimap will be updated accordingly
- * @param zoom the new zoom level
- */
- public void setZoom(int zoom)
- {
- zoomChanging = true;
- mainMap.setZoom(zoom);
- miniMap.setZoom(mainMap.getZoom() + 4);
- if (sliderReversed)
- {
- zoomSlider.setValue(zoomSlider.getMaximum() - zoom);
- }
- else
- {
- zoomSlider.setValue(zoom);
- }
- zoomChanging = false;
- }
-
- /**
- * Returns an action which can be attached to buttons or menu items to make the map zoom out
- * @return a preconfigured Zoom Out action
- */
- public Action getZoomOutAction()
- {
- Action act = new AbstractAction()
- {
- /**
- *
- */
- private static final long serialVersionUID = 5525706163434375107L;
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- setZoom(mainMap.getZoom() - 1);
- }
- };
- act.putValue(Action.NAME, "-");
- return act;
- }
-
- /**
- * Returns an action which can be attached to buttons or menu items to make the map zoom in
- * @return a preconfigured Zoom In action
- */
- public Action getZoomInAction()
- {
- Action act = new AbstractAction()
- {
- /**
- *
- */
- private static final long serialVersionUID = 5779971489365451352L;
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- setZoom(mainMap.getZoom() + 1);
- }
- };
- act.putValue(Action.NAME, "+");
- return act;
- }
-
- /**
- * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
- * content of this method is always regenerated by the Form Editor.
- */
- // //GEN-BEGIN:initComponents
- private void initComponents()
- {
- java.awt.GridBagConstraints gridBagConstraints;
-
- mainMap = new org.jdesktop.swingx.JXMapViewer();
- miniMap = new org.jdesktop.swingx.JXMapViewer();
- jPanel1 = new javax.swing.JPanel();
- zoomInButton = new javax.swing.JButton();
- zoomOutButton = new javax.swing.JButton();
- zoomSlider = new javax.swing.JSlider();
-
- setLayout(new java.awt.GridBagLayout());
-
- mainMap.setLayout(new java.awt.GridBagLayout());
-
- miniMap.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
- miniMap.setMinimumSize(new java.awt.Dimension(100, 100));
- miniMap.setPreferredSize(new java.awt.Dimension(100, 100));
- miniMap.setLayout(new java.awt.GridBagLayout());
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.gridx = 1;
- gridBagConstraints.gridy = 0;
- gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
- gridBagConstraints.weightx = 1.0;
- gridBagConstraints.weighty = 1.0;
- mainMap.add(miniMap, gridBagConstraints);
-
- jPanel1.setOpaque(false);
- jPanel1.setLayout(new java.awt.GridBagLayout());
-
- zoomInButton.setAction(getZoomOutAction());
- zoomInButton.setIcon(new javax.swing.ImageIcon(getClass().getResource(
- "/org/jdesktop/swingx/mapviewer/resources/plus.png")));
- zoomInButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
- zoomInButton.setMaximumSize(new java.awt.Dimension(20, 20));
- zoomInButton.setMinimumSize(new java.awt.Dimension(20, 20));
- zoomInButton.setOpaque(false);
- zoomInButton.setPreferredSize(new java.awt.Dimension(20, 20));
- zoomInButton.addActionListener(new java.awt.event.ActionListener()
- {
- @Override
- public void actionPerformed(java.awt.event.ActionEvent evt)
- {
- zoomInButtonActionPerformed(evt);
- }
- });
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.gridx = 1;
- gridBagConstraints.gridy = 1;
- gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
- gridBagConstraints.weightx = 1.0;
- gridBagConstraints.weighty = 1.0;
- jPanel1.add(zoomInButton, gridBagConstraints);
-
- zoomOutButton.setAction(getZoomInAction());
- zoomOutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource(
- "/org/jdesktop/swingx/mapviewer/resources/minus.png")));
- zoomOutButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
- zoomOutButton.setMaximumSize(new java.awt.Dimension(20, 20));
- zoomOutButton.setMinimumSize(new java.awt.Dimension(20, 20));
- zoomOutButton.setOpaque(false);
- zoomOutButton.setPreferredSize(new java.awt.Dimension(20, 20));
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 1;
- gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
- gridBagConstraints.weighty = 1.0;
- jPanel1.add(zoomOutButton, gridBagConstraints);
-
- zoomSlider.setMajorTickSpacing(1);
- zoomSlider.setMaximum(15);
- zoomSlider.setMinimum(10);
- zoomSlider.setMinorTickSpacing(1);
- zoomSlider.setOrientation(SwingConstants.VERTICAL);
- zoomSlider.setPaintTicks(true);
- zoomSlider.setSnapToTicks(true);
- zoomSlider.setMinimumSize(new java.awt.Dimension(35, 100));
- zoomSlider.setPreferredSize(new java.awt.Dimension(35, 190));
- zoomSlider.addChangeListener(new javax.swing.event.ChangeListener()
- {
- @Override
- public void stateChanged(javax.swing.event.ChangeEvent evt)
- {
- zoomSliderStateChanged(evt);
- }
- });
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 0;
- gridBagConstraints.gridwidth = 2;
- gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
- gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
- jPanel1.add(zoomSlider, gridBagConstraints);
-
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 0;
- gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
- gridBagConstraints.weightx = 1.0;
- gridBagConstraints.weighty = 1.0;
- gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
- mainMap.add(jPanel1, gridBagConstraints);
-
- gridBagConstraints = new java.awt.GridBagConstraints();
- gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
- gridBagConstraints.weightx = 1.0;
- gridBagConstraints.weighty = 1.0;
- add(mainMap, gridBagConstraints);
- }// //GEN-END:initComponents
-
- @SuppressWarnings("unused")
- private void zoomInButtonActionPerformed(java.awt.event.ActionEvent evt)
- {// GEN-FIRST:event_zoomInButtonActionPerformed
- // TODO add your handling code here:
- }// GEN-LAST:event_zoomInButtonActionPerformed
-
- @SuppressWarnings("unused")
- private void zoomSliderStateChanged(javax.swing.event.ChangeEvent evt)
- {// GEN-FIRST:event_zoomSliderStateChanged
- if (!zoomChanging)
- {
- setZoom(zoomSlider.getValue());
- }
- // TODO add your handling code here:
- }// GEN-LAST:event_zoomSliderStateChanged
-
- // Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JPanel jPanel1;
- private org.jdesktop.swingx.JXMapViewer mainMap;
- private org.jdesktop.swingx.JXMapViewer miniMap;
- private javax.swing.JButton zoomInButton;
- private javax.swing.JButton zoomOutButton;
- private javax.swing.JSlider zoomSlider;
-
- // End of variables declaration//GEN-END:variables
-
- /**
- * Indicates if the mini-map is currently visible
- * @return the current value of the mini-map property
- */
- public boolean isMiniMapVisible()
- {
- return miniMapVisible;
- }
-
- /**
- * Sets if the mini-map should be visible
- * @param miniMapVisible a new value for the miniMap property
- */
- public void setMiniMapVisible(boolean miniMapVisible)
- {
- boolean old = this.isMiniMapVisible();
- this.miniMapVisible = miniMapVisible;
- miniMap.setVisible(miniMapVisible);
- firePropertyChange("miniMapVisible", old, this.isMiniMapVisible());
- }
-
- /**
- * Indicates if the zoom slider is currently visible
- * @return the current value of the zoomSliderVisible property
- */
- public boolean isZoomSliderVisible()
- {
- return zoomSliderVisible;
- }
-
- /**
- * Sets if the zoom slider should be visible
- * @param zoomSliderVisible the new value of the zoomSliderVisible property
- */
- public void setZoomSliderVisible(boolean zoomSliderVisible)
- {
- boolean old = this.isZoomSliderVisible();
- this.zoomSliderVisible = zoomSliderVisible;
- zoomSlider.setVisible(zoomSliderVisible);
- firePropertyChange("zoomSliderVisible", old, this.isZoomSliderVisible());
- }
-
- /**
- * Indicates if the zoom buttons are visible. This is a bound property and can be listed for using a
- * PropertyChangeListener
- * @return current value of the zoomButtonsVisible property
- */
- public boolean isZoomButtonsVisible()
- {
- return zoomButtonsVisible;
- }
-
- /**
- * Sets if the zoom buttons should be visible. This ia bound property. Changes can be listened for using a
- * PropertyChaneListener
- * @param zoomButtonsVisible new value of the zoomButtonsVisible property
- */
- public void setZoomButtonsVisible(boolean zoomButtonsVisible)
- {
- boolean old = this.isZoomButtonsVisible();
- this.zoomButtonsVisible = zoomButtonsVisible;
- zoomInButton.setVisible(zoomButtonsVisible);
- zoomOutButton.setVisible(zoomButtonsVisible);
- firePropertyChange("zoomButtonsVisible", old, this.isZoomButtonsVisible());
- }
-
- /**
- * Sets the tile factory for both embedded JXMapViewer components. Calling this method will also reset the center
- * and zoom levels of both maps, as well as the bounds of the zoom slider.
- * @param fact the new TileFactory
- */
- public void setTileFactory(TileFactory fact)
- {
- mainMap.setTileFactory(fact);
- mainMap.setZoom(fact.getInfo().getDefaultZoomLevel());
- mainMap.setCenterPosition(new GeoPosition(0, 0));
- miniMap.setTileFactory(fact);
- miniMap.setZoom(fact.getInfo().getDefaultZoomLevel() + 3);
- miniMap.setCenterPosition(new GeoPosition(0, 0));
- zoomSlider.setMinimum(fact.getInfo().getMinimumZoomLevel());
- zoomSlider.setMaximum(fact.getInfo().getMaximumZoomLevel());
- }
-
- /**
- * @param pos the new center position
- */
- public void setCenterPosition(GeoPosition pos)
- {
- mainMap.setCenterPosition(pos);
- miniMap.setCenterPosition(pos);
- }
-
- /**
- * @return the center geo position
- */
- public GeoPosition getCenterPosition()
- {
- return mainMap.getCenterPosition();
- }
-
- /**
- * @return the adress location
- */
- public GeoPosition getAddressLocation()
- {
- return mainMap.getAddressLocation();
- }
-
- /**
- * @param pos the address location
- */
- public void setAddressLocation(GeoPosition pos)
- {
- mainMap.setAddressLocation(pos);
- }
-
- /**
- * Returns a reference to the main embedded JXMapViewer component
- * @return the main map
- */
- public JXMapViewer getMainMap()
- {
- return this.mainMap;
- }
-
- /**
- * Returns a reference to the mini embedded JXMapViewer component
- * @return the minimap JXMapViewer component
- */
- public JXMapViewer getMiniMap()
- {
- return this.miniMap;
- }
-
- /**
- * returns a reference to the zoom in button
- * @return a jbutton
- */
- public JButton getZoomInButton()
- {
- return this.zoomInButton;
- }
-
- /**
- * returns a reference to the zoom out button
- * @return a jbutton
- */
- public JButton getZoomOutButton()
- {
- return this.zoomOutButton;
- }
-
- /**
- * returns a reference to the zoom slider
- * @return a jslider
- */
- public JSlider getZoomSlider()
- {
- return this.zoomSlider;
- }
-
- /**
- * @param b the visibility flag
- */
- public void setAddressLocationShown(boolean b)
- {
- boolean old = isAddressLocationShown();
- this.addressLocationShown = b;
- addressLocationPainter.setVisible(b);
- firePropertyChange("addressLocationShown", old, b);
- repaint();
- }
-
- /**
- * @return true if the address location is shown
- */
- public boolean isAddressLocationShown()
- {
- return addressLocationShown;
- }
-
- /**
- * @param b the visibility flag
- */
- public void setDataProviderCreditShown(boolean b)
- {
- boolean old = isDataProviderCreditShown();
- this.dataProviderCreditShown = b;
- dataProviderCreditPainter.setVisible(b);
- repaint();
- firePropertyChange("dataProviderCreditShown", old, b);
- }
-
- /**
- * @return true if the data provider credit is shown
- */
- public boolean isDataProviderCreditShown()
- {
- return dataProviderCreditShown;
- }
-
- @SuppressWarnings("unchecked")
- private void rebuildMainMapOverlay()
- {
- CompoundPainter cp = new CompoundPainter();
- cp.setCacheable(false);
- /*
- * List ptrs = new ArrayList(); if(isDataProviderCreditShown()) {
- * ptrs.add(dataProviderCreditPainter); } if(isAddressLocationShown()) { ptrs.add(addressLocationPainter); }
- */
- cp.setPainters(dataProviderCreditPainter, addressLocationPainter);
- mainMap.setOverlayPainter(cp);
- }
-
- /**
- * @param prov the default provider
- */
- public void setDefaultProvider(DefaultProviders prov)
- {
- DefaultProviders old = this.defaultProvider;
- this.defaultProvider = prov;
- if (prov == DefaultProviders.SwingLabsBlueMarble)
- {
- setTileFactory(new CylindricalProjectionTileFactory());
- setZoom(3);
- }
- if (prov == DefaultProviders.OpenStreetMaps)
- {
- TileFactoryInfo info = new OSMTileFactoryInfo();
- TileFactory tf = new DefaultTileFactory(info);
- setTileFactory(tf);
- setZoom(11);
- setAddressLocation(new GeoPosition(51.5, 0));
- }
- firePropertyChange("defaultProvider", old, prov);
- repaint();
- }
-
- /**
- * @return the default provider
- */
- public DefaultProviders getDefaultProvider()
- {
- return this.defaultProvider;
- }
-
- private AbstractPainter dataProviderCreditPainter = new AbstractPainter(false)
- {
- @Override
- protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
- {
- g.setPaint(Color.WHITE);
- g.drawString("data ", 50, map.getHeight() - 10);
- }
- };
-
- private WaypointPainter addressLocationPainter = new WaypointPainter()
- {
- @Override
- public Set getWaypoints()
- {
- Set set = new HashSet();
- if (getAddressLocation() != null)
- {
- set.add(new DefaultWaypoint(getAddressLocation()));
- }
- else
- {
- set.add(new DefaultWaypoint(0, 0));
- }
- return set;
- }
- };
-
- /**
- * @param args the program args
- */
- public static void main(String... args)
- {
- SwingUtilities.invokeLater(new Runnable()
- {
- @Override
- public void run()
- {
- JXMapKit kit = new JXMapKit();
- kit.setDefaultProvider(DefaultProviders.OpenStreetMaps);
-
- TileFactoryInfo info = new OSMTileFactoryInfo();
- TileFactory tf = new DefaultTileFactory(info);
- kit.setTileFactory(tf);
- kit.setZoom(14);
- kit.setAddressLocation(new GeoPosition(51.5, 0));
- kit.getMainMap().setDrawTileBorders(true);
- kit.getMainMap().setRestrictOutsidePanning(true);
- kit.getMainMap().setHorizontalWrapped(false);
-
- ((DefaultTileFactory) kit.getMainMap().getTileFactory()).setThreadPoolSize(8);
- JFrame frame = new JFrame("JXMapKit test");
- frame.add(kit);
- frame.pack();
- frame.setSize(500, 300);
- frame.setVisible(true);
- }
- });
- }
-}
+/*
+ * JXMapKit.java
+ *
+ * Created on November 19, 2006, 3:52 AM
+ */
+
+package org.jdesktop.swingx;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.geom.Point2D;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+
+import org.jdesktop.swingx.mapviewer.DefaultTileFactory;
+import org.jdesktop.swingx.mapviewer.DefaultWaypoint;
+import org.jdesktop.swingx.mapviewer.GeoPosition;
+import org.jdesktop.swingx.mapviewer.TileFactory;
+import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
+import org.jdesktop.swingx.mapviewer.Waypoint;
+import org.jdesktop.swingx.mapviewer.WaypointPainter;
+import org.jdesktop.swingx.mapviewer.bmng.CylindricalProjectionTileFactory;
+import org.jdesktop.swingx.painter.AbstractPainter;
+import org.jdesktop.swingx.painter.CompoundPainter;
+import org.jdesktop.swingx.painter.Painter;
+
+/**
+ * The JXMapKit is a pair of JXMapViewers preconfigured to be easy to use
+ * with common features built in. This includes zoom buttons, a zoom slider,
+ * and a mini-map in the lower right corner showing an overview of the map.
+ * Each feature can be turned off using an appropriate
+ * isXvisible property. For example, to turn
+ * off the minimap call
+ *
+ *
jxMapKit.setMiniMapVisible(false);
+ *
+ *
+ *
+ * The JXMapViewer is preconfigured to connect to maps.swinglabs.org which
+ * serves up global satellite imagery from NASA's
+ * Blue
+ * Marble NG image collection.
+ *
+ * @author joshy
+ */
+public class JXMapKit extends JPanel
+{
+ private static final long serialVersionUID = -8366577998349912380L;
+ private boolean miniMapVisible = true;
+ private boolean zoomSliderVisible = true;
+ private boolean zoomButtonsVisible = true;
+ private final boolean sliderReversed = false;
+
+ @SuppressWarnings("javadoc")
+ public enum DefaultProviders
+ {
+ SwingLabsBlueMarble, OpenStreetMaps, Custom
+ }
+
+ private DefaultProviders defaultProvider = DefaultProviders.SwingLabsBlueMarble;
+
+ private boolean addressLocationShown = true;
+
+ private boolean dataProviderCreditShown = true;
+
+ /**
+ * Creates a new JXMapKit
+ */
+ public JXMapKit()
+ {
+ initComponents();
+ setDataProviderCreditShown(false);
+
+ zoomSlider.setOpaque(false);
+ try
+ {
+ Icon minusIcon = new ImageIcon(getClass().getResource("/org/jdesktop/swingx/mapviewer/resources/minus.png"));
+ this.zoomOutButton.setIcon(minusIcon);
+ this.zoomOutButton.setText("");
+ Icon plusIcon = new ImageIcon(getClass().getResource("/org/jdesktop/swingx/mapviewer/resources/plus.png"));
+ this.zoomInButton.setIcon(plusIcon);
+ this.zoomInButton.setText("");
+ }
+ catch (Throwable thr)
+ {
+ System.out.println("error: " + thr.getMessage());
+ thr.printStackTrace();
+ }
+
+ setTileFactory(new CylindricalProjectionTileFactory());
+
+ mainMap.setCenterPosition(new GeoPosition(0, 0));
+ miniMap.setCenterPosition(new GeoPosition(0, 0));
+ mainMap.setRestrictOutsidePanning(true);
+ miniMap.setRestrictOutsidePanning(true);
+
+ rebuildMainMapOverlay();
+
+ /*
+ * // adapter to move the minimap after the main map has moved MouseInputAdapter ma = new MouseInputAdapter() {
+ * public void mouseReleased(MouseEvent e) { miniMap.setCenterPosition(mapCenterPosition); } };
+ * mainMap.addMouseMotionListener(ma); mainMap.addMouseListener(ma);
+ */
+
+ mainMap.addPropertyChangeListener("center", new PropertyChangeListener()
+ {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ Point2D mapCenter = (Point2D) evt.getNewValue();
+ TileFactory tf = mainMap.getTileFactory();
+ GeoPosition mapPos = tf.pixelToGeo(mapCenter, mainMap.getZoom());
+ miniMap.setCenterPosition(mapPos);
+ }
+ });
+
+ mainMap.addPropertyChangeListener("centerPosition", new PropertyChangeListener()
+ {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ mapCenterPosition = (GeoPosition) evt.getNewValue();
+ miniMap.setCenterPosition(mapCenterPosition);
+ Point2D pt = miniMap.getTileFactory().geoToPixel(mapCenterPosition, miniMap.getZoom());
+ miniMap.setCenter(pt);
+ miniMap.repaint();
+ }
+ });
+
+ mainMap.addPropertyChangeListener("zoom", new PropertyChangeListener()
+ {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ zoomSlider.setValue(mainMap.getZoom());
+ miniMap.setZoom(mainMap.getZoom() + 4);
+ }
+ });
+
+ // an overlay for the mini-map which shows a rectangle representing the main map
+ miniMap.setOverlayPainter(new Painter()
+ {
+ @Override
+ public void paint(Graphics2D g, JXMapViewer map, int width, int height)
+ {
+ // get the viewport rect of the main map
+ Rectangle mainMapBounds = mainMap.getViewportBounds();
+
+ // convert to Point2Ds
+ Point2D upperLeft2D = mainMapBounds.getLocation();
+ Point2D lowerRight2D = new Point2D.Double(upperLeft2D.getX() + mainMapBounds.getWidth(), upperLeft2D
+ .getY() + mainMapBounds.getHeight());
+
+ // convert to GeoPostions
+ GeoPosition upperLeft = mainMap.getTileFactory().pixelToGeo(upperLeft2D, mainMap.getZoom());
+ GeoPosition lowerRight = mainMap.getTileFactory().pixelToGeo(lowerRight2D, mainMap.getZoom());
+
+ // convert to Point2Ds on the mini-map
+ upperLeft2D = map.getTileFactory().geoToPixel(upperLeft, map.getZoom());
+ lowerRight2D = map.getTileFactory().geoToPixel(lowerRight, map.getZoom());
+
+ g = (Graphics2D) g.create();
+ Rectangle rect = map.getViewportBounds();
+ // p("rect = " + rect);
+ g.translate(-rect.x, -rect.y);
+// Point2D centerpos = map.getTileFactory().geoToPixel(mapCenterPosition, map.getZoom());
+ // p("center pos = " + centerpos);
+ g.setPaint(Color.RED);
+ // g.drawRect((int)centerpos.getX()-30,(int)centerpos.getY()-30,60,60);
+ g.drawRect((int) upperLeft2D.getX(), (int) upperLeft2D.getY(),
+ (int) (lowerRight2D.getX() - upperLeft2D.getX()),
+ (int) (lowerRight2D.getY() - upperLeft2D.getY()));
+ g.setPaint(new Color(255, 0, 0, 50));
+ g.fillRect((int) upperLeft2D.getX(), (int) upperLeft2D.getY(),
+ (int) (lowerRight2D.getX() - upperLeft2D.getX()),
+ (int) (lowerRight2D.getY() - upperLeft2D.getY()));
+ // g.drawOval((int)lowerRight2D.getX(),(int)lowerRight2D.getY(),1,1);
+ g.dispose();
+ }
+ });
+
+ if (getDefaultProvider() == DefaultProviders.OpenStreetMaps)
+ {
+ setZoom(10);
+ }
+ else
+ {
+ setZoom(3);// joshy: hack, i shouldn't need this here
+ }
+ this.setCenterPosition(new GeoPosition(0, 0));
+ }
+
+ // private Point2D mapCenter = new Point2D.Double(0,0);
+ private GeoPosition mapCenterPosition = new GeoPosition(0, 0);
+ private boolean zoomChanging = false;
+
+ /**
+ * Set the current zoomlevel for the main map. The minimap will be updated accordingly
+ * @param zoom the new zoom level
+ */
+ public void setZoom(int zoom)
+ {
+ zoomChanging = true;
+ mainMap.setZoom(zoom);
+ miniMap.setZoom(mainMap.getZoom() + 4);
+ if (sliderReversed)
+ {
+ zoomSlider.setValue(zoomSlider.getMaximum() - zoom);
+ }
+ else
+ {
+ zoomSlider.setValue(zoom);
+ }
+ zoomChanging = false;
+ }
+
+ /**
+ * Returns an action which can be attached to buttons or menu items to make the map zoom out
+ * @return a preconfigured Zoom Out action
+ */
+ public Action getZoomOutAction()
+ {
+ Action act = new AbstractAction()
+ {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5525706163434375107L;
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ setZoom(mainMap.getZoom() - 1);
+ }
+ };
+ act.putValue(Action.NAME, "-");
+ return act;
+ }
+
+ /**
+ * Returns an action which can be attached to buttons or menu items to make the map zoom in
+ * @return a preconfigured Zoom In action
+ */
+ public Action getZoomInAction()
+ {
+ Action act = new AbstractAction()
+ {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5779971489365451352L;
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ setZoom(mainMap.getZoom() + 1);
+ }
+ };
+ act.putValue(Action.NAME, "+");
+ return act;
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
+ * content of this method is always regenerated by the Form Editor.
+ */
+ // //GEN-BEGIN:initComponents
+ private void initComponents()
+ {
+ java.awt.GridBagConstraints gridBagConstraints;
+
+ mainMap = new org.jdesktop.swingx.JXMapViewer();
+ miniMap = new org.jdesktop.swingx.JXMapViewer();
+ jPanel1 = new javax.swing.JPanel();
+ zoomInButton = new javax.swing.JButton();
+ zoomOutButton = new javax.swing.JButton();
+ zoomSlider = new javax.swing.JSlider();
+
+ setLayout(new java.awt.GridBagLayout());
+
+ mainMap.setLayout(new java.awt.GridBagLayout());
+
+ miniMap.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
+ miniMap.setMinimumSize(new java.awt.Dimension(100, 100));
+ miniMap.setPreferredSize(new java.awt.Dimension(100, 100));
+ miniMap.setLayout(new java.awt.GridBagLayout());
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
+ gridBagConstraints.weightx = 1.0;
+ gridBagConstraints.weighty = 1.0;
+ mainMap.add(miniMap, gridBagConstraints);
+
+ jPanel1.setOpaque(false);
+ jPanel1.setLayout(new java.awt.GridBagLayout());
+
+ zoomInButton.setAction(getZoomOutAction());
+ zoomInButton.setIcon(new javax.swing.ImageIcon(getClass().getResource(
+ "/org/jdesktop/swingx/mapviewer/resources/plus.png")));
+ zoomInButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ zoomInButton.setMaximumSize(new java.awt.Dimension(20, 20));
+ zoomInButton.setMinimumSize(new java.awt.Dimension(20, 20));
+ zoomInButton.setOpaque(false);
+ zoomInButton.setPreferredSize(new java.awt.Dimension(20, 20));
+ zoomInButton.addActionListener(new java.awt.event.ActionListener()
+ {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ zoomInButtonActionPerformed(evt);
+ }
+ });
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 1;
+ gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
+ gridBagConstraints.weightx = 1.0;
+ gridBagConstraints.weighty = 1.0;
+ jPanel1.add(zoomInButton, gridBagConstraints);
+
+ zoomOutButton.setAction(getZoomInAction());
+ zoomOutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource(
+ "/org/jdesktop/swingx/mapviewer/resources/minus.png")));
+ zoomOutButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ zoomOutButton.setMaximumSize(new java.awt.Dimension(20, 20));
+ zoomOutButton.setMinimumSize(new java.awt.Dimension(20, 20));
+ zoomOutButton.setOpaque(false);
+ zoomOutButton.setPreferredSize(new java.awt.Dimension(20, 20));
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 1;
+ gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+ gridBagConstraints.weighty = 1.0;
+ jPanel1.add(zoomOutButton, gridBagConstraints);
+
+ zoomSlider.setMajorTickSpacing(1);
+ zoomSlider.setMaximum(15);
+ zoomSlider.setMinimum(10);
+ zoomSlider.setMinorTickSpacing(1);
+ zoomSlider.setOrientation(SwingConstants.VERTICAL);
+ zoomSlider.setPaintTicks(true);
+ zoomSlider.setSnapToTicks(true);
+ zoomSlider.setMinimumSize(new java.awt.Dimension(35, 100));
+ zoomSlider.setPreferredSize(new java.awt.Dimension(35, 190));
+ zoomSlider.addChangeListener(new javax.swing.event.ChangeListener()
+ {
+ @Override
+ public void stateChanged(javax.swing.event.ChangeEvent evt)
+ {
+ zoomSliderStateChanged(evt);
+ }
+ });
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.gridwidth = 2;
+ gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+ gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
+ jPanel1.add(zoomSlider, gridBagConstraints);
+
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
+ gridBagConstraints.weightx = 1.0;
+ gridBagConstraints.weighty = 1.0;
+ gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
+ mainMap.add(jPanel1, gridBagConstraints);
+
+ gridBagConstraints = new java.awt.GridBagConstraints();
+ gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints.weightx = 1.0;
+ gridBagConstraints.weighty = 1.0;
+ add(mainMap, gridBagConstraints);
+ }// //GEN-END:initComponents
+
+ @SuppressWarnings("unused")
+ private void zoomInButtonActionPerformed(java.awt.event.ActionEvent evt)
+ {// GEN-FIRST:event_zoomInButtonActionPerformed
+ // TODO add your handling code here:
+ }// GEN-LAST:event_zoomInButtonActionPerformed
+
+ @SuppressWarnings("unused")
+ private void zoomSliderStateChanged(javax.swing.event.ChangeEvent evt)
+ {// GEN-FIRST:event_zoomSliderStateChanged
+ if (!zoomChanging)
+ {
+ setZoom(zoomSlider.getValue());
+ }
+ // TODO add your handling code here:
+ }// GEN-LAST:event_zoomSliderStateChanged
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel jPanel1;
+ private org.jdesktop.swingx.JXMapViewer mainMap;
+ private org.jdesktop.swingx.JXMapViewer miniMap;
+ private javax.swing.JButton zoomInButton;
+ private javax.swing.JButton zoomOutButton;
+ private javax.swing.JSlider zoomSlider;
+
+ // End of variables declaration//GEN-END:variables
+
+ /**
+ * Indicates if the mini-map is currently visible
+ * @return the current value of the mini-map property
+ */
+ public boolean isMiniMapVisible()
+ {
+ return miniMapVisible;
+ }
+
+ /**
+ * Sets if the mini-map should be visible
+ * @param miniMapVisible a new value for the miniMap property
+ */
+ public void setMiniMapVisible(boolean miniMapVisible)
+ {
+ boolean old = this.isMiniMapVisible();
+ this.miniMapVisible = miniMapVisible;
+ miniMap.setVisible(miniMapVisible);
+ firePropertyChange("miniMapVisible", old, this.isMiniMapVisible());
+ }
+
+ /**
+ * Indicates if the zoom slider is currently visible
+ * @return the current value of the zoomSliderVisible property
+ */
+ public boolean isZoomSliderVisible()
+ {
+ return zoomSliderVisible;
+ }
+
+ /**
+ * Sets if the zoom slider should be visible
+ * @param zoomSliderVisible the new value of the zoomSliderVisible property
+ */
+ public void setZoomSliderVisible(boolean zoomSliderVisible)
+ {
+ boolean old = this.isZoomSliderVisible();
+ this.zoomSliderVisible = zoomSliderVisible;
+ zoomSlider.setVisible(zoomSliderVisible);
+ firePropertyChange("zoomSliderVisible", old, this.isZoomSliderVisible());
+ }
+
+ /**
+ * Indicates if the zoom buttons are visible. This is a bound property and can be listed for using a
+ * PropertyChangeListener
+ * @return current value of the zoomButtonsVisible property
+ */
+ public boolean isZoomButtonsVisible()
+ {
+ return zoomButtonsVisible;
+ }
+
+ /**
+ * Sets if the zoom buttons should be visible. This ia bound property. Changes can be listened for using a
+ * PropertyChaneListener
+ * @param zoomButtonsVisible new value of the zoomButtonsVisible property
+ */
+ public void setZoomButtonsVisible(boolean zoomButtonsVisible)
+ {
+ boolean old = this.isZoomButtonsVisible();
+ this.zoomButtonsVisible = zoomButtonsVisible;
+ zoomInButton.setVisible(zoomButtonsVisible);
+ zoomOutButton.setVisible(zoomButtonsVisible);
+ firePropertyChange("zoomButtonsVisible", old, this.isZoomButtonsVisible());
+ }
+
+ /**
+ * Sets the tile factory for both embedded JXMapViewer components. Calling this method will also reset the center
+ * and zoom levels of both maps, as well as the bounds of the zoom slider.
+ * @param fact the new TileFactory
+ */
+ public void setTileFactory(TileFactory fact)
+ {
+ mainMap.setTileFactory(fact);
+ mainMap.setZoom(fact.getInfo().getDefaultZoomLevel());
+ mainMap.setCenterPosition(new GeoPosition(0, 0));
+ miniMap.setTileFactory(fact);
+ miniMap.setZoom(fact.getInfo().getDefaultZoomLevel() + 3);
+ miniMap.setCenterPosition(new GeoPosition(0, 0));
+ zoomSlider.setMinimum(fact.getInfo().getMinimumZoomLevel());
+ zoomSlider.setMaximum(fact.getInfo().getMaximumZoomLevel());
+ }
+
+ /**
+ * @param pos the new center position
+ */
+ public void setCenterPosition(GeoPosition pos)
+ {
+ mainMap.setCenterPosition(pos);
+ miniMap.setCenterPosition(pos);
+ }
+
+ /**
+ * @return the center geo position
+ */
+ public GeoPosition getCenterPosition()
+ {
+ return mainMap.getCenterPosition();
+ }
+
+ /**
+ * @return the adress location
+ */
+ public GeoPosition getAddressLocation()
+ {
+ return mainMap.getAddressLocation();
+ }
+
+ /**
+ * @param pos the address location
+ */
+ public void setAddressLocation(GeoPosition pos)
+ {
+ mainMap.setAddressLocation(pos);
+ }
+
+ /**
+ * Returns a reference to the main embedded JXMapViewer component
+ * @return the main map
+ */
+ public JXMapViewer getMainMap()
+ {
+ return this.mainMap;
+ }
+
+ /**
+ * Returns a reference to the mini embedded JXMapViewer component
+ * @return the minimap JXMapViewer component
+ */
+ public JXMapViewer getMiniMap()
+ {
+ return this.miniMap;
+ }
+
+ /**
+ * returns a reference to the zoom in button
+ * @return a jbutton
+ */
+ public JButton getZoomInButton()
+ {
+ return this.zoomInButton;
+ }
+
+ /**
+ * returns a reference to the zoom out button
+ * @return a jbutton
+ */
+ public JButton getZoomOutButton()
+ {
+ return this.zoomOutButton;
+ }
+
+ /**
+ * returns a reference to the zoom slider
+ * @return a jslider
+ */
+ public JSlider getZoomSlider()
+ {
+ return this.zoomSlider;
+ }
+
+ /**
+ * @param b the visibility flag
+ */
+ public void setAddressLocationShown(boolean b)
+ {
+ boolean old = isAddressLocationShown();
+ this.addressLocationShown = b;
+ addressLocationPainter.setVisible(b);
+ firePropertyChange("addressLocationShown", old, b);
+ repaint();
+ }
+
+ /**
+ * @return true if the address location is shown
+ */
+ public boolean isAddressLocationShown()
+ {
+ return addressLocationShown;
+ }
+
+ /**
+ * @param b the visibility flag
+ */
+ public void setDataProviderCreditShown(boolean b)
+ {
+ boolean old = isDataProviderCreditShown();
+ this.dataProviderCreditShown = b;
+ dataProviderCreditPainter.setVisible(b);
+ repaint();
+ firePropertyChange("dataProviderCreditShown", old, b);
+ }
+
+ /**
+ * @return true if the data provider credit is shown
+ */
+ public boolean isDataProviderCreditShown()
+ {
+ return dataProviderCreditShown;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void rebuildMainMapOverlay()
+ {
+ CompoundPainter cp = new CompoundPainter();
+ cp.setCacheable(false);
+ /*
+ * List ptrs = new ArrayList(); if(isDataProviderCreditShown()) {
+ * ptrs.add(dataProviderCreditPainter); } if(isAddressLocationShown()) { ptrs.add(addressLocationPainter); }
+ */
+ cp.setPainters(dataProviderCreditPainter, addressLocationPainter);
+ mainMap.setOverlayPainter(cp);
+ }
+
+ /**
+ * @param prov the default provider
+ */
+ public void setDefaultProvider(DefaultProviders prov)
+ {
+ DefaultProviders old = this.defaultProvider;
+ this.defaultProvider = prov;
+ if (prov == DefaultProviders.SwingLabsBlueMarble)
+ {
+ setTileFactory(new CylindricalProjectionTileFactory());
+ setZoom(3);
+ }
+ if (prov == DefaultProviders.OpenStreetMaps)
+ {
+ TileFactoryInfo info = new OSMTileFactoryInfo();
+ TileFactory tf = new DefaultTileFactory(info);
+ setTileFactory(tf);
+ setZoom(11);
+ setAddressLocation(new GeoPosition(51.5, 0));
+ }
+ firePropertyChange("defaultProvider", old, prov);
+ repaint();
+ }
+
+ /**
+ * @return the default provider
+ */
+ public DefaultProviders getDefaultProvider()
+ {
+ return this.defaultProvider;
+ }
+
+ private AbstractPainter dataProviderCreditPainter = new AbstractPainter(false)
+ {
+ @Override
+ protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
+ {
+ g.setPaint(Color.WHITE);
+ g.drawString("data ", 50, map.getHeight() - 10);
+ }
+ };
+
+ private WaypointPainter addressLocationPainter = new WaypointPainter()
+ {
+ @Override
+ public Set getWaypoints()
+ {
+ Set set = new HashSet();
+ if (getAddressLocation() != null)
+ {
+ set.add(new DefaultWaypoint(getAddressLocation()));
+ }
+ else
+ {
+ set.add(new DefaultWaypoint(0, 0));
+ }
+ return set;
+ }
+ };
+
+ /**
+ * @param args the program args
+ */
+ public static void main(String... args)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ JXMapKit kit = new JXMapKit();
+ kit.setDefaultProvider(DefaultProviders.OpenStreetMaps);
+
+ TileFactoryInfo info = new OSMTileFactoryInfo();
+ TileFactory tf = new DefaultTileFactory(info);
+ kit.setTileFactory(tf);
+ kit.setZoom(14);
+ kit.setAddressLocation(new GeoPosition(51.5, 0));
+ kit.getMainMap().setDrawTileBorders(true);
+ kit.getMainMap().setRestrictOutsidePanning(true);
+ kit.getMainMap().setHorizontalWrapped(false);
+
+ ((DefaultTileFactory) kit.getMainMap().getTileFactory()).setThreadPoolSize(8);
+ JFrame frame = new JFrame("JXMapKit test");
+ frame.add(kit);
+ frame.pack();
+ frame.setSize(500, 300);
+ frame.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/org/jdesktop/swingx/JXMapViewer.java b/src/main/java/org/jdesktop/swingx/JXMapViewer.java
similarity index 96%
rename from src/org/jdesktop/swingx/JXMapViewer.java
rename to src/main/java/org/jdesktop/swingx/JXMapViewer.java
index 8c999c07..d1697a0e 100644
--- a/src/org/jdesktop/swingx/JXMapViewer.java
+++ b/src/main/java/org/jdesktop/swingx/JXMapViewer.java
@@ -1,787 +1,787 @@
-/*
- * MapViewer.java
- *
- * Created on March 14, 2006, 2:14 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.beans.DesignMode;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.Set;
-
-import javax.swing.ImageIcon;
-import javax.swing.JPanel;
-
-import org.jdesktop.swingx.mapviewer.GeoPosition;
-import org.jdesktop.swingx.mapviewer.Tile;
-import org.jdesktop.swingx.mapviewer.TileFactory;
-import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
-import org.jdesktop.swingx.mapviewer.TileListener;
-import org.jdesktop.swingx.mapviewer.empty.EmptyTileFactory;
-import org.jdesktop.swingx.painter.AbstractPainter;
-import org.jdesktop.swingx.painter.Painter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A tile oriented map component that can easily be used with tile sources
- * on the web like Google and Yahoo maps, satellite data such as NASA imagery,
- * and also with file based sources like pre-processed NASA images.
- * A known map provider can be used with the SLMapServerInfo,
- * which will connect to a 2km resolution version of NASA's Blue Marble Next Generation
- * imagery. @see SLMapServerInfo for more information.
- *
- * Note, the JXMapViewer has three center point properties. The addressLocation property
- * represents an abstract center of the map. This would usually be something like the first item
- * in a search result. It is a {@link GeoPosition}. The centerPosition property represents
- * the current center point of the map. If the user pans the map then the centerPosition point will
- * change but the addressLocation will not. Calling recenterToAddressLocation() will move the map
- * back to that center address. The center property represents the same point as the centerPosition
- * property, but as a Point2D in pixel space instead of a GeoPosition in lat/long space. Note that
- * the center property is a Point2D in the entire world bitmap, not in the portion of the map currently
- * visible. You can use the getViewportBounds() method to find the portion of the map currently visible
- * and adjust your calculations accordingly. Changing the center property will change the centerPosition
- * property and vice versa. All three properties are bound.
- * @author Joshua.Marinacci@sun.com
- * @see org.jdesktop.swingx.mapviewer.bmng.SLMapServerInfo
- */
-public class JXMapViewer extends JPanel implements DesignMode
-{
- private static final long serialVersionUID = -3530746298586937321L;
-
- private final static Logger mLog =
- LoggerFactory.getLogger( JXMapViewer.class );
-
- private final boolean isNegativeYAllowed = true; // maybe rename to isNorthBounded and isSouthBounded?
-
- /**
- * The zoom level. Generally a value between 1 and 15 (TODO Is this true for all the mapping worlds? What does this
- * mean if some mapping system doesn't support the zoom level?
- */
- private int zoomLevel = 1;
-
- /**
- * The position, in map coordinates of the center point. This is defined as the distance from the top and
- * left edges of the map in pixels. Dragging the map component will change the center position. Zooming in/out will
- * cause the center to be recalculated so as to remain in the center of the new "map".
- */
- private Point2D center = new Point2D.Double(0, 0);
-
- /**
- * Indicates whether or not to draw the borders between tiles. Defaults to false. TODO Generally not very nice
- * looking, very much a product of testing Consider whether this should really be a property or not.
- */
- private boolean drawTileBorders = false;
-
- /**
- * Factory used by this component to grab the tiles necessary for painting the map.
- */
- private TileFactory factory;
-
- /**
- * The position in latitude/longitude of the "address" being mapped. This is a special coordinate that, when moved,
- * will cause the map to be moved as well. It is separate from "center" in that "center" tracks the current center
- * (in pixels) of the viewport whereas this will not change when panning or zooming. Whenever the addressLocation is
- * changed, however, the map will be repositioned.
- */
- private GeoPosition addressLocation;
-
- /**
- * The overlay to delegate to for painting the "foreground" of the map component. This would include painting
- * waypoints, day/night, etc. Also receives mouse events.
- */
- private Painter super JXMapViewer> overlay;
-
- private boolean designTime;
-
- private Image loadingImage;
-
- private boolean restrictOutsidePanning = true;
- private boolean horizontalWrapped = true;
-
- /**
- * Create a new JXMapViewer. By default it will use the EmptyTileFactory
- */
- public JXMapViewer()
- {
- factory = new EmptyTileFactory();
- // setTileFactory(new GoogleTileFactory());
-
- // make a dummy loading image
- try
- {
- ImageIcon imageIcon = new ImageIcon( "images/loading.png" );
- this.setLoadingImage( imageIcon.getImage() );
- }
- catch (Throwable ex)
- {
-
- mLog.error( "JXMapViewer could not load 'loading.png'" );
-
- BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
- Graphics2D g2 = img.createGraphics();
- g2.setColor(Color.black);
- g2.fillRect(0, 0, 16, 16);
- g2.dispose();
- this.setLoadingImage(img);
- }
-
- // setAddressLocation(new GeoPosition(37.392137,-121.950431)); // Sun campus
- }
-
- @Override
- protected void paintComponent(Graphics g)
- {
- super.paintComponent(g);
-
- doPaintComponent(g);
- }
-
- // the method that does the actual painting
- private void doPaintComponent(Graphics g)
- {/*
- * if (isOpaque() || isDesignTime()) { g.setColor(getBackground()); g.fillRect(0,0,getWidth(),getHeight()); }
- */
-
- if (isDesignTime())
- {
- // do nothing
- }
- else
- {
- int z = getZoom();
- Rectangle viewportBounds = getViewportBounds();
- drawMapTiles(g, z, viewportBounds);
- drawOverlays(z, g, viewportBounds);
- }
-
- super.paintBorder(g);
- }
-
- /**
- * Indicate that the component is being used at design time, such as in a visual editor like NetBeans' Matisse
- * @param b indicates if the component is being used at design time
- */
- @Override
- public void setDesignTime(boolean b)
- {
- this.designTime = b;
- }
-
- /**
- * Indicates whether the component is being used at design time, such as in a visual editor like NetBeans' Matisse
- * @return boolean indicating if the component is being used at design time
- */
- @Override
- public boolean isDesignTime()
- {
- return designTime;
- }
-
- /**
- * Draw the map tiles. This method is for implementation use only.
- * @param g Graphics
- * @param zoom zoom level to draw at
- * @param viewportBounds the bounds to draw within
- */
- protected void drawMapTiles(final Graphics g, final int zoom, Rectangle viewportBounds)
- {
- int size = getTileFactory().getTileSize(zoom);
- Dimension mapSize = getTileFactory().getMapSize(zoom);
-
- // calculate the "visible" viewport area in tiles
- int numWide = viewportBounds.width / size + 2;
- int numHigh = viewportBounds.height / size + 2;
-
- // TilePoint topLeftTile = getTileFactory().getTileCoordinate(
- // new Point2D.Double(viewportBounds.x, viewportBounds.y));
- TileFactoryInfo info = getTileFactory().getInfo();
- int tpx = (int) Math.floor(viewportBounds.getX() / info.getTileSize(0));
- int tpy = (int) Math.floor(viewportBounds.getY() / info.getTileSize(0));
- // TilePoint topLeftTile = new TilePoint(tpx, tpy);
-
- // p("top tile = " + topLeftTile);
- // fetch the tiles from the factory and store them in the tiles cache
- // attach the tileLoadListener
- for (int x = 0; x <= numWide; x++)
- {
- for (int y = 0; y <= numHigh; y++)
- {
- int itpx = x + tpx;// topLeftTile.getX();
- int itpy = y + tpy;// topLeftTile.getY();
- // TilePoint point = new TilePoint(x + topLeftTile.getX(), y + topLeftTile.getY());
- // only proceed if the specified tile point lies within the area being painted
- if (g.getClipBounds().intersects(
- new Rectangle(itpx * size - viewportBounds.x, itpy * size - viewportBounds.y, size, size)))
- {
- Tile tile = getTileFactory().getTile(itpx, itpy, zoom);
- int ox = ((itpx * getTileFactory().getTileSize(zoom)) - viewportBounds.x);
- int oy = ((itpy * getTileFactory().getTileSize(zoom)) - viewportBounds.y);
-
- // if the tile is off the map to the north/south, then just don't paint anything
- if (isTileOnMap(itpx, itpy, mapSize))
- {
- if (isOpaque())
- {
- g.setColor(getBackground());
- g.fillRect(ox, oy, size, size);
- }
- }
- else if (tile.isLoaded())
- {
- g.drawImage(tile.getImage(), ox, oy, null);
- }
- else
- {
- // Use tile at higher zoom level with 200% magnification
- Tile superTile = getTileFactory().getTile(itpx / 2, itpy / 2, zoom + 1);
-
- if (superTile.isLoaded())
- {
- int offX = (itpx % 2) * size / 2;
- int offY = (itpy % 2) * size / 2;
- g.drawImage(superTile.getImage(), ox, oy, ox + size, oy + size, offX, offY, offX + size / 2, offY + size / 2, null);
- }
- else
- {
- int imageX = (getTileFactory().getTileSize(zoom) - getLoadingImage().getWidth(null)) / 2;
- int imageY = (getTileFactory().getTileSize(zoom) - getLoadingImage().getHeight(null)) / 2;
- g.setColor(Color.GRAY);
- g.fillRect(ox, oy, size, size);
- g.drawImage(getLoadingImage(), ox + imageX, oy + imageY, null);
- }
- }
- if (isDrawTileBorders())
- {
-
- g.setColor(Color.black);
- g.drawRect(ox, oy, size, size);
- g.drawRect(ox + size / 2 - 5, oy + size / 2 - 5, 10, 10);
- g.setColor(Color.white);
- g.drawRect(ox + 1, oy + 1, size, size);
-
- String text = itpx + ", " + itpy + ", " + getZoom();
- g.setColor(Color.BLACK);
- g.drawString(text, ox + 10, oy + 30);
- g.drawString(text, ox + 10 + 2, oy + 30 + 2);
- g.setColor(Color.WHITE);
- g.drawString(text, ox + 10 + 1, oy + 30 + 1);
- }
- }
- }
- }
- }
-
- @SuppressWarnings("unused")
- private void drawOverlays(final int zoom, final Graphics g, final Rectangle viewportBounds)
- {
- if (overlay != null)
- {
- overlay.paint((Graphics2D) g, this, getWidth(), getHeight());
- }
- }
-
- @SuppressWarnings("unused")
- private boolean isTileOnMap(int x, int y, Dimension mapSize)
- {
- return !isNegativeYAllowed && y < 0 || y >= mapSize.getHeight();
- }
-
- /**
- * Sets the map overlay. This is a Painter which will paint on top of the map. It can be used to draw waypoints,
- * lines, or static overlays like text messages.
- * @param overlay the map overlay to use
- */
- public void setOverlayPainter(Painter super JXMapViewer> overlay)
- {
- Painter super JXMapViewer> old = getOverlayPainter();
- this.overlay = overlay;
-
- PropertyChangeListener listener = new PropertyChangeListener()
- {
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- if (evt.getNewValue().equals(Boolean.TRUE))
- {
- repaint();
- }
- }
- };
-
- if (old instanceof AbstractPainter)
- {
- AbstractPainter> ap = (AbstractPainter>) overlay;
- ap.removePropertyChangeListener("dirty", listener);
- }
-
- if (overlay instanceof AbstractPainter)
- {
- AbstractPainter> ap = (AbstractPainter>) overlay;
- ap.addPropertyChangeListener("dirty", listener);
- }
-
- firePropertyChange("mapOverlay", old, getOverlayPainter());
- repaint();
- }
-
- /**
- * Gets the current map overlay
- * @return the current map overlay
- */
- public Painter super JXMapViewer> getOverlayPainter()
- {
- return overlay;
- }
-
- /**
- * Returns the bounds of the viewport in pixels. This can be used to transform points into the world bitmap
- * coordinate space.
- * @return the bounds in pixels of the "view" of this map
- */
- public Rectangle getViewportBounds()
- {
- return calculateViewportBounds(getCenter());
- }
-
- private Rectangle calculateViewportBounds(Point2D centr)
- {
- Insets insets = getInsets();
- // calculate the "visible" viewport area in pixels
- int viewportWidth = getWidth() - insets.left - insets.right;
- int viewportHeight = getHeight() - insets.top - insets.bottom;
- double viewportX = (centr.getX() - viewportWidth / 2);
- double viewportY = (centr.getY() - viewportHeight / 2);
- return new Rectangle((int) viewportX, (int) viewportY, viewportWidth, viewportHeight);
- }
-
- /**
- * Set the current zoom level
- * @param zoom the new zoom level
- */
- public void setZoom(int zoom)
- {
- if (zoom == this.zoomLevel)
- {
- return;
- }
-
- TileFactoryInfo info = getTileFactory().getInfo();
- // don't repaint if we are out of the valid zoom levels
- if (info != null && (zoom < info.getMinimumZoomLevel() || zoom > info.getMaximumZoomLevel()))
- {
- return;
- }
-
- // if(zoom >= 0 && zoom <= 15 && zoom != this.zoom) {
- int oldzoom = this.zoomLevel;
- Point2D oldCenter = getCenter();
- Dimension oldMapSize = getTileFactory().getMapSize(oldzoom);
- this.zoomLevel = zoom;
- this.firePropertyChange("zoom", oldzoom, zoom);
-
- Dimension mapSize = getTileFactory().getMapSize(zoom);
-
- setCenter(new Point2D.Double(oldCenter.getX() * (mapSize.getWidth() / oldMapSize.getWidth()), oldCenter.getY()
- * (mapSize.getHeight() / oldMapSize.getHeight())));
-
- repaint();
- }
-
- /**
- * Gets the current zoom level
- * @return the current zoom level
- */
- public int getZoom()
- {
- return this.zoomLevel;
- }
-
- /**
- * Gets the current address location of the map. This property does not change when the user pans the map. This
- * property is bound.
- * @return the current map location (address)
- */
- public GeoPosition getAddressLocation()
- {
- return addressLocation;
- }
-
- /**
- * Gets the current address location of the map
- * @param addressLocation the new address location
- */
- public void setAddressLocation(GeoPosition addressLocation)
- {
- GeoPosition old = getAddressLocation();
- this.addressLocation = addressLocation;
- setCenter(getTileFactory().geoToPixel(addressLocation, getZoom()));
-
- firePropertyChange("addressLocation", old, getAddressLocation());
- repaint();
- }
-
- /**
- * Re-centers the map to have the current address location be at the center of the map, accounting for the map's
- * width and height.
- */
- public void recenterToAddressLocation()
- {
- setCenter(getTileFactory().geoToPixel(getAddressLocation(), getZoom()));
- repaint();
- }
-
- /**
- * Indicates if the tile borders should be drawn. Mainly used for debugging.
- * @return the value of this property
- */
- public boolean isDrawTileBorders()
- {
- return drawTileBorders;
- }
-
- /**
- * Set if the tile borders should be drawn. Mainly used for debugging.
- * @param drawTileBorders new value of this drawTileBorders
- */
- public void setDrawTileBorders(boolean drawTileBorders)
- {
- boolean old = isDrawTileBorders();
- this.drawTileBorders = drawTileBorders;
- firePropertyChange("drawTileBorders", old, isDrawTileBorders());
- repaint();
- }
-
- /**
- * A property indicating the center position of the map
- * @param geoPosition the new property value
- */
- public void setCenterPosition(GeoPosition geoPosition)
- {
- GeoPosition oldVal = getCenterPosition();
- setCenter(getTileFactory().geoToPixel(geoPosition, zoomLevel));
- repaint();
- GeoPosition newVal = getCenterPosition();
- firePropertyChange("centerPosition", oldVal, newVal);
- }
-
- /**
- * A property indicating the center position of the map
- * @return the current center position
- */
- public GeoPosition getCenterPosition()
- {
- return getTileFactory().pixelToGeo(getCenter(), zoomLevel);
- }
-
- /**
- * Get the current factory
- * @return the current property value
- */
- public TileFactory getTileFactory()
- {
- return factory;
- }
-
- /**
- * Set the current tile factory (must not be null)
- * @param factory the new property value
- */
- public void setTileFactory(TileFactory factory)
- {
- if (factory == null)
- throw new NullPointerException("factory must not be null");
-
- this.factory.removeTileListener(tileLoadListener);
- this.factory.dispose();
-
- this.factory = factory;
- this.setZoom(factory.getInfo().getDefaultZoomLevel());
-
- factory.addTileListener(tileLoadListener);
-
- repaint();
- }
-
- /**
- * A property for an image which will be display when an image is still loading.
- * @return the current property value
- */
- public Image getLoadingImage()
- {
- return loadingImage;
- }
-
- /**
- * A property for an image which will be display when an image is still loading.
- * @param loadingImage the new property value
- */
- public void setLoadingImage(Image loadingImage)
- {
- this.loadingImage = loadingImage;
- }
-
- /**
- * Gets the current pixel center of the map. This point is in the global bitmap coordinate system, not as lat/longs.
- * @return the current center of the map as a pixel value
- */
- public Point2D getCenter()
- {
- return center;
- }
-
- /**
- * Sets the new center of the map in pixel coordinates.
- * @param center the new center of the map in pixel coordinates
- */
- public void setCenter(Point2D center)
- {
- Point2D old = this.getCenter();
-
- double centerX = center.getX();
- double centerY = center.getY();
-
- Dimension mapSize = getTileFactory().getMapSize(getZoom());
- int mapHeight = (int) mapSize.getHeight() * getTileFactory().getTileSize(getZoom());
- int mapWidth = (int) mapSize.getWidth() * getTileFactory().getTileSize(getZoom());
-
- if (isRestrictOutsidePanning())
- {
- Insets insets = getInsets();
- int viewportHeight = getHeight() - insets.top - insets.bottom;
- int viewportWidth = getWidth() - insets.left - insets.right;
-
- // don't let the user pan over the top edge
- Rectangle newVP = calculateViewportBounds(center);
- if (newVP.getY() < 0)
- {
- centerY = viewportHeight / 2;
- }
-
- // don't let the user pan over the left edge
- if (!isHorizontalWrapped() && newVP.getX() < 0)
- {
- centerX = viewportWidth / 2;
- }
-
- // don't let the user pan over the bottom edge
- if (newVP.getY() + newVP.getHeight() > mapHeight)
- {
- centerY = mapHeight - viewportHeight / 2;
- }
-
- // don't let the user pan over the right edge
- if (!isHorizontalWrapped() && (newVP.getX() + newVP.getWidth() > mapWidth))
- {
- centerX = mapWidth - viewportWidth / 2;
- }
-
- // if map is to small then just center it vert
- if (mapHeight < newVP.getHeight())
- {
- centerY = mapHeight / 2;// viewportHeight/2;// - mapHeight/2;
- }
-
- // if map is too small then just center it horiz
- if (!isHorizontalWrapped() && mapWidth < newVP.getWidth())
- {
- centerX = mapWidth / 2;
- }
- }
-
- // If center is outside (0, 0,mapWidth, mapHeight)
- // compute modulo to get it back in.
- {
- centerX = centerX % mapWidth;
- centerY = centerY % mapHeight;
-
- if (centerX < 0)
- centerX += mapWidth;
-
- if (centerY < 0)
- centerY += mapHeight;
- }
-
- GeoPosition oldGP = this.getCenterPosition();
- this.center = new Point2D.Double(centerX, centerY);
- firePropertyChange("center", old, this.center);
- firePropertyChange("centerPosition", oldGP, this.getCenterPosition());
- repaint();
- }
-
- /**
- * Calculates a zoom level so that all points in the specified set will be visible on screen. This is useful if you
- * have a bunch of points in an area like a city and you want to zoom out so that the entire city and it's points
- * are visible without panning.
- * @param positions A set of GeoPositions to calculate the new zoom from
- */
- public void calculateZoomFrom(Set positions)
- {
- // u.p("calculating a zoom based on: ");
- // u.p(positions);
- if (positions.size() < 2)
- {
- return;
- }
-
- int zoom = getZoom();
- Rectangle2D rect = generateBoundingRect(positions, zoom);
- // Rectangle2D viewport = map.getViewportBounds();
- int count = 0;
- while (!getViewportBounds().contains(rect))
- {
- // u.p("not contained");
- Point2D centr = new Point2D.Double(rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2);
- GeoPosition px = getTileFactory().pixelToGeo(centr, zoom);
- // u.p("new geo = " + px);
- setCenterPosition(px);
- count++;
- if (count > 30)
- break;
-
- if (getViewportBounds().contains(rect))
- {
- // u.p("did it finally");
- break;
- }
- zoom = zoom + 1;
- if (zoom > 15)
- {
- break;
- }
- setZoom(zoom);
- rect = generateBoundingRect(positions, zoom);
- }
- }
-
- private Rectangle2D generateBoundingRect(final Set positions, int zoom)
- {
- Point2D point1 = getTileFactory().geoToPixel(positions.iterator().next(), zoom);
- Rectangle2D rect = new Rectangle2D.Double(point1.getX(), point1.getY(), 0, 0);
-
- for (GeoPosition pos : positions)
- {
- Point2D point = getTileFactory().geoToPixel(pos, zoom);
- rect.add(point);
- }
- return rect;
- }
-
- // a property change listener which forces repaints when tiles finish loading
- private TileListener tileLoadListener = new TileListener()
- {
- @Override
- public void tileLoaded(Tile tile)
- {
- if (tile.getZoom() == getZoom())
- {
- repaint();
- /* this optimization doesn't save much and it doesn't work if you
- * wrap around the world
- Rectangle viewportBounds = getViewportBounds();
- TilePoint tilePoint = t.getLocation();
- Point point = new Point(tilePoint.getX() * getTileFactory().getTileSize(), tilePoint.getY() * getTileFactory().getTileSize());
- Rectangle tileRect = new Rectangle(point, new Dimension(getTileFactory().getTileSize(), getTileFactory().getTileSize()));
- if (viewportBounds.intersects(tileRect)) {
- //convert tileRect from world space to viewport space
- repaint(new Rectangle(
- tileRect.x - viewportBounds.x,
- tileRect.y - viewportBounds.y,
- tileRect.width,
- tileRect.height
- ));
- }*/
- }
- }
-
- };
-
- /**
- * @return true if panning is restricted or not
- */
- public boolean isRestrictOutsidePanning()
- {
- return restrictOutsidePanning;
- }
-
- /**
- * @param restrictOutsidePanning set if panning is restricted or not
- */
- public void setRestrictOutsidePanning(boolean restrictOutsidePanning)
- {
- this.restrictOutsidePanning = restrictOutsidePanning;
- }
-
- /**
- * @return true if horizontally wrapped or not
- */
- public boolean isHorizontalWrapped()
- {
- return horizontalWrapped;
- }
-
- /**
- * @param horizontalWrapped true if horizontal wrap is enabled
- */
- public void setHorizontalWrapped(boolean horizontalWrapped)
- {
- this.horizontalWrapped = horizontalWrapped;
- }
-
- /**
- * Converts the specified GeoPosition to a point in the JXMapViewer's local coordinate space. This method is
- * especially useful when drawing lat/long positions on the map.
- * @param pos a GeoPosition on the map
- * @return the point in the local coordinate space of the map
- */
- public Point2D convertGeoPositionToPoint(GeoPosition pos)
- {
- // convert from geo to world bitmap
- Point2D pt = getTileFactory().geoToPixel(pos, getZoom());
- // convert from world bitmap to local
- Rectangle bounds = getViewportBounds();
- return new Point2D.Double(pt.getX() - bounds.getX(), pt.getY() - bounds.getY());
- }
-
- /**
- * Converts the specified Point2D in the JXMapViewer's local coordinate space to a GeoPosition on the map. This
- * method is especially useful for determining the GeoPosition under the mouse cursor.
- * @param pt a point in the local coordinate space of the map
- * @return the point converted to a GeoPosition
- */
- public GeoPosition convertPointToGeoPosition(Point2D pt)
- {
- // convert from local to world bitmap
- Rectangle bounds = getViewportBounds();
- Point2D pt2 = new Point2D.Double(pt.getX() + bounds.getX(), pt.getY() + bounds.getY());
-
- // convert from world bitmap to geo
- GeoPosition pos = getTileFactory().pixelToGeo(pt2, getZoom());
- return pos;
- }
-
-
-
- /**
- * @return isNegativeYAllowed
- */
- public boolean isNegativeYAllowed()
- {
- return isNegativeYAllowed;
- }
-}
+/*
+ * MapViewer.java
+ *
+ * Created on March 14, 2006, 2:14 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.Rectangle;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.beans.DesignMode;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.jdesktop.swingx.mapviewer.GeoPosition;
+import org.jdesktop.swingx.mapviewer.Tile;
+import org.jdesktop.swingx.mapviewer.TileFactory;
+import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
+import org.jdesktop.swingx.mapviewer.TileListener;
+import org.jdesktop.swingx.mapviewer.empty.EmptyTileFactory;
+import org.jdesktop.swingx.painter.AbstractPainter;
+import org.jdesktop.swingx.painter.Painter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A tile oriented map component that can easily be used with tile sources
+ * on the web like Google and Yahoo maps, satellite data such as NASA imagery,
+ * and also with file based sources like pre-processed NASA images.
+ * A known map provider can be used with the SLMapServerInfo,
+ * which will connect to a 2km resolution version of NASA's Blue Marble Next Generation
+ * imagery. @see SLMapServerInfo for more information.
+ *
+ * Note, the JXMapViewer has three center point properties. The addressLocation property
+ * represents an abstract center of the map. This would usually be something like the first item
+ * in a search result. It is a {@link GeoPosition}. The centerPosition property represents
+ * the current center point of the map. If the user pans the map then the centerPosition point will
+ * change but the addressLocation will not. Calling recenterToAddressLocation() will move the map
+ * back to that center address. The center property represents the same point as the centerPosition
+ * property, but as a Point2D in pixel space instead of a GeoPosition in lat/long space. Note that
+ * the center property is a Point2D in the entire world bitmap, not in the portion of the map currently
+ * visible. You can use the getViewportBounds() method to find the portion of the map currently visible
+ * and adjust your calculations accordingly. Changing the center property will change the centerPosition
+ * property and vice versa. All three properties are bound.
+ * @author Joshua.Marinacci@sun.com
+ * @see org.jdesktop.swingx.mapviewer.bmng.SLMapServerInfo
+ */
+public class JXMapViewer extends JPanel implements DesignMode
+{
+ private static final long serialVersionUID = -3530746298586937321L;
+
+ private final static Logger mLog =
+ LoggerFactory.getLogger( JXMapViewer.class );
+
+ private final boolean isNegativeYAllowed = true; // maybe rename to isNorthBounded and isSouthBounded?
+
+ /**
+ * The zoom level. Generally a value between 1 and 15 (TODO Is this true for all the mapping worlds? What does this
+ * mean if some mapping system doesn't support the zoom level?
+ */
+ private int zoomLevel = 1;
+
+ /**
+ * The position, in map coordinates of the center point. This is defined as the distance from the top and
+ * left edges of the map in pixels. Dragging the map component will change the center position. Zooming in/out will
+ * cause the center to be recalculated so as to remain in the center of the new "map".
+ */
+ private Point2D center = new Point2D.Double(0, 0);
+
+ /**
+ * Indicates whether or not to draw the borders between tiles. Defaults to false. TODO Generally not very nice
+ * looking, very much a product of testing Consider whether this should really be a property or not.
+ */
+ private boolean drawTileBorders = false;
+
+ /**
+ * Factory used by this component to grab the tiles necessary for painting the map.
+ */
+ private TileFactory factory;
+
+ /**
+ * The position in latitude/longitude of the "address" being mapped. This is a special coordinate that, when moved,
+ * will cause the map to be moved as well. It is separate from "center" in that "center" tracks the current center
+ * (in pixels) of the viewport whereas this will not change when panning or zooming. Whenever the addressLocation is
+ * changed, however, the map will be repositioned.
+ */
+ private GeoPosition addressLocation;
+
+ /**
+ * The overlay to delegate to for painting the "foreground" of the map component. This would include painting
+ * waypoints, day/night, etc. Also receives mouse events.
+ */
+ private Painter super JXMapViewer> overlay;
+
+ private boolean designTime;
+
+ private Image loadingImage;
+
+ private boolean restrictOutsidePanning = true;
+ private boolean horizontalWrapped = true;
+
+ /**
+ * Create a new JXMapViewer. By default it will use the EmptyTileFactory
+ */
+ public JXMapViewer()
+ {
+ factory = new EmptyTileFactory();
+ // setTileFactory(new GoogleTileFactory());
+
+ // make a dummy loading image
+ try
+ {
+ ImageIcon imageIcon = new ImageIcon( "images/loading.png" );
+ this.setLoadingImage( imageIcon.getImage() );
+ }
+ catch (Throwable ex)
+ {
+
+ mLog.error( "JXMapViewer could not load 'loading.png'" );
+
+ BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g2 = img.createGraphics();
+ g2.setColor(Color.black);
+ g2.fillRect(0, 0, 16, 16);
+ g2.dispose();
+ this.setLoadingImage(img);
+ }
+
+ // setAddressLocation(new GeoPosition(37.392137,-121.950431)); // Sun campus
+ }
+
+ @Override
+ protected void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+
+ doPaintComponent(g);
+ }
+
+ // the method that does the actual painting
+ private void doPaintComponent(Graphics g)
+ {/*
+ * if (isOpaque() || isDesignTime()) { g.setColor(getBackground()); g.fillRect(0,0,getWidth(),getHeight()); }
+ */
+
+ if (isDesignTime())
+ {
+ // do nothing
+ }
+ else
+ {
+ int z = getZoom();
+ Rectangle viewportBounds = getViewportBounds();
+ drawMapTiles(g, z, viewportBounds);
+ drawOverlays(z, g, viewportBounds);
+ }
+
+ super.paintBorder(g);
+ }
+
+ /**
+ * Indicate that the component is being used at design time, such as in a visual editor like NetBeans' Matisse
+ * @param b indicates if the component is being used at design time
+ */
+ @Override
+ public void setDesignTime(boolean b)
+ {
+ this.designTime = b;
+ }
+
+ /**
+ * Indicates whether the component is being used at design time, such as in a visual editor like NetBeans' Matisse
+ * @return boolean indicating if the component is being used at design time
+ */
+ @Override
+ public boolean isDesignTime()
+ {
+ return designTime;
+ }
+
+ /**
+ * Draw the map tiles. This method is for implementation use only.
+ * @param g Graphics
+ * @param zoom zoom level to draw at
+ * @param viewportBounds the bounds to draw within
+ */
+ protected void drawMapTiles(final Graphics g, final int zoom, Rectangle viewportBounds)
+ {
+ int size = getTileFactory().getTileSize(zoom);
+ Dimension mapSize = getTileFactory().getMapSize(zoom);
+
+ // calculate the "visible" viewport area in tiles
+ int numWide = viewportBounds.width / size + 2;
+ int numHigh = viewportBounds.height / size + 2;
+
+ // TilePoint topLeftTile = getTileFactory().getTileCoordinate(
+ // new Point2D.Double(viewportBounds.x, viewportBounds.y));
+ TileFactoryInfo info = getTileFactory().getInfo();
+ int tpx = (int) Math.floor(viewportBounds.getX() / info.getTileSize(0));
+ int tpy = (int) Math.floor(viewportBounds.getY() / info.getTileSize(0));
+ // TilePoint topLeftTile = new TilePoint(tpx, tpy);
+
+ // p("top tile = " + topLeftTile);
+ // fetch the tiles from the factory and store them in the tiles cache
+ // attach the tileLoadListener
+ for (int x = 0; x <= numWide; x++)
+ {
+ for (int y = 0; y <= numHigh; y++)
+ {
+ int itpx = x + tpx;// topLeftTile.getX();
+ int itpy = y + tpy;// topLeftTile.getY();
+ // TilePoint point = new TilePoint(x + topLeftTile.getX(), y + topLeftTile.getY());
+ // only proceed if the specified tile point lies within the area being painted
+ if (g.getClipBounds().intersects(
+ new Rectangle(itpx * size - viewportBounds.x, itpy * size - viewportBounds.y, size, size)))
+ {
+ Tile tile = getTileFactory().getTile(itpx, itpy, zoom);
+ int ox = ((itpx * getTileFactory().getTileSize(zoom)) - viewportBounds.x);
+ int oy = ((itpy * getTileFactory().getTileSize(zoom)) - viewportBounds.y);
+
+ // if the tile is off the map to the north/south, then just don't paint anything
+ if (isTileOnMap(itpx, itpy, mapSize))
+ {
+ if (isOpaque())
+ {
+ g.setColor(getBackground());
+ g.fillRect(ox, oy, size, size);
+ }
+ }
+ else if (tile.isLoaded())
+ {
+ g.drawImage(tile.getImage(), ox, oy, null);
+ }
+ else
+ {
+ // Use tile at higher zoom level with 200% magnification
+ Tile superTile = getTileFactory().getTile(itpx / 2, itpy / 2, zoom + 1);
+
+ if (superTile.isLoaded())
+ {
+ int offX = (itpx % 2) * size / 2;
+ int offY = (itpy % 2) * size / 2;
+ g.drawImage(superTile.getImage(), ox, oy, ox + size, oy + size, offX, offY, offX + size / 2, offY + size / 2, null);
+ }
+ else
+ {
+ int imageX = (getTileFactory().getTileSize(zoom) - getLoadingImage().getWidth(null)) / 2;
+ int imageY = (getTileFactory().getTileSize(zoom) - getLoadingImage().getHeight(null)) / 2;
+ g.setColor(Color.GRAY);
+ g.fillRect(ox, oy, size, size);
+ g.drawImage(getLoadingImage(), ox + imageX, oy + imageY, null);
+ }
+ }
+ if (isDrawTileBorders())
+ {
+
+ g.setColor(Color.black);
+ g.drawRect(ox, oy, size, size);
+ g.drawRect(ox + size / 2 - 5, oy + size / 2 - 5, 10, 10);
+ g.setColor(Color.white);
+ g.drawRect(ox + 1, oy + 1, size, size);
+
+ String text = itpx + ", " + itpy + ", " + getZoom();
+ g.setColor(Color.BLACK);
+ g.drawString(text, ox + 10, oy + 30);
+ g.drawString(text, ox + 10 + 2, oy + 30 + 2);
+ g.setColor(Color.WHITE);
+ g.drawString(text, ox + 10 + 1, oy + 30 + 1);
+ }
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private void drawOverlays(final int zoom, final Graphics g, final Rectangle viewportBounds)
+ {
+ if (overlay != null)
+ {
+ overlay.paint((Graphics2D) g, this, getWidth(), getHeight());
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private boolean isTileOnMap(int x, int y, Dimension mapSize)
+ {
+ return !isNegativeYAllowed && y < 0 || y >= mapSize.getHeight();
+ }
+
+ /**
+ * Sets the map overlay. This is a Painter which will paint on top of the map. It can be used to draw waypoints,
+ * lines, or static overlays like text messages.
+ * @param overlay the map overlay to use
+ */
+ public void setOverlayPainter(Painter super JXMapViewer> overlay)
+ {
+ Painter super JXMapViewer> old = getOverlayPainter();
+ this.overlay = overlay;
+
+ PropertyChangeListener listener = new PropertyChangeListener()
+ {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ if (evt.getNewValue().equals(Boolean.TRUE))
+ {
+ repaint();
+ }
+ }
+ };
+
+ if (old instanceof AbstractPainter)
+ {
+ AbstractPainter> ap = (AbstractPainter>) overlay;
+ ap.removePropertyChangeListener("dirty", listener);
+ }
+
+ if (overlay instanceof AbstractPainter)
+ {
+ AbstractPainter> ap = (AbstractPainter>) overlay;
+ ap.addPropertyChangeListener("dirty", listener);
+ }
+
+ firePropertyChange("mapOverlay", old, getOverlayPainter());
+ repaint();
+ }
+
+ /**
+ * Gets the current map overlay
+ * @return the current map overlay
+ */
+ public Painter super JXMapViewer> getOverlayPainter()
+ {
+ return overlay;
+ }
+
+ /**
+ * Returns the bounds of the viewport in pixels. This can be used to transform points into the world bitmap
+ * coordinate space.
+ * @return the bounds in pixels of the "view" of this map
+ */
+ public Rectangle getViewportBounds()
+ {
+ return calculateViewportBounds(getCenter());
+ }
+
+ private Rectangle calculateViewportBounds(Point2D centr)
+ {
+ Insets insets = getInsets();
+ // calculate the "visible" viewport area in pixels
+ int viewportWidth = getWidth() - insets.left - insets.right;
+ int viewportHeight = getHeight() - insets.top - insets.bottom;
+ double viewportX = (centr.getX() - viewportWidth / 2);
+ double viewportY = (centr.getY() - viewportHeight / 2);
+ return new Rectangle((int) viewportX, (int) viewportY, viewportWidth, viewportHeight);
+ }
+
+ /**
+ * Set the current zoom level
+ * @param zoom the new zoom level
+ */
+ public void setZoom(int zoom)
+ {
+ if (zoom == this.zoomLevel)
+ {
+ return;
+ }
+
+ TileFactoryInfo info = getTileFactory().getInfo();
+ // don't repaint if we are out of the valid zoom levels
+ if (info != null && (zoom < info.getMinimumZoomLevel() || zoom > info.getMaximumZoomLevel()))
+ {
+ return;
+ }
+
+ // if(zoom >= 0 && zoom <= 15 && zoom != this.zoom) {
+ int oldzoom = this.zoomLevel;
+ Point2D oldCenter = getCenter();
+ Dimension oldMapSize = getTileFactory().getMapSize(oldzoom);
+ this.zoomLevel = zoom;
+ this.firePropertyChange("zoom", oldzoom, zoom);
+
+ Dimension mapSize = getTileFactory().getMapSize(zoom);
+
+ setCenter(new Point2D.Double(oldCenter.getX() * (mapSize.getWidth() / oldMapSize.getWidth()), oldCenter.getY()
+ * (mapSize.getHeight() / oldMapSize.getHeight())));
+
+ repaint();
+ }
+
+ /**
+ * Gets the current zoom level
+ * @return the current zoom level
+ */
+ public int getZoom()
+ {
+ return this.zoomLevel;
+ }
+
+ /**
+ * Gets the current address location of the map. This property does not change when the user pans the map. This
+ * property is bound.
+ * @return the current map location (address)
+ */
+ public GeoPosition getAddressLocation()
+ {
+ return addressLocation;
+ }
+
+ /**
+ * Gets the current address location of the map
+ * @param addressLocation the new address location
+ */
+ public void setAddressLocation(GeoPosition addressLocation)
+ {
+ GeoPosition old = getAddressLocation();
+ this.addressLocation = addressLocation;
+ setCenter(getTileFactory().geoToPixel(addressLocation, getZoom()));
+
+ firePropertyChange("addressLocation", old, getAddressLocation());
+ repaint();
+ }
+
+ /**
+ * Re-centers the map to have the current address location be at the center of the map, accounting for the map's
+ * width and height.
+ */
+ public void recenterToAddressLocation()
+ {
+ setCenter(getTileFactory().geoToPixel(getAddressLocation(), getZoom()));
+ repaint();
+ }
+
+ /**
+ * Indicates if the tile borders should be drawn. Mainly used for debugging.
+ * @return the value of this property
+ */
+ public boolean isDrawTileBorders()
+ {
+ return drawTileBorders;
+ }
+
+ /**
+ * Set if the tile borders should be drawn. Mainly used for debugging.
+ * @param drawTileBorders new value of this drawTileBorders
+ */
+ public void setDrawTileBorders(boolean drawTileBorders)
+ {
+ boolean old = isDrawTileBorders();
+ this.drawTileBorders = drawTileBorders;
+ firePropertyChange("drawTileBorders", old, isDrawTileBorders());
+ repaint();
+ }
+
+ /**
+ * A property indicating the center position of the map
+ * @param geoPosition the new property value
+ */
+ public void setCenterPosition(GeoPosition geoPosition)
+ {
+ GeoPosition oldVal = getCenterPosition();
+ setCenter(getTileFactory().geoToPixel(geoPosition, zoomLevel));
+ repaint();
+ GeoPosition newVal = getCenterPosition();
+ firePropertyChange("centerPosition", oldVal, newVal);
+ }
+
+ /**
+ * A property indicating the center position of the map
+ * @return the current center position
+ */
+ public GeoPosition getCenterPosition()
+ {
+ return getTileFactory().pixelToGeo(getCenter(), zoomLevel);
+ }
+
+ /**
+ * Get the current factory
+ * @return the current property value
+ */
+ public TileFactory getTileFactory()
+ {
+ return factory;
+ }
+
+ /**
+ * Set the current tile factory (must not be null)
+ * @param factory the new property value
+ */
+ public void setTileFactory(TileFactory factory)
+ {
+ if (factory == null)
+ throw new NullPointerException("factory must not be null");
+
+ this.factory.removeTileListener(tileLoadListener);
+ this.factory.dispose();
+
+ this.factory = factory;
+ this.setZoom(factory.getInfo().getDefaultZoomLevel());
+
+ factory.addTileListener(tileLoadListener);
+
+ repaint();
+ }
+
+ /**
+ * A property for an image which will be display when an image is still loading.
+ * @return the current property value
+ */
+ public Image getLoadingImage()
+ {
+ return loadingImage;
+ }
+
+ /**
+ * A property for an image which will be display when an image is still loading.
+ * @param loadingImage the new property value
+ */
+ public void setLoadingImage(Image loadingImage)
+ {
+ this.loadingImage = loadingImage;
+ }
+
+ /**
+ * Gets the current pixel center of the map. This point is in the global bitmap coordinate system, not as lat/longs.
+ * @return the current center of the map as a pixel value
+ */
+ public Point2D getCenter()
+ {
+ return center;
+ }
+
+ /**
+ * Sets the new center of the map in pixel coordinates.
+ * @param center the new center of the map in pixel coordinates
+ */
+ public void setCenter(Point2D center)
+ {
+ Point2D old = this.getCenter();
+
+ double centerX = center.getX();
+ double centerY = center.getY();
+
+ Dimension mapSize = getTileFactory().getMapSize(getZoom());
+ int mapHeight = (int) mapSize.getHeight() * getTileFactory().getTileSize(getZoom());
+ int mapWidth = (int) mapSize.getWidth() * getTileFactory().getTileSize(getZoom());
+
+ if (isRestrictOutsidePanning())
+ {
+ Insets insets = getInsets();
+ int viewportHeight = getHeight() - insets.top - insets.bottom;
+ int viewportWidth = getWidth() - insets.left - insets.right;
+
+ // don't let the user pan over the top edge
+ Rectangle newVP = calculateViewportBounds(center);
+ if (newVP.getY() < 0)
+ {
+ centerY = viewportHeight / 2;
+ }
+
+ // don't let the user pan over the left edge
+ if (!isHorizontalWrapped() && newVP.getX() < 0)
+ {
+ centerX = viewportWidth / 2;
+ }
+
+ // don't let the user pan over the bottom edge
+ if (newVP.getY() + newVP.getHeight() > mapHeight)
+ {
+ centerY = mapHeight - viewportHeight / 2;
+ }
+
+ // don't let the user pan over the right edge
+ if (!isHorizontalWrapped() && (newVP.getX() + newVP.getWidth() > mapWidth))
+ {
+ centerX = mapWidth - viewportWidth / 2;
+ }
+
+ // if map is to small then just center it vert
+ if (mapHeight < newVP.getHeight())
+ {
+ centerY = mapHeight / 2;// viewportHeight/2;// - mapHeight/2;
+ }
+
+ // if map is too small then just center it horiz
+ if (!isHorizontalWrapped() && mapWidth < newVP.getWidth())
+ {
+ centerX = mapWidth / 2;
+ }
+ }
+
+ // If center is outside (0, 0,mapWidth, mapHeight)
+ // compute modulo to get it back in.
+ {
+ centerX = centerX % mapWidth;
+ centerY = centerY % mapHeight;
+
+ if (centerX < 0)
+ centerX += mapWidth;
+
+ if (centerY < 0)
+ centerY += mapHeight;
+ }
+
+ GeoPosition oldGP = this.getCenterPosition();
+ this.center = new Point2D.Double(centerX, centerY);
+ firePropertyChange("center", old, this.center);
+ firePropertyChange("centerPosition", oldGP, this.getCenterPosition());
+ repaint();
+ }
+
+ /**
+ * Calculates a zoom level so that all points in the specified set will be visible on screen. This is useful if you
+ * have a bunch of points in an area like a city and you want to zoom out so that the entire city and it's points
+ * are visible without panning.
+ * @param positions A set of GeoPositions to calculate the new zoom from
+ */
+ public void calculateZoomFrom(Set positions)
+ {
+ // u.p("calculating a zoom based on: ");
+ // u.p(positions);
+ if (positions.size() < 2)
+ {
+ return;
+ }
+
+ int zoom = getZoom();
+ Rectangle2D rect = generateBoundingRect(positions, zoom);
+ // Rectangle2D viewport = map.getViewportBounds();
+ int count = 0;
+ while (!getViewportBounds().contains(rect))
+ {
+ // u.p("not contained");
+ Point2D centr = new Point2D.Double(rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2);
+ GeoPosition px = getTileFactory().pixelToGeo(centr, zoom);
+ // u.p("new geo = " + px);
+ setCenterPosition(px);
+ count++;
+ if (count > 30)
+ break;
+
+ if (getViewportBounds().contains(rect))
+ {
+ // u.p("did it finally");
+ break;
+ }
+ zoom = zoom + 1;
+ if (zoom > 15)
+ {
+ break;
+ }
+ setZoom(zoom);
+ rect = generateBoundingRect(positions, zoom);
+ }
+ }
+
+ private Rectangle2D generateBoundingRect(final Set positions, int zoom)
+ {
+ Point2D point1 = getTileFactory().geoToPixel(positions.iterator().next(), zoom);
+ Rectangle2D rect = new Rectangle2D.Double(point1.getX(), point1.getY(), 0, 0);
+
+ for (GeoPosition pos : positions)
+ {
+ Point2D point = getTileFactory().geoToPixel(pos, zoom);
+ rect.add(point);
+ }
+ return rect;
+ }
+
+ // a property change listener which forces repaints when tiles finish loading
+ private TileListener tileLoadListener = new TileListener()
+ {
+ @Override
+ public void tileLoaded(Tile tile)
+ {
+ if (tile.getZoom() == getZoom())
+ {
+ repaint();
+ /* this optimization doesn't save much and it doesn't work if you
+ * wrap around the world
+ Rectangle viewportBounds = getViewportBounds();
+ TilePoint tilePoint = t.getLocation();
+ Point point = new Point(tilePoint.getX() * getTileFactory().getTileSize(), tilePoint.getY() * getTileFactory().getTileSize());
+ Rectangle tileRect = new Rectangle(point, new Dimension(getTileFactory().getTileSize(), getTileFactory().getTileSize()));
+ if (viewportBounds.intersects(tileRect)) {
+ //convert tileRect from world space to viewport space
+ repaint(new Rectangle(
+ tileRect.x - viewportBounds.x,
+ tileRect.y - viewportBounds.y,
+ tileRect.width,
+ tileRect.height
+ ));
+ }*/
+ }
+ }
+
+ };
+
+ /**
+ * @return true if panning is restricted or not
+ */
+ public boolean isRestrictOutsidePanning()
+ {
+ return restrictOutsidePanning;
+ }
+
+ /**
+ * @param restrictOutsidePanning set if panning is restricted or not
+ */
+ public void setRestrictOutsidePanning(boolean restrictOutsidePanning)
+ {
+ this.restrictOutsidePanning = restrictOutsidePanning;
+ }
+
+ /**
+ * @return true if horizontally wrapped or not
+ */
+ public boolean isHorizontalWrapped()
+ {
+ return horizontalWrapped;
+ }
+
+ /**
+ * @param horizontalWrapped true if horizontal wrap is enabled
+ */
+ public void setHorizontalWrapped(boolean horizontalWrapped)
+ {
+ this.horizontalWrapped = horizontalWrapped;
+ }
+
+ /**
+ * Converts the specified GeoPosition to a point in the JXMapViewer's local coordinate space. This method is
+ * especially useful when drawing lat/long positions on the map.
+ * @param pos a GeoPosition on the map
+ * @return the point in the local coordinate space of the map
+ */
+ public Point2D convertGeoPositionToPoint(GeoPosition pos)
+ {
+ // convert from geo to world bitmap
+ Point2D pt = getTileFactory().geoToPixel(pos, getZoom());
+ // convert from world bitmap to local
+ Rectangle bounds = getViewportBounds();
+ return new Point2D.Double(pt.getX() - bounds.getX(), pt.getY() - bounds.getY());
+ }
+
+ /**
+ * Converts the specified Point2D in the JXMapViewer's local coordinate space to a GeoPosition on the map. This
+ * method is especially useful for determining the GeoPosition under the mouse cursor.
+ * @param pt a point in the local coordinate space of the map
+ * @return the point converted to a GeoPosition
+ */
+ public GeoPosition convertPointToGeoPosition(Point2D pt)
+ {
+ // convert from local to world bitmap
+ Rectangle bounds = getViewportBounds();
+ Point2D pt2 = new Point2D.Double(pt.getX() + bounds.getX(), pt.getY() + bounds.getY());
+
+ // convert from world bitmap to geo
+ GeoPosition pos = getTileFactory().pixelToGeo(pt2, getZoom());
+ return pos;
+ }
+
+
+
+ /**
+ * @return isNegativeYAllowed
+ */
+ public boolean isNegativeYAllowed()
+ {
+ return isNegativeYAllowed;
+ }
+}
diff --git a/src/org/jdesktop/swingx/OSMTileFactoryInfo.java b/src/main/java/org/jdesktop/swingx/OSMTileFactoryInfo.java
similarity index 100%
rename from src/org/jdesktop/swingx/OSMTileFactoryInfo.java
rename to src/main/java/org/jdesktop/swingx/OSMTileFactoryInfo.java
diff --git a/src/org/jdesktop/swingx/VirtualEarthTileFactoryInfo.java b/src/main/java/org/jdesktop/swingx/VirtualEarthTileFactoryInfo.java
similarity index 100%
rename from src/org/jdesktop/swingx/VirtualEarthTileFactoryInfo.java
rename to src/main/java/org/jdesktop/swingx/VirtualEarthTileFactoryInfo.java
diff --git a/src/org/jdesktop/swingx/input/CenterMapListener.java b/src/main/java/org/jdesktop/swingx/input/CenterMapListener.java
similarity index 100%
rename from src/org/jdesktop/swingx/input/CenterMapListener.java
rename to src/main/java/org/jdesktop/swingx/input/CenterMapListener.java
diff --git a/src/org/jdesktop/swingx/input/PanKeyListener.java b/src/main/java/org/jdesktop/swingx/input/PanKeyListener.java
similarity index 100%
rename from src/org/jdesktop/swingx/input/PanKeyListener.java
rename to src/main/java/org/jdesktop/swingx/input/PanKeyListener.java
diff --git a/src/org/jdesktop/swingx/input/PanMouseInputListener.java b/src/main/java/org/jdesktop/swingx/input/PanMouseInputListener.java
similarity index 100%
rename from src/org/jdesktop/swingx/input/PanMouseInputListener.java
rename to src/main/java/org/jdesktop/swingx/input/PanMouseInputListener.java
diff --git a/src/org/jdesktop/swingx/input/ZoomMouseWheelListenerCenter.java b/src/main/java/org/jdesktop/swingx/input/ZoomMouseWheelListenerCenter.java
similarity index 100%
rename from src/org/jdesktop/swingx/input/ZoomMouseWheelListenerCenter.java
rename to src/main/java/org/jdesktop/swingx/input/ZoomMouseWheelListenerCenter.java
diff --git a/src/org/jdesktop/swingx/input/ZoomMouseWheelListenerCursor.java b/src/main/java/org/jdesktop/swingx/input/ZoomMouseWheelListenerCursor.java
similarity index 100%
rename from src/org/jdesktop/swingx/input/ZoomMouseWheelListenerCursor.java
rename to src/main/java/org/jdesktop/swingx/input/ZoomMouseWheelListenerCursor.java
diff --git a/src/org/jdesktop/swingx/mapviewer/AbstractTileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/AbstractTileFactory.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/AbstractTileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/AbstractTileFactory.java
diff --git a/src/org/jdesktop/swingx/mapviewer/DefaultTileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/DefaultTileFactory.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/DefaultTileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/DefaultTileFactory.java
diff --git a/src/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java b/src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java
similarity index 94%
rename from src/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java
index d37dd46e..b094af34 100644
--- a/src/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypoint.java
@@ -1,63 +1,63 @@
-/*
- * Waypoint.java
- *
- * Created on March 30, 2006, 5:22 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import org.jdesktop.beans.AbstractBean;
-
-/**
- * @author joshy
- */
-public class DefaultWaypoint extends AbstractBean implements Waypoint
-{
- private GeoPosition position;
-
- /**
- * Creates a new instance of Waypoint
- */
- public DefaultWaypoint()
- {
- this(new GeoPosition(0, 0));
- }
-
- /**
- * @param latitude the latitude
- * @param longitude the longitude
- */
- public DefaultWaypoint(double latitude, double longitude)
- {
- this(new GeoPosition(latitude, longitude));
- }
-
- /**
- * @param coord the geo coordinate
- */
- public DefaultWaypoint(GeoPosition coord)
- {
- this.position = coord;
- }
-
- @Override
- public GeoPosition getPosition()
- {
- return position;
- }
-
- /**
- * Set a new GeoPosition for this Waypoint
- * @param coordinate a new position
- */
- public void setPosition(GeoPosition coordinate)
- {
- GeoPosition old = getPosition();
- this.position = coordinate;
- firePropertyChange("position", old, getPosition());
- }
-
-}
+/*
+ * Waypoint.java
+ *
+ * Created on March 30, 2006, 5:22 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import org.jdesktop.beans.AbstractBean;
+
+/**
+ * @author joshy
+ */
+public class DefaultWaypoint extends AbstractBean implements Waypoint
+{
+ private GeoPosition position;
+
+ /**
+ * Creates a new instance of Waypoint
+ */
+ public DefaultWaypoint()
+ {
+ this(new GeoPosition(0, 0));
+ }
+
+ /**
+ * @param latitude the latitude
+ * @param longitude the longitude
+ */
+ public DefaultWaypoint(double latitude, double longitude)
+ {
+ this(new GeoPosition(latitude, longitude));
+ }
+
+ /**
+ * @param coord the geo coordinate
+ */
+ public DefaultWaypoint(GeoPosition coord)
+ {
+ this.position = coord;
+ }
+
+ @Override
+ public GeoPosition getPosition()
+ {
+ return position;
+ }
+
+ /**
+ * Set a new GeoPosition for this Waypoint
+ * @param coordinate a new position
+ */
+ public void setPosition(GeoPosition coordinate)
+ {
+ GeoPosition old = getPosition();
+ this.position = coordinate;
+ firePropertyChange("position", old, getPosition());
+ }
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java b/src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java
similarity index 95%
rename from src/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java
index 1ad1a4af..6e949fe3 100644
--- a/src/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/DefaultWaypointRenderer.java
@@ -1,61 +1,61 @@
-/*
- * WaypointRenderer.java
- *
- * Created on March 30, 2006, 5:24 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
-import java.awt.image.BufferedImage;
-
-import javax.imageio.ImageIO;
-
-import org.jdesktop.swingx.JXMapViewer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This is a standard waypoint renderer.
- * @author joshy
- */
-public class DefaultWaypointRenderer implements WaypointRenderer
-{
- private final static Logger mLog =
- LoggerFactory.getLogger( DefaultWaypointRenderer.class );
-
- private BufferedImage img = null;
-
- /**
- * Uses a default waypoint image
- */
- public DefaultWaypointRenderer()
- {
- try
- {
- img = ImageIO.read(getClass().getResource("resources/standard_waypoint.png"));
- }
- catch (Exception ex)
- {
- mLog.error("couldn't read standard_waypoint.png", ex );
- }
- }
-
- @Override
- public void paintWaypoint(Graphics2D g, JXMapViewer map, Waypoint w)
- {
- if (img == null)
- return;
-
- Point2D point = map.getTileFactory().geoToPixel(w.getPosition(), map.getZoom());
-
- int x = (int)point.getX() -img.getWidth() / 2;
- int y = (int)point.getY() -img.getHeight();
-
- g.drawImage(img, x, y, null);
- }
-}
+/*
+ * WaypointRenderer.java
+ *
+ * Created on March 30, 2006, 5:24 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+
+import javax.imageio.ImageIO;
+
+import org.jdesktop.swingx.JXMapViewer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This is a standard waypoint renderer.
+ * @author joshy
+ */
+public class DefaultWaypointRenderer implements WaypointRenderer
+{
+ private final static Logger mLog =
+ LoggerFactory.getLogger( DefaultWaypointRenderer.class );
+
+ private BufferedImage img = null;
+
+ /**
+ * Uses a default waypoint image
+ */
+ public DefaultWaypointRenderer()
+ {
+ try
+ {
+ img = ImageIO.read(getClass().getResource("resources/standard_waypoint.png"));
+ }
+ catch (Exception ex)
+ {
+ mLog.error("couldn't read standard_waypoint.png", ex );
+ }
+ }
+
+ @Override
+ public void paintWaypoint(Graphics2D g, JXMapViewer map, Waypoint w)
+ {
+ if (img == null)
+ return;
+
+ Point2D point = map.getTileFactory().geoToPixel(w.getPosition(), map.getZoom());
+
+ int x = (int)point.getX() -img.getWidth() / 2;
+ int y = (int)point.getY() -img.getHeight();
+
+ g.drawImage(img, x, y, null);
+ }
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/GeoBounds.java b/src/main/java/org/jdesktop/swingx/mapviewer/GeoBounds.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/GeoBounds.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/GeoBounds.java
diff --git a/src/org/jdesktop/swingx/mapviewer/GeoPosition.java b/src/main/java/org/jdesktop/swingx/mapviewer/GeoPosition.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/GeoPosition.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/GeoPosition.java
diff --git a/src/org/jdesktop/swingx/mapviewer/LocalResponseCache.java b/src/main/java/org/jdesktop/swingx/mapviewer/LocalResponseCache.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/LocalResponseCache.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/LocalResponseCache.java
diff --git a/src/org/jdesktop/swingx/mapviewer/Tile.java b/src/main/java/org/jdesktop/swingx/mapviewer/Tile.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/Tile.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/Tile.java
diff --git a/src/org/jdesktop/swingx/mapviewer/TileCache.java b/src/main/java/org/jdesktop/swingx/mapviewer/TileCache.java
similarity index 96%
rename from src/org/jdesktop/swingx/mapviewer/TileCache.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/TileCache.java
index 592f39af..e6072a5a 100644
--- a/src/org/jdesktop/swingx/mapviewer/TileCache.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/TileCache.java
@@ -1,141 +1,141 @@
-/*
- * TileCache.java
- *
- * Created on January 2, 2007, 7:17 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-
-import javax.imageio.ImageIO;
-
-/**
- * An implementation only class for now. For internal use only.
- * @author joshua.marinacci@sun.com
- */
-public class TileCache
-{
- private Map imgmap = new HashMap();
- private LinkedList imgmapAccessQueue = new LinkedList();
- private int imagesize = 0;
- private Map bytemap = new HashMap();
- private LinkedList bytemapAccessQueue = new LinkedList();
- private int bytesize = 0;
-
- /**
- * Default constructor - Empty
- */
- public TileCache()
- {
- }
-
- /**
- * Put a tile image into the cache. This puts both a buffered image and array of bytes that make up the compressed
- * image.
- * @param uri URI of image that is being stored in the cache
- * @param bimg bytes of the compressed image, ie: the image file that was loaded over the network
- * @param img image to store in the cache
- */
- public void put(URI uri, byte[] bimg, BufferedImage img)
- {
- synchronized (bytemap)
- {
- while (bytesize > 1000 * 1000 * 50)
- {
- URI olduri = bytemapAccessQueue.removeFirst();
- byte[] oldbimg = bytemap.remove(olduri);
- bytesize -= oldbimg.length;
- log("removed 1 img from byte cache");
- }
-
- bytemap.put(uri, bimg);
- bytesize += bimg.length;
- bytemapAccessQueue.addLast(uri);
- }
- addToImageCache(uri, img);
- }
-
- /**
- * Returns a buffered image for the requested URI from the cache. This method must return null if the image is not
- * in the cache. If the image is unavailable but it's compressed version *is* available, then the compressed version
- * will be expanded and returned.
- * @param uri URI of the image previously put in the cache
- * @return the image matching the requested URI, or null if not available
- * @throws IOException if retrieval fails
- */
- public BufferedImage get(URI uri) throws IOException
- {
- synchronized (imgmap)
- {
- if (imgmap.containsKey(uri))
- {
- imgmapAccessQueue.remove(uri);
- imgmapAccessQueue.addLast(uri);
- return imgmap.get(uri);
- }
- }
- synchronized (bytemap)
- {
- if (bytemap.containsKey(uri))
- {
- log("retrieving from bytes");
- bytemapAccessQueue.remove(uri);
- bytemapAccessQueue.addLast(uri);
- BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytemap.get(uri)));
- addToImageCache(uri, img);
- return img;
- }
- }
- return null;
- }
-
- /**
- * Request that the cache free up some memory. How this happens or how much memory is freed is up to the TileCache
- * implementation. Subclasses can implement their own strategy. The default strategy is to clear out all buffered
- * images but retain the compressed versions.
- */
- public void needMoreMemory()
- {
- imgmap.clear();
- log("HACK! need more memory: freeing up memory");
- }
-
- private void addToImageCache(final URI uri, final BufferedImage img)
- {
- synchronized (imgmap)
- {
- try {
- while (imagesize > 1000 * 1000 * 50)
- {
- URI olduri = imgmapAccessQueue.removeFirst();
- BufferedImage oldimg = imgmap.remove(olduri);
- imagesize -= oldimg.getWidth() * oldimg.getHeight() * 4;
- log("removed 1 img from image cache");
- }
- imgmap.put(uri, img);
- imagesize += img.getWidth() * img.getHeight() * 4;
- imgmapAccessQueue.addLast(uri);
- } catch (Exception ex) {
- log("Failed to load tile at URL. Tile is null");
- }
- }
-// log("added to cache: " + " uncompressed = " + imgmap.keySet().size() + " / " + imagesize / 1000 + "k"
-// + " compressed = " + bytemap.keySet().size() + " / " + bytesize / 1000 + "k");
- }
-
- private void log(String string)
- {
-// Log.debug( string );
- }
-
-}
+/*
+ * TileCache.java
+ *
+ * Created on January 2, 2007, 7:17 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+/**
+ * An implementation only class for now. For internal use only.
+ * @author joshua.marinacci@sun.com
+ */
+public class TileCache
+{
+ private Map imgmap = new HashMap();
+ private LinkedList imgmapAccessQueue = new LinkedList();
+ private int imagesize = 0;
+ private Map bytemap = new HashMap();
+ private LinkedList bytemapAccessQueue = new LinkedList();
+ private int bytesize = 0;
+
+ /**
+ * Default constructor - Empty
+ */
+ public TileCache()
+ {
+ }
+
+ /**
+ * Put a tile image into the cache. This puts both a buffered image and array of bytes that make up the compressed
+ * image.
+ * @param uri URI of image that is being stored in the cache
+ * @param bimg bytes of the compressed image, ie: the image file that was loaded over the network
+ * @param img image to store in the cache
+ */
+ public void put(URI uri, byte[] bimg, BufferedImage img)
+ {
+ synchronized (bytemap)
+ {
+ while (bytesize > 1000 * 1000 * 50)
+ {
+ URI olduri = bytemapAccessQueue.removeFirst();
+ byte[] oldbimg = bytemap.remove(olduri);
+ bytesize -= oldbimg.length;
+ log("removed 1 img from byte cache");
+ }
+
+ bytemap.put(uri, bimg);
+ bytesize += bimg.length;
+ bytemapAccessQueue.addLast(uri);
+ }
+ addToImageCache(uri, img);
+ }
+
+ /**
+ * Returns a buffered image for the requested URI from the cache. This method must return null if the image is not
+ * in the cache. If the image is unavailable but it's compressed version *is* available, then the compressed version
+ * will be expanded and returned.
+ * @param uri URI of the image previously put in the cache
+ * @return the image matching the requested URI, or null if not available
+ * @throws IOException if retrieval fails
+ */
+ public BufferedImage get(URI uri) throws IOException
+ {
+ synchronized (imgmap)
+ {
+ if (imgmap.containsKey(uri))
+ {
+ imgmapAccessQueue.remove(uri);
+ imgmapAccessQueue.addLast(uri);
+ return imgmap.get(uri);
+ }
+ }
+ synchronized (bytemap)
+ {
+ if (bytemap.containsKey(uri))
+ {
+ log("retrieving from bytes");
+ bytemapAccessQueue.remove(uri);
+ bytemapAccessQueue.addLast(uri);
+ BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytemap.get(uri)));
+ addToImageCache(uri, img);
+ return img;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Request that the cache free up some memory. How this happens or how much memory is freed is up to the TileCache
+ * implementation. Subclasses can implement their own strategy. The default strategy is to clear out all buffered
+ * images but retain the compressed versions.
+ */
+ public void needMoreMemory()
+ {
+ imgmap.clear();
+ log("HACK! need more memory: freeing up memory");
+ }
+
+ private void addToImageCache(final URI uri, final BufferedImage img)
+ {
+ synchronized (imgmap)
+ {
+ try {
+ while (imagesize > 1000 * 1000 * 50)
+ {
+ URI olduri = imgmapAccessQueue.removeFirst();
+ BufferedImage oldimg = imgmap.remove(olduri);
+ imagesize -= oldimg.getWidth() * oldimg.getHeight() * 4;
+ log("removed 1 img from image cache");
+ }
+ imgmap.put(uri, img);
+ imagesize += img.getWidth() * img.getHeight() * 4;
+ imgmapAccessQueue.addLast(uri);
+ } catch (Exception ex) {
+ log("Failed to load tile at URL. Tile is null");
+ }
+ }
+// log("added to cache: " + " uncompressed = " + imgmap.keySet().size() + " / " + imagesize / 1000 + "k"
+// + " compressed = " + bytemap.keySet().size() + " / " + bytesize / 1000 + "k");
+ }
+
+ private void log(String string)
+ {
+// Log.debug( string );
+ }
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/TileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/TileFactory.java
similarity index 96%
rename from src/org/jdesktop/swingx/mapviewer/TileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/TileFactory.java
index c1eba196..c3ebb5c7 100644
--- a/src/org/jdesktop/swingx/mapviewer/TileFactory.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/TileFactory.java
@@ -1,144 +1,144 @@
-/*
- * TileFactory.java
- *
- * Created on March 17, 2006, 8:01 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import java.awt.Dimension;
-import java.awt.geom.Point2D;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jdesktop.swingx.mapviewer.util.GeoUtil;
-
-/**
- * A class that can produce tiles and convert coordinates to pixels
- * @author joshy
- */
-public abstract class TileFactory
-{
- private TileFactoryInfo info;
- private List tileListeners = new ArrayList();
-
- /**
- * Creates a new instance of TileFactory
- * @param info a TileFactoryInfo to configure this TileFactory
- */
- protected TileFactory(TileFactoryInfo info)
- {
- this.info = info;
- }
-
- /**
- * Gets the size of an edge of a tile in pixels at the current zoom level. Tiles must be square.
- * @param zoom the current zoom level
- * @return the size of an edge of a tile in pixels
- */
- public int getTileSize(int zoom)
- {
- return getInfo().getTileSize(zoom);
- }
-
- /**
- * Returns a Dimension containing the width and height of the map, in tiles at the current zoom level. So a
- * Dimension that returns 10x20 would be 10 tiles wide and 20 tiles tall. These values can be multipled by
- * getTileSize() to determine the pixel width/height for the map at the given zoom level
- * @return the size of the world bitmap in tiles
- * @param zoom the current zoom level
- */
- public Dimension getMapSize(int zoom)
- {
- return GeoUtil.getMapSize(zoom, getInfo());
- }
-
- /**
- * Return the Tile at a given TilePoint and zoom level
- * @return the tile that is located at the given tilePoint for this zoom level. For example, if getMapSize() returns
- * 10x20 for this zoom, and the tilePoint is (3,5), then the appropriate tile will be located and returned. This
- * method must not return null. However, it can return dummy tiles that contain no data if it wants. This is
- * appropriate, for example, for tiles which are outside of the bounds of the map and if the factory doesn't
- * implement wrapping.
- * @param x the x value
- * @param y the y value
- * @param zoom the current zoom level
- */
- public abstract Tile getTile(int x, int y, int zoom);
-
- /**
- * Convert a pixel in the world bitmap at the specified zoom level into a GeoPosition
- * @param pixelCoordinate a Point2D representing a pixel in the world bitmap
- * @param zoom the zoom level of the world bitmap
- * @return the converted GeoPosition
- */
- public GeoPosition pixelToGeo(Point2D pixelCoordinate, int zoom)
- {
- return GeoUtil.getPosition(pixelCoordinate, zoom, getInfo());
- }
-
- /**
- * Convert a GeoPosition to a pixel position in the world bitmap a the specified zoom level.
- * @param c a GeoPosition
- * @param zoomLevel the zoom level to extract the pixel coordinate for
- * @return the pixel point
- */
- public Point2D geoToPixel(GeoPosition c, int zoomLevel)
- {
- return GeoUtil.getBitmapCoordinate(c, zoomLevel, getInfo());
- }
-
- /**
- * Get the TileFactoryInfo describing this TileFactory
- * @return a TileFactoryInfo
- */
- public TileFactoryInfo getInfo()
- {
- return info;
- }
-
- /**
- * Adds a tile listener
- * @param listener the listener
- */
- public void addTileListener(TileListener listener)
- {
- tileListeners.add(listener);
- }
-
- /**
- * Removes a tile listener
- * @param listener the listener
- */
- public void removeTileListener(TileListener listener)
- {
- tileListeners.remove(listener);
- }
-
- /**
- * Disposes this TileFactory
- */
- public abstract void dispose();
-
- /**
- * Notifies all tile listeners
- * @param tile the tile
- */
- protected void fireTileLoadedEvent(Tile tile)
- {
- for (TileListener listener : tileListeners)
- {
- listener.tileLoaded(tile);
- }
- }
-
- /**
- * Override this method to load the tile using, for example, an ExecutorService.
- * @param tile The tile to load.
- */
- protected abstract void startLoading(Tile tile);
-
-}
+/*
+ * TileFactory.java
+ *
+ * Created on March 17, 2006, 8:01 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import java.awt.Dimension;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdesktop.swingx.mapviewer.util.GeoUtil;
+
+/**
+ * A class that can produce tiles and convert coordinates to pixels
+ * @author joshy
+ */
+public abstract class TileFactory
+{
+ private TileFactoryInfo info;
+ private List tileListeners = new ArrayList();
+
+ /**
+ * Creates a new instance of TileFactory
+ * @param info a TileFactoryInfo to configure this TileFactory
+ */
+ protected TileFactory(TileFactoryInfo info)
+ {
+ this.info = info;
+ }
+
+ /**
+ * Gets the size of an edge of a tile in pixels at the current zoom level. Tiles must be square.
+ * @param zoom the current zoom level
+ * @return the size of an edge of a tile in pixels
+ */
+ public int getTileSize(int zoom)
+ {
+ return getInfo().getTileSize(zoom);
+ }
+
+ /**
+ * Returns a Dimension containing the width and height of the map, in tiles at the current zoom level. So a
+ * Dimension that returns 10x20 would be 10 tiles wide and 20 tiles tall. These values can be multipled by
+ * getTileSize() to determine the pixel width/height for the map at the given zoom level
+ * @return the size of the world bitmap in tiles
+ * @param zoom the current zoom level
+ */
+ public Dimension getMapSize(int zoom)
+ {
+ return GeoUtil.getMapSize(zoom, getInfo());
+ }
+
+ /**
+ * Return the Tile at a given TilePoint and zoom level
+ * @return the tile that is located at the given tilePoint for this zoom level. For example, if getMapSize() returns
+ * 10x20 for this zoom, and the tilePoint is (3,5), then the appropriate tile will be located and returned. This
+ * method must not return null. However, it can return dummy tiles that contain no data if it wants. This is
+ * appropriate, for example, for tiles which are outside of the bounds of the map and if the factory doesn't
+ * implement wrapping.
+ * @param x the x value
+ * @param y the y value
+ * @param zoom the current zoom level
+ */
+ public abstract Tile getTile(int x, int y, int zoom);
+
+ /**
+ * Convert a pixel in the world bitmap at the specified zoom level into a GeoPosition
+ * @param pixelCoordinate a Point2D representing a pixel in the world bitmap
+ * @param zoom the zoom level of the world bitmap
+ * @return the converted GeoPosition
+ */
+ public GeoPosition pixelToGeo(Point2D pixelCoordinate, int zoom)
+ {
+ return GeoUtil.getPosition(pixelCoordinate, zoom, getInfo());
+ }
+
+ /**
+ * Convert a GeoPosition to a pixel position in the world bitmap a the specified zoom level.
+ * @param c a GeoPosition
+ * @param zoomLevel the zoom level to extract the pixel coordinate for
+ * @return the pixel point
+ */
+ public Point2D geoToPixel(GeoPosition c, int zoomLevel)
+ {
+ return GeoUtil.getBitmapCoordinate(c, zoomLevel, getInfo());
+ }
+
+ /**
+ * Get the TileFactoryInfo describing this TileFactory
+ * @return a TileFactoryInfo
+ */
+ public TileFactoryInfo getInfo()
+ {
+ return info;
+ }
+
+ /**
+ * Adds a tile listener
+ * @param listener the listener
+ */
+ public void addTileListener(TileListener listener)
+ {
+ tileListeners.add(listener);
+ }
+
+ /**
+ * Removes a tile listener
+ * @param listener the listener
+ */
+ public void removeTileListener(TileListener listener)
+ {
+ tileListeners.remove(listener);
+ }
+
+ /**
+ * Disposes this TileFactory
+ */
+ public abstract void dispose();
+
+ /**
+ * Notifies all tile listeners
+ * @param tile the tile
+ */
+ protected void fireTileLoadedEvent(Tile tile)
+ {
+ for (TileListener listener : tileListeners)
+ {
+ listener.tileLoaded(tile);
+ }
+ }
+
+ /**
+ * Override this method to load the tile using, for example, an ExecutorService.
+ * @param tile The tile to load.
+ */
+ protected abstract void startLoading(Tile tile);
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/TileFactoryInfo.java b/src/main/java/org/jdesktop/swingx/mapviewer/TileFactoryInfo.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/TileFactoryInfo.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/TileFactoryInfo.java
diff --git a/src/org/jdesktop/swingx/mapviewer/TileListener.java b/src/main/java/org/jdesktop/swingx/mapviewer/TileListener.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/TileListener.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/TileListener.java
diff --git a/src/org/jdesktop/swingx/mapviewer/Waypoint.java b/src/main/java/org/jdesktop/swingx/mapviewer/Waypoint.java
similarity index 95%
rename from src/org/jdesktop/swingx/mapviewer/Waypoint.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/Waypoint.java
index 9666dc2a..b5c06033 100644
--- a/src/org/jdesktop/swingx/mapviewer/Waypoint.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/Waypoint.java
@@ -1,25 +1,25 @@
-/*
- * Waypoint.java
- *
- * Created on March 30, 2006, 5:22 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-
-/**
- * A Waypoint is a GeoPosition that can be
- * drawn on a may using a WaypointPainter.
- * @author joshy
- */
-public interface Waypoint
-{
- /**
- * Get the current GeoPosition of this Waypoint
- * @return the current position
- */
- public GeoPosition getPosition();
-}
+/*
+ * Waypoint.java
+ *
+ * Created on March 30, 2006, 5:22 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+
+/**
+ * A Waypoint is a GeoPosition that can be
+ * drawn on a may using a WaypointPainter.
+ * @author joshy
+ */
+public interface Waypoint
+{
+ /**
+ * Get the current GeoPosition of this Waypoint
+ * @return the current position
+ */
+ public GeoPosition getPosition();
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/WaypointPainter.java b/src/main/java/org/jdesktop/swingx/mapviewer/WaypointPainter.java
similarity index 95%
rename from src/org/jdesktop/swingx/mapviewer/WaypointPainter.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/WaypointPainter.java
index cd4fe88a..c1f66213 100644
--- a/src/org/jdesktop/swingx/mapviewer/WaypointPainter.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/WaypointPainter.java
@@ -1,90 +1,90 @@
-/*
- * WaypointMapOverlay.java
- *
- * Created on April 1, 2006, 4:59 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.jdesktop.swingx.JXMapViewer;
-import org.jdesktop.swingx.painter.AbstractPainter;
-
-/**
- * Paints waypoints on the JXMapViewer. This is an
- * instance of Painter that only can draw on to JXMapViewers.
- * @param the waypoint type
- * @author rbair
- */
-public class WaypointPainter extends AbstractPainter
-{
- private WaypointRenderer super W> renderer = new DefaultWaypointRenderer();
- private Set waypoints = new HashSet();
-
- /**
- * Creates a new instance of WaypointPainter
- */
- public WaypointPainter()
- {
- setAntialiasing(true);
- setCacheable(false);
- }
-
- /**
- * Sets the waypoint renderer to use when painting waypoints
- * @param r the new WaypointRenderer to use
- */
- public void setRenderer(WaypointRenderer r)
- {
- this.renderer = r;
- }
-
- /**
- * Gets the current set of waypoints to paint
- * @return a typed Set of Waypoints
- */
- public Set getWaypoints()
- {
- return Collections.unmodifiableSet(waypoints);
- }
-
- /**
- * Sets the current set of waypoints to paint
- * @param waypoints the new Set of Waypoints to use
- */
- public void setWaypoints(Set extends W> waypoints)
- {
- this.waypoints.clear();
- this.waypoints.addAll(waypoints);
- }
-
- @Override
- protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
- {
- if (renderer == null)
- {
- return;
- }
-
- Rectangle viewportBounds = map.getViewportBounds();
-
- g.translate(-viewportBounds.getX(), -viewportBounds.getY());
-
- for (W w : getWaypoints())
- {
- renderer.paintWaypoint(g, map, w);
- }
-
- g.translate(viewportBounds.getX(), viewportBounds.getY());
-
- }
-
-}
+/*
+ * WaypointMapOverlay.java
+ *
+ * Created on April 1, 2006, 4:59 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jdesktop.swingx.JXMapViewer;
+import org.jdesktop.swingx.painter.AbstractPainter;
+
+/**
+ * Paints waypoints on the JXMapViewer. This is an
+ * instance of Painter that only can draw on to JXMapViewers.
+ * @param the waypoint type
+ * @author rbair
+ */
+public class WaypointPainter extends AbstractPainter
+{
+ private WaypointRenderer super W> renderer = new DefaultWaypointRenderer();
+ private Set waypoints = new HashSet();
+
+ /**
+ * Creates a new instance of WaypointPainter
+ */
+ public WaypointPainter()
+ {
+ setAntialiasing(true);
+ setCacheable(false);
+ }
+
+ /**
+ * Sets the waypoint renderer to use when painting waypoints
+ * @param r the new WaypointRenderer to use
+ */
+ public void setRenderer(WaypointRenderer r)
+ {
+ this.renderer = r;
+ }
+
+ /**
+ * Gets the current set of waypoints to paint
+ * @return a typed Set of Waypoints
+ */
+ public Set getWaypoints()
+ {
+ return Collections.unmodifiableSet(waypoints);
+ }
+
+ /**
+ * Sets the current set of waypoints to paint
+ * @param waypoints the new Set of Waypoints to use
+ */
+ public void setWaypoints(Set extends W> waypoints)
+ {
+ this.waypoints.clear();
+ this.waypoints.addAll(waypoints);
+ }
+
+ @Override
+ protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height)
+ {
+ if (renderer == null)
+ {
+ return;
+ }
+
+ Rectangle viewportBounds = map.getViewportBounds();
+
+ g.translate(-viewportBounds.getX(), -viewportBounds.getY());
+
+ for (W w : getWaypoints())
+ {
+ renderer.paintWaypoint(g, map, w);
+ }
+
+ g.translate(viewportBounds.getX(), viewportBounds.getY());
+
+ }
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/WaypointRenderer.java b/src/main/java/org/jdesktop/swingx/mapviewer/WaypointRenderer.java
similarity index 96%
rename from src/org/jdesktop/swingx/mapviewer/WaypointRenderer.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/WaypointRenderer.java
index c20f7a00..6c4e22fd 100644
--- a/src/org/jdesktop/swingx/mapviewer/WaypointRenderer.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/WaypointRenderer.java
@@ -1,32 +1,32 @@
-/*
- * WaypointRenderer.java
- *
- * Created on March 30, 2006, 5:56 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer;
-
-import java.awt.Graphics2D;
-
-import org.jdesktop.swingx.JXMapViewer;
-
-/**
- * A interface that draws waypoints. Implementations of WaypointRenderer can
- * be set on a WayPointPainter to draw waypoints on a JXMapViewer
- * @param the waypoint type
- * @author joshua.marinacci@sun.com
- */
-public interface WaypointRenderer
-{
- /**
- * paint the specified waypoint on the specified map and graphics context
- * @param g the graphics2D object
- * @param map the map
- * @param waypoint the waypoint
- */
- public void paintWaypoint(Graphics2D g, JXMapViewer map, W waypoint);
-
-}
+/*
+ * WaypointRenderer.java
+ *
+ * Created on March 30, 2006, 5:56 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer;
+
+import java.awt.Graphics2D;
+
+import org.jdesktop.swingx.JXMapViewer;
+
+/**
+ * A interface that draws waypoints. Implementations of WaypointRenderer can
+ * be set on a WayPointPainter to draw waypoints on a JXMapViewer
+ * @param the waypoint type
+ * @author joshua.marinacci@sun.com
+ */
+public interface WaypointRenderer
+{
+ /**
+ * paint the specified waypoint on the specified map and graphics context
+ * @param g the graphics2D object
+ * @param map the map
+ * @param waypoint the waypoint
+ */
+ public void paintWaypoint(Graphics2D g, JXMapViewer map, W waypoint);
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/bmng/CylindricalProjectionTileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/bmng/CylindricalProjectionTileFactory.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/bmng/CylindricalProjectionTileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/bmng/CylindricalProjectionTileFactory.java
diff --git a/src/org/jdesktop/swingx/mapviewer/bmng/SLMapServerInfo.java b/src/main/java/org/jdesktop/swingx/mapviewer/bmng/SLMapServerInfo.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/bmng/SLMapServerInfo.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/bmng/SLMapServerInfo.java
diff --git a/src/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java
similarity index 95%
rename from src/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java
index 596fc0af..db43285f 100644
--- a/src/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/empty/EmptyTileFactory.java
@@ -1,103 +1,103 @@
-/*
- * EmptyTileFactory.java
- *
- * Created on June 7, 2006, 4:58 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer.empty;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.image.BufferedImage;
-
-import org.jdesktop.swingx.mapviewer.Tile;
-import org.jdesktop.swingx.mapviewer.TileFactory;
-import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
-
-/**
- * A null implementation of TileFactory. Draws empty areas.
- * @author joshy
- */
-public class EmptyTileFactory extends TileFactory
-{
- /**
- * The empty tile image.
- */
- private BufferedImage emptyTile;
-
- /**
- * Creates a new instance of EmptyTileFactory
- */
- public EmptyTileFactory()
- {
- this(new TileFactoryInfo("EmptyTileFactory 256x256", 1, 15, 17, 256, true, true, "", "x", "y", "z"));
- }
-
- /**
- * Creates a new instance of EmptyTileFactory using the specified info.
- * @param info the tile factory info
- */
- public EmptyTileFactory(TileFactoryInfo info)
- {
- super(info);
- int tileSize = info.getTileSize(info.getMinimumZoomLevel());
- emptyTile = new BufferedImage(tileSize, tileSize, BufferedImage.TYPE_INT_ARGB);
- Graphics2D g = emptyTile.createGraphics();
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- g.setColor(Color.GRAY);
- g.fillRect(0, 0, tileSize, tileSize);
- g.setColor(Color.WHITE);
- g.drawOval(10, 10, tileSize - 20, tileSize - 20);
- g.fillOval(70, 50, 20, 20);
- g.fillOval(tileSize - 90, 50, 20, 20);
- g.fillOval(tileSize / 2 - 10, tileSize / 2 - 10, 20, 20);
- g.dispose();
- }
-
- /**
- * Gets an instance of an empty tile for the given tile position and zoom on the world map.
- * @param x The tile's x position on the world map.
- * @param y The tile's y position on the world map.
- * @param zoom The current zoom level.
- */
- @Override
- public Tile getTile(int x, int y, int zoom)
- {
- return new Tile(x, y, zoom)
- {
- @Override
- public synchronized boolean isLoaded()
- {
- return true;
- }
-
- @Override
- public BufferedImage getImage()
- {
- return emptyTile;
- }
-
- };
- }
-
- @Override
- public void dispose()
- {
- // noop
- }
-
- /**
- * Override this method to load the tile using, for example, an ExecutorService.
- * @param tile The tile to load.
- */
- @Override
- protected void startLoading(Tile tile)
- {
- // noop
- }
-
-}
+/*
+ * EmptyTileFactory.java
+ *
+ * Created on June 7, 2006, 4:58 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer.empty;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+
+import org.jdesktop.swingx.mapviewer.Tile;
+import org.jdesktop.swingx.mapviewer.TileFactory;
+import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
+
+/**
+ * A null implementation of TileFactory. Draws empty areas.
+ * @author joshy
+ */
+public class EmptyTileFactory extends TileFactory
+{
+ /**
+ * The empty tile image.
+ */
+ private BufferedImage emptyTile;
+
+ /**
+ * Creates a new instance of EmptyTileFactory
+ */
+ public EmptyTileFactory()
+ {
+ this(new TileFactoryInfo("EmptyTileFactory 256x256", 1, 15, 17, 256, true, true, "", "x", "y", "z"));
+ }
+
+ /**
+ * Creates a new instance of EmptyTileFactory using the specified info.
+ * @param info the tile factory info
+ */
+ public EmptyTileFactory(TileFactoryInfo info)
+ {
+ super(info);
+ int tileSize = info.getTileSize(info.getMinimumZoomLevel());
+ emptyTile = new BufferedImage(tileSize, tileSize, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g = emptyTile.createGraphics();
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g.setColor(Color.GRAY);
+ g.fillRect(0, 0, tileSize, tileSize);
+ g.setColor(Color.WHITE);
+ g.drawOval(10, 10, tileSize - 20, tileSize - 20);
+ g.fillOval(70, 50, 20, 20);
+ g.fillOval(tileSize - 90, 50, 20, 20);
+ g.fillOval(tileSize / 2 - 10, tileSize / 2 - 10, 20, 20);
+ g.dispose();
+ }
+
+ /**
+ * Gets an instance of an empty tile for the given tile position and zoom on the world map.
+ * @param x The tile's x position on the world map.
+ * @param y The tile's y position on the world map.
+ * @param zoom The current zoom level.
+ */
+ @Override
+ public Tile getTile(int x, int y, int zoom)
+ {
+ return new Tile(x, y, zoom)
+ {
+ @Override
+ public synchronized boolean isLoaded()
+ {
+ return true;
+ }
+
+ @Override
+ public BufferedImage getImage()
+ {
+ return emptyTile;
+ }
+
+ };
+ }
+
+ @Override
+ public void dispose()
+ {
+ // noop
+ }
+
+ /**
+ * Override this method to load the tile using, for example, an ExecutorService.
+ * @param tile The tile to load.
+ */
+ @Override
+ protected void startLoading(Tile tile)
+ {
+ // noop
+ }
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/esri/ESRITileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/esri/ESRITileFactory.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/esri/ESRITileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/esri/ESRITileFactory.java
diff --git a/src/org/jdesktop/swingx/mapviewer/resources/loading.png b/src/main/java/org/jdesktop/swingx/mapviewer/resources/loading.png
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/resources/loading.png
rename to src/main/java/org/jdesktop/swingx/mapviewer/resources/loading.png
diff --git a/src/org/jdesktop/swingx/mapviewer/resources/minus.png b/src/main/java/org/jdesktop/swingx/mapviewer/resources/minus.png
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/resources/minus.png
rename to src/main/java/org/jdesktop/swingx/mapviewer/resources/minus.png
diff --git a/src/org/jdesktop/swingx/mapviewer/resources/plus.png b/src/main/java/org/jdesktop/swingx/mapviewer/resources/plus.png
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/resources/plus.png
rename to src/main/java/org/jdesktop/swingx/mapviewer/resources/plus.png
diff --git a/src/org/jdesktop/swingx/mapviewer/resources/standard_waypoint.png b/src/main/java/org/jdesktop/swingx/mapviewer/resources/standard_waypoint.png
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/resources/standard_waypoint.png
rename to src/main/java/org/jdesktop/swingx/mapviewer/resources/standard_waypoint.png
diff --git a/src/org/jdesktop/swingx/mapviewer/util/GeoUtil.java b/src/main/java/org/jdesktop/swingx/mapviewer/util/GeoUtil.java
similarity index 97%
rename from src/org/jdesktop/swingx/mapviewer/util/GeoUtil.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/util/GeoUtil.java
index ac1e21de..7c4b21de 100644
--- a/src/org/jdesktop/swingx/mapviewer/util/GeoUtil.java
+++ b/src/main/java/org/jdesktop/swingx/mapviewer/util/GeoUtil.java
@@ -1,167 +1,167 @@
-/*
- * GeoUtil.java
- *
- * Created on June 26, 2006, 10:44 AM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.jdesktop.swingx.mapviewer.util;
-
-import java.awt.Dimension;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.jdesktop.swingx.JXMapViewer;
-import org.jdesktop.swingx.mapviewer.GeoBounds;
-import org.jdesktop.swingx.mapviewer.GeoPosition;
-import org.jdesktop.swingx.mapviewer.TileFactory;
-import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
-
-/**
- * These are math utilities for converting between pixels, tiles, and geographic coordinates. Implements a Google Maps
- * style mercator projection.
- * @author joshy
- */
-public final class GeoUtil
-{
- /**
- * @param zoom the zoom level
- * @param info the tile factory info
- * @return the size of the map at the given zoom, in tiles (num tiles tall by num tiles wide)
- */
- public static Dimension getMapSize(int zoom, TileFactoryInfo info)
- {
- return new Dimension(info.getMapWidthInTilesAtZoom(zoom), info.getMapWidthInTilesAtZoom(zoom));
- }
-
- /**
- * @param x the x value
- * @param y the y value
- * @param zoomLevel the zoom level
- * @param info the tile factory info
- * @return true if this point in tiles is valid at this zoom level. For example, if the zoom level is 0
- * (zoomed all the way out, where there is only one tile), then x,y must be 0,0
- */
- public static boolean isValidTile(int x, int y, int zoomLevel, TileFactoryInfo info)
- {
- // int x = (int)coord.getX();
- // int y = (int)coord.getY();
- // if off the map to the top or left
- if (x < 0 || y < 0)
- {
- return false;
- }
- // if of the map to the right
- if (info.getMapCenterInPixelsAtZoom(zoomLevel).getX() * 2 <= x * info.getTileSize(zoomLevel))
- {
- return false;
- }
- // if off the map to the bottom
- if (info.getMapCenterInPixelsAtZoom(zoomLevel).getY() * 2 <= y * info.getTileSize(zoomLevel))
- {
- return false;
- }
- // if out of zoom bounds
- if (zoomLevel < info.getMinimumZoomLevel() || zoomLevel > info.getMaximumZoomLevel())
- {
- return false;
- }
- return true;
- }
-
- /**
- * Given a position (latitude/longitude pair) and a zoom level, return the appropriate point in pixels. The
- * zoom level is necessary because pixel coordinates are in terms of the zoom level
- * @param c A lat/lon pair
- * @param zoomLevel the zoom level to extract the pixel coordinate for
- * @param info the tile factory info
- * @return the coordinate
- */
- public static Point2D getBitmapCoordinate(GeoPosition c, int zoomLevel, TileFactoryInfo info)
- {
- return getBitmapCoordinate(c.getLatitude(), c.getLongitude(), zoomLevel, info);
- }
-
- /**
- * Given a position (latitude/longitude pair) and a zoom level, return the appropriate point in pixels. The
- * zoom level is necessary because pixel coordinates are in terms of the zoom level
- * @param latitude the latitude
- * @param longitude the longitude
- * @param zoomLevel the zoom level to extract the pixel coordinate for
- * @param info the tile factory info
- * @return the coordinate
- */
- public static Point2D getBitmapCoordinate(double latitude, double longitude, int zoomLevel, TileFactoryInfo info)
- {
- double x = info.getMapCenterInPixelsAtZoom(zoomLevel).getX() + longitude
- * info.getLongitudeDegreeWidthInPixels(zoomLevel);
- double e = Math.sin(latitude * (Math.PI / 180.0));
- if (e > 0.9999)
- {
- e = 0.9999;
- }
- if (e < -0.9999)
- {
- e = -0.9999;
- }
- double y = info.getMapCenterInPixelsAtZoom(zoomLevel).getY() + 0.5 * Math.log((1 + e) / (1 - e)) * -1
- * (info.getLongitudeRadianWidthInPixels(zoomLevel));
- return new Point2D.Double(x, y);
- }
-
- /**
- * Convert an on screen pixel coordinate and a zoom level to a geo position
- * @param pixelCoordinate the coordinate in pixels
- * @param zoom the zoom level
- * @param info the tile factory info
- * @return a geo position
- */
- public static GeoPosition getPosition(Point2D pixelCoordinate, int zoom, TileFactoryInfo info)
- {
- // p(" --bitmap to latlon : " + coord + " " + zoom);
- double wx = pixelCoordinate.getX();
- double wy = pixelCoordinate.getY();
- // this reverses getBitmapCoordinates
- double flon = (wx - info.getMapCenterInPixelsAtZoom(zoom).getX()) / info.getLongitudeDegreeWidthInPixels(zoom);
- double e1 = (wy - info.getMapCenterInPixelsAtZoom(zoom).getY())
- / (-1 * info.getLongitudeRadianWidthInPixels(zoom));
- double e2 = (2 * Math.atan(Math.exp(e1)) - Math.PI / 2) / (Math.PI / 180.0);
- double flat = e2;
- GeoPosition wc = new GeoPosition(flat, flon);
- return wc;
- }
-
- /**
- * Gets the map bounds.
- * @param mapViewer The map viewer.
- * @return Returns the bounds.
- */
- public static GeoBounds getMapBounds(JXMapViewer mapViewer)
- {
- return new GeoBounds(getMapGeoBounds(mapViewer));
- }
-
- /**
- * Gets the bounds as a set of two GeoPosition objects.
- * @param mapViewer The map viewer.
- * @return Returns the set of two GeoPosition objects that represent the north west and south east
- * corners of the map.
- */
- private static Set getMapGeoBounds(JXMapViewer mapViewer)
- {
- Set set = new HashSet();
- TileFactory tileFactory = mapViewer.getTileFactory();
- int zoom = mapViewer.getZoom();
- Rectangle2D bounds = mapViewer.getViewportBounds();
- Point2D pt = new Point2D.Double(bounds.getX(), bounds.getY());
- set.add(tileFactory.pixelToGeo(pt, zoom));
- pt = new Point2D.Double(bounds.getX() + bounds.getWidth(), bounds.getY() + bounds.getHeight());
- set.add(tileFactory.pixelToGeo(pt, zoom));
- return set;
- }
-
-}
+/*
+ * GeoUtil.java
+ *
+ * Created on June 26, 2006, 10:44 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.jdesktop.swingx.mapviewer.util;
+
+import java.awt.Dimension;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jdesktop.swingx.JXMapViewer;
+import org.jdesktop.swingx.mapviewer.GeoBounds;
+import org.jdesktop.swingx.mapviewer.GeoPosition;
+import org.jdesktop.swingx.mapviewer.TileFactory;
+import org.jdesktop.swingx.mapviewer.TileFactoryInfo;
+
+/**
+ * These are math utilities for converting between pixels, tiles, and geographic coordinates. Implements a Google Maps
+ * style mercator projection.
+ * @author joshy
+ */
+public final class GeoUtil
+{
+ /**
+ * @param zoom the zoom level
+ * @param info the tile factory info
+ * @return the size of the map at the given zoom, in tiles (num tiles tall by num tiles wide)
+ */
+ public static Dimension getMapSize(int zoom, TileFactoryInfo info)
+ {
+ return new Dimension(info.getMapWidthInTilesAtZoom(zoom), info.getMapWidthInTilesAtZoom(zoom));
+ }
+
+ /**
+ * @param x the x value
+ * @param y the y value
+ * @param zoomLevel the zoom level
+ * @param info the tile factory info
+ * @return true if this point in tiles is valid at this zoom level. For example, if the zoom level is 0
+ * (zoomed all the way out, where there is only one tile), then x,y must be 0,0
+ */
+ public static boolean isValidTile(int x, int y, int zoomLevel, TileFactoryInfo info)
+ {
+ // int x = (int)coord.getX();
+ // int y = (int)coord.getY();
+ // if off the map to the top or left
+ if (x < 0 || y < 0)
+ {
+ return false;
+ }
+ // if of the map to the right
+ if (info.getMapCenterInPixelsAtZoom(zoomLevel).getX() * 2 <= x * info.getTileSize(zoomLevel))
+ {
+ return false;
+ }
+ // if off the map to the bottom
+ if (info.getMapCenterInPixelsAtZoom(zoomLevel).getY() * 2 <= y * info.getTileSize(zoomLevel))
+ {
+ return false;
+ }
+ // if out of zoom bounds
+ if (zoomLevel < info.getMinimumZoomLevel() || zoomLevel > info.getMaximumZoomLevel())
+ {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Given a position (latitude/longitude pair) and a zoom level, return the appropriate point in pixels. The
+ * zoom level is necessary because pixel coordinates are in terms of the zoom level
+ * @param c A lat/lon pair
+ * @param zoomLevel the zoom level to extract the pixel coordinate for
+ * @param info the tile factory info
+ * @return the coordinate
+ */
+ public static Point2D getBitmapCoordinate(GeoPosition c, int zoomLevel, TileFactoryInfo info)
+ {
+ return getBitmapCoordinate(c.getLatitude(), c.getLongitude(), zoomLevel, info);
+ }
+
+ /**
+ * Given a position (latitude/longitude pair) and a zoom level, return the appropriate point in pixels. The
+ * zoom level is necessary because pixel coordinates are in terms of the zoom level
+ * @param latitude the latitude
+ * @param longitude the longitude
+ * @param zoomLevel the zoom level to extract the pixel coordinate for
+ * @param info the tile factory info
+ * @return the coordinate
+ */
+ public static Point2D getBitmapCoordinate(double latitude, double longitude, int zoomLevel, TileFactoryInfo info)
+ {
+ double x = info.getMapCenterInPixelsAtZoom(zoomLevel).getX() + longitude
+ * info.getLongitudeDegreeWidthInPixels(zoomLevel);
+ double e = Math.sin(latitude * (Math.PI / 180.0));
+ if (e > 0.9999)
+ {
+ e = 0.9999;
+ }
+ if (e < -0.9999)
+ {
+ e = -0.9999;
+ }
+ double y = info.getMapCenterInPixelsAtZoom(zoomLevel).getY() + 0.5 * Math.log((1 + e) / (1 - e)) * -1
+ * (info.getLongitudeRadianWidthInPixels(zoomLevel));
+ return new Point2D.Double(x, y);
+ }
+
+ /**
+ * Convert an on screen pixel coordinate and a zoom level to a geo position
+ * @param pixelCoordinate the coordinate in pixels
+ * @param zoom the zoom level
+ * @param info the tile factory info
+ * @return a geo position
+ */
+ public static GeoPosition getPosition(Point2D pixelCoordinate, int zoom, TileFactoryInfo info)
+ {
+ // p(" --bitmap to latlon : " + coord + " " + zoom);
+ double wx = pixelCoordinate.getX();
+ double wy = pixelCoordinate.getY();
+ // this reverses getBitmapCoordinates
+ double flon = (wx - info.getMapCenterInPixelsAtZoom(zoom).getX()) / info.getLongitudeDegreeWidthInPixels(zoom);
+ double e1 = (wy - info.getMapCenterInPixelsAtZoom(zoom).getY())
+ / (-1 * info.getLongitudeRadianWidthInPixels(zoom));
+ double e2 = (2 * Math.atan(Math.exp(e1)) - Math.PI / 2) / (Math.PI / 180.0);
+ double flat = e2;
+ GeoPosition wc = new GeoPosition(flat, flon);
+ return wc;
+ }
+
+ /**
+ * Gets the map bounds.
+ * @param mapViewer The map viewer.
+ * @return Returns the bounds.
+ */
+ public static GeoBounds getMapBounds(JXMapViewer mapViewer)
+ {
+ return new GeoBounds(getMapGeoBounds(mapViewer));
+ }
+
+ /**
+ * Gets the bounds as a set of two GeoPosition objects.
+ * @param mapViewer The map viewer.
+ * @return Returns the set of two GeoPosition objects that represent the north west and south east
+ * corners of the map.
+ */
+ private static Set getMapGeoBounds(JXMapViewer mapViewer)
+ {
+ Set set = new HashSet();
+ TileFactory tileFactory = mapViewer.getTileFactory();
+ int zoom = mapViewer.getZoom();
+ Rectangle2D bounds = mapViewer.getViewportBounds();
+ Point2D pt = new Point2D.Double(bounds.getX(), bounds.getY());
+ set.add(tileFactory.pixelToGeo(pt, zoom));
+ pt = new Point2D.Double(bounds.getX() + bounds.getWidth(), bounds.getY() + bounds.getHeight());
+ set.add(tileFactory.pixelToGeo(pt, zoom));
+ return set;
+ }
+
+}
diff --git a/src/org/jdesktop/swingx/mapviewer/util/MercatorUtils.java b/src/main/java/org/jdesktop/swingx/mapviewer/util/MercatorUtils.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/util/MercatorUtils.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/util/MercatorUtils.java
diff --git a/src/org/jdesktop/swingx/mapviewer/wms/WMSService.java b/src/main/java/org/jdesktop/swingx/mapviewer/wms/WMSService.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/wms/WMSService.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/wms/WMSService.java
diff --git a/src/org/jdesktop/swingx/mapviewer/wms/WMSTileFactory.java b/src/main/java/org/jdesktop/swingx/mapviewer/wms/WMSTileFactory.java
similarity index 100%
rename from src/org/jdesktop/swingx/mapviewer/wms/WMSTileFactory.java
rename to src/main/java/org/jdesktop/swingx/mapviewer/wms/WMSTileFactory.java
diff --git a/src/org/jdesktop/swingx/painter/AbstractPainter.java b/src/main/java/org/jdesktop/swingx/painter/AbstractPainter.java
similarity index 100%
rename from src/org/jdesktop/swingx/painter/AbstractPainter.java
rename to src/main/java/org/jdesktop/swingx/painter/AbstractPainter.java
diff --git a/src/org/jdesktop/swingx/painter/CompoundPainter.java b/src/main/java/org/jdesktop/swingx/painter/CompoundPainter.java
similarity index 96%
rename from src/org/jdesktop/swingx/painter/CompoundPainter.java
rename to src/main/java/org/jdesktop/swingx/painter/CompoundPainter.java
index ed7c128b..d99d4896 100644
--- a/src/org/jdesktop/swingx/painter/CompoundPainter.java
+++ b/src/main/java/org/jdesktop/swingx/painter/CompoundPainter.java
@@ -1,497 +1,497 @@
-/*
- * $Id: CompoundPainter.java 4147 2012-02-01 17:13:24Z kschaefe $
- *
- * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
- * Santa Clara, California 95054, U.S.A. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.jdesktop.swingx.painter;
-
-import java.awt.Graphics2D;
-import java.awt.geom.AffineTransform;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-//import org.jdesktop.beans.JavaBean;
-
-/**
- * A {@link Painter} implementation composed of an array of Painters.
- * CompoundPainter provides a means for combining several individual
- * Painters, or groups of them, into one logical unit. Each of the
- * Painters are executed in order. BufferedImageOp filter effects can
- * be applied to them together as a whole. The entire set of painting operations
- * may be cached together.
- *
- *
- *
- * For example, if I want to create a CompoundPainter that started with a blue
- * background, had pinstripes on it running at a 45 degree angle, and those
- * pinstripes appeared to "fade in" from left to right, I would write the following:
- *
- * Color blue = new Color(0x417DDD);
- * Color translucent = new Color(blue.getRed(), blue.getGreen(), blue.getBlue(), 0);
- * panel.setBackground(blue);
- * panel.setForeground(Color.LIGHT_GRAY);
- * GradientPaint blueToTranslucent = new GradientPaint(
- * new Point2D.Double(.4, 0),
- * blue,
- * new Point2D.Double(1, 0),
- * translucent);
- * MattePainter veil = new MattePainter(blueToTranslucent);
- * veil.setPaintStretched(true);
- * Painter pinstripes = new PinstripePainter(45);
- * Painter backgroundPainter = new RectanglePainter(this.getBackground(), null);
- * Painter p = new CompoundPainter(backgroundPainter, pinstripes, veil);
- * panel.setBackgroundPainter(p);
- *
- *
- * @author rbair
- * @param an optional configuration parameter
- */
-//@JavaBean
-public class CompoundPainter extends AbstractPainter
-{
- private static class Handler implements PropertyChangeListener
- {
- private final WeakReference> ref;
-
- public Handler(CompoundPainter> painter)
- {
- ref = new WeakReference>(painter);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- CompoundPainter> painter = ref.get();
-
- if (painter == null)
- {
- AbstractPainter> src = (AbstractPainter>) evt.getSource();
- src.removePropertyChangeListener(this);
- }
- else
- {
- String property = evt.getPropertyName();
-
- if ("dirty".equals(property) && evt.getNewValue() == Boolean.FALSE)
- {
- return;
- }
-
- painter.setDirty(true);
- }
- }
- }
-
- private Handler handler;
-
- private List> painters = new CopyOnWriteArrayList>();
- private AffineTransform transform;
- private boolean clipPreserved = false;
-
- private boolean checkForDirtyChildPainters = true;
-
- /** Creates a new instance of CompoundPainter */
- public CompoundPainter()
- {
- this((Painter[]) null);
- }
-
- /**
- * Convenience constructor for creating a CompoundPainter for an array
- * of painters. A defensive copy of the given array is made, so that future
- * modification to the array does not result in changes to the CompoundPainter.
- *
- * @param painters array of painters, which will be painted in order
- */
- public CompoundPainter(Painter... painters)
- {
- handler = new Handler(this);
-
- setPainters(painters);
- }
-
- /**
- * Convenience constructor for creating a CompoundPainter for a list
- * of painters. A defensive copy of the given array is made, so that future
- * modification to the list does not result in changes to the CompoundPainter.
- *
- * @param painters array of painters, which will be painted in order
- */
- public CompoundPainter(List extends Painter> painters)
- {
- handler = new Handler(this);
-
- setPainters(painters);
- }
- /**
- * Sets the array of Painters to use. These painters will be executed in
- * order. A null value will be treated as an empty array. To prevent unexpected
- * behavior all values in provided array are copied to internally held array.
- * Any changes to the original array will not be reflected.
- *
- * @param painters array of painters, which will be painted in order
- */
- public void setPainters(List extends Painter> painters)
- {
- Collection> old = new ArrayList>(getPainters());
-
- for (Painter p : old)
- {
- if (p instanceof AbstractPainter)
- {
- ((AbstractPainter>) p).removePropertyChangeListener(handler);
- }
- }
-
- this.painters.clear();
- this.painters.addAll(painters);
-
- for (Painter p : this.painters)
- {
- if (p instanceof AbstractPainter)
- {
- ((AbstractPainter>) p).addPropertyChangeListener(handler);
- }
- }
-
- setDirty(true);
- firePropertyChange("painters", old, getPainters());
- }
-
- /**
- * Sets the array of Painters to use. These painters will be executed in
- * order. A null value will be treated as an empty array. To prevent unexpected
- * behavior all values in provided array are copied to internally held array.
- * Any changes to the original array will not be reflected.
- *
- * @param painters array of painters, which will be painted in order
- */
- public void setPainters(Painter... painters)
- {
- List extends Painter> l;
-
- if (painters == null)
- l = Collections.emptyList();
- else
- l = Arrays.asList(painters);
-
- setPainters(l);
- }
-
- /**
- * Adds a painter to the queue of painters
- * @param painter the painter that is added
- */
- public void addPainter(Painter painter)
- {
- Collection> old = new ArrayList>(getPainters());
-
- this.painters.add(painter);
-
- if (painter instanceof AbstractPainter)
- {
- ((AbstractPainter>) painter).addPropertyChangeListener(handler);
- }
-
- setDirty(true);
- firePropertyChange("painters", old, getPainters());
- }
-
- /**
- * Removes a painter from the queue of painters
- * @param painter the painter that is added
- */
- public void removePainter(Painter painter)
- {
- Collection> old = new ArrayList>(getPainters());
-
- this.painters.remove(painter);
-
- if (painter instanceof AbstractPainter)
- {
- ((AbstractPainter>) painter).removePropertyChangeListener(handler);
- }
-
- setDirty(true);
- firePropertyChange("painters", old, getPainters());
- }
-
-
- /**
- * Gets the array of painters used by this CompoundPainter
- * @return a defensive copy of the painters used by this CompoundPainter.
- * This will never be null.
- */
- public final Collection> getPainters()
- {
- return Collections.unmodifiableCollection(painters);
- }
-
- /**
- * Indicates if the clip produced by any painter is left set once it finishes painting.
- * Normally the clip will be reset between each painter. Setting clipPreserved to
- * true can be used to let one painter mask other painters that come after it.
- * @return if the clip should be preserved
- * @see #setClipPreserved(boolean)
- */
- public boolean isClipPreserved()
- {
- return clipPreserved;
- }
-
- /**
- * Sets if the clip should be preserved.
- * Normally the clip will be reset between each painter. Setting clipPreserved to
- * true can be used to let one painter mask other painters that come after it.
- *
- * @param shouldRestoreState new value of the clipPreserved property
- * @see #isClipPreserved()
- */
- public void setClipPreserved(boolean shouldRestoreState)
- {
- boolean oldShouldRestoreState = isClipPreserved();
- this.clipPreserved = shouldRestoreState;
- setDirty(true);
- firePropertyChange("clipPreserved", oldShouldRestoreState, shouldRestoreState);
- }
-
- /**
- * Gets the current transform applied to all painters in this CompoundPainter. May be null.
- * @return the current AffineTransform
- */
- public AffineTransform getTransform()
- {
- return transform;
- }
-
- /**
- * Set a transform to be applied to all painters contained in this CompoundPainter
- * @param transform a new AffineTransform
- */
- public void setTransform(AffineTransform transform)
- {
- AffineTransform old = getTransform();
- this.transform = transform;
- setDirty(true);
- firePropertyChange("transform", old, transform);
- }
-
- /**
- * Iterates over all child Painters and gives them a chance
- * to validate themselves. If any of the child painters are dirty, then
- * this CompoundPainter marks itself as dirty.
- */
- @Override
- protected void validate(T object)
- {
- boolean dirty = false;
- for (Painter p : painters)
- {
- if (p instanceof AbstractPainter)
- {
- AbstractPainter ap = (AbstractPainter) p;
- ap.validate(object);
- if (ap.isDirty())
- {
- dirty = true;
- break;
- }
- }
- }
- clearLocalCacheOnly = true;
- setDirty(dirty); //super will call clear cache
- clearLocalCacheOnly = false;
- }
-
- //indicates whether the local cache should be cleared only, as opposed to the
- //cache's of all of the children. This is needed to optimize the caching strategy
- //when, during validate, the CompoundPainter is marked as dirty
- private boolean clearLocalCacheOnly = false;
-
- /**
- * Used by {@link #isDirty()} to check if the child Painters
- * should be checked for their dirty flag as part of
- * processing.
- * Default value is: true
- * This should be set to false if the cacheable state
- * of the child Painters are different from each other. This
- * will allow the cacheable == true Painters to
- * keep their cached image during regular repaints. In this case,
- * client code should call {@link #clearCache()} manually when the cacheable
- * Painters should be updated.
- * @return the dirty check flag
- *
- *
- * @see #isDirty()
- */
- public boolean isCheckingDirtyChildPainters()
- {
- return checkForDirtyChildPainters;
- }
-
- /**
- * Set the flag used by {@link #isDirty()} to check if the
- * child Painters should be checked for their
- * dirty flag as part of processing.
- * @param b the dirty check flag
- *
- * @see #isCheckingDirtyChildPainters()
- * @see #isDirty()
- */
- public void setCheckingDirtyChildPainters(boolean b)
- {
- boolean old = isCheckingDirtyChildPainters();
- this.checkForDirtyChildPainters = b;
- firePropertyChange("checkingDirtyChildPainters", old, isCheckingDirtyChildPainters());
- }
-
- /**
- * This CompoundPainter is dirty if it, or (optionally)
- * any of its children, are dirty. If the super implementation returns
- * true, we return true. Otherwise, if
- * {@link #isCheckingDirtyChildPainters()} is true, we iterate
- * over all child Painters and query them to see
- * if they are dirty. If so, then true is returned.
- * Otherwise, we return false.
- *
- * @see #isCheckingDirtyChildPainters()
- */
- @Override
- protected boolean isDirty()
- {
- boolean dirty = super.isDirty();
- if (dirty)
- {
- return true;
- }
- else if (isCheckingDirtyChildPainters())
- {
- for (Painter p : painters)
- {
- if (p instanceof AbstractPainter)
- {
- AbstractPainter> ap = (AbstractPainter>) p;
- if (ap.isDirty())
- {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- @Override
- protected void setDirty(boolean d)
- {
- boolean old = super.isDirty();
- boolean ours = isDirty();
-
- super.setDirty(d);
-
- //must perform this check to ensure we do not double notify
- if (d != old && d == ours)
- {
- firePropertyChange("dirty", old, isDirty());
- }
- }
-
- /**
- * Clears the cache of this Painter, and all child
- * Painters. This is done to ensure that resources
- * are collected, even if clearCache is called by some framework
- * or other code that doesn't realize this is a CompoundPainter.
- *
- * Call #clearLocalCache if you only want to clear the cache of this
- * CompoundPainter
- */
- @Override
- public void clearCache()
- {
- if (!clearLocalCacheOnly)
- {
- for (Painter p : painters)
- {
- if (p instanceof AbstractPainter)
- {
- AbstractPainter> ap = (AbstractPainter>) p;
- ap.clearCache();
- }
- }
- }
- super.clearCache();
- }
-
- /**
- * Clears the cache of this painter only, and not of any of the children.
- */
- public void clearLocalCache()
- {
- super.clearCache();
- }
-
- @Override
- protected void doPaint(Graphics2D g, T component, int width, int height)
- {
- for (Painter p : getPainters())
- {
- Graphics2D temp = (Graphics2D) g.create();
-
- try
- {
- p.paint(temp, component, width, height);
- if (isClipPreserved())
- {
- g.setClip(temp.getClip());
- }
- }
- finally
- {
- temp.dispose();
- }
- }
- }
-
- @Override
- protected void configureGraphics(Graphics2D g)
- {
- //applies the transform
- AffineTransform tx = getTransform();
- if (tx != null)
- {
- g.setTransform(tx);
- }
- }
-
- @Override
- protected boolean shouldUseCache()
- {
- return super.shouldUseCache(); // || (painters != null && painters.length > 1);
- }
-}
+/*
+ * $Id: CompoundPainter.java 4147 2012-02-01 17:13:24Z kschaefe $
+ *
+ * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
+ * Santa Clara, California 95054, U.S.A. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jdesktop.swingx.painter;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+//import org.jdesktop.beans.JavaBean;
+
+/**
+ * A {@link Painter} implementation composed of an array of Painters.
+ * CompoundPainter provides a means for combining several individual
+ * Painters, or groups of them, into one logical unit. Each of the
+ * Painters are executed in order. BufferedImageOp filter effects can
+ * be applied to them together as a whole. The entire set of painting operations
+ * may be cached together.
+ *
+ *
+ *
+ * For example, if I want to create a CompoundPainter that started with a blue
+ * background, had pinstripes on it running at a 45 degree angle, and those
+ * pinstripes appeared to "fade in" from left to right, I would write the following:
+ *
+ * Color blue = new Color(0x417DDD);
+ * Color translucent = new Color(blue.getRed(), blue.getGreen(), blue.getBlue(), 0);
+ * panel.setBackground(blue);
+ * panel.setForeground(Color.LIGHT_GRAY);
+ * GradientPaint blueToTranslucent = new GradientPaint(
+ * new Point2D.Double(.4, 0),
+ * blue,
+ * new Point2D.Double(1, 0),
+ * translucent);
+ * MattePainter veil = new MattePainter(blueToTranslucent);
+ * veil.setPaintStretched(true);
+ * Painter pinstripes = new PinstripePainter(45);
+ * Painter backgroundPainter = new RectanglePainter(this.getBackground(), null);
+ * Painter p = new CompoundPainter(backgroundPainter, pinstripes, veil);
+ * panel.setBackgroundPainter(p);
+ *
+ *
+ * @author rbair
+ * @param an optional configuration parameter
+ */
+//@JavaBean
+public class CompoundPainter extends AbstractPainter
+{
+ private static class Handler implements PropertyChangeListener
+ {
+ private final WeakReference> ref;
+
+ public Handler(CompoundPainter> painter)
+ {
+ ref = new WeakReference>(painter);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void propertyChange(PropertyChangeEvent evt)
+ {
+ CompoundPainter> painter = ref.get();
+
+ if (painter == null)
+ {
+ AbstractPainter> src = (AbstractPainter>) evt.getSource();
+ src.removePropertyChangeListener(this);
+ }
+ else
+ {
+ String property = evt.getPropertyName();
+
+ if ("dirty".equals(property) && evt.getNewValue() == Boolean.FALSE)
+ {
+ return;
+ }
+
+ painter.setDirty(true);
+ }
+ }
+ }
+
+ private Handler handler;
+
+ private List> painters = new CopyOnWriteArrayList>();
+ private AffineTransform transform;
+ private boolean clipPreserved = false;
+
+ private boolean checkForDirtyChildPainters = true;
+
+ /** Creates a new instance of CompoundPainter */
+ public CompoundPainter()
+ {
+ this((Painter[]) null);
+ }
+
+ /**
+ * Convenience constructor for creating a CompoundPainter for an array
+ * of painters. A defensive copy of the given array is made, so that future
+ * modification to the array does not result in changes to the CompoundPainter.
+ *
+ * @param painters array of painters, which will be painted in order
+ */
+ public CompoundPainter(Painter... painters)
+ {
+ handler = new Handler(this);
+
+ setPainters(painters);
+ }
+
+ /**
+ * Convenience constructor for creating a CompoundPainter for a list
+ * of painters. A defensive copy of the given array is made, so that future
+ * modification to the list does not result in changes to the CompoundPainter.
+ *
+ * @param painters array of painters, which will be painted in order
+ */
+ public CompoundPainter(List extends Painter> painters)
+ {
+ handler = new Handler(this);
+
+ setPainters(painters);
+ }
+ /**
+ * Sets the array of Painters to use. These painters will be executed in
+ * order. A null value will be treated as an empty array. To prevent unexpected
+ * behavior all values in provided array are copied to internally held array.
+ * Any changes to the original array will not be reflected.
+ *
+ * @param painters array of painters, which will be painted in order
+ */
+ public void setPainters(List extends Painter> painters)
+ {
+ Collection> old = new ArrayList>(getPainters());
+
+ for (Painter p : old)
+ {
+ if (p instanceof AbstractPainter)
+ {
+ ((AbstractPainter>) p).removePropertyChangeListener(handler);
+ }
+ }
+
+ this.painters.clear();
+ this.painters.addAll(painters);
+
+ for (Painter p : this.painters)
+ {
+ if (p instanceof AbstractPainter)
+ {
+ ((AbstractPainter>) p).addPropertyChangeListener(handler);
+ }
+ }
+
+ setDirty(true);
+ firePropertyChange("painters", old, getPainters());
+ }
+
+ /**
+ * Sets the array of Painters to use. These painters will be executed in
+ * order. A null value will be treated as an empty array. To prevent unexpected
+ * behavior all values in provided array are copied to internally held array.
+ * Any changes to the original array will not be reflected.
+ *
+ * @param painters array of painters, which will be painted in order
+ */
+ public void setPainters(Painter... painters)
+ {
+ List extends Painter> l;
+
+ if (painters == null)
+ l = Collections.emptyList();
+ else
+ l = Arrays.asList(painters);
+
+ setPainters(l);
+ }
+
+ /**
+ * Adds a painter to the queue of painters
+ * @param painter the painter that is added
+ */
+ public void addPainter(Painter painter)
+ {
+ Collection> old = new ArrayList>(getPainters());
+
+ this.painters.add(painter);
+
+ if (painter instanceof AbstractPainter)
+ {
+ ((AbstractPainter>) painter).addPropertyChangeListener(handler);
+ }
+
+ setDirty(true);
+ firePropertyChange("painters", old, getPainters());
+ }
+
+ /**
+ * Removes a painter from the queue of painters
+ * @param painter the painter that is added
+ */
+ public void removePainter(Painter painter)
+ {
+ Collection> old = new ArrayList>(getPainters());
+
+ this.painters.remove(painter);
+
+ if (painter instanceof AbstractPainter)
+ {
+ ((AbstractPainter>) painter).removePropertyChangeListener(handler);
+ }
+
+ setDirty(true);
+ firePropertyChange("painters", old, getPainters());
+ }
+
+
+ /**
+ * Gets the array of painters used by this CompoundPainter
+ * @return a defensive copy of the painters used by this CompoundPainter.
+ * This will never be null.
+ */
+ public final Collection> getPainters()
+ {
+ return Collections.unmodifiableCollection(painters);
+ }
+
+ /**
+ * Indicates if the clip produced by any painter is left set once it finishes painting.
+ * Normally the clip will be reset between each painter. Setting clipPreserved to
+ * true can be used to let one painter mask other painters that come after it.
+ * @return if the clip should be preserved
+ * @see #setClipPreserved(boolean)
+ */
+ public boolean isClipPreserved()
+ {
+ return clipPreserved;
+ }
+
+ /**
+ * Sets if the clip should be preserved.
+ * Normally the clip will be reset between each painter. Setting clipPreserved to
+ * true can be used to let one painter mask other painters that come after it.
+ *
+ * @param shouldRestoreState new value of the clipPreserved property
+ * @see #isClipPreserved()
+ */
+ public void setClipPreserved(boolean shouldRestoreState)
+ {
+ boolean oldShouldRestoreState = isClipPreserved();
+ this.clipPreserved = shouldRestoreState;
+ setDirty(true);
+ firePropertyChange("clipPreserved", oldShouldRestoreState, shouldRestoreState);
+ }
+
+ /**
+ * Gets the current transform applied to all painters in this CompoundPainter. May be null.
+ * @return the current AffineTransform
+ */
+ public AffineTransform getTransform()
+ {
+ return transform;
+ }
+
+ /**
+ * Set a transform to be applied to all painters contained in this CompoundPainter
+ * @param transform a new AffineTransform
+ */
+ public void setTransform(AffineTransform transform)
+ {
+ AffineTransform old = getTransform();
+ this.transform = transform;
+ setDirty(true);
+ firePropertyChange("transform", old, transform);
+ }
+
+ /**
+ * Iterates over all child Painters and gives them a chance
+ * to validate themselves. If any of the child painters are dirty, then
+ * this CompoundPainter marks itself as dirty.
+ */
+ @Override
+ protected void validate(T object)
+ {
+ boolean dirty = false;
+ for (Painter p : painters)
+ {
+ if (p instanceof AbstractPainter)
+ {
+ AbstractPainter ap = (AbstractPainter) p;
+ ap.validate(object);
+ if (ap.isDirty())
+ {
+ dirty = true;
+ break;
+ }
+ }
+ }
+ clearLocalCacheOnly = true;
+ setDirty(dirty); //super will call clear cache
+ clearLocalCacheOnly = false;
+ }
+
+ //indicates whether the local cache should be cleared only, as opposed to the
+ //cache's of all of the children. This is needed to optimize the caching strategy
+ //when, during validate, the CompoundPainter is marked as dirty
+ private boolean clearLocalCacheOnly = false;
+
+ /**
+ * Used by {@link #isDirty()} to check if the child Painters
+ * should be checked for their dirty flag as part of
+ * processing.
+ * Default value is: true
+ * This should be set to false if the cacheable state
+ * of the child Painters are different from each other. This
+ * will allow the cacheable == true Painters to
+ * keep their cached image during regular repaints. In this case,
+ * client code should call {@link #clearCache()} manually when the cacheable
+ * Painters should be updated.
+ * @return the dirty check flag
+ *
+ *
+ * @see #isDirty()
+ */
+ public boolean isCheckingDirtyChildPainters()
+ {
+ return checkForDirtyChildPainters;
+ }
+
+ /**
+ * Set the flag used by {@link #isDirty()} to check if the
+ * child Painters should be checked for their
+ * dirty flag as part of processing.
+ * @param b the dirty check flag
+ *
+ * @see #isCheckingDirtyChildPainters()
+ * @see #isDirty()
+ */
+ public void setCheckingDirtyChildPainters(boolean b)
+ {
+ boolean old = isCheckingDirtyChildPainters();
+ this.checkForDirtyChildPainters = b;
+ firePropertyChange("checkingDirtyChildPainters", old, isCheckingDirtyChildPainters());
+ }
+
+ /**
+ * This CompoundPainter is dirty if it, or (optionally)
+ * any of its children, are dirty. If the super implementation returns
+ * true, we return true. Otherwise, if
+ * {@link #isCheckingDirtyChildPainters()} is true, we iterate
+ * over all child Painters and query them to see
+ * if they are dirty. If so, then true is returned.
+ * Otherwise, we return false.
+ *
+ * @see #isCheckingDirtyChildPainters()
+ */
+ @Override
+ protected boolean isDirty()
+ {
+ boolean dirty = super.isDirty();
+ if (dirty)
+ {
+ return true;
+ }
+ else if (isCheckingDirtyChildPainters())
+ {
+ for (Painter p : painters)
+ {
+ if (p instanceof AbstractPainter)
+ {
+ AbstractPainter> ap = (AbstractPainter>) p;
+ if (ap.isDirty())
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected void setDirty(boolean d)
+ {
+ boolean old = super.isDirty();
+ boolean ours = isDirty();
+
+ super.setDirty(d);
+
+ //must perform this check to ensure we do not double notify
+ if (d != old && d == ours)
+ {
+ firePropertyChange("dirty", old, isDirty());
+ }
+ }
+
+ /**
+ * Clears the cache of this Painter, and all child
+ * Painters. This is done to ensure that resources
+ * are collected, even if clearCache is called by some framework
+ * or other code that doesn't realize this is a CompoundPainter.
+ *
+ * Call #clearLocalCache if you only want to clear the cache of this
+ * CompoundPainter
+ */
+ @Override
+ public void clearCache()
+ {
+ if (!clearLocalCacheOnly)
+ {
+ for (Painter p : painters)
+ {
+ if (p instanceof AbstractPainter)
+ {
+ AbstractPainter> ap = (AbstractPainter>) p;
+ ap.clearCache();
+ }
+ }
+ }
+ super.clearCache();
+ }
+
+ /**
+ * Clears the cache of this painter only, and not of any of the children.
+ */
+ public void clearLocalCache()
+ {
+ super.clearCache();
+ }
+
+ @Override
+ protected void doPaint(Graphics2D g, T component, int width, int height)
+ {
+ for (Painter p : getPainters())
+ {
+ Graphics2D temp = (Graphics2D) g.create();
+
+ try
+ {
+ p.paint(temp, component, width, height);
+ if (isClipPreserved())
+ {
+ g.setClip(temp.getClip());
+ }
+ }
+ finally
+ {
+ temp.dispose();
+ }
+ }
+ }
+
+ @Override
+ protected void configureGraphics(Graphics2D g)
+ {
+ //applies the transform
+ AffineTransform tx = getTransform();
+ if (tx != null)
+ {
+ g.setTransform(tx);
+ }
+ }
+
+ @Override
+ protected boolean shouldUseCache()
+ {
+ return super.shouldUseCache(); // || (painters != null && painters.length > 1);
+ }
+}
diff --git a/src/org/jdesktop/swingx/painter/Painter.java b/src/main/java/org/jdesktop/swingx/painter/Painter.java
similarity index 100%
rename from src/org/jdesktop/swingx/painter/Painter.java
rename to src/main/java/org/jdesktop/swingx/painter/Painter.java
diff --git a/src/org/jdesktop/swingx/util/GraphicsUtilities.java b/src/main/java/org/jdesktop/swingx/util/GraphicsUtilities.java
similarity index 100%
rename from src/org/jdesktop/swingx/util/GraphicsUtilities.java
rename to src/main/java/org/jdesktop/swingx/util/GraphicsUtilities.java
diff --git a/src/org/jdesktop/swingx/util/ShapeUtils.java b/src/main/java/org/jdesktop/swingx/util/ShapeUtils.java
similarity index 100%
rename from src/org/jdesktop/swingx/util/ShapeUtils.java
rename to src/main/java/org/jdesktop/swingx/util/ShapeUtils.java
diff --git a/src/org/jma/encoder/audio/IAudioEncoder.java b/src/main/java/org/jma/encoder/audio/IAudioEncoder.java
similarity index 100%
rename from src/org/jma/encoder/audio/IAudioEncoder.java
rename to src/main/java/org/jma/encoder/audio/IAudioEncoder.java
diff --git a/src/playlist/PlaylistManager.java b/src/main/java/playlist/PlaylistManager.java
similarity index 100%
rename from src/playlist/PlaylistManager.java
rename to src/main/java/playlist/PlaylistManager.java
diff --git a/src/playlist/PlaylistV2.java b/src/main/java/playlist/PlaylistV2.java
similarity index 100%
rename from src/playlist/PlaylistV2.java
rename to src/main/java/playlist/PlaylistV2.java
diff --git a/src/playlist/version1/AliasDirectory.java b/src/main/java/playlist/version1/AliasDirectory.java
similarity index 100%
rename from src/playlist/version1/AliasDirectory.java
rename to src/main/java/playlist/version1/AliasDirectory.java
diff --git a/src/playlist/version1/AliasListOld.java b/src/main/java/playlist/version1/AliasListOld.java
similarity index 100%
rename from src/playlist/version1/AliasListOld.java
rename to src/main/java/playlist/version1/AliasListOld.java
diff --git a/src/playlist/version1/ChannelMapList.java b/src/main/java/playlist/version1/ChannelMapList.java
similarity index 100%
rename from src/playlist/version1/ChannelMapList.java
rename to src/main/java/playlist/version1/ChannelMapList.java
diff --git a/src/playlist/version1/Group.java b/src/main/java/playlist/version1/Group.java
similarity index 100%
rename from src/playlist/version1/Group.java
rename to src/main/java/playlist/version1/Group.java
diff --git a/src/playlist/version1/PlaylistConverterV1ToV2.java b/src/main/java/playlist/version1/PlaylistConverterV1ToV2.java
similarity index 100%
rename from src/playlist/version1/PlaylistConverterV1ToV2.java
rename to src/main/java/playlist/version1/PlaylistConverterV1ToV2.java
diff --git a/src/playlist/version1/PlaylistV1.java b/src/main/java/playlist/version1/PlaylistV1.java
similarity index 100%
rename from src/playlist/version1/PlaylistV1.java
rename to src/main/java/playlist/version1/PlaylistV1.java
diff --git a/src/playlist/version1/Site.java b/src/main/java/playlist/version1/Site.java
similarity index 100%
rename from src/playlist/version1/Site.java
rename to src/main/java/playlist/version1/Site.java
diff --git a/src/playlist/version1/System.java b/src/main/java/playlist/version1/System.java
similarity index 100%
rename from src/playlist/version1/System.java
rename to src/main/java/playlist/version1/System.java
diff --git a/src/playlist/version1/SystemList.java b/src/main/java/playlist/version1/SystemList.java
similarity index 100%
rename from src/playlist/version1/SystemList.java
rename to src/main/java/playlist/version1/SystemList.java
diff --git a/src/properties/SystemProperties.java b/src/main/java/properties/SystemProperties.java
similarity index 100%
rename from src/properties/SystemProperties.java
rename to src/main/java/properties/SystemProperties.java
diff --git a/src/record/AudioRecorder.java b/src/main/java/record/AudioRecorder.java
similarity index 100%
rename from src/record/AudioRecorder.java
rename to src/main/java/record/AudioRecorder.java
diff --git a/src/record/RecordConfigurationEditor.java b/src/main/java/record/RecordConfigurationEditor.java
similarity index 100%
rename from src/record/RecordConfigurationEditor.java
rename to src/main/java/record/RecordConfigurationEditor.java
diff --git a/src/record/Recorder.java b/src/main/java/record/Recorder.java
similarity index 100%
rename from src/record/Recorder.java
rename to src/main/java/record/Recorder.java
diff --git a/src/record/RecorderManager.java b/src/main/java/record/RecorderManager.java
similarity index 100%
rename from src/record/RecorderManager.java
rename to src/main/java/record/RecorderManager.java
diff --git a/src/record/RecorderType.java b/src/main/java/record/RecorderType.java
similarity index 100%
rename from src/record/RecorderType.java
rename to src/main/java/record/RecorderType.java
diff --git a/src/record/config/RecordConfiguration.java b/src/main/java/record/config/RecordConfiguration.java
similarity index 100%
rename from src/record/config/RecordConfiguration.java
rename to src/main/java/record/config/RecordConfiguration.java
diff --git a/src/record/mp3/MP3Recorder.java b/src/main/java/record/mp3/MP3Recorder.java
similarity index 100%
rename from src/record/mp3/MP3Recorder.java
rename to src/main/java/record/mp3/MP3Recorder.java
diff --git a/src/record/wave/AudioPacketMonoWaveReader.java b/src/main/java/record/wave/AudioPacketMonoWaveReader.java
similarity index 100%
rename from src/record/wave/AudioPacketMonoWaveReader.java
rename to src/main/java/record/wave/AudioPacketMonoWaveReader.java
diff --git a/src/record/wave/ComplexBufferWaveRecorder.java b/src/main/java/record/wave/ComplexBufferWaveRecorder.java
similarity index 100%
rename from src/record/wave/ComplexBufferWaveRecorder.java
rename to src/main/java/record/wave/ComplexBufferWaveRecorder.java
diff --git a/src/record/wave/MonoWaveReader.java b/src/main/java/record/wave/MonoWaveReader.java
similarity index 100%
rename from src/record/wave/MonoWaveReader.java
rename to src/main/java/record/wave/MonoWaveReader.java
diff --git a/src/record/wave/RealBufferWaveRecorder.java b/src/main/java/record/wave/RealBufferWaveRecorder.java
similarity index 100%
rename from src/record/wave/RealBufferWaveRecorder.java
rename to src/main/java/record/wave/RealBufferWaveRecorder.java
diff --git a/src/record/wave/WaveUtils.java b/src/main/java/record/wave/WaveUtils.java
similarity index 100%
rename from src/record/wave/WaveUtils.java
rename to src/main/java/record/wave/WaveUtils.java
diff --git a/src/record/wave/WaveWriter.java b/src/main/java/record/wave/WaveWriter.java
similarity index 100%
rename from src/record/wave/WaveWriter.java
rename to src/main/java/record/wave/WaveWriter.java
diff --git a/src/sample/Broadcaster.java b/src/main/java/sample/Broadcaster.java
similarity index 100%
rename from src/sample/Broadcaster.java
rename to src/main/java/sample/Broadcaster.java
diff --git a/src/sample/Buffer.java b/src/main/java/sample/Buffer.java
similarity index 100%
rename from src/sample/Buffer.java
rename to src/main/java/sample/Buffer.java
diff --git a/src/sample/BufferOverflow.java b/src/main/java/sample/BufferOverflow.java
similarity index 100%
rename from src/sample/BufferOverflow.java
rename to src/main/java/sample/BufferOverflow.java
diff --git a/src/sample/ConversionUtils.java b/src/main/java/sample/ConversionUtils.java
similarity index 100%
rename from src/sample/ConversionUtils.java
rename to src/main/java/sample/ConversionUtils.java
diff --git a/src/sample/Listener.java b/src/main/java/sample/Listener.java
similarity index 100%
rename from src/sample/Listener.java
rename to src/main/java/sample/Listener.java
diff --git a/src/sample/OverflowableTransferQueue.java b/src/main/java/sample/OverflowableTransferQueue.java
similarity index 100%
rename from src/sample/OverflowableTransferQueue.java
rename to src/main/java/sample/OverflowableTransferQueue.java
diff --git a/src/sample/Provider.java b/src/main/java/sample/Provider.java
similarity index 100%
rename from src/sample/Provider.java
rename to src/main/java/sample/Provider.java
diff --git a/src/sample/SampleType.java b/src/main/java/sample/SampleType.java
similarity index 100%
rename from src/sample/SampleType.java
rename to src/main/java/sample/SampleType.java
diff --git a/src/sample/adapter/ByteSampleAdapter.java b/src/main/java/sample/adapter/ByteSampleAdapter.java
similarity index 100%
rename from src/sample/adapter/ByteSampleAdapter.java
rename to src/main/java/sample/adapter/ByteSampleAdapter.java
diff --git a/src/sample/adapter/ChannelShortAdapter.java b/src/main/java/sample/adapter/ChannelShortAdapter.java
similarity index 100%
rename from src/sample/adapter/ChannelShortAdapter.java
rename to src/main/java/sample/adapter/ChannelShortAdapter.java
diff --git a/src/sample/adapter/ComplexToFloatSampleConverter.java b/src/main/java/sample/adapter/ComplexToFloatSampleConverter.java
similarity index 100%
rename from src/sample/adapter/ComplexToFloatSampleConverter.java
rename to src/main/java/sample/adapter/ComplexToFloatSampleConverter.java
diff --git a/src/sample/adapter/FloatArrayToComplexAdapter.java b/src/main/java/sample/adapter/FloatArrayToComplexAdapter.java
similarity index 100%
rename from src/sample/adapter/FloatArrayToComplexAdapter.java
rename to src/main/java/sample/adapter/FloatArrayToComplexAdapter.java
diff --git a/src/sample/adapter/ISampleAdapter.java b/src/main/java/sample/adapter/ISampleAdapter.java
similarity index 100%
rename from src/sample/adapter/ISampleAdapter.java
rename to src/main/java/sample/adapter/ISampleAdapter.java
diff --git a/src/sample/adapter/ShortAdapter.java b/src/main/java/sample/adapter/ShortAdapter.java
similarity index 100%
rename from src/sample/adapter/ShortAdapter.java
rename to src/main/java/sample/adapter/ShortAdapter.java
diff --git a/src/sample/adapter/ShortToFloatMap.java b/src/main/java/sample/adapter/ShortToFloatMap.java
similarity index 100%
rename from src/sample/adapter/ShortToFloatMap.java
rename to src/main/java/sample/adapter/ShortToFloatMap.java
diff --git a/src/sample/adapter/Test.java b/src/main/java/sample/adapter/Test.java
similarity index 100%
rename from src/sample/adapter/Test.java
rename to src/main/java/sample/adapter/Test.java
diff --git a/src/sample/complex/Complex.java b/src/main/java/sample/complex/Complex.java
similarity index 100%
rename from src/sample/complex/Complex.java
rename to src/main/java/sample/complex/Complex.java
diff --git a/src/sample/complex/ComplexBuffer.java b/src/main/java/sample/complex/ComplexBuffer.java
similarity index 100%
rename from src/sample/complex/ComplexBuffer.java
rename to src/main/java/sample/complex/ComplexBuffer.java
diff --git a/src/sample/complex/ComplexBufferToStreamConverter.java b/src/main/java/sample/complex/ComplexBufferToStreamConverter.java
similarity index 100%
rename from src/sample/complex/ComplexBufferToStreamConverter.java
rename to src/main/java/sample/complex/ComplexBufferToStreamConverter.java
diff --git a/src/sample/complex/ComplexSampleAssembler.java b/src/main/java/sample/complex/ComplexSampleAssembler.java
similarity index 100%
rename from src/sample/complex/ComplexSampleAssembler.java
rename to src/main/java/sample/complex/ComplexSampleAssembler.java
diff --git a/src/sample/complex/ComplexSampleBroadcaster.java b/src/main/java/sample/complex/ComplexSampleBroadcaster.java
similarity index 100%
rename from src/sample/complex/ComplexSampleBroadcaster.java
rename to src/main/java/sample/complex/ComplexSampleBroadcaster.java
diff --git a/src/sample/complex/ComplexSampleListListener.java b/src/main/java/sample/complex/ComplexSampleListListener.java
similarity index 100%
rename from src/sample/complex/ComplexSampleListListener.java
rename to src/main/java/sample/complex/ComplexSampleListListener.java
diff --git a/src/sample/complex/ComplexSampleListener.java b/src/main/java/sample/complex/ComplexSampleListener.java
similarity index 100%
rename from src/sample/complex/ComplexSampleListener.java
rename to src/main/java/sample/complex/ComplexSampleListener.java
diff --git a/src/sample/complex/ComplexSampleUtils.java b/src/main/java/sample/complex/ComplexSampleUtils.java
similarity index 100%
rename from src/sample/complex/ComplexSampleUtils.java
rename to src/main/java/sample/complex/ComplexSampleUtils.java
diff --git a/src/sample/complex/ComplexToComplexBufferAssembler.java b/src/main/java/sample/complex/ComplexToComplexBufferAssembler.java
similarity index 100%
rename from src/sample/complex/ComplexToComplexBufferAssembler.java
rename to src/main/java/sample/complex/ComplexToComplexBufferAssembler.java
diff --git a/src/sample/complex/IComplexBufferListener.java b/src/main/java/sample/complex/IComplexBufferListener.java
similarity index 100%
rename from src/sample/complex/IComplexBufferListener.java
rename to src/main/java/sample/complex/IComplexBufferListener.java
diff --git a/src/sample/complex/RateCounter_CB.java b/src/main/java/sample/complex/RateCounter_CB.java
similarity index 100%
rename from src/sample/complex/RateCounter_CB.java
rename to src/main/java/sample/complex/RateCounter_CB.java
diff --git a/src/sample/complex/ThreadKiller.java b/src/main/java/sample/complex/ThreadKiller.java
similarity index 100%
rename from src/sample/complex/ThreadKiller.java
rename to src/main/java/sample/complex/ThreadKiller.java
diff --git a/src/sample/decimator/ComplexDecimator.java b/src/main/java/sample/decimator/ComplexDecimator.java
similarity index 100%
rename from src/sample/decimator/ComplexDecimator.java
rename to src/main/java/sample/decimator/ComplexDecimator.java
diff --git a/src/sample/decimator/Decimator.java b/src/main/java/sample/decimator/Decimator.java
similarity index 100%
rename from src/sample/decimator/Decimator.java
rename to src/main/java/sample/decimator/Decimator.java
diff --git a/src/sample/decimator/RealDecimator.java b/src/main/java/sample/decimator/RealDecimator.java
similarity index 100%
rename from src/sample/decimator/RealDecimator.java
rename to src/main/java/sample/decimator/RealDecimator.java
diff --git a/src/sample/real/IFilteredRealBufferListener.java b/src/main/java/sample/real/IFilteredRealBufferListener.java
similarity index 100%
rename from src/sample/real/IFilteredRealBufferListener.java
rename to src/main/java/sample/real/IFilteredRealBufferListener.java
diff --git a/src/sample/real/IFilteredRealBufferProvider.java b/src/main/java/sample/real/IFilteredRealBufferProvider.java
similarity index 100%
rename from src/sample/real/IFilteredRealBufferProvider.java
rename to src/main/java/sample/real/IFilteredRealBufferProvider.java
diff --git a/src/sample/real/IOverflowListener.java b/src/main/java/sample/real/IOverflowListener.java
similarity index 100%
rename from src/sample/real/IOverflowListener.java
rename to src/main/java/sample/real/IOverflowListener.java
diff --git a/src/sample/real/IUnFilteredRealBufferListener.java b/src/main/java/sample/real/IUnFilteredRealBufferListener.java
similarity index 100%
rename from src/sample/real/IUnFilteredRealBufferListener.java
rename to src/main/java/sample/real/IUnFilteredRealBufferListener.java
diff --git a/src/sample/real/IUnFilteredRealBufferProvider.java b/src/main/java/sample/real/IUnFilteredRealBufferProvider.java
similarity index 100%
rename from src/sample/real/IUnFilteredRealBufferProvider.java
rename to src/main/java/sample/real/IUnFilteredRealBufferProvider.java
diff --git a/src/sample/real/RateCounter_RB.java b/src/main/java/sample/real/RateCounter_RB.java
similarity index 100%
rename from src/sample/real/RateCounter_RB.java
rename to src/main/java/sample/real/RateCounter_RB.java
diff --git a/src/sample/real/RealBuffer.java b/src/main/java/sample/real/RealBuffer.java
similarity index 100%
rename from src/sample/real/RealBuffer.java
rename to src/main/java/sample/real/RealBuffer.java
diff --git a/src/sample/real/RealBufferToStreamConverter.java b/src/main/java/sample/real/RealBufferToStreamConverter.java
similarity index 100%
rename from src/sample/real/RealBufferToStreamConverter.java
rename to src/main/java/sample/real/RealBufferToStreamConverter.java
diff --git a/src/sample/real/RealSampleBroadcaster.java b/src/main/java/sample/real/RealSampleBroadcaster.java
similarity index 100%
rename from src/sample/real/RealSampleBroadcaster.java
rename to src/main/java/sample/real/RealSampleBroadcaster.java
diff --git a/src/sample/real/RealSampleListener.java b/src/main/java/sample/real/RealSampleListener.java
similarity index 100%
rename from src/sample/real/RealSampleListener.java
rename to src/main/java/sample/real/RealSampleListener.java
diff --git a/src/sample/real/RealSampleProvider.java b/src/main/java/sample/real/RealSampleProvider.java
similarity index 100%
rename from src/sample/real/RealSampleProvider.java
rename to src/main/java/sample/real/RealSampleProvider.java
diff --git a/src/sample/real/RealToRealBufferAssembler.java b/src/main/java/sample/real/RealToRealBufferAssembler.java
similarity index 100%
rename from src/sample/real/RealToRealBufferAssembler.java
rename to src/main/java/sample/real/RealToRealBufferAssembler.java
diff --git a/src/settings/ColorSetting.java b/src/main/java/settings/ColorSetting.java
similarity index 100%
rename from src/settings/ColorSetting.java
rename to src/main/java/settings/ColorSetting.java
diff --git a/src/settings/ColorSettingMenuItem.java b/src/main/java/settings/ColorSettingMenuItem.java
similarity index 100%
rename from src/settings/ColorSettingMenuItem.java
rename to src/main/java/settings/ColorSettingMenuItem.java
diff --git a/src/settings/ColorSettingResetAllMenuItem.java b/src/main/java/settings/ColorSettingResetAllMenuItem.java
similarity index 100%
rename from src/settings/ColorSettingResetAllMenuItem.java
rename to src/main/java/settings/ColorSettingResetAllMenuItem.java
diff --git a/src/settings/ColorSettingResetMenuItem.java b/src/main/java/settings/ColorSettingResetMenuItem.java
similarity index 100%
rename from src/settings/ColorSettingResetMenuItem.java
rename to src/main/java/settings/ColorSettingResetMenuItem.java
diff --git a/src/settings/FileSetting.java b/src/main/java/settings/FileSetting.java
similarity index 100%
rename from src/settings/FileSetting.java
rename to src/main/java/settings/FileSetting.java
diff --git a/src/settings/MapViewSetting.java b/src/main/java/settings/MapViewSetting.java
similarity index 100%
rename from src/settings/MapViewSetting.java
rename to src/main/java/settings/MapViewSetting.java
diff --git a/src/settings/Setting.java b/src/main/java/settings/Setting.java
similarity index 100%
rename from src/settings/Setting.java
rename to src/main/java/settings/Setting.java
diff --git a/src/settings/SettingChangeListener.java b/src/main/java/settings/SettingChangeListener.java
similarity index 100%
rename from src/settings/SettingChangeListener.java
rename to src/main/java/settings/SettingChangeListener.java
diff --git a/src/settings/Settings.java b/src/main/java/settings/Settings.java
similarity index 100%
rename from src/settings/Settings.java
rename to src/main/java/settings/Settings.java
diff --git a/src/settings/SettingsManager.java b/src/main/java/settings/SettingsManager.java
similarity index 100%
rename from src/settings/SettingsManager.java
rename to src/main/java/settings/SettingsManager.java
diff --git a/src/source/BufferReceiver.java b/src/main/java/source/BufferReceiver.java
similarity index 100%
rename from src/source/BufferReceiver.java
rename to src/main/java/source/BufferReceiver.java
diff --git a/src/source/ComplexSource.java b/src/main/java/source/ComplexSource.java
similarity index 100%
rename from src/source/ComplexSource.java
rename to src/main/java/source/ComplexSource.java
diff --git a/src/source/IControllableFileSource.java b/src/main/java/source/IControllableFileSource.java
similarity index 100%
rename from src/source/IControllableFileSource.java
rename to src/main/java/source/IControllableFileSource.java
diff --git a/src/source/IFrameLocationListener.java b/src/main/java/source/IFrameLocationListener.java
similarity index 100%
rename from src/source/IFrameLocationListener.java
rename to src/main/java/source/IFrameLocationListener.java
diff --git a/src/source/InvalidFrequencyException.java b/src/main/java/source/InvalidFrequencyException.java
similarity index 100%
rename from src/source/InvalidFrequencyException.java
rename to src/main/java/source/InvalidFrequencyException.java
diff --git a/src/source/RealSource.java b/src/main/java/source/RealSource.java
similarity index 100%
rename from src/source/RealSource.java
rename to src/main/java/source/RealSource.java
diff --git a/src/source/Source.java b/src/main/java/source/Source.java
similarity index 100%
rename from src/source/Source.java
rename to src/main/java/source/Source.java
diff --git a/src/source/SourceConfigurationEditor.java b/src/main/java/source/SourceConfigurationEditor.java
similarity index 100%
rename from src/source/SourceConfigurationEditor.java
rename to src/main/java/source/SourceConfigurationEditor.java
diff --git a/src/source/SourceException.java b/src/main/java/source/SourceException.java
similarity index 100%
rename from src/source/SourceException.java
rename to src/main/java/source/SourceException.java
diff --git a/src/source/SourceManager.java b/src/main/java/source/SourceManager.java
similarity index 100%
rename from src/source/SourceManager.java
rename to src/main/java/source/SourceManager.java
diff --git a/src/source/SourceType.java b/src/main/java/source/SourceType.java
similarity index 100%
rename from src/source/SourceType.java
rename to src/main/java/source/SourceType.java
diff --git a/src/source/config/SourceConfigFactory.java b/src/main/java/source/config/SourceConfigFactory.java
similarity index 100%
rename from src/source/config/SourceConfigFactory.java
rename to src/main/java/source/config/SourceConfigFactory.java
diff --git a/src/source/config/SourceConfigMixer.java b/src/main/java/source/config/SourceConfigMixer.java
similarity index 100%
rename from src/source/config/SourceConfigMixer.java
rename to src/main/java/source/config/SourceConfigMixer.java
diff --git a/src/source/config/SourceConfigNone.java b/src/main/java/source/config/SourceConfigNone.java
similarity index 100%
rename from src/source/config/SourceConfigNone.java
rename to src/main/java/source/config/SourceConfigNone.java
diff --git a/src/source/config/SourceConfigRecording.java b/src/main/java/source/config/SourceConfigRecording.java
similarity index 100%
rename from src/source/config/SourceConfigRecording.java
rename to src/main/java/source/config/SourceConfigRecording.java
diff --git a/src/source/config/SourceConfigTuner.java b/src/main/java/source/config/SourceConfigTuner.java
similarity index 100%
rename from src/source/config/SourceConfigTuner.java
rename to src/main/java/source/config/SourceConfigTuner.java
diff --git a/src/source/config/SourceConfiguration.java b/src/main/java/source/config/SourceConfiguration.java
similarity index 100%
rename from src/source/config/SourceConfiguration.java
rename to src/main/java/source/config/SourceConfiguration.java
diff --git a/src/source/mixer/ComplexMixer.java b/src/main/java/source/mixer/ComplexMixer.java
similarity index 100%
rename from src/source/mixer/ComplexMixer.java
rename to src/main/java/source/mixer/ComplexMixer.java
diff --git a/src/source/mixer/MixerChannel.java b/src/main/java/source/mixer/MixerChannel.java
similarity index 100%
rename from src/source/mixer/MixerChannel.java
rename to src/main/java/source/mixer/MixerChannel.java
diff --git a/src/source/mixer/MixerChannelConfiguration.java b/src/main/java/source/mixer/MixerChannelConfiguration.java
similarity index 100%
rename from src/source/mixer/MixerChannelConfiguration.java
rename to src/main/java/source/mixer/MixerChannelConfiguration.java
diff --git a/src/source/mixer/MixerManager.java b/src/main/java/source/mixer/MixerManager.java
similarity index 100%
rename from src/source/mixer/MixerManager.java
rename to src/main/java/source/mixer/MixerManager.java
diff --git a/src/source/mixer/MixerSourceEditor.java b/src/main/java/source/mixer/MixerSourceEditor.java
similarity index 100%
rename from src/source/mixer/MixerSourceEditor.java
rename to src/main/java/source/mixer/MixerSourceEditor.java
diff --git a/src/source/mixer/RealMixerSource.java b/src/main/java/source/mixer/RealMixerSource.java
similarity index 100%
rename from src/source/mixer/RealMixerSource.java
rename to src/main/java/source/mixer/RealMixerSource.java
diff --git a/src/source/mixer/SystemMixerDevices.java b/src/main/java/source/mixer/SystemMixerDevices.java
similarity index 100%
rename from src/source/mixer/SystemMixerDevices.java
rename to src/main/java/source/mixer/SystemMixerDevices.java
diff --git a/src/source/recording/Recording.java b/src/main/java/source/recording/Recording.java
similarity index 100%
rename from src/source/recording/Recording.java
rename to src/main/java/source/recording/Recording.java
diff --git a/src/source/recording/RecordingConfiguration.java b/src/main/java/source/recording/RecordingConfiguration.java
similarity index 100%
rename from src/source/recording/RecordingConfiguration.java
rename to src/main/java/source/recording/RecordingConfiguration.java
diff --git a/src/source/recording/RecordingSourceManager.java b/src/main/java/source/recording/RecordingSourceManager.java
similarity index 100%
rename from src/source/recording/RecordingSourceManager.java
rename to src/main/java/source/recording/RecordingSourceManager.java
diff --git a/src/source/tuner/ITunerChannelProvider.java b/src/main/java/source/tuner/ITunerChannelProvider.java
similarity index 100%
rename from src/source/tuner/ITunerChannelProvider.java
rename to src/main/java/source/tuner/ITunerChannelProvider.java
diff --git a/src/source/tuner/LibUSBTransferProcessor.java b/src/main/java/source/tuner/LibUSBTransferProcessor.java
similarity index 100%
rename from src/source/tuner/LibUSBTransferProcessor.java
rename to src/main/java/source/tuner/LibUSBTransferProcessor.java
diff --git a/src/source/tuner/MixerTuner.java b/src/main/java/source/tuner/MixerTuner.java
similarity index 100%
rename from src/source/tuner/MixerTuner.java
rename to src/main/java/source/tuner/MixerTuner.java
diff --git a/src/source/tuner/MixerTunerDataLine.java b/src/main/java/source/tuner/MixerTunerDataLine.java
similarity index 100%
rename from src/source/tuner/MixerTunerDataLine.java
rename to src/main/java/source/tuner/MixerTunerDataLine.java
diff --git a/src/source/tuner/MixerTunerType.java b/src/main/java/source/tuner/MixerTunerType.java
similarity index 100%
rename from src/source/tuner/MixerTunerType.java
rename to src/main/java/source/tuner/MixerTunerType.java
diff --git a/src/source/tuner/Tuner.java b/src/main/java/source/tuner/Tuner.java
similarity index 100%
rename from src/source/tuner/Tuner.java
rename to src/main/java/source/tuner/Tuner.java
diff --git a/src/source/tuner/TunerChannel.java b/src/main/java/source/tuner/TunerChannel.java
similarity index 100%
rename from src/source/tuner/TunerChannel.java
rename to src/main/java/source/tuner/TunerChannel.java
diff --git a/src/source/tuner/TunerChannelProvider.java b/src/main/java/source/tuner/TunerChannelProvider.java
similarity index 100%
rename from src/source/tuner/TunerChannelProvider.java
rename to src/main/java/source/tuner/TunerChannelProvider.java
diff --git a/src/source/tuner/TunerChannelSource.java b/src/main/java/source/tuner/TunerChannelSource.java
similarity index 100%
rename from src/source/tuner/TunerChannelSource.java
rename to src/main/java/source/tuner/TunerChannelSource.java
diff --git a/src/source/tuner/TunerClass.java b/src/main/java/source/tuner/TunerClass.java
similarity index 100%
rename from src/source/tuner/TunerClass.java
rename to src/main/java/source/tuner/TunerClass.java
diff --git a/src/source/tuner/TunerController.java b/src/main/java/source/tuner/TunerController.java
similarity index 100%
rename from src/source/tuner/TunerController.java
rename to src/main/java/source/tuner/TunerController.java
diff --git a/src/source/tuner/TunerEditor.java b/src/main/java/source/tuner/TunerEditor.java
similarity index 100%
rename from src/source/tuner/TunerEditor.java
rename to src/main/java/source/tuner/TunerEditor.java
diff --git a/src/source/tuner/TunerEvent.java b/src/main/java/source/tuner/TunerEvent.java
similarity index 100%
rename from src/source/tuner/TunerEvent.java
rename to src/main/java/source/tuner/TunerEvent.java
diff --git a/src/source/tuner/TunerManager.java b/src/main/java/source/tuner/TunerManager.java
similarity index 100%
rename from src/source/tuner/TunerManager.java
rename to src/main/java/source/tuner/TunerManager.java
diff --git a/src/source/tuner/TunerModel.java b/src/main/java/source/tuner/TunerModel.java
similarity index 100%
rename from src/source/tuner/TunerModel.java
rename to src/main/java/source/tuner/TunerModel.java
diff --git a/src/source/tuner/TunerSourceEditor.java b/src/main/java/source/tuner/TunerSourceEditor.java
similarity index 100%
rename from src/source/tuner/TunerSourceEditor.java
rename to src/main/java/source/tuner/TunerSourceEditor.java
diff --git a/src/source/tuner/TunerSpectralDisplayManager.java b/src/main/java/source/tuner/TunerSpectralDisplayManager.java
similarity index 100%
rename from src/source/tuner/TunerSpectralDisplayManager.java
rename to src/main/java/source/tuner/TunerSpectralDisplayManager.java
diff --git a/src/source/tuner/TunerType.java b/src/main/java/source/tuner/TunerType.java
similarity index 100%
rename from src/source/tuner/TunerType.java
rename to src/main/java/source/tuner/TunerType.java
diff --git a/src/source/tuner/TunerViewPanel.java b/src/main/java/source/tuner/TunerViewPanel.java
similarity index 100%
rename from src/source/tuner/TunerViewPanel.java
rename to src/main/java/source/tuner/TunerViewPanel.java
diff --git a/src/source/tuner/airspy/AirspyDeviceInformation.java b/src/main/java/source/tuner/airspy/AirspyDeviceInformation.java
similarity index 100%
rename from src/source/tuner/airspy/AirspyDeviceInformation.java
rename to src/main/java/source/tuner/airspy/AirspyDeviceInformation.java
diff --git a/src/source/tuner/airspy/AirspySampleAdapter.java b/src/main/java/source/tuner/airspy/AirspySampleAdapter.java
similarity index 100%
rename from src/source/tuner/airspy/AirspySampleAdapter.java
rename to src/main/java/source/tuner/airspy/AirspySampleAdapter.java
diff --git a/src/source/tuner/airspy/AirspySampleRate.java b/src/main/java/source/tuner/airspy/AirspySampleRate.java
similarity index 100%
rename from src/source/tuner/airspy/AirspySampleRate.java
rename to src/main/java/source/tuner/airspy/AirspySampleRate.java
diff --git a/src/source/tuner/airspy/AirspyTuner.java b/src/main/java/source/tuner/airspy/AirspyTuner.java
similarity index 100%
rename from src/source/tuner/airspy/AirspyTuner.java
rename to src/main/java/source/tuner/airspy/AirspyTuner.java
diff --git a/src/source/tuner/airspy/AirspyTunerConfiguration.java b/src/main/java/source/tuner/airspy/AirspyTunerConfiguration.java
similarity index 100%
rename from src/source/tuner/airspy/AirspyTunerConfiguration.java
rename to src/main/java/source/tuner/airspy/AirspyTunerConfiguration.java
diff --git a/src/source/tuner/airspy/AirspyTunerController.java b/src/main/java/source/tuner/airspy/AirspyTunerController.java
similarity index 100%
rename from src/source/tuner/airspy/AirspyTunerController.java
rename to src/main/java/source/tuner/airspy/AirspyTunerController.java
diff --git a/src/source/tuner/airspy/AirspyTunerEditor.java b/src/main/java/source/tuner/airspy/AirspyTunerEditor.java
similarity index 100%
rename from src/source/tuner/airspy/AirspyTunerEditor.java
rename to src/main/java/source/tuner/airspy/AirspyTunerEditor.java
diff --git a/src/source/tuner/configuration/TunerConfiguration.java b/src/main/java/source/tuner/configuration/TunerConfiguration.java
similarity index 100%
rename from src/source/tuner/configuration/TunerConfiguration.java
rename to src/main/java/source/tuner/configuration/TunerConfiguration.java
diff --git a/src/source/tuner/configuration/TunerConfigurationEditor.java b/src/main/java/source/tuner/configuration/TunerConfigurationEditor.java
similarity index 100%
rename from src/source/tuner/configuration/TunerConfigurationEditor.java
rename to src/main/java/source/tuner/configuration/TunerConfigurationEditor.java
diff --git a/src/source/tuner/configuration/TunerConfigurationEvent.java b/src/main/java/source/tuner/configuration/TunerConfigurationEvent.java
similarity index 100%
rename from src/source/tuner/configuration/TunerConfigurationEvent.java
rename to src/main/java/source/tuner/configuration/TunerConfigurationEvent.java
diff --git a/src/source/tuner/configuration/TunerConfigurationFactory.java b/src/main/java/source/tuner/configuration/TunerConfigurationFactory.java
similarity index 100%
rename from src/source/tuner/configuration/TunerConfigurationFactory.java
rename to src/main/java/source/tuner/configuration/TunerConfigurationFactory.java
diff --git a/src/source/tuner/configuration/TunerConfigurationModel.java b/src/main/java/source/tuner/configuration/TunerConfigurationModel.java
similarity index 100%
rename from src/source/tuner/configuration/TunerConfigurationModel.java
rename to src/main/java/source/tuner/configuration/TunerConfigurationModel.java
diff --git a/src/source/tuner/ettus/B100Tuner.java b/src/main/java/source/tuner/ettus/B100Tuner.java
similarity index 100%
rename from src/source/tuner/ettus/B100Tuner.java
rename to src/main/java/source/tuner/ettus/B100Tuner.java
diff --git a/src/source/tuner/ettus/B100TunerEditorPanel.java b/src/main/java/source/tuner/ettus/B100TunerEditorPanel.java
similarity index 100%
rename from src/source/tuner/ettus/B100TunerEditorPanel.java
rename to src/main/java/source/tuner/ettus/B100TunerEditorPanel.java
diff --git a/src/source/tuner/fcd/FCDCommand.java b/src/main/java/source/tuner/fcd/FCDCommand.java
similarity index 100%
rename from src/source/tuner/fcd/FCDCommand.java
rename to src/main/java/source/tuner/fcd/FCDCommand.java
diff --git a/src/source/tuner/fcd/FCDModel.java b/src/main/java/source/tuner/fcd/FCDModel.java
similarity index 100%
rename from src/source/tuner/fcd/FCDModel.java
rename to src/main/java/source/tuner/fcd/FCDModel.java
diff --git a/src/source/tuner/fcd/FCDTuner.java b/src/main/java/source/tuner/fcd/FCDTuner.java
similarity index 100%
rename from src/source/tuner/fcd/FCDTuner.java
rename to src/main/java/source/tuner/fcd/FCDTuner.java
diff --git a/src/source/tuner/fcd/FCDTunerController.java b/src/main/java/source/tuner/fcd/FCDTunerController.java
similarity index 100%
rename from src/source/tuner/fcd/FCDTunerController.java
rename to src/main/java/source/tuner/fcd/FCDTunerController.java
diff --git a/src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java b/src/main/java/source/tuner/fcd/proV1/FCD1TunerConfiguration.java
similarity index 100%
rename from src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java
rename to src/main/java/source/tuner/fcd/proV1/FCD1TunerConfiguration.java
diff --git a/src/source/tuner/fcd/proV1/FCD1TunerController.java b/src/main/java/source/tuner/fcd/proV1/FCD1TunerController.java
similarity index 100%
rename from src/source/tuner/fcd/proV1/FCD1TunerController.java
rename to src/main/java/source/tuner/fcd/proV1/FCD1TunerController.java
diff --git a/src/source/tuner/fcd/proV1/FCD1TunerEditor.java b/src/main/java/source/tuner/fcd/proV1/FCD1TunerEditor.java
similarity index 100%
rename from src/source/tuner/fcd/proV1/FCD1TunerEditor.java
rename to src/main/java/source/tuner/fcd/proV1/FCD1TunerEditor.java
diff --git a/src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java b/src/main/java/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java
similarity index 100%
rename from src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java
rename to src/main/java/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java
diff --git a/src/source/tuner/fcd/proplusV2/FCD2TunerController.java b/src/main/java/source/tuner/fcd/proplusV2/FCD2TunerController.java
similarity index 100%
rename from src/source/tuner/fcd/proplusV2/FCD2TunerController.java
rename to src/main/java/source/tuner/fcd/proplusV2/FCD2TunerController.java
diff --git a/src/source/tuner/fcd/proplusV2/FCD2TunerEditor.java b/src/main/java/source/tuner/fcd/proplusV2/FCD2TunerEditor.java
similarity index 100%
rename from src/source/tuner/fcd/proplusV2/FCD2TunerEditor.java
rename to src/main/java/source/tuner/fcd/proplusV2/FCD2TunerEditor.java
diff --git a/src/source/tuner/frequency/DCTrackingFrequencyControl.java b/src/main/java/source/tuner/frequency/DCTrackingFrequencyControl.java
similarity index 100%
rename from src/source/tuner/frequency/DCTrackingFrequencyControl.java
rename to src/main/java/source/tuner/frequency/DCTrackingFrequencyControl.java
diff --git a/src/source/tuner/frequency/FrequencyChangeEvent.java b/src/main/java/source/tuner/frequency/FrequencyChangeEvent.java
similarity index 100%
rename from src/source/tuner/frequency/FrequencyChangeEvent.java
rename to src/main/java/source/tuner/frequency/FrequencyChangeEvent.java
diff --git a/src/source/tuner/frequency/FrequencyChangeProcessorWrapper.java b/src/main/java/source/tuner/frequency/FrequencyChangeProcessorWrapper.java
similarity index 100%
rename from src/source/tuner/frequency/FrequencyChangeProcessorWrapper.java
rename to src/main/java/source/tuner/frequency/FrequencyChangeProcessorWrapper.java
diff --git a/src/source/tuner/frequency/FrequencyController.java b/src/main/java/source/tuner/frequency/FrequencyController.java
similarity index 100%
rename from src/source/tuner/frequency/FrequencyController.java
rename to src/main/java/source/tuner/frequency/FrequencyController.java
diff --git a/src/source/tuner/frequency/FrequencyLimitException.java b/src/main/java/source/tuner/frequency/FrequencyLimitException.java
similarity index 100%
rename from src/source/tuner/frequency/FrequencyLimitException.java
rename to src/main/java/source/tuner/frequency/FrequencyLimitException.java
diff --git a/src/source/tuner/frequency/IFrequencyChangeListener.java b/src/main/java/source/tuner/frequency/IFrequencyChangeListener.java
similarity index 100%
rename from src/source/tuner/frequency/IFrequencyChangeListener.java
rename to src/main/java/source/tuner/frequency/IFrequencyChangeListener.java
diff --git a/src/source/tuner/frequency/IFrequencyChangeProcessor.java b/src/main/java/source/tuner/frequency/IFrequencyChangeProcessor.java
similarity index 100%
rename from src/source/tuner/frequency/IFrequencyChangeProcessor.java
rename to src/main/java/source/tuner/frequency/IFrequencyChangeProcessor.java
diff --git a/src/source/tuner/frequency/IFrequencyChangeProvider.java b/src/main/java/source/tuner/frequency/IFrequencyChangeProvider.java
similarity index 100%
rename from src/source/tuner/frequency/IFrequencyChangeProvider.java
rename to src/main/java/source/tuner/frequency/IFrequencyChangeProvider.java
diff --git a/src/source/tuner/hackrf/HackRFTuner.java b/src/main/java/source/tuner/hackrf/HackRFTuner.java
similarity index 100%
rename from src/source/tuner/hackrf/HackRFTuner.java
rename to src/main/java/source/tuner/hackrf/HackRFTuner.java
diff --git a/src/source/tuner/hackrf/HackRFTunerConfiguration.java b/src/main/java/source/tuner/hackrf/HackRFTunerConfiguration.java
similarity index 100%
rename from src/source/tuner/hackrf/HackRFTunerConfiguration.java
rename to src/main/java/source/tuner/hackrf/HackRFTunerConfiguration.java
diff --git a/src/source/tuner/hackrf/HackRFTunerController.java b/src/main/java/source/tuner/hackrf/HackRFTunerController.java
similarity index 100%
rename from src/source/tuner/hackrf/HackRFTunerController.java
rename to src/main/java/source/tuner/hackrf/HackRFTunerController.java
diff --git a/src/source/tuner/hackrf/HackRFTunerEditor.java b/src/main/java/source/tuner/hackrf/HackRFTunerEditor.java
similarity index 100%
rename from src/source/tuner/hackrf/HackRFTunerEditor.java
rename to src/main/java/source/tuner/hackrf/HackRFTunerEditor.java
diff --git a/src/source/tuner/rtl/RTL2832Tuner.java b/src/main/java/source/tuner/rtl/RTL2832Tuner.java
similarity index 100%
rename from src/source/tuner/rtl/RTL2832Tuner.java
rename to src/main/java/source/tuner/rtl/RTL2832Tuner.java
diff --git a/src/source/tuner/rtl/RTL2832TunerController.java b/src/main/java/source/tuner/rtl/RTL2832TunerController.java
similarity index 100%
rename from src/source/tuner/rtl/RTL2832TunerController.java
rename to src/main/java/source/tuner/rtl/RTL2832TunerController.java
diff --git a/src/source/tuner/rtl/e4k/E4KTunerConfiguration.java b/src/main/java/source/tuner/rtl/e4k/E4KTunerConfiguration.java
similarity index 100%
rename from src/source/tuner/rtl/e4k/E4KTunerConfiguration.java
rename to src/main/java/source/tuner/rtl/e4k/E4KTunerConfiguration.java
diff --git a/src/source/tuner/rtl/e4k/E4KTunerController.java b/src/main/java/source/tuner/rtl/e4k/E4KTunerController.java
similarity index 100%
rename from src/source/tuner/rtl/e4k/E4KTunerController.java
rename to src/main/java/source/tuner/rtl/e4k/E4KTunerController.java
diff --git a/src/source/tuner/rtl/e4k/E4KTunerEditor.java b/src/main/java/source/tuner/rtl/e4k/E4KTunerEditor.java
similarity index 100%
rename from src/source/tuner/rtl/e4k/E4KTunerEditor.java
rename to src/main/java/source/tuner/rtl/e4k/E4KTunerEditor.java
diff --git a/src/source/tuner/rtl/r820t/R820TTunerConfiguration.java b/src/main/java/source/tuner/rtl/r820t/R820TTunerConfiguration.java
similarity index 100%
rename from src/source/tuner/rtl/r820t/R820TTunerConfiguration.java
rename to src/main/java/source/tuner/rtl/r820t/R820TTunerConfiguration.java
diff --git a/src/source/tuner/rtl/r820t/R820TTunerController.java b/src/main/java/source/tuner/rtl/r820t/R820TTunerController.java
similarity index 100%
rename from src/source/tuner/rtl/r820t/R820TTunerController.java
rename to src/main/java/source/tuner/rtl/r820t/R820TTunerController.java
diff --git a/src/source/tuner/rtl/r820t/R820TTunerEditor.java b/src/main/java/source/tuner/rtl/r820t/R820TTunerEditor.java
similarity index 100%
rename from src/source/tuner/rtl/r820t/R820TTunerEditor.java
rename to src/main/java/source/tuner/rtl/r820t/R820TTunerEditor.java
diff --git a/src/source/tuner/usb/USBTransferProcessor.java b/src/main/java/source/tuner/usb/USBTransferProcessor.java
similarity index 100%
rename from src/source/tuner/usb/USBTransferProcessor.java
rename to src/main/java/source/tuner/usb/USBTransferProcessor.java
diff --git a/src/source/tuner/usb/USBTunerDevice.java b/src/main/java/source/tuner/usb/USBTunerDevice.java
similarity index 100%
rename from src/source/tuner/usb/USBTunerDevice.java
rename to src/main/java/source/tuner/usb/USBTunerDevice.java
diff --git a/src/source/tuner/usb/USBUtils.java b/src/main/java/source/tuner/usb/USBUtils.java
similarity index 100%
rename from src/source/tuner/usb/USBUtils.java
rename to src/main/java/source/tuner/usb/USBUtils.java
diff --git a/src/source/wave/ComplexWaveSource.java b/src/main/java/source/wave/ComplexWaveSource.java
similarity index 100%
rename from src/source/wave/ComplexWaveSource.java
rename to src/main/java/source/wave/ComplexWaveSource.java
diff --git a/src/source/wave/RealWaveSource.java b/src/main/java/source/wave/RealWaveSource.java
similarity index 100%
rename from src/source/wave/RealWaveSource.java
rename to src/main/java/source/wave/RealWaveSource.java
diff --git a/src/spectrum/ChannelOverlayPanel.java b/src/main/java/spectrum/ChannelOverlayPanel.java
similarity index 100%
rename from src/spectrum/ChannelOverlayPanel.java
rename to src/main/java/spectrum/ChannelOverlayPanel.java
diff --git a/src/spectrum/ChannelSpectrumPanel.java b/src/main/java/spectrum/ChannelSpectrumPanel.java
similarity index 100%
rename from src/spectrum/ChannelSpectrumPanel.java
rename to src/main/java/spectrum/ChannelSpectrumPanel.java
diff --git a/src/spectrum/DFTProcessor.java b/src/main/java/spectrum/DFTProcessor.java
similarity index 100%
rename from src/spectrum/DFTProcessor.java
rename to src/main/java/spectrum/DFTProcessor.java
diff --git a/src/spectrum/DFTResultsListener.java b/src/main/java/spectrum/DFTResultsListener.java
similarity index 100%
rename from src/spectrum/DFTResultsListener.java
rename to src/main/java/spectrum/DFTResultsListener.java
diff --git a/src/spectrum/DFTResultsProvider.java b/src/main/java/spectrum/DFTResultsProvider.java
similarity index 100%
rename from src/spectrum/DFTResultsProvider.java
rename to src/main/java/spectrum/DFTResultsProvider.java
diff --git a/src/spectrum/DFTSize.java b/src/main/java/spectrum/DFTSize.java
similarity index 100%
rename from src/spectrum/DFTSize.java
rename to src/main/java/spectrum/DFTSize.java
diff --git a/src/spectrum/IDFTWidthChangeProcessor.java b/src/main/java/spectrum/IDFTWidthChangeProcessor.java
similarity index 100%
rename from src/spectrum/IDFTWidthChangeProcessor.java
rename to src/main/java/spectrum/IDFTWidthChangeProcessor.java
diff --git a/src/spectrum/OverlayPanel.java b/src/main/java/spectrum/OverlayPanel.java
similarity index 100%
rename from src/spectrum/OverlayPanel.java
rename to src/main/java/spectrum/OverlayPanel.java
diff --git a/src/spectrum/Pausable.java b/src/main/java/spectrum/Pausable.java
similarity index 100%
rename from src/spectrum/Pausable.java
rename to src/main/java/spectrum/Pausable.java
diff --git a/src/spectrum/SpectralDisplayAdjuster.java b/src/main/java/spectrum/SpectralDisplayAdjuster.java
similarity index 100%
rename from src/spectrum/SpectralDisplayAdjuster.java
rename to src/main/java/spectrum/SpectralDisplayAdjuster.java
diff --git a/src/spectrum/SpectralDisplayPanel.java b/src/main/java/spectrum/SpectralDisplayPanel.java
similarity index 100%
rename from src/spectrum/SpectralDisplayPanel.java
rename to src/main/java/spectrum/SpectralDisplayPanel.java
diff --git a/src/spectrum/SpectrumFrame.java b/src/main/java/spectrum/SpectrumFrame.java
similarity index 100%
rename from src/spectrum/SpectrumFrame.java
rename to src/main/java/spectrum/SpectrumFrame.java
diff --git a/src/spectrum/SpectrumPanel.java b/src/main/java/spectrum/SpectrumPanel.java
similarity index 100%
rename from src/spectrum/SpectrumPanel.java
rename to src/main/java/spectrum/SpectrumPanel.java
diff --git a/src/spectrum/WaterfallColorModel.java b/src/main/java/spectrum/WaterfallColorModel.java
similarity index 100%
rename from src/spectrum/WaterfallColorModel.java
rename to src/main/java/spectrum/WaterfallColorModel.java
diff --git a/src/spectrum/WaterfallPanel.java b/src/main/java/spectrum/WaterfallPanel.java
similarity index 100%
rename from src/spectrum/WaterfallPanel.java
rename to src/main/java/spectrum/WaterfallPanel.java
diff --git a/src/spectrum/converter/ComplexDecibelConverter.java b/src/main/java/spectrum/converter/ComplexDecibelConverter.java
similarity index 100%
rename from src/spectrum/converter/ComplexDecibelConverter.java
rename to src/main/java/spectrum/converter/ComplexDecibelConverter.java
diff --git a/src/spectrum/converter/DFTResultsConverter.java b/src/main/java/spectrum/converter/DFTResultsConverter.java
similarity index 100%
rename from src/spectrum/converter/DFTResultsConverter.java
rename to src/main/java/spectrum/converter/DFTResultsConverter.java
diff --git a/src/spectrum/converter/RealDecibelConverter.java b/src/main/java/spectrum/converter/RealDecibelConverter.java
similarity index 100%
rename from src/spectrum/converter/RealDecibelConverter.java
rename to src/main/java/spectrum/converter/RealDecibelConverter.java
diff --git a/src/spectrum/menu/AveragingItem.java b/src/main/java/spectrum/menu/AveragingItem.java
similarity index 100%
rename from src/spectrum/menu/AveragingItem.java
rename to src/main/java/spectrum/menu/AveragingItem.java
diff --git a/src/spectrum/menu/DFTSizeItem.java b/src/main/java/spectrum/menu/DFTSizeItem.java
similarity index 100%
rename from src/spectrum/menu/DFTSizeItem.java
rename to src/main/java/spectrum/menu/DFTSizeItem.java
diff --git a/src/spectrum/menu/FFTWindowTypeItem.java b/src/main/java/spectrum/menu/FFTWindowTypeItem.java
similarity index 100%
rename from src/spectrum/menu/FFTWindowTypeItem.java
rename to src/main/java/spectrum/menu/FFTWindowTypeItem.java
diff --git a/src/spectrum/menu/FrameRateItem.java b/src/main/java/spectrum/menu/FrameRateItem.java
similarity index 100%
rename from src/spectrum/menu/FrameRateItem.java
rename to src/main/java/spectrum/menu/FrameRateItem.java
diff --git a/src/spectrum/menu/SmoothingItem.java b/src/main/java/spectrum/menu/SmoothingItem.java
similarity index 100%
rename from src/spectrum/menu/SmoothingItem.java
rename to src/main/java/spectrum/menu/SmoothingItem.java
diff --git a/src/spectrum/menu/SmoothingTypeItem.java b/src/main/java/spectrum/menu/SmoothingTypeItem.java
similarity index 100%
rename from src/spectrum/menu/SmoothingTypeItem.java
rename to src/main/java/spectrum/menu/SmoothingTypeItem.java
diff --git a/src/util/Angle.java b/src/main/java/util/Angle.java
similarity index 100%
rename from src/util/Angle.java
rename to src/main/java/util/Angle.java
diff --git a/src/util/ArcTangent.java b/src/main/java/util/ArcTangent.java
similarity index 100%
rename from src/util/ArcTangent.java
rename to src/main/java/util/ArcTangent.java
diff --git a/src/util/ColorIcon.java b/src/main/java/util/ColorIcon.java
similarity index 100%
rename from src/util/ColorIcon.java
rename to src/main/java/util/ColorIcon.java
diff --git a/src/util/MemoryUsageLogger.java b/src/main/java/util/MemoryUsageLogger.java
similarity index 100%
rename from src/util/MemoryUsageLogger.java
rename to src/main/java/util/MemoryUsageLogger.java
diff --git a/src/util/StringUtils.java b/src/main/java/util/StringUtils.java
similarity index 100%
rename from src/util/StringUtils.java
rename to src/main/java/util/StringUtils.java
diff --git a/src/util/ThreadPool.java b/src/main/java/util/ThreadPool.java
similarity index 100%
rename from src/util/ThreadPool.java
rename to src/main/java/util/ThreadPool.java
diff --git a/src/util/TimeStamp.java b/src/main/java/util/TimeStamp.java
similarity index 100%
rename from src/util/TimeStamp.java
rename to src/main/java/util/TimeStamp.java
diff --git a/src/util/XTEA.java b/src/main/java/util/XTEA.java
similarity index 100%
rename from src/util/XTEA.java
rename to src/main/java/util/XTEA.java
diff --git a/src/source/tuner/rtl/r820t/.directory b/src/source/tuner/rtl/r820t/.directory
deleted file mode 100644
index 93d3d305..00000000
--- a/src/source/tuner/rtl/r820t/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2014,5,10,7,19,1
-Version=3
-ViewMode=1
diff --git a/src/spectrum/.directory b/src/spectrum/.directory
deleted file mode 100644
index 18c505d9..00000000
--- a/src/spectrum/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2014,2,4,19,35,46
-Version=3
-ViewMode=1