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 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 overlay) - { - Painter 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 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 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 overlay) + { + Painter 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 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 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 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 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 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> 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> 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> 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> 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> 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> 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